@theliem/xmarket-sdk 3.1.2 → 3.1.3
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/index.d.mts +7 -10
- package/dist/index.d.ts +7 -10
- package/dist/index.js +20 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -28
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pda.ts","../src/programs/oracle.ts","../src/programs/hook.ts","../src/types.ts","../src/programs/market.ts","../src/programs/ctf.ts","../src/signing.ts","../src/programs/clob.ts","../src/programs/fee_management.ts","../src/programs/presale.ts","../src/programs/market_oracle.ts","../src/sdk.ts","../src/order.ts","../src/approve.ts"],"names":["PublicKey","createHash","SystemProgram","anchor","TOKEN_2022_PROGRAM_ID","QuestionStatus","anchor2","SYSVAR_RENT_PUBKEY","getAssociatedTokenAddressSync","TOKEN_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","anchor3","TransactionInstruction","Ed25519Program","SYSVAR_INSTRUCTIONS_PUBKEY","AddressLookupTableProgram","Transaction","TransactionMessage","VersionedTransaction","anchor4","Connection","oracleIdl","hookIdl","questionMarketIdl","conditionalTokensIdl","clobExchangeIdl","feeManagementIdl","presaleIdl","marketOracleIdl","BN","nacl","aBuy","bBuy","createApproveInstruction"],"mappings":"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","file":"index.js","sourcesContent":["import { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport { createHash } from \"crypto\";\nimport { ProgramIds } from \"./config/networks\";\n\n// ─── PDA Seeds ────────────────────────────────────────────────────────────────\n// These are constants — they don't change per network.\n\nexport const SEEDS = {\n config: Buffer.from(\"config\"),\n question: Buffer.from(\"question\"),\n condition: Buffer.from(\"condition\"),\n collateralVault: Buffer.from(\"collateral_vault\"),\n vaultToken: Buffer.from(\"vault_token\"),\n position: Buffer.from(\"position\"),\n yesMint: Buffer.from(\"yes_mint\"),\n noMint: Buffer.from(\"no_mint\"),\n mintAuthority: Buffer.from(\"mint_authority\"),\n reporter: Buffer.from(\"reporter\"),\n result: Buffer.from(\"result\"),\n ctfConfig: Buffer.from(\"ctf_config\"),\n hookConfig: Buffer.from(\"hook_config\"),\n extraAccountMetas: Buffer.from(\"extra-account-metas\"),\n clobConfig: Buffer.from(\"clob_config\"),\n order: Buffer.from(\"order\"),\n feeConfig: Buffer.from(\"fee_config\"),\n questionFee: Buffer.from(\"question_fee\"),\n marketFee: Buffer.from(\"market_fee\"),\n // Presale\n presale: Buffer.from(\"presale\"),\n qtMint: Buffer.from(\"qt_mint\"),\n qtAuthority: Buffer.from(\"qt_authority\"),\n userBuy: Buffer.from(\"user_buy\"),\n // Market Oracle\n marketOracle: Buffer.from(\"market_oracle\"),\n userClaim: Buffer.from(\"user_claim\"),\n} as const;\n\n// ─── PDA derivation helpers ───────────────────────────────────────────────────\n// All methods require explicit programIds — no hidden globals.\n\nexport class PDA {\n // ─── Question Market ────────────────────────────────────────────────────────\n\n static questionMarketConfig(\n owner: PublicKey,\n programIds: Pick<ProgramIds, \"questionMarket\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.config, owner.toBuffer()],\n programIds.questionMarket\n );\n }\n\n static question(\n config: PublicKey,\n questionId: Uint8Array,\n programIds: Pick<ProgramIds, \"questionMarket\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.question, config.toBuffer(), Buffer.from(questionId)],\n programIds.questionMarket\n );\n }\n\n // ─── Conditional Tokens ─────────────────────────────────────────────────────\n\n static ctfConfig(\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.ctfConfig],\n programIds.conditionalTokens\n );\n }\n\n static condition(\n oracle: PublicKey,\n questionId: Uint8Array,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.condition, oracle.toBuffer(), Buffer.from(questionId)],\n programIds.conditionalTokens\n );\n }\n\n static collateralVault(\n collateralMint: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.collateralVault, collateralMint.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n static vaultToken(\n collateralMint: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.vaultToken, collateralMint.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n static yesMint(\n condition: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.yesMint, condition.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n static noMint(\n condition: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.noMint, condition.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n static mintAuthority(\n condition: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.mintAuthority, condition.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n static position(\n condition: PublicKey,\n outcomeIndex: number,\n owner: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.position, condition.toBuffer(), Buffer.from([outcomeIndex]), owner.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n // ─── Oracle ─────────────────────────────────────────────────────────────────\n\n static oracleConfig(\n owner: PublicKey,\n programIds: Pick<ProgramIds, \"oracle\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.config, owner.toBuffer()],\n programIds.oracle\n );\n }\n\n static reporter(\n oracleConfig: PublicKey,\n reporterAddress: PublicKey,\n programIds: Pick<ProgramIds, \"oracle\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.reporter, oracleConfig.toBuffer(), reporterAddress.toBuffer()],\n programIds.oracle\n );\n }\n\n static questionResult(\n oracleConfig: PublicKey,\n questionId: Uint8Array,\n programIds: Pick<ProgramIds, \"oracle\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.result, oracleConfig.toBuffer(), Buffer.from(questionId)],\n programIds.oracle\n );\n }\n\n // ─── Hook ───────────────────────────────────────────────────────────────────\n\n static hookConfig(\n programIds: Pick<ProgramIds, \"hook\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.hookConfig],\n programIds.hook\n );\n }\n\n static extraAccountMetaList(\n mint: PublicKey,\n programIds: Pick<ProgramIds, \"hook\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.extraAccountMetas, mint.toBuffer()],\n programIds.hook\n );\n }\n\n // ─── CLOB ───────────────────────────────────────────────────────────────────\n\n static clobConfig(\n programIds: Pick<ProgramIds, \"clobExchange\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.clobConfig],\n programIds.clobExchange\n );\n }\n\n static orderStatus(\n maker: PublicKey,\n nonce: BN,\n programIds: Pick<ProgramIds, \"clobExchange\">\n ): [PublicKey, number] {\n const nonceBuf = Buffer.alloc(8);\n nonceBuf.writeBigUInt64LE(BigInt(nonce.toString()));\n return PublicKey.findProgramAddressSync(\n [SEEDS.order, maker.toBuffer(), nonceBuf],\n programIds.clobExchange\n );\n }\n\n // ─── Fee Management ─────────────────────────────────────────────────────────\n\n static feeConfig(\n owner: PublicKey,\n programIds: Pick<ProgramIds, \"feeManagement\">\n ): [PublicKey, number] {\n if (!programIds.feeManagement) throw new Error(\"feeManagement program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.feeConfig, owner.toBuffer()],\n programIds.feeManagement\n );\n }\n\n static questionFee(\n conditionPda: PublicKey,\n programIds: Pick<ProgramIds, \"feeManagement\">\n ): [PublicKey, number] {\n if (!programIds.feeManagement) throw new Error(\"feeManagement program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.questionFee, conditionPda.toBuffer()],\n programIds.feeManagement\n );\n }\n\n static marketFeeOverride(\n conditionPda: PublicKey,\n programIds: Pick<ProgramIds, \"feeManagement\">\n ): [PublicKey, number] {\n if (!programIds.feeManagement) throw new Error(\"feeManagement program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.marketFee, conditionPda.toBuffer()],\n programIds.feeManagement\n );\n }\n\n // ─── Presale ─────────────────────────────────────────────────────────────────\n\n static presale(\n questionMarketConfig: PublicKey,\n presaleIndex: BN,\n programIds: Pick<ProgramIds, \"presale\">\n ): [PublicKey, number] {\n if (!programIds.presale) throw new Error(\"presale program ID not configured\");\n const idxBuf = Buffer.alloc(8);\n idxBuf.writeBigUInt64LE(BigInt(presaleIndex.toString()));\n return PublicKey.findProgramAddressSync(\n [SEEDS.presale, questionMarketConfig.toBuffer(), idxBuf],\n programIds.presale\n );\n }\n\n static qtMint(\n presalePda: PublicKey,\n programIds: Pick<ProgramIds, \"presale\">\n ): [PublicKey, number] {\n if (!programIds.presale) throw new Error(\"presale program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.qtMint, presalePda.toBuffer()],\n programIds.presale\n );\n }\n\n static qtAuthority(\n presalePda: PublicKey,\n programIds: Pick<ProgramIds, \"presale\">\n ): [PublicKey, number] {\n if (!programIds.presale) throw new Error(\"presale program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.qtAuthority, presalePda.toBuffer()],\n programIds.presale\n );\n }\n\n static userBuyRecord(\n presalePda: PublicKey,\n user: PublicKey,\n programIds: Pick<ProgramIds, \"presale\">\n ): [PublicKey, number] {\n if (!programIds.presale) throw new Error(\"presale program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.userBuy, presalePda.toBuffer(), user.toBuffer()],\n programIds.presale\n );\n }\n\n // ─── Market Oracle ────────────────────────────────────────────────────────────\n\n static marketOraclePda(\n questionPda: PublicKey,\n programIds: Pick<ProgramIds, \"marketOracle\">\n ): [PublicKey, number] {\n if (!programIds.marketOracle) throw new Error(\"marketOracle program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.marketOracle, questionPda.toBuffer()],\n programIds.marketOracle\n );\n }\n\n static userClaimRecord(\n marketOraclePda: PublicKey,\n user: PublicKey,\n programIds: Pick<ProgramIds, \"marketOracle\">\n ): [PublicKey, number] {\n if (!programIds.marketOracle) throw new Error(\"marketOracle program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.userClaim, marketOraclePda.toBuffer(), user.toBuffer()],\n programIds.marketOracle\n );\n }\n}\n\n// ─── Utilities ────────────────────────────────────────────────────────────────\n\n/** Unique 32-byte question ID: SHA-256(content + timestamp). Different each call. */\nexport function generateQuestionId(content: string, salt?: number): Uint8Array {\n const input = content + (salt ?? Date.now());\n return new Uint8Array(createHash(\"sha256\").update(input).digest());\n}\n\n/** Deterministic 32-byte content hash: SHA-256(content). Same content = same hash. */\nexport function generateContentHash(content: string): Uint8Array {\n return new Uint8Array(createHash(\"sha256\").update(content).digest());\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { Keypair, PublicKey, SystemProgram } from \"@solana/web3.js\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport { OracleConfig, QuestionResult, TxResult } from \"../types\";\n\nexport class OracleClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n configPda(owner: PublicKey = this.walletPubkey): PublicKey {\n return PDA.oracleConfig(owner, this.programIds)[0];\n }\n\n // ─── Instructions ────────────────────────────────────────────────────────────\n\n /** One-time setup. Caller becomes owner. */\n async initialize(admin: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .initialize(admin)\n .accounts({\n owner: this.walletPubkey,\n oracleConfig: this.configPda(),\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin or owner adds an address to the oracle resolver whitelist. */\n async addToWhitelist(address: PublicKey, ownerPubkey?: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .addToWhitelist(address)\n .accounts({\n authority: this.walletPubkey,\n payer: this.walletPubkey,\n oracleConfig: this.configPda(ownerPubkey),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin or owner removes an address from the oracle resolver whitelist. */\n async removeFromWhitelist(address: PublicKey, ownerPubkey?: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .removeFromWhitelist(address)\n .accounts({\n authority: this.walletPubkey,\n payer: this.walletPubkey,\n oracleConfig: this.configPda(ownerPubkey),\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Whitelisted reporter resolves a question.\n * CPIs directly into CTF.set_payout — condition is resolved in one tx.\n * @param conditionPda - CTF condition account (oracle_config = oraclePda, question_id must match)\n * @param ownerPubkey - oracle config owner (defaults to wallet)\n * @param payer - fee payer (defaults to wallet)\n */\n async resolveQuestion(\n questionId: Uint8Array,\n outcomeCount: number,\n payoutNumerators: number[],\n conditionPda: PublicKey,\n ownerPubkey?: PublicKey,\n payer?: PublicKey,\n signers: Keypair[] = []\n ): Promise<TxResult> {\n const oracleConfig = this.configPda(ownerPubkey);\n const [questionResultPda] = PDA.questionResult(oracleConfig, questionId, this.programIds);\n const sig = await this.program.methods\n .resolveQuestion(\n Array.from(questionId) as number[],\n outcomeCount,\n payoutNumerators.map((n) => new anchor.BN(n))\n )\n .accounts({\n reporter: this.walletPubkey,\n oracleConfig,\n questionResult: questionResultPda,\n condition: conditionPda,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n payer: payer ?? this.walletPubkey,\n systemProgram: SystemProgram.programId,\n })\n .signers(signers)\n .rpc();\n return { signature: sig };\n }\n\n /** Owner updates the admin. */\n async updateAdmin(newAdmin: PublicKey, ownerPubkey?: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .updateAdmin(newAdmin)\n .accounts({\n owner: this.walletPubkey,\n payer: this.walletPubkey,\n oracleConfig: this.configPda(ownerPubkey),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Owner transfers ownership to a new keypair. */\n async transferOwnership(newOwner: PublicKey, ownerPubkey?: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .transferOwnership(newOwner)\n .accounts({\n owner: this.walletPubkey,\n oracleConfig: this.configPda(ownerPubkey),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin or owner pause/unpause the oracle. */\n async pause(paused: boolean, ownerPubkey?: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .pause(paused)\n .accounts({\n authority: this.walletPubkey,\n oracleConfig: this.configPda(ownerPubkey),\n })\n .rpc();\n return { signature: sig };\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchConfig(owner?: PublicKey): Promise<OracleConfig | null> {\n try {\n const acc = await (this.program.account as any).oracleConfig.fetch(\n this.configPda(owner ?? this.walletPubkey)\n );\n return {\n owner: acc.owner,\n admin: acc.admin,\n questionCount: acc.questionCount.toNumber(),\n whitelist: acc.whitelist as PublicKey[],\n whitelistLen: acc.whitelistLen,\n isPaused: acc.isPaused,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchQuestionResult(\n questionId: Uint8Array,\n ownerPubkey?: PublicKey\n ): Promise<QuestionResult | null> {\n try {\n const oracleConfig = this.configPda(ownerPubkey);\n const [pda] = PDA.questionResult(oracleConfig, questionId, this.programIds);\n const acc = await (this.program.account as any).questionResult.fetch(pda);\n return {\n oracleConfig: acc.oracleConfig,\n questionId: new Uint8Array(acc.questionId),\n outcomeIndex: acc.outcomeIndex,\n outcomeCount: acc.outcomeCount,\n payoutNumerators: acc.payoutNumerators,\n isResolved: acc.isResolved,\n resolvedAt: acc.resolvedAt.toNumber(),\n reporter: acc.reporter,\n condition: acc.condition ?? null,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { PublicKey, SystemProgram } from \"@solana/web3.js\";\nimport { TOKEN_2022_PROGRAM_ID } from \"@solana/spl-token\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport { HookConfig, TxResult } from \"../types\";\n\nexport class HookClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n configPda(): PublicKey {\n return PDA.hookConfig(this.programIds)[0];\n }\n\n // ─── Instructions ────────────────────────────────────────────────────────────\n\n /** One-time setup. Caller becomes owner. */\n async initialize(initialWhitelist: PublicKey[]): Promise<TxResult> {\n const sig = await this.program.methods\n .initializeHookConfig(initialWhitelist)\n .accounts({\n owner: this.walletPubkey,\n hookConfig: this.configPda(),\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Register extra account metas for a Token-2022 YES/NO mint.\n * Must be called once per mint after CTF creates it.\n */\n async initializeExtraAccountMetaList(mint: PublicKey): Promise<TxResult> {\n const [extraAccountMetaList] = PDA.extraAccountMetaList(mint, this.programIds);\n const sig = await this.program.methods\n .initializeExtraAccountMetaList()\n .accounts({\n payer: this.walletPubkey,\n extraAccountMetaList,\n mint,\n hookConfig: this.configPda(),\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Owner adds a program to the transfer whitelist. */\n async addToWhitelist(program: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .addToWhitelist(program)\n .accounts({\n owner: this.walletPubkey,\n hookConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Owner removes a program from the transfer whitelist. */\n async removeFromWhitelist(program: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .removeFromWhitelist(program)\n .accounts({\n owner: this.walletPubkey,\n hookConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Permanently freeze the whitelist — no further changes allowed. */\n async freezeWhitelist(): Promise<TxResult> {\n const sig = await this.program.methods\n .freezeWhitelist()\n .accounts({\n owner: this.walletPubkey,\n hookConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * SPL Transfer-Hook `execute` — invoked automatically by Token-2022 on every\n * YES/NO token transfer. Validates the destination against the whitelist.\n *\n * Calling this directly is useful for:\n * - Off-chain simulation (\"would this transfer be allowed?\")\n * - Integration tests that verify whitelist enforcement\n *\n * Token-2022 calls this automatically; you normally don't call it manually.\n *\n * @param sourceToken - Source token account (tokens leaving)\n * @param mint - The YES/NO Token-2022 mint\n * @param destinationToken - Destination token account (tokens arriving)\n * @param owner - Authority that authorized the transfer\n * @param amount - Token amount being transferred\n */\n async execute(\n sourceToken: PublicKey,\n mint: PublicKey,\n destinationToken: PublicKey,\n owner: PublicKey,\n amount: anchor.BN\n ): Promise<TxResult> {\n const [extraAccountMetaList] = PDA.extraAccountMetaList(mint, this.programIds);\n const sig = await this.program.methods\n .execute(amount)\n .accounts({\n sourceToken,\n mint,\n destinationToken,\n owner,\n extraAccountMetaList,\n hookConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchConfig(): Promise<HookConfig | null> {\n try {\n const acc = await (this.program.account as any).hookConfig.fetch(this.configPda());\n return {\n owner: acc.owner,\n whitelist: acc.whitelist as PublicKey[],\n whitelistLen: acc.whitelistLen,\n isFrozen: acc.isFrozen,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async isWhitelisted(program: PublicKey): Promise<boolean> {\n const config = await this.fetchConfig();\n if (!config) return false;\n return config.whitelist.some((p) => p.equals(program));\n }\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\n// ─── Shared ───────────────────────────────────────────────────────────────────\n\nexport interface TxResult {\n signature: string;\n}\n\n// ─── Oracle ───────────────────────────────────────────────────────────────────\n\nexport interface OracleConfig {\n owner: PublicKey;\n admin: PublicKey;\n questionCount: number;\n whitelist: PublicKey[];\n whitelistLen: number;\n isPaused: boolean;\n bump: number;\n}\n\nexport interface QuestionResult {\n oracleConfig: PublicKey;\n questionId: Uint8Array;\n outcomeIndex: number;\n outcomeCount: number;\n payoutNumerators: BN[];\n isResolved: boolean;\n resolvedAt: number;\n reporter: PublicKey;\n condition: PublicKey | null;\n bump: number;\n}\n\n// ─── Conditional Tokens ───────────────────────────────────────────────────────\n\nexport interface Condition {\n oracle: PublicKey;\n questionId: Uint8Array;\n outcomeSlotCount: number;\n payoutNumerators: BN[];\n payoutDenominator: BN;\n totalCollateral: BN;\n collateralMint: PublicKey;\n collateralVault: PublicKey;\n yesMint: PublicKey;\n noMint: PublicKey;\n hookProgram: PublicKey;\n authorizedClob: PublicKey;\n isResolved: boolean;\n resolvedAt: number;\n bump: number;\n}\n\nexport interface CollateralVault {\n collateralMint: PublicKey;\n vaultTokenAccount: PublicKey;\n totalLocked: BN;\n conditionCount: BN;\n bump: number;\n vaultBump: number;\n}\n\nexport interface Position {\n owner: PublicKey;\n condition: PublicKey;\n outcomeIndex: number;\n balance: BN;\n bump: number;\n}\n\n// ─── Question Market ──────────────────────────────────────────────────────────\n\nexport enum QuestionStatus {\n Pending = \"pending\",\n Approved = \"approved\",\n Rejected = \"rejected\",\n Resolved = \"resolved\",\n}\n\nexport interface QuestionMarketConfig {\n owner: PublicKey;\n admin: PublicKey;\n oracle: PublicKey;\n conditionalTokensProgram: PublicKey;\n questionCount: number;\n approvedCount: number;\n rejectedCount: number;\n presaleCount: number;\n whitelist: PublicKey[];\n whitelistLen: number;\n isPaused: boolean;\n bump: number;\n}\n\nexport interface Question {\n config: PublicKey;\n questionId: Uint8Array;\n contentHash: Uint8Array;\n expirationTime: number;\n currencyMint: PublicKey;\n creator: PublicKey;\n condition: PublicKey | null;\n status: QuestionStatus;\n createdAt: number;\n approvedAt: number;\n resolvedAt: number;\n bump: number;\n}\n\nexport interface CreateQuestionParams {\n /** Human-readable question text — used to derive questionId + contentHash */\n content: string;\n /** Expiration as Unix timestamp */\n expirationTime: number;\n /** Collateral mint (e.g. USDC) */\n collateralMint: PublicKey;\n /** Hook program ID for Token-2022 transfer enforcement */\n hookProgram: PublicKey;\n /** Authorized CLOB program ID */\n authorizedClob: PublicKey;\n /** Override auto-generated questionId */\n questionId?: Uint8Array;\n /** Override auto-generated contentHash */\n contentHash?: Uint8Array;\n}\n\n// ─── Conditional Tokens (CtfConfig) ──────────────────────────────────────────\n\nexport interface CtfConfig {\n owner: PublicKey;\n bump: number;\n}\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\nexport interface HookConfig {\n owner: PublicKey;\n whitelist: PublicKey[];\n whitelistLen: number;\n isFrozen: boolean;\n bump: number;\n}\n\n// ─── CLOB Exchange ────────────────────────────────────────────────────────────\n\nexport interface ClobConfig {\n owner: PublicKey;\n operators: PublicKey[];\n operatorsLen: number;\n feeRecipient: PublicKey;\n feeRateBps: number;\n conditionalTokensProgram: PublicKey;\n isPaused: boolean;\n bump: number;\n}\n\nexport interface ClobWhitelistEntry {\n address: PublicKey;\n bump: number;\n}\n\nexport interface OrderStatus {\n maker: PublicKey;\n nonce: BN;\n filledAmount: BN;\n isCancelled: boolean;\n bump: number;\n}\n\n// ─── Fee Management ───────────────────────────────────────────────────────────\n\n/** Per-question fee rates, all out of FEE_DENOMINATOR (1_000_000). E.g. 2_000 = 0.2% */\nexport interface QuestionFee {\n conditionId: Uint8Array;\n mergeFee: BN;\n redeemFee: BN;\n swapFee: BN;\n bump: number;\n}\n\nexport const FEE_DENOMINATOR = 1_000_000;\n\n/**\n * Off-chain order struct passed as instruction data.\n * Operator validates + submits matched order pairs on-chain.\n *\n * Semantics (mirrors EVM makerAmount/takerAmount):\n * BUY (side=0): makerAmount = USDC paid, takerAmount = CTF tokens received\n * SELL (side=1): makerAmount = CTF tokens given, takerAmount = USDC received\n */\nexport interface Order {\n /** Maker's wallet public key */\n maker: PublicKey;\n /** Condition PDA this order belongs to */\n condition: PublicKey;\n /** Outcome token: 0 = NO, 1 = YES */\n tokenId: number;\n /** Side: 0 = BUY (give USDC, want tokens), 1 = SELL (give tokens, want USDC) — matches EVM convention */\n side: number;\n /** Amount the maker puts in: BUY → USDC, SELL → CTF tokens */\n makerAmount: BN;\n /** Amount the maker wants to receive: BUY → CTF tokens, SELL → USDC */\n takerAmount: BN;\n /** Unique nonce per maker — used for OrderStatus PDA + replay protection */\n nonce: BN;\n /** Unix timestamp expiry (0 = no expiry) */\n expiry: BN;\n /** Creation timestamp (Unix seconds) */\n createdAt: BN;\n /** Fixed USDC amount (9 decimals) taker pays to treasury after all fills. 0 = no fee. Set by operator off-chain. */\n fee: BN;\n /** Directed order: only this pubkey can be counterparty. PublicKey.default() = public */\n taker: PublicKey;\n /** Ed25519 signer key. Must equal maker for now (proxy not supported) */\n signer: PublicKey;\n}\n\n/**\n * Signed order — Order + 64-byte Ed25519 signature over serializeOrderToBytes().\n * This is the on-chain instruction data type for all match_* instructions.\n */\nexport interface SignedOrder {\n order: Order;\n /** Ed25519 signature (64 bytes) from order.maker over serializeOrderToBytes() */\n signature: Uint8Array;\n}\n\n// ─── Errors ───────────────────────────────────────────────────────────────────\n\nexport class XMarketError extends Error {\n constructor(message: string, public code?: string) {\n super(message);\n this.name = \"XMarketError\";\n }\n}\n\nexport class UnauthorizedError extends XMarketError {\n constructor(msg = \"Unauthorized\") {\n super(msg, \"UNAUTHORIZED\");\n this.name = \"UnauthorizedError\";\n }\n}\n\nexport class AccountNotFoundError extends XMarketError {\n constructor(account: string, address?: string) {\n super(`${account} not found${address ? `: ${address}` : \"\"}`, \"NOT_FOUND\");\n this.name = \"AccountNotFoundError\";\n }\n}\n\nexport class InvalidParamError extends XMarketError {\n constructor(msg = \"Invalid parameter\") {\n super(msg, \"INVALID_PARAM\");\n this.name = \"InvalidParamError\";\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY, Transaction } from \"@solana/web3.js\";\n\nconst TOKEN_METADATA_PROGRAM_ID = new PublicKey(\"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\");\nimport {\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { PDA, generateQuestionId, generateContentHash } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport {\n QuestionMarketConfig,\n Question,\n QuestionStatus,\n CreateQuestionParams,\n Position,\n} from \"../types\";\nimport type { CtfClient } from \"./ctf\";\n\nexport class MarketClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n readonly configPda: PublicKey;\n\n /** Injected by XMarketSDK after construction — enables fetchQuestionBalances. */\n ctfClient?: CtfClient;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds,\n ownerPubkey: PublicKey\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n this.configPda = PDA.questionMarketConfig(ownerPubkey, programIds)[0];\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n // ─── Instructions (return Transaction — caller signs + sends) ───────────────\n\n async initialize(\n admin: PublicKey,\n oracle: PublicKey,\n owner: PublicKey = this.walletPubkey\n ): Promise<Transaction> {\n return this.program.methods\n .initialize({\n admin,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n oracle,\n })\n .accounts({\n owner,\n config: this.configPda,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Build createQuestionAdmin transaction (whitelist/admin path — status = Approved immediately).\n * @param creator - Whitelisted creator (must be in whitelist or be admin/owner)\n * @param payer - Fee payer (pays rent; can differ from creator)\n */\n async createQuestionAdmin(\n params: CreateQuestionParams,\n oracle: PublicKey,\n creator: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey\n ): Promise<{ tx: Transaction; questionPda: PublicKey; conditionPda: PublicKey; questionId: Uint8Array }> {\n const questionId = params.questionId ?? generateQuestionId(params.content);\n const contentHash = params.contentHash ?? generateContentHash(params.content);\n\n const [questionPda] = PDA.question(this.configPda, questionId, this.programIds);\n const [conditionPda] = PDA.condition(oracle, questionId, this.programIds);\n const [yesMint] = PDA.yesMint(conditionPda, this.programIds);\n const [noMint] = PDA.noMint(conditionPda, this.programIds);\n const [mintAuthority] = PDA.mintAuthority(conditionPda, this.programIds);\n const [collateralVault] = PDA.collateralVault(params.collateralMint, this.programIds);\n\n const tx = await this.program.methods\n .createQuestionAdmin({\n questionId: Array.from(questionId) as number[],\n contentHash: Array.from(contentHash) as number[],\n hookProgram: params.hookProgram,\n authorizedClob: params.authorizedClob,\n expirationTime: new anchor.BN(params.expirationTime),\n })\n .accounts({\n creator,\n payer,\n config: this.configPda,\n question: questionPda,\n currencyMint: params.collateralMint,\n oracle,\n condition: conditionPda,\n yesMint,\n noMint,\n mintAuthority,\n collateralVault,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .transaction();\n\n return { tx, questionPda, conditionPda, questionId };\n }\n\n async approveQuestion(\n questionPda: PublicKey,\n admin: PublicKey = this.walletPubkey,\n payer: PublicKey = admin\n ): Promise<Transaction> {\n return this.program.methods\n .approveQuestion()\n .accounts({\n admin,\n payer,\n config: this.configPda,\n question: questionPda,\n })\n .transaction();\n }\n\n async updateConfig(\n params: { newAdmin?: PublicKey; newOracle?: PublicKey; isPaused?: boolean; newConditionalTokensProgram?: PublicKey },\n authority: PublicKey = this.walletPubkey,\n payer: PublicKey = authority\n ): Promise<Transaction> {\n return this.program.methods\n .updateConfig({\n newAdmin: params.newAdmin ?? null,\n newOracle: params.newOracle ?? null,\n isPaused: params.isPaused ?? null,\n newConditionalTokensProgram: params.newConditionalTokensProgram ?? null,\n })\n .accounts({\n authority,\n payer,\n config: this.configPda,\n })\n .transaction();\n }\n\n /** Set the admin (owner only). Replaces any existing admin. */\n async addAdmin(\n newAdmin: PublicKey,\n owner: PublicKey = this.walletPubkey\n ): Promise<Transaction> {\n return this.program.methods\n .addAdmin(newAdmin)\n .accounts({\n owner,\n config: this.configPda,\n })\n .transaction();\n }\n\n /** Clear the admin (owner only). Sets admin to default pubkey. */\n async removeAdmin(\n owner: PublicKey = this.walletPubkey\n ): Promise<Transaction> {\n return this.program.methods\n .removeAdmin()\n .accounts({\n owner,\n config: this.configPda,\n })\n .transaction();\n }\n\n async addToWhitelist(\n address: PublicKey,\n authority: PublicKey = this.walletPubkey,\n payer: PublicKey = authority\n ): Promise<Transaction> {\n return this.program.methods\n .addToWhitelist(address)\n .accounts({\n authority,\n payer,\n config: this.configPda,\n })\n .transaction();\n }\n\n async removeFromWhitelist(\n address: PublicKey,\n authority: PublicKey = this.walletPubkey,\n payer: PublicKey = authority\n ): Promise<Transaction> {\n return this.program.methods\n .removeFromWhitelist(address)\n .accounts({\n authority,\n payer,\n config: this.configPda,\n })\n .transaction();\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchConfig(): Promise<QuestionMarketConfig | null> {\n try {\n const acc = await (this.program.account as any).questionMarketConfig.fetch(this.configPda);\n return {\n owner: acc.owner,\n admin: acc.admin,\n oracle: acc.oracle,\n conditionalTokensProgram: acc.conditionalTokensProgram,\n questionCount: acc.questionCount.toNumber(),\n approvedCount: acc.approvedCount.toNumber(),\n rejectedCount: acc.rejectedCount.toNumber(),\n presaleCount: acc.presaleCount.toNumber(),\n whitelist: acc.whitelist as PublicKey[],\n whitelistLen: acc.whitelistLen,\n isPaused: acc.isPaused,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchQuestion(questionPda: PublicKey): Promise<Question | null> {\n try {\n const acc = await (this.program.account as any).question.fetch(questionPda);\n return {\n config: acc.config,\n questionId: new Uint8Array(acc.questionId),\n contentHash: new Uint8Array(acc.contentHash),\n expirationTime: acc.expirationTime.toNumber(),\n currencyMint: acc.currencyMint,\n creator: acc.creator,\n condition: acc.condition ?? null,\n status: this._parseStatus(acc.status),\n createdAt: acc.createdAt.toNumber(),\n approvedAt: acc.approvedAt.toNumber(),\n resolvedAt: acc.resolvedAt.toNumber(),\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n questionPda(questionId: Uint8Array): PublicKey {\n return PDA.question(this.configPda, questionId, this.programIds)[0];\n }\n\n private _parseStatus(raw: any): QuestionStatus {\n if (raw.pending !== undefined) return QuestionStatus.Pending;\n if (raw.approved !== undefined) return QuestionStatus.Approved;\n if (raw.rejected !== undefined) return QuestionStatus.Rejected;\n if (raw.resolved !== undefined) return QuestionStatus.Resolved;\n return QuestionStatus.Pending;\n }\n\n /**\n * Convenience: fetch YES and NO token balances for a question.\n * Returns null for each if question not approved or position not initialized.\n * Requires ctfClient to be injected (done automatically by XMarketSDK).\n */\n async fetchQuestionBalances(\n questionPda: PublicKey,\n owner: PublicKey\n ): Promise<{ yes: Position | null; no: Position | null }> {\n if (!this.ctfClient) return { yes: null, no: null };\n const q = await this.fetchQuestion(questionPda);\n if (!q || !q.condition) return { yes: null, no: null };\n return this.ctfClient.fetchBothPositions(q.condition, owner);\n }\n\n // ─── Presale instructions ────────────────────────────────────────────────────\n\n /**\n * Any user creates a presale + initial buy (question-market::create_presale).\n * Reads agents_rev / company_rev from fee_config.\n *\n * @param feeConfig fee_management fee_config PDA (owner = feeConfigOwner)\n * @param currencyMint collateral token (e.g. USDC)\n * @param presaleIndex config.presale_count — fetch config first or pass 0 for first presale\n */\n async createPresale(\n params: {\n price: anchor.BN;\n startTime: anchor.BN;\n endTime: anchor.BN;\n initialBuyAmount: anchor.BN;\n },\n feeConfig: PublicKey,\n currencyMint: PublicKey,\n presaleIndex: anchor.BN,\n creator: PublicKey = this.walletPubkey,\n payer: PublicKey = creator,\n ): Promise<{ tx: Transaction; presalePda: PublicKey; qtMint: PublicKey }> {\n if (!this.programIds.presale) throw new Error(\"presale program ID not configured\");\n\n const [presalePda] = PDA.presale(this.configPda, presaleIndex, this.programIds);\n const [qtMint] = PDA.qtMint(presalePda, this.programIds);\n const [qtAuthority] = PDA.qtAuthority(presalePda, this.programIds);\n const [userBuyRecord] = PDA.userBuyRecord(presalePda, creator, this.programIds);\n\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n const creatorQtAta = getAssociatedTokenAddressSync(qtMint, creator);\n const creatorCurrencyAta = getAssociatedTokenAddressSync(currencyMint, creator);\n const [qtMetadata] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"metadata\"), TOKEN_METADATA_PROGRAM_ID.toBuffer(), qtMint.toBuffer()],\n TOKEN_METADATA_PROGRAM_ID,\n );\n\n const tx = await this.program.methods\n .createPresale({\n price: params.price,\n startTime: params.startTime,\n endTime: params.endTime,\n initialBuyAmount: params.initialBuyAmount,\n })\n .accounts({\n creator,\n payer,\n config: this.configPda,\n feeConfig,\n presale: presalePda,\n qtMint,\n qtAuthority,\n currencyMint,\n presaleVault,\n creatorCurrencyAta,\n creatorQtAta,\n userBuyRecord,\n qtMetadata,\n tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,\n presaleProgram: this.programIds.presale,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .transaction();\n\n return { tx, presalePda, qtMint };\n }\n\n /**\n * Whitelist-only: approve presale → creates question + CTF condition + market_oracle in one tx.\n *\n * @param presalePda the presale account\n * @param contentHash 32-byte hash for question content\n * @param hookProgram token-2022 transfer hook program\n * @param authorizedClob clob program allowed to do CTF transfers\n * @param expirationTime Unix seconds\n * @param creator presale creator pubkey (stored in question)\n * @param currencyMint collateral mint\n */\n async approvePresale(\n presalePda: PublicKey,\n contentHash: Uint8Array,\n hookProgram: PublicKey,\n authorizedClob: PublicKey,\n expirationTime: anchor.BN,\n creator: PublicKey,\n currencyMint: PublicKey,\n caller: PublicKey = this.walletPubkey,\n payer: PublicKey = caller,\n ): Promise<{ tx: Transaction; questionPda: PublicKey; conditionPda: PublicKey; marketOraclePda: PublicKey; marketOracleVault: PublicKey }> {\n if (!this.programIds.presale) throw new Error(\"presale program ID not configured\");\n if (!this.programIds.marketOracle) throw new Error(\"marketOracle program ID not configured\");\n\n const questionId = presalePda.toBytes();\n const [questionPda] = PDA.question(this.configPda, questionId, this.programIds);\n\n const marketConfig = await this.fetchConfig();\n if (!marketConfig) throw new Error(\"QuestionMarketConfig not found\");\n\n const oraclePubkey = marketConfig.oracle;\n const [conditionPda] = PDA.condition(oraclePubkey, questionId, this.programIds);\n const [yesMint] = PDA.yesMint(conditionPda, this.programIds);\n const [noMint] = PDA.noMint(conditionPda, this.programIds);\n const [mintAuthority] = PDA.mintAuthority(conditionPda, this.programIds);\n const [collateralVault] = PDA.collateralVault(currencyMint, this.programIds);\n const [marketOraclePda] = PDA.marketOraclePda(questionPda, this.programIds);\n const marketOracleVault = getAssociatedTokenAddressSync(currencyMint, marketOraclePda, true);\n\n const tx = await this.program.methods\n .approvePresale({\n contentHash: Array.from(contentHash) as number[],\n hookProgram,\n authorizedClob,\n expirationTime,\n creator,\n })\n .accounts({\n caller,\n payer,\n config: this.configPda,\n presale: presalePda,\n question: questionPda,\n currencyMint,\n oracle: oraclePubkey,\n condition: conditionPda,\n yesMint,\n noMint,\n mintAuthority,\n collateralVault,\n marketOracle: marketOraclePda,\n marketOracleVault,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n presaleProgram: this.programIds.presale,\n marketOracleProgram: this.programIds.marketOracle,\n tokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .transaction();\n\n return { tx, questionPda, conditionPda, marketOraclePda, marketOracleVault };\n }\n\n /**\n * Whitelist-only: reject presale so users can refund.\n */\n async rejectPresale(\n presalePda: PublicKey,\n caller: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n if (!this.programIds.presale) throw new Error(\"presale program ID not configured\");\n return this.program.methods\n .rejectPresale()\n .accounts({\n caller,\n config: this.configPda,\n presale: presalePda,\n presaleProgram: this.programIds.presale,\n })\n .transaction();\n }\n\n /**\n * Whitelist-only: distribute presale vault funds → agents_rev% + company_rev% + rest to creator.\n * Must be called after approvePresale.\n */\n async collectPresaleRevenue(\n presalePda: PublicKey,\n currencyMint: PublicKey,\n referralAddress: PublicKey,\n companyAddress: PublicKey,\n caller: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n if (!this.programIds.presale) throw new Error(\"presale program ID not configured\");\n\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n const referralTokenAccount = getAssociatedTokenAddressSync(currencyMint, referralAddress);\n const companyTokenAccount = getAssociatedTokenAddressSync(currencyMint, companyAddress);\n\n return this.program.methods\n .collectPresaleRevenue()\n .accounts({\n caller,\n config: this.configPda,\n presale: presalePda,\n presaleVault,\n currencyMint,\n referralTokenAccount,\n companyTokenAccount,\n presaleProgram: this.programIds.presale,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Whitelist-only: snapshot MST supply so holders can claim trading fees.\n * Call after oracle resolves the question.\n */\n async collectTradingFee(\n marketOraclePda: PublicKey,\n qtMint: PublicKey,\n caller: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n if (!this.programIds.marketOracle) throw new Error(\"marketOracle program ID not configured\");\n return this.program.methods\n .collectTradingFee()\n .accounts({\n caller,\n config: this.configPda,\n marketOracle: marketOraclePda,\n qtMint,\n marketOracleProgram: this.programIds.marketOracle,\n })\n .transaction();\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { Keypair, PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY, Transaction, TransactionInstruction } from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport { Condition, CollateralVault, CtfConfig, Position, TxResult } from \"../types\";\n\nexport class CtfClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n // ─── Instructions ────────────────────────────────────────────────────────────\n\n /**\n * Create a Condition directly (bypasses QuestionMarket).\n * oracle is UncheckedAccount — set it to any pubkey (e.g. user wallet)\n * so that wallet can later sign reportPayouts.\n * payer covers rent for condition + mints.\n */\n async prepareCondition(\n questionId: Uint8Array,\n oracle: PublicKey,\n collateralMint: PublicKey,\n hookProgram: PublicKey,\n authorizedClob: PublicKey,\n payer: PublicKey = this.walletPubkey,\n signers: Keypair[] = []\n ): Promise<{ signature: string; conditionPda: PublicKey; yesMint: PublicKey; noMint: PublicKey }> {\n const [conditionPda] = PDA.condition(oracle, questionId, this.programIds);\n const [yesMint] = PDA.yesMint(conditionPda, this.programIds);\n const [noMint] = PDA.noMint(conditionPda, this.programIds);\n const [mintAuthority] = PDA.mintAuthority(conditionPda, this.programIds);\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n\n const sig = await this.program.methods\n .prepareCondition(\n Array.from(questionId) as number[],\n hookProgram,\n authorizedClob\n )\n .accounts({\n oracle,\n condition: conditionPda,\n yesMint,\n noMint,\n mintAuthority,\n collateralMint,\n collateralVault,\n payer,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .signers(signers)\n .rpc({ skipPreflight: true });\n\n return { signature: sig, conditionPda, yesMint, noMint };\n }\n\n /** One-time setup. Caller becomes the CTF owner. Can only be called once. */\n async initializeCtfConfig(): Promise<TxResult> {\n const [ctfConfig] = PDA.ctfConfig(this.programIds);\n const sig = await this.program.methods\n .initializeCtfConfig()\n .accounts({\n payer: this.walletPubkey,\n ctfConfig,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Create the shared collateral vault for a given collateral mint (e.g. USDC).\n * Only callable by the CTF owner (as stored in ctf_config).\n * authority defaults to the wallet — pass a different signer if needed.\n */\n async initializeVault(collateralMint: PublicKey): Promise<TxResult> {\n const [ctfConfig] = PDA.ctfConfig(this.programIds);\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n const sig = await this.program.methods\n .initializeVault()\n .accounts({\n authority: this.walletPubkey,\n payer: this.walletPubkey,\n ctfConfig,\n collateralMint,\n collateralVault,\n vaultTokenAccount,\n systemProgram: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Initialize an empty Position account (balance = 0) for a user.\n * Needed before redeemPositions when the user only holds the opposite outcome\n * (e.g. buyer received YES via CLOB match but never had a NO position).\n *\n * Idempotent — call `fetchPosition` first to skip if already initialized.\n */\n async initPosition(\n condition: PublicKey,\n outcomeIndex: number,\n user: PublicKey = this.walletPubkey\n ): Promise<TxResult> {\n const [position] = PDA.position(condition, outcomeIndex, user, this.programIds);\n const sig = await this.program.methods\n .initPosition(outcomeIndex)\n .accounts({\n user,\n condition,\n position,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Split `amount` collateral into equal YES + NO tokens.\n * ATAs created automatically via `init_if_needed`.\n */\n async splitPosition(\n condition: PublicKey,\n collateralMint: PublicKey,\n amount: anchor.BN,\n user: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [noMint] = PDA.noMint(condition, this.programIds);\n const [mintAuthority] = PDA.mintAuthority(condition, this.programIds);\n const [yesPosition] = PDA.position(condition, 1, user, this.programIds);\n const [noPosition] = PDA.position(condition, 0, user, this.programIds);\n\n const userYesAta = getAssociatedTokenAddressSync(yesMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userNoAta = getAssociatedTokenAddressSync(noMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userCollateral = getAssociatedTokenAddressSync(collateralMint, user);\n\n return this.program.methods\n .splitPosition(amount)\n .accounts({\n user,\n payer,\n condition,\n collateralVault,\n vaultTokenAccount,\n userCollateral,\n yesMint,\n userYesAta,\n noMint,\n userNoAta,\n yesPosition,\n noPosition,\n mintAuthority,\n tokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Merge `amount` YES + NO tokens back into collateral.\n * Both token balances must be ≥ amount.\n */\n async mergePosition(\n condition: PublicKey,\n collateralMint: PublicKey,\n amount: anchor.BN,\n user: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [noMint] = PDA.noMint(condition, this.programIds);\n const [yesPosition] = PDA.position(condition, 1, user, this.programIds);\n const [noPosition] = PDA.position(condition, 0, user, this.programIds);\n\n const userYesAta = getAssociatedTokenAddressSync(yesMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userNoAta = getAssociatedTokenAddressSync(noMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userCollateral = getAssociatedTokenAddressSync(collateralMint, user);\n\n return this.program.methods\n .mergePosition(amount)\n .accounts({\n user,\n payer,\n condition,\n collateralVault,\n vaultTokenAccount,\n userCollateral,\n yesMint,\n userYesAta,\n noMint,\n userNoAta,\n yesPosition,\n noPosition,\n tokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * After condition resolves: burn outcome tokens proportional to payout\n * and receive USDC. Works for winning, losing, or both positions.\n */\n async redeemPositions(\n condition: PublicKey,\n collateralMint: PublicKey,\n user: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [noMint] = PDA.noMint(condition, this.programIds);\n const [yesPosition] = PDA.position(condition, 1, user, this.programIds);\n const [noPosition] = PDA.position(condition, 0, user, this.programIds);\n\n const userYesAta = getAssociatedTokenAddressSync(yesMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userNoAta = getAssociatedTokenAddressSync(noMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userCollateral = getAssociatedTokenAddressSync(collateralMint, user);\n\n return this.program.methods\n .redeemPositions()\n .accounts({\n user,\n payer,\n condition,\n collateralVault,\n vaultTokenAccount,\n userCollateral,\n yesMint,\n userYesAta,\n noMint,\n userNoAta,\n yesPosition,\n noPosition,\n tokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Oracle directly resolves a condition with payout numerators.\n * Bypasses QuestionMarket — only for oracle-owned conditions.\n */\n async reportPayouts(\n condition: PublicKey,\n payoutNumerators: number[]\n ): Promise<TxResult> {\n const sig = await this.program.methods\n .reportPayouts(payoutNumerators.map((n) => new anchor.BN(n)))\n .accounts({\n oracle: this.walletPubkey,\n condition,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Build the `transfer_position` instruction for use in a CLOB CPI.\n *\n * This instruction requires `clob_authority` (the CLOB's PDA) to sign.\n * A PDA can only sign from within its own program via CPI — this method\n * CANNOT be called directly from a wallet transaction.\n *\n * Use-cases:\n * - Custom CLOB implementations that call CTF.transfer_position via CPI\n * - Anchor CPI builders in other Rust programs\n *\n * @param condition - Condition PDA\n * @param outcomeMint - YES or NO mint\n * @param fromUser - Source wallet\n * @param fromTokenAccount - Source ATA\n * @param fromPosition - Source Position PDA\n * @param toUser - Destination wallet\n * @param toTokenAccount - Destination ATA (created if needed — payer covers rent)\n * @param toPosition - Destination Position PDA\n * @param payer - Pays rent for toPosition + toTokenAccount creation\n * @param clobAuthority - CLOB config PDA (must sign via CPI)\n * @param outcomeIndex - 0 = NO, 1 = YES\n * @param amount - Token amount to transfer\n */\n async transferPositionIx(\n condition: PublicKey,\n outcomeMint: PublicKey,\n fromUser: PublicKey,\n fromTokenAccount: PublicKey,\n fromPosition: PublicKey,\n toUser: PublicKey,\n toTokenAccount: PublicKey,\n toPosition: PublicKey,\n payer: PublicKey,\n clobAuthority: PublicKey,\n outcomeIndex: number,\n amount: anchor.BN\n ): Promise<TransactionInstruction> {\n return this.program.methods\n .transferPosition(outcomeIndex, amount)\n .accounts({\n payer,\n clobAuthority,\n condition,\n outcomeMint,\n fromUser,\n fromTokenAccount,\n fromPosition,\n toUser,\n toTokenAccount,\n toPosition,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n\n /**\n * Update the authorized CLOB on a condition.\n * Only callable by the condition's oracle (the wallet that signed createQuestion).\n */\n async updateAuthorizedClob(\n condition: PublicKey,\n newAuthorizedClob: PublicKey\n ): Promise<TxResult> {\n const sig = await this.program.methods\n .updateAuthorizedClob(newAuthorizedClob)\n .accounts({\n oracle: this.walletPubkey,\n condition,\n })\n .rpc();\n return { signature: sig };\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchCtfConfig(): Promise<CtfConfig | null> {\n try {\n const [ctfConfig] = PDA.ctfConfig(this.programIds);\n const acc = await (this.program.account as any).ctfConfig.fetch(ctfConfig);\n return {\n owner: acc.owner,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchCondition(conditionPda: PublicKey): Promise<Condition | null> {\n try {\n const acc = await (this.program.account as any).condition.fetch(conditionPda);\n return {\n oracle: acc.oracle,\n questionId: new Uint8Array(acc.questionId),\n outcomeSlotCount: acc.outcomeSlotCount,\n payoutNumerators: acc.payoutNumerators,\n payoutDenominator: acc.payoutDenominator,\n totalCollateral: acc.totalCollateral,\n collateralMint: acc.collateralMint,\n collateralVault: acc.collateralVault,\n yesMint: acc.yesMint,\n noMint: acc.noMint,\n hookProgram: acc.hookProgram,\n authorizedClob: acc.authorizedClob,\n isResolved: acc.isResolved,\n resolvedAt: acc.resolvedAt?.toNumber() ?? 0,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchVault(collateralMint: PublicKey): Promise<CollateralVault | null> {\n try {\n const [vaultPda] = PDA.collateralVault(collateralMint, this.programIds);\n const acc = await (this.program.account as any).collateralVault.fetch(vaultPda);\n return {\n collateralMint: acc.collateralMint,\n vaultTokenAccount: acc.vaultTokenAccount,\n totalLocked: acc.totalLocked,\n conditionCount: acc.conditionCount,\n bump: acc.bump,\n vaultBump: acc.vaultBump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchPosition(\n condition: PublicKey,\n outcomeIndex: number,\n owner: PublicKey = this.walletPubkey\n ): Promise<Position | null> {\n try {\n const [pda] = PDA.position(condition, outcomeIndex, owner, this.programIds);\n const acc = await (this.program.account as any).position.fetch(pda);\n return {\n owner: acc.owner,\n condition: acc.condition,\n outcomeIndex: acc.outcomeIndex,\n balance: acc.balance,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n /** YES = outcome index 1, NO = outcome index 0. */\n async fetchBothPositions(\n condition: PublicKey,\n owner: PublicKey = this.walletPubkey\n ): Promise<{ yes: Position | null; no: Position | null }> {\n const [yes, no] = await Promise.all([\n this.fetchPosition(condition, 1, owner),\n this.fetchPosition(condition, 0, owner),\n ]);\n return { yes, no };\n }\n\n /** Thin wrapper: fetch position for a single outcome token (0=NO, 1=YES). */\n async fetchTokenBalance(\n condition: PublicKey,\n tokenId: number,\n owner: PublicKey = this.walletPubkey\n ): Promise<Position | null> {\n return this.fetchPosition(condition, tokenId, owner);\n }\n\n // ─── PDA helpers (public for consumers) ──────────────────────────────────────\n\n yesMintPda(condition: PublicKey): PublicKey {\n return PDA.yesMint(condition, this.programIds)[0];\n }\n\n noMintPda(condition: PublicKey): PublicKey {\n return PDA.noMint(condition, this.programIds)[0];\n }\n\n mintAuthorityPda(condition: PublicKey): PublicKey {\n return PDA.mintAuthority(condition, this.programIds)[0];\n }\n\n collateralVaultPda(collateralMint: PublicKey): PublicKey {\n return PDA.collateralVault(collateralMint, this.programIds)[0];\n }\n}\n","/**\n * Order signing utilities.\n *\n * Canonical message layout (178 bytes) — must match Rust `Order::to_signable_bytes()`:\n * [0..31] maker pubkey\n * [32..63] condition pubkey\n * [64] token_id (u8)\n * [65] side (u8)\n * [66..73] maker_amount (u64 le)\n * [74..81] taker_amount (u64 le)\n * [82..89] nonce (u64 le)\n * [90..97] expiry (i64 le)\n * [98..105] created_at (i64 le)\n * [106..113] fee (u64 le)\n * [114..145] taker pubkey\n * [146..177] signer pubkey\n */\nimport {\n TransactionInstruction,\n Ed25519Program,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n} from \"@solana/web3.js\";\nimport { Order, SignedOrder } from \"./types\";\n\n// ─── Serialization ────────────────────────────────────────────────────────────\n\nexport function serializeOrderToBytes(order: Order): Uint8Array {\n const buf = new Uint8Array(178);\n\n buf.set(order.maker.toBytes(), 0);\n buf.set(order.condition.toBytes(), 32);\n buf[64] = order.tokenId;\n buf[65] = order.side;\n\n buf.set(order.makerAmount.toArrayLike(Buffer, \"le\", 8), 66);\n buf.set(order.takerAmount.toArrayLike(Buffer, \"le\", 8), 74);\n buf.set(order.nonce.toArrayLike(Buffer, \"le\", 8), 82);\n buf.set(order.expiry.toArrayLike(Buffer, \"le\", 8), 90);\n buf.set(order.createdAt.toArrayLike(Buffer, \"le\", 8), 98);\n buf.set(order.fee.toArrayLike(Buffer, \"le\", 8), 106);\n buf.set(order.taker.toBytes(), 114);\n buf.set(order.signer.toBytes(), 146);\n\n return buf;\n}\n\n// ─── Signing ──────────────────────────────────────────────────────────────────\n\n/**\n * Sign an order with a keypair's sign function.\n * The `signFn` receives the 98-byte canonical message and returns a 64-byte signature.\n *\n * Usage with a Keypair:\n * const signed = signOrder(order, (msg) => keypair.secretKey.slice(0,64) && nacl.sign.detached(msg, keypair.secretKey))\n *\n * Or use the convenience wrapper `signOrderWithKeypair` from this module.\n */\nexport async function signOrder(\n order: Order,\n signFn: (message: Uint8Array) => Uint8Array | Promise<Uint8Array>\n): Promise<SignedOrder> {\n const message = serializeOrderToBytes(order);\n const signature = await signFn(message);\n if (signature.length !== 64) throw new Error(\"signature must be 64 bytes\");\n return { order, signature };\n}\n\n// ─── Ed25519 instruction builder ─────────────────────────────────────────────\n\n/**\n * Build a single batched Ed25519 precompile instruction for N signed orders.\n *\n * All signatures are packed into one instruction (ix[0]).\n * The on-chain program reads sig[i] via `extract_order_from_ed25519_ix(sysvar, i)`.\n *\n * Batched layout saves ~12 bytes vs N separate Ed25519 instructions — critical for\n * fitting 1-taker + 2-maker transactions within Solana's 1232-byte raw tx limit.\n *\n * Data format:\n * [0] num_sigs (N)\n * [1] padding\n * [2+i*14] per-sig offset entries (14 bytes each)\n * Then: sigs (64B each), pubkeys (32B each), messages (178B each)\n */\nexport function buildBatchedEd25519Instruction(orders: SignedOrder[]): TransactionInstruction {\n const N = orders.length;\n if (N === 0) throw new Error(\"At least 1 order required\");\n\n const MSG_SIZE = 178;\n const SIG_SIZE = 64;\n const PK_SIZE = 32;\n const HEADER = 2 + N * 14;\n const sigBase = HEADER;\n const pkBase = sigBase + N * SIG_SIZE;\n const msgBase = pkBase + N * PK_SIZE;\n const totalSize = msgBase + N * MSG_SIZE;\n\n const data = Buffer.alloc(totalSize);\n data[0] = N;\n data[1] = 0;\n\n for (let i = 0; i < N; i++) {\n const e = 2 + i * 14;\n data.writeUInt16LE(sigBase + i * SIG_SIZE, e); // sig_offset\n data.writeUInt16LE(0xffff, e + 2); // sig_ix_index (this ix)\n data.writeUInt16LE(pkBase + i * PK_SIZE, e + 4); // pubkey_offset\n data.writeUInt16LE(0xffff, e + 6); // pubkey_ix_index (this ix)\n data.writeUInt16LE(msgBase + i * MSG_SIZE, e + 8); // msg_offset\n data.writeUInt16LE(MSG_SIZE, e + 10); // msg_size\n data.writeUInt16LE(0xffff, e + 12); // msg_ix_index (this ix)\n\n data.set(orders[i].signature, sigBase + i * SIG_SIZE);\n data.set(orders[i].order.maker.toBytes(), pkBase + i * PK_SIZE);\n data.set(serializeOrderToBytes(orders[i].order), msgBase + i * MSG_SIZE);\n }\n\n return new TransactionInstruction({\n keys: [],\n programId: Ed25519Program.programId,\n data,\n });\n}\n\n/**\n * The Solana instructions sysvar public key.\n * Pass this as `ixSysvar` to all match_* instruction accounts.\n */\nexport const IX_SYSVAR = SYSVAR_INSTRUCTIONS_PUBKEY;\n\n// ─── Anchor serialization helper ─────────────────────────────────────────────\n\n/**\n * Convert SignedOrder to the shape anchor expects for SignedOrder struct.\n * The signature must be passed as a fixed-size array of 64 numbers.\n */\nexport function _toAnchorSignedOrder(signed: SignedOrder) {\n const sig = Array.from(signed.signature);\n if (sig.length !== 64) throw new Error(\"signature must be 64 bytes\");\n return {\n order: {\n maker: signed.order.maker,\n condition: signed.order.condition,\n tokenId: signed.order.tokenId,\n side: signed.order.side,\n makerAmount: signed.order.makerAmount,\n takerAmount: signed.order.takerAmount,\n nonce: signed.order.nonce,\n expiry: signed.order.expiry,\n createdAt: signed.order.createdAt,\n fee: signed.order.fee,\n taker: signed.order.taker,\n signer: signed.order.signer,\n },\n signature: sig,\n };\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n AddressLookupTableAccount,\n AddressLookupTableProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n Ed25519Program,\n type Signer as SolanaSigner,\n} from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport {\n ClobConfig, ClobWhitelistEntry, OrderStatus, Order, SignedOrder, TxResult, InvalidParamError,\n} from \"../types\";\nimport { buildBatchedEd25519Instruction, IX_SYSVAR, _toAnchorSignedOrder } from \"../signing\";\nimport type { FeeManagementClient } from \"./fee_management\";\n\nconst CLOB_WHITELIST_SEED = Buffer.from(\"clob_whitelist\");\n\nexport class ClobClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n private readonly networkConfig: { defaultCollateral: { mint: PublicKey } };\n\n /** Injected by XMarketSDK after construction — enables auto fee distribution */\n feeClient?: FeeManagementClient;\n feeConfigOwner?: PublicKey;\n\n /** Cached company_address from fee_config to avoid repeated RPC calls */\n private _companyAddress?: PublicKey;\n\n /** ALT cache: condition.toBase58() → loaded ALT account */\n private _altCache = new Map<string, AddressLookupTableAccount>();\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds,\n networkConfig: { defaultCollateral: { mint: PublicKey } },\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n this.networkConfig = networkConfig;\n }\n\n private async companyAddress(): Promise<PublicKey | undefined> {\n if (!this.feeClient || !this.feeConfigOwner) return undefined;\n if (!this._companyAddress) {\n const cfg = await this.feeClient.fetchFeeConfig(this.feeConfigOwner);\n if (cfg) this._companyAddress = cfg.companyAddress;\n }\n return this._companyAddress;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n /**\n * Get or create an ALT for a condition.\n * First call: creates + extends ALT on-chain, waits for activation (~2s).\n * Subsequent calls for same condition: returns cached ALT instantly.\n * BE devs never interact with this — called automatically by matchOrders.\n */\n async ensureAlt(\n condition: PublicKey,\n collateralMint: PublicKey,\n buyerPubkey: PublicKey,\n buyerNonce: anchor.BN,\n makers: SignedOrder[],\n ): Promise<AddressLookupTableAccount> {\n const cacheKey = condition.toBase58();\n if (this._altCache.has(cacheKey)) {\n return this._altCache.get(cacheKey)!;\n }\n\n const { connection } = this.provider;\n const payer = this.walletPubkey;\n\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [extraAccountMeta] = PDA.extraAccountMetaList(yesMint, this.programIds);\n const [hookConfig] = PDA.hookConfig(this.programIds);\n const [buyOrderStatus] = PDA.orderStatus(buyerPubkey, buyerNonce, this.programIds);\n const [buyerPosition] = PDA.position(condition, 1, buyerPubkey, this.programIds);\n const clobConfigPda = this.configPda();\n\n const feeRecipientAddr = (await this.fetchConfig())?.feeRecipient;\n\n const addresses: PublicKey[] = [\n // instruction program IDs — must be in ALT to keep static keys minimal\n Ed25519Program.programId,\n this.programIds.clobExchange,\n // other programs\n this.programIds.conditionalTokens,\n this.programIds.hook,\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n SystemProgram.programId,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n // config PDAs\n clobConfigPda,\n hookConfig,\n this.whitelistEntryPda(payer),\n // condition PDAs\n condition,\n yesMint,\n extraAccountMeta,\n // buyer pubkey + ATAs + PDAs\n buyerPubkey,\n getAssociatedTokenAddressSync(collateralMint, buyerPubkey),\n getAssociatedTokenAddressSync(yesMint, buyerPubkey, false, TOKEN_2022_PROGRAM_ID),\n buyerPosition,\n buyOrderStatus,\n ];\n\n if (feeRecipientAddr) addresses.push(feeRecipientAddr);\n\n // Add per-maker accounts (pubkey + ATAs + PDAs)\n for (const m of makers) {\n const seller = m.order.maker;\n const [sellerPos] = PDA.position(condition, 1, seller, this.programIds);\n const [sellerStatus] = PDA.orderStatus(seller, m.order.nonce, this.programIds);\n addresses.push(\n seller,\n getAssociatedTokenAddressSync(yesMint, seller, false, TOKEN_2022_PROGRAM_ID),\n getAssociatedTokenAddressSync(collateralMint, seller),\n sellerPos,\n sellerStatus,\n );\n }\n\n // Fee management accounts\n if (this.programIds.feeManagement && this.feeConfigOwner) {\n const companyAddr = await this.companyAddress();\n addresses.push(\n this.programIds.feeManagement,\n PDA.feeConfig(this.feeConfigOwner, this.programIds)[0],\n PDA.marketFeeOverride(condition, this.programIds)[0],\n );\n if (companyAddr) {\n addresses.push(getAssociatedTokenAddressSync(collateralMint, companyAddr));\n }\n // market_oracle_vault placeholder — overridden in ensureAlt opts if provided\n addresses.push(payer);\n }\n\n // Create ALT\n const slot = await connection.getSlot(\"finalized\");\n const [createIx, altAddress] = AddressLookupTableProgram.createLookupTable({\n authority: payer, payer, recentSlot: slot,\n });\n\n // Extend in batches of 30 (legacy tx limit)\n const BATCH = 30;\n const extendIxs: TransactionInstruction[] = [];\n for (let i = 0; i < addresses.length; i += BATCH) {\n extendIxs.push(AddressLookupTableProgram.extendLookupTable({\n payer, authority: payer,\n lookupTable: altAddress,\n addresses: addresses.slice(i, i + BATCH),\n }));\n }\n\n // Send create + first extend, then remaining extends\n await this._sendLegacyTx([createIx, extendIxs[0]]);\n for (let i = 1; i < extendIxs.length; i++) {\n await this._sendLegacyTx([extendIxs[i]]);\n }\n\n // Wait for ALT to be active\n for (let attempt = 0; attempt < 30; attempt++) {\n await new Promise(r => setTimeout(r, 1000));\n const res = await connection.getAddressLookupTable(altAddress);\n if (res.value && res.value.state.addresses.length === addresses.length) {\n this._altCache.set(cacheKey, res.value);\n return res.value;\n }\n }\n throw new Error(`ALT ${altAddress.toBase58()} not active after 30s`);\n }\n\n private async _sendLegacyTx(instructions: TransactionInstruction[]): Promise<void> {\n const { connection } = this.provider;\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();\n const { Transaction } = await import(\"@solana/web3.js\");\n const tx = new Transaction();\n tx.recentBlockhash = blockhash;\n tx.feePayer = this.walletPubkey;\n tx.add(...instructions);\n const signed = await this.provider.wallet.signTransaction(tx);\n const sig = await connection.sendRawTransaction(signed.serialize());\n await connection.confirmTransaction({ signature: sig, blockhash, lastValidBlockHeight }, \"confirmed\");\n }\n\n /**\n * Send a match transaction as versioned (v0).\n * Pass a pre-built AddressLookupTableAccount to compress account keys and\n * stay under the 1232-byte limit — required for match_complementary which\n * has ~25 accounts + 2 Ed25519 precompile instructions (~1697 bytes raw).\n *\n * If `whitelistedWallet` is provided and differs from `this.provider.wallet`,\n * both wallets sign the transaction (whitelisted operator + payer).\n */\n async sendMatchTx(\n instructions: TransactionInstruction[],\n lookupTable?: AddressLookupTableAccount,\n whitelistedWallet?: anchor.Wallet,\n ): Promise<string> {\n const { connection } = this.provider;\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();\n // payer is this.provider.wallet; feePayer = payer.publicKey\n const message = new TransactionMessage({\n payerKey: this.walletPubkey,\n recentBlockhash: blockhash,\n instructions,\n }).compileToV0Message(lookupTable ? [lookupTable] : []);\n const vtx = new VersionedTransaction(message);\n const signers: SolanaSigner[] = [(this.provider.wallet as any).payer as SolanaSigner];\n if (\n whitelistedWallet &&\n !whitelistedWallet.publicKey.equals(this.walletPubkey)\n ) {\n signers.push((whitelistedWallet as any).payer as SolanaSigner);\n }\n vtx.sign(signers);\n const sig = await connection.sendRawTransaction(vtx.serialize(), {\n skipPreflight: false,\n });\n await connection.confirmTransaction(\n { signature: sig, blockhash, lastValidBlockHeight },\n \"confirmed\",\n );\n return sig;\n }\n\n /** PDA for a CLOB whitelist entry. */\n whitelistEntryPda(address: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [CLOB_WHITELIST_SEED, address.toBytes()],\n this.programIds.clobExchange,\n )[0];\n }\n\n configPda(): PublicKey {\n return PDA.clobConfig(this.programIds)[0];\n }\n\n // ─── Instructions ────────────────────────────────────────────────────────────\n\n /** One-time setup. Caller becomes admin. */\n async initialize(\n operators: PublicKey[],\n feeRecipient: PublicKey,\n feeRateBps: number\n ): Promise<TxResult> {\n const sig = await this.program.methods\n .initializeClob(\n operators,\n feeRecipient,\n feeRateBps,\n this.programIds.conditionalTokens\n )\n .accounts({\n owner: this.walletPubkey,\n clobConfig: this.configPda(),\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin adds an operator to the whitelist. */\n async addOperator(operator: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .addOperator(operator)\n .accounts({\n owner: this.walletPubkey,\n clobConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin removes an operator from the whitelist. */\n async removeOperator(operator: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .removeOperator(operator)\n .accounts({\n owner: this.walletPubkey,\n clobConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin pause/unpause the CLOB. */\n async setPaused(paused: boolean): Promise<TxResult> {\n const sig = await this.program.methods\n .setPaused(paused)\n .accounts({\n owner: this.walletPubkey,\n clobConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Maker cancels their own order.\n * OrderStatus PDA is marked cancelled — any future fill rejected.\n */\n async cancelOrder(nonce: anchor.BN): Promise<TxResult> {\n const maker = this.walletPubkey;\n const [orderStatus] = PDA.orderStatus(maker, nonce, this.programIds);\n const sig = await this.program.methods\n .cancelOrder(nonce)\n .accounts({\n signer: maker,\n clobConfig: this.configPda(),\n maker,\n orderStatus,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Emergency reset of CLOB config (upgrade authority only).\n */\n async forceResetClob(\n programData: PublicKey,\n newAdmin: PublicKey,\n newOperators: PublicKey[],\n newFeeRecipient: PublicKey,\n newFeeRateBps: number\n ): Promise<TxResult> {\n const sig = await this.program.methods\n .forceResetClob(newAdmin, newOperators, newFeeRecipient, newFeeRateBps)\n .accounts({\n upgradeAuthority: this.walletPubkey,\n programData,\n clobConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * COMPLEMENTARY match: 1 buyer (taker) + N sellers (makers), same tokenId.\n *\n * Transaction structure:\n * ix[0] Ed25519(taker/buyer)\n * ix[1+i] Ed25519(maker_i/seller_i)\n * ix[N+1] match_complementary(buyNonce, makerNonces[])\n *\n * remaining_accounts: [hook×3] [seller×5 × N]\n */\n /** Build Ed25519 + matchComplementary instructions without sending.\n *\n * If `buySigned.order.fee > 0` and `feeClient` + `feeConfigOwner` are wired in,\n * automatically appends 5 fee_management remaining_accounts so the program CPIs\n * to distribute_fee internally. No manual `feeDistribute` param needed.\n */\n async buildMatchComplementaryIxs(\n buySigned: SignedOrder,\n makersSigned: SignedOrder[],\n collateralMint: PublicKey,\n feeRecipient: PublicKey,\n whitelisted: PublicKey,\n opts?: { marketOracleVault?: PublicKey },\n ): Promise<TransactionInstruction[]> {\n const condition = buySigned.order.condition;\n const tokenId = buySigned.order.tokenId;\n\n const [outcomeMint] = tokenId === 1\n ? PDA.yesMint(condition, this.programIds)\n : PDA.noMint(condition, this.programIds);\n\n const buyer = buySigned.order.maker;\n const buyerCollateral = getAssociatedTokenAddressSync(collateralMint, buyer);\n const buyerTokenAccount = getAssociatedTokenAddressSync(outcomeMint, buyer, false, TOKEN_2022_PROGRAM_ID);\n const [buyerPosition] = PDA.position(condition, tokenId, buyer, this.programIds);\n const [buyOrderStatus] = PDA.orderStatus(buyer, buySigned.order.nonce, this.programIds);\n\n const [extraAccountMetaList] = PDA.extraAccountMetaList(outcomeMint, this.programIds);\n const [hookConfig] = PDA.hookConfig(this.programIds);\n const hookAccounts = [\n { pubkey: extraAccountMetaList, isSigner: false, isWritable: false },\n { pubkey: hookConfig, isSigner: false, isWritable: false },\n { pubkey: this.programIds.hook, isSigner: false, isWritable: false },\n ];\n\n const makerAccounts = makersSigned.flatMap(m => {\n const seller = m.order.maker;\n const sellerTokenAccount = getAssociatedTokenAddressSync(outcomeMint, seller, false, TOKEN_2022_PROGRAM_ID);\n const [sellerPosition] = PDA.position(condition, tokenId, seller, this.programIds);\n const sellerCollateral = getAssociatedTokenAddressSync(collateralMint, seller);\n const [sellOrderStatus] = PDA.orderStatus(seller, m.order.nonce, this.programIds);\n return [\n { pubkey: seller, isSigner: false, isWritable: false },\n { pubkey: sellerTokenAccount, isSigner: false, isWritable: true },\n { pubkey: sellerPosition, isSigner: false, isWritable: true },\n { pubkey: sellerCollateral, isSigner: false, isWritable: true },\n { pubkey: sellOrderStatus, isSigner: false, isWritable: true },\n ];\n });\n\n // Auto fee distribution: fee > 0 + feeClient wired → append 5 remaining_accounts\n // so match_complementary CPIs to distribute_fee internally\n let feeAccounts: { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }[] = [];\n if (\n buySigned.order.fee.gtn(0) &&\n this.programIds.feeManagement &&\n this.feeConfigOwner\n ) {\n const companyAddr = await this.companyAddress();\n if (companyAddr) {\n // 5th account = market_oracle_vault: use provided value or fall back to payer\n // (payer works when is_admin=true — no tokens flow to oracle vault)\n const oracleVault = opts?.marketOracleVault ?? this.walletPubkey;\n feeAccounts = [\n { pubkey: this.programIds.feeManagement, isSigner: false, isWritable: false },\n { pubkey: PDA.feeConfig(this.feeConfigOwner, this.programIds)[0], isSigner: false, isWritable: false },\n { pubkey: PDA.marketFeeOverride(condition, this.programIds)[0], isSigner: false, isWritable: false },\n { pubkey: getAssociatedTokenAddressSync(collateralMint, companyAddr), isSigner: false, isWritable: true },\n { pubkey: oracleVault, isSigner: false, isWritable: true },\n ];\n }\n }\n\n const whitelistEntry = this.whitelistEntryPda(whitelisted);\n const makerNonces = makersSigned.map(m => m.order.nonce);\n\n const ed25519Ix = buildBatchedEd25519Instruction([buySigned, ...makersSigned]);\n\n const matchIx = await this.program.methods\n .matchComplementary(buySigned.order.nonce, makerNonces)\n .accounts({\n whitelisted,\n payer: this.walletPubkey,\n whitelistEntry,\n clobConfig: this.configPda(),\n ixSysvar: IX_SYSVAR,\n condition,\n buyer,\n buyerCollateral,\n buyerTokenAccount,\n buyerPosition,\n buyOrderStatus,\n outcomeMint,\n feeRecipient,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n tokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts([...hookAccounts, ...makerAccounts, ...feeAccounts])\n .instruction();\n\n return [ed25519Ix, matchIx];\n }\n\n private async matchComplementary(\n buySigned: SignedOrder,\n makersSigned: SignedOrder[],\n collateralMint: PublicKey,\n feeRecipient: PublicKey,\n whitelistedWallet: anchor.Wallet,\n lookupTable?: AddressLookupTableAccount,\n opts?: { marketOracleVault?: PublicKey },\n ): Promise<TxResult> {\n const ixs = await this.buildMatchComplementaryIxs(\n buySigned, makersSigned, collateralMint, feeRecipient, whitelistedWallet.publicKey, opts,\n );\n const sig = await this.sendMatchTx(ixs, lookupTable, whitelistedWallet);\n return { signature: sig };\n }\n\n /**\n * MINT match: 1 YES buyer (taker) + N NO buyers (makers).\n *\n * Transaction structure:\n * ix[0] Ed25519(taker/YES buyer)\n * ix[1+i] Ed25519(maker_i/NO buyer)\n * ix[N+1] match_mint_orders(yesNonce, makerNonces[])\n *\n * remaining_accounts: [maker×5 × N] (no hook accounts — mint_to doesn't fire hook)\n */\n private async matchMintOrders(\n yesSigned: SignedOrder,\n makersSigned: SignedOrder[],\n collateralMint: PublicKey,\n feeRecipient: PublicKey,\n whitelistedWallet: anchor.Wallet,\n lookupTable?: AddressLookupTableAccount,\n ): Promise<TxResult> {\n const condition = yesSigned.order.condition;\n\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [noMint] = PDA.noMint(condition, this.programIds);\n const [mintAuthority] = PDA.mintAuthority(condition, this.programIds);\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n\n const buyerYes = yesSigned.order.maker;\n const buyerYesCollateral = getAssociatedTokenAddressSync(collateralMint, buyerYes);\n const buyerYesTokenAccount = getAssociatedTokenAddressSync(yesMint, buyerYes, false, TOKEN_2022_PROGRAM_ID);\n const [buyerYesPosition] = PDA.position(condition, 1, buyerYes, this.programIds);\n const [yesOrderStatus] = PDA.orderStatus(buyerYes, yesSigned.order.nonce, this.programIds);\n\n const makerAccounts = makersSigned.flatMap(m => {\n const maker = m.order.maker;\n const makerUsdcAta = getAssociatedTokenAddressSync(collateralMint, maker);\n const makerNoAta = getAssociatedTokenAddressSync(noMint, maker, false, TOKEN_2022_PROGRAM_ID);\n const [makerNoPosition] = PDA.position(condition, 0, maker, this.programIds);\n const [makerOrderStatus] = PDA.orderStatus(maker, m.order.nonce, this.programIds);\n return [\n { pubkey: maker, isSigner: false, isWritable: false },\n { pubkey: makerUsdcAta, isSigner: false, isWritable: true },\n { pubkey: makerNoAta, isSigner: false, isWritable: true },\n { pubkey: makerNoPosition, isSigner: false, isWritable: true },\n { pubkey: makerOrderStatus,isSigner: false, isWritable: true },\n ];\n });\n\n const whitelisted = whitelistedWallet.publicKey;\n const whitelistEntry = this.whitelistEntryPda(whitelisted);\n const makerNonces = makersSigned.map(m => m.order.nonce);\n\n const ed25519Ixs = [\n buildBatchedEd25519Instruction([yesSigned, ...makersSigned]),\n ];\n\n const matchIx = await this.program.methods\n .matchMintOrders(yesSigned.order.nonce, makerNonces)\n .accounts({\n whitelisted,\n payer: this.walletPubkey,\n whitelistEntry,\n clobConfig: this.configPda(),\n ixSysvar: IX_SYSVAR,\n condition,\n buyerYes,\n buyerYesCollateral,\n buyerYesTokenAccount,\n buyerYesPosition,\n yesOrderStatus,\n collateralVault,\n vaultTokenAccount,\n yesMint,\n noMint,\n mintAuthority,\n feeRecipient,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n collateralTokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(makerAccounts)\n .instruction();\n\n // Anchor TS doesn't mark UncheckedAccount as writable — force it here\n const frKey = feeRecipient.toBase58();\n for (const k of matchIx.keys) {\n if (k.pubkey.toBase58() === frKey) { k.isWritable = true; break; }\n }\n\n const sig = await this.sendMatchTx(\n [...ed25519Ixs, matchIx],\n lookupTable,\n whitelistedWallet,\n );\n return { signature: sig };\n }\n\n /**\n * MERGE match: 1 YES seller (taker) + N NO sellers (makers).\n *\n * Transaction structure:\n * ix[0] Ed25519(taker/YES seller)\n * ix[1+i] Ed25519(maker_i/NO seller)\n * ix[N+1] match_merge_orders(yesNonce, makerNonces[])\n *\n * remaining_accounts: [maker×5 × N] (no hook accounts — burn doesn't fire hook)\n */\n private async matchMergeOrders(\n yesSigned: SignedOrder,\n makersSigned: SignedOrder[],\n collateralMint: PublicKey,\n feeRecipient: PublicKey,\n whitelistedWallet: anchor.Wallet,\n lookupTable?: AddressLookupTableAccount,\n ): Promise<TxResult> {\n const condition = yesSigned.order.condition;\n\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [noMint] = PDA.noMint(condition, this.programIds);\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n\n const sellerYes = yesSigned.order.maker;\n const sellerYesTokenAccount = getAssociatedTokenAddressSync(yesMint, sellerYes, false, TOKEN_2022_PROGRAM_ID);\n const [sellerYesPosition] = PDA.position(condition, 1, sellerYes, this.programIds);\n const sellerYesCollateral = getAssociatedTokenAddressSync(collateralMint, sellerYes);\n const [yesOrderStatus] = PDA.orderStatus(sellerYes, yesSigned.order.nonce, this.programIds);\n\n const makerAccounts = makersSigned.flatMap(m => {\n const maker = m.order.maker;\n const makerNoAta = getAssociatedTokenAddressSync(noMint, maker, false, TOKEN_2022_PROGRAM_ID);\n const [makerNoPosition] = PDA.position(condition, 0, maker, this.programIds);\n const makerUsdcAta = getAssociatedTokenAddressSync(collateralMint, maker);\n const [makerOrderStatus] = PDA.orderStatus(maker, m.order.nonce, this.programIds);\n return [\n { pubkey: maker, isSigner: false, isWritable: false },\n { pubkey: makerNoAta, isSigner: false, isWritable: true },\n { pubkey: makerNoPosition, isSigner: false, isWritable: true },\n { pubkey: makerUsdcAta, isSigner: false, isWritable: true },\n { pubkey: makerOrderStatus,isSigner: false, isWritable: true },\n ];\n });\n\n const whitelisted = whitelistedWallet.publicKey;\n const whitelistEntry = this.whitelistEntryPda(whitelisted);\n const makerNonces = makersSigned.map(m => m.order.nonce);\n\n const ed25519Ixs = [\n buildBatchedEd25519Instruction([yesSigned, ...makersSigned]),\n ];\n\n const matchIx = await this.program.methods\n .matchMergeOrders(yesSigned.order.nonce, makerNonces)\n .accounts({\n whitelisted,\n payer: this.walletPubkey,\n whitelistEntry,\n clobConfig: this.configPda(),\n ixSysvar: IX_SYSVAR,\n condition,\n sellerYes,\n sellerYesTokenAccount,\n sellerYesPosition,\n sellerYesCollateral,\n yesOrderStatus,\n collateralVault,\n vaultTokenAccount,\n yesMint,\n noMint,\n feeRecipient,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n collateralTokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(makerAccounts)\n .instruction();\n\n // Anchor TS doesn't mark UncheckedAccount as writable — force it here\n const frKeyM = feeRecipient.toBase58();\n for (const k of matchIx.keys) {\n if (k.pubkey.toBase58() === frKeyM) { k.isWritable = true; break; }\n }\n\n const sig = await this.sendMatchTx(\n [...ed25519Ixs, matchIx],\n lookupTable,\n whitelistedWallet,\n );\n return { signature: sig };\n }\n\n /**\n * Auto-detect match type and execute 1-taker + N-makers in a single transaction.\n *\n * Detection (pure, no RPC) based on taker.order vs makers[0].order:\n * taker.tokenId === makers[0].tokenId: taker BUY + all makers SELL → COMPLEMENTARY\n * taker.tokenId !== makers[0].tokenId + taker BUY + all makers BUY → MINT\n * taker.tokenId !== makers[0].tokenId + taker SELL + all makers SELL → MERGE\n * Otherwise → throws InvalidParamError\n *\n * All makers must have the same tokenId and side as makers[0].\n */\n /**\n * Auto-detect match type and execute in a single transaction.\n * ALT is managed automatically (created on first call per condition, cached thereafter).\n * feeRecipient and collateralMint are derived from on-chain config.\n * Fee distribution (distribute_fee CPI) fires automatically when order.fee > 0.\n *\n * @param opts.marketOracleVault Required for presale markets (is_admin=false).\n * Pass the ATA of the market_oracle PDA so 50% of fee goes there.\n * For admin markets (is_admin=true) omit — payer is used as placeholder (no transfer).\n */\n async matchOrders(\n taker: SignedOrder,\n makers: SignedOrder[],\n opts?: { marketOracleVault?: PublicKey },\n ): Promise<TxResult> {\n if (makers.length === 0) throw new InvalidParamError(\"At least 1 maker required\");\n\n const collateralMint = this.networkConfig.defaultCollateral.mint;\n const cfg = await this.fetchConfig();\n if (!cfg) throw new InvalidParamError(\"CLOB config not found on-chain\");\n const feeRecipient = cfg.feeRecipient;\n const whitelistedWallet = this.provider.wallet as anchor.Wallet;\n\n const alt = await this.ensureAlt(\n taker.order.condition,\n collateralMint,\n taker.order.maker,\n taker.order.nonce,\n makers,\n );\n\n const t = taker.order;\n const m0 = makers[0].order;\n const SIDE_BUY = 0;\n const SIDE_SELL = 1;\n\n if (t.tokenId === m0.tokenId) {\n if (t.side === SIDE_BUY && makers.every(m => m.order.side === SIDE_SELL)) {\n return this.matchComplementary(taker, makers, collateralMint, feeRecipient, whitelistedWallet, alt, opts);\n }\n if (t.side === SIDE_SELL && makers.every(m => m.order.side === SIDE_BUY)) {\n throw new InvalidParamError(\"COMPLEMENTARY N-maker: taker must be the BUY side\");\n }\n throw new InvalidParamError(\"COMPLEMENTARY requires taker=BUY, makers=SELL on same tokenId\");\n }\n\n const allBuy = t.side === SIDE_BUY && makers.every(m => m.order.side === SIDE_BUY);\n const allSell = t.side === SIDE_SELL && makers.every(m => m.order.side === SIDE_SELL);\n\n if (!allBuy && !allSell) throw new InvalidParamError(\"MINT/MERGE: all orders must be same side\");\n if (t.tokenId !== 1) throw new InvalidParamError(\"MINT/MERGE: taker must be YES (tokenId=1)\");\n if (!makers.every(m => m.order.tokenId === 0)) throw new InvalidParamError(\"MINT/MERGE: makers must be NO (tokenId=0)\");\n\n if (allBuy) return this.matchMintOrders(taker, makers, collateralMint, feeRecipient, whitelistedWallet, alt);\n return this.matchMergeOrders(taker, makers, collateralMint, feeRecipient, whitelistedWallet, alt);\n }\n\n // ─── Whitelist admin ─────────────────────────────────────────────────────────\n\n /** Add an address to the CLOB whitelist (owner only). */\n async addToWhitelist(address: PublicKey): Promise<TxResult> {\n const whitelistEntry = this.whitelistEntryPda(address);\n const sig = await this.program.methods\n .addToClobWhitelist(address)\n .accounts({\n owner: this.walletPubkey,\n payer: this.walletPubkey,\n clobConfig: this.configPda(),\n whitelistEntry,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Batch-add addresses to the CLOB whitelist (owner only). All PDAs created in one tx. */\n async addToWhitelistBatch(addresses: PublicKey[]): Promise<TxResult> {\n if (addresses.length === 0) throw new InvalidParamError(\"At least 1 address required\");\n const remainingAccounts = addresses.map(addr => ({\n pubkey: this.whitelistEntryPda(addr),\n isSigner: false,\n isWritable: true,\n }));\n const sig = await this.program.methods\n .addToClobWhitelistBatch(addresses)\n .accounts({\n owner: this.walletPubkey,\n payer: this.walletPubkey,\n clobConfig: this.configPda(),\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(remainingAccounts)\n .rpc();\n return { signature: sig };\n }\n\n /** Remove an address from the CLOB whitelist (owner only). */\n async removeFromWhitelist(address: PublicKey, rentReceiver?: PublicKey): Promise<TxResult> {\n const whitelistEntry = this.whitelistEntryPda(address);\n const sig = await this.program.methods\n .removeFromClobWhitelist(address)\n .accounts({\n owner: this.walletPubkey,\n rentReceiver: rentReceiver ?? this.walletPubkey,\n clobConfig: this.configPda(),\n whitelistEntry,\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Fetch a whitelist entry PDA (returns null if address is not whitelisted). */\n async fetchWhitelistEntry(address: PublicKey): Promise<ClobWhitelistEntry | null> {\n try {\n const pda = this.whitelistEntryPda(address);\n const acc = await (this.program.account as any).clobWhitelistEntry.fetch(pda);\n return { address: acc.address, bump: acc.bump };\n } catch {\n return null;\n }\n }\n\n /** Check if an address is on the CLOB whitelist. */\n async isWhitelisted(address: PublicKey): Promise<boolean> {\n return (await this.fetchWhitelistEntry(address)) !== null;\n }\n\n /** Fetch all whitelisted addresses (scans all ClobWhitelistEntry accounts). */\n async fetchWhitelist(): Promise<PublicKey[]> {\n const entries = await (this.program.account as any).clobWhitelistEntry.all();\n return entries.map((e: any) => e.account.address as PublicKey);\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchConfig(): Promise<ClobConfig | null> {\n try {\n const acc = await (this.program.account as any).clobConfig.fetch(this.configPda());\n return {\n owner: acc.owner,\n operators: acc.operators as PublicKey[],\n operatorsLen: acc.operatorsLen,\n feeRecipient: acc.feeRecipient,\n feeRateBps: acc.feeRateBps,\n conditionalTokensProgram: acc.conditionalTokensProgram,\n isPaused: acc.isPaused,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchOrderStatus(maker: PublicKey, nonce: anchor.BN): Promise<OrderStatus | null> {\n try {\n const [pda] = PDA.orderStatus(maker, nonce, this.programIds);\n const acc = await (this.program.account as any).orderStatus.fetch(pda);\n return {\n maker: acc.maker,\n nonce: acc.nonce,\n isCancelled: acc.isCancelled,\n filledAmount: acc.filledAmount,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async isOrderCancelled(maker: PublicKey, nonce: anchor.BN): Promise<boolean> {\n const status = await this.fetchOrderStatus(maker, nonce);\n return status?.isCancelled === true;\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { PublicKey, SystemProgram, TransactionInstruction } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport { ProgramIds } from \"../config/networks\";\nimport { PDA } from \"../pda\";\nimport { QuestionFee, TxResult } from \"../types\";\n\nexport class FeeManagementClient {\n constructor(\n private readonly program: anchor.Program,\n private readonly provider: anchor.AnchorProvider,\n private readonly programIds: ProgramIds,\n ) {}\n\n async initFeeConfig(\n admin: PublicKey,\n companyAddress: PublicKey,\n referralAddress: PublicKey,\n presaleRevenueAddress: PublicKey,\n investorsMarketRev: number,\n companyMarketRev: number,\n agentsPresaleRev: number,\n companyPresaleRev: number,\n authority: PublicKey,\n payer: PublicKey,\n ): Promise<TxResult> {\n const [feeConfigPda] = PDA.feeConfig(authority, this.programIds);\n const sig = await this.program.methods\n .initialize({\n admin,\n companyAddress,\n referralAddress,\n presaleRevenueAddress,\n investorsMarketRev,\n companyMarketRev,\n agentsPresaleRev,\n companyPresaleRev,\n })\n .accounts({\n authority,\n payer,\n feeConfig: feeConfigPda,\n systemProgram: SystemProgram.programId,\n })\n .signers([])\n .rpc();\n return { signature: sig };\n }\n\n async fetchFeeConfig(owner: PublicKey): Promise<any | null> {\n try {\n const [pda] = PDA.feeConfig(owner, this.programIds);\n return await (this.program.account as any).feeConfig.fetch(pda);\n } catch {\n return null;\n }\n }\n\n /**\n * Fetch per-question fees for a condition.\n * Returns null if no fees have been set yet.\n */\n async fetchQuestionFee(conditionPda: PublicKey): Promise<QuestionFee | null> {\n try {\n const [pda] = PDA.questionFee(conditionPda, this.programIds);\n const acc = await (this.program.account as any).questionFee.fetch(pda);\n return {\n conditionId: new Uint8Array(acc.conditionId),\n mergeFee: acc.mergeFee as BN,\n redeemFee: acc.redeemFee as BN,\n swapFee: acc.swapFee as BN,\n bump: acc.bump as number,\n };\n } catch {\n return null;\n }\n }\n\n /**\n * Set per-question fees for a condition.\n * @param conditionPda - condition PDA from the question\n * @param mergeFee - fee out of FEE_DENOMINATOR (1_000_000), e.g. 2_000 = 0.2%\n * @param redeemFee - fee out of FEE_DENOMINATOR\n * @param swapFee - trading fee out of FEE_DENOMINATOR\n * @param feeConfigOwner - pubkey that owns the fee_config PDA (usually market deployer)\n * @param authority - signer authorized in fee_config whitelist / admin / owner\n * @param payer - rent + tx fee payer\n */\n async updateFeeConfig(\n companyAddress: PublicKey,\n referralAddress: PublicKey,\n presaleRevenueAddress: PublicKey,\n investorsMarketRev: number,\n companyMarketRev: number,\n agentsPresaleRev: number,\n companyPresaleRev: number,\n authority: PublicKey,\n payer: PublicKey,\n ): Promise<TxResult> {\n const [feeConfigPda] = PDA.feeConfig(authority, this.programIds);\n const sig = await this.program.methods\n .updateConfig({\n companyAddress,\n referralAddress,\n presaleRevenueAddress,\n investorsMarketRev,\n companyMarketRev,\n agentsPresaleRev,\n companyPresaleRev,\n })\n .accounts({\n authority,\n payer,\n feeConfig: feeConfigPda,\n })\n .signers([])\n .rpc();\n return { signature: sig };\n }\n\n async setMarketFeeOverride(\n conditionPda: PublicKey,\n investors: number,\n company: number,\n isAdmin: boolean,\n feeConfigOwner: PublicKey,\n authority: PublicKey,\n payer: PublicKey,\n ): Promise<TxResult> {\n const [feeConfigPda] = PDA.feeConfig(feeConfigOwner, this.programIds);\n const [marketFeeOverridePda] = PDA.marketFeeOverride(conditionPda, this.programIds);\n\n const sig = await this.program.methods\n .setMarketFeeOverride(conditionPda, investors, company, isAdmin)\n .accounts({\n authority,\n payer,\n feeConfig: feeConfigPda,\n marketFeeOverride: marketFeeOverridePda,\n systemProgram: SystemProgram.programId,\n })\n .signers([])\n .rpc();\n\n return { signature: sig };\n }\n\n async buildDistributeFeeIx(\n conditionPda: PublicKey,\n amount: BN,\n feeConfigOwner: PublicKey,\n sourceAta: PublicKey,\n companyAta: PublicKey,\n marketOracleVault: PublicKey,\n authority: PublicKey,\n ): Promise<TransactionInstruction> {\n const [feeConfigPda] = PDA.feeConfig(feeConfigOwner, this.programIds);\n const [marketFeeOverridePda] = PDA.marketFeeOverride(conditionPda, this.programIds);\n return this.program.methods\n .distributeFee(conditionPda, amount)\n .accounts({\n feeConfig: feeConfigPda,\n marketFeeOverride: marketFeeOverridePda,\n authority,\n sourceAta,\n companyAta,\n marketOracleVault,\n tokenProgram: new PublicKey(\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"),\n })\n .instruction();\n }\n\n async distributeFee(\n conditionPda: PublicKey,\n amount: BN,\n feeConfigOwner: PublicKey,\n sourceAta: PublicKey,\n companyAta: PublicKey,\n marketOracleVault: PublicKey,\n authority: PublicKey,\n ): Promise<TxResult> {\n const [feeConfigPda] = PDA.feeConfig(feeConfigOwner, this.programIds);\n const [marketFeeOverridePda] = PDA.marketFeeOverride(conditionPda, this.programIds);\n\n const sig = await this.program.methods\n .distributeFee(conditionPda, amount)\n .accounts({\n feeConfig: feeConfigPda,\n marketFeeOverride: marketFeeOverridePda,\n authority,\n sourceAta,\n companyAta,\n marketOracleVault,\n tokenProgram: new PublicKey(\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"),\n })\n .signers([])\n .rpc();\n\n return { signature: sig };\n }\n\n async setQuestionFee(\n conditionPda: PublicKey,\n mergeFee: BN,\n redeemFee: BN,\n swapFee: BN,\n feeConfigOwner: PublicKey,\n authority: PublicKey,\n payer: PublicKey,\n ): Promise<TxResult> {\n const [feeConfigPda] = PDA.feeConfig(feeConfigOwner, this.programIds);\n const [questionFeePda] = PDA.questionFee(conditionPda, this.programIds);\n\n const sig = await this.program.methods\n .setQuestionFee(\n Array.from(conditionPda.toBytes()),\n mergeFee,\n redeemFee,\n swapFee,\n )\n .accounts({\n authority,\n payer,\n feeConfig: feeConfigPda,\n questionFee: questionFeePda,\n systemProgram: SystemProgram.programId,\n })\n .signers([])\n .rpc();\n\n return { signature: sig };\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { Keypair, PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY, Transaction } from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport { TxResult } from \"../types\";\n\nexport interface PresaleInfo {\n version: number;\n questionMarketConfig: PublicKey;\n presaleIndex: anchor.BN;\n creator: PublicKey;\n currencyMint: PublicKey;\n qtMint: PublicKey;\n price: anchor.BN;\n startTime: anchor.BN;\n endTime: anchor.BN;\n status: \"pending\" | \"approved\" | \"rejected\";\n soldTokenAmount: anchor.BN;\n initialTokenAmountCreator: anchor.BN;\n agentsRev: number;\n companyRev: number;\n referralAddress: PublicKey;\n companyAddress: PublicKey;\n isDistributeRevenue: boolean;\n creatorClaimableRevenue: anchor.BN;\n bump: number;\n}\n\nexport interface UserBuyRecord {\n user: PublicKey;\n presale: PublicKey;\n currencyAmount: anchor.BN;\n bump: number;\n}\n\nexport class PresaleClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds,\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n presalePda(questionMarketConfig: PublicKey, presaleIndex: anchor.BN): PublicKey {\n return PDA.presale(questionMarketConfig, presaleIndex, this.programIds)[0];\n }\n\n qtMintPda(presalePda: PublicKey): PublicKey {\n return PDA.qtMint(presalePda, this.programIds)[0];\n }\n\n qtAuthorityPda(presalePda: PublicKey): PublicKey {\n return PDA.qtAuthority(presalePda, this.programIds)[0];\n }\n\n userBuyRecordPda(presalePda: PublicKey, user: PublicKey): PublicKey {\n return PDA.userBuyRecord(presalePda, user, this.programIds)[0];\n }\n\n /**\n * Buy MST tokens during presale.\n * qtAmount: amount of MST to receive (9 decimals).\n * USDC cost = qtAmount * price / 1e9.\n */\n async buy(\n presalePda: PublicKey,\n qtAmount: anchor.BN,\n buyer: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n signers: Keypair[] = [],\n ): Promise<TxResult> {\n const presale = await this.fetchPresale(presalePda);\n if (!presale) throw new Error(`Presale not found: ${presalePda.toBase58()}`);\n\n const qtMint = presale.qtMint;\n const currencyMint = presale.currencyMint;\n const qtAuthority = this.qtAuthorityPda(presalePda);\n const userBuyRecord = this.userBuyRecordPda(presalePda, buyer);\n\n const buyerQtAta = getAssociatedTokenAddressSync(qtMint, buyer);\n const buyerCurrencyAta = getAssociatedTokenAddressSync(currencyMint, buyer);\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n\n const sig = await this.program.methods\n .buy(qtAmount)\n .accounts({\n buyer,\n payer,\n presale: presalePda,\n qtMint,\n qtAuthority,\n buyerQtAta,\n buyerCurrencyAta,\n presaleVault,\n currencyMint,\n userBuyRecord,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .signers(signers).rpc();\n return { signature: sig };\n }\n\n /**\n * Refund: burn user's MST and return USDC.\n * Only callable when presale status = Rejected.\n */\n async refund(\n presalePda: PublicKey,\n user: PublicKey = this.walletPubkey,\n signers: Keypair[] = [],\n ): Promise<TxResult> {\n const presale = await this.fetchPresale(presalePda);\n if (!presale) throw new Error(`Presale not found: ${presalePda.toBase58()}`);\n\n const qtMint = presale.qtMint;\n const currencyMint = presale.currencyMint;\n const userBuyRecord = this.userBuyRecordPda(presalePda, user);\n\n const userQtAta = getAssociatedTokenAddressSync(qtMint, user);\n const userCurrencyAta = getAssociatedTokenAddressSync(currencyMint, user);\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n\n const sig = await this.program.methods\n .refund()\n .accounts({\n user,\n presale: presalePda,\n qtMint,\n userQtAta,\n userCurrencyAta,\n presaleVault,\n currencyMint,\n userBuyRecord,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .signers(signers).rpc();\n return { signature: sig };\n }\n\n /**\n * Creator claims their share of presale revenue after distribute_presale_revenue.\n */\n async claimRevenue(\n presalePda: PublicKey,\n creator: PublicKey = this.walletPubkey,\n signers: Keypair[] = [],\n ): Promise<TxResult> {\n const presale = await this.fetchPresale(presalePda);\n if (!presale) throw new Error(`Presale not found: ${presalePda.toBase58()}`);\n\n const currencyMint = presale.currencyMint;\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n const creatorCurrencyAta = getAssociatedTokenAddressSync(currencyMint, creator);\n\n const sig = await this.program.methods\n .claimRevenue()\n .accounts({\n creator,\n presale: presalePda,\n presaleVault,\n creatorCurrencyAta,\n currencyMint,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .signers(signers).rpc();\n return { signature: sig };\n }\n\n /**\n * Transfer creator_claimable_revenue (80%) to BOTMM wallet.\n * Call after collectPresaleRevenue (distribute_presale_revenue).\n */\n async distributeBotmmRevenue(\n presalePda: PublicKey,\n botmmAddress: PublicKey,\n currencyMint?: PublicKey,\n ): Promise<Transaction> {\n if (!currencyMint) {\n const presale = await this.fetchPresale(presalePda);\n if (!presale) throw new Error(`Presale not found: ${presalePda.toBase58()}`);\n currencyMint = presale.currencyMint;\n }\n\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n const botmmTokenAccount = getAssociatedTokenAddressSync(currencyMint, botmmAddress);\n\n return this.program.methods\n .distributeBotmmRevenue()\n .accounts({\n presale: presalePda,\n presaleVault,\n currencyMint,\n botmmTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .transaction();\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchPresale(presalePda: PublicKey): Promise<PresaleInfo | null> {\n try {\n const acc = await (this.program.account as any).presaleAccount.fetch(presalePda);\n const rawStatus = acc.status;\n const status: PresaleInfo[\"status\"] =\n rawStatus.approved !== undefined ? \"approved\" :\n rawStatus.rejected !== undefined ? \"rejected\" : \"pending\";\n return {\n version: acc.version,\n questionMarketConfig: acc.questionMarketConfig,\n presaleIndex: acc.presaleIndex,\n creator: acc.creator,\n currencyMint: acc.currencyMint,\n qtMint: acc.qtMint,\n price: acc.price,\n startTime: acc.startTime,\n endTime: acc.endTime,\n status,\n soldTokenAmount: acc.soldTokenAmount,\n initialTokenAmountCreator: acc.initialTokenAmountCreator,\n agentsRev: acc.agentsRev,\n companyRev: acc.companyRev,\n referralAddress: acc.referralAddress,\n companyAddress: acc.companyAddress,\n isDistributeRevenue: acc.isDistributeRevenue,\n creatorClaimableRevenue: acc.creatorClaimableRevenue,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchUserBuyRecord(presalePda: PublicKey, user: PublicKey): Promise<UserBuyRecord | null> {\n try {\n const pda = this.userBuyRecordPda(presalePda, user);\n const acc = await (this.program.account as any).userBuyRecord.fetch(pda);\n return {\n user: acc.user,\n presale: acc.presale,\n currencyAmount: acc.currencyAmount,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { Keypair, PublicKey, SystemProgram } from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport { TxResult } from \"../types\";\n\nexport interface MarketOracleInfo {\n version: number;\n question: PublicKey;\n questionMarketConfig: PublicKey;\n currencyMint: PublicKey;\n creator: PublicKey;\n qtMint: PublicKey;\n feesDistributed: boolean;\n qtTotalSupply: anchor.BN;\n totalClaimed: anchor.BN;\n bump: number;\n}\n\nexport interface UserClaimRecord {\n user: PublicKey;\n marketOracle: PublicKey;\n hasClaimed: boolean;\n bump: number;\n}\n\nexport class MarketOracleClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds,\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n marketOraclePda(questionPda: PublicKey): PublicKey {\n return PDA.marketOraclePda(questionPda, this.programIds)[0];\n }\n\n userClaimRecordPda(marketOraclePda: PublicKey, user: PublicKey): PublicKey {\n return PDA.userClaimRecord(marketOraclePda, user, this.programIds)[0];\n }\n\n /**\n * User burns their MST and claims proportional share of oracle vault USDC.\n * Call after market.collectTradingFee snapshotted qt supply.\n */\n async claimFeesShare(\n marketOraclePda: PublicKey,\n user: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n signers: Keypair[] = [],\n ): Promise<TxResult> {\n const oracle = await this.fetchMarketOracle(marketOraclePda);\n if (!oracle) throw new Error(`MarketOracle not found: ${marketOraclePda.toBase58()}`);\n\n const currencyMint = oracle.currencyMint;\n const qtMint = oracle.qtMint;\n const marketOracleVault = getAssociatedTokenAddressSync(currencyMint, marketOraclePda, true);\n const userQtAta = getAssociatedTokenAddressSync(qtMint, user);\n const userCurrencyAta = getAssociatedTokenAddressSync(currencyMint, user);\n const userClaimRecord = this.userClaimRecordPda(marketOraclePda, user);\n\n const sig = await this.program.methods\n .claimFeesShare()\n .accounts({\n user,\n payer,\n marketOracle: marketOraclePda,\n marketOracleVault,\n currencyMint,\n qtMint,\n userQtAta,\n userCurrencyAta,\n userClaimRecord,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .signers(signers).rpc();\n return { signature: sig };\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchMarketOracle(marketOraclePda: PublicKey): Promise<MarketOracleInfo | null> {\n try {\n const acc = await (this.program.account as any).marketOracleAccount.fetch(marketOraclePda);\n return {\n version: acc.version,\n question: acc.question,\n questionMarketConfig: acc.questionMarketConfig,\n currencyMint: acc.currencyMint,\n creator: acc.creator,\n qtMint: acc.qtMint,\n feesDistributed: acc.feesDistributed,\n qtTotalSupply: acc.qtTotalSupply,\n totalClaimed: acc.totalClaimed,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchUserClaimRecord(marketOraclePda: PublicKey, user: PublicKey): Promise<UserClaimRecord | null> {\n try {\n const pda = this.userClaimRecordPda(marketOraclePda, user);\n const acc = await (this.program.account as any).userClaimRecord.fetch(pda);\n return {\n user: acc.user,\n marketOracle: acc.marketOracle,\n hasClaimed: acc.hasClaimed,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { NetworkConfig, ProgramIds } from \"./config/networks\";\nimport { OracleClient } from \"./programs/oracle\";\nimport { HookClient } from \"./programs/hook\";\nimport { MarketClient } from \"./programs/market\";\nimport { CtfClient } from \"./programs/ctf\";\nimport { ClobClient } from \"./programs/clob\";\nimport { FeeManagementClient } from \"./programs/fee_management\";\nimport { PresaleClient } from \"./programs/presale\";\nimport { MarketOracleClient } from \"./programs/market_oracle\";\n\nimport oracleIdl from \"./idls/oracle.json\";\nimport hookIdl from \"./idls/hook.json\";\nimport questionMarketIdl from \"./idls/question_market.json\";\nimport conditionalTokensIdl from \"./idls/conditional_tokens.json\";\nimport clobExchangeIdl from \"./idls/clob_exchange.json\";\nimport feeManagementIdl from \"./idls/fee_management.json\";\nimport presaleIdl from \"./idls/presale.json\";\nimport marketOracleIdl from \"./idls/market_oracle.json\";\n\nexport class XMarketSDK {\n readonly provider: anchor.AnchorProvider;\n readonly networkConfig: NetworkConfig;\n\n private readonly _programIds: ProgramIds;\n private readonly _marketOwner: PublicKey;\n\n private _oracle?: OracleClient;\n private _hook?: HookClient;\n private _market?: MarketClient;\n private _ctf?: CtfClient;\n private _clob?: ClobClient;\n private _fee?: FeeManagementClient;\n private _presale?: PresaleClient;\n private _marketOracle?: MarketOracleClient;\n\n constructor(\n config: NetworkConfig,\n wallet: anchor.Wallet,\n marketOwner?: PublicKey,\n ) {\n this.networkConfig = config;\n this.provider = new anchor.AnchorProvider(\n new Connection(config.rpcUrl, \"confirmed\"),\n wallet,\n { commitment: \"confirmed\", preflightCommitment: \"confirmed\" },\n );\n anchor.setProvider(this.provider);\n this._programIds = config.programIds;\n this._marketOwner = marketOwner ?? wallet.publicKey;\n }\n\n private _withAddress(idl: object, address: PublicKey): anchor.Idl {\n return { ...idl, address: address.toBase58() } as anchor.Idl;\n }\n\n get oracle(): OracleClient {\n if (!this._oracle) {\n const program = new anchor.Program(this._withAddress(oracleIdl, this._programIds.oracle), this.provider);\n this._oracle = new OracleClient(program, this.provider, this._programIds);\n }\n return this._oracle;\n }\n\n get hook(): HookClient {\n if (!this._hook) {\n const program = new anchor.Program(this._withAddress(hookIdl, this._programIds.hook), this.provider);\n this._hook = new HookClient(program, this.provider, this._programIds);\n }\n return this._hook;\n }\n\n get market(): MarketClient {\n if (!this._market) {\n const program = new anchor.Program(this._withAddress(questionMarketIdl, this._programIds.questionMarket), this.provider);\n this._market = new MarketClient(program, this.provider, this._programIds, this._marketOwner);\n this._market.ctfClient = this.ctf;\n }\n return this._market;\n }\n\n get ctf(): CtfClient {\n if (!this._ctf) {\n const program = new anchor.Program(this._withAddress(conditionalTokensIdl, this._programIds.conditionalTokens), this.provider);\n this._ctf = new CtfClient(program, this.provider, this._programIds);\n }\n return this._ctf;\n }\n\n get clob(): ClobClient {\n if (!this._clob) {\n const program = new anchor.Program(this._withAddress(clobExchangeIdl, this._programIds.clobExchange), this.provider);\n this._clob = new ClobClient(program, this.provider, this._programIds, this.networkConfig);\n if (this.networkConfig.feeConfigOwner && this._programIds.feeManagement) {\n this._clob.feeConfigOwner = this.networkConfig.feeConfigOwner;\n this._clob.feeClient = this.fee;\n }\n }\n return this._clob;\n }\n\n get fee(): FeeManagementClient {\n if (!this._fee) {\n if (!this._programIds.feeManagement) throw new Error(\"feeManagement program ID not configured in NetworkConfig\");\n const program = new anchor.Program(this._withAddress(feeManagementIdl, this._programIds.feeManagement), this.provider);\n this._fee = new FeeManagementClient(program, this.provider, this._programIds);\n }\n return this._fee;\n }\n\n get presale(): PresaleClient {\n if (!this._presale) {\n if (!this._programIds.presale) throw new Error(\"presale program ID not configured in NetworkConfig\");\n const program = new anchor.Program(this._withAddress(presaleIdl, this._programIds.presale), this.provider);\n this._presale = new PresaleClient(program, this.provider, this._programIds);\n }\n return this._presale;\n }\n\n get marketOracle(): MarketOracleClient {\n if (!this._marketOracle) {\n if (!this._programIds.marketOracle) throw new Error(\"marketOracle program ID not configured in NetworkConfig\");\n const program = new anchor.Program(this._withAddress(marketOracleIdl, this._programIds.marketOracle), this.provider);\n this._marketOracle = new MarketOracleClient(program, this.provider, this._programIds);\n }\n return this._marketOracle;\n }\n}\n","/**\n * High-level order utilities — build, sign, serialize, verify, detect match type.\n *\n * These helpers layer on top of the low-level `signing.ts` primitives and\n * provide a convenient interface for both the browser (wallet adapters) and\n * Node.js (Keypair-based) environments.\n */\nimport { Keypair, PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport * as nacl from \"tweetnacl\";\nimport { Order, SignedOrder, InvalidParamError } from \"./types\";\nimport { serializeOrderToBytes, signOrder } from \"./signing\";\n\n// ─── Order factory ────────────────────────────────────────────────────────────\n\n/**\n * Build a fully-populated Order.\n * Sets `signer = maker` (proxy not yet supported).\n * `taker` defaults to new PublicKey(new Uint8Array(32)) (public order).\n * `createdAt` defaults to current Unix timestamp.\n * `fee` defaults to 0 (use global fee_rate_bps).\n */\nexport function buildOrder(params: {\n maker: PublicKey;\n condition: PublicKey;\n tokenId: number;\n side: number;\n makerAmount: BN;\n takerAmount: BN;\n nonce?: BN;\n expiry?: BN;\n createdAt?: BN;\n fee?: BN;\n taker?: PublicKey;\n}): Order {\n return {\n maker: params.maker,\n condition: params.condition,\n tokenId: params.tokenId,\n side: params.side,\n makerAmount: params.makerAmount,\n takerAmount: params.takerAmount,\n nonce: params.nonce ?? new BN(Date.now()),\n expiry: params.expiry ?? new BN(0),\n createdAt: params.createdAt ?? new BN(Math.floor(Date.now() / 1000)),\n fee: params.fee ?? new BN(0),\n taker: params.taker ?? new PublicKey(new Uint8Array(32)),\n signer: params.maker,\n };\n}\n\n// ─── Signing helpers ──────────────────────────────────────────────────────────\n\n/**\n * Sign an order with a Keypair.\n * Uses Ed25519 (nacl.sign.detached) over the 178-byte canonical message.\n */\nexport function signOrderWithKeypair(order: Order, keypair: Keypair): SignedOrder {\n const message = serializeOrderToBytes(order);\n const signature = nacl.sign.detached(message, keypair.secretKey);\n return { order, signature };\n}\n\n/** Return the 178-byte canonical message that gets signed for an order. */\nexport function getOrderSignBytes(order: Order): Uint8Array {\n return serializeOrderToBytes(order);\n}\n\n// ─── Serialization ────────────────────────────────────────────────────────────\n\n/** Serialize a SignedOrder to bytes: 178 (order) + 64 (sig) = 242 bytes. */\nexport function serializeSignedOrder(signed: SignedOrder): Uint8Array {\n const orderBytes = serializeOrderToBytes(signed.order);\n const buf = new Uint8Array(242);\n buf.set(orderBytes, 0);\n buf.set(signed.signature, 178);\n return buf;\n}\n\n/**\n * Deserialize 242 bytes back to a SignedOrder.\n * Field layout mirrors `serializeOrderToBytes()` + 64-byte signature.\n */\nexport function deserializeSignedOrder(bytes: Uint8Array): SignedOrder {\n if (bytes.length !== 242) throw new InvalidParamError(\"SignedOrder must be 242 bytes\");\n\n const readPubkey = (offset: number) => new PublicKey(bytes.slice(offset, offset + 32));\n const readU64 = (offset: number) => new BN(bytes.slice(offset, offset + 8), \"le\");\n const readI64 = (offset: number) => new BN(bytes.slice(offset, offset + 8), \"le\");\n\n const order: Order = {\n maker: readPubkey(0),\n condition: readPubkey(32),\n tokenId: bytes[64],\n side: bytes[65],\n makerAmount: readU64(66),\n takerAmount: readU64(74),\n nonce: readU64(82),\n expiry: readI64(90),\n createdAt: readI64(98),\n fee: readU64(106),\n taker: readPubkey(114),\n signer: readPubkey(146),\n };\n const signature = bytes.slice(178, 242);\n return { order, signature };\n}\n\n// ─── Verification ─────────────────────────────────────────────────────────────\n\n/**\n * Verify the Ed25519 signature on a signed order.\n * Returns true only if the signature is valid for `order.maker` (or `order.signer`).\n */\nexport function verifySignedOrder(signed: SignedOrder): boolean {\n const message = serializeOrderToBytes(signed.order);\n return nacl.sign.detached.verify(\n message,\n signed.signature,\n signed.order.signer.toBytes(),\n );\n}\n\n// ─── Match type detection ─────────────────────────────────────────────────────\n\nexport type MatchType = \"COMPLEMENTARY\" | \"MINT\" | \"MERGE\";\n\n/**\n * Detect the match type from two orders (pure, no RPC).\n *\n * | tokenId A === B | sides | type |\n * |-----------------|--------------|---------------|\n * | yes | one BUY+SELL | COMPLEMENTARY |\n * | no | both BUY | MINT |\n * | no | both SELL | MERGE |\n */\nexport function detectMatchType(a: Order | SignedOrder, b: Order | SignedOrder): MatchType {\n const _a = \"order\" in a ? a.order : a;\n const _b = \"order\" in b ? b.order : b;\n return _detectMatchType(_a, _b);\n}\n\nfunction _detectMatchType(a: Order, b: Order): MatchType {\n const SIDE_BUY = 0;\n const SIDE_SELL = 1;\n\n if (a.tokenId === b.tokenId) {\n const aBuy = a.side === SIDE_BUY;\n const bBuy = b.side === SIDE_BUY;\n if (aBuy !== bBuy) return \"COMPLEMENTARY\";\n throw new InvalidParamError(\n \"Orders with same tokenId must be one BUY and one SELL (COMPLEMENTARY)\"\n );\n }\n\n const aBuy = a.side === SIDE_BUY;\n const bBuy = b.side === SIDE_BUY;\n if (aBuy && bBuy) return \"MINT\";\n if (!aBuy && !bBuy) return \"MERGE\";\n throw new InvalidParamError(\n \"Orders with different tokenIds must both be BUY (MINT) or both SELL (MERGE)\"\n );\n}\n\nexport { signOrder };\n","/**\n * SPL Token / Token-2022 approve utilities for the CLOB matching flow.\n *\n * Before a match instruction can transfer tokens on behalf of a user, the user\n * must approve the CLOB config PDA as a delegate. These helpers build the\n * approve transactions that need two signers:\n * - signer = the token owner (user wallet — must sign the approve instruction)\n * - payer = the BE wallet (pays transaction fees)\n *\n * Both must sign the resulting Transaction before sending.\n */\nimport {\n PublicKey,\n Transaction,\n SystemProgram,\n} from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n createApproveInstruction,\n} from \"@solana/spl-token\";\nimport BN from \"bn.js\";\nimport { PDA } from \"./pda\";\nimport { ProgramIds } from \"./config/networks\";\n\n/** Maximum u64 — approve \"unlimited\" amount. */\nexport const MAX_APPROVE_AMOUNT = new BN(\"18446744073709551615\");\n\n// ─── Collateral (SPL Token) approve ──────────────────────────────────────────\n\n/**\n * Build a Transaction that approves the CLOB config PDA to transfer collateral\n * (USDC) from the signer's ATA.\n *\n * Required signers: signer (token owner), payer (fee payer).\n *\n * @param collateralMint - e.g. USDC mint\n * @param signer - token owner (must sign)\n * @param payer - fee payer wallet pubkey\n * @param delegate - clob config PDA (the spender)\n * @param amount - amount to approve (defaults to MAX_APPROVE_AMOUNT)\n */\nexport function buildApproveCollateralTx(\n collateralMint: PublicKey,\n signer: PublicKey,\n payer: PublicKey,\n delegate: PublicKey,\n amount: BN = MAX_APPROVE_AMOUNT,\n): Transaction {\n const ownerAta = getAssociatedTokenAddressSync(collateralMint, signer, false, TOKEN_PROGRAM_ID);\n const approveIx = createApproveInstruction(\n ownerAta,\n delegate,\n signer,\n BigInt(amount.toString()),\n [],\n TOKEN_PROGRAM_ID,\n );\n const tx = new Transaction();\n tx.feePayer = payer;\n tx.add(approveIx);\n return tx;\n}\n\n/**\n * Build a Transaction that approves the CLOB config PDA to transfer BOTH\n * YES and NO outcome tokens from the signer's ATAs (two approve instructions).\n *\n * Required signers: signer (token owner), payer (fee payer).\n */\nexport function buildApproveAllOutcomeTokensTx(\n condition: PublicKey,\n signer: PublicKey,\n payer: PublicKey,\n delegate: PublicKey,\n programIds: ProgramIds,\n amount: BN = MAX_APPROVE_AMOUNT,\n): Transaction {\n const [yesMint] = PDA.yesMint(condition, programIds);\n const [noMint] = PDA.noMint(condition, programIds);\n\n const yesAta = getAssociatedTokenAddressSync(yesMint, signer, false, TOKEN_2022_PROGRAM_ID);\n const noAta = getAssociatedTokenAddressSync(noMint, signer, false, TOKEN_2022_PROGRAM_ID);\n const amountBig = BigInt(amount.toString());\n\n const approveYesIx = createApproveInstruction(\n yesAta, delegate, signer, amountBig, [], TOKEN_2022_PROGRAM_ID,\n );\n const approveNoIx = createApproveInstruction(\n noAta, delegate, signer, amountBig, [], TOKEN_2022_PROGRAM_ID,\n );\n\n const tx = new Transaction();\n tx.feePayer = payer;\n tx.add(approveYesIx, approveNoIx);\n return tx;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/pda.ts","../src/programs/oracle.ts","../src/programs/hook.ts","../src/types.ts","../src/programs/market.ts","../src/programs/ctf.ts","../src/signing.ts","../src/programs/clob.ts","../src/programs/fee_management.ts","../src/programs/presale.ts","../src/programs/market_oracle.ts","../src/sdk.ts","../src/order.ts","../src/approve.ts"],"names":["PublicKey","createHash","SystemProgram","anchor","TOKEN_2022_PROGRAM_ID","QuestionStatus","anchor2","SYSVAR_RENT_PUBKEY","getAssociatedTokenAddressSync","TOKEN_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","anchor3","TransactionInstruction","Ed25519Program","SYSVAR_INSTRUCTIONS_PUBKEY","AddressLookupTableProgram","Transaction","TransactionMessage","VersionedTransaction","anchor4","Connection","oracleIdl","hookIdl","questionMarketIdl","conditionalTokensIdl","clobExchangeIdl","feeManagementIdl","presaleIdl","marketOracleIdl","BN","nacl","aBuy","bBuy","createApproveInstruction"],"mappings":"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","file":"index.js","sourcesContent":["import { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport { createHash } from \"crypto\";\nimport { ProgramIds } from \"./config/networks\";\n\n// ─── PDA Seeds ────────────────────────────────────────────────────────────────\n// These are constants — they don't change per network.\n\nexport const SEEDS = {\n config: Buffer.from(\"config\"),\n question: Buffer.from(\"question\"),\n condition: Buffer.from(\"condition\"),\n collateralVault: Buffer.from(\"collateral_vault\"),\n vaultToken: Buffer.from(\"vault_token\"),\n position: Buffer.from(\"position\"),\n yesMint: Buffer.from(\"yes_mint\"),\n noMint: Buffer.from(\"no_mint\"),\n mintAuthority: Buffer.from(\"mint_authority\"),\n reporter: Buffer.from(\"reporter\"),\n result: Buffer.from(\"result\"),\n ctfConfig: Buffer.from(\"ctf_config\"),\n hookConfig: Buffer.from(\"hook_config\"),\n extraAccountMetas: Buffer.from(\"extra-account-metas\"),\n clobConfig: Buffer.from(\"clob_config\"),\n order: Buffer.from(\"order\"),\n feeConfig: Buffer.from(\"fee_config\"),\n questionFee: Buffer.from(\"question_fee\"),\n marketFee: Buffer.from(\"market_fee\"),\n // Presale\n presale: Buffer.from(\"presale\"),\n qtMint: Buffer.from(\"qt_mint\"),\n qtAuthority: Buffer.from(\"qt_authority\"),\n userBuy: Buffer.from(\"user_buy\"),\n // Market Oracle\n marketOracle: Buffer.from(\"market_oracle\"),\n userClaim: Buffer.from(\"user_claim\"),\n} as const;\n\n// ─── PDA derivation helpers ───────────────────────────────────────────────────\n// All methods require explicit programIds — no hidden globals.\n\nexport class PDA {\n // ─── Question Market ────────────────────────────────────────────────────────\n\n static questionMarketConfig(\n owner: PublicKey,\n programIds: Pick<ProgramIds, \"questionMarket\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.config, owner.toBuffer()],\n programIds.questionMarket\n );\n }\n\n static question(\n config: PublicKey,\n questionId: Uint8Array,\n programIds: Pick<ProgramIds, \"questionMarket\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.question, config.toBuffer(), Buffer.from(questionId)],\n programIds.questionMarket\n );\n }\n\n // ─── Conditional Tokens ─────────────────────────────────────────────────────\n\n static ctfConfig(\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.ctfConfig],\n programIds.conditionalTokens\n );\n }\n\n static condition(\n oracle: PublicKey,\n questionId: Uint8Array,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.condition, oracle.toBuffer(), Buffer.from(questionId)],\n programIds.conditionalTokens\n );\n }\n\n static collateralVault(\n collateralMint: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.collateralVault, collateralMint.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n static vaultToken(\n collateralMint: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.vaultToken, collateralMint.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n static yesMint(\n condition: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.yesMint, condition.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n static noMint(\n condition: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.noMint, condition.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n static mintAuthority(\n condition: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.mintAuthority, condition.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n static position(\n condition: PublicKey,\n outcomeIndex: number,\n owner: PublicKey,\n programIds: Pick<ProgramIds, \"conditionalTokens\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.position, condition.toBuffer(), Buffer.from([outcomeIndex]), owner.toBuffer()],\n programIds.conditionalTokens\n );\n }\n\n // ─── Oracle ─────────────────────────────────────────────────────────────────\n\n static oracleConfig(\n owner: PublicKey,\n programIds: Pick<ProgramIds, \"oracle\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.config, owner.toBuffer()],\n programIds.oracle\n );\n }\n\n static reporter(\n oracleConfig: PublicKey,\n reporterAddress: PublicKey,\n programIds: Pick<ProgramIds, \"oracle\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.reporter, oracleConfig.toBuffer(), reporterAddress.toBuffer()],\n programIds.oracle\n );\n }\n\n static questionResult(\n oracleConfig: PublicKey,\n questionId: Uint8Array,\n programIds: Pick<ProgramIds, \"oracle\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.result, oracleConfig.toBuffer(), Buffer.from(questionId)],\n programIds.oracle\n );\n }\n\n // ─── Hook ───────────────────────────────────────────────────────────────────\n\n static hookConfig(\n programIds: Pick<ProgramIds, \"hook\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.hookConfig],\n programIds.hook\n );\n }\n\n static extraAccountMetaList(\n mint: PublicKey,\n programIds: Pick<ProgramIds, \"hook\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.extraAccountMetas, mint.toBuffer()],\n programIds.hook\n );\n }\n\n // ─── CLOB ───────────────────────────────────────────────────────────────────\n\n static clobConfig(\n programIds: Pick<ProgramIds, \"clobExchange\">\n ): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [SEEDS.clobConfig],\n programIds.clobExchange\n );\n }\n\n static orderStatus(\n maker: PublicKey,\n nonce: BN,\n programIds: Pick<ProgramIds, \"clobExchange\">\n ): [PublicKey, number] {\n const nonceBuf = Buffer.alloc(8);\n nonceBuf.writeBigUInt64LE(BigInt(nonce.toString()));\n return PublicKey.findProgramAddressSync(\n [SEEDS.order, maker.toBuffer(), nonceBuf],\n programIds.clobExchange\n );\n }\n\n // ─── Fee Management ─────────────────────────────────────────────────────────\n\n static feeConfig(\n owner: PublicKey,\n programIds: Pick<ProgramIds, \"feeManagement\">\n ): [PublicKey, number] {\n if (!programIds.feeManagement) throw new Error(\"feeManagement program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.feeConfig, owner.toBuffer()],\n programIds.feeManagement\n );\n }\n\n static questionFee(\n conditionPda: PublicKey,\n programIds: Pick<ProgramIds, \"feeManagement\">\n ): [PublicKey, number] {\n if (!programIds.feeManagement) throw new Error(\"feeManagement program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.questionFee, conditionPda.toBuffer()],\n programIds.feeManagement\n );\n }\n\n static marketFeeOverride(\n conditionPda: PublicKey,\n programIds: Pick<ProgramIds, \"feeManagement\">\n ): [PublicKey, number] {\n if (!programIds.feeManagement) throw new Error(\"feeManagement program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.marketFee, conditionPda.toBuffer()],\n programIds.feeManagement\n );\n }\n\n // ─── Presale ─────────────────────────────────────────────────────────────────\n\n static presale(\n questionMarketConfig: PublicKey,\n presaleIndex: BN,\n programIds: Pick<ProgramIds, \"presale\">\n ): [PublicKey, number] {\n if (!programIds.presale) throw new Error(\"presale program ID not configured\");\n const idxBuf = Buffer.alloc(8);\n idxBuf.writeBigUInt64LE(BigInt(presaleIndex.toString()));\n return PublicKey.findProgramAddressSync(\n [SEEDS.presale, questionMarketConfig.toBuffer(), idxBuf],\n programIds.presale\n );\n }\n\n static qtMint(\n presalePda: PublicKey,\n programIds: Pick<ProgramIds, \"presale\">\n ): [PublicKey, number] {\n if (!programIds.presale) throw new Error(\"presale program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.qtMint, presalePda.toBuffer()],\n programIds.presale\n );\n }\n\n static qtAuthority(\n presalePda: PublicKey,\n programIds: Pick<ProgramIds, \"presale\">\n ): [PublicKey, number] {\n if (!programIds.presale) throw new Error(\"presale program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.qtAuthority, presalePda.toBuffer()],\n programIds.presale\n );\n }\n\n static userBuyRecord(\n presalePda: PublicKey,\n user: PublicKey,\n programIds: Pick<ProgramIds, \"presale\">\n ): [PublicKey, number] {\n if (!programIds.presale) throw new Error(\"presale program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.userBuy, presalePda.toBuffer(), user.toBuffer()],\n programIds.presale\n );\n }\n\n // ─── Market Oracle ────────────────────────────────────────────────────────────\n\n static marketOraclePda(\n questionPda: PublicKey,\n programIds: Pick<ProgramIds, \"marketOracle\">\n ): [PublicKey, number] {\n if (!programIds.marketOracle) throw new Error(\"marketOracle program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.marketOracle, questionPda.toBuffer()],\n programIds.marketOracle\n );\n }\n\n static userClaimRecord(\n marketOraclePda: PublicKey,\n user: PublicKey,\n programIds: Pick<ProgramIds, \"marketOracle\">\n ): [PublicKey, number] {\n if (!programIds.marketOracle) throw new Error(\"marketOracle program ID not configured\");\n return PublicKey.findProgramAddressSync(\n [SEEDS.userClaim, marketOraclePda.toBuffer(), user.toBuffer()],\n programIds.marketOracle\n );\n }\n}\n\n// ─── Utilities ────────────────────────────────────────────────────────────────\n\n/** Unique 32-byte question ID: SHA-256(content + timestamp). Different each call. */\nexport function generateQuestionId(content: string, salt?: number): Uint8Array {\n const input = content + (salt ?? Date.now());\n return new Uint8Array(createHash(\"sha256\").update(input).digest());\n}\n\n/** Deterministic 32-byte content hash: SHA-256(content). Same content = same hash. */\nexport function generateContentHash(content: string): Uint8Array {\n return new Uint8Array(createHash(\"sha256\").update(content).digest());\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { PublicKey, SystemProgram, Transaction } from \"@solana/web3.js\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport { OracleConfig, QuestionResult, TxResult } from \"../types\";\n\nexport class OracleClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n configPda(owner: PublicKey = this.walletPubkey): PublicKey {\n return PDA.oracleConfig(owner, this.programIds)[0];\n }\n\n // ─── Instructions ────────────────────────────────────────────────────────────\n\n /** One-time setup. Caller becomes owner. */\n async initialize(admin: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .initialize(admin)\n .accounts({\n owner: this.walletPubkey,\n oracleConfig: this.configPda(),\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin or owner adds an address to the oracle resolver whitelist. */\n async addToWhitelist(address: PublicKey, ownerPubkey?: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .addToWhitelist(address)\n .accounts({\n authority: this.walletPubkey,\n payer: this.walletPubkey,\n oracleConfig: this.configPda(ownerPubkey),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin or owner removes an address from the oracle resolver whitelist. */\n async removeFromWhitelist(address: PublicKey, ownerPubkey?: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .removeFromWhitelist(address)\n .accounts({\n authority: this.walletPubkey,\n payer: this.walletPubkey,\n oracleConfig: this.configPda(ownerPubkey),\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Whitelisted reporter resolves a question.\n * reporter signs the instruction; payer covers the tx fee (Kora pattern).\n */\n async resolveQuestion(\n questionId: Uint8Array,\n outcomeCount: number,\n payoutNumerators: number[],\n conditionPda: PublicKey,\n reporter: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n ownerPubkey?: PublicKey,\n ): Promise<Transaction> {\n const oracleConfig = this.configPda(ownerPubkey);\n const [questionResultPda] = PDA.questionResult(oracleConfig, questionId, this.programIds);\n return this.program.methods\n .resolveQuestion(\n Array.from(questionId) as number[],\n outcomeCount,\n payoutNumerators.map((n) => new anchor.BN(n))\n )\n .accounts({\n reporter,\n oracleConfig,\n questionResult: questionResultPda,\n condition: conditionPda,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n payer,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /** Owner updates the admin. */\n async updateAdmin(newAdmin: PublicKey, ownerPubkey?: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .updateAdmin(newAdmin)\n .accounts({\n owner: this.walletPubkey,\n payer: this.walletPubkey,\n oracleConfig: this.configPda(ownerPubkey),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Owner transfers ownership to a new keypair. */\n async transferOwnership(newOwner: PublicKey, ownerPubkey?: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .transferOwnership(newOwner)\n .accounts({\n owner: this.walletPubkey,\n oracleConfig: this.configPda(ownerPubkey),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin or owner pause/unpause the oracle. */\n async pause(paused: boolean, ownerPubkey?: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .pause(paused)\n .accounts({\n authority: this.walletPubkey,\n oracleConfig: this.configPda(ownerPubkey),\n })\n .rpc();\n return { signature: sig };\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchConfig(owner?: PublicKey): Promise<OracleConfig | null> {\n try {\n const acc = await (this.program.account as any).oracleConfig.fetch(\n this.configPda(owner ?? this.walletPubkey)\n );\n return {\n owner: acc.owner,\n admin: acc.admin,\n questionCount: acc.questionCount.toNumber(),\n whitelist: acc.whitelist as PublicKey[],\n whitelistLen: acc.whitelistLen,\n isPaused: acc.isPaused,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchQuestionResult(\n questionId: Uint8Array,\n ownerPubkey?: PublicKey\n ): Promise<QuestionResult | null> {\n try {\n const oracleConfig = this.configPda(ownerPubkey);\n const [pda] = PDA.questionResult(oracleConfig, questionId, this.programIds);\n const acc = await (this.program.account as any).questionResult.fetch(pda);\n return {\n oracleConfig: acc.oracleConfig,\n questionId: new Uint8Array(acc.questionId),\n outcomeIndex: acc.outcomeIndex,\n outcomeCount: acc.outcomeCount,\n payoutNumerators: acc.payoutNumerators,\n isResolved: acc.isResolved,\n resolvedAt: acc.resolvedAt.toNumber(),\n reporter: acc.reporter,\n condition: acc.condition ?? null,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { PublicKey, SystemProgram } from \"@solana/web3.js\";\nimport { TOKEN_2022_PROGRAM_ID } from \"@solana/spl-token\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport { HookConfig, TxResult } from \"../types\";\n\nexport class HookClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n configPda(): PublicKey {\n return PDA.hookConfig(this.programIds)[0];\n }\n\n // ─── Instructions ────────────────────────────────────────────────────────────\n\n /** One-time setup. Caller becomes owner. */\n async initialize(initialWhitelist: PublicKey[]): Promise<TxResult> {\n const sig = await this.program.methods\n .initializeHookConfig(initialWhitelist)\n .accounts({\n owner: this.walletPubkey,\n hookConfig: this.configPda(),\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Register extra account metas for a Token-2022 YES/NO mint.\n * Must be called once per mint after CTF creates it.\n */\n async initializeExtraAccountMetaList(mint: PublicKey): Promise<TxResult> {\n const [extraAccountMetaList] = PDA.extraAccountMetaList(mint, this.programIds);\n const sig = await this.program.methods\n .initializeExtraAccountMetaList()\n .accounts({\n payer: this.walletPubkey,\n extraAccountMetaList,\n mint,\n hookConfig: this.configPda(),\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Owner adds a program to the transfer whitelist. */\n async addToWhitelist(program: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .addToWhitelist(program)\n .accounts({\n owner: this.walletPubkey,\n hookConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Owner removes a program from the transfer whitelist. */\n async removeFromWhitelist(program: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .removeFromWhitelist(program)\n .accounts({\n owner: this.walletPubkey,\n hookConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Permanently freeze the whitelist — no further changes allowed. */\n async freezeWhitelist(): Promise<TxResult> {\n const sig = await this.program.methods\n .freezeWhitelist()\n .accounts({\n owner: this.walletPubkey,\n hookConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * SPL Transfer-Hook `execute` — invoked automatically by Token-2022 on every\n * YES/NO token transfer. Validates the destination against the whitelist.\n *\n * Calling this directly is useful for:\n * - Off-chain simulation (\"would this transfer be allowed?\")\n * - Integration tests that verify whitelist enforcement\n *\n * Token-2022 calls this automatically; you normally don't call it manually.\n *\n * @param sourceToken - Source token account (tokens leaving)\n * @param mint - The YES/NO Token-2022 mint\n * @param destinationToken - Destination token account (tokens arriving)\n * @param owner - Authority that authorized the transfer\n * @param amount - Token amount being transferred\n */\n async execute(\n sourceToken: PublicKey,\n mint: PublicKey,\n destinationToken: PublicKey,\n owner: PublicKey,\n amount: anchor.BN\n ): Promise<TxResult> {\n const [extraAccountMetaList] = PDA.extraAccountMetaList(mint, this.programIds);\n const sig = await this.program.methods\n .execute(amount)\n .accounts({\n sourceToken,\n mint,\n destinationToken,\n owner,\n extraAccountMetaList,\n hookConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchConfig(): Promise<HookConfig | null> {\n try {\n const acc = await (this.program.account as any).hookConfig.fetch(this.configPda());\n return {\n owner: acc.owner,\n whitelist: acc.whitelist as PublicKey[],\n whitelistLen: acc.whitelistLen,\n isFrozen: acc.isFrozen,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async isWhitelisted(program: PublicKey): Promise<boolean> {\n const config = await this.fetchConfig();\n if (!config) return false;\n return config.whitelist.some((p) => p.equals(program));\n }\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\n// ─── Shared ───────────────────────────────────────────────────────────────────\n\nexport interface TxResult {\n signature: string;\n}\n\n// ─── Oracle ───────────────────────────────────────────────────────────────────\n\nexport interface OracleConfig {\n owner: PublicKey;\n admin: PublicKey;\n questionCount: number;\n whitelist: PublicKey[];\n whitelistLen: number;\n isPaused: boolean;\n bump: number;\n}\n\nexport interface QuestionResult {\n oracleConfig: PublicKey;\n questionId: Uint8Array;\n outcomeIndex: number;\n outcomeCount: number;\n payoutNumerators: BN[];\n isResolved: boolean;\n resolvedAt: number;\n reporter: PublicKey;\n condition: PublicKey | null;\n bump: number;\n}\n\n// ─── Conditional Tokens ───────────────────────────────────────────────────────\n\nexport interface Condition {\n oracle: PublicKey;\n questionId: Uint8Array;\n outcomeSlotCount: number;\n payoutNumerators: BN[];\n payoutDenominator: BN;\n totalCollateral: BN;\n collateralMint: PublicKey;\n collateralVault: PublicKey;\n yesMint: PublicKey;\n noMint: PublicKey;\n hookProgram: PublicKey;\n authorizedClob: PublicKey;\n isResolved: boolean;\n resolvedAt: number;\n bump: number;\n}\n\nexport interface CollateralVault {\n collateralMint: PublicKey;\n vaultTokenAccount: PublicKey;\n totalLocked: BN;\n conditionCount: BN;\n bump: number;\n vaultBump: number;\n}\n\nexport interface Position {\n owner: PublicKey;\n condition: PublicKey;\n outcomeIndex: number;\n balance: BN;\n bump: number;\n}\n\n// ─── Question Market ──────────────────────────────────────────────────────────\n\nexport enum QuestionStatus {\n Pending = \"pending\",\n Approved = \"approved\",\n Rejected = \"rejected\",\n Resolved = \"resolved\",\n}\n\nexport interface QuestionMarketConfig {\n owner: PublicKey;\n admin: PublicKey;\n oracle: PublicKey;\n conditionalTokensProgram: PublicKey;\n questionCount: number;\n approvedCount: number;\n rejectedCount: number;\n presaleCount: number;\n whitelist: PublicKey[];\n whitelistLen: number;\n isPaused: boolean;\n bump: number;\n}\n\nexport interface Question {\n config: PublicKey;\n questionId: Uint8Array;\n contentHash: Uint8Array;\n expirationTime: number;\n currencyMint: PublicKey;\n creator: PublicKey;\n condition: PublicKey | null;\n status: QuestionStatus;\n createdAt: number;\n approvedAt: number;\n resolvedAt: number;\n bump: number;\n}\n\nexport interface CreateQuestionParams {\n /** Human-readable question text — used to derive questionId + contentHash */\n content: string;\n /** Expiration as Unix timestamp */\n expirationTime: number;\n /** Collateral mint (e.g. USDC) */\n collateralMint: PublicKey;\n /** Hook program ID for Token-2022 transfer enforcement */\n hookProgram: PublicKey;\n /** Authorized CLOB program ID */\n authorizedClob: PublicKey;\n /** Override auto-generated questionId */\n questionId?: Uint8Array;\n /** Override auto-generated contentHash */\n contentHash?: Uint8Array;\n}\n\n// ─── Conditional Tokens (CtfConfig) ──────────────────────────────────────────\n\nexport interface CtfConfig {\n owner: PublicKey;\n bump: number;\n}\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\nexport interface HookConfig {\n owner: PublicKey;\n whitelist: PublicKey[];\n whitelistLen: number;\n isFrozen: boolean;\n bump: number;\n}\n\n// ─── CLOB Exchange ────────────────────────────────────────────────────────────\n\nexport interface ClobConfig {\n owner: PublicKey;\n operators: PublicKey[];\n operatorsLen: number;\n feeRecipient: PublicKey;\n feeRateBps: number;\n conditionalTokensProgram: PublicKey;\n isPaused: boolean;\n bump: number;\n}\n\nexport interface ClobWhitelistEntry {\n address: PublicKey;\n bump: number;\n}\n\nexport interface OrderStatus {\n maker: PublicKey;\n nonce: BN;\n filledAmount: BN;\n isCancelled: boolean;\n bump: number;\n}\n\n// ─── Fee Management ───────────────────────────────────────────────────────────\n\n/** Per-question fee rates, all out of FEE_DENOMINATOR (1_000_000). E.g. 2_000 = 0.2% */\nexport interface QuestionFee {\n conditionId: Uint8Array;\n mergeFee: BN;\n redeemFee: BN;\n swapFee: BN;\n bump: number;\n}\n\nexport const FEE_DENOMINATOR = 1_000_000;\n\n/**\n * Off-chain order struct passed as instruction data.\n * Operator validates + submits matched order pairs on-chain.\n *\n * Semantics (mirrors EVM makerAmount/takerAmount):\n * BUY (side=0): makerAmount = USDC paid, takerAmount = CTF tokens received\n * SELL (side=1): makerAmount = CTF tokens given, takerAmount = USDC received\n */\nexport interface Order {\n /** Maker's wallet public key */\n maker: PublicKey;\n /** Condition PDA this order belongs to */\n condition: PublicKey;\n /** Outcome token: 0 = NO, 1 = YES */\n tokenId: number;\n /** Side: 0 = BUY (give USDC, want tokens), 1 = SELL (give tokens, want USDC) — matches EVM convention */\n side: number;\n /** Amount the maker puts in: BUY → USDC, SELL → CTF tokens */\n makerAmount: BN;\n /** Amount the maker wants to receive: BUY → CTF tokens, SELL → USDC */\n takerAmount: BN;\n /** Unique nonce per maker — used for OrderStatus PDA + replay protection */\n nonce: BN;\n /** Unix timestamp expiry (0 = no expiry) */\n expiry: BN;\n /** Creation timestamp (Unix seconds) */\n createdAt: BN;\n /** Fixed USDC amount (9 decimals) taker pays to treasury after all fills. 0 = no fee. Set by operator off-chain. */\n fee: BN;\n /** Directed order: only this pubkey can be counterparty. PublicKey.default() = public */\n taker: PublicKey;\n /** Ed25519 signer key. Must equal maker for now (proxy not supported) */\n signer: PublicKey;\n}\n\n/**\n * Signed order — Order + 64-byte Ed25519 signature over serializeOrderToBytes().\n * This is the on-chain instruction data type for all match_* instructions.\n */\nexport interface SignedOrder {\n order: Order;\n /** Ed25519 signature (64 bytes) from order.maker over serializeOrderToBytes() */\n signature: Uint8Array;\n}\n\n// ─── Errors ───────────────────────────────────────────────────────────────────\n\nexport class XMarketError extends Error {\n constructor(message: string, public code?: string) {\n super(message);\n this.name = \"XMarketError\";\n }\n}\n\nexport class UnauthorizedError extends XMarketError {\n constructor(msg = \"Unauthorized\") {\n super(msg, \"UNAUTHORIZED\");\n this.name = \"UnauthorizedError\";\n }\n}\n\nexport class AccountNotFoundError extends XMarketError {\n constructor(account: string, address?: string) {\n super(`${account} not found${address ? `: ${address}` : \"\"}`, \"NOT_FOUND\");\n this.name = \"AccountNotFoundError\";\n }\n}\n\nexport class InvalidParamError extends XMarketError {\n constructor(msg = \"Invalid parameter\") {\n super(msg, \"INVALID_PARAM\");\n this.name = \"InvalidParamError\";\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY, Transaction } from \"@solana/web3.js\";\n\nconst TOKEN_METADATA_PROGRAM_ID = new PublicKey(\"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\");\nimport {\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { PDA, generateQuestionId, generateContentHash } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport {\n QuestionMarketConfig,\n Question,\n QuestionStatus,\n CreateQuestionParams,\n Position,\n} from \"../types\";\nimport type { CtfClient } from \"./ctf\";\n\nexport class MarketClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n readonly configPda: PublicKey;\n\n /** Injected by XMarketSDK after construction — enables fetchQuestionBalances. */\n ctfClient?: CtfClient;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds,\n ownerPubkey: PublicKey\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n this.configPda = PDA.questionMarketConfig(ownerPubkey, programIds)[0];\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n // ─── Instructions (return Transaction — caller signs + sends) ───────────────\n\n async initialize(\n admin: PublicKey,\n oracle: PublicKey,\n owner: PublicKey = this.walletPubkey\n ): Promise<Transaction> {\n return this.program.methods\n .initialize({\n admin,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n oracle,\n })\n .accounts({\n owner,\n config: this.configPda,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Build createQuestionAdmin transaction (whitelist/admin path — status = Approved immediately).\n * @param creator - Whitelisted creator (must be in whitelist or be admin/owner)\n * @param payer - Fee payer (pays rent; can differ from creator)\n */\n async createQuestionAdmin(\n params: CreateQuestionParams,\n oracle: PublicKey,\n creator: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey\n ): Promise<{ tx: Transaction; questionPda: PublicKey; conditionPda: PublicKey; questionId: Uint8Array }> {\n const questionId = params.questionId ?? generateQuestionId(params.content);\n const contentHash = params.contentHash ?? generateContentHash(params.content);\n\n const [questionPda] = PDA.question(this.configPda, questionId, this.programIds);\n const [conditionPda] = PDA.condition(oracle, questionId, this.programIds);\n const [yesMint] = PDA.yesMint(conditionPda, this.programIds);\n const [noMint] = PDA.noMint(conditionPda, this.programIds);\n const [mintAuthority] = PDA.mintAuthority(conditionPda, this.programIds);\n const [collateralVault] = PDA.collateralVault(params.collateralMint, this.programIds);\n\n const tx = await this.program.methods\n .createQuestionAdmin({\n questionId: Array.from(questionId) as number[],\n contentHash: Array.from(contentHash) as number[],\n hookProgram: params.hookProgram,\n authorizedClob: params.authorizedClob,\n expirationTime: new anchor.BN(params.expirationTime),\n })\n .accounts({\n creator,\n payer,\n config: this.configPda,\n question: questionPda,\n currencyMint: params.collateralMint,\n oracle,\n condition: conditionPda,\n yesMint,\n noMint,\n mintAuthority,\n collateralVault,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .transaction();\n\n return { tx, questionPda, conditionPda, questionId };\n }\n\n async approveQuestion(\n questionPda: PublicKey,\n admin: PublicKey = this.walletPubkey,\n payer: PublicKey = admin\n ): Promise<Transaction> {\n return this.program.methods\n .approveQuestion()\n .accounts({\n admin,\n payer,\n config: this.configPda,\n question: questionPda,\n })\n .transaction();\n }\n\n async updateConfig(\n params: { newAdmin?: PublicKey; newOracle?: PublicKey; isPaused?: boolean; newConditionalTokensProgram?: PublicKey },\n authority: PublicKey = this.walletPubkey,\n payer: PublicKey = authority\n ): Promise<Transaction> {\n return this.program.methods\n .updateConfig({\n newAdmin: params.newAdmin ?? null,\n newOracle: params.newOracle ?? null,\n isPaused: params.isPaused ?? null,\n newConditionalTokensProgram: params.newConditionalTokensProgram ?? null,\n })\n .accounts({\n authority,\n payer,\n config: this.configPda,\n })\n .transaction();\n }\n\n /** Set the admin (owner only). Replaces any existing admin. */\n async addAdmin(\n newAdmin: PublicKey,\n owner: PublicKey = this.walletPubkey\n ): Promise<Transaction> {\n return this.program.methods\n .addAdmin(newAdmin)\n .accounts({\n owner,\n config: this.configPda,\n })\n .transaction();\n }\n\n /** Clear the admin (owner only). Sets admin to default pubkey. */\n async removeAdmin(\n owner: PublicKey = this.walletPubkey\n ): Promise<Transaction> {\n return this.program.methods\n .removeAdmin()\n .accounts({\n owner,\n config: this.configPda,\n })\n .transaction();\n }\n\n async addToWhitelist(\n address: PublicKey,\n authority: PublicKey = this.walletPubkey,\n payer: PublicKey = authority\n ): Promise<Transaction> {\n return this.program.methods\n .addToWhitelist(address)\n .accounts({\n authority,\n payer,\n config: this.configPda,\n })\n .transaction();\n }\n\n async removeFromWhitelist(\n address: PublicKey,\n authority: PublicKey = this.walletPubkey,\n payer: PublicKey = authority\n ): Promise<Transaction> {\n return this.program.methods\n .removeFromWhitelist(address)\n .accounts({\n authority,\n payer,\n config: this.configPda,\n })\n .transaction();\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchConfig(): Promise<QuestionMarketConfig | null> {\n try {\n const acc = await (this.program.account as any).questionMarketConfig.fetch(this.configPda);\n return {\n owner: acc.owner,\n admin: acc.admin,\n oracle: acc.oracle,\n conditionalTokensProgram: acc.conditionalTokensProgram,\n questionCount: acc.questionCount.toNumber(),\n approvedCount: acc.approvedCount.toNumber(),\n rejectedCount: acc.rejectedCount.toNumber(),\n presaleCount: acc.presaleCount.toNumber(),\n whitelist: acc.whitelist as PublicKey[],\n whitelistLen: acc.whitelistLen,\n isPaused: acc.isPaused,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchQuestion(questionPda: PublicKey): Promise<Question | null> {\n try {\n const acc = await (this.program.account as any).question.fetch(questionPda);\n return {\n config: acc.config,\n questionId: new Uint8Array(acc.questionId),\n contentHash: new Uint8Array(acc.contentHash),\n expirationTime: acc.expirationTime.toNumber(),\n currencyMint: acc.currencyMint,\n creator: acc.creator,\n condition: acc.condition ?? null,\n status: this._parseStatus(acc.status),\n createdAt: acc.createdAt.toNumber(),\n approvedAt: acc.approvedAt.toNumber(),\n resolvedAt: acc.resolvedAt.toNumber(),\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n questionPda(questionId: Uint8Array): PublicKey {\n return PDA.question(this.configPda, questionId, this.programIds)[0];\n }\n\n private _parseStatus(raw: any): QuestionStatus {\n if (raw.pending !== undefined) return QuestionStatus.Pending;\n if (raw.approved !== undefined) return QuestionStatus.Approved;\n if (raw.rejected !== undefined) return QuestionStatus.Rejected;\n if (raw.resolved !== undefined) return QuestionStatus.Resolved;\n return QuestionStatus.Pending;\n }\n\n /**\n * Convenience: fetch YES and NO token balances for a question.\n * Returns null for each if question not approved or position not initialized.\n * Requires ctfClient to be injected (done automatically by XMarketSDK).\n */\n async fetchQuestionBalances(\n questionPda: PublicKey,\n owner: PublicKey\n ): Promise<{ yes: Position | null; no: Position | null }> {\n if (!this.ctfClient) return { yes: null, no: null };\n const q = await this.fetchQuestion(questionPda);\n if (!q || !q.condition) return { yes: null, no: null };\n return this.ctfClient.fetchBothPositions(q.condition, owner);\n }\n\n // ─── Presale instructions ────────────────────────────────────────────────────\n\n /**\n * Any user creates a presale + initial buy (question-market::create_presale).\n * Reads agents_rev / company_rev from fee_config.\n *\n * @param feeConfig fee_management fee_config PDA (owner = feeConfigOwner)\n * @param currencyMint collateral token (e.g. USDC)\n * @param presaleIndex config.presale_count — fetch config first or pass 0 for first presale\n */\n async createPresale(\n params: {\n price: anchor.BN;\n startTime: anchor.BN;\n endTime: anchor.BN;\n initialBuyAmount: anchor.BN;\n },\n feeConfig: PublicKey,\n currencyMint: PublicKey,\n presaleIndex: anchor.BN,\n creator: PublicKey = this.walletPubkey,\n payer: PublicKey = creator,\n ): Promise<{ tx: Transaction; presalePda: PublicKey; qtMint: PublicKey }> {\n if (!this.programIds.presale) throw new Error(\"presale program ID not configured\");\n\n const [presalePda] = PDA.presale(this.configPda, presaleIndex, this.programIds);\n const [qtMint] = PDA.qtMint(presalePda, this.programIds);\n const [qtAuthority] = PDA.qtAuthority(presalePda, this.programIds);\n const [userBuyRecord] = PDA.userBuyRecord(presalePda, creator, this.programIds);\n\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n const creatorQtAta = getAssociatedTokenAddressSync(qtMint, creator);\n const creatorCurrencyAta = getAssociatedTokenAddressSync(currencyMint, creator);\n const [qtMetadata] = PublicKey.findProgramAddressSync(\n [Buffer.from(\"metadata\"), TOKEN_METADATA_PROGRAM_ID.toBuffer(), qtMint.toBuffer()],\n TOKEN_METADATA_PROGRAM_ID,\n );\n\n const tx = await this.program.methods\n .createPresale({\n price: params.price,\n startTime: params.startTime,\n endTime: params.endTime,\n initialBuyAmount: params.initialBuyAmount,\n })\n .accounts({\n creator,\n payer,\n config: this.configPda,\n feeConfig,\n presale: presalePda,\n qtMint,\n qtAuthority,\n currencyMint,\n presaleVault,\n creatorCurrencyAta,\n creatorQtAta,\n userBuyRecord,\n qtMetadata,\n tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,\n presaleProgram: this.programIds.presale,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .transaction();\n\n return { tx, presalePda, qtMint };\n }\n\n /**\n * Whitelist-only: approve presale → creates question + CTF condition + market_oracle in one tx.\n *\n * @param presalePda the presale account\n * @param contentHash 32-byte hash for question content\n * @param hookProgram token-2022 transfer hook program\n * @param authorizedClob clob program allowed to do CTF transfers\n * @param expirationTime Unix seconds\n * @param creator presale creator pubkey (stored in question)\n * @param currencyMint collateral mint\n */\n async approvePresale(\n presalePda: PublicKey,\n contentHash: Uint8Array,\n hookProgram: PublicKey,\n authorizedClob: PublicKey,\n expirationTime: anchor.BN,\n creator: PublicKey,\n currencyMint: PublicKey,\n caller: PublicKey = this.walletPubkey,\n payer: PublicKey = caller,\n ): Promise<{ tx: Transaction; questionPda: PublicKey; conditionPda: PublicKey; marketOraclePda: PublicKey; marketOracleVault: PublicKey }> {\n if (!this.programIds.presale) throw new Error(\"presale program ID not configured\");\n if (!this.programIds.marketOracle) throw new Error(\"marketOracle program ID not configured\");\n\n const questionId = presalePda.toBytes();\n const [questionPda] = PDA.question(this.configPda, questionId, this.programIds);\n\n const marketConfig = await this.fetchConfig();\n if (!marketConfig) throw new Error(\"QuestionMarketConfig not found\");\n\n const oraclePubkey = marketConfig.oracle;\n const [conditionPda] = PDA.condition(oraclePubkey, questionId, this.programIds);\n const [yesMint] = PDA.yesMint(conditionPda, this.programIds);\n const [noMint] = PDA.noMint(conditionPda, this.programIds);\n const [mintAuthority] = PDA.mintAuthority(conditionPda, this.programIds);\n const [collateralVault] = PDA.collateralVault(currencyMint, this.programIds);\n const [marketOraclePda] = PDA.marketOraclePda(questionPda, this.programIds);\n const marketOracleVault = getAssociatedTokenAddressSync(currencyMint, marketOraclePda, true);\n\n const tx = await this.program.methods\n .approvePresale({\n contentHash: Array.from(contentHash) as number[],\n hookProgram,\n authorizedClob,\n expirationTime,\n creator,\n })\n .accounts({\n caller,\n payer,\n config: this.configPda,\n presale: presalePda,\n question: questionPda,\n currencyMint,\n oracle: oraclePubkey,\n condition: conditionPda,\n yesMint,\n noMint,\n mintAuthority,\n collateralVault,\n marketOracle: marketOraclePda,\n marketOracleVault,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n presaleProgram: this.programIds.presale,\n marketOracleProgram: this.programIds.marketOracle,\n tokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .transaction();\n\n return { tx, questionPda, conditionPda, marketOraclePda, marketOracleVault };\n }\n\n /**\n * Whitelist-only: reject presale so users can refund.\n */\n async rejectPresale(\n presalePda: PublicKey,\n caller: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n if (!this.programIds.presale) throw new Error(\"presale program ID not configured\");\n return this.program.methods\n .rejectPresale()\n .accounts({\n caller,\n config: this.configPda,\n presale: presalePda,\n presaleProgram: this.programIds.presale,\n })\n .transaction();\n }\n\n /**\n * Whitelist-only: distribute presale vault funds → agents_rev% + company_rev% + rest to creator.\n * Must be called after approvePresale.\n */\n async collectPresaleRevenue(\n presalePda: PublicKey,\n currencyMint: PublicKey,\n referralAddress: PublicKey,\n companyAddress: PublicKey,\n caller: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n if (!this.programIds.presale) throw new Error(\"presale program ID not configured\");\n\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n const referralTokenAccount = getAssociatedTokenAddressSync(currencyMint, referralAddress);\n const companyTokenAccount = getAssociatedTokenAddressSync(currencyMint, companyAddress);\n\n return this.program.methods\n .collectPresaleRevenue()\n .accounts({\n caller,\n config: this.configPda,\n presale: presalePda,\n presaleVault,\n currencyMint,\n referralTokenAccount,\n companyTokenAccount,\n presaleProgram: this.programIds.presale,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Whitelist-only: snapshot MST supply so holders can claim trading fees.\n * Call after oracle resolves the question.\n */\n async collectTradingFee(\n marketOraclePda: PublicKey,\n qtMint: PublicKey,\n caller: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n if (!this.programIds.marketOracle) throw new Error(\"marketOracle program ID not configured\");\n return this.program.methods\n .collectTradingFee()\n .accounts({\n caller,\n config: this.configPda,\n marketOracle: marketOraclePda,\n qtMint,\n marketOracleProgram: this.programIds.marketOracle,\n })\n .transaction();\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { Keypair, PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY, Transaction, TransactionInstruction } from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport { Condition, CollateralVault, CtfConfig, Position, TxResult } from \"../types\";\n\nexport class CtfClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n // ─── Instructions ────────────────────────────────────────────────────────────\n\n /**\n * Create a Condition directly (bypasses QuestionMarket).\n * oracle is UncheckedAccount — set it to any pubkey (e.g. user wallet)\n * so that wallet can later sign reportPayouts.\n * payer covers rent for condition + mints.\n */\n async prepareCondition(\n questionId: Uint8Array,\n oracle: PublicKey,\n collateralMint: PublicKey,\n hookProgram: PublicKey,\n authorizedClob: PublicKey,\n payer: PublicKey = this.walletPubkey,\n signers: Keypair[] = []\n ): Promise<{ signature: string; conditionPda: PublicKey; yesMint: PublicKey; noMint: PublicKey }> {\n const [conditionPda] = PDA.condition(oracle, questionId, this.programIds);\n const [yesMint] = PDA.yesMint(conditionPda, this.programIds);\n const [noMint] = PDA.noMint(conditionPda, this.programIds);\n const [mintAuthority] = PDA.mintAuthority(conditionPda, this.programIds);\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n\n const sig = await this.program.methods\n .prepareCondition(\n Array.from(questionId) as number[],\n hookProgram,\n authorizedClob\n )\n .accounts({\n oracle,\n condition: conditionPda,\n yesMint,\n noMint,\n mintAuthority,\n collateralMint,\n collateralVault,\n payer,\n tokenProgram: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .signers(signers)\n .rpc({ skipPreflight: true });\n\n return { signature: sig, conditionPda, yesMint, noMint };\n }\n\n /** One-time setup. Caller becomes the CTF owner. Can only be called once. */\n async initializeCtfConfig(): Promise<TxResult> {\n const [ctfConfig] = PDA.ctfConfig(this.programIds);\n const sig = await this.program.methods\n .initializeCtfConfig()\n .accounts({\n payer: this.walletPubkey,\n ctfConfig,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Create the shared collateral vault for a given collateral mint (e.g. USDC).\n * Only callable by the CTF owner (as stored in ctf_config).\n * authority defaults to the wallet — pass a different signer if needed.\n */\n async initializeVault(collateralMint: PublicKey): Promise<TxResult> {\n const [ctfConfig] = PDA.ctfConfig(this.programIds);\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n const sig = await this.program.methods\n .initializeVault()\n .accounts({\n authority: this.walletPubkey,\n payer: this.walletPubkey,\n ctfConfig,\n collateralMint,\n collateralVault,\n vaultTokenAccount,\n systemProgram: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n rent: SYSVAR_RENT_PUBKEY,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Initialize an empty Position account (balance = 0) for a user.\n * Needed before redeemPositions when the user only holds the opposite outcome\n * (e.g. buyer received YES via CLOB match but never had a NO position).\n *\n * Idempotent — call `fetchPosition` first to skip if already initialized.\n */\n async initPosition(\n condition: PublicKey,\n outcomeIndex: number,\n user: PublicKey = this.walletPubkey\n ): Promise<TxResult> {\n const [position] = PDA.position(condition, outcomeIndex, user, this.programIds);\n const sig = await this.program.methods\n .initPosition(outcomeIndex)\n .accounts({\n user,\n condition,\n position,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Split `amount` collateral into equal YES + NO tokens.\n * ATAs created automatically via `init_if_needed`.\n */\n async splitPosition(\n condition: PublicKey,\n collateralMint: PublicKey,\n amount: anchor.BN,\n user: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [noMint] = PDA.noMint(condition, this.programIds);\n const [mintAuthority] = PDA.mintAuthority(condition, this.programIds);\n const [yesPosition] = PDA.position(condition, 1, user, this.programIds);\n const [noPosition] = PDA.position(condition, 0, user, this.programIds);\n\n const userYesAta = getAssociatedTokenAddressSync(yesMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userNoAta = getAssociatedTokenAddressSync(noMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userCollateral = getAssociatedTokenAddressSync(collateralMint, user);\n\n return this.program.methods\n .splitPosition(amount)\n .accounts({\n user,\n payer,\n condition,\n collateralVault,\n vaultTokenAccount,\n userCollateral,\n yesMint,\n userYesAta,\n noMint,\n userNoAta,\n yesPosition,\n noPosition,\n mintAuthority,\n tokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Merge `amount` YES + NO tokens back into collateral.\n * Both token balances must be ≥ amount.\n */\n async mergePosition(\n condition: PublicKey,\n collateralMint: PublicKey,\n amount: anchor.BN,\n user: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [noMint] = PDA.noMint(condition, this.programIds);\n const [yesPosition] = PDA.position(condition, 1, user, this.programIds);\n const [noPosition] = PDA.position(condition, 0, user, this.programIds);\n\n const userYesAta = getAssociatedTokenAddressSync(yesMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userNoAta = getAssociatedTokenAddressSync(noMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userCollateral = getAssociatedTokenAddressSync(collateralMint, user);\n\n return this.program.methods\n .mergePosition(amount)\n .accounts({\n user,\n payer,\n condition,\n collateralVault,\n vaultTokenAccount,\n userCollateral,\n yesMint,\n userYesAta,\n noMint,\n userNoAta,\n yesPosition,\n noPosition,\n tokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * After condition resolves: burn outcome tokens proportional to payout\n * and receive USDC. Works for winning, losing, or both positions.\n */\n async redeemPositions(\n condition: PublicKey,\n collateralMint: PublicKey,\n user: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [noMint] = PDA.noMint(condition, this.programIds);\n const [yesPosition] = PDA.position(condition, 1, user, this.programIds);\n const [noPosition] = PDA.position(condition, 0, user, this.programIds);\n\n const userYesAta = getAssociatedTokenAddressSync(yesMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userNoAta = getAssociatedTokenAddressSync(noMint, user, false, TOKEN_2022_PROGRAM_ID);\n const userCollateral = getAssociatedTokenAddressSync(collateralMint, user);\n\n return this.program.methods\n .redeemPositions()\n .accounts({\n user,\n payer,\n condition,\n collateralVault,\n vaultTokenAccount,\n userCollateral,\n yesMint,\n userYesAta,\n noMint,\n userNoAta,\n yesPosition,\n noPosition,\n tokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Oracle directly resolves a condition with payout numerators.\n * Bypasses QuestionMarket — only for oracle-owned conditions.\n */\n async reportPayouts(\n condition: PublicKey,\n payoutNumerators: number[]\n ): Promise<TxResult> {\n const sig = await this.program.methods\n .reportPayouts(payoutNumerators.map((n) => new anchor.BN(n)))\n .accounts({\n oracle: this.walletPubkey,\n condition,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Build the `transfer_position` instruction for use in a CLOB CPI.\n *\n * This instruction requires `clob_authority` (the CLOB's PDA) to sign.\n * A PDA can only sign from within its own program via CPI — this method\n * CANNOT be called directly from a wallet transaction.\n *\n * Use-cases:\n * - Custom CLOB implementations that call CTF.transfer_position via CPI\n * - Anchor CPI builders in other Rust programs\n *\n * @param condition - Condition PDA\n * @param outcomeMint - YES or NO mint\n * @param fromUser - Source wallet\n * @param fromTokenAccount - Source ATA\n * @param fromPosition - Source Position PDA\n * @param toUser - Destination wallet\n * @param toTokenAccount - Destination ATA (created if needed — payer covers rent)\n * @param toPosition - Destination Position PDA\n * @param payer - Pays rent for toPosition + toTokenAccount creation\n * @param clobAuthority - CLOB config PDA (must sign via CPI)\n * @param outcomeIndex - 0 = NO, 1 = YES\n * @param amount - Token amount to transfer\n */\n async transferPositionIx(\n condition: PublicKey,\n outcomeMint: PublicKey,\n fromUser: PublicKey,\n fromTokenAccount: PublicKey,\n fromPosition: PublicKey,\n toUser: PublicKey,\n toTokenAccount: PublicKey,\n toPosition: PublicKey,\n payer: PublicKey,\n clobAuthority: PublicKey,\n outcomeIndex: number,\n amount: anchor.BN\n ): Promise<TransactionInstruction> {\n return this.program.methods\n .transferPosition(outcomeIndex, amount)\n .accounts({\n payer,\n clobAuthority,\n condition,\n outcomeMint,\n fromUser,\n fromTokenAccount,\n fromPosition,\n toUser,\n toTokenAccount,\n toPosition,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n }\n\n /**\n * Update the authorized CLOB on a condition.\n * Only callable by the condition's oracle (the wallet that signed createQuestion).\n */\n async updateAuthorizedClob(\n condition: PublicKey,\n newAuthorizedClob: PublicKey\n ): Promise<TxResult> {\n const sig = await this.program.methods\n .updateAuthorizedClob(newAuthorizedClob)\n .accounts({\n oracle: this.walletPubkey,\n condition,\n })\n .rpc();\n return { signature: sig };\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchCtfConfig(): Promise<CtfConfig | null> {\n try {\n const [ctfConfig] = PDA.ctfConfig(this.programIds);\n const acc = await (this.program.account as any).ctfConfig.fetch(ctfConfig);\n return {\n owner: acc.owner,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchCondition(conditionPda: PublicKey): Promise<Condition | null> {\n try {\n const acc = await (this.program.account as any).condition.fetch(conditionPda);\n return {\n oracle: acc.oracle,\n questionId: new Uint8Array(acc.questionId),\n outcomeSlotCount: acc.outcomeSlotCount,\n payoutNumerators: acc.payoutNumerators,\n payoutDenominator: acc.payoutDenominator,\n totalCollateral: acc.totalCollateral,\n collateralMint: acc.collateralMint,\n collateralVault: acc.collateralVault,\n yesMint: acc.yesMint,\n noMint: acc.noMint,\n hookProgram: acc.hookProgram,\n authorizedClob: acc.authorizedClob,\n isResolved: acc.isResolved,\n resolvedAt: acc.resolvedAt?.toNumber() ?? 0,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchVault(collateralMint: PublicKey): Promise<CollateralVault | null> {\n try {\n const [vaultPda] = PDA.collateralVault(collateralMint, this.programIds);\n const acc = await (this.program.account as any).collateralVault.fetch(vaultPda);\n return {\n collateralMint: acc.collateralMint,\n vaultTokenAccount: acc.vaultTokenAccount,\n totalLocked: acc.totalLocked,\n conditionCount: acc.conditionCount,\n bump: acc.bump,\n vaultBump: acc.vaultBump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchPosition(\n condition: PublicKey,\n outcomeIndex: number,\n owner: PublicKey = this.walletPubkey\n ): Promise<Position | null> {\n try {\n const [pda] = PDA.position(condition, outcomeIndex, owner, this.programIds);\n const acc = await (this.program.account as any).position.fetch(pda);\n return {\n owner: acc.owner,\n condition: acc.condition,\n outcomeIndex: acc.outcomeIndex,\n balance: acc.balance,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n /** YES = outcome index 1, NO = outcome index 0. */\n async fetchBothPositions(\n condition: PublicKey,\n owner: PublicKey = this.walletPubkey\n ): Promise<{ yes: Position | null; no: Position | null }> {\n const [yes, no] = await Promise.all([\n this.fetchPosition(condition, 1, owner),\n this.fetchPosition(condition, 0, owner),\n ]);\n return { yes, no };\n }\n\n /** Thin wrapper: fetch position for a single outcome token (0=NO, 1=YES). */\n async fetchTokenBalance(\n condition: PublicKey,\n tokenId: number,\n owner: PublicKey = this.walletPubkey\n ): Promise<Position | null> {\n return this.fetchPosition(condition, tokenId, owner);\n }\n\n // ─── PDA helpers (public for consumers) ──────────────────────────────────────\n\n yesMintPda(condition: PublicKey): PublicKey {\n return PDA.yesMint(condition, this.programIds)[0];\n }\n\n noMintPda(condition: PublicKey): PublicKey {\n return PDA.noMint(condition, this.programIds)[0];\n }\n\n mintAuthorityPda(condition: PublicKey): PublicKey {\n return PDA.mintAuthority(condition, this.programIds)[0];\n }\n\n collateralVaultPda(collateralMint: PublicKey): PublicKey {\n return PDA.collateralVault(collateralMint, this.programIds)[0];\n }\n}\n","/**\n * Order signing utilities.\n *\n * Canonical message layout (178 bytes) — must match Rust `Order::to_signable_bytes()`:\n * [0..31] maker pubkey\n * [32..63] condition pubkey\n * [64] token_id (u8)\n * [65] side (u8)\n * [66..73] maker_amount (u64 le)\n * [74..81] taker_amount (u64 le)\n * [82..89] nonce (u64 le)\n * [90..97] expiry (i64 le)\n * [98..105] created_at (i64 le)\n * [106..113] fee (u64 le)\n * [114..145] taker pubkey\n * [146..177] signer pubkey\n */\nimport {\n TransactionInstruction,\n Ed25519Program,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n} from \"@solana/web3.js\";\nimport { Order, SignedOrder } from \"./types\";\n\n// ─── Serialization ────────────────────────────────────────────────────────────\n\nexport function serializeOrderToBytes(order: Order): Uint8Array {\n const buf = new Uint8Array(178);\n\n buf.set(order.maker.toBytes(), 0);\n buf.set(order.condition.toBytes(), 32);\n buf[64] = order.tokenId;\n buf[65] = order.side;\n\n buf.set(order.makerAmount.toArrayLike(Buffer, \"le\", 8), 66);\n buf.set(order.takerAmount.toArrayLike(Buffer, \"le\", 8), 74);\n buf.set(order.nonce.toArrayLike(Buffer, \"le\", 8), 82);\n buf.set(order.expiry.toArrayLike(Buffer, \"le\", 8), 90);\n buf.set(order.createdAt.toArrayLike(Buffer, \"le\", 8), 98);\n buf.set(order.fee.toArrayLike(Buffer, \"le\", 8), 106);\n buf.set(order.taker.toBytes(), 114);\n buf.set(order.signer.toBytes(), 146);\n\n return buf;\n}\n\n// ─── Signing ──────────────────────────────────────────────────────────────────\n\n/**\n * Sign an order with a keypair's sign function.\n * The `signFn` receives the 98-byte canonical message and returns a 64-byte signature.\n *\n * Usage with a Keypair:\n * const signed = signOrder(order, (msg) => keypair.secretKey.slice(0,64) && nacl.sign.detached(msg, keypair.secretKey))\n *\n * Or use the convenience wrapper `signOrderWithKeypair` from this module.\n */\nexport async function signOrder(\n order: Order,\n signFn: (message: Uint8Array) => Uint8Array | Promise<Uint8Array>\n): Promise<SignedOrder> {\n const message = serializeOrderToBytes(order);\n const signature = await signFn(message);\n if (signature.length !== 64) throw new Error(\"signature must be 64 bytes\");\n return { order, signature };\n}\n\n// ─── Ed25519 instruction builder ─────────────────────────────────────────────\n\n/**\n * Build a single batched Ed25519 precompile instruction for N signed orders.\n *\n * All signatures are packed into one instruction (ix[0]).\n * The on-chain program reads sig[i] via `extract_order_from_ed25519_ix(sysvar, i)`.\n *\n * Batched layout saves ~12 bytes vs N separate Ed25519 instructions — critical for\n * fitting 1-taker + 2-maker transactions within Solana's 1232-byte raw tx limit.\n *\n * Data format:\n * [0] num_sigs (N)\n * [1] padding\n * [2+i*14] per-sig offset entries (14 bytes each)\n * Then: sigs (64B each), pubkeys (32B each), messages (178B each)\n */\nexport function buildBatchedEd25519Instruction(orders: SignedOrder[]): TransactionInstruction {\n const N = orders.length;\n if (N === 0) throw new Error(\"At least 1 order required\");\n\n const MSG_SIZE = 178;\n const SIG_SIZE = 64;\n const PK_SIZE = 32;\n const HEADER = 2 + N * 14;\n const sigBase = HEADER;\n const pkBase = sigBase + N * SIG_SIZE;\n const msgBase = pkBase + N * PK_SIZE;\n const totalSize = msgBase + N * MSG_SIZE;\n\n const data = Buffer.alloc(totalSize);\n data[0] = N;\n data[1] = 0;\n\n for (let i = 0; i < N; i++) {\n const e = 2 + i * 14;\n data.writeUInt16LE(sigBase + i * SIG_SIZE, e); // sig_offset\n data.writeUInt16LE(0xffff, e + 2); // sig_ix_index (this ix)\n data.writeUInt16LE(pkBase + i * PK_SIZE, e + 4); // pubkey_offset\n data.writeUInt16LE(0xffff, e + 6); // pubkey_ix_index (this ix)\n data.writeUInt16LE(msgBase + i * MSG_SIZE, e + 8); // msg_offset\n data.writeUInt16LE(MSG_SIZE, e + 10); // msg_size\n data.writeUInt16LE(0xffff, e + 12); // msg_ix_index (this ix)\n\n data.set(orders[i].signature, sigBase + i * SIG_SIZE);\n data.set(orders[i].order.maker.toBytes(), pkBase + i * PK_SIZE);\n data.set(serializeOrderToBytes(orders[i].order), msgBase + i * MSG_SIZE);\n }\n\n return new TransactionInstruction({\n keys: [],\n programId: Ed25519Program.programId,\n data,\n });\n}\n\n/**\n * The Solana instructions sysvar public key.\n * Pass this as `ixSysvar` to all match_* instruction accounts.\n */\nexport const IX_SYSVAR = SYSVAR_INSTRUCTIONS_PUBKEY;\n\n// ─── Anchor serialization helper ─────────────────────────────────────────────\n\n/**\n * Convert SignedOrder to the shape anchor expects for SignedOrder struct.\n * The signature must be passed as a fixed-size array of 64 numbers.\n */\nexport function _toAnchorSignedOrder(signed: SignedOrder) {\n const sig = Array.from(signed.signature);\n if (sig.length !== 64) throw new Error(\"signature must be 64 bytes\");\n return {\n order: {\n maker: signed.order.maker,\n condition: signed.order.condition,\n tokenId: signed.order.tokenId,\n side: signed.order.side,\n makerAmount: signed.order.makerAmount,\n takerAmount: signed.order.takerAmount,\n nonce: signed.order.nonce,\n expiry: signed.order.expiry,\n createdAt: signed.order.createdAt,\n fee: signed.order.fee,\n taker: signed.order.taker,\n signer: signed.order.signer,\n },\n signature: sig,\n };\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport {\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n AddressLookupTableAccount,\n AddressLookupTableProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n Ed25519Program,\n type Signer as SolanaSigner,\n} from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\nimport {\n ClobConfig, ClobWhitelistEntry, OrderStatus, Order, SignedOrder, TxResult, InvalidParamError,\n} from \"../types\";\nimport { buildBatchedEd25519Instruction, IX_SYSVAR, _toAnchorSignedOrder } from \"../signing\";\nimport type { FeeManagementClient } from \"./fee_management\";\n\nconst CLOB_WHITELIST_SEED = Buffer.from(\"clob_whitelist\");\n\nexport class ClobClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n private readonly networkConfig: { defaultCollateral: { mint: PublicKey } };\n\n /** Injected by XMarketSDK after construction — enables auto fee distribution */\n feeClient?: FeeManagementClient;\n feeConfigOwner?: PublicKey;\n\n /** Cached company_address from fee_config to avoid repeated RPC calls */\n private _companyAddress?: PublicKey;\n\n /** ALT cache: condition.toBase58() → loaded ALT account */\n private _altCache = new Map<string, AddressLookupTableAccount>();\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds,\n networkConfig: { defaultCollateral: { mint: PublicKey } },\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n this.networkConfig = networkConfig;\n }\n\n private async companyAddress(): Promise<PublicKey | undefined> {\n if (!this.feeClient || !this.feeConfigOwner) return undefined;\n if (!this._companyAddress) {\n const cfg = await this.feeClient.fetchFeeConfig(this.feeConfigOwner);\n if (cfg) this._companyAddress = cfg.companyAddress;\n }\n return this._companyAddress;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n /**\n * Get or create an ALT for a condition.\n * First call: creates + extends ALT on-chain, waits for activation (~2s).\n * Subsequent calls for same condition: returns cached ALT instantly.\n * BE devs never interact with this — called automatically by matchOrders.\n */\n async ensureAlt(\n condition: PublicKey,\n collateralMint: PublicKey,\n buyerPubkey: PublicKey,\n buyerNonce: anchor.BN,\n makers: SignedOrder[],\n ): Promise<AddressLookupTableAccount> {\n const cacheKey = condition.toBase58();\n if (this._altCache.has(cacheKey)) {\n return this._altCache.get(cacheKey)!;\n }\n\n const { connection } = this.provider;\n const payer = this.walletPubkey;\n\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [extraAccountMeta] = PDA.extraAccountMetaList(yesMint, this.programIds);\n const [hookConfig] = PDA.hookConfig(this.programIds);\n const [buyOrderStatus] = PDA.orderStatus(buyerPubkey, buyerNonce, this.programIds);\n const [buyerPosition] = PDA.position(condition, 1, buyerPubkey, this.programIds);\n const clobConfigPda = this.configPda();\n\n const feeRecipientAddr = (await this.fetchConfig())?.feeRecipient;\n\n const addresses: PublicKey[] = [\n // instruction program IDs — must be in ALT to keep static keys minimal\n Ed25519Program.programId,\n this.programIds.clobExchange,\n // other programs\n this.programIds.conditionalTokens,\n this.programIds.hook,\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n SystemProgram.programId,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n // config PDAs\n clobConfigPda,\n hookConfig,\n this.whitelistEntryPda(payer),\n // condition PDAs\n condition,\n yesMint,\n extraAccountMeta,\n // buyer pubkey + ATAs + PDAs\n buyerPubkey,\n getAssociatedTokenAddressSync(collateralMint, buyerPubkey),\n getAssociatedTokenAddressSync(yesMint, buyerPubkey, false, TOKEN_2022_PROGRAM_ID),\n buyerPosition,\n buyOrderStatus,\n ];\n\n if (feeRecipientAddr) addresses.push(feeRecipientAddr);\n\n // Add per-maker accounts (pubkey + ATAs + PDAs)\n for (const m of makers) {\n const seller = m.order.maker;\n const [sellerPos] = PDA.position(condition, 1, seller, this.programIds);\n const [sellerStatus] = PDA.orderStatus(seller, m.order.nonce, this.programIds);\n addresses.push(\n seller,\n getAssociatedTokenAddressSync(yesMint, seller, false, TOKEN_2022_PROGRAM_ID),\n getAssociatedTokenAddressSync(collateralMint, seller),\n sellerPos,\n sellerStatus,\n );\n }\n\n // Fee management accounts\n if (this.programIds.feeManagement && this.feeConfigOwner) {\n const companyAddr = await this.companyAddress();\n addresses.push(\n this.programIds.feeManagement,\n PDA.feeConfig(this.feeConfigOwner, this.programIds)[0],\n PDA.marketFeeOverride(condition, this.programIds)[0],\n );\n if (companyAddr) {\n addresses.push(getAssociatedTokenAddressSync(collateralMint, companyAddr));\n }\n // market_oracle_vault placeholder — overridden in ensureAlt opts if provided\n addresses.push(payer);\n }\n\n // Create ALT\n const slot = await connection.getSlot(\"finalized\");\n const [createIx, altAddress] = AddressLookupTableProgram.createLookupTable({\n authority: payer, payer, recentSlot: slot,\n });\n\n // Extend in batches of 30 (legacy tx limit)\n const BATCH = 30;\n const extendIxs: TransactionInstruction[] = [];\n for (let i = 0; i < addresses.length; i += BATCH) {\n extendIxs.push(AddressLookupTableProgram.extendLookupTable({\n payer, authority: payer,\n lookupTable: altAddress,\n addresses: addresses.slice(i, i + BATCH),\n }));\n }\n\n // Send create + first extend, then remaining extends\n await this._sendLegacyTx([createIx, extendIxs[0]]);\n for (let i = 1; i < extendIxs.length; i++) {\n await this._sendLegacyTx([extendIxs[i]]);\n }\n\n // Wait for ALT to be active\n for (let attempt = 0; attempt < 30; attempt++) {\n await new Promise(r => setTimeout(r, 1000));\n const res = await connection.getAddressLookupTable(altAddress);\n if (res.value && res.value.state.addresses.length === addresses.length) {\n this._altCache.set(cacheKey, res.value);\n return res.value;\n }\n }\n throw new Error(`ALT ${altAddress.toBase58()} not active after 30s`);\n }\n\n private async _sendLegacyTx(instructions: TransactionInstruction[]): Promise<void> {\n const { connection } = this.provider;\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();\n const { Transaction } = await import(\"@solana/web3.js\");\n const tx = new Transaction();\n tx.recentBlockhash = blockhash;\n tx.feePayer = this.walletPubkey;\n tx.add(...instructions);\n const signed = await this.provider.wallet.signTransaction(tx);\n const sig = await connection.sendRawTransaction(signed.serialize());\n await connection.confirmTransaction({ signature: sig, blockhash, lastValidBlockHeight }, \"confirmed\");\n }\n\n /**\n * Send a match transaction as versioned (v0).\n * Pass a pre-built AddressLookupTableAccount to compress account keys and\n * stay under the 1232-byte limit — required for match_complementary which\n * has ~25 accounts + 2 Ed25519 precompile instructions (~1697 bytes raw).\n *\n * If `whitelistedWallet` is provided and differs from `this.provider.wallet`,\n * both wallets sign the transaction (whitelisted operator + payer).\n */\n async sendMatchTx(\n instructions: TransactionInstruction[],\n lookupTable?: AddressLookupTableAccount,\n whitelistedWallet?: anchor.Wallet,\n ): Promise<string> {\n const { connection } = this.provider;\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();\n // payer is this.provider.wallet; feePayer = payer.publicKey\n const message = new TransactionMessage({\n payerKey: this.walletPubkey,\n recentBlockhash: blockhash,\n instructions,\n }).compileToV0Message(lookupTable ? [lookupTable] : []);\n const vtx = new VersionedTransaction(message);\n const signers: SolanaSigner[] = [(this.provider.wallet as any).payer as SolanaSigner];\n if (\n whitelistedWallet &&\n !whitelistedWallet.publicKey.equals(this.walletPubkey)\n ) {\n signers.push((whitelistedWallet as any).payer as SolanaSigner);\n }\n vtx.sign(signers);\n const sig = await connection.sendRawTransaction(vtx.serialize(), {\n skipPreflight: false,\n });\n await connection.confirmTransaction(\n { signature: sig, blockhash, lastValidBlockHeight },\n \"confirmed\",\n );\n return sig;\n }\n\n /** PDA for a CLOB whitelist entry. */\n whitelistEntryPda(address: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync(\n [CLOB_WHITELIST_SEED, address.toBytes()],\n this.programIds.clobExchange,\n )[0];\n }\n\n configPda(): PublicKey {\n return PDA.clobConfig(this.programIds)[0];\n }\n\n // ─── Instructions ────────────────────────────────────────────────────────────\n\n /** One-time setup. Caller becomes admin. */\n async initialize(\n operators: PublicKey[],\n feeRecipient: PublicKey,\n feeRateBps: number\n ): Promise<TxResult> {\n const sig = await this.program.methods\n .initializeClob(\n operators,\n feeRecipient,\n feeRateBps,\n this.programIds.conditionalTokens\n )\n .accounts({\n owner: this.walletPubkey,\n clobConfig: this.configPda(),\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin adds an operator to the whitelist. */\n async addOperator(operator: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .addOperator(operator)\n .accounts({\n owner: this.walletPubkey,\n clobConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin removes an operator from the whitelist. */\n async removeOperator(operator: PublicKey): Promise<TxResult> {\n const sig = await this.program.methods\n .removeOperator(operator)\n .accounts({\n owner: this.walletPubkey,\n clobConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Admin pause/unpause the CLOB. */\n async setPaused(paused: boolean): Promise<TxResult> {\n const sig = await this.program.methods\n .setPaused(paused)\n .accounts({\n owner: this.walletPubkey,\n clobConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Maker cancels their own order.\n * OrderStatus PDA is marked cancelled — any future fill rejected.\n */\n async cancelOrder(nonce: anchor.BN): Promise<TxResult> {\n const maker = this.walletPubkey;\n const [orderStatus] = PDA.orderStatus(maker, nonce, this.programIds);\n const sig = await this.program.methods\n .cancelOrder(nonce)\n .accounts({\n signer: maker,\n clobConfig: this.configPda(),\n maker,\n orderStatus,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * Emergency reset of CLOB config (upgrade authority only).\n */\n async forceResetClob(\n programData: PublicKey,\n newAdmin: PublicKey,\n newOperators: PublicKey[],\n newFeeRecipient: PublicKey,\n newFeeRateBps: number\n ): Promise<TxResult> {\n const sig = await this.program.methods\n .forceResetClob(newAdmin, newOperators, newFeeRecipient, newFeeRateBps)\n .accounts({\n upgradeAuthority: this.walletPubkey,\n programData,\n clobConfig: this.configPda(),\n })\n .rpc();\n return { signature: sig };\n }\n\n /**\n * COMPLEMENTARY match: 1 buyer (taker) + N sellers (makers), same tokenId.\n *\n * Transaction structure:\n * ix[0] Ed25519(taker/buyer)\n * ix[1+i] Ed25519(maker_i/seller_i)\n * ix[N+1] match_complementary(buyNonce, makerNonces[])\n *\n * remaining_accounts: [hook×3] [seller×5 × N]\n */\n /** Build Ed25519 + matchComplementary instructions without sending.\n *\n * If `buySigned.order.fee > 0` and `feeClient` + `feeConfigOwner` are wired in,\n * automatically appends 5 fee_management remaining_accounts so the program CPIs\n * to distribute_fee internally. No manual `feeDistribute` param needed.\n */\n async buildMatchComplementaryIxs(\n buySigned: SignedOrder,\n makersSigned: SignedOrder[],\n collateralMint: PublicKey,\n feeRecipient: PublicKey,\n whitelisted: PublicKey,\n opts?: { marketOracleVault?: PublicKey },\n ): Promise<TransactionInstruction[]> {\n const condition = buySigned.order.condition;\n const tokenId = buySigned.order.tokenId;\n\n const [outcomeMint] = tokenId === 1\n ? PDA.yesMint(condition, this.programIds)\n : PDA.noMint(condition, this.programIds);\n\n const buyer = buySigned.order.maker;\n const buyerCollateral = getAssociatedTokenAddressSync(collateralMint, buyer);\n const buyerTokenAccount = getAssociatedTokenAddressSync(outcomeMint, buyer, false, TOKEN_2022_PROGRAM_ID);\n const [buyerPosition] = PDA.position(condition, tokenId, buyer, this.programIds);\n const [buyOrderStatus] = PDA.orderStatus(buyer, buySigned.order.nonce, this.programIds);\n\n const [extraAccountMetaList] = PDA.extraAccountMetaList(outcomeMint, this.programIds);\n const [hookConfig] = PDA.hookConfig(this.programIds);\n const hookAccounts = [\n { pubkey: extraAccountMetaList, isSigner: false, isWritable: false },\n { pubkey: hookConfig, isSigner: false, isWritable: false },\n { pubkey: this.programIds.hook, isSigner: false, isWritable: false },\n ];\n\n const makerAccounts = makersSigned.flatMap(m => {\n const seller = m.order.maker;\n const sellerTokenAccount = getAssociatedTokenAddressSync(outcomeMint, seller, false, TOKEN_2022_PROGRAM_ID);\n const [sellerPosition] = PDA.position(condition, tokenId, seller, this.programIds);\n const sellerCollateral = getAssociatedTokenAddressSync(collateralMint, seller);\n const [sellOrderStatus] = PDA.orderStatus(seller, m.order.nonce, this.programIds);\n return [\n { pubkey: seller, isSigner: false, isWritable: false },\n { pubkey: sellerTokenAccount, isSigner: false, isWritable: true },\n { pubkey: sellerPosition, isSigner: false, isWritable: true },\n { pubkey: sellerCollateral, isSigner: false, isWritable: true },\n { pubkey: sellOrderStatus, isSigner: false, isWritable: true },\n ];\n });\n\n // Auto fee distribution: fee > 0 + feeClient wired → append 5 remaining_accounts\n // so match_complementary CPIs to distribute_fee internally\n let feeAccounts: { pubkey: PublicKey; isSigner: boolean; isWritable: boolean }[] = [];\n if (\n buySigned.order.fee.gtn(0) &&\n this.programIds.feeManagement &&\n this.feeConfigOwner\n ) {\n const companyAddr = await this.companyAddress();\n if (companyAddr) {\n // 5th account = market_oracle_vault: use provided value or fall back to payer\n // (payer works when is_admin=true — no tokens flow to oracle vault)\n const oracleVault = opts?.marketOracleVault ?? this.walletPubkey;\n feeAccounts = [\n { pubkey: this.programIds.feeManagement, isSigner: false, isWritable: false },\n { pubkey: PDA.feeConfig(this.feeConfigOwner, this.programIds)[0], isSigner: false, isWritable: false },\n { pubkey: PDA.marketFeeOverride(condition, this.programIds)[0], isSigner: false, isWritable: false },\n { pubkey: getAssociatedTokenAddressSync(collateralMint, companyAddr), isSigner: false, isWritable: true },\n { pubkey: oracleVault, isSigner: false, isWritable: true },\n ];\n }\n }\n\n const whitelistEntry = this.whitelistEntryPda(whitelisted);\n const makerNonces = makersSigned.map(m => m.order.nonce);\n\n const ed25519Ix = buildBatchedEd25519Instruction([buySigned, ...makersSigned]);\n\n const matchIx = await this.program.methods\n .matchComplementary(buySigned.order.nonce, makerNonces)\n .accounts({\n whitelisted,\n payer: this.walletPubkey,\n whitelistEntry,\n clobConfig: this.configPda(),\n ixSysvar: IX_SYSVAR,\n condition,\n buyer,\n buyerCollateral,\n buyerTokenAccount,\n buyerPosition,\n buyOrderStatus,\n outcomeMint,\n feeRecipient,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n tokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts([...hookAccounts, ...makerAccounts, ...feeAccounts])\n .instruction();\n\n return [ed25519Ix, matchIx];\n }\n\n private async matchComplementary(\n buySigned: SignedOrder,\n makersSigned: SignedOrder[],\n collateralMint: PublicKey,\n feeRecipient: PublicKey,\n whitelistedWallet: anchor.Wallet,\n lookupTable?: AddressLookupTableAccount,\n opts?: { marketOracleVault?: PublicKey },\n ): Promise<TxResult> {\n const ixs = await this.buildMatchComplementaryIxs(\n buySigned, makersSigned, collateralMint, feeRecipient, whitelistedWallet.publicKey, opts,\n );\n const sig = await this.sendMatchTx(ixs, lookupTable, whitelistedWallet);\n return { signature: sig };\n }\n\n /**\n * MINT match: 1 YES buyer (taker) + N NO buyers (makers).\n *\n * Transaction structure:\n * ix[0] Ed25519(taker/YES buyer)\n * ix[1+i] Ed25519(maker_i/NO buyer)\n * ix[N+1] match_mint_orders(yesNonce, makerNonces[])\n *\n * remaining_accounts: [maker×5 × N] (no hook accounts — mint_to doesn't fire hook)\n */\n private async matchMintOrders(\n yesSigned: SignedOrder,\n makersSigned: SignedOrder[],\n collateralMint: PublicKey,\n feeRecipient: PublicKey,\n whitelistedWallet: anchor.Wallet,\n lookupTable?: AddressLookupTableAccount,\n ): Promise<TxResult> {\n const condition = yesSigned.order.condition;\n\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [noMint] = PDA.noMint(condition, this.programIds);\n const [mintAuthority] = PDA.mintAuthority(condition, this.programIds);\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n\n const buyerYes = yesSigned.order.maker;\n const buyerYesCollateral = getAssociatedTokenAddressSync(collateralMint, buyerYes);\n const buyerYesTokenAccount = getAssociatedTokenAddressSync(yesMint, buyerYes, false, TOKEN_2022_PROGRAM_ID);\n const [buyerYesPosition] = PDA.position(condition, 1, buyerYes, this.programIds);\n const [yesOrderStatus] = PDA.orderStatus(buyerYes, yesSigned.order.nonce, this.programIds);\n\n const makerAccounts = makersSigned.flatMap(m => {\n const maker = m.order.maker;\n const makerUsdcAta = getAssociatedTokenAddressSync(collateralMint, maker);\n const makerNoAta = getAssociatedTokenAddressSync(noMint, maker, false, TOKEN_2022_PROGRAM_ID);\n const [makerNoPosition] = PDA.position(condition, 0, maker, this.programIds);\n const [makerOrderStatus] = PDA.orderStatus(maker, m.order.nonce, this.programIds);\n return [\n { pubkey: maker, isSigner: false, isWritable: false },\n { pubkey: makerUsdcAta, isSigner: false, isWritable: true },\n { pubkey: makerNoAta, isSigner: false, isWritable: true },\n { pubkey: makerNoPosition, isSigner: false, isWritable: true },\n { pubkey: makerOrderStatus,isSigner: false, isWritable: true },\n ];\n });\n\n const whitelisted = whitelistedWallet.publicKey;\n const whitelistEntry = this.whitelistEntryPda(whitelisted);\n const makerNonces = makersSigned.map(m => m.order.nonce);\n\n const ed25519Ixs = [\n buildBatchedEd25519Instruction([yesSigned, ...makersSigned]),\n ];\n\n const matchIx = await this.program.methods\n .matchMintOrders(yesSigned.order.nonce, makerNonces)\n .accounts({\n whitelisted,\n payer: this.walletPubkey,\n whitelistEntry,\n clobConfig: this.configPda(),\n ixSysvar: IX_SYSVAR,\n condition,\n buyerYes,\n buyerYesCollateral,\n buyerYesTokenAccount,\n buyerYesPosition,\n yesOrderStatus,\n collateralVault,\n vaultTokenAccount,\n yesMint,\n noMint,\n mintAuthority,\n feeRecipient,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n collateralTokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(makerAccounts)\n .instruction();\n\n // Anchor TS doesn't mark UncheckedAccount as writable — force it here\n const frKey = feeRecipient.toBase58();\n for (const k of matchIx.keys) {\n if (k.pubkey.toBase58() === frKey) { k.isWritable = true; break; }\n }\n\n const sig = await this.sendMatchTx(\n [...ed25519Ixs, matchIx],\n lookupTable,\n whitelistedWallet,\n );\n return { signature: sig };\n }\n\n /**\n * MERGE match: 1 YES seller (taker) + N NO sellers (makers).\n *\n * Transaction structure:\n * ix[0] Ed25519(taker/YES seller)\n * ix[1+i] Ed25519(maker_i/NO seller)\n * ix[N+1] match_merge_orders(yesNonce, makerNonces[])\n *\n * remaining_accounts: [maker×5 × N] (no hook accounts — burn doesn't fire hook)\n */\n private async matchMergeOrders(\n yesSigned: SignedOrder,\n makersSigned: SignedOrder[],\n collateralMint: PublicKey,\n feeRecipient: PublicKey,\n whitelistedWallet: anchor.Wallet,\n lookupTable?: AddressLookupTableAccount,\n ): Promise<TxResult> {\n const condition = yesSigned.order.condition;\n\n const [yesMint] = PDA.yesMint(condition, this.programIds);\n const [noMint] = PDA.noMint(condition, this.programIds);\n const [collateralVault] = PDA.collateralVault(collateralMint, this.programIds);\n const [vaultTokenAccount] = PDA.vaultToken(collateralMint, this.programIds);\n\n const sellerYes = yesSigned.order.maker;\n const sellerYesTokenAccount = getAssociatedTokenAddressSync(yesMint, sellerYes, false, TOKEN_2022_PROGRAM_ID);\n const [sellerYesPosition] = PDA.position(condition, 1, sellerYes, this.programIds);\n const sellerYesCollateral = getAssociatedTokenAddressSync(collateralMint, sellerYes);\n const [yesOrderStatus] = PDA.orderStatus(sellerYes, yesSigned.order.nonce, this.programIds);\n\n const makerAccounts = makersSigned.flatMap(m => {\n const maker = m.order.maker;\n const makerNoAta = getAssociatedTokenAddressSync(noMint, maker, false, TOKEN_2022_PROGRAM_ID);\n const [makerNoPosition] = PDA.position(condition, 0, maker, this.programIds);\n const makerUsdcAta = getAssociatedTokenAddressSync(collateralMint, maker);\n const [makerOrderStatus] = PDA.orderStatus(maker, m.order.nonce, this.programIds);\n return [\n { pubkey: maker, isSigner: false, isWritable: false },\n { pubkey: makerNoAta, isSigner: false, isWritable: true },\n { pubkey: makerNoPosition, isSigner: false, isWritable: true },\n { pubkey: makerUsdcAta, isSigner: false, isWritable: true },\n { pubkey: makerOrderStatus,isSigner: false, isWritable: true },\n ];\n });\n\n const whitelisted = whitelistedWallet.publicKey;\n const whitelistEntry = this.whitelistEntryPda(whitelisted);\n const makerNonces = makersSigned.map(m => m.order.nonce);\n\n const ed25519Ixs = [\n buildBatchedEd25519Instruction([yesSigned, ...makersSigned]),\n ];\n\n const matchIx = await this.program.methods\n .matchMergeOrders(yesSigned.order.nonce, makerNonces)\n .accounts({\n whitelisted,\n payer: this.walletPubkey,\n whitelistEntry,\n clobConfig: this.configPda(),\n ixSysvar: IX_SYSVAR,\n condition,\n sellerYes,\n sellerYesTokenAccount,\n sellerYesPosition,\n sellerYesCollateral,\n yesOrderStatus,\n collateralVault,\n vaultTokenAccount,\n yesMint,\n noMint,\n feeRecipient,\n conditionalTokensProgram: this.programIds.conditionalTokens,\n collateralTokenProgram: TOKEN_PROGRAM_ID,\n token2022Program: TOKEN_2022_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(makerAccounts)\n .instruction();\n\n // Anchor TS doesn't mark UncheckedAccount as writable — force it here\n const frKeyM = feeRecipient.toBase58();\n for (const k of matchIx.keys) {\n if (k.pubkey.toBase58() === frKeyM) { k.isWritable = true; break; }\n }\n\n const sig = await this.sendMatchTx(\n [...ed25519Ixs, matchIx],\n lookupTable,\n whitelistedWallet,\n );\n return { signature: sig };\n }\n\n /**\n * Auto-detect match type and execute 1-taker + N-makers in a single transaction.\n *\n * Detection (pure, no RPC) based on taker.order vs makers[0].order:\n * taker.tokenId === makers[0].tokenId: taker BUY + all makers SELL → COMPLEMENTARY\n * taker.tokenId !== makers[0].tokenId + taker BUY + all makers BUY → MINT\n * taker.tokenId !== makers[0].tokenId + taker SELL + all makers SELL → MERGE\n * Otherwise → throws InvalidParamError\n *\n * All makers must have the same tokenId and side as makers[0].\n */\n /**\n * Auto-detect match type and execute in a single transaction.\n * ALT is managed automatically (created on first call per condition, cached thereafter).\n * feeRecipient and collateralMint are derived from on-chain config.\n * Fee distribution (distribute_fee CPI) fires automatically when order.fee > 0.\n *\n * @param opts.marketOracleVault Required for presale markets (is_admin=false).\n * Pass the ATA of the market_oracle PDA so 50% of fee goes there.\n * For admin markets (is_admin=true) omit — payer is used as placeholder (no transfer).\n */\n async matchOrders(\n taker: SignedOrder,\n makers: SignedOrder[],\n opts?: { marketOracleVault?: PublicKey },\n ): Promise<TxResult> {\n if (makers.length === 0) throw new InvalidParamError(\"At least 1 maker required\");\n\n const collateralMint = this.networkConfig.defaultCollateral.mint;\n const cfg = await this.fetchConfig();\n if (!cfg) throw new InvalidParamError(\"CLOB config not found on-chain\");\n const feeRecipient = cfg.feeRecipient;\n const whitelistedWallet = this.provider.wallet as anchor.Wallet;\n\n const alt = await this.ensureAlt(\n taker.order.condition,\n collateralMint,\n taker.order.maker,\n taker.order.nonce,\n makers,\n );\n\n const t = taker.order;\n const m0 = makers[0].order;\n const SIDE_BUY = 0;\n const SIDE_SELL = 1;\n\n if (t.tokenId === m0.tokenId) {\n if (t.side === SIDE_BUY && makers.every(m => m.order.side === SIDE_SELL)) {\n return this.matchComplementary(taker, makers, collateralMint, feeRecipient, whitelistedWallet, alt, opts);\n }\n if (t.side === SIDE_SELL && makers.every(m => m.order.side === SIDE_BUY)) {\n throw new InvalidParamError(\"COMPLEMENTARY N-maker: taker must be the BUY side\");\n }\n throw new InvalidParamError(\"COMPLEMENTARY requires taker=BUY, makers=SELL on same tokenId\");\n }\n\n const allBuy = t.side === SIDE_BUY && makers.every(m => m.order.side === SIDE_BUY);\n const allSell = t.side === SIDE_SELL && makers.every(m => m.order.side === SIDE_SELL);\n\n if (!allBuy && !allSell) throw new InvalidParamError(\"MINT/MERGE: all orders must be same side\");\n if (t.tokenId !== 1) throw new InvalidParamError(\"MINT/MERGE: taker must be YES (tokenId=1)\");\n if (!makers.every(m => m.order.tokenId === 0)) throw new InvalidParamError(\"MINT/MERGE: makers must be NO (tokenId=0)\");\n\n if (allBuy) return this.matchMintOrders(taker, makers, collateralMint, feeRecipient, whitelistedWallet, alt);\n return this.matchMergeOrders(taker, makers, collateralMint, feeRecipient, whitelistedWallet, alt);\n }\n\n // ─── Whitelist admin ─────────────────────────────────────────────────────────\n\n /** Add an address to the CLOB whitelist (owner only). */\n async addToWhitelist(address: PublicKey): Promise<TxResult> {\n const whitelistEntry = this.whitelistEntryPda(address);\n const sig = await this.program.methods\n .addToClobWhitelist(address)\n .accounts({\n owner: this.walletPubkey,\n payer: this.walletPubkey,\n clobConfig: this.configPda(),\n whitelistEntry,\n systemProgram: SystemProgram.programId,\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Batch-add addresses to the CLOB whitelist (owner only). All PDAs created in one tx. */\n async addToWhitelistBatch(addresses: PublicKey[]): Promise<TxResult> {\n if (addresses.length === 0) throw new InvalidParamError(\"At least 1 address required\");\n const remainingAccounts = addresses.map(addr => ({\n pubkey: this.whitelistEntryPda(addr),\n isSigner: false,\n isWritable: true,\n }));\n const sig = await this.program.methods\n .addToClobWhitelistBatch(addresses)\n .accounts({\n owner: this.walletPubkey,\n payer: this.walletPubkey,\n clobConfig: this.configPda(),\n systemProgram: SystemProgram.programId,\n })\n .remainingAccounts(remainingAccounts)\n .rpc();\n return { signature: sig };\n }\n\n /** Remove an address from the CLOB whitelist (owner only). */\n async removeFromWhitelist(address: PublicKey, rentReceiver?: PublicKey): Promise<TxResult> {\n const whitelistEntry = this.whitelistEntryPda(address);\n const sig = await this.program.methods\n .removeFromClobWhitelist(address)\n .accounts({\n owner: this.walletPubkey,\n rentReceiver: rentReceiver ?? this.walletPubkey,\n clobConfig: this.configPda(),\n whitelistEntry,\n })\n .rpc();\n return { signature: sig };\n }\n\n /** Fetch a whitelist entry PDA (returns null if address is not whitelisted). */\n async fetchWhitelistEntry(address: PublicKey): Promise<ClobWhitelistEntry | null> {\n try {\n const pda = this.whitelistEntryPda(address);\n const acc = await (this.program.account as any).clobWhitelistEntry.fetch(pda);\n return { address: acc.address, bump: acc.bump };\n } catch {\n return null;\n }\n }\n\n /** Check if an address is on the CLOB whitelist. */\n async isWhitelisted(address: PublicKey): Promise<boolean> {\n return (await this.fetchWhitelistEntry(address)) !== null;\n }\n\n /** Fetch all whitelisted addresses (scans all ClobWhitelistEntry accounts). */\n async fetchWhitelist(): Promise<PublicKey[]> {\n const entries = await (this.program.account as any).clobWhitelistEntry.all();\n return entries.map((e: any) => e.account.address as PublicKey);\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchConfig(): Promise<ClobConfig | null> {\n try {\n const acc = await (this.program.account as any).clobConfig.fetch(this.configPda());\n return {\n owner: acc.owner,\n operators: acc.operators as PublicKey[],\n operatorsLen: acc.operatorsLen,\n feeRecipient: acc.feeRecipient,\n feeRateBps: acc.feeRateBps,\n conditionalTokensProgram: acc.conditionalTokensProgram,\n isPaused: acc.isPaused,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchOrderStatus(maker: PublicKey, nonce: anchor.BN): Promise<OrderStatus | null> {\n try {\n const [pda] = PDA.orderStatus(maker, nonce, this.programIds);\n const acc = await (this.program.account as any).orderStatus.fetch(pda);\n return {\n maker: acc.maker,\n nonce: acc.nonce,\n isCancelled: acc.isCancelled,\n filledAmount: acc.filledAmount,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async isOrderCancelled(maker: PublicKey, nonce: anchor.BN): Promise<boolean> {\n const status = await this.fetchOrderStatus(maker, nonce);\n return status?.isCancelled === true;\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { PublicKey, SystemProgram, TransactionInstruction } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport { ProgramIds } from \"../config/networks\";\nimport { PDA } from \"../pda\";\nimport { QuestionFee, TxResult } from \"../types\";\n\nexport class FeeManagementClient {\n constructor(\n private readonly program: anchor.Program,\n private readonly provider: anchor.AnchorProvider,\n private readonly programIds: ProgramIds,\n ) {}\n\n async initFeeConfig(\n admin: PublicKey,\n companyAddress: PublicKey,\n referralAddress: PublicKey,\n presaleRevenueAddress: PublicKey,\n investorsMarketRev: number,\n companyMarketRev: number,\n agentsPresaleRev: number,\n companyPresaleRev: number,\n authority: PublicKey,\n payer: PublicKey,\n ): Promise<TxResult> {\n const [feeConfigPda] = PDA.feeConfig(authority, this.programIds);\n const sig = await this.program.methods\n .initialize({\n admin,\n companyAddress,\n referralAddress,\n presaleRevenueAddress,\n investorsMarketRev,\n companyMarketRev,\n agentsPresaleRev,\n companyPresaleRev,\n })\n .accounts({\n authority,\n payer,\n feeConfig: feeConfigPda,\n systemProgram: SystemProgram.programId,\n })\n .signers([])\n .rpc();\n return { signature: sig };\n }\n\n async fetchFeeConfig(owner: PublicKey): Promise<any | null> {\n try {\n const [pda] = PDA.feeConfig(owner, this.programIds);\n return await (this.program.account as any).feeConfig.fetch(pda);\n } catch {\n return null;\n }\n }\n\n /**\n * Fetch per-question fees for a condition.\n * Returns null if no fees have been set yet.\n */\n async fetchQuestionFee(conditionPda: PublicKey): Promise<QuestionFee | null> {\n try {\n const [pda] = PDA.questionFee(conditionPda, this.programIds);\n const acc = await (this.program.account as any).questionFee.fetch(pda);\n return {\n conditionId: new Uint8Array(acc.conditionId),\n mergeFee: acc.mergeFee as BN,\n redeemFee: acc.redeemFee as BN,\n swapFee: acc.swapFee as BN,\n bump: acc.bump as number,\n };\n } catch {\n return null;\n }\n }\n\n /**\n * Set per-question fees for a condition.\n * @param conditionPda - condition PDA from the question\n * @param mergeFee - fee out of FEE_DENOMINATOR (1_000_000), e.g. 2_000 = 0.2%\n * @param redeemFee - fee out of FEE_DENOMINATOR\n * @param swapFee - trading fee out of FEE_DENOMINATOR\n * @param feeConfigOwner - pubkey that owns the fee_config PDA (usually market deployer)\n * @param authority - signer authorized in fee_config whitelist / admin / owner\n * @param payer - rent + tx fee payer\n */\n async updateFeeConfig(\n companyAddress: PublicKey,\n referralAddress: PublicKey,\n presaleRevenueAddress: PublicKey,\n investorsMarketRev: number,\n companyMarketRev: number,\n agentsPresaleRev: number,\n companyPresaleRev: number,\n authority: PublicKey,\n payer: PublicKey,\n ): Promise<TxResult> {\n const [feeConfigPda] = PDA.feeConfig(authority, this.programIds);\n const sig = await this.program.methods\n .updateConfig({\n companyAddress,\n referralAddress,\n presaleRevenueAddress,\n investorsMarketRev,\n companyMarketRev,\n agentsPresaleRev,\n companyPresaleRev,\n })\n .accounts({\n authority,\n payer,\n feeConfig: feeConfigPda,\n })\n .signers([])\n .rpc();\n return { signature: sig };\n }\n\n async setMarketFeeOverride(\n conditionPda: PublicKey,\n investors: number,\n company: number,\n isAdmin: boolean,\n feeConfigOwner: PublicKey,\n authority: PublicKey,\n payer: PublicKey,\n ): Promise<TxResult> {\n const [feeConfigPda] = PDA.feeConfig(feeConfigOwner, this.programIds);\n const [marketFeeOverridePda] = PDA.marketFeeOverride(conditionPda, this.programIds);\n\n const sig = await this.program.methods\n .setMarketFeeOverride(conditionPda, investors, company, isAdmin)\n .accounts({\n authority,\n payer,\n feeConfig: feeConfigPda,\n marketFeeOverride: marketFeeOverridePda,\n systemProgram: SystemProgram.programId,\n })\n .signers([])\n .rpc();\n\n return { signature: sig };\n }\n\n async buildDistributeFeeIx(\n conditionPda: PublicKey,\n amount: BN,\n feeConfigOwner: PublicKey,\n sourceAta: PublicKey,\n companyAta: PublicKey,\n marketOracleVault: PublicKey,\n authority: PublicKey,\n ): Promise<TransactionInstruction> {\n const [feeConfigPda] = PDA.feeConfig(feeConfigOwner, this.programIds);\n const [marketFeeOverridePda] = PDA.marketFeeOverride(conditionPda, this.programIds);\n return this.program.methods\n .distributeFee(conditionPda, amount)\n .accounts({\n feeConfig: feeConfigPda,\n marketFeeOverride: marketFeeOverridePda,\n authority,\n sourceAta,\n companyAta,\n marketOracleVault,\n tokenProgram: new PublicKey(\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"),\n })\n .instruction();\n }\n\n async distributeFee(\n conditionPda: PublicKey,\n amount: BN,\n feeConfigOwner: PublicKey,\n sourceAta: PublicKey,\n companyAta: PublicKey,\n marketOracleVault: PublicKey,\n authority: PublicKey,\n ): Promise<TxResult> {\n const [feeConfigPda] = PDA.feeConfig(feeConfigOwner, this.programIds);\n const [marketFeeOverridePda] = PDA.marketFeeOverride(conditionPda, this.programIds);\n\n const sig = await this.program.methods\n .distributeFee(conditionPda, amount)\n .accounts({\n feeConfig: feeConfigPda,\n marketFeeOverride: marketFeeOverridePda,\n authority,\n sourceAta,\n companyAta,\n marketOracleVault,\n tokenProgram: new PublicKey(\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"),\n })\n .signers([])\n .rpc();\n\n return { signature: sig };\n }\n\n async setQuestionFee(\n conditionPda: PublicKey,\n mergeFee: BN,\n redeemFee: BN,\n swapFee: BN,\n feeConfigOwner: PublicKey,\n authority: PublicKey,\n payer: PublicKey,\n ): Promise<TxResult> {\n const [feeConfigPda] = PDA.feeConfig(feeConfigOwner, this.programIds);\n const [questionFeePda] = PDA.questionFee(conditionPda, this.programIds);\n\n const sig = await this.program.methods\n .setQuestionFee(\n Array.from(conditionPda.toBytes()),\n mergeFee,\n redeemFee,\n swapFee,\n )\n .accounts({\n authority,\n payer,\n feeConfig: feeConfigPda,\n questionFee: questionFeePda,\n systemProgram: SystemProgram.programId,\n })\n .signers([])\n .rpc();\n\n return { signature: sig };\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { PublicKey, SystemProgram, Transaction } from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\n\nexport interface PresaleInfo {\n version: number;\n questionMarketConfig: PublicKey;\n presaleIndex: anchor.BN;\n creator: PublicKey;\n currencyMint: PublicKey;\n qtMint: PublicKey;\n price: anchor.BN;\n startTime: anchor.BN;\n endTime: anchor.BN;\n status: \"pending\" | \"approved\" | \"rejected\";\n soldTokenAmount: anchor.BN;\n initialTokenAmountCreator: anchor.BN;\n agentsRev: number;\n companyRev: number;\n referralAddress: PublicKey;\n companyAddress: PublicKey;\n isDistributeRevenue: boolean;\n creatorClaimableRevenue: anchor.BN;\n bump: number;\n}\n\nexport interface UserBuyRecord {\n user: PublicKey;\n presale: PublicKey;\n currencyAmount: anchor.BN;\n bump: number;\n}\n\nexport class PresaleClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds,\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n presalePda(questionMarketConfig: PublicKey, presaleIndex: anchor.BN): PublicKey {\n return PDA.presale(questionMarketConfig, presaleIndex, this.programIds)[0];\n }\n\n qtMintPda(presalePda: PublicKey): PublicKey {\n return PDA.qtMint(presalePda, this.programIds)[0];\n }\n\n qtAuthorityPda(presalePda: PublicKey): PublicKey {\n return PDA.qtAuthority(presalePda, this.programIds)[0];\n }\n\n userBuyRecordPda(presalePda: PublicKey, user: PublicKey): PublicKey {\n return PDA.userBuyRecord(presalePda, user, this.programIds)[0];\n }\n\n /**\n * Buy MST tokens during presale.\n * qtAmount: amount of MST to receive (9 decimals).\n * USDC cost = qtAmount * price / 1e9.\n */\n async buy(\n presalePda: PublicKey,\n qtAmount: anchor.BN,\n buyer: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n const presale = await this.fetchPresale(presalePda);\n if (!presale) throw new Error(`Presale not found: ${presalePda.toBase58()}`);\n\n const qtMint = presale.qtMint;\n const currencyMint = presale.currencyMint;\n const qtAuthority = this.qtAuthorityPda(presalePda);\n const userBuyRecord = this.userBuyRecordPda(presalePda, buyer);\n\n const buyerQtAta = getAssociatedTokenAddressSync(qtMint, buyer);\n const buyerCurrencyAta = getAssociatedTokenAddressSync(currencyMint, buyer);\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n\n return this.program.methods\n .buy(qtAmount)\n .accounts({\n buyer,\n payer,\n presale: presalePda,\n qtMint,\n qtAuthority,\n buyerQtAta,\n buyerCurrencyAta,\n presaleVault,\n currencyMint,\n userBuyRecord,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Refund: burn user's MST and return USDC.\n * Only callable when presale status = Rejected.\n */\n async refund(\n presalePda: PublicKey,\n user: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n const presale = await this.fetchPresale(presalePda);\n if (!presale) throw new Error(`Presale not found: ${presalePda.toBase58()}`);\n\n const qtMint = presale.qtMint;\n const currencyMint = presale.currencyMint;\n const userBuyRecord = this.userBuyRecordPda(presalePda, user);\n\n const userQtAta = getAssociatedTokenAddressSync(qtMint, user);\n const userCurrencyAta = getAssociatedTokenAddressSync(currencyMint, user);\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n\n return this.program.methods\n .refund()\n .accounts({\n user,\n presale: presalePda,\n qtMint,\n userQtAta,\n userCurrencyAta,\n presaleVault,\n currencyMint,\n userBuyRecord,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Creator claims their share of presale revenue after distribute_presale_revenue.\n */\n async claimRevenue(\n presalePda: PublicKey,\n creator: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n const presale = await this.fetchPresale(presalePda);\n if (!presale) throw new Error(`Presale not found: ${presalePda.toBase58()}`);\n\n const currencyMint = presale.currencyMint;\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n const creatorCurrencyAta = getAssociatedTokenAddressSync(currencyMint, creator);\n\n return this.program.methods\n .claimRevenue()\n .accounts({\n creator,\n presale: presalePda,\n presaleVault,\n creatorCurrencyAta,\n currencyMint,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * Transfer creator_claimable_revenue (80%) to BOTMM wallet.\n * Call after collectPresaleRevenue (distribute_presale_revenue).\n */\n async distributeBotmmRevenue(\n presalePda: PublicKey,\n botmmAddress: PublicKey,\n currencyMint?: PublicKey,\n ): Promise<Transaction> {\n if (!currencyMint) {\n const presale = await this.fetchPresale(presalePda);\n if (!presale) throw new Error(`Presale not found: ${presalePda.toBase58()}`);\n currencyMint = presale.currencyMint;\n }\n\n const presaleVault = getAssociatedTokenAddressSync(currencyMint, presalePda, true);\n const botmmTokenAccount = getAssociatedTokenAddressSync(currencyMint, botmmAddress);\n\n return this.program.methods\n .distributeBotmmRevenue()\n .accounts({\n presale: presalePda,\n presaleVault,\n currencyMint,\n botmmTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .transaction();\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchPresale(presalePda: PublicKey): Promise<PresaleInfo | null> {\n try {\n const acc = await (this.program.account as any).presaleAccount.fetch(presalePda);\n const rawStatus = acc.status;\n const status: PresaleInfo[\"status\"] =\n rawStatus.approved !== undefined ? \"approved\" :\n rawStatus.rejected !== undefined ? \"rejected\" : \"pending\";\n return {\n version: acc.version,\n questionMarketConfig: acc.questionMarketConfig,\n presaleIndex: acc.presaleIndex,\n creator: acc.creator,\n currencyMint: acc.currencyMint,\n qtMint: acc.qtMint,\n price: acc.price,\n startTime: acc.startTime,\n endTime: acc.endTime,\n status,\n soldTokenAmount: acc.soldTokenAmount,\n initialTokenAmountCreator: acc.initialTokenAmountCreator,\n agentsRev: acc.agentsRev,\n companyRev: acc.companyRev,\n referralAddress: acc.referralAddress,\n companyAddress: acc.companyAddress,\n isDistributeRevenue: acc.isDistributeRevenue,\n creatorClaimableRevenue: acc.creatorClaimableRevenue,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchUserBuyRecord(presalePda: PublicKey, user: PublicKey): Promise<UserBuyRecord | null> {\n try {\n const pda = this.userBuyRecordPda(presalePda, user);\n const acc = await (this.program.account as any).userBuyRecord.fetch(pda);\n return {\n user: acc.user,\n presale: acc.presale,\n currencyAmount: acc.currencyAmount,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { PublicKey, SystemProgram, Transaction } from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n} from \"@solana/spl-token\";\nimport { PDA } from \"../pda\";\nimport { ProgramIds } from \"../config/networks\";\n\nexport interface MarketOracleInfo {\n version: number;\n question: PublicKey;\n questionMarketConfig: PublicKey;\n currencyMint: PublicKey;\n creator: PublicKey;\n qtMint: PublicKey;\n feesDistributed: boolean;\n qtTotalSupply: anchor.BN;\n totalClaimed: anchor.BN;\n bump: number;\n}\n\nexport interface UserClaimRecord {\n user: PublicKey;\n marketOracle: PublicKey;\n hasClaimed: boolean;\n bump: number;\n}\n\nexport class MarketOracleClient {\n private readonly program: anchor.Program;\n private readonly provider: anchor.AnchorProvider;\n private readonly programIds: ProgramIds;\n\n constructor(\n program: anchor.Program,\n provider: anchor.AnchorProvider,\n programIds: ProgramIds,\n ) {\n this.program = program;\n this.provider = provider;\n this.programIds = programIds;\n }\n\n get walletPubkey(): PublicKey {\n return this.provider.wallet.publicKey;\n }\n\n marketOraclePda(questionPda: PublicKey): PublicKey {\n return PDA.marketOraclePda(questionPda, this.programIds)[0];\n }\n\n userClaimRecordPda(marketOraclePda: PublicKey, user: PublicKey): PublicKey {\n return PDA.userClaimRecord(marketOraclePda, user, this.programIds)[0];\n }\n\n /**\n * User burns their MST and claims proportional share of oracle vault USDC.\n * Call after market.collectTradingFee snapshotted qt supply.\n */\n async claimFeesShare(\n marketOraclePda: PublicKey,\n user: PublicKey = this.walletPubkey,\n payer: PublicKey = this.walletPubkey,\n ): Promise<Transaction> {\n const oracle = await this.fetchMarketOracle(marketOraclePda);\n if (!oracle) throw new Error(`MarketOracle not found: ${marketOraclePda.toBase58()}`);\n\n const currencyMint = oracle.currencyMint;\n const qtMint = oracle.qtMint;\n const marketOracleVault = getAssociatedTokenAddressSync(currencyMint, marketOraclePda, true);\n const userQtAta = getAssociatedTokenAddressSync(qtMint, user);\n const userCurrencyAta = getAssociatedTokenAddressSync(currencyMint, user);\n const userClaimRecord = this.userClaimRecordPda(marketOraclePda, user);\n\n return this.program.methods\n .claimFeesShare()\n .accounts({\n user,\n payer,\n marketOracle: marketOraclePda,\n marketOracleVault,\n currencyMint,\n qtMint,\n userQtAta,\n userCurrencyAta,\n userClaimRecord,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n // ─── Queries ─────────────────────────────────────────────────────────────────\n\n async fetchMarketOracle(marketOraclePda: PublicKey): Promise<MarketOracleInfo | null> {\n try {\n const acc = await (this.program.account as any).marketOracleAccount.fetch(marketOraclePda);\n return {\n version: acc.version,\n question: acc.question,\n questionMarketConfig: acc.questionMarketConfig,\n currencyMint: acc.currencyMint,\n creator: acc.creator,\n qtMint: acc.qtMint,\n feesDistributed: acc.feesDistributed,\n qtTotalSupply: acc.qtTotalSupply,\n totalClaimed: acc.totalClaimed,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n\n async fetchUserClaimRecord(marketOraclePda: PublicKey, user: PublicKey): Promise<UserClaimRecord | null> {\n try {\n const pda = this.userClaimRecordPda(marketOraclePda, user);\n const acc = await (this.program.account as any).userClaimRecord.fetch(pda);\n return {\n user: acc.user,\n marketOracle: acc.marketOracle,\n hasClaimed: acc.hasClaimed,\n bump: acc.bump,\n };\n } catch {\n return null;\n }\n }\n}\n","import * as anchor from \"@coral-xyz/anchor\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport { NetworkConfig, ProgramIds } from \"./config/networks\";\nimport { OracleClient } from \"./programs/oracle\";\nimport { HookClient } from \"./programs/hook\";\nimport { MarketClient } from \"./programs/market\";\nimport { CtfClient } from \"./programs/ctf\";\nimport { ClobClient } from \"./programs/clob\";\nimport { FeeManagementClient } from \"./programs/fee_management\";\nimport { PresaleClient } from \"./programs/presale\";\nimport { MarketOracleClient } from \"./programs/market_oracle\";\n\nimport oracleIdl from \"./idls/oracle.json\";\nimport hookIdl from \"./idls/hook.json\";\nimport questionMarketIdl from \"./idls/question_market.json\";\nimport conditionalTokensIdl from \"./idls/conditional_tokens.json\";\nimport clobExchangeIdl from \"./idls/clob_exchange.json\";\nimport feeManagementIdl from \"./idls/fee_management.json\";\nimport presaleIdl from \"./idls/presale.json\";\nimport marketOracleIdl from \"./idls/market_oracle.json\";\n\nexport class XMarketSDK {\n readonly provider: anchor.AnchorProvider;\n readonly networkConfig: NetworkConfig;\n\n private readonly _programIds: ProgramIds;\n private readonly _marketOwner: PublicKey;\n\n private _oracle?: OracleClient;\n private _hook?: HookClient;\n private _market?: MarketClient;\n private _ctf?: CtfClient;\n private _clob?: ClobClient;\n private _fee?: FeeManagementClient;\n private _presale?: PresaleClient;\n private _marketOracle?: MarketOracleClient;\n\n constructor(\n config: NetworkConfig,\n wallet: anchor.Wallet,\n marketOwner?: PublicKey,\n ) {\n this.networkConfig = config;\n this.provider = new anchor.AnchorProvider(\n new Connection(config.rpcUrl, \"confirmed\"),\n wallet,\n { commitment: \"confirmed\", preflightCommitment: \"confirmed\" },\n );\n anchor.setProvider(this.provider);\n this._programIds = config.programIds;\n this._marketOwner = marketOwner ?? wallet.publicKey;\n }\n\n private _withAddress(idl: object, address: PublicKey): anchor.Idl {\n return { ...idl, address: address.toBase58() } as anchor.Idl;\n }\n\n get oracle(): OracleClient {\n if (!this._oracle) {\n const program = new anchor.Program(this._withAddress(oracleIdl, this._programIds.oracle), this.provider);\n this._oracle = new OracleClient(program, this.provider, this._programIds);\n }\n return this._oracle;\n }\n\n get hook(): HookClient {\n if (!this._hook) {\n const program = new anchor.Program(this._withAddress(hookIdl, this._programIds.hook), this.provider);\n this._hook = new HookClient(program, this.provider, this._programIds);\n }\n return this._hook;\n }\n\n get market(): MarketClient {\n if (!this._market) {\n const program = new anchor.Program(this._withAddress(questionMarketIdl, this._programIds.questionMarket), this.provider);\n this._market = new MarketClient(program, this.provider, this._programIds, this._marketOwner);\n this._market.ctfClient = this.ctf;\n }\n return this._market;\n }\n\n get ctf(): CtfClient {\n if (!this._ctf) {\n const program = new anchor.Program(this._withAddress(conditionalTokensIdl, this._programIds.conditionalTokens), this.provider);\n this._ctf = new CtfClient(program, this.provider, this._programIds);\n }\n return this._ctf;\n }\n\n get clob(): ClobClient {\n if (!this._clob) {\n const program = new anchor.Program(this._withAddress(clobExchangeIdl, this._programIds.clobExchange), this.provider);\n this._clob = new ClobClient(program, this.provider, this._programIds, this.networkConfig);\n if (this.networkConfig.feeConfigOwner && this._programIds.feeManagement) {\n this._clob.feeConfigOwner = this.networkConfig.feeConfigOwner;\n this._clob.feeClient = this.fee;\n }\n }\n return this._clob;\n }\n\n get fee(): FeeManagementClient {\n if (!this._fee) {\n if (!this._programIds.feeManagement) throw new Error(\"feeManagement program ID not configured in NetworkConfig\");\n const program = new anchor.Program(this._withAddress(feeManagementIdl, this._programIds.feeManagement), this.provider);\n this._fee = new FeeManagementClient(program, this.provider, this._programIds);\n }\n return this._fee;\n }\n\n get presale(): PresaleClient {\n if (!this._presale) {\n if (!this._programIds.presale) throw new Error(\"presale program ID not configured in NetworkConfig\");\n const program = new anchor.Program(this._withAddress(presaleIdl, this._programIds.presale), this.provider);\n this._presale = new PresaleClient(program, this.provider, this._programIds);\n }\n return this._presale;\n }\n\n get marketOracle(): MarketOracleClient {\n if (!this._marketOracle) {\n if (!this._programIds.marketOracle) throw new Error(\"marketOracle program ID not configured in NetworkConfig\");\n const program = new anchor.Program(this._withAddress(marketOracleIdl, this._programIds.marketOracle), this.provider);\n this._marketOracle = new MarketOracleClient(program, this.provider, this._programIds);\n }\n return this._marketOracle;\n }\n}\n","/**\n * High-level order utilities — build, sign, serialize, verify, detect match type.\n *\n * These helpers layer on top of the low-level `signing.ts` primitives and\n * provide a convenient interface for both the browser (wallet adapters) and\n * Node.js (Keypair-based) environments.\n */\nimport { Keypair, PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport * as nacl from \"tweetnacl\";\nimport { Order, SignedOrder, InvalidParamError } from \"./types\";\nimport { serializeOrderToBytes, signOrder } from \"./signing\";\n\n// ─── Order factory ────────────────────────────────────────────────────────────\n\n/**\n * Build a fully-populated Order.\n * Sets `signer = maker` (proxy not yet supported).\n * `taker` defaults to new PublicKey(new Uint8Array(32)) (public order).\n * `createdAt` defaults to current Unix timestamp.\n * `fee` defaults to 0 (use global fee_rate_bps).\n */\nexport function buildOrder(params: {\n maker: PublicKey;\n condition: PublicKey;\n tokenId: number;\n side: number;\n makerAmount: BN;\n takerAmount: BN;\n nonce?: BN;\n expiry?: BN;\n createdAt?: BN;\n fee?: BN;\n taker?: PublicKey;\n}): Order {\n return {\n maker: params.maker,\n condition: params.condition,\n tokenId: params.tokenId,\n side: params.side,\n makerAmount: params.makerAmount,\n takerAmount: params.takerAmount,\n nonce: params.nonce ?? new BN(Date.now()),\n expiry: params.expiry ?? new BN(0),\n createdAt: params.createdAt ?? new BN(Math.floor(Date.now() / 1000)),\n fee: params.fee ?? new BN(0),\n taker: params.taker ?? new PublicKey(new Uint8Array(32)),\n signer: params.maker,\n };\n}\n\n// ─── Signing helpers ──────────────────────────────────────────────────────────\n\n/**\n * Sign an order with a Keypair.\n * Uses Ed25519 (nacl.sign.detached) over the 178-byte canonical message.\n */\nexport function signOrderWithKeypair(order: Order, keypair: Keypair): SignedOrder {\n const message = serializeOrderToBytes(order);\n const signature = nacl.sign.detached(message, keypair.secretKey);\n return { order, signature };\n}\n\n/** Return the 178-byte canonical message that gets signed for an order. */\nexport function getOrderSignBytes(order: Order): Uint8Array {\n return serializeOrderToBytes(order);\n}\n\n// ─── Serialization ────────────────────────────────────────────────────────────\n\n/** Serialize a SignedOrder to bytes: 178 (order) + 64 (sig) = 242 bytes. */\nexport function serializeSignedOrder(signed: SignedOrder): Uint8Array {\n const orderBytes = serializeOrderToBytes(signed.order);\n const buf = new Uint8Array(242);\n buf.set(orderBytes, 0);\n buf.set(signed.signature, 178);\n return buf;\n}\n\n/**\n * Deserialize 242 bytes back to a SignedOrder.\n * Field layout mirrors `serializeOrderToBytes()` + 64-byte signature.\n */\nexport function deserializeSignedOrder(bytes: Uint8Array): SignedOrder {\n if (bytes.length !== 242) throw new InvalidParamError(\"SignedOrder must be 242 bytes\");\n\n const readPubkey = (offset: number) => new PublicKey(bytes.slice(offset, offset + 32));\n const readU64 = (offset: number) => new BN(bytes.slice(offset, offset + 8), \"le\");\n const readI64 = (offset: number) => new BN(bytes.slice(offset, offset + 8), \"le\");\n\n const order: Order = {\n maker: readPubkey(0),\n condition: readPubkey(32),\n tokenId: bytes[64],\n side: bytes[65],\n makerAmount: readU64(66),\n takerAmount: readU64(74),\n nonce: readU64(82),\n expiry: readI64(90),\n createdAt: readI64(98),\n fee: readU64(106),\n taker: readPubkey(114),\n signer: readPubkey(146),\n };\n const signature = bytes.slice(178, 242);\n return { order, signature };\n}\n\n// ─── Verification ─────────────────────────────────────────────────────────────\n\n/**\n * Verify the Ed25519 signature on a signed order.\n * Returns true only if the signature is valid for `order.maker` (or `order.signer`).\n */\nexport function verifySignedOrder(signed: SignedOrder): boolean {\n const message = serializeOrderToBytes(signed.order);\n return nacl.sign.detached.verify(\n message,\n signed.signature,\n signed.order.signer.toBytes(),\n );\n}\n\n// ─── Match type detection ─────────────────────────────────────────────────────\n\nexport type MatchType = \"COMPLEMENTARY\" | \"MINT\" | \"MERGE\";\n\n/**\n * Detect the match type from two orders (pure, no RPC).\n *\n * | tokenId A === B | sides | type |\n * |-----------------|--------------|---------------|\n * | yes | one BUY+SELL | COMPLEMENTARY |\n * | no | both BUY | MINT |\n * | no | both SELL | MERGE |\n */\nexport function detectMatchType(a: Order | SignedOrder, b: Order | SignedOrder): MatchType {\n const _a = \"order\" in a ? a.order : a;\n const _b = \"order\" in b ? b.order : b;\n return _detectMatchType(_a, _b);\n}\n\nfunction _detectMatchType(a: Order, b: Order): MatchType {\n const SIDE_BUY = 0;\n const SIDE_SELL = 1;\n\n if (a.tokenId === b.tokenId) {\n const aBuy = a.side === SIDE_BUY;\n const bBuy = b.side === SIDE_BUY;\n if (aBuy !== bBuy) return \"COMPLEMENTARY\";\n throw new InvalidParamError(\n \"Orders with same tokenId must be one BUY and one SELL (COMPLEMENTARY)\"\n );\n }\n\n const aBuy = a.side === SIDE_BUY;\n const bBuy = b.side === SIDE_BUY;\n if (aBuy && bBuy) return \"MINT\";\n if (!aBuy && !bBuy) return \"MERGE\";\n throw new InvalidParamError(\n \"Orders with different tokenIds must both be BUY (MINT) or both SELL (MERGE)\"\n );\n}\n\nexport { signOrder };\n","/**\n * SPL Token / Token-2022 approve utilities for the CLOB matching flow.\n *\n * Before a match instruction can transfer tokens on behalf of a user, the user\n * must approve the CLOB config PDA as a delegate. These helpers build the\n * approve transactions that need two signers:\n * - signer = the token owner (user wallet — must sign the approve instruction)\n * - payer = the BE wallet (pays transaction fees)\n *\n * Both must sign the resulting Transaction before sending.\n */\nimport {\n PublicKey,\n Transaction,\n SystemProgram,\n} from \"@solana/web3.js\";\nimport {\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n createApproveInstruction,\n} from \"@solana/spl-token\";\nimport BN from \"bn.js\";\nimport { PDA } from \"./pda\";\nimport { ProgramIds } from \"./config/networks\";\n\n/** Maximum u64 — approve \"unlimited\" amount. */\nexport const MAX_APPROVE_AMOUNT = new BN(\"18446744073709551615\");\n\n// ─── Collateral (SPL Token) approve ──────────────────────────────────────────\n\n/**\n * Build a Transaction that approves the CLOB config PDA to transfer collateral\n * (USDC) from the signer's ATA.\n *\n * Required signers: signer (token owner), payer (fee payer).\n *\n * @param collateralMint - e.g. USDC mint\n * @param signer - token owner (must sign)\n * @param payer - fee payer wallet pubkey\n * @param delegate - clob config PDA (the spender)\n * @param amount - amount to approve (defaults to MAX_APPROVE_AMOUNT)\n */\nexport function buildApproveCollateralTx(\n collateralMint: PublicKey,\n signer: PublicKey,\n payer: PublicKey,\n delegate: PublicKey,\n amount: BN = MAX_APPROVE_AMOUNT,\n): Transaction {\n const ownerAta = getAssociatedTokenAddressSync(collateralMint, signer, false, TOKEN_PROGRAM_ID);\n const approveIx = createApproveInstruction(\n ownerAta,\n delegate,\n signer,\n BigInt(amount.toString()),\n [],\n TOKEN_PROGRAM_ID,\n );\n const tx = new Transaction();\n tx.feePayer = payer;\n tx.add(approveIx);\n return tx;\n}\n\n/**\n * Build a Transaction that approves the CLOB config PDA to transfer BOTH\n * YES and NO outcome tokens from the signer's ATAs (two approve instructions).\n *\n * Required signers: signer (token owner), payer (fee payer).\n */\nexport function buildApproveAllOutcomeTokensTx(\n condition: PublicKey,\n signer: PublicKey,\n payer: PublicKey,\n delegate: PublicKey,\n programIds: ProgramIds,\n amount: BN = MAX_APPROVE_AMOUNT,\n): Transaction {\n const [yesMint] = PDA.yesMint(condition, programIds);\n const [noMint] = PDA.noMint(condition, programIds);\n\n const yesAta = getAssociatedTokenAddressSync(yesMint, signer, false, TOKEN_2022_PROGRAM_ID);\n const noAta = getAssociatedTokenAddressSync(noMint, signer, false, TOKEN_2022_PROGRAM_ID);\n const amountBig = BigInt(amount.toString());\n\n const approveYesIx = createApproveInstruction(\n yesAta, delegate, signer, amountBig, [], TOKEN_2022_PROGRAM_ID,\n );\n const approveNoIx = createApproveInstruction(\n noAta, delegate, signer, amountBig, [], TOKEN_2022_PROGRAM_ID,\n );\n\n const tx = new Transaction();\n tx.feePayer = payer;\n tx.add(approveYesIx, approveNoIx);\n return tx;\n}\n"]}
|