{"version":3,"sources":["../../../src/raydium/liquidity/stable.ts","../../../src/marshmallow/index.ts","../../../src/marshmallow/buffer-layout.ts"],"sourcesContent":["import { Connection, PublicKey } from \"@solana/web3.js\";\n\nimport { seq, struct, u64 } from \"@/marshmallow\";\n\nexport const MODEL_DATA_PUBKEY = new PublicKey(\"CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo\");\nconst ELEMENT_SIZE = 50000;\n\nexport const DataElement = struct([u64(\"x\"), u64(\"y\"), u64(\"price\")]);\n\nexport const modelDataInfoLayout = struct([\n  u64(\"accountType\"),\n  u64(\"status\"),\n  u64(\"multiplier\"),\n  u64(\"validDataCount\"),\n  seq(DataElement, ELEMENT_SIZE, \"DataElement\"),\n]);\n\nexport interface StableModelLayout {\n  accountType: number;\n  status: number;\n  multiplier: number;\n  validDataCount: number;\n  DataElement: { x: number; y: number; price: number }[];\n}\n\nfunction estimateRangeByXyReal(_xReal: number, _yReal: number): number[] {\n  return [0, ELEMENT_SIZE - 2];\n}\n\nfunction estimateRangeByX(_x: number): number[] {\n  return [0, ELEMENT_SIZE - 2];\n}\n\nfunction estimateRangeByY(_y: number): number[] {\n  return [0, ELEMENT_SIZE - 2];\n}\n\nfunction getMininumRangeByXyReal(\n  layoutData: StableModelLayout,\n  xReal: number,\n  yReal: number,\n): [number, number, boolean] {\n  const [min, max] = estimateRangeByXyReal(xReal, yReal);\n  let minRangeIdx = min;\n  let maxRangeIdx = max;\n  let mid = 0;\n  const target = (xReal * layoutData.multiplier) / yReal;\n  while (minRangeIdx <= maxRangeIdx) {\n    mid = Math.floor((maxRangeIdx + minRangeIdx) / 2);\n    if (mid === 0 || mid >= ELEMENT_SIZE - 2) {\n      return [mid, mid, false];\n    }\n    const cur = (layoutData.DataElement[mid].x * layoutData.multiplier) / layoutData.DataElement[mid].y;\n    const left = (layoutData.DataElement[mid - 1].x * layoutData.multiplier) / layoutData.DataElement[mid - 1].y;\n    const right = (layoutData.DataElement[mid + 1].x * layoutData.multiplier) / layoutData.DataElement[mid + 1].y;\n\n    if (target === cur) {\n      return [mid, mid, true];\n    } else if (target === left) {\n      return [mid - 1, mid - 1, true];\n    } else if (target === right) {\n      return [mid + 1, mid + 1, true];\n    } else if (target < left) {\n      maxRangeIdx = mid - 1;\n    } else if (target > left && target < cur) {\n      return [mid - 1, mid, true];\n    } else if (target > cur && target < right) {\n      return [mid, mid + 1, true];\n    } else {\n      minRangeIdx = mid + 1;\n    }\n  }\n  return [mid, mid, false];\n}\nfunction getRatio(layoutData: StableModelLayout, xReal: number, yReal: number): number {\n  const [minRangeIdx, maxRangeIdx, find] = getMininumRangeByXyReal(layoutData, xReal, yReal);\n\n  if (!find) {\n    return 0;\n  }\n\n  if (minRangeIdx === maxRangeIdx) {\n    const x = layoutData.DataElement[minRangeIdx].x;\n    const ratio = (xReal * layoutData.multiplier) / x;\n    return ratio;\n  } else {\n    const x1 = layoutData.DataElement[minRangeIdx].x;\n    const y1 = layoutData.DataElement[minRangeIdx].y;\n    const x2 = layoutData.DataElement[maxRangeIdx].x;\n    const y2 = layoutData.DataElement[maxRangeIdx].y;\n\n    const xDenominator = yReal * (x2 * y1 - x1 * y2);\n    const xNumerator1 = x1 * xDenominator;\n    const xNumerator2 = (x2 - x1) * (xReal * y1 - x1 * yReal) * y2;\n\n    const xNumerator = xNumerator1 + xNumerator2;\n    const ratio = (xReal * layoutData.multiplier * xDenominator) / xNumerator;\n    return ratio;\n  }\n}\n\nfunction realToTable(layoutData: StableModelLayout, realValue: number, ratio: number): number {\n  return (realValue * layoutData.multiplier) / ratio;\n}\n\nfunction tableToReal(layoutData: StableModelLayout, tableValue: number, ratio: number): number {\n  return (tableValue * ratio) / layoutData.multiplier;\n}\n\nfunction getMinimumRangeByX(layoutData: StableModelLayout, x: number): [number, number, boolean] {\n  const [min, max] = estimateRangeByX(x);\n  let minRangeIdx = min;\n  let maxRangeIdx = max;\n  let mid = 0;\n  const target = x;\n  while (minRangeIdx < maxRangeIdx) {\n    mid = Math.floor((maxRangeIdx + minRangeIdx) / 2);\n\n    if (mid <= 0 || mid > ELEMENT_SIZE - 2) {\n      return [mid, mid, false];\n    }\n    const cur = layoutData.DataElement[mid].x;\n    const left = layoutData.DataElement[mid - 1].x;\n    const right = layoutData.DataElement[mid + 1].x;\n\n    if (target === cur) return [mid, mid, true];\n    else if (target === left) return [mid - 1, mid - 1, true];\n    else if (target === right) return [mid + 1, mid + 1, true];\n    else if (target < left) maxRangeIdx = mid - 1;\n    else if (target > left && target < cur) return [mid - 1, mid, true];\n    else if (target > cur && target < right) return [mid, mid + 1, true];\n    else minRangeIdx = mid + 1;\n  }\n  return [mid, mid, false];\n}\n\nfunction getMinimumRangeByY(layoutData: StableModelLayout, y: number): [number, number, boolean] {\n  const [min, max] = estimateRangeByY(y);\n  let minRangeIdx = min;\n  let maxRangeIdx = max;\n  let mid = 0;\n  const target = y;\n  while (minRangeIdx <= maxRangeIdx) {\n    mid = Math.floor((maxRangeIdx + minRangeIdx) / 2);\n    if (mid <= 0 || mid >= ELEMENT_SIZE - 2) {\n      return [mid, mid, false];\n    }\n\n    const cur = layoutData.DataElement[mid].y;\n    const left = layoutData.DataElement[mid - 1].y;\n    const right = layoutData.DataElement[mid + 1].y;\n    if (target === cur) return [mid, mid, true];\n    else if (target === left) return [mid - 1, mid - 1, true];\n    else if (target === right) return [mid + 1, mid + 1, true];\n    else if (target < right) {\n      minRangeIdx = mid + 1;\n    } else if (target < left && target > cur) return [mid - 1, mid, true];\n    else if (target < cur && target > right) return [mid, mid + 1, true];\n    else maxRangeIdx = mid - 1;\n  }\n  return [mid, mid, false];\n}\n\nfunction getDataByX(\n  layoutData: StableModelLayout,\n  x: number,\n  dx: number,\n  priceUp: boolean,\n): [number, number, boolean, boolean] {\n  const xWithDx = priceUp ? x + dx : x - dx;\n  const [minIdx, maxIdx, find] = getMinimumRangeByX(layoutData, xWithDx);\n  if (!find) return [0, 0, false, find];\n\n  if (minIdx === maxIdx) return [layoutData.DataElement[maxIdx].price, layoutData.DataElement[maxIdx].y, false, find];\n  else {\n    const x1 = layoutData.DataElement[minIdx].x;\n    const x2 = layoutData.DataElement[maxIdx].x;\n    const p1 = layoutData.DataElement[minIdx].price;\n    const p2 = layoutData.DataElement[maxIdx].price;\n    const y1 = layoutData.DataElement[minIdx].y;\n    const y2 = layoutData.DataElement[maxIdx].y;\n\n    if (x >= x1 && x <= x2) {\n      if (priceUp) return [p2, y2, true, find];\n      else return [p1, y1, true, find];\n    } else {\n      let p, y;\n      if (priceUp) {\n        p = p1 + ((p2 - p1) * (x - x1)) / (x2 - x1);\n        y = y1 - ((xWithDx - x1) * layoutData.multiplier) / p2;\n      } else {\n        p = p1 + ((p2 - p1) * (x - x1)) / (x2 - x1);\n        y = y2 + ((x2 - xWithDx) * layoutData.multiplier) / p1;\n      }\n      return [p, y, false, find];\n    }\n  }\n}\n\nfunction getDataByY(\n  layoutData: StableModelLayout,\n  y: number,\n  dy: number,\n  priceUp: boolean,\n): [number, number, boolean, boolean] {\n  const yWithDy = priceUp ? y - dy : y + dy;\n  const [minIdx, maxIdx, find] = getMinimumRangeByY(layoutData, yWithDy);\n  if (!find) return [0, 0, false, find];\n  if (minIdx === maxIdx) return [layoutData.DataElement[maxIdx].price, layoutData.DataElement[maxIdx].x, false, find];\n  else {\n    const x1 = layoutData.DataElement[minIdx].x;\n    const x2 = layoutData.DataElement[maxIdx].x;\n    const p1 = layoutData.DataElement[minIdx].price;\n    const p2 = layoutData.DataElement[maxIdx].price;\n    const y1 = layoutData.DataElement[minIdx].y;\n    const y2 = layoutData.DataElement[maxIdx].y;\n\n    if (y >= y2 && y <= y1) {\n      return priceUp ? [p2, x2, true, find] : [p1, x1, true, find];\n    } else {\n      let p, x;\n      if (priceUp) {\n        p = p1 + ((p2 - p1) * (y1 - y)) / (y1 - y2);\n        x = x1 + (p2 * (y1 - yWithDy)) / layoutData.multiplier;\n      } else {\n        p = p1 + ((p2 - p1) * (y1 - y)) / (y1 - y2);\n        x = x2 - (p1 * (yWithDy - y2)) / layoutData.multiplier;\n      }\n      return [p, x, false, find];\n    }\n  }\n}\n\nfunction getMidPrice(layoutData: StableModelLayout, x: number): number {\n  const ret = getDataByX(layoutData, x, 0, false);\n  if (ret[3]) return ret[0];\n  else return 0;\n}\n\nexport function getDyByDxBaseIn(layoutData: StableModelLayout, xReal: number, yReal: number, dxReal: number): number {\n  const ratio = getRatio(layoutData, xReal, yReal);\n  const x = realToTable(layoutData, xReal, ratio);\n  const y = realToTable(layoutData, yReal, ratio);\n  const dx = realToTable(layoutData, dxReal, ratio);\n  const priceUp = true;\n  const [p, y2, lessTrade, find] = getDataByX(layoutData, x, dx, priceUp);\n  if (!find) return 0;\n  if (lessTrade) {\n    const dyReal = (dxReal * layoutData.multiplier) / p;\n    return dyReal;\n  } else {\n    const dy = y - y2;\n    const dyReal = tableToReal(layoutData, dy, ratio);\n    return dyReal;\n  }\n}\n\nexport function getDxByDyBaseIn(layoutData: StableModelLayout, xReal: number, yReal: number, dyReal: number): number {\n  const ratio = getRatio(layoutData, xReal, yReal);\n  const x = realToTable(layoutData, xReal, ratio);\n  const y = realToTable(layoutData, yReal, ratio);\n  const dy = realToTable(layoutData, dyReal, ratio);\n  const priceUp = false;\n  const [p, x2, lessTrade, find] = getDataByY(layoutData, y, dy, priceUp);\n  if (!find) return 0;\n  if (lessTrade) {\n    const dxReal = (dyReal * p) / layoutData.multiplier;\n    return dxReal;\n  } else {\n    const dx = x - x2;\n    const dxReal = tableToReal(layoutData, dx, ratio);\n    return dxReal;\n  }\n}\n\nexport function formatLayout(buffer: Buffer): StableModelLayout {\n  const layoutInfo = modelDataInfoLayout.decode(buffer);\n  return {\n    accountType: layoutInfo.accountType.toNumber(),\n    status: layoutInfo.status.toNumber(),\n    multiplier: layoutInfo.multiplier.toNumber(),\n    validDataCount: layoutInfo.validDataCount.toNumber(),\n    DataElement: layoutInfo.DataElement.map((item: any) => ({\n      x: item.x.toNumber(),\n      y: item.y.toNumber(),\n      price: item.price.toNumber(),\n    })),\n  };\n}\n\nexport function getStablePrice(\n  layoutData: StableModelLayout,\n  coinReal: number,\n  pcReal: number,\n  baseCoin: boolean,\n): number {\n  const price =\n    getMidPrice(layoutData, realToTable(layoutData, coinReal, getRatio(layoutData, coinReal, pcReal))) /\n    layoutData.multiplier;\n  return baseCoin ? price : 1 / price;\n}\n\nexport class StableLayout {\n  private readonly connection: Connection;\n  private _layoutData: StableModelLayout = {\n    accountType: 0,\n    status: 0,\n    multiplier: 0,\n    validDataCount: 0,\n    DataElement: [],\n  };\n\n  constructor({ connection }: { connection: Connection }) {\n    this.connection = connection;\n  }\n\n  get stableModelData(): StableModelLayout {\n    return this._layoutData;\n  }\n\n  public async initStableModelLayout(): Promise<void> {\n    if (this._layoutData.validDataCount === 0) {\n      if (this.connection) {\n        const acc = await this.connection.getAccountInfo(MODEL_DATA_PUBKEY);\n        if (acc) this._layoutData = formatLayout(acc?.data);\n      }\n    }\n  }\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BN, { isBN } from \"bn.js\";\n\nimport {\n  bits,\n  blob,\n  Blob,\n  Layout,\n  offset as _offset,\n  seq as _seq,\n  Structure as _Structure,\n  u32 as _u32,\n  u8 as _u8,\n  UInt,\n  union as _union,\n  Union as _Union,\n} from \"./buffer-layout\";\n\nexport * from \"./buffer-layout\";\nexport { blob };\n\nexport class BNLayout<P extends string = \"\"> extends Layout<BN, P> {\n  blob: Layout<Buffer>;\n  signed: boolean;\n\n  constructor(span: number, signed: boolean, property?: P) {\n    //@ts-expect-error type wrong for super()'s type different from extends, but it desn't matter\n    super(span, property);\n    this.blob = blob(span);\n    this.signed = signed;\n  }\n\n  /** @override */\n  decode(b: Buffer, offset = 0): BN {\n    const num = new BN(this.blob.decode(b, offset), 10, \"le\");\n    if (this.signed) {\n      return num.fromTwos(this.span * 8).clone();\n    }\n    return num;\n  }\n\n  /** @override */\n  encode(src: BN, b: Buffer, offset = 0): number {\n    if (typeof src === \"number\") src = new BN(src); // src will pass a number accidently in union\n    if (this.signed) {\n      src = src.toTwos(this.span * 8);\n    }\n    return this.blob.encode(src.toArrayLike(Buffer, \"le\", this.span), b, offset);\n  }\n}\n\nexport class WideBits<P extends string = \"\"> extends Layout<Record<string, boolean>, P> {\n  _lower: any;\n  _upper: any;\n  // TODO: unknown\n  constructor(property?: P) {\n    //@ts-expect-error type wrong for super()'s type different from extends , but it desn't matter\n    super(8, property);\n    this._lower = bits(_u32(), false);\n    this._upper = bits(_u32(), false);\n  }\n\n  addBoolean(property: string): void {\n    if (this._lower.fields.length < 32) {\n      this._lower.addBoolean(property);\n    } else {\n      this._upper.addBoolean(property);\n    }\n  }\n\n  decode(b: Buffer, offset = 0): Record<string, boolean> {\n    const lowerDecoded = this._lower.decode(b, offset);\n    const upperDecoded = this._upper.decode(b, offset + this._lower.span);\n    return { ...lowerDecoded, ...upperDecoded };\n  }\n\n  encode(src: any /* TEMP */, b: Buffer, offset = 0): any {\n    return this._lower.encode(src, b, offset) + this._upper.encode(src, b, offset + this._lower.span);\n  }\n}\n\nexport function u8<P extends string = \"\">(property?: P): UInt<number, P> {\n  return new UInt(1, property);\n}\n\nexport function u32<P extends string = \"\">(property?: P): UInt<number, P> {\n  return new UInt(4, property);\n}\n\nexport function u64<P extends string = \"\">(property?: P): BNLayout<P> {\n  return new BNLayout(8, false, property);\n}\n\nexport function u128<P extends string = \"\">(property?: P): BNLayout<P> {\n  return new BNLayout(16, false, property);\n}\n\nexport function i8<P extends string = \"\">(property?: P): BNLayout<P> {\n  return new BNLayout(1, true, property);\n}\n\nexport function i64<P extends string = \"\">(property?: P): BNLayout<P> {\n  return new BNLayout(8, true, property);\n}\n\nexport function i128<P extends string = \"\">(property?: P): BNLayout<P> {\n  return new BNLayout(16, true, property);\n}\n\nexport class WrappedLayout<T, U, P extends string = \"\"> extends Layout<U, P> {\n  layout: Layout<T>;\n  decoder: (data: T) => U;\n  encoder: (src: U) => T;\n\n  constructor(layout: Layout<T>, decoder: (data: T) => U, encoder: (src: U) => T, property?: P) {\n    //@ts-expect-error type wrong for super()'s type different from extends , but it desn't matter\n    super(layout.span, property);\n    this.layout = layout;\n    this.decoder = decoder;\n    this.encoder = encoder;\n  }\n\n  decode(b: Buffer, offset?: number): U {\n    return this.decoder(this.layout.decode(b, offset));\n  }\n\n  encode(src: U, b: Buffer, offset?: number): number {\n    return this.layout.encode(this.encoder(src), b, offset);\n  }\n\n  getSpan(b: Buffer, offset?: number): number {\n    return this.layout.getSpan(b, offset);\n  }\n}\n\nexport function publicKey<P extends string = \"\">(property?: P): Layout<PublicKey, P> {\n  return new WrappedLayout(\n    blob(32),\n    (b: Buffer) => new PublicKey(b),\n    (key: PublicKey) => key.toBuffer(),\n    property,\n  );\n}\n\nexport class OptionLayout<T, P> extends Layout<T | null, P> {\n  layout: Layout<T>;\n  discriminator: Layout<number>;\n\n  constructor(layout: Layout<T>, property?: P) {\n    //@ts-expect-error type wrong for super()'s type different from extends , but it desn't matter\n    super(-1, property);\n    this.layout = layout;\n    this.discriminator = _u8();\n  }\n\n  encode(src: T | null, b: Buffer, offset = 0): number {\n    if (src === null || src === undefined) {\n      return this.discriminator.encode(0, b, offset);\n    }\n    this.discriminator.encode(1, b, offset);\n    return this.layout.encode(src, b, offset + 1) + 1;\n  }\n\n  decode(b: Buffer, offset = 0): T | null {\n    const discriminator = this.discriminator.decode(b, offset);\n    if (discriminator === 0) {\n      return null;\n    } else if (discriminator === 1) {\n      return this.layout.decode(b, offset + 1);\n    }\n    throw new Error(\"Invalid option \" + this.property);\n  }\n\n  getSpan(b: Buffer, offset = 0): number {\n    const discriminator = this.discriminator.decode(b, offset);\n    if (discriminator === 0) {\n      return 1;\n    } else if (discriminator === 1) {\n      return this.layout.getSpan(b, offset + 1) + 1;\n    }\n    throw new Error(\"Invalid option \" + this.property);\n  }\n}\n\nexport function option<T, P extends string = \"\">(layout: Layout<T>, property?: P): Layout<T | null, P> {\n  return new OptionLayout<T, P>(layout, property);\n}\n\nexport function bool<P extends string = \"\">(property?: P): Layout<boolean, P> {\n  return new WrappedLayout(_u8(), decodeBool, encodeBool, property);\n}\n\nexport function decodeBool(value: number): boolean {\n  if (value === 0) {\n    return false;\n  } else if (value === 1) {\n    return true;\n  }\n  throw new Error(\"Invalid bool: \" + value);\n}\n\nexport function encodeBool(value: boolean): number {\n  return value ? 1 : 0;\n}\n\nexport function vec<T, P extends string = \"\">(elementLayout: Layout<T>, property?: P): Layout<T[], P> {\n  const length = _u32(\"length\");\n  const layout: Layout<{ values: T[] }> = struct([\n    length,\n    seq(elementLayout, _offset(length, -length.span), \"values\"),\n  ]) as any; // Something I don't know\n  return new WrappedLayout(\n    layout,\n    ({ values }) => values,\n    (values) => ({ values }),\n    property,\n  );\n}\n\nexport function tagged<T, P extends string = \"\">(tag: BN, layout: Layout<T>, property?: P): Layout<T, P> {\n  const wrappedLayout: Layout<{ tag: BN; data: T }> = struct([u64(\"tag\"), layout.replicate(\"data\")]) as any; // Something I don't know\n\n  function decodeTag({ tag: receivedTag, data }: { tag: BN; data: T }): T {\n    if (!receivedTag.eq(tag)) {\n      throw new Error(\"Invalid tag, expected: \" + tag.toString(\"hex\") + \", got: \" + receivedTag.toString(\"hex\"));\n    }\n    return data;\n  }\n\n  return new WrappedLayout(wrappedLayout, decodeTag, (data) => ({ tag, data }), property);\n}\n\nexport function vecU8<P extends string = \"\">(property?: P): Layout<Buffer, P> {\n  const length = _u32(\"length\");\n  const layout: Layout<{ data: Buffer }> = struct([length, blob(_offset(length, -length.span), \"data\")]) as any; // Something I don't know\n  return new WrappedLayout(\n    layout,\n    ({ data }) => data,\n    (data) => ({ data }),\n    property,\n  );\n}\n\nexport function str<P extends string = \"\">(property?: P): Layout<string, P> {\n  return new WrappedLayout(\n    vecU8(),\n    (data) => data.toString(\"utf-8\"),\n    (s) => Buffer.from(s, \"utf-8\"),\n    property,\n  );\n}\n\nexport interface EnumLayout<T, P extends string = \"\"> extends Layout<T, P> {\n  registry: Record<string, Layout<any>>;\n}\n\nexport function rustEnum<T, P extends string = \"\">(variants: Layout<any>[], property?: P): EnumLayout<T, P> {\n  const unionLayout = _union(_u8(), property);\n  variants.forEach((variant, index) => unionLayout.addVariant(index, variant, variant.property));\n  return unionLayout as any; // ?why use UnionLayout? This must be a fault\n}\n\nexport function array<T, P extends string = \"\">(\n  elementLayout: Layout<T>,\n  length: number,\n  property?: P,\n): Layout<T[], P> {\n  const layout = struct([seq(elementLayout, length, \"values\")]) as any as Layout<{ values: T[] }>; // Something I don't know\n  return new WrappedLayout(\n    layout,\n    ({ values }) => values,\n    (values) => ({ values }),\n    property,\n  );\n}\n\nexport class Structure<T, P, D> extends _Structure<T, P, D> {\n  /** @override */\n  decode(b: Buffer, offset?: number): D {\n    return super.decode(b, offset);\n  }\n}\n\nexport function struct<T, P extends string = \"\">(\n  fields: T,\n  property?: P,\n  decodePrefixes?: boolean,\n): T extends Layout<infer Value, infer Property>[]\n  ? Structure<\n      Value,\n      P,\n      {\n        [K in Exclude<Extract<Property, string>, \"\">]: Extract<T[number], Layout<any, K>> extends Layout<infer V, any>\n          ? V\n          : any;\n      }\n    >\n  : any {\n  //@ts-expect-error this type is not quite satisfied the define, but, never no need to worry about.\n  return new Structure(fields, property, decodePrefixes);\n}\n\nexport type GetLayoutSchemaFromStructure<T extends Structure<any, any, any>> = T extends Structure<any, any, infer S>\n  ? S\n  : any;\nexport type GetStructureFromLayoutSchema<S> = Structure<any, any, S>;\n\nexport class Union<Schema> extends _Union<Schema> {\n  encodeInstruction(instruction: any): Buffer {\n    const instructionMaxSpan = Math.max(...Object.values(this.registry).map((r) => r.span));\n    const b = Buffer.alloc(instructionMaxSpan);\n    return b.slice(0, this.encode(instruction, b));\n  }\n\n  decodeInstruction(instruction: any): Partial<Schema> {\n    return this.decode(instruction);\n  }\n}\nexport function union<UnionSchema extends { [key: string]: any } = any>(\n  discr: any,\n  defaultLayout?: any,\n  property?: string,\n): Union<UnionSchema> {\n  return new Union(discr, defaultLayout, property);\n}\n\nclass Zeros extends Blob {\n  decode(b: Buffer, offset: number): Buffer {\n    const slice = super.decode(b, offset);\n    if (!slice.every((v) => v === 0)) {\n      throw new Error(\"nonzero padding bytes\");\n    }\n    return slice;\n  }\n}\n\nexport function zeros(length: number): Zeros {\n  return new Zeros(length);\n}\n\nexport function seq<T, P extends string = \"\", AnotherP extends string = \"\">(\n  elementLayout: Layout<T, P>,\n  count: number | BN | Layout<BN | number, P>,\n  property?: AnotherP,\n): Layout<T[], AnotherP> {\n  let parsedCount: number;\n  const superCount =\n    typeof count === \"number\"\n      ? count\n      : isBN(count)\n      ? count.toNumber()\n      : new Proxy(count as unknown as Layout<number> /* pretend to be Layout<number> */, {\n          get(target, property): any {\n            if (!parsedCount) {\n              // get count in targetLayout. note that count may be BN\n              const countProperty = Reflect.get(target, \"count\");\n\n              // let targetLayout's  property:count be a number\n              parsedCount = isBN(countProperty) ? countProperty.toNumber() : countProperty;\n\n              // record the count\n              Reflect.set(target, \"count\", parsedCount);\n            }\n            return Reflect.get(target, property);\n          },\n          set(target, property, value): any {\n            if (property === \"count\") {\n              parsedCount = value;\n            }\n            return Reflect.set(target, property, value);\n          },\n        });\n\n  // @ts-expect-error force type\n  return _seq(elementLayout, superCount, property);\n}\n","import {\n  bits as _bits,\n  BitStructure as _BitStructure,\n  blob as _blob,\n  Blob as _Blob,\n  cstr as _cstr,\n  f32 as _f32,\n  f32be as _f32be,\n  f64 as _f64,\n  f64be as _f64be,\n  greedy as _greedy,\n  Layout as _Layout,\n  ns64 as _ns64,\n  ns64be as _ns64be,\n  nu64 as _nu64,\n  nu64be as _nu64be,\n  offset as _offset,\n  s16 as _s16,\n  s16be as _s16be,\n  s24 as _s24,\n  s24be as _s24be,\n  s32 as _s32,\n  s32be as _s32be,\n  s40 as _s40,\n  s40be as _s40be,\n  s48 as _s48,\n  s48be as _s48be,\n  s8 as _s8,\n  seq as _seq,\n  struct as _struct,\n  Structure as _Structure,\n  u16 as _u16,\n  u16be as _u16be,\n  u24 as _u24,\n  u24be as _u24be,\n  u32 as _u32,\n  u32be as _u32be,\n  u40 as _u40,\n  u40be as _u40be,\n  u48 as _u48,\n  u48be as _u48be,\n  u8 as _u8,\n  UInt as _UInt,\n  union as _union,\n  Union as _Union,\n  unionLayoutDiscriminator as _unionLayoutDiscriminator,\n  utf8 as _utf8,\n} from \"@solana/buffer-layout\";\n\n//#region ------------------- Layout -------------------\nexport interface Layout<T = any, P = \"\"> {\n  span: number;\n  property?: P;\n  decode(b: Buffer, offset?: number): T;\n  encode(src: T, b: Buffer, offset?: number): number;\n  getSpan(b: Buffer, offset?: number): number;\n  replicate<AP extends string>(name: AP): Layout<T, AP>;\n}\nexport interface LayoutConstructor {\n  new <T, P>(): Layout<T, P>; // for class extends syntex\n  new <T, P>(span?: T, property?: P): Layout<T, P>;\n  readonly prototype: Layout;\n}\nexport const Layout = _Layout as unknown as LayoutConstructor;\n//#endregion\n\n//#region ------------------- Structure -------------------\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface Structure<T = any, P = \"\", DecodeSchema extends { [key: string]: any } = any>\n  extends Layout<DecodeSchema, P> {\n  span: number;\n  decode(b: Buffer, offset?: number): DecodeSchema;\n  layoutFor<AP extends string>(property: AP): Layout<DecodeSchema[AP]>;\n  offsetOf<AP extends string>(property: AP): number;\n}\ninterface StructureConstructor {\n  new <T = any, P = \"\", DecodeSchema extends { [key: string]: any } = any>(): Structure<T, P, DecodeSchema>;\n  new <T = any, P = \"\", DecodeSchema extends { [key: string]: any } = any>(\n    fields: T,\n    property?: P,\n    decodePrefixes?: boolean,\n  ): Structure<T, P, DecodeSchema>;\n}\nexport const Structure = _Structure as unknown as StructureConstructor;\n//#endregion\n\n//#region ------------------- Union -------------------\nexport interface Union<UnionSchema extends { [key: string]: any } = any> extends Layout {\n  registry: object;\n  decode(b: Buffer, offset?: number): Partial<UnionSchema>;\n  addVariant(\n    variant: number,\n    layout: Structure<any, any, Partial<UnionSchema>> | Layout<any, keyof UnionSchema>,\n    property?: string,\n  ): any /* TEMP: code in Layout.js 1809 */;\n}\ninterface UnionConstructor {\n  new <UnionSchema extends { [key: string]: any } = any>(): Union<UnionSchema>;\n  new <UnionSchema extends { [key: string]: any } = any>(\n    discr: Layout<any, any>,\n    defaultLayout: Layout<any, any>,\n    property?: string,\n  ): Union<UnionSchema>;\n}\nexport const Union = _Union as unknown as UnionConstructor;\n//#endregion\n\n//#region ------------------- BitStructure -------------------\nexport type BitStructure<T = unknown /* TEMP */, P = \"\"> = Layout<T, P>;\ninterface BitStructureConstructor {\n  new (...params: any[]): BitStructure;\n}\nexport const BitStructure = _BitStructure as BitStructureConstructor;\n//#endregion\n\n//#region ------------------- UInt -------------------\nexport type UInt<T = any, P = \"\"> = Layout<T, P>;\ninterface UIntConstructor {\n  new <T, P>(span?: T, property?: P): UInt<T, P>;\n}\nexport const UInt = _UInt as UIntConstructor;\n//#endregion\n\n//#region ------------------- Blob -------------------\nexport type Blob<P extends string = \"\"> = Layout<Buffer, P>;\ninterface BlobConstructor {\n  new (...params: ConstructorParameters<LayoutConstructor>): Blob;\n}\nexport const Blob = _Blob as unknown as BlobConstructor;\n//#endregion\n\nexport const greedy = _greedy as <P extends string = \"\">(elementSpan?: number, property?: P) => Layout<number, P>;\nexport const u8 = _u8 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u16 = _u16 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u24 = _u24 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u32 = _u32 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u40 = _u40 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u48 = _u48 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const nu64 = _nu64 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u16be = _u16be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u24be = _u24be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u32be = _u32be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u40be = _u40be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const u48be = _u48be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const nu64be = _nu64be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s8 = _s8 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s16 = _s16 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s24 = _s24 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s32 = _s32 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s40 = _s40 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s48 = _s48 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const ns64 = _ns64 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s16be = _s16be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s24be = _s24be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s32be = _s32be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s40be = _s40be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const s48be = _s48be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const ns64be = _ns64be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const f32 = _f32 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const f32be = _f32be as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const f64 = _f64 as <P extends string = \"\">(property?: P) => Layout<number, P>;\nexport const f64be = _f64be as <P extends string = \"\">(property?: P) => Layout<number, P>;\n\nexport const struct = _struct as <T, P extends string = \"\">(\n  fields: T,\n  property?: P,\n  decodePrefixes?: boolean,\n) => T extends Layout<infer Value, infer Property>[]\n  ? Structure<\n      Value,\n      P,\n      {\n        [K in Exclude<Extract<Property, string>, \"\">]: Extract<T[number], Layout<any, K>> extends Layout<infer V, any>\n          ? V\n          : any;\n      }\n    >\n  : any;\n\nexport const seq = _seq as unknown as <T, P>(\n  elementLayout: Layout<T, string>,\n  count: number | Layout<number, string>,\n  property?: P,\n) => Layout<T[]>;\nexport const union = _union as <UnionSchema extends { [key: string]: any } = any>(\n  discr: Layout<any, any>,\n  defaultLayout?: any,\n  property?: string,\n) => Union<UnionSchema>;\nexport const unionLayoutDiscriminator = _unionLayoutDiscriminator as <P extends string = \"\">(\n  layout: Layout<any, P>,\n  property?: P,\n) => any;\nexport const blob = _blob as unknown as <P extends string = \"\">(\n  length: number | Layout<number, P>,\n  property?: P,\n) => Blob<P>;\nexport const cstr = _cstr as <P extends string = \"\">(property?: P) => Layout<string, P>;\nexport const utf8 = _utf8 as <P extends string = \"\">(maxSpan: number, property?: P) => Layout<string, P>;\nexport const bits = _bits as unknown as <T, P extends string = \"\">(\n  word: Layout<T>,\n  msb?: boolean,\n  property?: P,\n) => BitStructure<T, P>; // TODO: not quite sure\nexport const offset = _offset as unknown as <T, P extends string = \"\">(\n  layout: Layout<T, P>,\n  offset?: number,\n  property?: P,\n) => Layout<T, P>;\n\nexport type GetStructureSchema<T extends Structure> = T extends Structure<any, any, infer S> ? S : unknown;\n"],"mappings":"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","names":[]}