pnp-sdk 0.2.8 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-HN2SKUTC.js → chunk-SIMCEKAG.js} +194 -61
- package/dist/chunk-SIMCEKAG.js.map +1 -0
- package/dist/cli.cjs +193 -60
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/index.cjs +193 -60
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +50 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-HN2SKUTC.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/platform/client.ts","../src/idl/index.ts","../src/idl/pnp_protocol_solana.json","../src/instructions/pdas.ts","../src/modules/market.ts","../src/instructions/idl_builders.ts","../src/platform/tx.ts","../src/modules/trading.ts","../src/instructions/trading.ts","../src/modules/redemption.ts","../src/instructions/redemption.ts","../src/sdk.ts","../src/platform/wallet.ts","../src/lib/anchor-client.ts","../src/modules/anchor-market.ts","../src/modules/anchor-market-v3.ts"],"sourcesContent":["// Keep SDK types independent of web3.js imports to avoid resolution issues in pure type files\nexport type Commitment = \"processed\" | \"confirmed\" | \"finalized\";\n\nexport interface Logger {\n debug?: (...args: any[]) => void;\n info?: (...args: any[]) => void;\n warn?: (...args: any[]) => void;\n error?: (...args: any[]) => void;\n}\n\nexport interface SdkConfig {\n rpcUrl: string;\n commitment?: Commitment;\n httpHeaders?: Record<string, string>;\n priorityFeeMicroLamports?: number;\n computeUnitLimit?: number;\n computeUnitPriceMicroLamports?: number;\n addressLookupTables?: unknown[];\n logger?: Logger;\n}\n\nexport class SdkError extends Error {\n code: string;\n details?: unknown;\n constructor(code: string, message: string, details?: unknown) {\n super(message);\n this.name = \"SdkError\";\n this.code = code;\n this.details = details;\n }\n}\n\nexport class ValidationError extends SdkError {\n constructor(message: string, details?: unknown) {\n super(\"VALIDATION_ERROR\", message, details);\n this.name = \"ValidationError\";\n }\n}\n\nexport class TransportError extends SdkError {\n constructor(message: string, details?: unknown) {\n super(\"TRANSPORT_ERROR\", message, details);\n this.name = \"TransportError\";\n }\n}\n\nexport class ProgramError extends SdkError {\n programErrorCode?: number;\n logs?: string[];\n constructor(\n message: string,\n details?: unknown,\n programErrorCode?: number,\n logs?: string[]\n ) {\n super(\"PROGRAM_ERROR\", message, details);\n this.name = \"ProgramError\";\n this.programErrorCode = programErrorCode;\n this.logs = logs;\n }\n}\n\n// ===== PNP raw IDL types =====\n\n// Web3-agnostic pubkey representation for raw account typing\nexport type PubkeyLike = string;\n\n// Numeric fields from IDL may arrive as bigint | number | string depending on decoder\nexport type U64Like = bigint | number | string;\n\n// Enum may arrive as tagged object, string, or number depending on decoder\nexport type WinningTokenLike =\n | \"none\"\n | \"yes\"\n | \"no\"\n | number\n | Record<string, unknown>\n | null;\n\n// Raw Market account shape (snake_case per IDL)\nexport interface MarketType {\n id: U64Like;\n resolved: boolean;\n market_reserves: U64Like;\n collateral_token: PubkeyLike;\n winning_token_id: WinningTokenLike;\n yes_token_mint: PubkeyLike;\n no_token_mint: PubkeyLike;\n yes_token_supply_minted: U64Like;\n no_token_supply_minted: U64Like;\n creator: PubkeyLike;\n creator_fee_treasury: PubkeyLike;\n question: string;\n initial_liquidity: U64Like;\n end_time: U64Like;\n bump: number;\n creation_time: U64Like;\n resolvable: boolean;\n force_resolve: boolean;\n version: number;\n}\n\nexport interface MarketsResponse {\n count: number;\n data: Array<{ publicKey: string; account: MarketType }>;\n}\n\n// Global configuration account shape (snake_case per IDL)\nexport interface GlobalConfigType {\n admin: PubkeyLike;\n oracle_program: PubkeyLike;\n fee: U64Like;\n creator_fee: U64Like;\n bump: number;\n yes_global_metadata: string;\n no_global_metadata: string;\n collateral_token_mint: PubkeyLike;\n global_id: U64Like;\n min_liquidity: U64Like;\n buffer_period: U64Like;\n burn_fee: U64Like;\n trading_paused: boolean;\n}\n\n// Settlement criteria response from proxy server\nexport interface SettlementCriteria {\n category: string;\n reasoning: string;\n resolvable: boolean;\n resolution_sources: string[];\n settlement_criteria: string;\n suggested_improvements: string;\n}\n\n// Settlement data response from proxy server\nexport interface SettlementData {\n answer: string; // The resolution answer (e.g., \"YES\", \"NO\", \"INVALID\")\n reasoning: string; // Explanation for the resolution\n resolved?: boolean;\n winning_token_id?: string;\n resolution_time?: string;\n settlement_description?: string;\n resolution_source?: string;\n}\n\n// Market metadata response from proxy server batch-data endpoint\nexport interface MarketMeta {\n market: string;\n market_volume: number;\n image: string | null;\n initial_liquidity: number;\n}\n\n// ===== Operation result types =====\n/**\n * Web3-agnostic shape for the result of a P2P market operation.\n * Note: The Anchor-based module returns actual PublicKey instances at runtime.\n * When exposing results at the SDK boundary, prefer serializing these to base58 strings to match P2PMarketResponse.\n */\nexport interface P2PMarketResponse {\n signature: string;\n market: PubkeyLike;\n yesTokenMint: PubkeyLike;\n noTokenMint: PubkeyLike;\n}\n","import { Connection, Commitment, PublicKey } from \"@solana/web3.js\";\nimport { Logger, SdkConfig, TransportError } from \"../types\";\nimport { PNP_PROGRAM_ID } from \"../idl\";\n\n// Network-specific program IDs\nconst MAINNET_PROGRAM_ID = PNP_PROGRAM_ID; // From IDL: 6fnYZUSyp3vJxTNnayq5S62d363EFaGARnqYux5bqrxb\nconst DEVNET_PROGRAM_ID = new PublicKey(\"pnpkv2qnh4bfpGvTugGDSEhvZC7DP4pVxTuDykV3BGz\");\n\n/**\n * Detects if the RPC URL is for devnet\n */\nfunction isDevnetRpc(rpcUrl: string): boolean {\n const url = rpcUrl.toLowerCase();\n return url.includes('devnet') || url.includes('dev.') || url.includes(':8899');\n}\n\nexport class Client {\n readonly connection: Connection;\n readonly programId: PublicKey;\n readonly commitment: Commitment;\n readonly logger: Logger;\n readonly isDevnet: boolean;\n\n constructor(cfg: SdkConfig) {\n this.commitment = cfg.commitment ?? \"confirmed\";\n this.connection = new Connection(cfg.rpcUrl, {\n commitment: this.commitment,\n httpHeaders: cfg.httpHeaders,\n });\n \n // Auto-detect network from RPC URL\n this.isDevnet = isDevnetRpc(cfg.rpcUrl);\n this.programId = this.isDevnet ? DEVNET_PROGRAM_ID : MAINNET_PROGRAM_ID;\n \n this.logger = cfg.logger ?? console;\n \n // Log which network we're using\n if (this.isDevnet) {\n this.logger.info?.(`[PNP SDK] Using DEVNET program: ${DEVNET_PROGRAM_ID.toBase58()}`);\n }\n }\n\n fail(code: string, message: string, details?: unknown) {\n this.logger.error?.(code, message, details);\n return new TransportError(`${code}: ${message}`, details);\n }\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport type { Idl } from \"@coral-xyz/anchor\";\nimport { BorshCoder } from \"@coral-xyz/anchor\";\nimport idlJson from \"./pnp_protocol_solana.json\" assert { type: \"json\" };\n\nconst DEBUG = process.env.PNP_DEBUG === '1';\n\n// Lightweight IDL utilities to encode instructions and build account metas\nexport const PNP_IDL = idlJson as unknown as Idl & { address?: string };\nexport const PNP_PROGRAM_ID = new PublicKey(\n (PNP_IDL as any).address ?? (() => { throw new Error(\"IDL missing address field\"); })()\n);\n\nexport const idlCoder = new BorshCoder(PNP_IDL);\n\nexport type AccountsMap = Record<string, PublicKey>;\n\nexport function buildIdlIx(\n ixName: string,\n accounts: AccountsMap,\n args: any[] = [],\n programId?: PublicKey\n): TransactionInstruction {\n const ixDef = PNP_IDL.instructions?.find((ix) => ix.name === ixName);\n if (!ixDef) throw new Error(`Instruction not found in IDL: ${ixName}`);\n\n if (DEBUG) {\n console.log(`Building instruction: ${ixName}`);\n // Pretty-print args, handling bigint, BN, PublicKey, Buffers\n console.log(\n `Instruction args:`,\n JSON.stringify(\n args.map((v) => {\n if (v && typeof v === \"object\") {\n // BN detection (bn.js)\n if (typeof (v as any).toString === \"function\" && (v as any).constructor?.name === \"BN\") {\n return { __bn: (v as any).toString(10) };\n }\n // PublicKey\n if (typeof (v as any).toBase58 === \"function\") {\n return { __pubkey: (v as any).toBase58() };\n }\n // Buffer / Uint8Array\n if (v instanceof Uint8Array) {\n return { __bytes: Buffer.from(v).toString(\"hex\") };\n }\n }\n if (typeof v === \"bigint\") return v.toString();\n return v;\n }),\n null,\n 2\n )\n );\n console.log(`IDL definition:`, JSON.stringify(ixDef.args, null, 2));\n }\n\n // Log accounts in IDL order with provided pubkeys\n try {\n if (DEBUG) {\n console.log(`Accounts for ${ixName} (IDL order):`);\n for (const acc of ixDef.accounts) {\n const name = (acc as any).name as string;\n const pk = accounts[name];\n console.log(` ${name}: ${pk ? pk.toBase58() : '(missing)'}`);\n }\n }\n } catch (_) {\n // best-effort logging\n }\n\n // Ensure types match IDL specification\n if (ixDef.args && ixDef.args.length > 0) {\n if (DEBUG) {\n console.log('Checking argument types against IDL specification...');\n for (let i = 0; i < Math.min(args.length, ixDef.args.length); i++) {\n const argDef = ixDef.args[i];\n if (!argDef) continue;\n const argValue = args[i];\n console.log(`Arg ${i} (${argDef.name}): Expected type '${argDef.type}', got '${typeof argValue}' with value:`, \n typeof argValue === 'bigint' ? argValue.toString() : argValue);\n }\n }\n }\n\n // Encode data using Anchor coder\n try {\n // Anchor expects a named-args object; if we received an array, map it to an object per IDL arg names\n let namedArgs: any = args;\n if (Array.isArray(args)) {\n namedArgs = {} as Record<string, any>;\n for (let i = 0; i < (ixDef.args?.length ?? 0); i++) {\n const def = ixDef.args[i];\n if (!def) continue;\n namedArgs[def.name] = args[i];\n }\n if (DEBUG) {\n console.log(`Mapped positional args to named args:`, JSON.stringify(namedArgs, (key, value) => {\n if (value && typeof value === \"object\") {\n if (typeof (value as any).toString === \"function\" && (value as any).constructor?.name === \"BN\") {\n return { __bn: (value as any).toString(10) };\n }\n if (typeof (value as any).toBase58 === \"function\") {\n return { __pubkey: (value as any).toBase58() };\n }\n if (value instanceof Uint8Array) {\n return { __bytes: Buffer.from(value).toString(\"hex\") };\n }\n }\n if (typeof value === \"bigint\") return value.toString();\n return value;\n }, 2));\n }\n }\n\n const data = idlCoder.instruction.encode(ixName as any, namedArgs);\n if (DEBUG) {\n console.log(`Instruction data encoded successfully, length: ${data.length} bytes`);\n console.log(`First 20 bytes: ${Buffer.from(data).toString('hex').substring(0, 40)}...`);\n }\n\n // For critical debugging: decode the first fields directly from the encoded buffer\n try {\n if (DEBUG) {\n const buf = Buffer.from(data);\n // Discriminator is first 8 bytes\n const off = 8;\n const readU64LE = (b: Buffer, o: number) =>\n BigInt(b.readUInt32LE(o)) + (BigInt(b.readUInt32LE(o + 4)) << 32n);\n\n if (ixName === \"mint_decision_tokens\") {\n const amountLE = readU64LE(buf, off);\n const buyFlag = buf[off + 8] === 1;\n const minimumOutLE = readU64LE(buf, off + 9);\n console.log(\n `[buildIdlIx:${ixName}] Encoded fields -> amount(u64): ${amountLE.toString()}, buy_yes_token(bool): ${buyFlag}, minimum_out(u64): ${minimumOutLE.toString()}`\n );\n }\n if (ixName === \"burn_decision_tokens\") {\n const amountLE = readU64LE(buf, off);\n const burnFlag = buf[off + 8] === 1;\n console.log(\n `[buildIdlIx:${ixName}] Encoded fields -> amount(u64): ${amountLE.toString()}, burn_yes_token(bool): ${burnFlag}`\n );\n }\n }\n } catch (e) {\n if (DEBUG) console.warn(`[buildIdlIx:${ixName}] Post-encode field inspection failed:`, (e as any)?.message ?? String(e));\n }\n\n const programIdToUse = programId || PNP_PROGRAM_ID;\n return new TransactionInstruction({ programId: programIdToUse, keys: constructAccountMetas(ixDef, accounts), data });\n } catch (err: any) {\n if (DEBUG) console.error(`Failed to encode instruction data: ${err.message || err}`);\n throw err;\n }\n}\n\nfunction constructAccountMetas(ixDef: any, accounts: AccountsMap) {\n // Map accounts in IDL order\n const metas: { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }[] = [];\n for (const acc of ixDef.accounts) {\n const a: any = acc as any;\n const name: string = a.name as string;\n const optional: boolean = Boolean(a.optional);\n const pubkey = accounts[name];\n if (!pubkey) {\n if (optional) {\n // Skip optional accounts if not supplied\n continue;\n }\n throw new Error(`Missing account for ${ixDef.name}: ${name}`);\n }\n const isSigner: boolean = Boolean(a.signer);\n const isWritable: boolean = Boolean(a.writable);\n metas.push({ pubkey, isSigner, isWritable });\n }\n return metas;\n}\n\n // Removed duplicated code (replaced by constructAccountMetas function)\n\nexport function decodeAccount<T = any>(accountName: string, data: Buffer): T {\n return idlCoder.accounts.decode(accountName as any, data) as T;\n}\n","{\n \"address\": \"6fnYZUSyp3vJxTNnayq5S62d363EFaGARnqYux5bqrxb\",\n \"metadata\": {\n \"name\": \"pnp_protocol_solana\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"docs\": [\n \"Main program module for the PnP prediction market protocol\"\n ],\n \"instructions\": [\n {\n \"name\": \"burn_decision_tokens\",\n \"docs\": [\n \"Burns decision tokens in exchange for collateral\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing burning accounts\",\n \"* `amount` - Amount of decision tokens to burn\",\n \"* `burn_yes_token` - If true, burn YES tokens; if false, burn NO tokens\",\n \"\",\n \"# Returns\",\n \"* The amount of collateral returned\"\n ],\n \"discriminator\": [\n 18,\n 198,\n 214,\n 1,\n 236,\n 94,\n 63,\n 29\n ],\n \"accounts\": [\n {\n \"name\": \"buyer\",\n \"docs\": [\n \"The buyer's account, must be a signer\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"The admin's account, must be a signer\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"market_creator\",\n \"docs\": [\n \"The market creator's account\"\n ]\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"The prediction market account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint account (SPL Token only)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint account (SPL Token only)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_yes_token_account\",\n \"docs\": [\n \"Buyer's YES token account\"\n ],\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program_decision\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"buyer_no_token_account\",\n \"docs\": [\n \"Buyer's NO token account\"\n ],\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program_decision\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market's collateral token vault\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_collateral_token_account\",\n \"docs\": [\n \"Buyer's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"admin_collateral_token_account\",\n \"docs\": [\n \"Market creator's collateral token account\",\n \"Admin's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"admin\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"docs\": [\n \"Creator's fee treasury account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program for collateral (SPL or Token-2022)\"\n ]\n },\n {\n \"name\": \"token_program_decision\",\n \"docs\": [\n \"Token program for decision mints (SPL Token, auto-resolved)\"\n ],\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"burn_yes_token\",\n \"type\": \"bool\"\n }\n ],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"buy_v3_tokens\",\n \"docs\": [\n \"Buy tokens on one side of a V3 market\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing V3 buy accounts\",\n \"* `amount` - Amount of collateral to spend\",\n \"* `side` - Which side to buy (YES or NO)\",\n \"* `minimum_tokens_out` - Minimum tokens expected (slippage protection)\",\n \"\",\n \"# Returns\",\n \"* The amount of tokens received\"\n ],\n \"discriminator\": [\n 159,\n 2,\n 78,\n 64,\n 237,\n 111,\n 133,\n 248\n ],\n \"accounts\": [\n {\n \"name\": \"buyer\",\n \"docs\": [\n \"Buyer account\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"P2P Market account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 45,\n 118,\n 51\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.id\",\n \"account\": \"MarketV3\"\n }\n ]\n }\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_yes_token_account\",\n \"docs\": [\n \"Buyer's YES token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"buyer_no_token_account\",\n \"docs\": [\n \"Buyer's NO token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market reserve vault\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint\"\n ]\n },\n {\n \"name\": \"buyer_collateral_token_account\",\n \"docs\": [\n \"Buyer's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"side\",\n \"type\": {\n \"defined\": {\n \"name\": \"TokenSide\"\n }\n }\n },\n {\n \"name\": \"minimum_tokens_out\",\n \"type\": \"u64\"\n }\n ],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"claim_creator_fee\",\n \"docs\": [\n \"Claims the creator fee from the creator fee treasury\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing fee claiming accounts\",\n \"\",\n \"# Returns\",\n \"* Result indicating success or error\"\n ],\n \"discriminator\": [\n 26,\n 97,\n 138,\n 203,\n 132,\n 171,\n 141,\n 252\n ],\n \"accounts\": [\n {\n \"name\": \"creator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 114,\n 101,\n 97,\n 116,\n 111,\n 114,\n 95,\n 102,\n 101,\n 101,\n 95,\n 116,\n 114,\n 101,\n 97,\n 115,\n 117,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"creator_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"claim_creator_fee_legacy\",\n \"docs\": [\n \"Claims accumulated creator fees from legacy treasury (pre-multi-collateral)\",\n \"Use this for treasuries created before the multi-collateral update\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing creator fee claim accounts (legacy PDA)\",\n \"\",\n \"# Returns\",\n \"* Result indicating success or error\"\n ],\n \"discriminator\": [\n 218,\n 83,\n 157,\n 107,\n 200,\n 185,\n 98,\n 202\n ],\n \"accounts\": [\n {\n \"name\": \"creator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"docs\": [\n \"Legacy treasury PDA (without collateral mint in seeds)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 114,\n 101,\n 97,\n 116,\n 111,\n 114,\n 95,\n 102,\n 101,\n 101,\n 95,\n 116,\n 114,\n 101,\n 97,\n 115,\n 117,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n }\n ]\n }\n },\n {\n \"name\": \"creator_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_market\",\n \"docs\": [\n \"Creates a new prediction market\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing market creation accounts\",\n \"* `question` - The prediction market question/statement\",\n \"* `initial_liquidity` - Initial liquidity provided to the market\",\n \"* `end_time` - Unix timestamp when the market ends\",\n \"\",\n \"# Returns\",\n \"* The public key of the newly created market\"\n ],\n \"discriminator\": [\n 103,\n 226,\n 97,\n 235,\n 200,\n 188,\n 251,\n 254\n ],\n \"accounts\": [\n {\n \"name\": \"creator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"market\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"global_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"creator_collateral_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"yes_token_mint\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 121,\n 101,\n 115,\n 95,\n 116,\n 111,\n 107,\n 101,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"global_config.global_id\",\n \"account\": \"GlobalConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"no_token_mint\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 111,\n 95,\n 116,\n 111,\n 107,\n 101,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"global_config.global_id\",\n \"account\": \"GlobalConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"user_yes_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"user_no_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_metadata_program\"\n },\n {\n \"name\": \"yes_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"no_metadata\",\n \"writable\": true\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 114,\n 101,\n 97,\n 116,\n 111,\n 114,\n 95,\n 102,\n 101,\n 101,\n 95,\n 116,\n 114,\n 101,\n 97,\n 115,\n 117,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"question\",\n \"type\": \"string\"\n },\n {\n \"name\": \"initial_liquidity\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"end_time\",\n \"type\": \"u64\"\n }\n ],\n \"returns\": \"pubkey\"\n },\n {\n \"name\": \"create_market_v2\",\n \"docs\": [\n \"Creates a new V2 prediction market with deferred token creation\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing V2 market creation accounts\",\n \"* `question` - The prediction market question/statement\",\n \"* `initial_liquidity` - Initial liquidity provided to the market\",\n \"* `end_time` - Unix timestamp when the market ends\",\n \"* `creator` - The public key of the market creator\",\n \"* `yes_odds_bps` - Optional custom odds (100-9900 bps). Default 5000 (50/50)\",\n \"* `oracle` - Optional custom oracle. Default uses global oracle\",\n \"\",\n \"# Returns\",\n \"* The public key of the newly created market\"\n ],\n \"discriminator\": [\n 193,\n 18,\n 155,\n 62,\n 161,\n 124,\n 80,\n 25\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Payer who pays for market creation\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"Market account - uses V2 PDA derivation with market ID\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 45,\n 118,\n 50\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"global_config.global_id\",\n \"account\": \"GlobalConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"market_extension\",\n \"docs\": [\n \"Optional market extension account for custom odds/oracle\",\n \"Pass this if you want to set custom odds or oracle\"\n ],\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint\"\n ]\n },\n {\n \"name\": \"payer_collateral_token_account\",\n \"docs\": [\n \"Payer's collateral token account (for initial liquidity transfer)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"payer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market reserve vault to hold initial liquidity\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"docs\": [\n \"Creator fee treasury (created if needed)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 114,\n 101,\n 97,\n 116,\n 111,\n 114,\n 95,\n 102,\n 101,\n 101,\n 95,\n 116,\n 114,\n 101,\n 97,\n 115,\n 117,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"question\",\n \"type\": \"string\"\n },\n {\n \"name\": \"initial_liquidity\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"end_time\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"yes_odds_bps\",\n \"type\": {\n \"option\": \"u16\"\n }\n },\n {\n \"name\": \"oracle\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ],\n \"returns\": \"pubkey\"\n },\n {\n \"name\": \"create_market_v3\",\n \"docs\": [\n \"Creates a new V3 parimutuel prediction market\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing V3 market creation accounts\",\n \"* `question` - The prediction market question/statement\",\n \"* `initial_amount` - Total initial liquidity to deposit\",\n \"* `side` - Which side creator is backing (YES or NO)\",\n \"* `creator_side_cap` - Maximum liquidity allowed on creator's side\",\n \"* `end_time` - Unix timestamp when the market ends\",\n \"* `max_pot_ratio` - Maximum pot imbalance ratio\",\n \"* `creator` - The public key of the market creator\",\n \"* `odds_bps` - Optional custom odds (100-9900 bps). Default 10000 (all to creator's side)\",\n \"* `oracle` - Optional custom oracle. Default uses global oracle\",\n \"\",\n \"# Returns\",\n \"* The public key of the newly created V3 market\"\n ],\n \"discriminator\": [\n 222,\n 20,\n 31,\n 62,\n 200,\n 59,\n 146,\n 78\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"market\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 45,\n 118,\n 51\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"global_config.global_id\",\n \"account\": \"GlobalConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"market_extension\",\n \"docs\": [\n \"Optional market extension for custom odds/oracle\"\n ],\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"global_config\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"collateral_token_mint\"\n },\n {\n \"name\": \"yes_token_mint\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 51,\n 45,\n 121,\n 101,\n 115,\n 45,\n 116,\n 111,\n 107,\n 101,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"global_config.global_id\",\n \"account\": \"GlobalConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"no_token_mint\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 51,\n 45,\n 110,\n 111,\n 45,\n 116,\n 111,\n 107,\n 101,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"global_config.global_id\",\n \"account\": \"GlobalConfig\"\n }\n ]\n }\n },\n {\n \"name\": \"payer_collateral_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"payer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_yes_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"arg\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_no_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"arg\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 114,\n 101,\n 97,\n 116,\n 111,\n 114,\n 95,\n 102,\n 101,\n 101,\n 95,\n 116,\n 114,\n 101,\n 97,\n 115,\n 117,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"question\",\n \"type\": \"string\"\n },\n {\n \"name\": \"initial_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"side\",\n \"type\": {\n \"defined\": {\n \"name\": \"TokenSide\"\n }\n }\n },\n {\n \"name\": \"creator_side_cap\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"end_time\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_pot_ratio\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"odds_bps\",\n \"type\": {\n \"option\": \"u16\"\n }\n },\n {\n \"name\": \"oracle\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ],\n \"returns\": \"pubkey\"\n },\n {\n \"name\": \"creator_refund\",\n \"docs\": [\n \"Allows creator to claim refund if market is expired and not resolvable\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing creator refund accounts\"\n ],\n \"discriminator\": [\n 131,\n 96,\n 75,\n 61,\n 131,\n 158,\n 144,\n 19\n ],\n \"accounts\": [\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Market creator account\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"Market account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint account\"\n ],\n \"optional\": true\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint account\"\n ],\n \"optional\": true\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market's collateral token vault\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint account\"\n ]\n },\n {\n \"name\": \"creator_collateral_token_account\",\n \"docs\": [\n \"Creator's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program interface\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"creator_refund_v2\",\n \"docs\": [\n \"V2 version: Allows creator to claim refund for V2 markets using market-id based seeds\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing creator refund accounts\"\n ],\n \"discriminator\": [\n 93,\n 161,\n 160,\n 92,\n 75,\n 205,\n 235,\n 184\n ],\n \"accounts\": [\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Market creator account\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"Market account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint account\"\n ],\n \"optional\": true\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint account\"\n ],\n \"optional\": true\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market's collateral token vault\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint account\"\n ]\n },\n {\n \"name\": \"creator_collateral_token_account\",\n \"docs\": [\n \"Creator's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program interface\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"creator_refund_v3\",\n \"docs\": [\n \"Creator can claim refund if no one bet against them (V3)\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing V3 creator refund accounts\",\n \"\",\n \"# Returns\",\n \"* The amount refunded to creator\"\n ],\n \"discriminator\": [\n 30,\n 48,\n 48,\n 62,\n 129,\n 212,\n 67,\n 70\n ],\n \"accounts\": [\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Creator account (must be market creator)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"P2P Market account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 45,\n 118,\n 51\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.id\",\n \"account\": \"MarketV3\"\n }\n ]\n }\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market reserve vault\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint\"\n ]\n },\n {\n \"name\": \"creator_collateral_token_account\",\n \"docs\": [\n \"Creator's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"get_no_price\",\n \"discriminator\": [\n 21,\n 75,\n 13,\n 51,\n 64,\n 19,\n 143,\n 223\n ],\n \"accounts\": [\n {\n \"name\": \"market\"\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint\"\n ]\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint\"\n ]\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"get_price_for_market\",\n \"docs\": [\n \"Gets the price of YES and NO tokens for a given market\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing the market and mint accounts\",\n \"\",\n \"# Returns\",\n \"* (YES price, NO price)\"\n ],\n \"discriminator\": [\n 74,\n 121,\n 126,\n 27,\n 228,\n 50,\n 232,\n 98\n ],\n \"accounts\": [\n {\n \"name\": \"market\"\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint\"\n ]\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint\"\n ]\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"get_yes_price\",\n \"discriminator\": [\n 55,\n 53,\n 8,\n 152,\n 205,\n 158,\n 118,\n 52\n ],\n \"accounts\": [\n {\n \"name\": \"market\"\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint\"\n ]\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint\"\n ]\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"init_protocol\",\n \"docs\": [\n \"Initializes the protocol with global configuration settings\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing protocol initialization accounts\",\n \"* `yes_global_metadata` - Metadata template for YES tokens\",\n \"* `no_global_metadata` - Metadata template for NO tokens\"\n ],\n \"discriminator\": [\n 3,\n 188,\n 141,\n 237,\n 225,\n 226,\n 232,\n 210\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Payer account that will pay for account creation\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account that stores protocol settings\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Mint account for the token used as collateral\"\n ]\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"yes_global_metadata\",\n \"type\": \"string\"\n },\n {\n \"name\": \"no_global_metadata\",\n \"type\": \"string\"\n },\n {\n \"name\": \"initial_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"oracle_program\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"min_liquidity\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"buffer_period\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"burn_fee\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"mint_decision_tokens\",\n \"docs\": [\n \"Mints new decision tokens (YES or NO) in exchange for collateral\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing minting accounts\",\n \"* `amount` - Amount of collateral to exchange for decision tokens\",\n \"* `buy_yes_token` - If true, mint YES tokens; if false, mint NO tokens\",\n \"\",\n \"# Returns\",\n \"* The amount of decision tokens minted\"\n ],\n \"discriminator\": [\n 226,\n 180,\n 53,\n 125,\n 168,\n 69,\n 114,\n 25\n ],\n \"accounts\": [\n {\n \"name\": \"buyer\",\n \"docs\": [\n \"The buyer's account, must be a signer\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"The admin's account, must be a signer\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"market_creator\",\n \"docs\": [\n \"The market creator's account\"\n ]\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"The prediction market account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint account (SPL Token only)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint account (SPL Token only)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_yes_token_account\",\n \"docs\": [\n \"Buyer's YES token account\"\n ],\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program_decision\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"buyer_no_token_account\",\n \"docs\": [\n \"Buyer's NO token account\"\n ],\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program_decision\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market's collateral token vault\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_collateral_token_account\",\n \"docs\": [\n \"Buyer's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"admin_collateral_token_account\",\n \"docs\": [\n \"Market creator's collateral token account\",\n \"Admin's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"admin\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"docs\": [\n \"Creator's fee treasury account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program for collateral (SPL or Token-2022)\"\n ]\n },\n {\n \"name\": \"token_program_decision\",\n \"docs\": [\n \"Token program for decision mints (SPL Token, auto-resolved)\"\n ],\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"buy_yes_token\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"minimum_out\",\n \"type\": \"u64\"\n }\n ],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"redeem_position\",\n \"docs\": [\n \"Redeems winning tokens for collateral after market settlement\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing redemption accounts\",\n \"\",\n \"# Returns\",\n \"* The amount of collateral redeemed\"\n ],\n \"discriminator\": [\n 51,\n 138,\n 49,\n 229,\n 33,\n 216,\n 19,\n 97\n ],\n \"accounts\": [\n {\n \"name\": \"buyer\",\n \"docs\": [\n \"The buyer's account, must be a signer\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"The admin's account, must be a signer\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"market_creator\",\n \"docs\": [\n \"The market creator's account\"\n ]\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"The prediction market account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint account (SPL Token only)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint account (SPL Token only)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_yes_token_account\",\n \"docs\": [\n \"Buyer's YES token account\"\n ],\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program_decision\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"buyer_no_token_account\",\n \"docs\": [\n \"Buyer's NO token account\"\n ],\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program_decision\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market's collateral token vault\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_collateral_token_account\",\n \"docs\": [\n \"Buyer's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"admin_collateral_token_account\",\n \"docs\": [\n \"Market creator's collateral token account\",\n \"Admin's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"admin\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"docs\": [\n \"Creator's fee treasury account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program for collateral (SPL or Token-2022)\"\n ]\n },\n {\n \"name\": \"token_program_decision\",\n \"docs\": [\n \"Token program for decision mints (SPL Token, auto-resolved)\"\n ],\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"redeem_position_v2\",\n \"discriminator\": [\n 21,\n 131,\n 209,\n 12,\n 53,\n 125,\n 168,\n 130\n ],\n \"accounts\": [\n {\n \"name\": \"buyer\",\n \"docs\": [\n \"The buyer's account, must be a signer\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"The admin's account, must be a signer\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"market_creator\",\n \"docs\": [\n \"The market creator's account\"\n ]\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"The prediction market account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint account (SPL Token only)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint account (SPL Token only)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_yes_token_account\",\n \"docs\": [\n \"Buyer's YES token account\"\n ],\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program_decision\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"buyer_no_token_account\",\n \"docs\": [\n \"Buyer's NO token account\"\n ],\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program_decision\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market's collateral token vault\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_collateral_token_account\",\n \"docs\": [\n \"Buyer's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"admin_collateral_token_account\",\n \"docs\": [\n \"Market creator's collateral token account\",\n \"Admin's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"admin\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"docs\": [\n \"Creator's fee treasury account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program for collateral (SPL or Token-2022)\"\n ]\n },\n {\n \"name\": \"token_program_decision\",\n \"docs\": [\n \"Token program for decision mints (SPL Token, auto-resolved)\"\n ],\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"redeem_v3_position\",\n \"docs\": [\n \"Redeem winning position from a settled V3 market\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing V3 redemption accounts\",\n \"\",\n \"# Returns\",\n \"* The amount of collateral redeemed\"\n ],\n \"discriminator\": [\n 35,\n 233,\n 101,\n 97,\n 195,\n 80,\n 220,\n 57\n ],\n \"accounts\": [\n {\n \"name\": \"redeemer\",\n \"docs\": [\n \"Redeemer account\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"P2P Market account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 45,\n 118,\n 51\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.id\",\n \"account\": \"MarketV3\"\n }\n ]\n }\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"redeemer_yes_token_account\",\n \"docs\": [\n \"Redeemer's YES token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"redeemer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"redeemer_no_token_account\",\n \"docs\": [\n \"Redeemer's NO token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"redeemer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market reserve vault\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint\"\n ]\n },\n {\n \"name\": \"redeemer_collateral_token_account\",\n \"docs\": [\n \"Redeemer's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"redeemer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin_collateral_token_account\",\n \"docs\": [\n \"Admin's collateral token account (for platform fee)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"admin\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"docs\": [\n \"Creator's fee treasury (for creator fee)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [],\n \"returns\": \"u64\"\n },\n {\n \"name\": \"set_buffer_period\",\n \"docs\": [\n \"Sets the buffer period for market resolution\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing buffer period setting accounts\",\n \"* `buffer_period` - The new buffer period in seconds\"\n ],\n \"discriminator\": [\n 214,\n 74,\n 140,\n 200,\n 87,\n 28,\n 33,\n 245\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin account (must be the current admin)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"buffer_period\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_burn_fee\",\n \"docs\": [\n \"Sets the burn fee for the protocol\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing fee setting accounts\",\n \"* `new_fee` - The new burn fee value\",\n \"\",\n \"# Returns\",\n \"* Result indicating success or error\"\n ],\n \"discriminator\": [\n 42,\n 181,\n 26,\n 185,\n 180,\n 168,\n 128,\n 181\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority attempting to set the fee. Must be the admin.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"The global configuration account storing protocol settings\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"new_fee\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_creator_fee\",\n \"docs\": [\n \"Sets the creator fee percentage that creators receive from trading fees\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing fee setting accounts\",\n \"* `new_fee` - The new creator fee value (must be <= 20% of protocol fee)\",\n \"\",\n \"# Returns\",\n \"* Result indicating success or error\"\n ],\n \"discriminator\": [\n 188,\n 13,\n 191,\n 116,\n 68,\n 13,\n 254,\n 218\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority attempting to set the fee. Must be the admin.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"The global configuration account storing protocol settings\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"new_fee\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_market_resolvable\",\n \"docs\": [\n \"Sets the resolvable status for a market\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing market resolvable setting accounts\",\n \"* `resolvable` - The new resolvable status\",\n \"* `force_resolve` - Whether to force resolve (allow immediate refunds)\"\n ],\n \"discriminator\": [\n 248,\n 31,\n 54,\n 169,\n 19,\n 42,\n 126,\n 93\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Admin or oracle account\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"Market account to update\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.yes_token_mint\",\n \"account\": \"Market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.no_token_mint\",\n \"account\": \"Market\"\n }\n ]\n }\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint account\"\n ]\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint account\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"resolvable\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"force_resolve\",\n \"type\": {\n \"option\": \"bool\"\n }\n }\n ]\n },\n {\n \"name\": \"set_market_resolvable_v2\",\n \"docs\": [\n \"Sets the resolvable status for a V2 market and creates tokens if needed\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing V2 market resolvable setting accounts\",\n \"* `market_id` - The market ID\",\n \"* `resolvable` - The new resolvable status\",\n \"* `force_resolve` - Whether to force resolve (allow immediate refunds)\"\n ],\n \"discriminator\": [\n 74,\n 223,\n 187,\n 6,\n 245,\n 19,\n 220,\n 253\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Admin or oracle account (pays for token creation)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"V2 Market account to update\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"market_extension\",\n \"docs\": [\n \"Optional market extension - pass if market has custom oracle/odds\"\n ],\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 95,\n 101,\n 120,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.id\",\n \"account\": \"Market\"\n }\n ]\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint\"\n ]\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint (created by admin)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 121,\n 101,\n 115,\n 95,\n 116,\n 111,\n 107,\n 101,\n 110\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"market_id\"\n }\n ]\n }\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint (created by admin)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 111,\n 95,\n 116,\n 111,\n 107,\n 101,\n 110\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"market_id\"\n }\n ]\n }\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Original market creator (for receiving initial tokens)\"\n ]\n },\n {\n \"name\": \"creator_yes_token_account\",\n \"docs\": [\n \"Creator's YES token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_no_token_account\",\n \"docs\": [\n \"Creator's NO token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"creator\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"token_metadata_program\",\n \"docs\": [\n \"Token metadata program\"\n ]\n },\n {\n \"name\": \"yes_metadata\",\n \"docs\": [\n \"YES token metadata account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"no_metadata\",\n \"docs\": [\n \"NO token metadata account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program\"\n ]\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"docs\": [\n \"Rent sysvar\"\n ],\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"market_id\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"resolvable\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"force_resolve\",\n \"type\": {\n \"option\": \"bool\"\n }\n }\n ]\n },\n {\n \"name\": \"set_market_resolvable_v3\",\n \"docs\": [\n \"Set market resolvable status for V3 market\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing V3 market and global config\",\n \"* `resolvable` - Whether the market should be resolvable\",\n \"\",\n \"# Returns\",\n \"* Result indicating success or error\"\n ],\n \"discriminator\": [\n 99,\n 37,\n 90,\n 125,\n 115,\n 239,\n 60,\n 162\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Authority (admin or oracle)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"V3 Market account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 45,\n 118,\n 51\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.id\",\n \"account\": \"MarketV3\"\n }\n ]\n }\n },\n {\n \"name\": \"market_extension\",\n \"docs\": [\n \"Optional market extension - pass if market has custom oracle\"\n ],\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 95,\n 118,\n 51,\n 95,\n 101,\n 120,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.id\",\n \"account\": \"MarketV3\"\n }\n ]\n }\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"resolvable\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"set_min_liquidity\",\n \"docs\": [\n \"Sets the minimum liquidity required for a market\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing fee setting accounts\",\n \"* `new_min_liquidity` - The new minimum liquidity value\",\n \"\",\n \"# Returns\",\n \"* Result indicating success or error\"\n ],\n \"discriminator\": [\n 162,\n 147,\n 87,\n 130,\n 193,\n 136,\n 3,\n 58\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority attempting to set the fee. Must be the admin.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"The global configuration account storing protocol settings\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"new_min_liquidity\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_taker_fee\",\n \"docs\": [\n \"Sets the protocol's taker fee percentage\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing fee setting accounts\",\n \"* `new_fee` - The new fee value (between 0-10000, representing 0-100%)\"\n ],\n \"discriminator\": [\n 182,\n 139,\n 233,\n 12,\n 57,\n 127,\n 45,\n 244\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority attempting to set the fee. Must be the admin.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"The global configuration account storing protocol settings\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"new_fee\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_trading_paused\",\n \"docs\": [\n \"Sets the trading pause status for the protocol\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing trading pause setting accounts\",\n \"* `trading_paused` - Whether trading should be paused (true) or enabled (false)\"\n ],\n \"discriminator\": [\n 184,\n 179,\n 206,\n 146,\n 99,\n 185,\n 77,\n 231\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"The authority attempting to set the fee. Must be the admin.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"The global configuration account storing protocol settings\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"trading_paused\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"settle_market\",\n \"docs\": [\n \"Settles a market by determining the winning outcome\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing settlement accounts\",\n \"* `yes_winner` - If true, YES tokens win; if false, NO tokens win\",\n \"\",\n \"# Returns\",\n \"* The winning token type\"\n ],\n \"discriminator\": [\n 193,\n 153,\n 95,\n 216,\n 166,\n 6,\n 144,\n 217\n ],\n \"accounts\": [\n {\n \"name\": \"buyer\",\n \"docs\": [\n \"The buyer's account, must be a signer\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"The admin's account, must be a signer\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"market_creator\",\n \"docs\": [\n \"The market creator's account\"\n ]\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"The prediction market account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration account\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint account (SPL Token only)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint account (SPL Token only)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_yes_token_account\",\n \"docs\": [\n \"Buyer's YES token account\"\n ],\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program_decision\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"yes_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"buyer_no_token_account\",\n \"docs\": [\n \"Buyer's NO token account\"\n ],\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program_decision\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"no_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"market_reserve_vault\",\n \"docs\": [\n \"Market's collateral token vault\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"market\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Collateral token mint account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"buyer_collateral_token_account\",\n \"docs\": [\n \"Buyer's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"admin_collateral_token_account\",\n \"docs\": [\n \"Market creator's collateral token account\",\n \"Admin's collateral token account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"admin\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"collateral_token_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"docs\": [\n \"Creator's fee treasury account\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"docs\": [\n \"Token program for collateral (SPL or Token-2022)\"\n ]\n },\n {\n \"name\": \"token_program_decision\",\n \"docs\": [\n \"Token program for decision mints (SPL Token, auto-resolved)\"\n ],\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"docs\": [\n \"Associated token program\"\n ],\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"docs\": [\n \"System program\"\n ],\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"yes_winner\",\n \"type\": \"bool\"\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"WinningToken\"\n }\n }\n },\n {\n \"name\": \"settle_market_v3\",\n \"docs\": [\n \"Settle a V3 market by determining winning side\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing V3 settlement accounts\",\n \"* `yes_winner` - If true, YES side wins; if false, NO side wins\",\n \"\",\n \"# Returns\",\n \"* The winning token type\"\n ],\n \"discriminator\": [\n 137,\n 43,\n 217,\n 201,\n 230,\n 152,\n 227,\n 248\n ],\n \"accounts\": [\n {\n \"name\": \"settler\",\n \"docs\": [\n \"Settler account (must be admin, global oracle, or custom oracle)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"P2P Market account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 45,\n 118,\n 51\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.id\",\n \"account\": \"MarketV3\"\n }\n ]\n }\n },\n {\n \"name\": \"market_extension\",\n \"docs\": [\n \"Optional market extension - pass if market has custom oracle\"\n ],\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 95,\n 118,\n 51,\n 95,\n 101,\n 120,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.id\",\n \"account\": \"MarketV3\"\n }\n ]\n }\n },\n {\n \"name\": \"global_config\",\n \"docs\": [\n \"Global configuration\"\n ],\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 103,\n 108,\n 111,\n 98,\n 97,\n 108,\n 95,\n 99,\n 111,\n 110,\n 102,\n 105,\n 103\n ]\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"yes_winner\",\n \"type\": \"bool\"\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"WinningToken\"\n }\n }\n },\n {\n \"name\": \"update_creator_v3\",\n \"docs\": [\n \"Updates the creator of a V3 market\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - The context containing update accounts\",\n \"* `new_creator` - The new creator's public key\",\n \"\",\n \"# Returns\",\n \"* Result indicating success or failure\"\n ],\n \"discriminator\": [\n 192,\n 95,\n 207,\n 42,\n 161,\n 180,\n 33,\n 62\n ],\n \"accounts\": [\n {\n \"name\": \"current_creator\",\n \"docs\": [\n \"Current creator (must sign)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"new_creator\"\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"Market account\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 109,\n 97,\n 114,\n 107,\n 101,\n 116,\n 45,\n 118,\n 51\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"market.id\",\n \"account\": \"MarketV3\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"new_creator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"GlobalConfig\",\n \"discriminator\": [\n 149,\n 8,\n 156,\n 202,\n 160,\n 252,\n 176,\n 217\n ]\n },\n {\n \"name\": \"Market\",\n \"discriminator\": [\n 219,\n 190,\n 213,\n 55,\n 0,\n 227,\n 198,\n 154\n ]\n },\n {\n \"name\": \"MarketExtension\",\n \"discriminator\": [\n 37,\n 143,\n 0,\n 22,\n 58,\n 40,\n 52,\n 44\n ]\n },\n {\n \"name\": \"MarketV3\",\n \"discriminator\": [\n 247,\n 134,\n 112,\n 200,\n 45,\n 95,\n 27,\n 136\n ]\n },\n {\n \"name\": \"MarketV3Extension\",\n \"discriminator\": [\n 66,\n 142,\n 160,\n 171,\n 84,\n 68,\n 153,\n 246\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"BufferPeriodUpdated\",\n \"discriminator\": [\n 50,\n 193,\n 188,\n 146,\n 213,\n 236,\n 63,\n 224\n ]\n },\n {\n \"name\": \"BurnDecisionTokensEvent\",\n \"discriminator\": [\n 194,\n 248,\n 24,\n 110,\n 133,\n 210,\n 96,\n 232\n ]\n },\n {\n \"name\": \"BuyV3TokensEvent\",\n \"discriminator\": [\n 137,\n 174,\n 78,\n 218,\n 200,\n 120,\n 38,\n 7\n ]\n },\n {\n \"name\": \"CreatorRefundEvent\",\n \"discriminator\": [\n 230,\n 23,\n 204,\n 95,\n 135,\n 31,\n 5,\n 25\n ]\n },\n {\n \"name\": \"CreatorRefundV3Event\",\n \"discriminator\": [\n 164,\n 41,\n 21,\n 115,\n 249,\n 137,\n 17,\n 136\n ]\n },\n {\n \"name\": \"CreatorUpdatedV3Event\",\n \"discriminator\": [\n 255,\n 181,\n 17,\n 184,\n 199,\n 123,\n 162,\n 190\n ]\n },\n {\n \"name\": \"FeeEvent\",\n \"discriminator\": [\n 73,\n 79,\n 78,\n 127,\n 184,\n 213,\n 13,\n 220\n ]\n },\n {\n \"name\": \"MarketCreatedEvent\",\n \"discriminator\": [\n 130,\n 142,\n 5,\n 16,\n 107,\n 160,\n 73,\n 124\n ]\n },\n {\n \"name\": \"MarketResolvableUpdated\",\n \"discriminator\": [\n 101,\n 255,\n 127,\n 205,\n 46,\n 146,\n 153,\n 157\n ]\n },\n {\n \"name\": \"MarketResolvableV3Event\",\n \"discriminator\": [\n 8,\n 161,\n 76,\n 225,\n 143,\n 213,\n 139,\n 158\n ]\n },\n {\n \"name\": \"MarketV2CreatedEvent\",\n \"discriminator\": [\n 39,\n 108,\n 151,\n 231,\n 171,\n 113,\n 198,\n 175\n ]\n },\n {\n \"name\": \"MarketV2ResolvableUpdated\",\n \"discriminator\": [\n 250,\n 22,\n 126,\n 96,\n 59,\n 231,\n 75,\n 200\n ]\n },\n {\n \"name\": \"MarketV3CreatedEvent\",\n \"discriminator\": [\n 72,\n 134,\n 87,\n 64,\n 79,\n 167,\n 9,\n 189\n ]\n },\n {\n \"name\": \"MintDecisionTokensEvent\",\n \"discriminator\": [\n 244,\n 132,\n 127,\n 247,\n 11,\n 218,\n 227,\n 77\n ]\n },\n {\n \"name\": \"PriceGetterEvent\",\n \"discriminator\": [\n 154,\n 255,\n 209,\n 101,\n 176,\n 232,\n 166,\n 73\n ]\n },\n {\n \"name\": \"RedeemPositionEvent\",\n \"discriminator\": [\n 229,\n 215,\n 73,\n 152,\n 17,\n 193,\n 28,\n 179\n ]\n },\n {\n \"name\": \"RedeemV3PositionEvent\",\n \"discriminator\": [\n 246,\n 195,\n 218,\n 185,\n 221,\n 119,\n 7,\n 51\n ]\n },\n {\n \"name\": \"SetFeeEvent\",\n \"discriminator\": [\n 169,\n 3,\n 1,\n 148,\n 197,\n 127,\n 147,\n 69\n ]\n },\n {\n \"name\": \"SettleMarketEvent\",\n \"discriminator\": [\n 220,\n 116,\n 83,\n 65,\n 32,\n 237,\n 196,\n 165\n ]\n },\n {\n \"name\": \"SettleMarketV3Event\",\n \"discriminator\": [\n 156,\n 110,\n 168,\n 141,\n 88,\n 142,\n 44,\n 100\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"NotCreator\",\n \"msg\": \"Only the current creator can update the creator\"\n },\n {\n \"code\": 6001,\n \"name\": \"MarketResolved\",\n \"msg\": \"Market is already resolved\"\n },\n {\n \"code\": 6002,\n \"name\": \"SameCreator\",\n \"msg\": \"Cannot set creator to the same address\"\n }\n ],\n \"types\": [\n {\n \"name\": \"BufferPeriodUpdated\",\n \"docs\": [\n \"Event emitted when buffer period is updated\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"buffer_period\",\n \"docs\": [\n \"New buffer period in seconds\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"BurnDecisionTokensEvent\",\n \"docs\": [\n \"Event emitted when decision tokens are burned\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"buyer\",\n \"docs\": [\n \"Public key of the token burner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"Public key of the prediction market\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"docs\": [\n \"Amount of decision tokens burned\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_token_amount\",\n \"docs\": [\n \"Amount of collateral tokens returned to user (after burn fee)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"burn_fee_amount\",\n \"docs\": [\n \"Amount of burn fee sent to admin\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"is_yes\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"BuyV3TokensEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"buyer\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"side\",\n \"type\": {\n \"defined\": {\n \"name\": \"TokenSide\"\n }\n }\n },\n {\n \"name\": \"collateral_spent\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_received\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"yes_pot_reserve\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"no_pot_reserve\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"admin_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreatorRefundEvent\",\n \"docs\": [\n \"Event emitted when creator claims refund\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market_id\",\n \"docs\": [\n \"Market ID\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"market_address\",\n \"docs\": [\n \"Market address (PDA)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Creator public key\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"refund_amount\",\n \"docs\": [\n \"Amount refunded\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreatorRefundV3Event\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"refund_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_side\",\n \"type\": {\n \"defined\": {\n \"name\": \"TokenSide\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"CreatorUpdatedV3Event\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"market_id\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"old_creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_creator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"FeeEvent\",\n \"docs\": [\n \"Event emitted when protocol fee is set or updated\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee\",\n \"docs\": [\n \"Protocol fee in basis points (10000 = 100%)\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"GlobalConfig\",\n \"docs\": [\n \"Global configuration account that stores protocol-wide settings and parameters\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"admin\",\n \"docs\": [\n \"The admin pubkey that has authority to modify protocol settings\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"oracle_program\",\n \"docs\": [\n \"The oracle program ID used for resolving prediction markets\",\n \"not used right now.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee\",\n \"docs\": [\n \"Protocol fee taken from trades (between 0-10000, representing 0-100%)\",\n \"all the fee goes to the admin, admin can than distribute it to token holders and lp's (via the lp pool program that will be developed later)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump seed\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"yes_global_metadata\",\n \"docs\": [\n \"Metadata template for YES tokens\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"no_global_metadata\",\n \"docs\": [\n \"Metadata template for NO tokens\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"collateral_token_mint\",\n \"docs\": [\n \"Mint address of the token used as collateral\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"global_id\",\n \"docs\": [\n \"Incrementing ID used to generate unique market identifiers\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_liquidity\",\n \"docs\": [\n \"Minimum liquidity in whole tokens (scaled by collateral decimals at validation)\",\n \"e.g., min_liquidity=10 means 10 tokens regardless of decimal places\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"buffer_period\",\n \"docs\": [\n \"Buffer period in seconds before market can be resolved\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"burn_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"trading_paused\",\n \"docs\": [\n \"Trading pause flag - when true, all trading operations are disabled\"\n ],\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"Market\",\n \"docs\": [\n \"Represents a prediction market where users can trade YES/NO tokens based on an outcome\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"id\",\n \"docs\": [\n \"Unique identifier for this market\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"resolved\",\n \"docs\": [\n \"Whether the market has been resolved with a winning outcome\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"market_reserves\",\n \"docs\": [\n \"Total amount of collateral tokens held in reserve\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_token\",\n \"docs\": [\n \"Mint address of the token used as collateral\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"winning_token_id\",\n \"docs\": [\n \"The winning token type after market resolution (None, Yes, or No)\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WinningToken\"\n }\n }\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"Mint address for YES outcome tokens\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"Mint address for NO outcome tokens\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"yes_token_supply_minted\",\n \"docs\": [\n \"Total supply of YES tokens that have been minted\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"no_token_supply_minted\",\n \"docs\": [\n \"Total supply of NO tokens that have been minted\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Public key of the market creator\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"docs\": [\n \"Public key of the creator's fee treasury\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"question\",\n \"docs\": [\n \"The prediction market question/statement\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"initial_liquidity\",\n \"docs\": [\n \"Initial liquidity provided to the market\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"end_time\",\n \"docs\": [\n \"Unix timestamp when the market ends\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump seed\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"creation_time\",\n \"docs\": [\n \"Unix timestamp when the market was created\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"resolvable\",\n \"docs\": [\n \"Whether the market is resolvable (set by admin/oracle)\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"force_resolve\",\n \"docs\": [\n \"Whether the market has been force resolved (allows immediate refunds)\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"version\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"MarketCreatedEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"question\",\n \"type\": \"string\"\n },\n {\n \"name\": \"initial_liquidity\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"end_time\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"yes_token_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"no_token_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"MarketExtension\",\n \"docs\": [\n \"Extension account for V2 markets with custom odds and oracle\",\n \"Only created when creator specifies custom settings\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market_id\",\n \"docs\": [\n \"Market ID this extension belongs to\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"initial_yes_odds_bps\",\n \"docs\": [\n \"Initial YES odds in basis points (e.g., 7000 = 70% YES)\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"oracle\",\n \"docs\": [\n \"Custom oracle for this market (if different from global)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"MarketResolvableUpdated\",\n \"docs\": [\n \"Event emitted when market resolvable status is updated\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market_id\",\n \"docs\": [\n \"Market ID\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"resolvable\",\n \"docs\": [\n \"New resolvable status\"\n ],\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"MarketResolvableV3Event\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"market_id\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"resolvable\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"MarketV2CreatedEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"market_id\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"question\",\n \"type\": \"string\"\n },\n {\n \"name\": \"initial_liquidity\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"end_time\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"version\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"has_extension\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"yes_odds_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"oracle\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"MarketV2ResolvableUpdated\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market_id\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"resolvable\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"tokens_created\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"yes_token_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"no_token_mint\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"MarketV3\",\n \"docs\": [\n \"V3 Market (Parimutuel) where two sides bet against each other in separate pots\",\n \"Winner side takes all reserves from both pots\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"id\",\n \"docs\": [\n \"Unique identifier for this market\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"resolved\",\n \"docs\": [\n \"Whether the market has been resolved\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"yes_pot_reserve\",\n \"docs\": [\n \"Total collateral in YES pot\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"no_pot_reserve\",\n \"docs\": [\n \"Total collateral in NO pot\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\n \"Market creator\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator_side\",\n \"docs\": [\n \"Which side creator is backing\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"TokenSide\"\n }\n }\n },\n {\n \"name\": \"creator_initial_amount\",\n \"docs\": [\n \"Initial amount creator deposited\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_side_cap\",\n \"docs\": [\n \"Maximum liquidity allowed on creator's side\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"yes_tokens_issued\",\n \"docs\": [\n \"Total YES tokens issued\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"no_tokens_issued\",\n \"docs\": [\n \"Total NO tokens issued\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_token\",\n \"docs\": [\n \"Collateral token mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"yes_token_mint\",\n \"docs\": [\n \"YES token mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"no_token_mint\",\n \"docs\": [\n \"NO token mint\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"winning_token_id\",\n \"docs\": [\n \"Winning side after resolution\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WinningToken\"\n }\n }\n },\n {\n \"name\": \"creator_fee_treasury\",\n \"docs\": [\n \"Creator's fee treasury\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"question\",\n \"docs\": [\n \"Market question\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"end_time\",\n \"docs\": [\n \"Market end timestamp\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creation_time\",\n \"docs\": [\n \"Market creation timestamp\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"resolvable\",\n \"docs\": [\n \"Whether market is resolvable (set by oracle)\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"max_pot_ratio\",\n \"docs\": [\n \"Maximum pot ratio allowed (in basis points, e.g., 10000 = 1:1, 100000 = 10:1)\"\n ],\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"MarketV3CreatedEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"market_id\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"question\",\n \"type\": \"string\"\n },\n {\n \"name\": \"initial_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_side_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"opposing_side_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_side\",\n \"type\": {\n \"defined\": {\n \"name\": \"TokenSide\"\n }\n }\n },\n {\n \"name\": \"creator_side_cap\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"end_time\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_pot_ratio\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"has_extension\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"odds_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"oracle\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"MarketV3Extension\",\n \"docs\": [\n \"Extension account for V3 markets with custom odds and oracle\",\n \"Only created when creator specifies custom settings\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market_id\",\n \"docs\": [\n \"Market ID this extension belongs to\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"odds_bps\",\n \"docs\": [\n \"Odds in basis points for creator's side (e.g., 7000 = 70%)\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"oracle\",\n \"docs\": [\n \"Custom oracle for this market (if different from global)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"MintDecisionTokensEvent\",\n \"docs\": [\n \"Event emitted when decision tokens are minted\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"buyer\",\n \"docs\": [\n \"Public key of the token buyer\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"Public key of the prediction market\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"docs\": [\n \"Amount of collateral tokens provided\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_minted\",\n \"docs\": [\n \"Amount of decision tokens minted\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"buy_yes_token\",\n \"docs\": [\n \"Whether YES tokens were bought (true) or NO tokens (false)\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"creator_fee\",\n \"docs\": [\n \"Amount of creator fee\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"admin_fee\",\n \"docs\": [\n \"Amount of admin fee\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"PriceGetterEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"yes_price\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"no_price\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RedeemPositionEvent\",\n \"docs\": [\n \"Event emitted when position is redeemed\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"redeemer\",\n \"docs\": [\n \"Public key of the position redeemer\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"market\",\n \"docs\": [\n \"Public key of the prediction market\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"winning_token_amount\",\n \"docs\": [\n \"Amount of winning tokens redeemed\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"collateral_redeemed\",\n \"docs\": [\n \"Amount of collateral tokens received\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"winning_token_type\",\n \"docs\": [\n \"Type of winning token (YES or NO)\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"WinningToken\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"RedeemV3PositionEvent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"redeemer\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"tokens_burned\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"payout\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"winning_side\",\n \"type\": {\n \"defined\": {\n \"name\": \"WinningToken\"\n }\n }\n },\n {\n \"name\": \"creator_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"admin_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SetFeeEvent\",\n \"docs\": [\n \"Event emitted when the protocol fee is updated\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee\",\n \"docs\": [\n \"The new fee value (between 0-10000, representing 0-100%)\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SettleMarketEvent\",\n \"docs\": [\n \"Event emitted when market is settled\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market\",\n \"docs\": [\n \"Public key of the prediction market\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"yes_winner\",\n \"docs\": [\n \"Whether YES tokens won (true) or NO tokens (false)\"\n ],\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"SettleMarketV3Event\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"market\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"yes_winner\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"yes_pot_reserve\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"no_pot_reserve\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_reserves\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenSide\",\n \"docs\": [\n \"Which side of the market\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Yes\"\n },\n {\n \"name\": \"No\"\n }\n ]\n }\n },\n {\n \"name\": \"WinningToken\",\n \"docs\": [\n \"Represents the possible winning token types for a market\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"None\"\n },\n {\n \"name\": \"Yes\"\n },\n {\n \"name\": \"No\"\n }\n ]\n }\n }\n ]\n }","import { PublicKey } from \"@solana/web3.js\";\nimport { getAssociatedTokenAddressSync, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\n\nexport function deriveMarketPda(baseMint: PublicKey, quoteMint: PublicKey, programId: PublicKey) {\n return PublicKey.findProgramAddressSync([\n Buffer.from(\"market\"),\n baseMint.toBuffer(),\n quoteMint.toBuffer(),\n ], programId);\n}\n\nexport function derivePositionPda(market: PublicKey, owner: PublicKey, programId: PublicKey) {\n return PublicKey.findProgramAddressSync([\n Buffer.from(\"position\"),\n market.toBuffer(),\n owner.toBuffer(),\n ], programId);\n}\n\n// From IDL: global_config PDA seed: [\"global_config\"]\nexport function deriveGlobalConfigPda(programId: PublicKey) {\n return PublicKey.findProgramAddressSync([Buffer.from(\"global_config\")], programId);\n}\n\n// From IDL: creator_fee_treasury PDA seed\n// NEW format (multi-collateral): [\"creator_fee_treasury\", creator, collateralMint]\n// LEGACY format (pre-multi-collateral): [\"creator_fee_treasury\", creator] - only for existing old USDC markets\nexport function deriveCreatorFeeTreasuryPda(\n creator: PublicKey,\n programId: PublicKey,\n collateralMint: PublicKey\n) {\n // NEW format: always include collateral mint for new markets\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"creator_fee_treasury\"), creator.toBuffer(), collateralMint.toBuffer()],\n programId\n );\n}\n\n// Legacy PDA derivation for markets created before multi-collateral update (USDC only, no collateral mint in seed)\nexport function deriveCreatorFeeTreasuryPdaLegacy(\n creator: PublicKey,\n programId: PublicKey\n) {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"creator_fee_treasury\"), creator.toBuffer()],\n programId\n );\n}\n\n// Many accounts in the IDL are ATAs (buyer/creator/admin/market vault ATAs)\nexport function deriveAta(owner: PublicKey, mint: PublicKey, allowOwnerOffCurve = false, tokenProgramId: PublicKey = TOKEN_PROGRAM_ID, ataProgramId: PublicKey = ASSOCIATED_TOKEN_PROGRAM_ID) {\n return getAssociatedTokenAddressSync(mint, owner, allowOwnerOffCurve, tokenProgramId, ataProgramId);\n}\n\n// Market PDA per IDL derives from yes/no mints as seeds with \"market\"\nexport function deriveMarketPdaFromMints(yesMint: PublicKey, noMint: PublicKey, programId: PublicKey) {\n return PublicKey.findProgramAddressSync([\n Buffer.from(\"market\"),\n yesMint.toBuffer(),\n noMint.toBuffer(),\n ], programId);\n}\n\n// Helpers to derive YES/NO token mints based on global id (u64 LE)\nfunction u64LeBuffer(n: bigint) {\n const buf = Buffer.alloc(8);\n let x = n;\n for (let i = 0; i < 8; i++) { buf[i] = Number(x & 0xffn); x >>= 8n; }\n return buf;\n}\n\nexport function deriveYesTokenMint(globalId: bigint, programId: PublicKey) {\n return PublicKey.findProgramAddressSync([\n Buffer.from(\"yes_token\"),\n u64LeBuffer(globalId),\n ], programId);\n}\n\nexport function deriveNoTokenMint(globalId: bigint, programId: PublicKey) {\n return PublicKey.findProgramAddressSync([\n Buffer.from(\"no_token\"),\n u64LeBuffer(globalId),\n ], programId);\n}\n\n// Metaplex token metadata PDA: [\"metadata\", metadata_program_id, mint]\nexport function deriveTokenMetadataPda(mint: PublicKey, metadataProgramId: PublicKey) {\n return PublicKey.findProgramAddressSync([\n Buffer.from(\"metadata\"),\n metadataProgramId.toBuffer(),\n mint.toBuffer(),\n ], metadataProgramId);\n}\n","import { PublicKey, SystemProgram } from \"@solana/web3.js\";\nimport { z } from \"zod\";\nimport { Client } from \"../platform/client\";\nimport { buildCreateMarketIxIdl, type CreateMarketArgs, buildSetMarketResolvableV2Ix, type SetMarketResolvableV2Args, buildSetMarketResolvableV3Ix, type SetMarketResolvableV3Args } from \"../instructions/idl_builders\";\nimport { decodeAccount } from \"../idl\";\nimport type { AccountsMap } from \"../idl\";\nimport { buildAndSendV0 } from \"../platform/tx\";\nimport type { SignerLike } from \"../platform/wallet\";\nimport {\n deriveGlobalConfigPda,\n deriveAta,\n deriveCreatorFeeTreasuryPda,\n deriveYesTokenMint,\n deriveNoTokenMint,\n deriveTokenMetadataPda,\n} from \"../instructions/pdas\";\nimport { TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\n\nconst DEBUG = process.env.PNP_DEBUG === '1';\n\n// Default collateral mint used when none is provided by caller\n// Using USDC on Mainnet: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\nconst DEFAULT_COLLATERAL_MINT = new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');\n\nconst CreateMarketSchema = z.object({\n baseMint: z.instanceof(PublicKey).optional(),\n quoteMint: z.instanceof(PublicKey).optional(),\n question: z.string().optional(),\n initialLiquidity: z.bigint().optional(),\n endTime: z.bigint().optional(),\n tickSize: z.bigint().optional(),\n lotSize: z.bigint().optional(),\n});\n\nexport class MarketModule {\n constructor(private readonly client: Client, private readonly signer: SignerLike) { }\n\n async createMarket(params: z.infer<typeof CreateMarketSchema>) {\n const p = CreateMarketSchema.parse(params);\n if (!p.question || !p.initialLiquidity || !p.endTime) {\n throw new Error(\"createMarket now requires question, initialLiquidity, and endTime. The legacy v1 path has been removed.\");\n }\n const collateral = p.baseMint ?? DEFAULT_COLLATERAL_MINT;\n return this.createMarketDerived({\n question: p.question,\n initialLiquidity: p.initialLiquidity,\n endTime: p.endTime,\n collateralMint: collateral,\n });\n }\n\n // IDL-backed create market allowing explicit accounts from the pnp.exchange IDL\n async createMarketIdl(accounts: AccountsMap, args: CreateMarketArgs) {\n const ix = buildCreateMarketIxIdl(accounts, args, this.client.programId);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n\n // High-level helper: derive all accounts and create market (V2)\n async createMarketDerived(params: {\n question: string;\n initialLiquidity: bigint;\n endTime: bigint;\n collateralMint?: PublicKey;\n }) {\n const { question, initialLiquidity, endTime } = params;\n const collateralMint = params.collateralMint ?? DEFAULT_COLLATERAL_MINT;\n\n // 1) global_config PDA\n const [globalConfig] = deriveGlobalConfigPda(this.client.programId);\n const ai = await this.client.connection.getAccountInfo(globalConfig, this.client.commitment);\n if (!ai) throw new Error(\"global_config not initialized on-chain\");\n\n // 2) decode to read global_id (u64) and convert to bigint\n const globalCfg = decodeAccount<any>(\"GlobalConfig\", ai.data);\n if (DEBUG) {\n try {\n console.log('GlobalConfig account data:', JSON.stringify(globalCfg, null, 2));\n } catch { }\n }\n\n // Extract globalId from the correct field in the structure\n // The exact field name might be 'globalId', 'global_id', or another property\n let globalId: bigint;\n if (globalCfg.globalId) {\n globalId = BigInt(globalCfg.globalId.toString());\n } else if (globalCfg.global_id) {\n globalId = BigInt(globalCfg.global_id.toString());\n } else {\n // Find the field containing the global ID by inspecting all properties\n const keys = Object.keys(globalCfg);\n if (DEBUG) console.log('Available keys in GlobalConfig:', keys);\n\n // Try to find a property that looks like an ID (either a BN or a number)\n const idField = keys.find(k =>\n typeof (globalCfg as any)[k]?.toNumber === 'function' ||\n typeof (globalCfg as any)[k]?.toString === 'function' ||\n typeof (globalCfg as any)[k] === 'number'\n );\n\n if (idField) {\n if (DEBUG) console.log(`Using ${idField} as the global ID field`);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n globalId = BigInt((globalCfg as any)[idField].toString());\n } else {\n throw new Error(`Could not find global ID in GlobalConfig account. Available fields: ${keys.join(', ')}`);\n }\n }\n\n // 3) Derive V2 market PDA: [\"market-v2\", global_id (le u64)]\n const gidLe = Buffer.alloc(8);\n gidLe.writeBigUInt64LE(globalId);\n const [market] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"market-v2\"), gidLe],\n this.client.programId\n );\n\n // Derive market extension PDA\n // Uses \"market_ext\" seed + global_id buffer (must match on-chain program)\n const [marketExtension] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"market_ext\"), gidLe],\n this.client.programId\n );\n\n // 4) Determine token program (check if using TOKEN_2022 or standard TOKEN_PROGRAM)\n const collateralMintInfo = await this.client.connection.getAccountInfo(collateralMint, this.client.commitment);\n if (!collateralMintInfo) throw new Error(\"collateral_token_mint not found\");\n const tokenProgram = collateralMintInfo.owner.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;\n\n // 5) ATAs (creator and market reserve) - use correct token program for Token-2022\n const payer = this.signer.publicKey;\n const creator = payer; // Set creator same as payer\n const payerCollateralTokenAccount = deriveAta(payer, collateralMint, false, tokenProgram);\n const marketReserveVault = deriveAta(market, collateralMint, true, tokenProgram);\n\n // 6) Derive creator fee treasury (with collateral mint for multi-collateral support)\n const [creatorFeeTreasury] = deriveCreatorFeeTreasuryPda(creator, this.client.programId, collateralMint);\n\n // 7) assemble accounts per IDL (V2) - NOTE: snake_case to match IDL\n // Decision tokens are ALWAYS SPL Token, regardless of collateral type\n // Collateral can be Token-2022 or SPL Token\n const accounts: Record<string, PublicKey> = {\n payer,\n creator,\n market,\n market_extension: marketExtension, // Always include (program may expect it)\n global_config: globalConfig,\n collateral_token_mint: collateralMint,\n payer_collateral_token_account: payerCollateralTokenAccount,\n market_reserve_vault: marketReserveVault,\n creator_fee_treasury: creatorFeeTreasury,\n token_program: tokenProgram, // For collateral (can be Token-2022)\n token_program_decision: TOKEN_PROGRAM_ID, // For decision tokens (always SPL Token)\n associated_token_program: ASSOCIATED_TOKEN_PROGRAM_ID,\n system_program: SystemProgram.programId,\n };\n\n // 7) build ix and send (IDL builder selects create_market_v2)\n // Pass programId to ensure correct network program is used\n // IMPORTANT: Pass yes_odds_bps to trigger market_extension initialization\n // Without this, the extension account is NOT created, causing setMarketResolvableV2 to fail\n const ix = buildCreateMarketIxIdl(accounts, {\n question,\n initial_liquidity: initialLiquidity,\n end_time: endTime,\n creator, // Pass the creator explicitly\n yes_odds_bps: 5000, // Default 50/50 odds - REQUIRED to initialize market_extension\n }, this.client.programId);\n\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 400_000,\n });\n\n return {\n signature: res.signature,\n market,\n };\n }\n\n // ===== Fetchers =====\n async fetchGlobalConfig() {\n const [globalConfig] = deriveGlobalConfigPda(this.client.programId);\n const ai = await this.client.connection.getAccountInfo(globalConfig, this.client.commitment);\n if (!ai) throw new Error(\"global_config not found\");\n const acc = decodeAccount<any>(\"GlobalConfig\", ai.data);\n return { publicKey: globalConfig, account: acc };\n }\n\n async fetchMarket(market: PublicKey) {\n const ai = await this.client.connection.getAccountInfo(market, this.client.commitment);\n if (!ai) throw new Error(\"market account not found\");\n const acc = decodeAccount<any>(\"Market\", ai.data);\n return { publicKey: market, account: acc };\n }\n\n // ===== Set Market Resolvable (V2) =====\n /**\n * ⚠️ DEVNET/TESTING ONLY - This function is for devnet and testing purposes only.\n * It will NOT work on mainnet. Use this only for development and testing.\n */\n async setMarketResolvableIdl(accounts: AccountsMap, args: SetMarketResolvableV2Args) {\n const ix = buildSetMarketResolvableV2Ix(accounts, args);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n if (!res.signature) {\n throw new Error(\"Transaction failed: No signature returned\");\n }\n return { signature: res.signature };\n }\n\n /**\n * Set market resolvable status for V2 markets.\n * \n * ⚠️ DEVNET/TESTING ONLY - This function is for devnet and testing purposes only.\n * It will NOT work on mainnet. Use this only for development and testing.\n * \n * @param params - Parameters for setting market resolvable status\n * @param params.market - Market public key\n * @param params.resolvable - New resolvable status (true/false)\n * @param params.forceResolve - Optional: force resolve (allow immediate refunds)\n * @returns Transaction signature\n */\n async setMarketResolvable(params: {\n market: PublicKey;\n resolvable: boolean;\n forceResolve?: boolean;\n }) {\n const { market, resolvable, forceResolve } = params;\n\n // 1. Fetch market to get market_id\n const { account: marketAccount } = await this.fetchMarket(market);\n\n // Extract market_id - handle different possible field names and types\n let marketId: bigint;\n if (marketAccount.id !== undefined && marketAccount.id !== null) {\n marketId = BigInt(marketAccount.id.toString());\n } else if ((marketAccount as any).market_id !== undefined) {\n marketId = BigInt((marketAccount as any).market_id.toString());\n } else {\n throw new Error(\"Could not extract market_id from market account. Market account missing 'id' field.\");\n }\n\n if (marketId === 0n) {\n throw new Error(\"Market ID is zero, which is invalid\");\n }\n\n // 2. Fetch global config PDA (needed for instruction accounts)\n const [globalConfig] = deriveGlobalConfigPda(this.client.programId);\n const globalConfigInfo = await this.client.connection.getAccountInfo(globalConfig, this.client.commitment);\n if (!globalConfigInfo) throw new Error(\"global_config not initialized on-chain\");\n\n // NOTE: Admin check is disabled - on-chain program will enforce admin requirement\n\n // 3. Get collateral token mint from market\n const collateralTokenMint = new PublicKey(marketAccount.collateral_token || marketAccount.collateralToken);\n const creator = new PublicKey(marketAccount.creator);\n\n // 4. Derive YES and NO token mints from market_id\n const [yesTokenMint] = deriveYesTokenMint(marketId, this.client.programId);\n const [noTokenMint] = deriveNoTokenMint(marketId, this.client.programId);\n\n // 5. Derive creator token accounts (ATAs)\n const creatorYesTokenAccount = deriveAta(creator, yesTokenMint);\n const creatorNoTokenAccount = deriveAta(creator, noTokenMint);\n\n // 6. Derive token metadata PDAs\n // Standard Metaplex Token Metadata Program ID: metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\n const TOKEN_METADATA_PROGRAM_ID = new PublicKey(\"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\");\n const [yesMetadata] = deriveTokenMetadataPda(yesTokenMint, TOKEN_METADATA_PROGRAM_ID);\n const [noMetadata] = deriveTokenMetadataPda(noTokenMint, TOKEN_METADATA_PROGRAM_ID);\n\n // 7. Determine token program (check if using TOKEN_2022 or standard TOKEN_PROGRAM)\n const collateralMintInfo = await this.client.connection.getAccountInfo(collateralTokenMint, this.client.commitment);\n if (!collateralMintInfo) throw new Error(\"collateral_token_mint not found\");\n const tokenProgram = collateralMintInfo.owner.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;\n\n // 8. Derive market extension PDA\n // Uses \"market_ext\" seed + market_id buffer (must match on-chain program)\n const marketIdBuffer = Buffer.alloc(8);\n marketIdBuffer.writeBigUInt64LE(marketId);\n const [marketExtension] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"market_ext\"), marketIdBuffer],\n this.client.programId\n );\n\n // 9. Assemble accounts per IDL (snake_case to match IDL)\n const accounts: AccountsMap & Record<string, PublicKey> = {\n authority: this.signer.publicKey,\n global_config: globalConfig,\n market,\n market_extension: marketExtension, // Always include (optional in IDL but position depends on it)\n collateral_token_mint: collateralTokenMint,\n yes_token_mint: yesTokenMint,\n no_token_mint: noTokenMint,\n creator,\n creator_yes_token_account: creatorYesTokenAccount,\n creator_no_token_account: creatorNoTokenAccount,\n token_metadata_program: TOKEN_METADATA_PROGRAM_ID,\n yes_metadata: yesMetadata,\n no_metadata: noMetadata,\n token_program: tokenProgram,\n associated_token_program: ASSOCIATED_TOKEN_PROGRAM_ID,\n system_program: SystemProgram.programId,\n rent: new PublicKey(\"SysvarRent111111111111111111111111111111111\"),\n };\n\n // 9. Build instruction and send\n const ix = buildSetMarketResolvableV2Ix(accounts, {\n market_id: marketId,\n resolvable,\n force_resolve: forceResolve,\n }, this.client.programId);\n\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n\n if (!res.signature) {\n throw new Error(\"Transaction failed: No signature returned\");\n }\n\n return { signature: res.signature };\n }\n\n // ===== Set Market Resolvable (V3/P2P) =====\n /**\n * ⚠️ DEVNET/TESTING ONLY - This function is for devnet and testing purposes only.\n * It will NOT work on mainnet. Use this only for development and testing.\n */\n async setMarketResolvableP2pIdl(accounts: AccountsMap, args: SetMarketResolvableV3Args) {\n const ix = buildSetMarketResolvableV3Ix(accounts, args);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n if (!res.signature) {\n throw new Error(\"Transaction failed: No signature returned\");\n }\n return { signature: res.signature };\n }\n\n /**\n * Set market resolvable status for V3/P2P markets.\n * \n * ⚠️ DEVNET/TESTING ONLY - This function is for devnet and testing purposes only.\n * It will NOT work on mainnet. Use this only for development and testing.\n * \n * @param params - Parameters for setting market resolvable status\n * @param params.market - Market public key\n * @param params.resolvable - New resolvable status (true/false)\n * @returns Transaction signature\n */\n async setMarketResolvableP2p(params: {\n market: PublicKey;\n resolvable: boolean;\n }) {\n const { market, resolvable } = params;\n\n // 1. Fetch global config PDA (needed for instruction accounts)\n const [globalConfig] = deriveGlobalConfigPda(this.client.programId);\n const globalConfigInfo = await this.client.connection.getAccountInfo(globalConfig, this.client.commitment);\n if (!globalConfigInfo) throw new Error(\"global_config not initialized on-chain\");\n\n // NOTE: Admin check is disabled - on-chain program will enforce admin requirement\n\n // 2. Assemble accounts per IDL (snake_case to match IDL)\n const accounts: AccountsMap & Record<string, PublicKey> = {\n authority: this.signer.publicKey,\n global_config: globalConfig,\n market,\n };\n\n // 3. Build instruction and send\n const ix = buildSetMarketResolvableV3Ix(accounts, {\n resolvable,\n }, this.client.programId);\n\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n\n if (!res.signature) {\n throw new Error(\"Transaction failed: No signature returned\");\n }\n\n return { signature: res.signature };\n }\n}\n","import type { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport { buildIdlIx, type AccountsMap } from \"../idl\";\n\nconst DEBUG = process.env.PNP_DEBUG === '1';\n\nexport type CreateMarketArgs = {\n question: string;\n initial_liquidity: bigint;\n end_time: bigint;\n creator?: PublicKey; // Optional, will default to the payer if not provided\n yes_odds_bps?: number; // Optional: Custom YES odds (100-9900 bps). Default 5000 (50/50)\n oracle?: PublicKey; // Optional: Custom oracle for settlement\n};\n\nexport function buildCreateMarketIxIdl(\n accounts: AccountsMap,\n args: CreateMarketArgs,\n programId?: PublicKey\n): TransactionInstruction {\n if (DEBUG) {\n console.log('Building create_market_v2 instruction with args:', JSON.stringify({\n question: args.question,\n initial_liquidity: args.initial_liquidity.toString(),\n end_time: args.end_time.toString(),\n creator: args.creator?.toBase58() || accounts.creator?.toBase58() || accounts.payer?.toBase58(),\n yes_odds_bps: args.yes_odds_bps,\n oracle: args.oracle?.toBase58()\n }));\n console.log('Accounts being passed to create_market_v2:');\n Object.entries(accounts).forEach(([name, pubkey]) => {\n console.log(` ${name}: ${pubkey?.toString() || 'null'}`);\n });\n }\n\n // Ensure data types match IDL exactly\n // The Anchor IDL expects: [string, u64, u64] for [question, initial_liquidity, end_time]\n const question = args.question;\n\n // For u64 types, we must use BN from @coral-xyz/anchor for proper serialization\n // Convert bigint to string first to avoid precision issues\n const initial_liquidity = new BN(args.initial_liquidity.toString());\n const end_time = new BN(args.end_time.toString());\n\n if (DEBUG) {\n console.log('Prepared arguments for IDL encoding:');\n console.log(` question: ${question} (type: ${typeof question})`);\n console.log(` initial_liquidity: ${initial_liquidity.toString()} (type: ${typeof initial_liquidity})`);\n console.log(` end_time: ${end_time.toString()} (type: ${typeof end_time})`);\n }\n\n // Get the creator from args, or from accounts.creator, or fallback to accounts.payer\n const creator = args.creator || accounts.creator || accounts.payer;\n if (!creator) {\n throw new Error(\"Creator is required for create_market_v2\");\n }\n\n if (DEBUG) {\n console.log(` creator: ${creator.toBase58()} (type: ${typeof creator})`);\n console.log(` yes_odds_bps: ${args.yes_odds_bps ?? 'null (default 5000)'}`);\n console.log(` oracle: ${args.oracle?.toBase58() ?? 'null (default global oracle)'}`);\n }\n\n // Pass all arguments including optional ones (null if not provided)\n // IDL order: [question, initial_liquidity, end_time, creator, yes_odds_bps, oracle]\n return buildIdlIx(\n \"create_market_v2\",\n accounts,\n [\n question,\n initial_liquidity,\n end_time,\n creator,\n args.yes_odds_bps ?? null,\n args.oracle ?? null\n ],\n programId\n );\n}\n\nexport type MintDecisionTokensArgs = {\n amount: bigint;\n buy_yes_token: boolean;\n minimum_out: bigint;\n};\n\nexport function buildMintDecisionTokensIx(\n accounts: AccountsMap,\n args: MintDecisionTokensArgs,\n programId?: PublicKey\n): TransactionInstruction {\n // Anchor expects u64 as BN\n const amount = new BN(args.amount.toString());\n const minimum_out = new BN(args.minimum_out.toString());\n try {\n if (DEBUG) {\n console.log(\"[buildMintDecisionTokensIx] amount:\", args.amount.toString?.() ?? String(args.amount));\n console.log(\"[buildMintDecisionTokensIx] minimum_out:\", args.minimum_out.toString?.() ?? String(args.minimum_out));\n // Log BN forms actually passed down\n console.log(\"[buildMintDecisionTokensIx] BN amount:\", amount.toString(10));\n console.log(\"[buildMintDecisionTokensIx] BN minimum_out:\", minimum_out.toString(10));\n }\n } catch { }\n return buildIdlIx(\"mint_decision_tokens\", accounts, [amount, args.buy_yes_token, minimum_out], programId);\n}\n\nexport type BurnDecisionTokensArgs = {\n amount: bigint;\n burn_yes_token: boolean;\n};\n\nexport function buildBurnDecisionTokensIx(\n accounts: AccountsMap,\n args: BurnDecisionTokensArgs,\n programId?: PublicKey\n): TransactionInstruction {\n const amount = new BN(args.amount.toString());\n try {\n if (DEBUG) {\n console.log(\"[buildBurnDecisionTokensIx] amount:\", args.amount.toString?.() ?? String(args.amount));\n console.log(\"[buildBurnDecisionTokensIx] BN amount:\", amount.toString(10));\n }\n } catch { }\n return buildIdlIx(\"burn_decision_tokens\", accounts, [amount, args.burn_yes_token], programId);\n}\n\nexport function buildClaimCreatorFeeIx(accounts: AccountsMap, programId?: PublicKey): TransactionInstruction {\n return buildIdlIx(\"claim_creator_fee\", accounts, [], programId);\n}\n\nexport function buildCreatorRefundIx(accounts: AccountsMap, programId?: PublicKey): TransactionInstruction {\n return buildIdlIx(\"creator_refund\", accounts, [], programId);\n}\n\nexport function buildCreatorRefundV2Ix(accounts: AccountsMap, programId?: PublicKey): TransactionInstruction {\n return buildIdlIx(\"creator_refund_v2\", accounts, [], programId);\n}\n\nexport function buildCreatorRefundV3Ix(accounts: AccountsMap, programId?: PublicKey): TransactionInstruction {\n return buildIdlIx(\"creator_refund_v3\", accounts, [], programId);\n}\n\nexport function buildRedeemPositionV2Ix(accounts: AccountsMap, programId?: PublicKey): TransactionInstruction {\n return buildIdlIx(\"redeem_position_v2\", accounts, [], programId);\n}\n\nexport function buildRedeemV3PositionIx(accounts: AccountsMap, programId?: PublicKey): TransactionInstruction {\n return buildIdlIx(\"redeem_v3_position\", accounts, [], programId);\n}\n\nexport type SetMarketResolvableV2Args = {\n market_id: bigint;\n resolvable: boolean;\n force_resolve?: boolean;\n};\n\nexport function buildSetMarketResolvableV2Ix(\n accounts: AccountsMap,\n args: SetMarketResolvableV2Args,\n programId?: PublicKey\n): TransactionInstruction {\n const market_id = new BN(args.market_id.toString());\n const resolvable = args.resolvable;\n const force_resolve = args.force_resolve !== undefined ? args.force_resolve : null;\n\n // Anchor expects Option<bool> for force_resolve, which can be null or a boolean\n return buildIdlIx(\"set_market_resolvable_v2\", accounts, [market_id, resolvable, force_resolve], programId);\n}\n\nexport type SetMarketResolvableV3Args = {\n resolvable: boolean;\n};\n\nexport function buildSetMarketResolvableV3Ix(\n accounts: AccountsMap,\n args: SetMarketResolvableV3Args,\n programId?: PublicKey\n): TransactionInstruction {\n const resolvable = args.resolvable;\n return buildIdlIx(\"set_market_resolvable_v3\", accounts, [resolvable], programId);\n}\n","import {\n AddressLookupTableAccount,\n ComputeBudgetProgram,\n TransactionInstruction,\n PublicKey,\n SendOptions,\n SystemProgram,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Client } from \"./client\";\nimport { SignerLike } from \"./wallet\";\n\nexport interface SendTxOptions extends SendOptions {\n computeUnitLimit?: number;\n computeUnitPriceMicroLamports?: number;\n addressLookupTables?: AddressLookupTableAccount[];\n simulate?: boolean;\n}\n\nexport async function buildAndSendV0(\n client: Client,\n signer: SignerLike,\n ixs: readonly TransactionInstruction[],\n opts: SendTxOptions = {}\n) {\n const latest = await client.connection.getLatestBlockhash({ commitment: client.commitment });\n\n const preIxs = [] as any[];\n if (opts.computeUnitLimit) preIxs.push(ComputeBudgetProgram.setComputeUnitLimit({ units: opts.computeUnitLimit }));\n if (opts.computeUnitPriceMicroLamports) preIxs.push(ComputeBudgetProgram.setComputeUnitPrice({ microLamports: opts.computeUnitPriceMicroLamports }));\n\n const msg = new TransactionMessage({\n payerKey: signer.publicKey,\n recentBlockhash: latest.blockhash,\n instructions: [...preIxs, ...ixs],\n }).compileToV0Message(opts.addressLookupTables);\n\n const tx = new VersionedTransaction(msg);\n await signer.signTransaction(tx);\n\n if (opts.simulate) {\n const sim = await client.connection.simulateTransaction(tx, { sigVerify: true });\n return { simulated: sim, signature: undefined as string | undefined };\n }\n\n const sig = await client.connection.sendTransaction(tx, { skipPreflight: false, maxRetries: 3, preflightCommitment: client.commitment });\n return { signature: sig };\n}\n","import { PublicKey, SystemProgram, TransactionInstruction, SendTransactionError } from \"@solana/web3.js\";\nimport { z } from \"zod\";\nimport { Client } from \"../platform/client\";\nimport { buildTradeIx } from \"../instructions/trading\";\nimport { buildMintDecisionTokensIx, buildBurnDecisionTokensIx, type MintDecisionTokensArgs, type BurnDecisionTokensArgs } from \"../instructions/idl_builders\";\nimport type { AccountsMap } from \"../idl\";\nimport { decodeAccount } from \"../idl\";\nimport { buildAndSendV0 } from \"../platform/tx\";\nimport type { SignerLike } from \"../platform/wallet\";\nimport { deriveAta, deriveGlobalConfigPda } from \"../instructions/pdas\";\nimport { TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID, getAccount, getAssociatedTokenAddressSync, createAssociatedTokenAccountInstruction, getMint } from \"@solana/spl-token\";\n\nconst TradeSchema = z.object({\n market: z.instanceof(PublicKey),\n side: z.union([z.literal(\"buy\"), z.literal(\"sell\")]),\n price: z.bigint(),\n size: z.bigint(),\n});\n\nexport class TradingModule {\n constructor(private readonly client: Client, private readonly signer: SignerLike) {}\n\n // Anchor account discriminators are 8 bytes at the start of account data.\n // Allow overriding via env var MARKET_CREATED_V3_DISCRIMINATOR (hex string) for flexibility.\n private static readonly MARKET_CREATED_V3_DISCRIMINATOR: Buffer = (() => {\n const hex = process.env.MARKET_CREATED_V3_DISCRIMINATOR || \"488657404fa709bd\";\n try { return Buffer.from(hex, \"hex\"); } catch { return Buffer.from(\"488657404fa709bd\", \"hex\"); }\n })();\n\n private decodeMarketAny(data: Buffer): any {\n // If first 8 bytes match V3 discriminator, decode as MarketV3; else try Market.\n const prefix = data.subarray(0, 8);\n if (prefix.equals(TradingModule.MARKET_CREATED_V3_DISCRIMINATOR)) {\n return decodeAccount<any>(\"MarketV3\", data);\n }\n try {\n return decodeAccount<any>(\"Market\", data);\n } catch {\n // Fallback: try MarketV3 in case discriminator env wasn't provided/matching\n return decodeAccount<any>(\"MarketV3\", data);\n }\n }\n\n async trade(params: z.infer<typeof TradeSchema>) {\n const p = TradeSchema.parse(params);\n const ix = buildTradeIx({\n trader: this.signer.publicKey,\n market: p.market,\n side: p.side,\n price: p.price,\n size: p.size,\n });\n\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n\n // IDL-backed mint of decision tokens (YES/NO) using explicit accounts per IDL\n async mintDecisionTokens(accounts: AccountsMap, args: MintDecisionTokensArgs) {\n const ix = buildMintDecisionTokensIx(accounts, args, this.client.programId);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n\n // IDL-backed burn of decision tokens for collateral redemption\n async burnDecisionTokens(accounts: AccountsMap, args: BurnDecisionTokensArgs) {\n const ix = buildBurnDecisionTokensIx(accounts, args, this.client.programId);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n\n // ===== Derived helpers =====\n async mintDecisionTokensDerived(params: { market: PublicKey; amount: bigint; buyYesToken: boolean; minimumOut: bigint }) {\n const { market, amount, buyYesToken, minimumOut } = params;\n try {\n console.log(\"[mintDecisionTokensDerived] amount:\", amount.toString(), \"buyYesToken:\", buyYesToken, \"minimumOut:\", minimumOut.toString());\n } catch {}\n if (amount <= 0n) throw new Error(\"amount must be > 0\");\n const buyer = this.signer.publicKey;\n\n // Fetch and decode Market to get mints, creator, collateral\n const mai = await this.client.connection.getAccountInfo(market, this.client.commitment);\n if (!mai) throw new Error(\"market account not found\");\n const m = this.decodeMarketAny(mai.data as Buffer);\n const yesTokenMint: PublicKey = new PublicKey(m.yesTokenMint ?? m.yes_token_mint);\n const noTokenMint: PublicKey = new PublicKey(m.noTokenMint ?? m.no_token_mint);\n const collateralMint: PublicKey = new PublicKey(m.collateralToken ?? m.collateral_token);\n const marketCreator: PublicKey = new PublicKey(m.creator ?? m.market_creator ?? m.creator);\n const creatorFeeTreasury: PublicKey = new PublicKey(m.creatorFeeTreasury ?? m.creator_fee_treasury);\n // Preflight: validate market reserves and token supplies to avoid on-chain TokenCalculationError (6002)\n try {\n // Normalize possibly different field casings/types\n const reservesRaw: any = (m as any).marketReserves ?? (m as any).market_reserves;\n const yesMintedRaw: any = (m as any).yesTokenSupplyMinted ?? (m as any).yes_token_supply_minted;\n const noMintedRaw: any = (m as any).noTokenSupplyMinted ?? (m as any).no_token_supply_minted;\n\n const toBigInt = (v: any): bigint | null => {\n if (v === undefined || v === null) return null;\n if (typeof v === \"bigint\") return v;\n if (typeof v === \"number\") return BigInt(v);\n if (typeof v === \"string\") {\n // Could be hex or decimal\n const isHex = /^[0-9a-fA-F]+$/.test(v);\n try { return isHex ? BigInt(\"0x\" + v) : BigInt(v); } catch { return null; }\n }\n return null;\n };\n\n const reserves = toBigInt(reservesRaw);\n const yesMinted = toBigInt(yesMintedRaw);\n const noMinted = toBigInt(noMintedRaw);\n\n if (reserves !== null && reserves === 0n) {\n throw new Error(\"Market has zero reserves; cannot price trade. Recreate/seed the market with initial liquidity.\");\n }\n if (yesMinted !== null && noMinted !== null) {\n // If both are zero, AMM may not be initialized for pricing\n if (yesMinted === 0n && noMinted === 0n) {\n throw new Error(\"Market token supplies are uninitialized (YES=0, NO=0); cannot calculate mint output. Seed market first.\");\n }\n }\n } catch (prefErr) {\n if (prefErr instanceof Error) throw prefErr;\n }\n\n // Fetch GlobalConfig to get admin\n const [globalConfig] = deriveGlobalConfigPda(this.client.programId);\n const gai = await this.client.connection.getAccountInfo(globalConfig, this.client.commitment);\n if (!gai) throw new Error(\"global_config not initialized\");\n const g = decodeAccount<any>(\"GlobalConfig\", gai.data);\n const admin: PublicKey = new PublicKey(g.admin);\n\n // NEW: Decision tokens (YES/NO) always use SPL Token, collateral can use Token-2022\n // Fetch mint account infos to determine token programs\n const [yesAi, noAi, colAi] = await Promise.all([\n this.client.connection.getAccountInfo(yesTokenMint, this.client.commitment),\n this.client.connection.getAccountInfo(noTokenMint, this.client.commitment),\n this.client.connection.getAccountInfo(collateralMint, this.client.commitment),\n ]);\n if (!yesAi || !noAi || !colAi) throw new Error(\"one or more mint accounts not found\");\n \n // Decision tokens (YES/NO) always use SPL Token Program\n const decisionTokenProgramId = TOKEN_PROGRAM_ID;\n // Collateral can use either SPL Token or Token-2022\n const collateralTokenProgramId = colAi.owner.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;\n const ataProgramId = ASSOCIATED_TOKEN_PROGRAM_ID;\n \n // Validate collateral mint via detected program\n await getMint(this.client.connection, collateralMint, this.client.commitment, collateralTokenProgramId);\n\n // Derive ATAs - use appropriate token program for each type\n // Collateral accounts use the collateral token program (may be Token-2022)\n const buyerCollateralTokenAccount = deriveAta(buyer, collateralMint, false, collateralTokenProgramId, ataProgramId);\n const adminCollateralTokenAccount = deriveAta(admin, collateralMint, false, collateralTokenProgramId, ataProgramId);\n const marketReserveVault = deriveAta(market, collateralMint, true, collateralTokenProgramId, ataProgramId);\n // Decision token accounts always use SPL Token Program\n const buyerYesTokenAccount = deriveAta(buyer, yesTokenMint, false, decisionTokenProgramId, ataProgramId);\n const buyerNoTokenAccount = deriveAta(buyer, noTokenMint, false, decisionTokenProgramId, ataProgramId);\n\n // Pre-instructions: ensure required ATAs exist (we can pay for them)\n const preIxs: TransactionInstruction[] = [];\n const maybeCreateAta = async (owner: PublicKey, mint: PublicKey, ata: PublicKey, useTokenProgram: PublicKey, useAtaProgram: PublicKey = ataProgramId) => {\n const info = await this.client.connection.getAccountInfo(ata, this.client.commitment);\n if (!info) {\n preIxs.push(\n createAssociatedTokenAccountInstruction(\n this.signer.publicKey, // payer\n ata,\n owner,\n mint,\n useTokenProgram,\n useAtaProgram\n )\n );\n }\n };\n\n // Create ATAs with appropriate token programs\n await maybeCreateAta(buyer, collateralMint, buyerCollateralTokenAccount, collateralTokenProgramId);\n await maybeCreateAta(admin, collateralMint, adminCollateralTokenAccount, collateralTokenProgramId);\n await maybeCreateAta(market, collateralMint, marketReserveVault, collateralTokenProgramId);\n // Decision token ATAs always use SPL Token Program\n await maybeCreateAta(buyer, yesTokenMint, buyerYesTokenAccount, decisionTokenProgramId, ataProgramId);\n await maybeCreateAta(buyer, noTokenMint, buyerNoTokenAccount, decisionTokenProgramId, ataProgramId);\n\n // Check buyer collateral balance >= amount\n const buyerCollateralInfo = await this.client.connection.getTokenAccountBalance(buyerCollateralTokenAccount).catch(() => null as any);\n if (!buyerCollateralInfo) {\n throw new Error(\"Buyer collateral token account missing or unreadable\");\n }\n const buyerCollateralAmount = BigInt(buyerCollateralInfo.value.amount || \"0\");\n if (buyerCollateralAmount < amount) {\n throw new Error(`Insufficient collateral balance: have ${buyerCollateralInfo.value.uiAmountString}, need ${(Number(amount)/1_000_000).toFixed(6)}`);\n }\n\n const accounts: AccountsMap & Record<string, PublicKey> = {\n buyer,\n admin,\n market_creator: marketCreator,\n market,\n global_config: globalConfig,\n yes_token_mint: yesTokenMint,\n no_token_mint: noTokenMint,\n buyer_yes_token_account: buyerYesTokenAccount,\n buyer_no_token_account: buyerNoTokenAccount,\n market_reserve_vault: marketReserveVault,\n collateral_token_mint: collateralMint,\n buyer_collateral_token_account: buyerCollateralTokenAccount,\n admin_collateral_token_account: adminCollateralTokenAccount,\n creator_fee_treasury: creatorFeeTreasury,\n token_program: collateralTokenProgramId, // For collateral (may be Token-2022)\n token_program_decision: decisionTokenProgramId, // For YES/NO tokens (always SPL Token)\n associated_token_program: ataProgramId,\n system_program: SystemProgram.programId,\n } as any;\n\n const ix = buildMintDecisionTokensIx(accounts, {\n amount,\n buy_yes_token: buyYesToken,\n minimum_out: minimumOut,\n }, this.client.programId);\n const ixs = [...preIxs, ix];\n const res = await buildAndSendV0(this.client, this.signer, ixs, { computeUnitLimit: 600_000 });\n return { signature: res.signature };\n }\n\n async burnDecisionTokensDerived(params: { market: PublicKey; amount: bigint; burnYesToken: boolean }) {\n const { market, amount, burnYesToken } = params;\n const buyer = this.signer.publicKey;\n\n // Fetch and decode Market\n const mai = await this.client.connection.getAccountInfo(market, this.client.commitment);\n if (!mai) throw new Error(\"market account not found\");\n const m = decodeAccount<any>(\"Market\", mai.data);\n const yesTokenMint: PublicKey = new PublicKey(m.yesTokenMint ?? m.yes_token_mint);\n const noTokenMint: PublicKey = new PublicKey(m.noTokenMint ?? m.no_token_mint);\n const collateralMint: PublicKey = new PublicKey(m.collateralToken ?? m.collateral_token);\n const marketCreator: PublicKey = new PublicKey(m.creator ?? m.market_creator ?? m.creator);\n const creatorFeeTreasury: PublicKey = new PublicKey(m.creatorFeeTreasury ?? m.creator_fee_treasury);\n\n // GlobalConfig for admin\n const [globalConfig] = deriveGlobalConfigPda(this.client.programId);\n const gai = await this.client.connection.getAccountInfo(globalConfig, this.client.commitment);\n if (!gai) throw new Error(\"global_config not initialized\");\n const g = decodeAccount<any>(\"GlobalConfig\", gai.data);\n const admin: PublicKey = new PublicKey(g.admin);\n\n // NEW: Decision tokens (YES/NO) always use SPL Token, collateral can use Token-2022\n const [yesAi, noAi, colAi] = await Promise.all([\n this.client.connection.getAccountInfo(yesTokenMint, this.client.commitment),\n this.client.connection.getAccountInfo(noTokenMint, this.client.commitment),\n this.client.connection.getAccountInfo(collateralMint, this.client.commitment),\n ]);\n if (!yesAi || !noAi || !colAi) throw new Error(\"one or more mint accounts not found\");\n \n // Decision tokens (YES/NO) always use SPL Token Program\n const decisionTokenProgramId = TOKEN_PROGRAM_ID;\n // Collateral can use either SPL Token or Token-2022\n const collateralTokenProgramId = colAi.owner.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;\n const ataProgramId = ASSOCIATED_TOKEN_PROGRAM_ID;\n\n // Derive ATAs with appropriate token programs\n // Decision token accounts always use SPL Token Program\n const buyerYesTokenAccount = deriveAta(buyer, yesTokenMint, false, decisionTokenProgramId, ataProgramId);\n const buyerNoTokenAccount = deriveAta(buyer, noTokenMint, false, decisionTokenProgramId, ataProgramId);\n // Collateral accounts use the collateral token program (may be Token-2022)\n const buyerCollateralTokenAccount = deriveAta(buyer, collateralMint, false, collateralTokenProgramId, ataProgramId);\n const adminCollateralTokenAccount = deriveAta(admin, collateralMint, false, collateralTokenProgramId, ataProgramId);\n const marketReserveVault = deriveAta(market, collateralMint, true, collateralTokenProgramId, ataProgramId);\n\n const accounts: AccountsMap & Record<string, PublicKey> = {\n buyer,\n admin,\n market_creator: marketCreator,\n market,\n global_config: globalConfig,\n yes_token_mint: yesTokenMint,\n no_token_mint: noTokenMint,\n buyer_yes_token_account: buyerYesTokenAccount,\n buyer_no_token_account: buyerNoTokenAccount,\n market_reserve_vault: marketReserveVault,\n collateral_token_mint: collateralMint,\n buyer_collateral_token_account: buyerCollateralTokenAccount,\n admin_collateral_token_account: adminCollateralTokenAccount,\n creator_fee_treasury: creatorFeeTreasury,\n token_program: collateralTokenProgramId, // For collateral (may be Token-2022)\n token_program_decision: decisionTokenProgramId, // For YES/NO tokens (always SPL Token)\n associated_token_program: ataProgramId,\n system_program: SystemProgram.programId,\n } as any;\n\n const ix = buildBurnDecisionTokensIx(accounts, {\n amount,\n burn_yes_token: burnYesToken,\n }, this.client.programId);\n const res = await buildAndSendV0(this.client, this.signer, [ix], { computeUnitLimit: 600_000 });\n return { signature: res.signature };\n }\n\n // ===== High-level helpers mirrored from working Node script =====\n async getMarketInfo(market: PublicKey) {\n const mai = await this.client.connection.getAccountInfo(market, this.client.commitment);\n if (!mai) throw new Error(\"market account not found\");\n const m = this.decodeMarketAny(mai.data as Buffer);\n return {\n address: market,\n question: m.question,\n id: m.id ?? m.market_id,\n creator: new PublicKey(m.creator ?? m.market_creator ?? m.creator),\n initialLiquidity: m.initialLiquidity ?? m.initial_liquidity,\n marketReserves: m.marketReserves ?? m.market_reserves,\n endTime: m.endTime ?? m.end_time,\n resolvable: m.resolvable,\n resolved: m.resolved,\n winningTokenId: m.winningTokenId ?? m.winning_token_id,\n yesTokenMint: new PublicKey(m.yesTokenMint ?? m.yes_token_mint),\n noTokenMint: new PublicKey(m.noTokenMint ?? m.no_token_mint),\n collateralToken: new PublicKey(m.collateralToken ?? m.collateral_token),\n yesTokenSupplyMinted: m.yesTokenSupplyMinted ?? m.yes_token_supply_minted,\n noTokenSupplyMinted: m.noTokenSupplyMinted ?? m.no_token_supply_minted,\n };\n }\n\n async getBalances(market: PublicKey) {\n const info = await this.getMarketInfo(market);\n const owner = this.signer.publicKey;\n const collateralAta = deriveAta(owner, info.collateralToken);\n const yesAta = deriveAta(owner, info.yesTokenMint);\n const noAta = deriveAta(owner, info.noTokenMint);\n\n const [coll, yes, no] = await Promise.all([\n this.client.connection.getTokenAccountBalance(collateralAta).catch(() => null as any),\n this.client.connection.getTokenAccountBalance(yesAta).catch(() => null as any),\n this.client.connection.getTokenAccountBalance(noAta).catch(() => null as any),\n ]);\n\n return {\n collateral: {\n account: collateralAta,\n amount: coll?.value?.amount ?? \"0\",\n uiAmount: coll?.value?.uiAmount ?? 0,\n uiAmountString: coll?.value?.uiAmountString ?? \"0\",\n },\n yes: {\n account: yesAta,\n amount: yes?.value?.amount ?? \"0\",\n uiAmount: yes?.value?.uiAmount ?? 0,\n uiAmountString: yes?.value?.uiAmountString ?? \"0\",\n },\n no: {\n account: noAta,\n amount: no?.value?.amount ?? \"0\",\n uiAmount: no?.value?.uiAmount ?? 0,\n uiAmountString: no?.value?.uiAmountString ?? \"0\",\n },\n };\n }\n\n async getPrices(market: PublicKey) {\n const info = await this.getMarketInfo(market);\n const yes = Number(info.yesTokenSupplyMinted ?? 0n);\n const no = Number(info.noTokenSupplyMinted ?? 0n);\n const total = yes + no;\n const yesShare = total > 0 ? yes / total : 0.5;\n const noShare = total > 0 ? no / total : 0.5;\n return { yesMinted: yes, noMinted: no, totalMinted: total, yesShare, noShare };\n }\n\n async buyTokensUsdc(params: { market: PublicKey; buyYesToken: boolean; amountUsdc: number; minimumOut?: bigint }) {\n const { market, buyYesToken } = params;\n if (!Number.isFinite(params.amountUsdc) || params.amountUsdc <= 0) throw new Error(\"Invalid amountUsdc\");\n\n // Determine collateral mint decimals dynamically (supports Token-2022)\n const info = await this.getMarketInfo(market);\n // Preflight: block trades for ended or resolved markets to avoid on-chain MarketEnded error (0x1770)\n try {\n const nowSec = Math.floor(Date.now() / 1000);\n const rawEnd = info.endTime as any;\n let endSec: number | null = null;\n if (typeof rawEnd === \"bigint\") {\n endSec = Number(rawEnd);\n } else if (typeof rawEnd === \"number\") {\n endSec = rawEnd;\n } else if (typeof rawEnd === \"string\") {\n // Some decoders may return hex-encoded seconds; try hex first, then decimal\n const hexMatch = /^[0-9a-fA-F]+$/.test(rawEnd);\n try {\n const bi = hexMatch ? BigInt(\"0x\" + rawEnd) : BigInt(rawEnd);\n endSec = Number(bi);\n } catch {\n const n = Number(rawEnd);\n endSec = Number.isFinite(n) ? n : null;\n }\n }\n const ended = endSec !== null ? nowSec >= endSec : false;\n const resolved = (info as any).resolved === true;\n if (resolved || ended) {\n const endIso = endSec ? new Date(endSec * 1000).toISOString() : \"unknown\";\n throw new Error(`Market not tradable: ${resolved ? \"resolved\" : \"ended\"}. End time: ${endIso}.`);\n }\n } catch (e) {\n if (e instanceof Error && e.message.startsWith(\"Market not tradable\")) {\n throw e;\n }\n // If preflight parsing fails, proceed; on-chain program will enforce correctness.\n }\n const collateralMint = info.collateralToken;\n const mintAi = await this.client.connection.getAccountInfo(collateralMint, this.client.commitment);\n if (!mintAi) throw new Error(\"collateral mint account not found\");\n const is2022 = mintAi.owner.equals(TOKEN_2022_PROGRAM_ID);\n const tokenProgram = is2022 ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;\n const mintInfo = await getMint(this.client.connection, collateralMint, this.client.commitment, tokenProgram);\n const decimals = mintInfo.decimals ?? 6;\n // Convert amountUsdc to base units without floating-point error\n const scaleBI = 10n ** BigInt(decimals);\n const amtStr = String(params.amountUsdc);\n const [intPartRaw, fracPartRaw = \"\"] = amtStr.split(\".\");\n const intBI = intPartRaw ? BigInt(intPartRaw) : 0n;\n const fracPadded = (fracPartRaw + \"0\".repeat(decimals)).slice(0, decimals);\n const fracBI = fracPadded.length ? BigInt(fracPadded) : 0n;\n const amount = intBI * scaleBI + fracBI;\n try {\n console.log(\"[buyTokensUsdc] amount_usdc=\", params.amountUsdc, \"decimals=\", decimals, \"base_units=\", amount.toString());\n } catch {}\n const minimumOut = params.minimumOut ?? 0n; // pass-through to IDL\n\n // balances before\n const before = await this.getBalances(market);\n\n let signature: string = \"\";\n try {\n const res = await this.mintDecisionTokensDerived({ market, amount, buyYesToken, minimumOut });\n signature = res.signature as string;\n } catch (e: any) {\n const base = `buyTokensUsdc failed (amount_usdc=${params.amountUsdc}, decimals=${decimals}, base_units=${amount.toString()}, buyYesToken=${buyYesToken})`;\n if (e instanceof SendTransactionError) {\n const logs = await e.getLogs(this.client.connection).catch(() => undefined);\n throw new Error(`${base}. On-chain logs: ${JSON.stringify(logs ?? [])}. Cause: ${e.message}`);\n }\n throw new Error(`${base}. Cause: ${e?.message ?? String(e)}`);\n }\n\n // small wait for RPC consistency\n await new Promise((r) => setTimeout(r, 1500));\n const after = await this.getBalances(market);\n\n const usdcSpent = Number(before.collateral.uiAmount) - Number(after.collateral.uiAmount);\n const tokenDelta = Number(buyYesToken ? after.yes.uiAmount : after.no.uiAmount) - Number(buyYesToken ? before.yes.uiAmount : before.no.uiAmount);\n\n return {\n signature,\n usdcSpent,\n tokensReceived: tokenDelta,\n before,\n after,\n };\n }\n\n async sellTokensBase(params: { market: PublicKey; burnYesToken: boolean; amountBaseUnits: bigint }) {\n const { market, burnYesToken, amountBaseUnits } = params;\n if (amountBaseUnits <= 0n) throw new Error(\"Invalid amountBaseUnits\");\n\n const before = await this.getBalances(market);\n let signature: string = \"\";\n try {\n const res = await this.burnDecisionTokensDerived({ market, amount: amountBaseUnits, burnYesToken });\n signature = res.signature as string;\n } catch (e: any) {\n // include token mint decimals for the decision tokens if helpful (both YES/NO assumed 6, but fetch to be safe)\n const info = await this.getMarketInfo(market);\n const mint = burnYesToken ? info.yesTokenMint : info.noTokenMint;\n const mintInfo = await getMint(this.client.connection, mint, this.client.commitment).catch(() => undefined as any);\n const decimals = mintInfo?.decimals ?? 6;\n const base = `sellTokensBase failed (burnYesToken=${burnYesToken}, base_units=${amountBaseUnits.toString()}, token_decimals=${decimals})`;\n if (e instanceof SendTransactionError) {\n const logs = await e.getLogs(this.client.connection).catch(() => undefined);\n throw new Error(`${base}. On-chain logs: ${JSON.stringify(logs ?? [])}. Cause: ${e.message}`);\n }\n throw new Error(`${base}. Cause: ${e?.message ?? String(e)}`);\n }\n await new Promise((r) => setTimeout(r, 1500));\n const after = await this.getBalances(market);\n\n const tokensSold = Number(burnYesToken ? before.yes.uiAmount : before.no.uiAmount) - Number(burnYesToken ? after.yes.uiAmount : after.no.uiAmount);\n const usdcReceived = Number(after.collateral.uiAmount) - Number(before.collateral.uiAmount);\n\n return { signature, tokensSold, usdcReceived, before, after };\n }\n\n async redeemPosition(market: PublicKey) {\n // Decode needed accounts\n const mai = await this.client.connection.getAccountInfo(market, this.client.commitment);\n if (!mai) throw new Error(\"market account not found\");\n const m = decodeAccount<any>(\"Market\", mai.data);\n const yesTokenMint: PublicKey = new PublicKey(m.yesTokenMint ?? m.yes_token_mint);\n const noTokenMint: PublicKey = new PublicKey(m.noTokenMint ?? m.no_token_mint);\n const collateralMint: PublicKey = new PublicKey(m.collateralToken ?? m.collateral_token);\n const marketCreator: PublicKey = new PublicKey(m.creator ?? m.market_creator ?? m.creator);\n const creatorFeeTreasury: PublicKey = new PublicKey(m.creatorFeeTreasury ?? m.creator_fee_treasury);\n\n const [globalConfig] = deriveGlobalConfigPda(this.client.programId);\n const gai = await this.client.connection.getAccountInfo(globalConfig, this.client.commitment);\n if (!gai) throw new Error(\"global_config not initialized\");\n const g = decodeAccount<any>(\"GlobalConfig\", gai.data);\n const admin: PublicKey = new PublicKey(g.admin);\n\n const buyer = this.signer.publicKey;\n const buyerYesTokenAccount = deriveAta(buyer, yesTokenMint);\n const buyerNoTokenAccount = deriveAta(buyer, noTokenMint);\n const buyerCollateralTokenAccount = deriveAta(buyer, collateralMint);\n const adminCollateralTokenAccount = deriveAta(admin, collateralMint);\n const marketReserveVault = deriveAta(market, collateralMint, true);\n\n const accounts: AccountsMap & Record<string, PublicKey> = {\n buyer,\n admin,\n market_creator: marketCreator,\n market,\n global_config: globalConfig,\n yes_token_mint: yesTokenMint,\n no_token_mint: noTokenMint,\n buyer_yes_token_account: buyerYesTokenAccount,\n buyer_no_token_account: buyerNoTokenAccount,\n market_reserve_vault: marketReserveVault,\n collateral_token_mint: collateralMint,\n buyer_collateral_token_account: buyerCollateralTokenAccount,\n admin_collateral_token_account: adminCollateralTokenAccount,\n creator_fee_treasury: creatorFeeTreasury,\n token_program: TOKEN_PROGRAM_ID,\n associated_token_program: ASSOCIATED_TOKEN_PROGRAM_ID,\n system_program: SystemProgram.programId,\n } as any;\n\n // There should be an IDL builder for redeem; if not present, this is a placeholder for when added.\n // For now, mirror the burn/mint pattern would require a buildRedeemPositionIx; omitted if not available.\n throw new Error(\"redeemPosition not implemented in SDK yet\");\n }\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { PNP_PROGRAM_ID } from \"../idl\";\n\n// Placeholder instruction builder. Replace data layout with IDL/Borsh encoding.\nexport function buildTradeIx(params: {\n trader: PublicKey;\n market: PublicKey;\n side: \"buy\" | \"sell\";\n price: bigint;\n size: bigint;\n}) {\n const { trader, market, side } = params;\n const disc = 1; // discriminator placeholder\n const sideFlag = side === \"buy\" ? 0 : 1;\n const data = Buffer.from([disc, sideFlag]);\n const keys = [\n { pubkey: trader, isSigner: true, isWritable: true },\n { pubkey: market, isSigner: false, isWritable: true },\n ];\n return new TransactionInstruction({ keys, programId: PNP_PROGRAM_ID, data });\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { z } from \"zod\";\nimport { Client } from \"../platform/client\";\nimport { buildRedeemIx } from \"../instructions/redemption\";\nimport { buildClaimCreatorFeeIx, buildCreatorRefundIx, buildCreatorRefundV2Ix, buildCreatorRefundV3Ix, buildRedeemPositionV2Ix, buildRedeemV3PositionIx } from \"../instructions/idl_builders\";\nimport type { AccountsMap } from \"../idl\";\nimport { buildAndSendV0 } from \"../platform/tx\";\nimport type { SignerLike } from \"../platform/wallet\";\n\nconst RedeemSchema = z.object({\n market: z.instanceof(PublicKey),\n position: z.instanceof(PublicKey),\n amount: z.bigint(),\n to: z.instanceof(PublicKey).optional(),\n});\n\nexport class RedemptionModule {\n constructor(private readonly client: Client, private readonly signer: SignerLike) { }\n\n async redeemPosition(params: z.infer<typeof RedeemSchema>) {\n const p = RedeemSchema.parse(params);\n const ix = buildRedeemIx({\n holder: this.signer.publicKey,\n market: p.market,\n position: p.position,\n amount: p.amount,\n });\n\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n\n // IDL-backed creator fee claim\n async claimCreatorFee(accounts: AccountsMap) {\n const ix = buildClaimCreatorFeeIx(accounts, this.client.programId);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n\n // IDL-backed creator refund\n async creatorRefund(accounts: AccountsMap) {\n const ix = buildCreatorRefundIx(accounts, this.client.programId);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n\n // IDL-backed creator refund V2\n async creatorRefundV2(accounts: AccountsMap) {\n const ix = buildCreatorRefundV2Ix(accounts, this.client.programId);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n\n // IDL-backed creator refund V3\n async creatorRefundV3(accounts: AccountsMap) {\n const ix = buildCreatorRefundV3Ix(accounts, this.client.programId);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n\n /**\n * Redeem a winning position from a resolved market\n * @param accounts - Account mapping for the redemption instruction\n * @returns Transaction signature\n */\n async redeemPositionV2(accounts: AccountsMap) {\n const ix = buildRedeemPositionV2Ix(accounts, this.client.programId);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n\n /**\n * Redeem a winning position from a resolved V3 market\n * @param accounts - Account mapping for the V3 redemption instruction\n * @returns Transaction signature\n */\n async redeemV3Position(accounts: AccountsMap) {\n const ix = buildRedeemV3PositionIx(accounts, this.client.programId);\n const res = await buildAndSendV0(this.client, this.signer, [ix], {\n computeUnitLimit: 800000,\n });\n return { signature: res.signature };\n }\n}\n","import { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport { PNP_PROGRAM_ID } from \"../idl\";\n\n// Placeholder instruction builder. Replace data layout with IDL/Borsh encoding.\nexport function buildRedeemIx(params: {\n holder: PublicKey;\n market: PublicKey;\n position: PublicKey;\n amount: bigint;\n}) {\n const { holder, market, position } = params;\n const disc = 2; // discriminator placeholder\n const data = Buffer.from([disc]);\n const keys = [\n { pubkey: holder, isSigner: true, isWritable: true },\n { pubkey: market, isSigner: false, isWritable: true },\n { pubkey: position, isSigner: false, isWritable: true },\n ];\n return new TransactionInstruction({ keys, programId: PNP_PROGRAM_ID, data });\n}\n","import { PublicKey, Keypair, SystemProgram } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { Client } from \"./platform/client\";\nimport type { SdkConfig } from \"./types\";\nimport type { SignerLike } from \"./platform/wallet\";\nimport { NodeKeypairSigner } from \"./platform/wallet\";\nimport { MarketModule } from \"./modules/market\";\nimport { TradingModule } from \"./modules/trading\";\nimport { RedemptionModule } from \"./modules/redemption\";\nimport { AnchorClient } from \"./lib/anchor-client\";\nimport { AnchorMarketModule } from \"./modules/anchor-market\";\nimport { AnchorMarketV3Module } from \"./modules/anchor-market-v3\";\nimport { decodeAccount } from \"./idl\";\nimport type {\n MarketsResponse,\n MarketType,\n SettlementCriteria,\n SettlementData,\n P2PMarketResponse,\n MarketMeta,\n} from \"./types\";\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport type { GlobalConfigType } from \"./types\";\nimport { BN } from \"bn.js\";\n\nexport class PNPClient {\n readonly client: Client;\n readonly signer?: SignerLike;\n\n readonly market?: MarketModule;\n readonly trading?: TradingModule;\n readonly redemption?: RedemptionModule;\n readonly anchorMarket?: AnchorMarketModule;\n readonly anchorMarketV3?: AnchorMarketV3Module;\n readonly anchorClient?: AnchorClient;\n\n // Static property for V3 market account discriminator\n private static readonly MARKET_V3_DISCRIMINATOR: Buffer = (() => {\n const hex = process.env.MARKET_V3_DISCRIMINATOR || \"488657404fa709bd\";\n try { return Buffer.from(hex, \"hex\"); } catch { return Buffer.from(\"488657404fa709bd\", \"hex\"); }\n })();\n\n get connection() {\n return this.client.connection;\n }\n\n /**\n * Decode market account data from buffer\n * @param data Buffer containing account data\n * @returns Decoded market account data\n */\n private decodeMarketAny(data: Buffer): any {\n // If first 8 bytes match V3 discriminator, decode as MarketV3; else try Market\n const prefix = data.subarray(0, 8);\n if (prefix.equals(PNPClient.MARKET_V3_DISCRIMINATOR)) {\n return decodeAccount<any>(\"MarketV3\", data);\n }\n try {\n return decodeAccount<any>(\"Market\", data);\n } catch {\n // Fallback: try MarketV3 in case discriminator env wasn't provided/matching\n return decodeAccount<any>(\"MarketV3\", data);\n }\n }\n\n constructor(\n rpcUrl: string,\n privateKey?: Uint8Array | string | { secretKey: Uint8Array }\n ) {\n // Initialize low-level client (always available)\n const cfg: SdkConfig = { rpcUrl };\n this.client = new Client(cfg);\n\n // Optional signer (enables write interactions)\n if (privateKey) {\n let secretKey: Uint8Array | undefined;\n if (typeof privateKey === \"string\") {\n try {\n // Assume base58 string\n secretKey = Uint8Array.from(bs58.decode(privateKey));\n } catch {\n throw new Error(\n \"Invalid private key string; expected base58-encoded secret key\"\n );\n }\n } else if (privateKey instanceof Uint8Array) {\n secretKey = privateKey;\n } else if (privateKey && privateKey.secretKey instanceof Uint8Array) {\n secretKey = privateKey.secretKey;\n }\n\n if (!secretKey) throw new Error(\"Unsupported privateKey format\");\n const keypair = Keypair.fromSecretKey(secretKey);\n this.signer = new NodeKeypairSigner(keypair);\n\n // Write-capable modules\n this.market = new MarketModule(this.client, this.signer);\n this.trading = new TradingModule(this.client, this.signer);\n this.redemption = new RedemptionModule(this.client, this.signer);\n\n // Anchor-based helpers - pass the correct program ID based on network\n try {\n this.anchorClient = new AnchorClient(\n this.client.connection,\n keypair,\n undefined, // idlOverride\n this.client.programId // Use the network-detected program ID\n );\n this.anchorMarket = new AnchorMarketModule(this.anchorClient);\n this.anchorMarketV3 = new AnchorMarketV3Module(this.anchorClient);\n } catch (err) {\n console.warn(\"Could not initialize Anchor client:\", err);\n }\n }\n }\n\n /**\n * Create a P2P market (high-level wrapper) and return a web3-agnostic result.\n * Serializes PublicKeys to base58 strings to match P2PMarketResponse.\n */\n async createP2PMarketGeneral(params: {\n question: string;\n initialAmount: bigint;\n side: \"yes\" | \"no\";\n creatorSideCap: bigint;\n endTime: bigint;\n maxPotRatio?: number;\n collateralTokenMint: PublicKey;\n creator?: PublicKey;\n }): Promise<P2PMarketResponse> {\n if (!this.anchorMarketV3) {\n throw new Error(\n \"AnchorMarketV3Module not available. Initialize client with a signer.\"\n );\n }\n // Call the underlying module function which is still named createMarketV3\n const res = await this.anchorMarketV3.createMarketV3(params);\n return {\n signature: res.signature,\n market: res.market.toBase58(),\n yesTokenMint: res.yesTokenMint.toBase58(),\n noTokenMint: res.noTokenMint.toBase58(),\n };\n }\n\n /**\n * Create a P2P market using simple, UI-friendly parameters.\n * - Accepts amount in USDC (number) and converts to raw units internally (assumes 6 decimals).\n * - Defaults to mainnet USDC as collateral mint if not provided.\n * - Defaults creatorSideCap to 5x the initial amount if not provided.\n * - Defaults end time to `daysUntilEnd` days from now (30 days by default).\n */\n async createP2PMarketSimple(params: {\n question: string;\n side: \"yes\" | \"no\";\n amountUsdc: number;\n daysUntilEnd?: number;\n creatorSideCapMultiplier?: number;\n collateralTokenMint?: PublicKey;\n maxPotRatio?: number;\n creator?: PublicKey;\n }): Promise<P2PMarketResponse> {\n const {\n question,\n side,\n amountUsdc,\n daysUntilEnd = 30,\n creatorSideCapMultiplier = 5,\n collateralTokenMint,\n maxPotRatio,\n creator,\n } = params;\n\n if (!Number.isFinite(amountUsdc) || amountUsdc <= 0) {\n throw new Error(\"amountUsdc must be a positive number\");\n }\n if (![\"yes\", \"no\"].includes(side)) {\n throw new Error(\"side must be 'yes' or 'no'\");\n }\n\n // Default to mainnet USDC mint if not provided\n const defaultUsdcMint = new PublicKey(\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n );\n const collateralMintPk = collateralTokenMint ?? defaultUsdcMint;\n\n // Convert UI amounts to raw units (assumes 6 decimals like USDC)\n const initialAmount = this.uiToRaw(amountUsdc, 6);\n const creatorCapUsdc = amountUsdc * creatorSideCapMultiplier;\n const creatorSideCap = this.uiToRaw(creatorCapUsdc, 6);\n\n // Compute end time in seconds since epoch\n const nowSeconds = Math.floor(Date.now() / 1000);\n const endTimeSeconds = nowSeconds + daysUntilEnd * 24 * 60 * 60;\n const endTime = BigInt(endTimeSeconds);\n\n return this.createP2PMarketGeneral({\n question,\n initialAmount,\n side,\n creatorSideCap,\n endTime,\n maxPotRatio,\n collateralTokenMint: collateralMintPk,\n creator,\n });\n }\n\n /**\n * Create a P2P market with YouTube URL detection (high-level wrapper).\n * Automatically detects and extracts YouTube URLs from the question.\n * Serializes PublicKeys to base58 strings to match P2PMarketResponse.\n */\n async createP2PMarketYoutube(params: {\n question: string;\n youtubeUrl: string;\n initialAmount: bigint;\n side: \"yes\" | \"no\";\n creatorSideCap: bigint;\n endTime: bigint;\n maxPotRatio?: number;\n collateralTokenMint: PublicKey;\n creator?: PublicKey;\n }): Promise<P2PMarketResponse & { detectedYoutubeUrl?: string }> {\n const { question, youtubeUrl, ...rest } = params;\n const questionWithUrl =\n youtubeUrl && youtubeUrl.length > 0\n ? `${question}${question.endsWith(\" \") ? \"\" : \" \"}${youtubeUrl}`\n : question;\n\n // Detect the YouTube URL for returning metadata while keeping the combined question intact\n const detected = PNPClient.detectYoutubeUrl(questionWithUrl);\n\n // Create the market with the combined question that includes the provided YouTube URL\n const result = await this.createP2PMarketGeneral({\n ...rest,\n question: questionWithUrl,\n });\n\n return {\n ...result,\n detectedYoutubeUrl: youtubeUrl || detected.youtubeUrl,\n };\n }\n\n /**\n * Create a P2P market with DeFiLlama protocol/metric detection (high-level wrapper).\n * Automatically formats the question with DeFiLlama reference.\n * Serializes PublicKeys to base58 strings to match P2PMarketResponse.\n */\n async createP2PMarketDefiLlama(params: {\n question: string;\n protocolName: string;\n metric: string;\n initialAmount: bigint;\n side: \"yes\" | \"no\";\n creatorSideCap: bigint;\n endTime: bigint;\n maxPotRatio?: number;\n collateralTokenMint: PublicKey;\n creator?: PublicKey;\n }): Promise<P2PMarketResponse & { detectedProtocol?: string; detectedMetric?: string }> {\n const { question, protocolName, metric, ...rest } = params;\n\n // Compose final question: \"<question> df <protocol-name> <metric>\"\n const finalQuestion = `${question}${question.endsWith(\" \") ? \"\" : \" \"}df ${protocolName} ${metric}`;\n\n // Create the market with the composed question\n const result = await this.createP2PMarketGeneral({\n ...rest,\n question: finalQuestion,\n });\n\n return {\n ...result,\n detectedProtocol: protocolName,\n detectedMetric: metric,\n };\n }\n\n /**\n * Simple helper to create a P2P market with a YouTube URL using UI-friendly parameters.\n * - Accepts amount in USDC (number) and converts to raw units internally (assumes 6 decimals).\n * - Defaults to mainnet USDC as collateral mint if not provided.\n * - Defaults creatorSideCap to 5x the initial amount if not provided.\n * - Defaults end time to `daysUntilEnd` days from now (30 days by default).\n */\n async createP2PMarketYoutubeSimple(params: {\n question: string;\n youtubeUrl: string;\n side: \"yes\" | \"no\";\n amountUsdc: number;\n daysUntilEnd?: number;\n creatorSideCapMultiplier?: number;\n collateralTokenMint?: PublicKey;\n maxPotRatio?: number;\n creator?: PublicKey;\n }): Promise<P2PMarketResponse & { detectedYoutubeUrl?: string }> {\n const {\n question,\n youtubeUrl,\n side,\n amountUsdc,\n daysUntilEnd = 30,\n creatorSideCapMultiplier = 5,\n collateralTokenMint,\n maxPotRatio,\n creator,\n } = params;\n\n if (!Number.isFinite(amountUsdc) || amountUsdc <= 0) {\n throw new Error(\"amountUsdc must be a positive number\");\n }\n if (![\"yes\", \"no\"].includes(side)) {\n throw new Error(\"side must be 'yes' or 'no'\");\n }\n\n const defaultUsdcMint = new PublicKey(\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n );\n const collateralMintPk = collateralTokenMint ?? defaultUsdcMint;\n\n const initialAmount = this.uiToRaw(amountUsdc, 6);\n const creatorCapUsdc = amountUsdc * creatorSideCapMultiplier;\n const creatorSideCap = this.uiToRaw(creatorCapUsdc, 6);\n\n const nowSeconds = Math.floor(Date.now() / 1000);\n const endTimeSeconds = nowSeconds + daysUntilEnd * 24 * 60 * 60;\n const endTime = BigInt(endTimeSeconds);\n\n return this.createP2PMarketYoutube({\n question,\n youtubeUrl,\n initialAmount,\n side,\n creatorSideCap,\n endTime,\n maxPotRatio,\n collateralTokenMint: collateralMintPk,\n creator,\n });\n }\n\n /**\n * Create a V2 (AMM) market with Twitter URL detection (high-level wrapper).\n * Automatically detects and extracts Twitter URLs from the question.\n * Serializes PublicKeys to base58 strings.\n */\n async createMarketTwitter(params: {\n question: string;\n tweetUrl: string;\n initialLiquidity: bigint;\n endTime: bigint;\n collateralTokenMint: PublicKey;\n }): Promise<{ signature: string; market: string; detectedTwitterUrl?: string; isTweetIdFormat?: boolean }> {\n const { question, tweetUrl, initialLiquidity, endTime, collateralTokenMint } = params;\n\n if (!this.market) {\n throw new Error(\"MarketModule not available. Initialize client with a signer.\");\n }\n\n // Extract tweet ID from URL (supports twitter.com and x.com)\n const patterns = [\n /https?:\\/\\/(?:www\\.)?twitter\\.com\\/[^/]+\\/status\\/(\\d+)/i,\n /https?:\\/\\/(?:www\\.)?x\\.com\\/[^/]+\\/status\\/(\\d+)/i,\n /https?:\\/\\/(?:mobile\\.)?twitter\\.com\\/[^/]+\\/status\\/(\\d+)/i,\n ];\n let tweetId: string | null = null;\n for (const re of patterns) {\n const m = tweetUrl.match(re);\n if (m && m[1]) {\n tweetId = m[1];\n break;\n }\n }\n if (!tweetId) {\n // Fallback: try to pick last long digits sequence\n const m = tweetUrl.match(/(\\d{8,})/);\n if (m && m[1]) tweetId = m[1];\n }\n if (!tweetId) {\n throw new Error(\"Unable to extract tweet ID from tweetUrl\");\n }\n\n // Compose final question: \"<question> X {<tweetId>}\"\n const finalQuestion = `${question}${question.endsWith(\" \") ? \"\" : \" \"}X {${tweetId}}`;\n\n // Create the market with the composed question\n const result = await this.market.createMarket({\n question: finalQuestion,\n initialLiquidity,\n endTime,\n baseMint: collateralTokenMint,\n });\n\n if (!result.signature) {\n throw new Error(\"Transaction failed: No signature returned\");\n }\n\n return {\n signature: result.signature,\n market: result.market.toBase58(),\n detectedTwitterUrl: tweetUrl,\n isTweetIdFormat: true,\n };\n }\n\n /**\n * Create a V2 (AMM) market with YouTube URL detection (high-level wrapper).\n * Automatically detects and extracts YouTube URLs from the question.\n * Serializes PublicKeys to base58 strings.\n */\n async createMarketYoutube(params: {\n question: string;\n youtubeUrl: string;\n initialLiquidity: bigint;\n endTime: bigint;\n collateralTokenMint: PublicKey;\n }): Promise<{ signature: string; market: string; detectedYoutubeUrl?: string }> {\n const { question, youtubeUrl, initialLiquidity, endTime, collateralTokenMint } = params;\n\n if (!this.market) {\n throw new Error(\"MarketModule not available. Initialize client with a signer.\");\n }\n\n const questionWithUrl =\n youtubeUrl && youtubeUrl.length > 0\n ? `${question}${question.endsWith(\" \") ? \"\" : \" \"}${youtubeUrl}`\n : question;\n\n // Detect the YouTube URL for returning metadata\n const detected = PNPClient.detectYoutubeUrl(questionWithUrl);\n\n // Create the market with the combined question\n const result = await this.market.createMarket({\n question: questionWithUrl,\n initialLiquidity,\n endTime,\n baseMint: collateralTokenMint,\n });\n\n if (!result.signature) {\n throw new Error(\"Transaction failed: No signature returned\");\n }\n\n return {\n signature: result.signature,\n market: result.market.toBase58(),\n detectedYoutubeUrl: youtubeUrl || detected.youtubeUrl,\n };\n }\n\n /**\n * Create a V2 (AMM) market with DeFiLlama protocol/metric detection (high-level wrapper).\n * Automatically formats the question with DeFiLlama reference.\n * Serializes PublicKeys to base58 strings.\n */\n async createMarketDefiLlama(params: {\n question: string;\n protocolName: string;\n metric: string;\n initialLiquidity: bigint;\n endTime: bigint;\n collateralTokenMint: PublicKey;\n }): Promise<{ signature: string; market: string; detectedProtocol?: string; detectedMetric?: string }> {\n const { question, protocolName, metric, initialLiquidity, endTime, collateralTokenMint } = params;\n\n if (!this.market) {\n throw new Error(\"MarketModule not available. Initialize client with a signer.\");\n }\n\n // Compose final question: \"<question> df <protocol-name> <metric>\"\n const finalQuestion = `${question}${question.endsWith(\" \") ? \"\" : \" \"}df ${protocolName} ${metric}`;\n\n // Create the market with the composed question\n const result = await this.market.createMarket({\n question: finalQuestion,\n initialLiquidity,\n endTime,\n baseMint: collateralTokenMint,\n });\n\n if (!result.signature) {\n throw new Error(\"Transaction failed: No signature returned\");\n }\n\n return {\n signature: result.signature,\n market: result.market.toBase58(),\n detectedProtocol: protocolName,\n detectedMetric: metric,\n };\n }\n\n /**\n * Create a P2P market with Twitter URL detection (high-level wrapper).\n * Automatically detects and extracts Twitter URLs from the question.\n * Serializes PublicKeys to base58 strings to match P2PMarketResponse.\n */\n async createP2PMarketTwitter(params: {\n question: string;\n tweetUrl: string;\n initialAmount: bigint;\n side: \"yes\" | \"no\";\n creatorSideCap: bigint;\n endTime: bigint;\n maxPotRatio?: number;\n collateralTokenMint: PublicKey;\n creator?: PublicKey;\n }): Promise<P2PMarketResponse & { detectedTwitterUrl?: string; isTweetIdFormat?: boolean }> {\n const { question, tweetUrl, ...rest } = params;\n\n // Extract tweet ID from URL (supports twitter.com and x.com)\n const patterns = [\n /https?:\\/\\/(?:www\\.)?twitter\\.com\\/[^/]+\\/status\\/(\\d+)/i,\n /https?:\\/\\/(?:www\\.)?x\\.com\\/[^/]+\\/status\\/(\\d+)/i,\n /https?:\\/\\/(?:mobile\\.)?twitter\\.com\\/[^/]+\\/status\\/(\\d+)/i,\n ];\n let tweetId: string | null = null;\n for (const re of patterns) {\n const m = tweetUrl.match(re);\n if (m && m[1]) {\n tweetId = m[1];\n break;\n }\n }\n if (!tweetId) {\n // Fallback: try to pick last long digits sequence\n const m = tweetUrl.match(/(\\d{8,})/);\n if (m && m[1]) tweetId = m[1];\n }\n if (!tweetId) {\n throw new Error(\"Unable to extract tweet ID from tweetUrl\");\n }\n\n // Compose final question: \"<question> X {<tweetId>}\"\n const finalQuestion = `${question}${question.endsWith(\" \") ? \"\" : \" \"}X {${tweetId}}`;\n\n // Create the market with the composed question\n const result = await this.createP2PMarketGeneral({\n ...rest,\n question: finalQuestion,\n });\n\n return {\n ...result,\n detectedTwitterUrl: tweetUrl,\n isTweetIdFormat: true,\n };\n }\n\n /**\n * Simple helper to create a P2P market with a Twitter / X URL using UI-friendly parameters.\n * - Accepts amount in USDC (number) and converts to raw units internally (assumes 6 decimals).\n * - Defaults to mainnet USDC as collateral mint if not provided.\n * - Defaults creatorSideCap to 5x the initial amount if not provided.\n * - Defaults end time to `daysUntilEnd` days from now (30 days by default).\n */\n async createP2PMarketTwitterSimple(params: {\n question: string;\n tweetUrl: string;\n side: \"yes\" | \"no\";\n amountUsdc: number;\n daysUntilEnd?: number;\n creatorSideCapMultiplier?: number;\n collateralTokenMint?: PublicKey;\n maxPotRatio?: number;\n creator?: PublicKey;\n }): Promise<P2PMarketResponse & { detectedTwitterUrl?: string; isTweetIdFormat?: boolean }> {\n const {\n question,\n tweetUrl,\n side,\n amountUsdc,\n daysUntilEnd = 30,\n creatorSideCapMultiplier = 5,\n collateralTokenMint,\n maxPotRatio,\n creator,\n } = params;\n\n if (!Number.isFinite(amountUsdc) || amountUsdc <= 0) {\n throw new Error(\"amountUsdc must be a positive number\");\n }\n if (![\"yes\", \"no\"].includes(side)) {\n throw new Error(\"side must be 'yes' or 'no'\");\n }\n\n const defaultUsdcMint = new PublicKey(\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n );\n const collateralMintPk = collateralTokenMint ?? defaultUsdcMint;\n\n const initialAmount = this.uiToRaw(amountUsdc, 6);\n const creatorCapUsdc = amountUsdc * creatorSideCapMultiplier;\n const creatorSideCap = this.uiToRaw(creatorCapUsdc, 6);\n\n const nowSeconds = Math.floor(Date.now() / 1000);\n const endTimeSeconds = nowSeconds + daysUntilEnd * 24 * 60 * 60;\n const endTime = BigInt(endTimeSeconds);\n\n return this.createP2PMarketTwitter({\n question,\n tweetUrl,\n initialAmount,\n side,\n creatorSideCap,\n endTime,\n maxPotRatio,\n collateralTokenMint: collateralMintPk,\n creator,\n });\n }\n\n /**\n * Simple helper to create a P2P market with DeFiLlama protocol/metric using UI-friendly parameters.\n * - Accepts amount in USDC (number) and converts to raw units internally (assumes 6 decimals).\n * - Defaults to mainnet USDC as collateral mint if not provided.\n * - Defaults creatorSideCap to 5x the initial amount if not provided.\n * - Defaults end time to `daysUntilEnd` days from now (30 days by default).\n */\n async createP2PMarketDefiLlamaSimple(params: {\n question: string;\n protocolName: string;\n metric: string;\n side: \"yes\" | \"no\";\n amountUsdc: number;\n daysUntilEnd?: number;\n creatorSideCapMultiplier?: number;\n collateralTokenMint?: PublicKey;\n maxPotRatio?: number;\n creator?: PublicKey;\n }): Promise<P2PMarketResponse & { detectedProtocol?: string; detectedMetric?: string }> {\n const {\n question,\n protocolName,\n metric,\n side,\n amountUsdc,\n daysUntilEnd = 30,\n creatorSideCapMultiplier = 5,\n collateralTokenMint,\n maxPotRatio,\n creator,\n } = params;\n\n if (!Number.isFinite(amountUsdc) || amountUsdc <= 0) {\n throw new Error(\"amountUsdc must be a positive number\");\n }\n if (![\"yes\", \"no\"].includes(side)) {\n throw new Error(\"side must be 'yes' or 'no'\");\n }\n\n const defaultUsdcMint = new PublicKey(\n \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"\n );\n const collateralMintPk = collateralTokenMint ?? defaultUsdcMint;\n\n const initialAmount = this.uiToRaw(amountUsdc, 6);\n const creatorCapUsdc = amountUsdc * creatorSideCapMultiplier;\n const creatorSideCap = this.uiToRaw(creatorCapUsdc, 6);\n\n const nowSeconds = Math.floor(Date.now() / 1000);\n const endTimeSeconds = nowSeconds + daysUntilEnd * 24 * 60 * 60;\n const endTime = BigInt(endTimeSeconds);\n\n return this.createP2PMarketDefiLlama({\n question,\n protocolName,\n metric,\n initialAmount,\n side,\n creatorSideCap,\n endTime,\n maxPotRatio,\n collateralTokenMint: collateralMintPk,\n creator,\n });\n }\n\n /**\n * Create a V2 (AMM) market with custom initial odds and/or a custom oracle.\n * \n * @param params - Market creation parameters\n * @param params.yesOddsBps - Initial YES odds in basis points (100-9900). \n * Example: 7000 = 70% YES / 30% NO\n * @param params.oracle - Optional custom oracle for settlement (default: global oracle)\n * @returns Object with transaction signature and market PDA\n */\n async createMarketV2WithCustomOdds(params: {\n question: string;\n initialLiquidity: bigint;\n endTime: bigint;\n collateralTokenMint: PublicKey;\n yesOddsBps: number;\n oracle?: PublicKey;\n creator?: PublicKey;\n }) {\n if (!this.anchorMarket) {\n throw new Error(\"AnchorMarketModule not available. Initialize client with a signer.\");\n }\n\n // Validate odds range\n if (params.yesOddsBps < 100 || params.yesOddsBps > 9900) {\n throw new Error(\"yesOddsBps must be between 100 and 9900 (1% to 99%)\");\n }\n\n const res = await this.anchorMarket.createMarket({\n question: params.question,\n initialLiquidity: params.initialLiquidity,\n endTime: params.endTime,\n collateralTokenMint: params.collateralTokenMint,\n yesOddsBps: params.yesOddsBps,\n oracle: params.oracle,\n creator: params.creator,\n });\n\n return {\n signature: res.signature,\n market: res.market.toBase58(),\n };\n }\n\n /**\n * Create a P2P (V3) market with custom initial odds (high-level wrapper).\n * Custom odds allow splitting the initial liquidity between YES and NO sides\n * instead of the default 100% to creator side.\n * \n * @param params - Market creation parameters\n * @param params.oddsBps - Initial odds in basis points (100-9900). \n * Example: 7000 = 70% YES / 30% NO for a YES-side creator\n * @param params.oracle - Optional custom oracle for settlement (default: global oracle)\n * @returns P2PMarketResponse with market address and token mints\n */\n async createMarketP2PWithCustomOdds(params: {\n question: string;\n initialAmount: bigint;\n side: \"yes\" | \"no\";\n creatorSideCap: bigint;\n endTime: bigint;\n oddsBps: number;\n oracle?: PublicKey;\n maxPotRatio?: number;\n collateralTokenMint: PublicKey;\n creator?: PublicKey;\n }): Promise<P2PMarketResponse> {\n if (!this.anchorMarketV3) {\n throw new Error(\n \"AnchorMarketV3Module not available. Initialize client with a signer.\"\n );\n }\n\n // Validate oddsBps range\n if (params.oddsBps < 100 || params.oddsBps > 9900) {\n throw new Error(\"oddsBps must be between 100 and 9900 (1% to 99%)\");\n }\n\n const res = await this.anchorMarketV3.createMarketV3({\n question: params.question,\n initialAmount: params.initialAmount,\n side: params.side,\n creatorSideCap: params.creatorSideCap,\n endTime: params.endTime,\n maxPotRatio: params.maxPotRatio,\n collateralTokenMint: params.collateralTokenMint,\n creator: params.creator,\n oddsBps: params.oddsBps,\n oracle: params.oracle,\n });\n\n return {\n signature: res.signature,\n market: res.market.toBase58(),\n yesTokenMint: res.yesTokenMint.toBase58(),\n noTokenMint: res.noTokenMint.toBase58(),\n };\n }\n\n /**\n * Detects if a question contains a Twitter URL or tweet ID format after the question mark\n * @param questionText The question text to analyze\n * @returns Object containing the cleaned question, Twitter URL if present, and isTweetIdFormat flag indicating if X {tweet_id} format was used\n * @example \n * // With URL format\n * detectTwitterUrl(\"Will X happen? https://twitter.com/user/status/1234567890\");\n * // With X {tweet id} format - with space\n * detectTwitterUrl(\"Will X happen? X 1234567890\");\n * // With X {tweet id} format - with curly braces\n * detectTwitterUrl(\"Will X happen? X {1234567890}\");\n */\n static detectTwitterUrl(questionText: string): { question: string; twitterUrl?: string; isTweetIdFormat?: boolean } {\n // Check if the question contains a question mark\n const questionMarkIndex = questionText.indexOf('?');\n if (questionMarkIndex === -1) {\n // No question mark found, return the original text\n return { question: questionText };\n }\n\n // Extract the part after the question mark and trim whitespace\n const afterQuestionMark = questionText.substring(questionMarkIndex + 1).trim();\n\n // Check if there's content after the question mark\n if (!afterQuestionMark) {\n // No content after question mark\n return { question: questionText };\n }\n\n // Define Twitter URL patterns to match\n const twitterUrlPatterns = [\n /https?:\\/\\/(?:www\\.)?twitter\\.com\\//i,\n /https?:\\/\\/(?:www\\.)?x\\.com\\//i,\n /https?:\\/\\/(?:www\\.)?t\\.co\\//i\n ];\n\n // Check if the content after the question mark contains a Twitter URL\n const hasTwitterUrl = twitterUrlPatterns.some(pattern => pattern.test(afterQuestionMark));\n\n if (hasTwitterUrl) {\n // Return the question (everything up to and including the question mark) and the Twitter URL\n return {\n question: questionText.substring(0, questionMarkIndex + 1).trim(),\n twitterUrl: afterQuestionMark,\n isTweetIdFormat: false\n };\n }\n\n // Check for the patterns \"X {tweet id}\" format (both with and without curly braces)\n const xTweetIdMatch = afterQuestionMark.match(/^\\s*X\\s+(\\d+)\\s*$/i) ||\n afterQuestionMark.match(/^\\s*X\\s*\\{(\\d+)\\}\\s*$/i);\n if (xTweetIdMatch) {\n const tweetId = xTweetIdMatch[1];\n // Convert tweet ID to a Twitter URL\n const twitterUrl = `https://twitter.com/x/status/${tweetId}`;\n return {\n question: questionText.substring(0, questionMarkIndex + 1).trim(),\n twitterUrl: twitterUrl,\n isTweetIdFormat: true\n };\n }\n\n // No Twitter URL or tweet ID found\n return { question: questionText };\n }\n\n /**\n * Detects if a question contains a YouTube URL after the question mark\n * @param questionText The question text to analyze\n * @returns Object containing the cleaned question and YouTube URL if present\n */\n static detectYoutubeUrl(questionText: string): { question: string; youtubeUrl?: string } {\n // Check if the question contains a question mark\n const questionMarkIndex = questionText.indexOf('?');\n if (questionMarkIndex === -1) {\n // No question mark found, return the original text\n return { question: questionText };\n }\n\n // Extract the part after the question mark and trim whitespace\n const afterQuestionMark = questionText.substring(questionMarkIndex + 1).trim();\n\n // Check if there's content after the question mark\n if (!afterQuestionMark) {\n // No content after question mark\n return { question: questionText };\n }\n\n // Define YouTube URL patterns to match\n const youtubeUrlPatterns = [\n /https?:\\/\\/(?:www\\.)?youtube\\.com\\/watch\\?v=[\\w-]+/i, // Standard YouTube URL\n /https?:\\/\\/(?:www\\.)?youtube\\.com\\/v\\/[\\w-]+/i, // Embedded YouTube URL\n /https?:\\/\\/(?:www\\.)?youtube\\.com\\/embed\\/[\\w-]+/i, // iFrame YouTube URL\n /https?:\\/\\/(?:www\\.)?youtu\\.be\\/[\\w-]+/i, // Short YouTube URL\n /https?:\\/\\/(?:www\\.)?youtube\\.com\\/shorts\\/[\\w-]+/i // YouTube Shorts URL\n ];\n\n // Check if the content after the question mark contains a YouTube URL\n const hasYoutubeUrl = youtubeUrlPatterns.some(pattern => pattern.test(afterQuestionMark));\n\n if (hasYoutubeUrl) {\n // Return the question (everything up to and including the question mark) and the YouTube URL\n return {\n question: questionText.substring(0, questionMarkIndex + 1).trim(),\n youtubeUrl: afterQuestionMark\n };\n }\n\n // No YouTube URL found\n return { question: questionText };\n }\n\n /**\n * Detects if a question contains a DeFiLlama format after the question mark\n * @param questionText The question text to analyze\n * @returns Object containing the cleaned question and DeFiLlama protocol/metric info if present\n * @example \n * detectDefiLlamaUrl(\"Will Uniswap TVL exceed $5B? df uniswap-v3 tvl\");\n */\n static detectDefiLlamaUrl(questionText: string): { question: string; protocol?: string; metric?: string } {\n // Check if the question contains a question mark\n const questionMarkIndex = questionText.indexOf('?');\n if (questionMarkIndex === -1) {\n // No question mark found, return the original text\n return { question: questionText };\n }\n\n // Extract the part after the question mark and trim whitespace\n const afterQuestionMark = questionText.substring(questionMarkIndex + 1).trim();\n\n // Check if there's content after the question mark\n if (!afterQuestionMark) {\n // No content after question mark\n return { question: questionText };\n }\n\n // Match the pattern: df <protocol-name/dex-name> <metric>\n // Supports \"df protocol metric\" format\n const defillamaPattern = /^\\s*df\\s+(\\S+(?:\\s+\\S+)*)\\s+(\\S+)\\s*$/i;\n const match = afterQuestionMark.match(defillamaPattern);\n\n if (match && match[1] && match[2]) {\n // Extract protocol (everything before the last word) and metric (last word)\n const protocolParts = match[1].trim().split(/\\s+/);\n const metric = match[2].trim();\n const protocol = protocolParts.join(' ');\n\n return {\n question: questionText.substring(0, questionMarkIndex + 1).trim(),\n protocol,\n metric\n };\n }\n\n // No DeFiLlama format found\n return { question: questionText };\n }\n\n /**\n * Parse a private key from a string that could be a JSON array or base58 encoded\n * @param keyString Private key as JSON array or base58 string\n * @returns Uint8Array containing the private key bytes\n */\n static parseSecretKey(keyString: string): Uint8Array {\n try {\n const arr = JSON.parse(keyString);\n if (Array.isArray(arr)) {\n return Uint8Array.from(arr);\n }\n } catch { }\n\n try {\n return Uint8Array.from(bs58.decode(keyString));\n } catch { }\n\n throw new Error('Unable to parse private key. Provide a valid JSON array or base58 string.');\n }\n\n /**\n * Convert UI amount to raw amount based on decimals (defaults to 6 for USDC)\n * @param amount UI amount with decimal places\n * @param decimals Token decimals (default: 6 for USDC)\n * @returns Raw token amount as bigint\n */\n uiToRaw(amount: number, decimals = 6): bigint {\n const scaleBI = 10n ** BigInt(decimals);\n const amtStr = String(amount);\n const [intPartRaw, fracPartRaw = \"\"] = amtStr.split(\".\");\n const intBI = intPartRaw ? BigInt(intPartRaw) : 0n;\n const fracPadded = (fracPartRaw + \"0\".repeat(decimals)).slice(0, decimals);\n const fracBI = fracPadded.length ? BigInt(fracPadded) : 0n;\n return intBI * scaleBI + fracBI;\n }\n\n /**\n * Buy tokens on a V3 market using USDC\n * @param params Buy parameters including market, side, and amount\n * @returns Transaction signature\n */\n async buyV3TokensUsdc(params: {\n market: PublicKey;\n buyYesToken: boolean;\n amountUsdc: number;\n }): Promise<{ signature: string }> {\n const { market, buyYesToken, amountUsdc } = params;\n\n if (!this.anchorClient) {\n throw new Error(\n \"AnchorClient not available. Initialize client with a signer.\"\n );\n }\n\n // Convert to raw amount\n const amount = this.uiToRaw(amountUsdc);\n\n try {\n // 1. Fetch market data to get tokens\n // Use type any for program.account to bypass TypeScript restrictions\n const program = this.anchorClient?.program as any;\n const marketAccount = await program.account.marketV3.fetch(market);\n\n // 2. Convert string addresses to PublicKeys\n const yesTokenMint = new PublicKey(marketAccount.yesTokenMint);\n const noTokenMint = new PublicKey(marketAccount.noTokenMint);\n const collateralTokenMint = new PublicKey(marketAccount.collateralToken);\n const globalConfig = PublicKey.findProgramAddressSync(\n [Buffer.from('global_config')],\n this.anchorClient.program.programId\n )[0];\n\n // 3. Get Associated Token Addresses\n // Ensure signer is defined\n if (!this.signer || !this.signer.publicKey) {\n throw new Error(\"Signer not initialized properly\");\n }\n const buyer = this.signer.publicKey;\n\n const buyerYesTokenAccount = await getAssociatedTokenAddressSync(\n yesTokenMint,\n buyer,\n false\n );\n\n const buyerNoTokenAccount = await getAssociatedTokenAddressSync(\n noTokenMint,\n buyer,\n false\n );\n\n const buyerCollateralTokenAccount = await getAssociatedTokenAddressSync(\n collateralTokenMint,\n buyer,\n false\n );\n\n const marketReserveVault = await getAssociatedTokenAddressSync(\n collateralTokenMint,\n market,\n true // allowOwnerOffCurve\n );\n\n // 4. Execute the trade\n // Convert amount to BN object that Anchor expects\n const amountBN = new BN(amount.toString());\n const minimumOut = new BN(0); // No slippage protection\n\n // Use type any for program to bypass TypeScript restrictions\n const result = await (this.anchorClient?.program as any).methods\n .buyV3Tokens(\n amountBN,\n { [buyYesToken ? 'yes' : 'no']: {} }, // side enum\n minimumOut\n )\n .accounts({\n buyer,\n market,\n globalConfig,\n yesTokenMint,\n noTokenMint,\n buyerYesTokenAccount,\n buyerNoTokenAccount,\n marketReserveVault,\n collateralTokenMint,\n buyerCollateralTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId\n })\n .rpc();\n\n return { signature: result };\n } catch (err: any) {\n if (err.logs) {\n const errorMsg = `buyV3TokensUsdc failed (amount_usdc=${amountUsdc}, side=${buyYesToken ? 'yes' : 'no'})\\n`;\n const logsStr = Array.isArray(err.logs) ? err.logs.join('\\n') : String(err.logs);\n throw new Error(`${errorMsg}${logsStr}\\nCause: ${err.message}`);\n }\n throw err;\n }\n }\n\n /**\n * Redeems a winning position in a resolved market\n * @param market - The public key of the market where the position was created\n * @param options - Optional parameters for customizing the redemption\n * @returns Transaction signature\n */\n async redeemPosition(market: PublicKey, options?: {\n admin?: PublicKey;\n marketCreator?: PublicKey;\n creatorFeeTreasury?: PublicKey;\n }) {\n if (!this.redemption || !this.signer) {\n throw new Error(\"Redemption module not available. Make sure you initialized the client with a valid private key.\");\n }\n\n if (!this.anchorClient) {\n throw new Error(\"Anchor client is not initialized. Cannot perform redemption.\");\n }\n\n // Fetch the market info to get required token accounts\n const marketData = await this.fetchMarket(market);\n const { account: marketAccount } = marketData;\n\n // Fetch the global config\n const { publicKey: globalConfigPDA } = await this.fetchGlobalConfig();\n\n // Get token accounts from market account\n const yesTokenMint = new PublicKey(marketAccount.yes_token_mint);\n const noTokenMint = new PublicKey(marketAccount.no_token_mint);\n const collateralTokenMint = new PublicKey(marketAccount.collateral_token);\n const marketCreator = new PublicKey(marketAccount.creator);\n\n // Get admin from global config or use provided value\n const { account: globalConfigAccount } = await this.fetchGlobalConfig();\n const admin = options?.admin || new PublicKey(globalConfigAccount.admin);\n\n // Determine token program IDs\n const [yesAi, noAi, colAi] = await Promise.all([\n this.client.connection.getAccountInfo(yesTokenMint),\n this.client.connection.getAccountInfo(noTokenMint),\n this.client.connection.getAccountInfo(collateralTokenMint),\n ]);\n if (!yesAi || !noAi || !colAi) {\n throw new Error(\"One or more token mints are invalid\");\n }\n\n const yesTokenProgram = yesAi.owner.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;\n const noTokenProgram = noAi.owner.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;\n const collateralTokenProgram = colAi.owner.equals(TOKEN_2022_PROGRAM_ID) ? TOKEN_2022_PROGRAM_ID : TOKEN_PROGRAM_ID;\n\n // Derive ATAs\n const buyer = this.signer.publicKey;\n const buyerYesTokenAccount = getAssociatedTokenAddressSync(\n yesTokenMint,\n buyer,\n false,\n yesTokenProgram\n );\n\n const buyerNoTokenAccount = getAssociatedTokenAddressSync(\n noTokenMint,\n buyer,\n false,\n noTokenProgram\n );\n\n const buyerCollateralTokenAccount = getAssociatedTokenAddressSync(\n collateralTokenMint,\n buyer,\n false,\n collateralTokenProgram\n );\n\n // Derive market reserve vault\n const marketReserveVault = getAssociatedTokenAddressSync(\n collateralTokenMint,\n market,\n true,\n collateralTokenProgram\n );\n\n // Find or get creator fee treasury\n const creatorFeeTreasury = options?.creatorFeeTreasury ? new PublicKey(options.creatorFeeTreasury) :\n getAssociatedTokenAddressSync(\n collateralTokenMint,\n marketCreator,\n false,\n collateralTokenProgram\n );\n\n // Get or derive admin collateral token account\n const adminCollateralTokenAccount = getAssociatedTokenAddressSync(\n collateralTokenMint,\n admin,\n false,\n collateralTokenProgram\n );\n\n // Execute the redemption instruction\n try {\n const result = await this.redemption.redeemPositionV2({\n buyer,\n market,\n admin,\n marketCreator,\n creatorFeeTreasury,\n adminCollateralTokenAccount,\n globalConfig: globalConfigPDA,\n yesTokenMint,\n noTokenMint,\n buyerYesTokenAccount,\n buyerNoTokenAccount,\n marketReserveVault,\n collateralTokenMint,\n buyerCollateralTokenAccount,\n tokenProgram: collateralTokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n });\n\n return result;\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(`Error redeeming position: ${errorMessage}`);\n }\n }\n\n /**\n * Redeems a winning position in a resolved V3 market\n * @param market - The public key of the V3 market where the position was created\n * @returns Transaction signature\n */\n async redeemV3Position(market: PublicKey) {\n if (!this.signer) {\n throw new Error(\"Signer not available. Make sure you initialized the client with a valid private key.\");\n }\n\n if (!this.anchorClient) {\n throw new Error(\"Anchor client is not initialized. Cannot perform redemption.\");\n }\n\n // Fetch the V3 market account using Anchor client\n const marketAccount = await (this.anchorClient.program.account as any).marketV3.fetch(market);\n\n // Fetch the global config and get admin\n const [globalConfigPDA] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"global_config\")],\n this.client.programId\n );\n const globalConfigAccount = await (this.anchorClient.program.account as any).globalConfig.fetch(globalConfigPDA);\n const admin = new PublicKey(globalConfigAccount.admin);\n\n // Get creator and token mints from the V3 market account\n const creator = new PublicKey(marketAccount.creator);\n const yesTokenMint = new PublicKey(marketAccount.yesTokenMint);\n const noTokenMint = new PublicKey(marketAccount.noTokenMint);\n const collateralTokenMint = new PublicKey(marketAccount.collateralToken);\n\n // Derive redeemer's token accounts\n const redeemer = this.signer.publicKey;\n const redeemerYesTokenAccount = getAssociatedTokenAddressSync(\n yesTokenMint,\n redeemer,\n false,\n TOKEN_PROGRAM_ID\n );\n\n const redeemerNoTokenAccount = getAssociatedTokenAddressSync(\n noTokenMint,\n redeemer,\n false,\n TOKEN_PROGRAM_ID\n );\n\n const redeemerCollateralTokenAccount = getAssociatedTokenAddressSync(\n collateralTokenMint,\n redeemer,\n false,\n TOKEN_PROGRAM_ID\n );\n\n // Derive market reserve vault\n const marketReserveVault = getAssociatedTokenAddressSync(\n collateralTokenMint,\n market,\n true,\n TOKEN_PROGRAM_ID\n );\n\n // Derive admin's collateral token account\n const adminCollateralTokenAccount = getAssociatedTokenAddressSync(\n collateralTokenMint,\n admin,\n false,\n TOKEN_PROGRAM_ID\n );\n\n // Derive creator fee treasury PDA\n // NEW format (multi-collateral): [\"creator_fee_treasury\", creator, collateralMint]\n const [creatorFeeTreasury] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"creator_fee_treasury\"), creator.toBuffer(), collateralTokenMint.toBuffer()],\n this.client.programId\n );\n\n // Execute the V3 redemption using Anchor's direct method\n try {\n const signature = await (this.anchorClient.program.methods as any)\n .redeemV3Position()\n .accounts({\n redeemer,\n market,\n globalConfig: globalConfigPDA,\n yesTokenMint,\n noTokenMint,\n redeemerYesTokenAccount,\n redeemerNoTokenAccount,\n marketReserveVault,\n collateralTokenMint,\n redeemerCollateralTokenAccount,\n admin,\n adminCollateralTokenAccount,\n creatorFeeTreasury,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n\n return { signature };\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(`Error redeeming V3 position: ${errorMessage}`);\n }\n }\n\n /**\n * Redeem a winning position from a resolved P2P (V3) market.\n * Thin wrapper around redeemV3Position that accepts either a string or PublicKey.\n */\n async redeemP2PPosition(\n market: PublicKey | string\n ): Promise<{ signature: string }> {\n const marketPk =\n typeof market === \"string\" ? new PublicKey(market) : market;\n return this.redeemV3Position(marketPk);\n }\n\n // ===== Read-only helpers (no signer required) =====\n async fetchGlobalConfig(): Promise<{\n publicKey: PublicKey;\n account: GlobalConfigType;\n }> {\n const [pk] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"global_config\")],\n this.client.programId\n );\n const ai = await this.client.connection.getAccountInfo(\n pk,\n this.client.commitment\n );\n if (!ai) throw new Error(\"global_config not found\");\n const acc = decodeAccount<GlobalConfigType>(\"GlobalConfig\", ai.data);\n return { publicKey: pk, account: acc };\n }\n\n /**\n * Get V2 AMM market price data including prices and multipliers\n * \n * ✅ READ-ONLY - No signer required! Works with just an RPC connection.\n * \n * This function fetches on-chain market data and calculates:\n * - YES/NO token prices using the V2 AMM formula\n * - Multipliers (potential payout ratios)\n * \n * Formulas:\n * - YES Price: (marketReserves × yesTokenSupply) / (yesTokenSupply² + noTokenSupply²)\n * - NO Price: (marketReserves × noTokenSupply) / (yesTokenSupply² + noTokenSupply²)\n * - YES Multiplier: 1 + (noTokenSupply / yesTokenSupply)²\n * - NO Multiplier: 1 + (yesTokenSupply / noTokenSupply)²\n * \n * @param market - Market public key or address string\n * @returns V2 market price data with prices, multipliers, and supplies\n * \n * @example\n * ```typescript\n * // Works without a signer!\n * const client = new PNPClient(\"https://api.devnet.solana.com\");\n * const priceData = await client.getMarketPriceV2(\"3LsfeB3RhQKJc2eHdEcb9XQzkF6eP9BFa6HTD6vvug9j\");\n * console.log(`YES Price: ${priceData.yesPrice}`);\n * console.log(`NO Price: ${priceData.noPrice}`);\n * console.log(`YES Multiplier: ${priceData.yesMultiplier}x`);\n * ```\n */\n async getMarketPriceV2(market: PublicKey | string): Promise<{\n /** Market reserves (collateral) in UI units */\n marketReserves: number;\n /** YES tokens minted in UI units */\n yesTokenSupply: number;\n /** NO tokens minted in UI units */\n noTokenSupply: number;\n /** YES token price (0-1) */\n yesPrice: number;\n /** NO token price (0-1) */\n noPrice: number;\n /** YES multiplier (potential payout ratio) */\n yesMultiplier: number;\n /** NO multiplier (potential payout ratio) */\n noMultiplier: number;\n /** Raw market reserves in base units */\n marketReservesRaw: bigint;\n /** Raw YES tokens in base units */\n yesTokenSupplyRaw: bigint;\n /** Raw NO tokens in base units */\n noTokenSupplyRaw: bigint;\n }> {\n const marketPk = typeof market === \"string\" ? new PublicKey(market) : market;\n \n // Fetch market account data (read-only, no signer needed)\n const ai = await this.client.connection.getAccountInfo(marketPk, this.client.commitment);\n if (!ai) throw new Error(\"market account not found\");\n const marketAccount = decodeAccount<any>(\"Market\", ai.data);\n \n // Helper to convert various types to bigint\n const toBigInt = (value: any): bigint => {\n if (value === undefined || value === null) return 0n;\n if (typeof value === \"bigint\") return value;\n if (typeof value === \"number\") return BigInt(value);\n if (typeof value === \"string\") {\n try { return BigInt(value); } catch { return 0n; }\n }\n if (typeof value?.toString === \"function\") {\n try { return BigInt(value.toString()); } catch { return 0n; }\n }\n return 0n;\n };\n \n // Extract raw values (handle both camelCase and snake_case field names)\n const marketReservesRaw = toBigInt(marketAccount.marketReserves ?? marketAccount.market_reserves);\n const yesTokenSupplyRaw = toBigInt(marketAccount.yesTokenSupplyMinted ?? marketAccount.yes_token_supply_minted);\n const noTokenSupplyRaw = toBigInt(marketAccount.noTokenSupplyMinted ?? marketAccount.no_token_supply_minted);\n \n // Convert to UI units (6 decimals)\n const SCALE = 1_000_000;\n const marketReserves = Number(marketReservesRaw) / SCALE;\n const yesTokenSupply = Number(yesTokenSupplyRaw) / SCALE;\n const noTokenSupply = Number(noTokenSupplyRaw) / SCALE;\n \n // Calculate prices using V2 AMM formula\n const denominator = Math.pow(yesTokenSupply, 2) + Math.pow(noTokenSupply, 2);\n let yesPrice = 0.5;\n let noPrice = 0.5;\n \n if (denominator > 0) {\n yesPrice = (marketReserves * yesTokenSupply) / denominator;\n noPrice = (marketReserves * noTokenSupply) / denominator;\n }\n \n // Calculate multipliers\n let yesMultiplier = 2.0;\n let noMultiplier = 2.0;\n \n if (yesTokenSupply > 0 && noTokenSupply > 0) {\n yesMultiplier = 1 + Math.pow(noTokenSupply / yesTokenSupply, 2);\n noMultiplier = 1 + Math.pow(yesTokenSupply / noTokenSupply, 2);\n } else if (yesTokenSupply > 0) {\n yesMultiplier = 1.0;\n noMultiplier = Infinity;\n } else if (noTokenSupply > 0) {\n yesMultiplier = Infinity;\n noMultiplier = 1.0;\n }\n \n return {\n marketReserves, yesTokenSupply, noTokenSupply,\n yesPrice, noPrice,\n yesMultiplier, noMultiplier,\n marketReservesRaw, yesTokenSupplyRaw, noTokenSupplyRaw,\n };\n }\n\n /**\n * Set market resolvable status (V2 markets)\n * \n * ⚠️ DEVNET/TESTING ONLY - This function is for devnet and testing purposes only.\n * It will NOT work on mainnet. Use this only for development and testing.\n * \n * @param market - Market public key or address string\n * @param resolvable - New resolvable status\n * @param forceResolve - Optional: force resolve (allow immediate refunds)\n * @returns Transaction signature\n */\n /**\n * Set market resolvable status for V2 markets.\n * Automatically handles market extension accounts for custom oracles.\n * \n * @param market - Market public key or address string\n * @param resolvable - New resolvable status (true/false)\n * @param forceResolve - Optional: force resolve (allow immediate refunds)\n * @returns Transaction signature\n */\n async setMarketResolvable(\n market: PublicKey | string,\n resolvable: boolean,\n forceResolve?: boolean\n ): Promise<{ signature: string }> {\n if (!this.market) {\n throw new Error(\n \"MarketModule required. Initialize client with a signer.\"\n );\n }\n\n const marketPk =\n typeof market === \"string\" ? new PublicKey(market) : market;\n\n return this.market.setMarketResolvable({\n market: marketPk,\n resolvable,\n forceResolve,\n });\n }\n\n /**\n * High-level method to create a V2 market with a custom oracle (settler).\n * \n * @param params Market parameters including settler address and optional odds\n * @returns Created market details\n */\n async createMarketWithCustomOracle(params: {\n question: string;\n initialLiquidity: bigint;\n endTime: bigint;\n collateralMint: PublicKey;\n settlerAddress: PublicKey;\n yesOddsBps?: number;\n }): Promise<{ market: PublicKey; signature: string }> {\n if (!this.anchorMarket) {\n throw new Error(\"AnchorMarket module not available\");\n }\n\n return this.anchorMarket.createMarket({\n question: params.question,\n initialLiquidity: params.initialLiquidity,\n endTime: params.endTime,\n collateralTokenMint: params.collateralMint,\n oracle: params.settlerAddress,\n yesOddsBps: params.yesOddsBps,\n });\n }\n\n /**\n * Set market resolvable status (V3/P2P markets)\n * \n * ⚠️ DEVNET/TESTING ONLY - This function is for devnet and testing purposes only.\n * It will NOT work on mainnet. Use this only for development and testing.\n * \n * @param market - Market public key or address string\n * @param resolvable - New resolvable status\n * @returns Transaction signature\n */\n async setMarketResolvableP2p(\n market: PublicKey | string,\n resolvable: boolean\n ): Promise<{ signature: string }> {\n if (!this.market) {\n throw new Error(\n \"MarketModule not available. Initialize client with a signer.\"\n );\n }\n\n const marketPk =\n typeof market === \"string\" ? new PublicKey(market) : market;\n\n return this.market.setMarketResolvableP2p({\n market: marketPk,\n resolvable,\n });\n }\n\n async fetchMarket(\n market: PublicKey\n ): Promise<{ publicKey: PublicKey; account: MarketType }> {\n const ai = await this.client.connection.getAccountInfo(\n market,\n this.client.commitment\n );\n if (!ai) throw new Error(\"market account not found\");\n const acc = decodeAccount<MarketType>(\"Market\", ai.data);\n return { publicKey: market, account: acc };\n }\n\n async fetchMarkets(): Promise<MarketsResponse> {\n // Derive discriminator via sha256(\"account:Market\") and take first 8 bytes\n const { createHash } = await import(\"crypto\");\n const discriminator = createHash(\"sha256\")\n .update(\"account:Market\")\n .digest()\n .subarray(0, 8);\n\n // Solana RPC expects memcmp.bytes as a base58 string\n const filters = [\n { memcmp: { offset: 0, bytes: bs58.encode(Buffer.from(discriminator)) } },\n ];\n const ras = await this.client.connection.getProgramAccounts(\n this.client.programId,\n {\n commitment: this.client.commitment,\n filters,\n }\n );\n\n const data = ras.map(({ pubkey, account }) => ({\n publicKey: pubkey.toBase58(),\n account: decodeAccount<MarketType>(\"Market\", account.data as Buffer),\n }));\n return { count: data.length, data };\n }\n\n // ===== Proxy server integration =====\n\n /**\n * Fetch settlement criteria for a market from the proxy server\n * @param market - Market public key (as string or PublicKey)\n * @param baseUrl - Optional base URL for the proxy server\n * @returns Settlement criteria data\n */\n async fetchSettlementCriteria(\n market: string | PublicKey,\n baseUrl?: string\n ): Promise<SettlementCriteria> {\n const marketStr = typeof market === \"string\" ? market : market.toBase58();\n if (!marketStr || typeof marketStr !== \"string\") {\n throw new Error(\"A valid market address string is required.\");\n }\n\n const proxyBaseUrl =\n baseUrl ||\n process.env.PROXY_BASE_URL ||\n \"https://proxyserver-production-f61b.up.railway.app\";\n const trimmed = proxyBaseUrl.replace(/\\/+$/, \"\");\n const url = `${trimmed}/market-oracle/market/${encodeURIComponent(marketStr)}`;\n\n const res = await fetch(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new Error(\n `Proxy request failed (${res.status} ${res.statusText}): ${text}`\n );\n }\n\n const data = await res.json().catch(() => {\n throw new Error(\"Failed to parse JSON from proxy response\");\n });\n\n // Handle different response formats\n if (\n data &&\n typeof data === \"object\" &&\n Object.prototype.hasOwnProperty.call(data, \"data\")\n ) {\n return data.data as SettlementCriteria;\n }\n\n return data as SettlementCriteria;\n }\n\n /**\n * Get settlement criteria for a market from the proxy server (alias for fetchSettlementCriteria)\n * @param market - Market public key (as string or PublicKey)\n * @param baseUrl - Optional base URL for the proxy server\n * @returns Settlement criteria data\n */\n async getSettlementCriteria(\n market: string | PublicKey,\n baseUrl?: string,\n options?: { retryDelayMs?: number; maxRetryTimeMs?: number }\n ): Promise<SettlementCriteria> {\n // Default retry configuration: retry every 2s for up to 15 minutes\n const RETRY_DELAY_MS = options?.retryDelayMs ?? 2000;\n const MAX_RETRY_TIME_MS = options?.maxRetryTimeMs ?? 15 * 60 * 1000;\n\n const startTime = Date.now();\n\n // simple sleep helper\n const sleep = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\n let attempt = 1;\n while (Date.now() - startTime < MAX_RETRY_TIME_MS) {\n try {\n const result = await this.fetchSettlementCriteria(market, baseUrl);\n if (result !== null && typeof result !== \"undefined\") {\n return result;\n }\n await sleep(RETRY_DELAY_MS);\n attempt++;\n } catch (_err) {\n // Swallow transient errors and retry until timeout\n await sleep(RETRY_DELAY_MS);\n attempt++;\n }\n }\n\n throw new Error(\n `Timed out after ${Math.floor(MAX_RETRY_TIME_MS / 1000)}s waiting for settlement criteria from proxy`\n );\n }\n\n /**\n * Convenience helper: wait for settlement criteria and provide a small summary.\n * - Uses getSettlementCriteria() (with retry) under the hood\n * - Derives a friendly YES/NO answer when possible\n * - Surfaces resolvable if provided by the proxy\n */\n async waitForSettlementCriteria(\n market: string | PublicKey,\n baseUrl?: string,\n options?: { retryDelayMs?: number; maxRetryTimeMs?: number }\n ): Promise<{ resolvable?: boolean; answer?: string; criteria: SettlementCriteria }> {\n const criteria = await this.getSettlementCriteria(market, baseUrl, options);\n\n // Derive human-friendly answer if available\n let answer: string | undefined;\n const anyCrit: any = criteria as any;\n if (typeof anyCrit?.answer === 'string' && anyCrit.answer.length > 0) {\n answer = String(anyCrit.answer).toUpperCase();\n } else if (typeof anyCrit?.winning_token_id === 'string') {\n const w = String(anyCrit.winning_token_id).toLowerCase();\n if (w === 'yes' || w === 'no') answer = w.toUpperCase();\n else answer = String(anyCrit.winning_token_id);\n }\n\n const resolvable: boolean | undefined =\n typeof anyCrit?.resolvable === 'boolean' ? Boolean(anyCrit.resolvable) : undefined;\n\n return { resolvable, answer, criteria };\n }\n\n /**\n * Fetch settlement data for a market from the proxy server\n * @param market - Market public key (as string or PublicKey)\n * @param baseUrl - Optional base URL for the proxy server\n * @returns Settlement data\n */\n async fetchSettlementData(\n market: string | PublicKey,\n baseUrl?: string\n ): Promise<SettlementData> {\n const marketStr = typeof market === \"string\" ? market : market.toBase58();\n if (!marketStr || typeof marketStr !== \"string\") {\n throw new Error(\"A valid market address string is required.\");\n }\n\n const proxyBaseUrl =\n baseUrl ||\n process.env.PROXY_BASE_URL ||\n \"https://proxyserver-production-f61b.up.railway.app\";\n const trimmed = proxyBaseUrl.replace(/\\/+$/, \"\");\n const url = `${trimmed}/market-oracle/market/${encodeURIComponent(marketStr)}/settlement-data`;\n\n const res = await fetch(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new Error(\n `Proxy request failed (${res.status} ${res.statusText}): ${text}`\n );\n }\n\n const data = await res.json().catch(() => {\n throw new Error(\"Failed to parse JSON from proxy response\");\n });\n\n // Handle different response formats\n const responseData =\n data &&\n typeof data === \"object\" &&\n Object.prototype.hasOwnProperty.call(data, \"data\")\n ? data.data\n : data;\n\n // Ensure the response has answer and reasoning fields\n const result: SettlementData = {\n answer: \"\",\n reasoning: \"\",\n ...responseData,\n };\n\n // Map fields from different response formats if needed\n if (!result.answer && responseData) {\n // Try to derive answer from winning_token_id or other fields\n if (responseData.winning_token_id === \"yes\") {\n result.answer = \"YES\";\n } else if (responseData.winning_token_id === \"no\") {\n result.answer = \"NO\";\n } else if (responseData.winning_token_id) {\n result.answer = responseData.winning_token_id.toUpperCase();\n }\n }\n\n // Use settlement_description as reasoning if reasoning is not provided\n if (\n !result.reasoning &&\n responseData &&\n responseData.settlement_description\n ) {\n result.reasoning = responseData.settlement_description;\n }\n\n return result;\n }\n\n /**\n * Get settlement data for a market from the proxy server (alias for fetchSettlementData)\n * @param market - Market public key (as string or PublicKey)\n * @param baseUrl - Optional base URL for the proxy server\n * @returns Settlement data\n */\n async getSettlementData(\n market: string | PublicKey,\n baseUrl?: string\n ): Promise<SettlementData> {\n return this.fetchSettlementData(market, baseUrl);\n }\n\n /**\n * Fetch market addresses from the proxy server\n * @param baseUrl - Optional base URL for the proxy server\n * @returns Array of market addresses\n */\n async fetchMarketAddresses(baseUrl?: string): Promise<string[]> {\n const proxyBaseUrl =\n baseUrl ||\n process.env.PROXY_BASE_URL ||\n \"https://proxyserver-production-f61b.up.railway.app\";\n const trimmed = proxyBaseUrl.replace(/\\/+$/, \"\");\n const url = `${trimmed}/market-oracle/market-addresses`;\n\n const res = await fetch(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new Error(\n `Proxy request failed (${res.status} ${res.statusText}): ${text}`\n );\n }\n\n const data = await res.json().catch(() => {\n throw new Error(\"Failed to parse JSON from proxy response\");\n });\n\n // Handle different response formats\n if (Array.isArray(data)) return data.map(String);\n if (data && Array.isArray(data.addresses))\n return data.addresses.map(String);\n if (\n data &&\n typeof data.success !== \"undefined\" &&\n data.data &&\n Array.isArray(data.data.addresses)\n ) {\n return data.data.addresses.map(String);\n }\n if (data && Array.isArray(data.data)) return data.data.map(String);\n\n throw new Error(\n \"Unexpected proxy response shape. Expected array, {addresses: string[]}, {data: string[]}, or { success, data: { addresses: string[] } }.\"\n );\n }\n\n /**\n * Get comprehensive information for a P2P market (V3), including reserves, token mints, and settlement criteria\n * @param marketAddress Market address as PublicKey or string\n * @param options Optional parameters like base URL\n * @returns Combined market info with both on-chain data and settlement criteria\n */\n async getP2PMarketInfo(marketAddress: PublicKey | string, options?: {\n baseUrl?: string;\n }): Promise<{\n question: string,\n yesMint: string;\n noMint: string;\n yesReserve: string;\n noReserve: string;\n collateralMint: string;\n settlementCriteria: SettlementCriteria | null;\n endTime: Date;\n }> {\n // Convert string address to PublicKey if needed\n const marketKey = typeof marketAddress === 'string' ? new PublicKey(marketAddress) : marketAddress;\n\n let marketAccount;\n\n // Try to use Anchor client if available\n if (this.anchorClient) {\n try {\n marketAccount = await (this.anchorClient.program.account as any).marketV3.fetch(marketKey);\n } catch (error) {\n console.warn('Error fetching via Anchor client, falling back to connection', error);\n }\n }\n\n // Fallback: Use connection directly if Anchor client is not available or fails\n if (!marketAccount) {\n const accountInfo = await this.client.connection.getAccountInfo(marketKey);\n if (!accountInfo) {\n throw new Error(`Market account not found: ${marketKey.toString()}`);\n }\n\n // Implement basic parsing for V3 market account data\n // This is a simplified version and might need adjustment for actual data layout\n try {\n // Use existing decoder (may need to be adapted for V3 markets)\n marketAccount = this.decodeMarketAny(accountInfo.data as Buffer);\n } catch (error) {\n throw new Error(`Failed to decode market data: ${error}`);\n }\n }\n\n // Get settlement criteria from proxy server\n const settlementCriteria = await this.fetchSettlementCriteria(marketKey.toString(), options?.baseUrl).catch(() => null);\n\n // Safely access properties with appropriate fallbacks\n // Get mint addresses, checking different possible property names\n let yesMint = '0';\n let noMint = '0';\n try {\n // Handle both camelCase and snake_case property names\n yesMint = (marketAccount.yesTokenMint || marketAccount.yes_token_mint)?.toString() || '0';\n noMint = (marketAccount.noTokenMint || marketAccount.no_token_mint)?.toString() || '0';\n } catch (error) {\n console.warn('Error accessing mint addresses:', error);\n }\n\n // Get reserve values with fallbacks\n let yesReserve = '0';\n let noReserve = '0';\n try {\n // Try different possible property names\n yesReserve = (marketAccount.yesPotReserve || marketAccount.yes_pot_reserve)?.toString() || '0';\n noReserve = (marketAccount.noPotReserve || marketAccount.no_pot_reserve)?.toString() || '0';\n } catch (error) {\n console.warn('Error accessing reserve values:', error);\n }\n\n // Get end time with fallbacks\n let endTime = new Date();\n try {\n // Try both camelCase and snake_case property names\n const endTimeSeconds = Number(marketAccount.endTime || marketAccount.end_time || 0);\n endTime = new Date(endTimeSeconds * 1000);\n } catch (error) {\n console.warn('Error accessing end time:', error);\n }\n\n let collateralMint = '0';\n try {\n // Try different possible property names\n collateralMint = (marketAccount.collateralToken || marketAccount.collateral_token)?.toString() || '0';\n } catch (error) {\n console.warn('Error accessing collateral mint:', error);\n }\n\n let question = '';\n try {\n // Try different possible property names\n question = (marketAccount.question || marketAccount.question)?.toString() || '';\n } catch (error) {\n console.warn('Error accessing question:', error);\n }\n\n return {\n question,\n yesMint,\n noMint,\n yesReserve,\n noReserve,\n collateralMint,\n settlementCriteria,\n endTime\n };\n }\n\n /**\n * Get comprehensive market information for a V2 market, combining on-chain data and settlement criteria\n * @param marketAddress Market address as PublicKey or string\n * @param options Optional parameters like base URL\n * @returns Combined market info with both on-chain data and settlement criteria\n */\n async getV2MarketInfo(marketAddress: PublicKey | string, options?: {\n baseUrl?: string;\n }): Promise<{\n yesMint: string;\n noMint: string;\n question: string;\n creator: string;\n settlementCriteria: SettlementCriteria | null;\n yesMultiplier: number;\n noMultiplier: number;\n endTime: Date;\n }> {\n // Convert string address to PublicKey if needed\n const marketKey = typeof marketAddress === 'string' ? new PublicKey(marketAddress) : marketAddress;\n\n // Get on-chain market data\n const { account: marketAccount } = await this.fetchMarket(marketKey);\n\n // Get settlement criteria from proxy server\n const settlementCriteria = await this.fetchSettlementCriteria(marketKey.toString(), options?.baseUrl).catch(() => null);\n\n // Calculate multipliers (default to 1)\n let yesMultiplier = 1;\n let noMultiplier = 1;\n\n // Convert endTime from seconds to Date object\n const endTimeSeconds = Number(marketAccount.end_time);\n const endTime = new Date(endTimeSeconds * 1000);\n\n return {\n yesMint: marketAccount.yes_token_mint.toString(),\n noMint: marketAccount.no_token_mint.toString(),\n question: marketAccount.question,\n creator: marketAccount.creator.toString(),\n settlementCriteria,\n yesMultiplier,\n noMultiplier,\n endTime\n };\n }\n\n /**\n * Fetch V3 market addresses from the proxy server\n * @param baseUrl - Optional base URL for the proxy server\n * @returns Array of market addresses\n */\n async fetchV3MarketAddresses(baseUrl?: string): Promise<string[]> {\n const proxyBaseUrl =\n baseUrl ||\n process.env.PROXY_BASE_URL ||\n \"https://proxyserver-production-f61b.up.railway.app\";\n const trimmed = proxyBaseUrl.replace(/\\/+$/, \"\");\n const url = `${trimmed}/market-oracle/v3-market-addresses`;\n\n const res = await fetch(url, {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new Error(\n `Proxy request failed (${res.status} ${res.statusText}): ${text}`\n );\n }\n\n const data = await res.json().catch(() => {\n throw new Error(\"Failed to parse JSON from proxy response\");\n });\n\n // Handle different response formats\n if (Array.isArray(data)) return data.map(String);\n if (data && Array.isArray(data.addresses))\n return data.addresses.map(String);\n if (\n data &&\n typeof data.success !== \"undefined\" &&\n data.data &&\n Array.isArray(data.data.addresses)\n ) {\n return data.data.addresses.map(String);\n }\n if (data && Array.isArray(data.data)) return data.data.map(String);\n\n throw new Error(\n \"Unexpected proxy response shape. Expected array, {addresses: string[]}, {data: string[]}, or { success, data: { addresses: string[] } }.\"\n );\n }\n\n /**\n * Get market metadata (volume, image, initial liquidity) for multiple markets in a single API call\n * @param markets - Array of market public keys (as strings or PublicKeys)\n * @param baseUrl - Optional base URL for the proxy server\n * @returns Array of market metadata including volume, image, and initial liquidity\n */\n async getMarketMetaBatch(\n markets: (string | PublicKey)[],\n baseUrl?: string\n ): Promise<MarketMeta[]> {\n if (!markets || !Array.isArray(markets) || markets.length === 0) {\n throw new Error(\"At least one market address is required.\");\n }\n\n // Convert all addresses to strings\n const addresses = markets.map((m) =>\n typeof m === \"string\" ? m : m.toBase58()\n );\n\n const proxyBaseUrl =\n baseUrl ||\n process.env.PROXY_BASE_URL ||\n \"https://proxyserver-production-f61b.up.railway.app\";\n const trimmed = proxyBaseUrl.replace(/\\/+$/, \"\");\n const url = `${trimmed}/market-oracle/batch-data`;\n\n const res = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ addresses }),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new Error(\n `Proxy request failed (${res.status} ${res.statusText}): ${text}`\n );\n }\n\n const data = await res.json().catch(() => {\n throw new Error(\"Failed to parse JSON from proxy response\");\n });\n\n // Handle error response\n if (data && data.success === false) {\n throw new Error(data.error || \"Unknown error from proxy server\");\n }\n\n if (!data || !data.data || !Array.isArray(data.data)) {\n throw new Error(\"Invalid response format from proxy server\");\n }\n\n return data.data as MarketMeta[];\n }\n\n /**\n * Get market metadata (volume, image, initial liquidity) for a single market\n * @param market - Market public key (as string or PublicKey)\n * @param baseUrl - Optional base URL for the proxy server\n * @returns Market metadata including volume, image, and initial liquidity\n */\n async getMarketMeta(\n market: string | PublicKey,\n baseUrl?: string\n ): Promise<MarketMeta> {\n const results = await this.getMarketMetaBatch([market], baseUrl);\n const result = results[0];\n if (!result) {\n const marketStr = typeof market === \"string\" ? market : market.toBase58();\n throw new Error(`No metadata found for market: ${marketStr}`);\n }\n return result;\n }\n\n /**\n * Claim creator refund for a market.\n * Behavior parity with scripts/claimCreatorRefund.ts:\n * - Eligible if market is not resolvable (proxy or on-chain flag) AND signer is the creator\n * - Mixed token programs => use creator_refund_v2 with accountsPartial (yes/no token mints null)\n * - Uniform token programs => try creator_refund_v2 then fallback to v1\n */\n async claimMarketRefund(market: PublicKey): Promise<{ signature: string }> {\n if (!this.redemption || !this.trading) {\n throw new Error(\n \"Required modules (redemption and trading) are undefined. Ensure your wallet secret is valid.\"\n );\n }\n\n // Fetch market info\n const info: any = await this.trading.getMarketInfo(market);\n\n // Determine eligibility: not resolvable and signer is the creator\n let isNotResolvable = false;\n if (info && typeof info.resolvable === \"boolean\") {\n isNotResolvable = !info.resolvable;\n } else {\n try {\n const criteria: any = await this.fetchSettlementCriteria(\n market.toBase58()\n );\n if (criteria && typeof criteria.resolvable === \"boolean\") {\n isNotResolvable = !criteria.resolvable;\n }\n } catch {\n // ignore proxy errors; assume not resolvable remains false unless on-chain said otherwise\n }\n }\n\n const walletPk = (this.signer as any)?.publicKey;\n const isCreator = walletPk ? walletPk.equals(info.creator) : false;\n if (!(isNotResolvable && isCreator)) {\n throw new Error(\n \"This market is not eligible for creator refund. Must be not resolvable and you must be the creator.\"\n );\n }\n\n // Extract\n const yesMint = info.yesTokenMint;\n const noMint = info.noTokenMint;\n const collateralMint = info.collateralToken;\n const creator = info.creator;\n if (!collateralMint || !creator) {\n throw new Error(\n \"Market is missing required collateral token or creator info\"\n );\n }\n\n // Determine token program owners\n const [yesAi, noAi, colAi] = await Promise.all([\n this.client.connection.getAccountInfo(yesMint),\n this.client.connection.getAccountInfo(noMint),\n this.client.connection.getAccountInfo(collateralMint),\n ]);\n if (!yesAi || !noAi || !colAi)\n throw new Error(\"One or more market mint accounts are missing\");\n\n const hasUniformTokenProgram =\n yesAi.owner.equals(noAi.owner) && yesAi.owner.equals(colAi.owner);\n const collateralTokenProgram = colAi.owner.equals(TOKEN_2022_PROGRAM_ID)\n ? TOKEN_2022_PROGRAM_ID\n : TOKEN_PROGRAM_ID;\n\n // PDAs and ATAs\n const [globalConfig] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"global_config\")],\n this.client.programId\n );\n const marketReserveVault = getAssociatedTokenAddressSync(\n collateralMint,\n market,\n true,\n collateralTokenProgram\n );\n const creatorCollateralTokenAccount = getAssociatedTokenAddressSync(\n collateralMint,\n creator,\n false,\n collateralTokenProgram\n );\n\n if (!hasUniformTokenProgram) {\n // Mixed token programs => V2 with accountsPartial\n if (!this.anchorClient) {\n throw new Error(\n \"Anchor client is not initialized. Cannot perform creator refund.\"\n );\n }\n const tx = await (this.anchorClient as any).program.methods\n .creatorRefundV2()\n .accountsPartial({\n creator,\n globalConfig,\n market,\n yesTokenMint: null as any,\n noTokenMint: null as any,\n marketReserveVault,\n collateralTokenMint: collateralMint,\n creatorCollateralTokenAccount,\n tokenProgram: collateralTokenProgram,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n } as any)\n .rpc();\n return { signature: tx };\n }\n\n // Uniform programs => try V2 then fallback to V1\n try {\n const res = await this.redemption.creatorRefundV2({\n creator,\n global_config: globalConfig,\n market,\n yes_token_mint: yesMint,\n no_token_mint: noMint,\n market_reserve_vault: marketReserveVault,\n collateral_token_mint: collateralMint,\n creator_collateral_token_account: creatorCollateralTokenAccount,\n token_program: collateralTokenProgram,\n associated_token_program: ASSOCIATED_TOKEN_PROGRAM_ID,\n system_program: SystemProgram.programId,\n });\n return { signature: (res as any).signature ?? res };\n } catch (e) {\n const res = await this.redemption.creatorRefund({\n creator,\n global_config: globalConfig,\n market,\n yes_token_mint: yesMint,\n no_token_mint: noMint,\n market_reserve_vault: marketReserveVault,\n collateral_token_mint: collateralMint,\n creator_collateral_token_account: creatorCollateralTokenAccount,\n token_program: collateralTokenProgram,\n associated_token_program: ASSOCIATED_TOKEN_PROGRAM_ID,\n system_program: SystemProgram.programId,\n });\n return { signature: (res as any).signature ?? res };\n }\n }\n\n /**\n * Claim creator refund for a P2P (V3) market by market address.\n * - Uses getP2PMarketInfo to discover collateral mint\n * - Decodes MarketV3 to discover creator\n * - Enforces that the signer is the creator\n * - Automatically wires all required PDAs and token accounts\n */\n async claimP2PMarketRefund(\n marketAddress: PublicKey | string\n ): Promise<{ signature: string }> {\n if (!this.redemption) {\n throw new Error(\n \"Redemption module not available. Ensure your wallet secret is valid.\"\n );\n }\n if (!this.anchorClient) {\n throw new Error(\n \"Anchor client not available. Ensure your wallet secret is valid.\"\n );\n }\n if (!this.signer || !this.signer.publicKey) {\n throw new Error(\n \"Signer not available. Initialize PNPClient with a valid private key.\"\n );\n }\n\n const market =\n typeof marketAddress === \"string\"\n ? new PublicKey(marketAddress)\n : marketAddress;\n\n // Use SDK helper to get P2P market info (including collateral mint)\n const marketInfo = await this.getP2PMarketInfo(market);\n const collateralTokenMint = new PublicKey(marketInfo.collateralMint);\n\n // Get global config PDA\n const [globalConfig] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"global_config\")],\n this.anchorClient.program.programId\n );\n\n // Fetch and decode MarketV3 to obtain the creator\n const accountInfo = await this.client.connection.getAccountInfo(market);\n if (!accountInfo) {\n throw new Error(`Market account not found: ${market.toBase58()}`);\n }\n\n interface MarketV3Account {\n creator: PublicKey | Uint8Array | string;\n [key: string]: unknown;\n }\n\n const marketData = decodeAccount<MarketV3Account>(\n \"MarketV3\",\n accountInfo.data as Buffer\n );\n const creator =\n marketData.creator instanceof PublicKey\n ? marketData.creator\n : new PublicKey(marketData.creator as any);\n\n // Ensure signer is the creator\n if (!this.signer.publicKey.equals(creator)) {\n throw new Error(\"Signer is not the creator of this P2P market\");\n }\n\n // Determine correct token program for the collateral mint\n const mintInfo = await this.client.connection.getAccountInfo(\n collateralTokenMint\n );\n if (!mintInfo) {\n throw new Error(\"Collateral mint account not found\");\n }\n const tokenProgramId = mintInfo.owner.equals(TOKEN_2022_PROGRAM_ID)\n ? TOKEN_2022_PROGRAM_ID\n : TOKEN_PROGRAM_ID;\n\n // Derive market reserve vault and creator's collateral token account\n const marketReserveVault = getAssociatedTokenAddressSync(\n collateralTokenMint,\n market,\n true,\n tokenProgramId\n );\n\n const creatorCollateralTokenAccount = getAssociatedTokenAddressSync(\n collateralTokenMint,\n creator,\n false,\n tokenProgramId\n );\n\n // Execute IDL-backed creator refund V3\n const res = await this.redemption.creatorRefundV3({\n creator,\n global_config: globalConfig,\n market,\n market_reserve_vault: marketReserveVault,\n collateral_token_mint: collateralTokenMint,\n creator_collateral_token_account: creatorCollateralTokenAccount,\n token_program: tokenProgramId,\n associated_token_program: ASSOCIATED_TOKEN_PROGRAM_ID,\n system_program: SystemProgram.programId,\n });\n\n return { signature: (res as any).signature as string };\n }\n\n /**\n * Settle a V2 market by determining the winning outcome.\n * Only callable by the oracle/admin after market is resolvable.\n * \n * @param params Market address and outcome (true for YES winner, false for NO winner)\n * @returns Transaction signature\n */\n async settleMarket(params: {\n market: PublicKey;\n yesWinner: boolean;\n }): Promise<{ signature: string }> {\n if (!this.anchorClient || !this.signer) {\n throw new Error('AnchorClient and signer required for settleMarket');\n }\n\n const { market, yesWinner } = params;\n\n // 1. Fetch market data\n const marketData = await (this.anchorClient.program.account as any).market.fetch(market);\n const collateralTokenMint = marketData.collateralToken as PublicKey;\n const marketCreator = marketData.creator as PublicKey;\n const marketId = marketData.id;\n\n // 2. Derive global config and fetch for admin\n const [globalConfig] = PublicKey.findProgramAddressSync(\n [Buffer.from('global_config')],\n this.anchorClient.program.programId\n );\n const globalConfigData = await (this.anchorClient.program.account as any).globalConfig.fetch(globalConfig);\n const admin = globalConfigData.admin as PublicKey;\n\n // 3. Derive mints and vaults\n const gidLe = marketId.toArrayLike(Buffer, 'le', 8);\n\n const [yesTokenMint] = PublicKey.findProgramAddressSync(\n [Buffer.from('yes_token'), gidLe],\n this.anchorClient.program.programId\n );\n const [noTokenMint] = PublicKey.findProgramAddressSync(\n [Buffer.from('no_token'), gidLe],\n this.anchorClient.program.programId\n );\n\n const marketReserveVault = getAssociatedTokenAddressSync(\n collateralTokenMint,\n market,\n true\n );\n\n // 4. Derive ATAs for buyer/signer\n const buyerYesTokenAccount = getAssociatedTokenAddressSync(\n yesTokenMint,\n this.signer.publicKey\n );\n const buyerNoTokenAccount = getAssociatedTokenAddressSync(\n noTokenMint,\n this.signer.publicKey\n );\n const buyerCollateralTokenAccount = getAssociatedTokenAddressSync(\n collateralTokenMint,\n this.signer.publicKey\n );\n\n // 5. Derive admin collateral account\n const adminCollateralTokenAccount = getAssociatedTokenAddressSync(\n collateralTokenMint,\n admin\n );\n\n // 6. Derive creator fee treasury\n const [creatorFeeTreasury] = PublicKey.findProgramAddressSync(\n [Buffer.from('creator_fee_treasury'), marketCreator.toBuffer(), collateralTokenMint.toBuffer()],\n this.anchorClient.program.programId\n );\n\n // 7. Check for market extension\n const [marketExtension] = PublicKey.findProgramAddressSync(\n [Buffer.from('market_ext'), gidLe],\n this.anchorClient.program.programId\n );\n const extensionInfo = await this.connection.getAccountInfo(marketExtension);\n\n // 8. Execute instruction\n const txSignature = await (this.anchorClient.program.methods as any)\n .settleMarket(yesWinner)\n .accounts({\n buyer: this.signer.publicKey,\n admin,\n marketCreator,\n market,\n globalConfig,\n yesTokenMint,\n noTokenMint,\n buyerYesTokenAccount,\n buyerNoTokenAccount,\n marketReserveVault,\n collateralTokenMint,\n buyerCollateralTokenAccount,\n adminCollateralTokenAccount,\n creatorFeeTreasury,\n marketExtension: extensionInfo ? marketExtension : null,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .signers([this.anchorClient.signer])\n .rpc();\n\n return { signature: txSignature };\n }\n}\n","import { Keypair, PublicKey, Transaction, VersionedTransaction } from \"@solana/web3.js\";\n\nexport interface SignerLike {\n publicKey: PublicKey;\n signTransaction(tx: Transaction | VersionedTransaction): Promise<Transaction | VersionedTransaction>;\n signAllTransactions?(txs: (Transaction | VersionedTransaction)[]): Promise<(Transaction | VersionedTransaction)[]>;\n}\n\nexport class NodeKeypairSigner implements SignerLike {\n constructor(public readonly keypair: Keypair) {}\n get publicKey() { return this.keypair.publicKey; }\n async signTransaction(tx: Transaction | VersionedTransaction) {\n if (tx instanceof VersionedTransaction) {\n tx.sign([this.keypair]);\n return tx;\n }\n tx.partialSign(this.keypair);\n return tx;\n }\n}\n","import { Connection, Keypair, PublicKey } from '@solana/web3.js';\nimport { Program, AnchorProvider, Wallet, Idl } from '@coral-xyz/anchor';\nimport { BN } from 'bn.js';\nimport * as anchor from '@coral-xyz/anchor';\nimport { PNP_IDL } from '../idl';\n\n// Network-specific program IDs (must match platform/client.ts)\nconst MAINNET_PROGRAM_ID = new PublicKey(\"6fnYZUSyp3vJxTNnayq5S62d363EFaGARnqYux5bqrxb\");\nconst DEVNET_PROGRAM_ID = new PublicKey(\"pnpkv2qnh4bfpGvTugGDSEhvZC7DP4pVxTuDykV3BGz\");\n\n/**\n * Provides a wrapper for Anchor program interactions\n * Following the same pattern as the JavaScript example\n */\nexport class AnchorClient {\n readonly provider: anchor.AnchorProvider;\n readonly wallet: anchor.Wallet;\n readonly program: anchor.Program;\n\n constructor(\n readonly connection: Connection,\n readonly signer: Keypair,\n readonly idlOverride?: Idl,\n readonly programIdOverride?: PublicKey\n ) {\n // Set up the wallet and provider exactly like in the working example\n this.wallet = new anchor.Wallet(signer);\n this.provider = new anchor.AnchorProvider(connection, this.wallet, { commitment: \"confirmed\" });\n \n // Set the provider globally for Anchor\n anchor.setProvider(this.provider);\n \n try {\n const verbose = process.env.VERBOSE === '1' || process.env.PNP_DEBUG === '1';\n if (verbose) {\n console.log(\"Initializing Anchor program with IDL\");\n }\n \n // Create IDL with correct program address for the network\n const baseIdl: Idl = this.idlOverride ?? (PNP_IDL as unknown as Idl);\n const programId = this.programIdOverride;\n \n if (programId) {\n // Override the IDL address with the correct program ID for the network\n const idlWithAddress = { ...baseIdl, address: programId.toBase58() } as Idl;\n // @ts-ignore - Anchor types across versions\n this.program = new anchor.Program(idlWithAddress, this.provider);\n } else {\n // Use IDL's embedded address (mainnet default)\n // @ts-ignore - Anchor types across versions\n this.program = new anchor.Program(baseIdl, this.provider);\n }\n \n if (verbose) {\n console.log(\"Program loaded successfully\");\n console.log(`Program ID: ${this.program.programId.toString()}`);\n }\n } catch (err) {\n console.error(\"Failed to initialize Anchor program:\", err);\n throw err;\n }\n }\n\n /**\n * Convert a JavaScript BigInt or number to Anchor BN\n */\n static toBN(value: bigint | number): typeof BN.prototype {\n return new BN(value.toString());\n }\n \n /**\n * Returns the IDL for the PNP program\n */\n static async getIdl(): Promise<Idl> {\n return PNP_IDL as unknown as Idl;\n }\n\n static fromIdl(connection: Connection, signer: Keypair, idl: Idl) {\n return new AnchorClient(connection, signer, idl);\n }\n\n /**\n * Get the wallet's public key\n */\n get walletPublicKey(): PublicKey {\n return this.wallet.publicKey;\n }\n}\n","import { PublicKey, SystemProgram, ComputeBudgetProgram } from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddress,\n} from \"@solana/spl-token\";\nimport { BN } from \"bn.js\";\nimport * as anchor from \"@coral-xyz/anchor\";\nimport { AnchorClient } from \"../lib/anchor-client\";\n\n/**\n * Market module that uses direct Anchor program calls\n */\nexport class AnchorMarketModule {\n constructor(private anchorClient: AnchorClient) { }\n\n /**\n * Create a new prediction market using direct Anchor program calls\n * Following the same structure as the working JavaScript example\n */\n async createMarket(params: {\n question: string;\n initialLiquidity: bigint;\n endTime: bigint;\n collateralTokenMint: PublicKey;\n creator?: PublicKey; // Optional: explicit creator (can be different from payer)\n yesOddsBps?: number; // Optional: Custom YES odds (100-9900 bps). Default 5000 (50/50)\n oracle?: PublicKey; // Optional: Custom oracle for settlement. Default uses global oracle\n }) {\n const { question, initialLiquidity, endTime, collateralTokenMint } = params;\n const creatorOverride: PublicKey = params.creator ?? this.anchorClient.walletPublicKey; // default to payer\n\n // Convert bigint to BN just like in the JavaScript example\n const initialLiquidityBN = AnchorClient.toBN(initialLiquidity);\n const endTimeBN = AnchorClient.toBN(endTime);\n\n console.log(\"🚀 Creating market with parameters:\");\n console.log(\" Question:\", question);\n console.log(\" Initial Liquidity:\", initialLiquidityBN.toString());\n console.log(\" End Time:\", new Date(Number(endTime) * 1000).toISOString());\n console.log(\" Collateral Token Mint:\", collateralTokenMint.toString());\n console.log(\" Creator (for fees/ownership):\", creatorOverride.toBase58());\n\n // 1. Get global config and ID\n const [globalConfig] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"global_config\")],\n this.anchorClient.program.programId\n );\n console.log(\"Global Config:\", globalConfig.toBase58());\n\n // Fetch global config to get the current global_id (BN)\n const globalConfigAccount = await (this.anchorClient.program.account as any).globalConfig.fetch(globalConfig);\n const currentGlobalId = globalConfigAccount.globalId;\n console.log(\"Current Global ID:\", currentGlobalId.toString());\n\n // Derive market extension PDA if custom odds or oracle is provided\n let marketExtension: PublicKey | null = null;\n if (params.yesOddsBps !== undefined || params.oracle !== undefined) {\n [marketExtension] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"market_ext\"), currentGlobalId.toArrayLike(Buffer, \"le\", 8)],\n this.anchorClient.program.programId\n );\n console.log(\"Market Extension PDA:\", marketExtension.toBase58());\n if (params.yesOddsBps !== undefined) {\n console.log(\"Custom YES Odds (BPS):\", params.yesOddsBps);\n }\n if (params.oracle !== undefined) {\n console.log(\"Custom Oracle:\", params.oracle.toBase58());\n }\n }\n\n // 2. Derive V2 market PDA: [\"market-v2\", global_id (le u64)]\n const [market] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"market-v2\"), currentGlobalId.toArrayLike(Buffer, \"le\", 8)],\n this.anchorClient.program.programId\n );\n console.log(\"Market PDA:\", market.toBase58());\n\n // 3. ATAs required for V2\n // IDL now expects payer_collateral_token_account (owned by payer)\n const payerCollateralTokenAccount = await getAssociatedTokenAddress(\n collateralTokenMint,\n this.anchorClient.walletPublicKey\n );\n\n const marketReserveVault = await getAssociatedTokenAddress(\n collateralTokenMint,\n market,\n true // allowOwnerOffCurve\n );\n\n // 4. Derive creator fee treasury\n // NEW format (multi-collateral): [\"creator_fee_treasury\", creator, collateralMint]\n const [creatorFeeTreasury] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"creator_fee_treasury\"), creatorOverride.toBuffer(), collateralTokenMint.toBuffer()],\n this.anchorClient.program.programId\n );\n\n try {\n // Add compute budget instruction to handle complex transaction\n const computeBudgetIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: 400_000,\n });\n\n // 5. Direct program method call for V2\n const txSignature = await (this.anchorClient.program.methods as any)\n .createMarketV2(\n question,\n initialLiquidityBN,\n endTimeBN,\n creatorOverride,\n params.yesOddsBps ?? null, // Optional: Custom YES odds (100-9900 bps)\n params.oracle ?? null // Optional: Custom oracle\n )\n .accounts({\n payer: this.anchorClient.walletPublicKey,\n creator: creatorOverride,\n market: market,\n marketExtension, // Optional account for custom odds/oracle\n globalConfig: globalConfig,\n collateralTokenMint: collateralTokenMint,\n payerCollateralTokenAccount: payerCollateralTokenAccount,\n marketReserveVault: marketReserveVault,\n creatorFeeTreasury: creatorFeeTreasury,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions([computeBudgetIx])\n .signers([this.anchorClient.signer])\n .rpc();\n\n console.log(\"✅ Market created successfully!\");\n console.log(\"Transaction signature:\", txSignature);\n\n // 6. Fetch and display the created market (optional)\n try {\n const marketAccount = await (this.anchorClient.program.account as any).market.fetch(market);\n console.log(\"\\n📊 Market Details:\");\n console.log(\"------------------------\");\n console.log(\"Market ID:\", marketAccount.id.toString());\n console.log(\"Question:\", marketAccount.question);\n console.log(\"Creator:\", marketAccount.creator.toBase58());\n console.log(\"Initial Liquidity:\", marketAccount.initialLiquidity.toString());\n console.log(\"Market Reserves:\", marketAccount.marketReserves.toString());\n console.log(\"End Time:\", new Date(marketAccount.endTime.toNumber() * 1000).toISOString());\n console.log(\"Resolved:\", marketAccount.resolved);\n console.log(\"------------------------\");\n\n return {\n signature: txSignature,\n market,\n marketDetails: marketAccount\n };\n } catch (err) {\n // Return basic info even if we can't fetch market details\n return {\n signature: txSignature,\n market,\n };\n }\n } catch (error: any) {\n console.error(\"💥 Error creating market:\", error);\n\n if (error.logs) {\n console.error(\"Program logs:\");\n error.logs.forEach((log: string) => console.error(\" \", log));\n }\n\n throw error;\n }\n }\n}\n","import { PublicKey, SystemProgram, ComputeBudgetProgram } from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddress,\n} from \"@solana/spl-token\";\nimport { BN } from \"bn.js\";\nimport * as anchor from \"@coral-xyz/anchor\";\nimport { AnchorClient } from \"../lib/anchor-client\";\n\ntype TokenSide = \"yes\" | \"no\";\n\n// Default max pot ratio of 10^9\nconst DEFAULT_MAX_POT_RATIO = 10_000_000_00;\n\n/**\n * Market module that uses direct Anchor program calls for V3 markets\n */\nexport class AnchorMarketV3Module {\n constructor(private anchorClient: AnchorClient) { }\n\n /**\n * Create a new V3 prediction market using direct Anchor program calls\n */\n async createMarketV3(params: {\n question: string;\n initialAmount: bigint;\n side: TokenSide;\n creatorSideCap: bigint;\n endTime: bigint;\n maxPotRatio?: number; // Optional - will use DEFAULT_MAX_POT_RATIO if not provided\n collateralTokenMint: PublicKey;\n creator?: PublicKey; // Optional: explicit creator (can be different from payer)\n oddsBps?: number; // Optional: Custom odds (100-9900 bps). Default 10000 (all to creator side)\n oracle?: PublicKey; // Optional: Custom oracle for settlement. Default uses global oracle\n }) {\n const {\n question,\n initialAmount,\n side,\n creatorSideCap,\n endTime,\n collateralTokenMint\n } = params;\n\n const creatorOverride: PublicKey = params.creator ?? this.anchorClient.walletPublicKey; // default to payer\n\n // Convert bigint to BN for Anchor\n const initialAmountBN = AnchorClient.toBN(initialAmount);\n const creatorSideCapBN = AnchorClient.toBN(creatorSideCap);\n const endTimeBN = AnchorClient.toBN(endTime);\n const sideEnum = side === \"yes\" ? { yes: {} } : { no: {} };\n\n // Use the provided maxPotRatio or the default\n const finalMaxPotRatio = params.maxPotRatio ?? DEFAULT_MAX_POT_RATIO;\n\n console.log(\"🚀 Creating V3 market with parameters:\");\n console.log(\" Question:\", question);\n console.log(\" Initial Amount:\", initialAmountBN.toString());\n console.log(\" Side:\", side.toUpperCase());\n console.log(\" Creator Side Cap:\", creatorSideCapBN.toString());\n console.log(\" Max Pot Ratio:\", finalMaxPotRatio);\n console.log(\" End Time:\", new Date(Number(endTime) * 1000).toISOString());\n console.log(\" Collateral Token Mint:\", collateralTokenMint.toString());\n console.log(\" Creator (for fees/ownership):\", creatorOverride.toBase58());\n if (params.oddsBps !== undefined) {\n console.log(\" Custom Odds (BPS):\", params.oddsBps);\n }\n if (params.oracle !== undefined) {\n console.log(\" Custom Oracle:\", params.oracle.toBase58());\n }\n\n // 1. Get global config and ID\n const [globalConfig] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"global_config\")],\n this.anchorClient.program.programId\n );\n\n // Fetch global config to get the current global_id (BN)\n const globalConfigAccount = await (this.anchorClient.program.account as any).globalConfig.fetch(globalConfig);\n const currentGlobalId = globalConfigAccount.globalId;\n console.log(\"Current Global ID:\", currentGlobalId.toString());\n\n // Derive market extension PDA if custom odds or oracle is provided\n let marketExtension: PublicKey | null = null;\n if (params.oddsBps !== undefined || params.oracle !== undefined) {\n [marketExtension] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"market_v3_ext\"), currentGlobalId.toArrayLike(Buffer, \"le\", 8)],\n this.anchorClient.program.programId\n );\n console.log(\"Market Extension PDA:\", marketExtension.toBase58());\n }\n\n // 2. Derive V3 market PDA: [\"market-v3\", global_id (le u64)]\n const [market] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"market-v3\"), currentGlobalId.toArrayLike(Buffer, \"le\", 8)],\n this.anchorClient.program.programId\n );\n console.log(\"Market PDA:\", market.toBase58());\n\n // 3. Derive V3 token mints\n const [yesTokenMint] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"v3-yes-token\"), currentGlobalId.toArrayLike(Buffer, \"le\", 8)],\n this.anchorClient.program.programId\n );\n\n const [noTokenMint] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"v3-no-token\"), currentGlobalId.toArrayLike(Buffer, \"le\", 8)],\n this.anchorClient.program.programId\n );\n\n // 4. ATAs required for V3\n const payerCollateralTokenAccount = await getAssociatedTokenAddress(\n collateralTokenMint,\n this.anchorClient.walletPublicKey\n );\n\n const marketReserveVault = await getAssociatedTokenAddress(\n collateralTokenMint,\n market,\n true // allowOwnerOffCurve\n );\n\n const creatorYesTokenAccount = await getAssociatedTokenAddress(\n yesTokenMint,\n creatorOverride\n );\n\n const creatorNoTokenAccount = await getAssociatedTokenAddress(\n noTokenMint,\n creatorOverride\n );\n\n // 5. Derive creator fee treasury\n // NEW format (multi-collateral): [\"creator_fee_treasury\", creator, collateralMint]\n const [creatorFeeTreasury] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"creator_fee_treasury\"), creatorOverride.toBuffer(), collateralTokenMint.toBuffer()],\n this.anchorClient.program.programId\n );\n\n try {\n // Add compute budget instruction to handle complex transaction\n const computeBudgetIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: 400_000,\n });\n\n // 6. Direct program method call for V3\n const txSignature = await (this.anchorClient.program.methods as any)\n .createMarketV3(\n question,\n initialAmountBN,\n sideEnum,\n creatorSideCapBN,\n endTimeBN,\n finalMaxPotRatio,\n creatorOverride,\n params.oddsBps ?? null, // Optional: Custom odds (100-9900 bps)\n params.oracle ?? null // Optional: Custom oracle\n )\n .accounts({\n payer: this.anchorClient.walletPublicKey,\n creator: creatorOverride,\n market,\n marketExtension, // Optional account for custom odds/oracle\n globalConfig,\n collateralTokenMint,\n yesTokenMint,\n noTokenMint,\n payerCollateralTokenAccount,\n marketReserveVault,\n creatorYesTokenAccount,\n creatorNoTokenAccount,\n creatorFeeTreasury,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .preInstructions([computeBudgetIx])\n .signers([this.anchorClient.signer])\n .rpc();\n\n console.log(\"✅ V3 market created successfully!\");\n console.log(\"Transaction signature:\", txSignature);\n\n return {\n signature: txSignature,\n market,\n yesTokenMint,\n noTokenMint\n };\n } catch (error: any) {\n console.error(\"💥 Error creating V3 market:\", error);\n\n if (error.logs) {\n console.error(\"Program logs:\");\n error.logs.forEach((log: string) => console.error(\" \", log));\n }\n\n throw error;\n }\n }\n}\n"],"mappings":"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","names":["PublicKey","PublicKey","PublicKey","PublicKey","SystemProgram","DEBUG","TOKEN_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","DEBUG","PublicKey","SystemProgram","PublicKey","SystemProgram","z","TransactionInstruction","TransactionInstruction","TOKEN_PROGRAM_ID","TOKEN_2022_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","z","PublicKey","SystemProgram","PublicKey","z","TransactionInstruction","TransactionInstruction","z","PublicKey","PublicKey","Keypair","SystemProgram","VersionedTransaction","PublicKey","BN","MAINNET_PROGRAM_ID","PublicKey","DEVNET_PROGRAM_ID","BN","PublicKey","SystemProgram","ComputeBudgetProgram","TOKEN_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","PublicKey","ComputeBudgetProgram","TOKEN_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","SystemProgram","PublicKey","SystemProgram","ComputeBudgetProgram","TOKEN_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","getAssociatedTokenAddress","PublicKey","getAssociatedTokenAddress","ComputeBudgetProgram","TOKEN_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","SystemProgram","ASSOCIATED_TOKEN_PROGRAM_ID","TOKEN_2022_PROGRAM_ID","TOKEN_PROGRAM_ID","getAssociatedTokenAddressSync","BN","Keypair","PublicKey","SystemProgram"]}
|