UNPKG

@powrldgr/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

1 lines 40.1 kB
{"version":3,"sources":["../../../src/raydium/marketV2/instrument.ts","../../../src/common/txTool/txType.ts","../../../src/marshmallow/index.ts","../../../src/marshmallow/buffer-layout.ts","../../../src/raydium/marketV2/layout.ts"],"sourcesContent":["import {\n Connection,\n Keypair,\n PublicKey,\n SystemProgram,\n SYSVAR_RENT_PUBKEY,\n Transaction,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport { createInitializeAccountInstruction, TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport { InstructionType } from \"@/common/txTool/txType\";\nimport { struct, u16, u32, u64, u8 } from \"../../marshmallow\";\nimport { MARKET_STATE_LAYOUT_V2 } from \"./layout\";\n\ntype Transactions = {\n transaction: Transaction;\n signer?: Keypair[] | undefined;\n instructionTypes?: string[];\n}[];\n\nexport function initializeMarket({\n programId,\n marketInfo,\n}: {\n programId: PublicKey;\n marketInfo: {\n id: PublicKey;\n requestQueue: PublicKey;\n eventQueue: PublicKey;\n bids: PublicKey;\n asks: PublicKey;\n baseVault: PublicKey;\n quoteVault: PublicKey;\n baseMint: PublicKey;\n quoteMint: PublicKey;\n authority?: PublicKey;\n pruneAuthority?: PublicKey;\n\n baseLotSize: BN;\n quoteLotSize: BN;\n feeRateBps: number;\n vaultSignerNonce: BN;\n quoteDustThreshold: BN;\n };\n}): TransactionInstruction {\n const dataLayout = struct([\n u8(\"version\"),\n u32(\"instruction\"),\n u64(\"baseLotSize\"),\n u64(\"quoteLotSize\"),\n u16(\"feeRateBps\"),\n u64(\"vaultSignerNonce\"),\n u64(\"quoteDustThreshold\"),\n ]);\n\n const keys = [\n { pubkey: marketInfo.id, isSigner: false, isWritable: true },\n { pubkey: marketInfo.requestQueue, isSigner: false, isWritable: true },\n { pubkey: marketInfo.eventQueue, isSigner: false, isWritable: true },\n { pubkey: marketInfo.bids, isSigner: false, isWritable: true },\n { pubkey: marketInfo.asks, isSigner: false, isWritable: true },\n { pubkey: marketInfo.baseVault, isSigner: false, isWritable: true },\n { pubkey: marketInfo.quoteVault, isSigner: false, isWritable: true },\n { pubkey: marketInfo.baseMint, isSigner: false, isWritable: false },\n { pubkey: marketInfo.quoteMint, isSigner: false, isWritable: false },\n // Use a dummy address if using the new dex upgrade to save tx space.\n {\n pubkey: marketInfo.authority ? marketInfo.quoteMint : SYSVAR_RENT_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n ]\n .concat(marketInfo.authority ? { pubkey: marketInfo.authority, isSigner: false, isWritable: false } : [])\n .concat(\n marketInfo.authority && marketInfo.pruneAuthority\n ? { pubkey: marketInfo.pruneAuthority, isSigner: false, isWritable: false }\n : [],\n );\n\n const data = Buffer.alloc(dataLayout.span);\n dataLayout.encode(\n {\n version: 0,\n instruction: 0,\n baseLotSize: marketInfo.baseLotSize,\n quoteLotSize: marketInfo.quoteLotSize,\n feeRateBps: marketInfo.feeRateBps,\n vaultSignerNonce: marketInfo.vaultSignerNonce,\n quoteDustThreshold: marketInfo.quoteDustThreshold,\n },\n data,\n );\n\n return new TransactionInstruction({\n keys,\n programId,\n data,\n });\n}\n\nexport async function makeCreateMarketInstruction({\n connection,\n wallet,\n marketInfo,\n}: {\n connection: Connection;\n wallet: PublicKey;\n marketInfo: {\n programId: PublicKey;\n id: { publicKey: PublicKey; seed: string };\n baseMint: PublicKey;\n quoteMint: PublicKey;\n baseVault: { publicKey: PublicKey; seed: string };\n quoteVault: { publicKey: PublicKey; seed: string };\n vaultOwner: PublicKey;\n\n requestQueue: { publicKey: PublicKey; seed: string };\n eventQueue: { publicKey: PublicKey; seed: string };\n bids: { publicKey: PublicKey; seed: string };\n asks: { publicKey: PublicKey; seed: string };\n\n feeRateBps: number;\n vaultSignerNonce: BN;\n quoteDustThreshold: BN;\n\n baseLotSize: BN;\n quoteLotSize: BN;\n\n requestQueueSpace?: number;\n eventQueueSpace?: number;\n orderbookQueueSpace?: number;\n\n lowestFeeMarket?: boolean;\n };\n}): Promise<Transactions> {\n const tx1 = new Transaction();\n const accountLamports = await connection.getMinimumBalanceForRentExemption(165);\n tx1.add(\n SystemProgram.createAccountWithSeed({\n fromPubkey: wallet,\n basePubkey: wallet,\n seed: marketInfo.baseVault.seed,\n newAccountPubkey: marketInfo.baseVault.publicKey,\n lamports: accountLamports,\n space: 165,\n programId: TOKEN_PROGRAM_ID,\n }),\n SystemProgram.createAccountWithSeed({\n fromPubkey: wallet,\n basePubkey: wallet,\n seed: marketInfo.quoteVault.seed,\n newAccountPubkey: marketInfo.quoteVault.publicKey,\n lamports: accountLamports,\n space: 165,\n programId: TOKEN_PROGRAM_ID,\n }),\n createInitializeAccountInstruction(marketInfo.baseVault.publicKey, marketInfo.baseMint, marketInfo.vaultOwner),\n createInitializeAccountInstruction(marketInfo.quoteVault.publicKey, marketInfo.quoteMint, marketInfo.vaultOwner),\n SystemProgram.createAccountWithSeed({\n fromPubkey: wallet,\n basePubkey: wallet,\n seed: marketInfo.id.seed,\n newAccountPubkey: marketInfo.id.publicKey,\n lamports: await connection.getMinimumBalanceForRentExemption(MARKET_STATE_LAYOUT_V2.span),\n space: MARKET_STATE_LAYOUT_V2.span,\n programId: marketInfo.programId,\n }),\n );\n\n const tx2 = new Transaction();\n tx2.add(\n SystemProgram.createAccountWithSeed({\n fromPubkey: wallet,\n basePubkey: wallet,\n seed: marketInfo.requestQueue.seed,\n newAccountPubkey: marketInfo.requestQueue.publicKey,\n lamports: marketInfo.lowestFeeMarket\n ? 6208320\n : await connection.getMinimumBalanceForRentExemption(marketInfo.requestQueueSpace ?? 5120 + 12),\n space: marketInfo.lowestFeeMarket ? 764 : marketInfo.requestQueueSpace ?? 5120 + 12,\n programId: marketInfo.programId,\n }),\n SystemProgram.createAccountWithSeed({\n fromPubkey: wallet,\n basePubkey: wallet,\n seed: marketInfo.eventQueue.seed,\n newAccountPubkey: marketInfo.eventQueue.publicKey,\n lamports: marketInfo.lowestFeeMarket\n ? 79594560\n : await connection.getMinimumBalanceForRentExemption(marketInfo.eventQueueSpace ?? 262144 + 12),\n space: marketInfo.lowestFeeMarket ? 11308 : marketInfo.eventQueueSpace ?? 262144 + 12,\n programId: marketInfo.programId,\n }),\n SystemProgram.createAccountWithSeed({\n fromPubkey: wallet,\n basePubkey: wallet,\n seed: marketInfo.bids.seed,\n newAccountPubkey: marketInfo.bids.publicKey,\n lamports: marketInfo.lowestFeeMarket\n ? 101977920\n : await connection.getMinimumBalanceForRentExemption(marketInfo.orderbookQueueSpace ?? 65536 + 12),\n space: marketInfo.lowestFeeMarket ? 14524 : marketInfo.orderbookQueueSpace ?? 65536 + 12,\n programId: marketInfo.programId,\n }),\n SystemProgram.createAccountWithSeed({\n fromPubkey: wallet,\n basePubkey: wallet,\n seed: marketInfo.asks.seed,\n newAccountPubkey: marketInfo.asks.publicKey,\n lamports: marketInfo.lowestFeeMarket\n ? 101977920\n : await connection.getMinimumBalanceForRentExemption(marketInfo.orderbookQueueSpace ?? 65536 + 12),\n space: marketInfo.lowestFeeMarket ? 14524 : marketInfo.orderbookQueueSpace ?? 65536 + 12,\n programId: marketInfo.programId,\n }),\n initializeMarket({\n programId: marketInfo.programId,\n marketInfo: {\n id: marketInfo.id.publicKey,\n requestQueue: marketInfo.requestQueue.publicKey,\n eventQueue: marketInfo.eventQueue.publicKey,\n bids: marketInfo.bids.publicKey,\n asks: marketInfo.asks.publicKey,\n baseVault: marketInfo.baseVault.publicKey,\n quoteVault: marketInfo.quoteVault.publicKey,\n baseMint: marketInfo.baseMint,\n quoteMint: marketInfo.quoteMint,\n\n baseLotSize: marketInfo.baseLotSize,\n quoteLotSize: marketInfo.quoteLotSize,\n feeRateBps: marketInfo.feeRateBps,\n vaultSignerNonce: marketInfo.vaultSignerNonce,\n quoteDustThreshold: marketInfo.quoteDustThreshold,\n },\n }),\n );\n\n return [\n {\n transaction: tx1,\n signer: [],\n instructionTypes: [\n InstructionType.CreateAccount,\n InstructionType.CreateAccount,\n InstructionType.InitAccount,\n InstructionType.InitAccount,\n ],\n },\n {\n transaction: tx2,\n signer: [],\n instructionTypes: [\n InstructionType.CreateAccount,\n InstructionType.CreateAccount,\n InstructionType.CreateAccount,\n InstructionType.CreateAccount,\n InstructionType.CreateAccount,\n InstructionType.InitMarket,\n ],\n },\n ];\n}\n","export enum TxVersion {\n \"V0\",\n \"LEGACY\",\n}\n\nexport const InstructionType = {\n CreateAccount: \"CreateAccount\",\n InitAccount: \"InitAccount\",\n CreateATA: \"CreateATA\",\n CloseAccount: \"CloseAccount\",\n TransferAmount: \"TransferAmount\",\n InitMint: \"InitMint\",\n MintTo: \"MintTo\",\n\n InitMarket: \"InitMarket\", // create market main ins\n Util1216OwnerClaim: \"Util1216OwnerClaim\", // owner claim token ins\n\n SetComputeUnitPrice: \"SetComputeUnitPrice\",\n SetComputeUnitLimit: \"SetComputeUnitLimit\",\n\n // CLMM\n ClmmCreatePool: \"ClmmCreatePool\",\n ClmmOpenPosition: \"ClmmOpenPosition\",\n ClmmIncreasePosition: \"ClmmIncreasePosition\",\n ClmmDecreasePosition: \"ClmmDecreasePosition\",\n ClmmClosePosition: \"ClmmClosePosition\",\n ClmmSwapBaseIn: \"ClmmSwapBaseIn\",\n ClmmSwapBaseOut: \"ClmmSwapBaseOut\",\n ClmmInitReward: \"ClmmInitReward\",\n ClmmSetReward: \"ClmmSetReward\",\n ClmmCollectReward: \"ClmmCollectReward\",\n ClmmLockPosition: \"ClmmLockPosition\",\n ClmmHarvestLockPosition: \"ClmmHarvestLockPosition\",\n\n AmmV4Swap: \"AmmV4Swap\",\n AmmV4AddLiquidity: \"AmmV4AddLiquidity\",\n AmmV4RemoveLiquidity: \"AmmV4RemoveLiquidity\",\n AmmV4SimulatePoolInfo: \"AmmV4SimulatePoolInfo\",\n AmmV4SwapBaseIn: \"AmmV4SwapBaseIn\",\n AmmV4SwapBaseOut: \"AmmV4SwapBaseOut\",\n AmmV4CreatePool: \"AmmV4CreatePool\",\n AmmV4InitPool: \"AmmV4InitPool\",\n\n AmmV5AddLiquidity: \"AmmV5AddLiquidity\",\n AmmV5RemoveLiquidity: \"AmmV5RemoveLiquidity\",\n AmmV5SimulatePoolInfo: \"AmmV5SimulatePoolInfo\",\n AmmV5SwapBaseIn: \"AmmV5SwapBaseIn\",\n AmmV5SwapBaseOut: \"AmmV5SwapBaseOut\",\n\n RouteSwap: \"RouteSwap\",\n RouteSwap1: \"RouteSwap1\",\n RouteSwap2: \"RouteSwap2\",\n\n FarmV3Deposit: \"FarmV3Deposit\",\n FarmV3Withdraw: \"FarmV3Withdraw\",\n FarmV3CreateLedger: \"FarmV3CreateLedger\",\n\n FarmV4Withdraw: \"FarmV4Withdraw\",\n\n FarmV5Deposit: \"FarmV5Deposit\",\n FarmV5Withdraw: \"FarmV5Withdraw\",\n FarmV5CreateLedger: \"FarmV5CreateLedger\",\n\n FarmV6Deposit: \"FarmV6Deposit\",\n FarmV6Withdraw: \"FarmV6Withdraw\",\n FarmV6Create: \"FarmV6Create\",\n FarmV6Restart: \"FarmV6Restart\",\n FarmV6CreatorAddReward: \"FarmV6CreatorAddReward\",\n FarmV6CreatorWithdraw: \"FarmV6CreatorWithdraw\",\n\n CpmmCreatePool: \"CpmmCreatePool\",\n CpmmAddLiquidity: \"CpmmAddLiquidity\",\n CpmmWithdrawLiquidity: \"CpmmWithdrawLiquidity\",\n CpmmSwapBaseIn: \"CpmmSwapBaseIn\",\n CpmmSwapBaseOut: \"CpmmSwapBaseOut\",\n\n CpmmLockLp: \"CpmmLockLp\",\n CpmmCollectLockFee: \"CpmmCollectLockFee\",\n TransferTip: \"TransferTip\",\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, publicKey, struct, u64, WideBits } from \"../../marshmallow\";\n\nfunction accountFlagsLayout(property = \"accountFlags\"): WideBits<string> {\n const ACCOUNT_FLAGS_LAYOUT = new WideBits(property);\n ACCOUNT_FLAGS_LAYOUT.addBoolean(\"initialized\");\n ACCOUNT_FLAGS_LAYOUT.addBoolean(\"market\");\n ACCOUNT_FLAGS_LAYOUT.addBoolean(\"openOrders\");\n ACCOUNT_FLAGS_LAYOUT.addBoolean(\"requestQueue\");\n ACCOUNT_FLAGS_LAYOUT.addBoolean(\"eventQueue\");\n ACCOUNT_FLAGS_LAYOUT.addBoolean(\"bids\");\n ACCOUNT_FLAGS_LAYOUT.addBoolean(\"asks\");\n return ACCOUNT_FLAGS_LAYOUT;\n}\n\nexport const MARKET_STATE_LAYOUT_V2 = struct([\n blob(5),\n accountFlagsLayout(\"accountFlags\"),\n publicKey(\"ownAddress\"),\n u64(\"vaultSignerNonce\"),\n publicKey(\"baseMint\"),\n publicKey(\"quoteMint\"),\n publicKey(\"baseVault\"),\n u64(\"baseDepositsTotal\"),\n u64(\"baseFeesAccrued\"),\n publicKey(\"quoteVault\"),\n u64(\"quoteDepositsTotal\"),\n u64(\"quoteFeesAccrued\"),\n u64(\"quoteDustThreshold\"),\n publicKey(\"requestQueue\"),\n publicKey(\"eventQueue\"),\n publicKey(\"bids\"),\n publicKey(\"asks\"),\n u64(\"baseLotSize\"),\n u64(\"quoteLotSize\"),\n u64(\"feeRateBps\"),\n u64(\"referrerRebatesAccrued\"),\n blob(7),\n]);\n"],"mappings":"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","names":[]}