{"version":3,"sources":["../../../src/cobaltx/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 { [key: string]: any; }> 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 extends { [key: string]: any; }> = Structure<any, any, S>;\n\nexport class Union<Schema extends { [key: string]: any; }> 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":["PublicKey","PublicKey","BN","isBN","_bits","_BitStructure","_blob","_Blob","_cstr","_f32","_f32be","_f64","_f64be","_greedy","_Layout","_ns64","_ns64be","_nu64","_nu64be","_offset","_s16","_s16be","_s24","_s24be","_s32","_s32be","_s40","_s40be","_s48","_s48be","_s8","_seq","_struct","_Structure","_u16","_u16be","_u24","_u24be","_u32","_u32be","_u40","_u40be","_u48","_u48be","_u8","_UInt","_union","_Union","_unionLayoutDiscriminator","_utf8","Layout","Structure","seq","_seq","blob","_blob","BNLayout","Layout","span","signed","property","blob","b","offset","num","BN","src","u64","property","BNLayout","Structure","b","offset","struct","fields","property","decodePrefixes","seq","elementLayout","count","property","parsedCount","superCount","isBN","target","countProperty","value","MODEL_DATA_PUBKEY","PublicKey","ELEMENT_SIZE","DataElement","struct","u64","modelDataInfoLayout","seq","estimateRangeByXyReal","_xReal","_yReal","estimateRangeByX","_x","estimateRangeByY","_y","getMininumRangeByXyReal","layoutData","xReal","yReal","min","max","minRangeIdx","maxRangeIdx","mid","target","cur","left","right","getRatio","find","x","x1","y1","x2","y2","xDenominator","xNumerator1","xNumerator2","xNumerator","realToTable","realValue","ratio","tableToReal","tableValue","getMinimumRangeByX","getMinimumRangeByY","y","getDataByX","dx","priceUp","xWithDx","minIdx","maxIdx","p1","p2","p","getDataByY","dy","yWithDy","getMidPrice","ret","getDyByDxBaseIn","dxReal","lessTrade","getDxByDyBaseIn","dyReal","formatLayout","buffer","layoutInfo","item","getStablePrice","coinReal","pcReal","baseCoin","price","StableLayout","connection","acc"]}