@raydium-io/raydium-sdk-v2
Version:
An SDK for building applications on top of Raydium.
1 lines • 38.8 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/common/programId.ts","../../../src/raydium/serum/id.ts","../../../src/marshmallow/index.ts","../../../src/marshmallow/buffer-layout.ts","../../../src/raydium/serum/layout.ts","../../../src/raydium/serum/serum.ts","../../../src/common/logger.ts"],"sourcesContent":["import { PublicKey } from \"@solana/web3.js\";\n\n// raydium\nexport const FARM_PROGRAM_ID_V3 = new PublicKey(\"EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q\");\n// temp fusion\nexport const FARM_PROGRAM_ID_V4 = new PublicKey(\"CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T\");\n// \"fusion\"\nexport const FARM_PROGRAM_ID_V5 = new PublicKey(\"9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z\");\n// echosystem\nexport const FARM_PROGRAM_ID_V6 = new PublicKey(\"FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG\");\n\nexport const UTIL1216 = new PublicKey(\"CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS\");\n\nexport const OPEN_BOOK_PROGRAM = new PublicKey(\"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX\");\nexport const SERUM_PROGRAM_ID_V3 = new PublicKey(\"9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin\");\n\nexport const AMM_V4 = new PublicKey(\"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8\");\nexport const AMM_STABLE = new PublicKey(\"5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h\");\nexport const LIQUIDITY_POOL_PROGRAM_ID_V5_MODEL = new PublicKey(\"CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo\");\nexport const CLMM_PROGRAM_ID = new PublicKey(\"CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK\");\nexport const CLMM_LOCK_PROGRAM_ID = new PublicKey(\"LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE\");\nexport const CLMM_LOCK_AUTH_ID = new PublicKey(\"kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy\");\n\nexport const MODEL_DATA_PUBKEY = new PublicKey(\"CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo\");\n\nexport const Router = new PublicKey(\"routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS\");\nexport const FEE_DESTINATION_ID = new PublicKey(\"7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5\");\n\nexport const IDO_PROGRAM_ID_V1 = new PublicKey(\"6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF\");\nexport const IDO_PROGRAM_ID_V2 = new PublicKey(\"CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH\");\nexport const IDO_PROGRAM_ID_V3 = new PublicKey(\"9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC\");\nexport const IDO_PROGRAM_ID_V4 = new PublicKey(\"DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi\");\n\nexport const CREATE_CPMM_POOL_PROGRAM = new PublicKey(\"CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C\");\nexport const CREATE_CPMM_POOL_AUTH = new PublicKey(\"GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL\");\nexport const CREATE_CPMM_POOL_FEE_ACC = new PublicKey(\"DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8\");\n\nexport const LOCK_CPMM_PROGRAM = new PublicKey(\"LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE\");\n\nexport const LOCK_CPMM_AUTH = new PublicKey(\"3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH\");\n\nexport const LAUNCHPAD_PROGRAM = new PublicKey(\"LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj\");\nexport const LAUNCHPAD_AUTH = new PublicKey(\"WLHv2UAZm6z4KyaaELi5pjdbJh6RESMva1Rnn8pJVVh\");\n\nexport const DEV_LAUNCHPAD_PROGRAM = new PublicKey(\"DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6\");\nexport const DEV_LAUNCHPAD_AUTH = new PublicKey(\"5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq\");\n\nexport const LAUNCHPAD_PLATFORM = new PublicKey(\"4Bu96XjU84XjPDSpveTVf6LYGCkfW5FK7SNkREWcEfV4\");\n\nexport const LAUNCHPAD_CONFIG = new PublicKey(\"6s1xP3hpbAfFoNtUNF8mfHsjr2Bd97JxFJRWLbL6aHuX\");\n\nexport const IDO_ALL_PROGRAM = {\n IDO_PROGRAM_ID_V1,\n IDO_PROGRAM_ID_V2,\n IDO_PROGRAM_ID_V3,\n IDO_PROGRAM_ID_V4,\n};\n\nexport const ALL_PROGRAM_ID = {\n AMM_V4,\n AMM_STABLE,\n\n CLMM_PROGRAM_ID,\n CLMM_LOCK_PROGRAM_ID,\n CLMM_LOCK_AUTH_ID,\n\n FARM_PROGRAM_ID_V3,\n FARM_PROGRAM_ID_V4,\n FARM_PROGRAM_ID_V5,\n FARM_PROGRAM_ID_V6,\n\n OPEN_BOOK_PROGRAM,\n SERUM_PROGRAM_ID_V3,\n\n UTIL1216,\n\n Router,\n\n CREATE_CPMM_POOL_PROGRAM,\n CREATE_CPMM_POOL_AUTH,\n CREATE_CPMM_POOL_FEE_ACC,\n\n LOCK_CPMM_PROGRAM,\n LOCK_CPMM_AUTH,\n\n LAUNCHPAD_PROGRAM,\n LAUNCHPAD_AUTH,\n\n LAUNCHPAD_PLATFORM,\n LAUNCHPAD_CONFIG,\n\n FEE_DESTINATION_ID,\n\n MODEL_DATA_PUBKEY,\n};\n\nexport type ProgramIdConfig = Partial<typeof ALL_PROGRAM_ID>;\n\nexport const DEVNET_PROGRAM_ID: typeof ALL_PROGRAM_ID = {\n OPEN_BOOK_PROGRAM: new PublicKey(\"EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj\"),\n SERUM_PROGRAM_ID_V3: new PublicKey(\"Ray1111111111111111111111111111111111111111\"),\n AMM_V4: new PublicKey(\"DRaya7Kj3aMWQSy19kSjvmuwq9docCHofyP9kanQGaav\"),\n AMM_STABLE: new PublicKey(\"DRayDdXc1NZQ9C3hRWmoSf8zK4iapgMnjdNZWrfwsP8m\"),\n\n CLMM_PROGRAM_ID: new PublicKey(\"DRayAUgENGQBKVaX8owNhgzkEDyoHTGVEGHVJT1E9pfH\"),\n CLMM_LOCK_PROGRAM_ID: new PublicKey(\"DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX\"),\n CLMM_LOCK_AUTH_ID: new PublicKey(\"6Aoh8h2Lw2m5UGxYR8AdAL87jTWYeKoxM52mJRzfYwN\"),\n\n CREATE_CPMM_POOL_PROGRAM: new PublicKey(\"DRaycpLY18LhpbydsBWbVJtxpNv9oXPgjRSfpF2bWpYb\"),\n CREATE_CPMM_POOL_AUTH: new PublicKey(\"CXniRufdq5xL8t8jZAPxsPZDpuudwuJSPWnbcD5Y5Nxq\"),\n CREATE_CPMM_POOL_FEE_ACC: new PublicKey(\"3oE58BKVt8KuYkGxx8zBojugnymWmBiyafWgMrnb6eYy\"),\n\n LOCK_CPMM_PROGRAM: new PublicKey(\"DRay25Usp3YJAi7beckgpGUC7mGJ2cR1AVPxhYfwVCUX\"),\n LOCK_CPMM_AUTH: new PublicKey(\"7qWVV8UY2bRJfDLP4s37YzBPKUkVB46DStYJBpYbQzu3\"),\n\n UTIL1216: PublicKey.default,\n\n Router: new PublicKey(\"DRaybByLpbUL57LJARs3j8BitTxVfzBg351EaMr5UTCd\"),\n\n FARM_PROGRAM_ID_V3: new PublicKey(\"DRayWyrLmEW5KEeqs8kdTMMaBabapqagaBC7KWpGtJeZ\"),\n FARM_PROGRAM_ID_V4: new PublicKey(\"Ray1111111111111111111111111111111111111111\"),\n FARM_PROGRAM_ID_V5: new PublicKey(\"DRayiCGSZgku1GTK6rXD6mVDdingXy6APAH1R6R5L2LC\"),\n FARM_PROGRAM_ID_V6: new PublicKey(\"DRayzbYakXs45ELHkzH6vC3fuhQqTAnv5A68gdFuvZyZ\"),\n\n LAUNCHPAD_PROGRAM: new PublicKey(\"DRay6fNdQ5J82H7xV6uq2aV3mNrUZ1J4PgSKsWgptcm6\"),\n LAUNCHPAD_AUTH: new PublicKey(\"5xqNaZXX5eUi4p5HU4oz9i5QnwRNT2y6oN7yyn4qENeq\"),\n\n LAUNCHPAD_PLATFORM: new PublicKey(\"2Jx4KTDrVSdWNazuGpcA8n3ZLTRGGBDxAWhuKe2Xcj2a\"),\n LAUNCHPAD_CONFIG: new PublicKey(\"7ZR4zD7PYfY2XxoG1Gxcy2EgEeGYrpxrwzPuwdUBssEt\"),\n\n FEE_DESTINATION_ID: new PublicKey(\"9y8ENuuZ3b19quffx9hQvRVygG5ky6snHfRvGpuSfeJy\"),\n\n MODEL_DATA_PUBKEY: new PublicKey(\"Ray1111111111111111111111111111111111111111\"),\n};\n","import { PublicKey } from \"@solana/web3.js\";\nimport { SERUM_PROGRAM_ID_V3 } from \"../../common/programId\";\nimport { SerumVersion } from \"./type\";\n\n// serum program id string => serum version\nexport const SERUM_PROGRAMID_TO_VERSION: {\n [key: string]: SerumVersion;\n} = {\n [SERUM_PROGRAM_ID_V3.toBase58()]: 3,\n};\n\n// serum version => serum program id\nexport const SERUM_VERSION_TO_PROGRAMID: { [key in SerumVersion]?: PublicKey } & {\n [K: number]: PublicKey;\n} = {\n 3: SERUM_PROGRAM_ID_V3,\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","import { blob, GetStructureSchema, publicKey, struct, u64 } from \"../../marshmallow\";\n\n/* ================= state layouts ================= */\nexport const MARKET_STATE_LAYOUT_V3 = struct([\n blob(5),\n\n blob(8), // accountFlagsLayout('accountFlags'),\n\n publicKey(\"ownAddress\"),\n\n u64(\"vaultSignerNonce\"),\n\n publicKey(\"baseMint\"),\n publicKey(\"quoteMint\"),\n\n publicKey(\"baseVault\"),\n u64(\"baseDepositsTotal\"),\n u64(\"baseFeesAccrued\"),\n\n publicKey(\"quoteVault\"),\n u64(\"quoteDepositsTotal\"),\n u64(\"quoteFeesAccrued\"),\n\n u64(\"quoteDustThreshold\"),\n\n publicKey(\"requestQueue\"),\n publicKey(\"eventQueue\"),\n\n publicKey(\"bids\"),\n publicKey(\"asks\"),\n\n u64(\"baseLotSize\"),\n u64(\"quoteLotSize\"),\n\n u64(\"feeRateBps\"),\n\n u64(\"referrerRebatesAccrued\"),\n\n blob(7),\n]);\n\nexport type MarketStateLayoutV3 = typeof MARKET_STATE_LAYOUT_V3;\nexport type MarketStateLayout = MarketStateLayoutV3;\n\nexport type MarketStateV3 = GetStructureSchema<MarketStateLayoutV3>;\nexport type MarketState = MarketStateV3;\n\n/* ================= index ================= */\n// version => market state layout\nexport const MARKET_VERSION_TO_STATE_LAYOUT: {\n [version: number]: MarketStateLayout;\n} = {\n 3: MARKET_STATE_LAYOUT_V3,\n};\n","import { PublicKey } from \"@solana/web3.js\";\n\nimport { createLogger } from \"../../common/logger\";\n\nimport { SERUM_PROGRAMID_TO_VERSION, SERUM_VERSION_TO_PROGRAMID } from \"./id\";\nimport { MARKET_VERSION_TO_STATE_LAYOUT, MarketStateLayout } from \"./layout\";\n\nconst logger = createLogger(\"Serum\");\n\nexport class Market {\n /* ================= get version and program id ================= */\n static getProgramId(version: number): PublicKey {\n const programId = SERUM_VERSION_TO_PROGRAMID[version];\n if (!programId) logger.logWithError(\"invalid version\", \"version\", version);\n\n return programId;\n }\n\n static getVersion(programId: PublicKey): number {\n const programIdString = programId.toBase58();\n\n const version = SERUM_PROGRAMID_TO_VERSION[programIdString];\n if (!version) logger.logWithError(\"invalid program id\", \"programId\", programIdString);\n\n return version;\n }\n\n /* ================= get layout ================= */\n static getStateLayout(version: number): MarketStateLayout {\n const STATE_LAYOUT = MARKET_VERSION_TO_STATE_LAYOUT[version];\n if (!STATE_LAYOUT) logger.logWithError(!!STATE_LAYOUT, \"invalid version\", \"version\", version);\n\n return STATE_LAYOUT;\n }\n\n static getLayouts(version: number): { state: MarketStateLayout } {\n return { state: this.getStateLayout(version) };\n }\n\n /* ================= get key ================= */\n static getAssociatedAuthority({ programId, marketId }: { programId: PublicKey; marketId: PublicKey }): {\n publicKey: PublicKey;\n nonce: number;\n } {\n const seeds = [marketId.toBuffer()];\n\n let nonce = 0;\n let publicKey: PublicKey;\n\n while (nonce < 100) {\n try {\n const seedsWithNonce = seeds.concat(Buffer.from([nonce]), Buffer.alloc(7));\n publicKey = PublicKey.createProgramAddressSync(seedsWithNonce, programId);\n } catch (err) {\n if (err instanceof TypeError) {\n throw err;\n }\n nonce++;\n continue;\n }\n return { publicKey, nonce };\n }\n\n logger.logWithError(\"unable to find a viable program address nonce\", \"params\", {\n programId,\n marketId,\n });\n\n return { publicKey: PublicKey.default, nonce };\n }\n}\n","import { get, set } from \"lodash\";\n\nexport type ModuleName = \"Common.Api\";\n\nexport enum LogLevel {\n Error,\n Warning,\n Info,\n Debug,\n}\nexport class Logger {\n private logLevel: LogLevel;\n private name: string;\n constructor(params: { name: string; logLevel?: LogLevel }) {\n this.logLevel = params.logLevel !== undefined ? params.logLevel : LogLevel.Error;\n this.name = params.name;\n }\n\n set level(logLevel: LogLevel) {\n this.logLevel = logLevel;\n }\n get time(): string {\n return Date.now().toString();\n }\n get moduleName(): string {\n return this.name;\n }\n\n private isLogLevel(level: LogLevel): boolean {\n return level <= this.logLevel;\n }\n\n public error(...props): Logger {\n if (!this.isLogLevel(LogLevel.Error)) return this;\n console.error(this.time, this.name, \"sdk logger error\", ...props);\n return this;\n }\n\n public logWithError(...props): Logger {\n // this.error(...props)\n const msg = props.map((arg) => (typeof arg === \"object\" ? JSON.stringify(arg) : arg)).join(\", \");\n throw new Error(msg);\n }\n\n public warning(...props): Logger {\n if (!this.isLogLevel(LogLevel.Warning)) return this;\n console.warn(this.time, this.name, \"sdk logger warning\", ...props);\n return this;\n }\n\n public info(...props): Logger {\n if (!this.isLogLevel(LogLevel.Info)) return this;\n console.info(this.time, this.name, \"sdk logger info\", ...props);\n return this;\n }\n\n public debug(...props): Logger {\n if (!this.isLogLevel(LogLevel.Debug)) return this;\n console.debug(this.time, this.name, \"sdk logger debug\", ...props);\n return this;\n }\n}\n\nconst moduleLoggers: { [key in ModuleName]?: Logger } = {};\nconst moduleLevels: { [key in ModuleName]?: LogLevel } = {};\n\nexport function createLogger(moduleName: string): Logger {\n let logger = get(moduleLoggers, moduleName);\n if (!logger) {\n // default level is error\n const logLevel = get(moduleLevels, moduleName);\n\n logger = new Logger({ name: moduleName, logLevel });\n set(moduleLoggers, moduleName, logger);\n }\n\n return logger;\n}\n\nexport function setLoggerLevel(moduleName: string, level: LogLevel): void {\n set(moduleLevels, moduleName, level);\n\n const logger = get(moduleLoggers, moduleName);\n if (logger) logger.level = level;\n}\n"],"mappings":"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","names":[]}