orbit-dlmm 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/constants.ts","../src/idl/orbit_finance.json","../src/accounts/pool.ts","../src/pda/bin-array.ts","../src/pda/pool.ts","../src/pda/position.ts","../src/pda/liquidity-lock.ts","../src/pda/rewards.ts","../src/pda/helpers.ts","../src/accounts/bin-array.ts","../src/accounts/position.ts","../src/transactions/builder.ts","../src/instructions/add-liquidity.ts","../src/instructions/remove-liquidity.ts","../src/instructions/swap.ts","../src/instructions/position.ts","../src/instructions/rewards.ts","../src/math/distribution.ts","../src/math/price.ts","../src/cipher-dlmm.ts","../src/errors/index.ts"],"names":["PublicKey","AnchorProvider","Program","toNumber","toBigInt","toPubkey","ComputeBudgetProgram","TransactionMessage","VersionedTransaction","BN","TOKEN_PROGRAM_ID","getAssociatedTokenAddress","createAssociatedTokenAccountIdempotentInstruction","ASSOCIATED_TOKEN_PROGRAM_ID","SystemProgram","TransactionInstruction"],"mappings":"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","file":"index.js","sourcesContent":["import { PublicKey } from \"@solana/web3.js\";\n\n/** Default CipherDLMM program ID on Solana mainnet */\nexport const DEFAULT_PROGRAM_ID = new PublicKey(\n \"Fn3fA3fjsmpULNL7E9U79jKTe1KHxPtQeWdURCbJXCnM\"\n);\n\n/** Number of bins per BinArray account */\nexport const BIN_ARRAY_SIZE = 64;\n\n/** Maximum bins per add_liquidity_batch transaction */\nexport const MAX_BINS_PER_TX = 32;\n\n/** Heap frame required by the program (256KB) */\nexport const REQUIRED_HEAP_BYTES = 262144;\n\n/** Known token mints */\nexport const KNOWN_MINTS = {\n CIPHER: new PublicKey(\"Ciphern9cCXtms66s8Mm6wCFC27b2JProRQLYmiLMH3N\"),\n USDC: new PublicKey(\"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\"),\n SOL: new PublicKey(\"So11111111111111111111111111111111111111112\"),\n} as const;\n\n/** Valid bin step values (basis points) */\nexport const VALID_BIN_STEPS = [\n 1, 2, 4, 5, 8, 10, 15, 16, 20, 25, 30, 50,\n 75, 80, 100, 125, 150, 160, 200, 250, 300, 400,\n] as const;\n","{\n \"address\": \"Fn3fA3fjsmpULNL7E9U79jKTe1KHxPtQeWdURCbJXCnM\",\n \"metadata\": {\n \"name\": \"orbit_finance\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\"\n },\n \"instructions\": [\n {\n \"name\": \"add_liquidity_batch\",\n \"docs\": [\n \"Adds liquidity to multiple bins with LAZY ACCOUNT CREATION.\",\n \"\",\n \"# Optimization vs add_liquidity_v2\",\n \"Reduces pool creation from ~150 transactions to 2-7 transactions by:\",\n \"- Lazy-creating BinArrays on-demand (no pre-coordination)\",\n \"- Lazy-creating Position if first time (init_if_needed)\",\n \"- Lazy-creating PositionBins on-demand\",\n \"- Processing all bins atomically (all-or-nothing)\",\n \"\",\n \"# Process\",\n \"1. Initialize Position if first time (init_if_needed)\",\n \"2. Transfer total tokens to vaults\",\n \"3. For each bin:\",\n \"- Create BinArray if doesn't exist (lazy)\",\n \"- Create PositionBin if doesn't exist (lazy)\",\n \"- Calculate shares and update reserves\",\n \"4. Validate vault reconciliation\",\n \"\",\n \"# Remaining Accounts Layout\",\n \"[bin_array_0, position_bin_0, bin_array_1, position_bin_1, ...]\",\n \"\",\n \"# Limits\",\n \"- Max 32 bins per transaction (due to transaction size limits)\",\n \"- For pools with >32 bins, split into multiple batched calls\",\n \"\",\n \"# Security\",\n \"- All bin indices must be canonically encoded\",\n \"- No duplicate bin indices\",\n \"- PDA validation prevents account substitution\"\n ],\n \"discriminator\": [\n 254,\n 87,\n 215,\n 234,\n 0,\n 131,\n 76,\n 231\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool (zero-copy).\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"docs\": [\n \"Position PDA - created if doesn't exist (lazy initialization).\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"nonce\"\n }\n ]\n }\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User (signs and pays for account creation).\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"user_base\",\n \"docs\": [\n \"User's base token account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_quote\",\n \"docs\": [\n \"User's quote token account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"Pool's base vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"Pool's quote vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"deposits\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"BinLiquidityDeposit\"\n }\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_liquidity_v2\",\n \"docs\": [\n \"Adds liquidity to multiple bins using BinArray architecture.\",\n \"\",\n \"# V2 Features\",\n \"- Snapshots fee growth before deposit (prevents front-running)\",\n \"- Validates vault balance increases match expected amounts\",\n \"- Post-deposit accounting validation\",\n \"- Auto-compounding fee tracking initialized\",\n \"\",\n \"# Usage\",\n \"Can deposit into bins across multiple BinArrays in a single transaction.\"\n ],\n \"discriminator\": [\n 126,\n 118,\n 210,\n 37,\n 80,\n 190,\n 19,\n 105\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool (zero-copy).\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Position owner (signs).\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"owner_base\",\n \"docs\": [\n \"Owner's base token account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"owner_quote\",\n \"docs\": [\n \"Owner's quote token account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"Pool's base vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"Pool's quote vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"docs\": [\n \"Position PDA.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"position.nonce\",\n \"account\": \"Position\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"deposits\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"BinLiquidityDeposit\"\n }\n }\n }\n }\n ]\n },\n {\n \"name\": \"admin_fund_rewards\",\n \"docs\": [\n \"Updates reward indexes after off-chain fee vault deposits.\",\n \"\",\n \"For pools where fee split sends 100% to creator vault, the keeper\",\n \"sweeps and deposits staker/NFT shares into the fee vaults manually.\",\n \"This instruction updates the Q128 reward indexes so users can claim.\",\n \"\",\n \"# Security\",\n \"- Admin or fee_withdraw_authority only\",\n \"- Does NOT transfer tokens (deposit must happen separately)\",\n \"- Indexes can only increase (monotonic)\"\n ],\n \"discriminator\": [\n 87,\n 214,\n 218,\n 181,\n 148,\n 146,\n 208,\n 252\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Must be pool.admin or pool.fee_withdraw_authority\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"cipher_mint\",\n \"docs\": [\n \"CIPHER token mint (for live supply query)\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"holder_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"nft_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_staked_supply\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claim_holder_rewards\",\n \"docs\": [\n \"Claims holder rewards for CIPHER token holders.\",\n \"**STAKING REQUIRED**: Users claim based on time-weighted staked CIPHER amount.\",\n \"**PREREQUISITES**:\",\n \"- User must call init_user_holder_state first\",\n \"- User must stake CIPHER in Streamflow\",\n \"- User must call sync_holder_stake at least once\",\n \"Rewards are calculated using Q128 index-based tracking (same as Uniswap V3).\",\n \"\",\n \"# Process\",\n \"1. Validate user has synced via sync_holder_stake (last_sync_time > 0)\",\n \"2. Calculate current period rewards: (current_index - entry_index) * staked_amount / Q128\",\n \"3. Calculate total claimable: pending_rewards + current_period_rewards\",\n \"4. Transfer from holders_fee_vault to user\",\n \"5. Update user state: clear pending, reset entry_index, increment total_claimed\",\n \"\",\n \"# Security\",\n \"- FLASH LOAN PROTECTION: Uses synced staked_amount from user state, NOT live balance\",\n \"- Time-weighted: Rewards only accumulate during staking periods\",\n \"- Checkpoint-based: sync_holder_stake verifies stake via Streamflow CPI\",\n \"- Index updated after claim (prevents double-claiming)\",\n \"- Claimable bounded by vault balance\"\n ],\n \"discriminator\": [\n 79,\n 182,\n 142,\n 158,\n 108,\n 127,\n 120,\n 174\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (immutable, validation only)\"\n ]\n },\n {\n \"name\": \"holder_global_state\",\n \"docs\": [\n \"Global holder state (read current index)\"\n ]\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User claiming rewards\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"user_reward_destination\",\n \"docs\": [\n \"User's destination token account for rewards (pool quote token)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"holders_fee_vault\",\n \"docs\": [\n \"Holders fee vault (source of reward tokens)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_holder_state\",\n \"docs\": [\n \"User holder state (must be synced via sync_holder_stake at least once)\",\n \"PDA: [b\\\"holder_user\\\", user]\",\n \"SECURITY FIX: Added PDA seed validation to prevent wrong user state\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 104,\n 111,\n 108,\n 100,\n 101,\n 114,\n 95,\n 117,\n 115,\n 101,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"pool_authority\",\n \"docs\": [\n \"Pool PDA authority (signs for holders_fee_vault transfer)\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"claim_nft_rewards\",\n \"docs\": [\n \"Claims NFT rewards for CIPHER_OWLS NFT holders.\",\n \"**NO STAKING REQUIRED**: Users claim based on NFT ownership at claim time.\",\n \"**PREREQUISITE**: User must call init_user_nft_state first.\",\n \"**WEIGHTED BY RARITY**: Rare NFTs earn more than common (Common: 0.025, Uncommon: 0.05, Rare: 0.1).\",\n \"**MAX 10 NFTs PER CLAIM**: Prevents compute limit issues.\",\n \"\",\n \"# Process\",\n \"1. Verify each NFT (collection, ownership, rarity)\",\n \"2. Calculate total weight: sum(nft_rarities.map(r => r.weight()))\",\n \"3. Calculate claimable: (index_delta * user_weight) / Q128\",\n \"4. Transfer from nft_fee_vault to user\",\n \"5. Update user state with new index\",\n \"\",\n \"# Security\",\n \"- Collection verification via Metaplex (prevents fake NFTs)\",\n \"- Ownership verified at claim time (prevents borrowed NFT exploits)\",\n \"- Index updated after claim (prevents double-claiming)\",\n \"- Claimable bounded by vault balance\"\n ],\n \"discriminator\": [\n 155,\n 218,\n 162,\n 252,\n 207,\n 252,\n 197,\n 230\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (immutable, validation only)\"\n ]\n },\n {\n \"name\": \"nft_global_state\",\n \"docs\": [\n \"Global NFT state (read current index)\"\n ]\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User claiming rewards\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"user_reward_destination\",\n \"docs\": [\n \"User's destination token account for rewards (pool quote token)\",\n \"SECURITY FIX: Added constraint validation for defense-in-depth\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"nft_fee_vault\",\n \"docs\": [\n \"NFT fee vault (source of reward tokens)\",\n \"SECURITY FIX: Added constraint validation for defense-in-depth\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_nft_state\",\n \"docs\": [\n \"User NFT state (must be pre-initialized via init_user_nft_state)\",\n \"PDA: [b\\\"nft_user\\\", user]\",\n \"SECURITY FIX: Added PDA seed validation\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 102,\n 116,\n 95,\n 117,\n 115,\n 101,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"pool_authority\",\n \"docs\": [\n \"Pool PDA authority (signs for nft_fee_vault transfer)\",\n \"SECURITY FIX: Validated against derived pool PDA in instruction body (step 3)\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"claim_protocol_fees\",\n \"docs\": [\n \"Claims protocol fees from fee vaults.\"\n ],\n \"discriminator\": [\n 34,\n 142,\n 219,\n 112,\n 109,\n 54,\n 133,\n 23\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"fee_withdraw_authority\",\n \"signer\": true\n },\n {\n \"name\": \"creator_fee_vault\",\n \"writable\": true\n },\n {\n \"name\": \"creator_destination\",\n \"docs\": [\n \"Where creator fees are finally sent (pool creator, DAO treasury, etc.)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"holders_fee_vault\",\n \"writable\": true\n },\n {\n \"name\": \"holders_destination\",\n \"docs\": [\n \"Aggregator / distributor for token holders rewards\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"nft_fee_vault\",\n \"writable\": true\n },\n {\n \"name\": \"nft_destination\",\n \"docs\": [\n \"Aggregator / distributor for NFT holders rewards\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"take_creator\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"take_holders\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"take_nft\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"close_position\",\n \"docs\": [\n \"Closes a position (owner only). Position must have no active liquidity.\"\n ],\n \"discriminator\": [\n 123,\n 134,\n 81,\n 0,\n 49,\n 68,\n 98,\n 98\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of the position (must sign)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool that the position belongs to.\",\n \"Needed to gate close behavior by accounting mode.\"\n ]\n },\n {\n \"name\": \"position\",\n \"docs\": [\n \"Position PDA to close\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"nonce\"\n }\n ]\n }\n }\n ],\n \"args\": [\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"create_bin_array\",\n \"docs\": [\n \"Creates a new BinArray account (holds 64 consecutive bins).\",\n \"\",\n \"# V2 Architecture\",\n \"BinArrays batch 64 bins into a single account for gas efficiency.\",\n \"\",\n \"# Arguments\",\n \"* `lower_bin_index` - Starting bin index (must be multiple of 64)\",\n \"\",\n \"# Example\",\n \"- lower_bin_index=128 → creates array covering bins 128-191\",\n \"- lower_bin_index=0 → creates array covering bins 0-63\",\n \"- lower_bin_index=-64 → creates array covering bins -64 to -1\"\n ],\n \"discriminator\": [\n 107,\n 26,\n 23,\n 62,\n 137,\n 213,\n 131,\n 235\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool that owns this bin array.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Pool admin (must sign to create bins).\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"bin_array\",\n \"docs\": [\n \"New BinArray account to initialize.\",\n \"Seeds: [\\\"bin_array\\\", pool, lower_bin_index_le]\",\n \"lower_bin_index must be aligned to 64-bin boundaries (0, 64, 128, -64, etc.)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 98,\n 105,\n 110,\n 95,\n 97,\n 114,\n 114,\n 97,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"lower_bin_index\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"lower_bin_index\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"init_holder_global_state\",\n \"docs\": [\n \"Initializes global holder reward state (ADMIN ONLY - ONE-TIME).\",\n \"**CRITICAL**: Must be called during deployment before any user can claim rewards.\",\n \"Admin pays rent (~0.128 SOL for 144 bytes).\",\n \"\",\n \"# Process\",\n \"1. Query CIPHER total supply LIVE (NO HARDCODING)\",\n \"2. Create global holder state PDA\",\n \"3. Initialize reward_index_q128 to 0 (no retroactive rewards)\",\n \"\",\n \"# Security\",\n \"- Admin-only initialization\",\n \"- Validates CIPHER mint address\",\n \"- Queries supply live (no hardcoded values)\",\n \"- Requires non-zero supply (prevents division by zero)\"\n ],\n \"discriminator\": [\n 21,\n 10,\n 69,\n 39,\n 195,\n 87,\n 203,\n 148\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Signer paying rent and performing the initialization.\",\n \"Must match PROTOCOL_ADMIN exactly.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"cipher_mint\",\n \"docs\": [\n \"CIPHER token mint used to query total supply.\",\n \"The address is validated in the instruction body.\"\n ]\n },\n {\n \"name\": \"holder_global_state\",\n \"docs\": [\n \"Global holder state PDA.\",\n \"Created once and shared across all pools.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 104,\n 111,\n 108,\n 100,\n 101,\n 114,\n 95,\n 103,\n 108,\n 111,\n 98,\n 97,\n 108\n ]\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_nft_global_state\",\n \"docs\": [\n \"Initializes global NFT reward state (ADMIN ONLY - ONE-TIME).\",\n \"**CRITICAL**: Must be called during deployment before any user can claim NFT rewards.\",\n \"Admin pays rent (~0.128 SOL for 144 bytes).\",\n \"\",\n \"# Process\",\n \"1. Create global NFT state PDA\",\n \"2. Initialize reward_index_q128 to 0 (no retroactive rewards)\",\n \"\",\n \"# Security\",\n \"- Admin-only initialization\",\n \"- Index starts at 0 (prevents retroactive claims)\",\n \"- Total collection weight is constant (20,475 verified via Metaplex)\"\n ],\n \"discriminator\": [\n 126,\n 182,\n 160,\n 21,\n 28,\n 63,\n 16,\n 75\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Signer paying rent and performing the initialization.\",\n \"Must match PROTOCOL_ADMIN exactly.\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"nft_global_state\",\n \"docs\": [\n \"Global NFT state PDA.\",\n \"Created once and shared across all pools.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 102,\n 116,\n 95,\n 103,\n 108,\n 111,\n 98,\n 97,\n 108\n ]\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_oracle\",\n \"docs\": [\n \"Initializes the Oracle account for price observation tracking.\",\n \"Optional - pools can function without oracle, but oracle enables TWAP calculation\",\n \"for external integrations (lending, perpetuals, price feeds).\"\n ],\n \"discriminator\": [\n 78,\n 100,\n 33,\n 183,\n 96,\n 207,\n 60,\n 91\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (immutable)\"\n ]\n },\n {\n \"name\": \"oracle\",\n \"docs\": [\n \"Oracle PDA for this pool\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 111,\n 114,\n 97,\n 99,\n 108,\n 101\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Pool admin (authority that can initialize oracle)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_pool\",\n \"docs\": [\n \"Initializes a new liquidity pool (state + lp_mint + registry + vaults).\",\n \"OPTIMIZATION: Merged init_pool + init_pool_vaults into single instruction (saves 1 tx).\",\n \"Creates pool account, LP mint, registry, and all 6 token vaults in one transaction.\"\n ],\n \"discriminator\": [\n 116,\n 233,\n 199,\n 204,\n 115,\n 159,\n 171,\n 36\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Pays for initialization, becomes pool admin (can be rotated later).\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"creator\"\n },\n {\n \"name\": \"base_mint_account\",\n \"docs\": [\n \"Base mint (validated by token::mint constraint on vaults)\"\n ]\n },\n {\n \"name\": \"quote_mint_account\",\n \"docs\": [\n \"Quote mint (validated by token::mint constraint on vaults)\"\n ]\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool state account (PDA), zero_copy for stack efficiency.\",\n \"CRITICAL: Pool address includes BOTH bin_step_bps AND base_fee_bps to allow multiple pools\",\n \"per token pair with different fee tiers and price granularities.\",\n \"This enables traders to choose between tighter spreads (lower bin steps) or wider ranges (higher bin steps),\",\n \"AND choose between different fee tiers (e.g., 0.3% vs 0.4% base fees).\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 111,\n 108\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"base_mint\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"quote_mint\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"bin_step_bps\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"fee_config.base_fee_bps\"\n }\n ]\n }\n },\n {\n \"name\": \"lp_mint\",\n \"docs\": [\n \"LP mint (fungible shares)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"Base vault - stores base token liquidity (Box to save stack space)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 98,\n 97,\n 115,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"Quote vault - stores quote token liquidity (Box to save stack space)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 113,\n 117,\n 111,\n 116,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"creator_fee_vault\",\n \"docs\": [\n \"Creator fee vault - stores creator's share of swap fees (Box to save stack space)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 99,\n 114,\n 101,\n 97,\n 116,\n 111,\n 114,\n 95,\n 102,\n 101,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"holders_fee_vault\",\n \"docs\": [\n \"Holders fee vault - stores LP holders' share of swap fees (Box to save stack space)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 104,\n 111,\n 108,\n 100,\n 101,\n 114,\n 115,\n 95,\n 102,\n 101,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"nft_fee_vault\",\n \"docs\": [\n \"NFT fee vault - stores NFT holders' share of swap fees (Box to save stack space)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 102,\n 116,\n 95,\n 102,\n 101,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"protocol_fee_vault\",\n \"docs\": [\n \"Protocol fee vault - stores protocol's share (12.5% of swap fees) (Box to save stack space)\",\n \"Can be permissionlessly swept to Squads multisig via transfer_protocol_fees instruction\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 114,\n 111,\n 116,\n 111,\n 99,\n 111,\n 108,\n 95,\n 102,\n 101,\n 101\n ]\n }\n ]\n }\n },\n {\n \"name\": \"registry\",\n \"docs\": [\n \"Pair registry PDA to prevent duplicate pools.\",\n \"CRITICAL: Includes BOTH bin_step_bps AND base_fee_bps to allow multiple pools per token pair\",\n \"with different fee tiers (one registry per unique pool configuration)\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 114,\n 101,\n 103,\n 105,\n 115,\n 116,\n 114,\n 121\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"base_mint\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"quote_mint\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"bin_step_bps\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"fee_config.base_fee_bps\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"base_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"quote_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bin_step_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"initial_price_q64_64\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"fee_config\",\n \"type\": {\n \"defined\": {\n \"name\": \"FeeConfig\"\n }\n }\n },\n {\n \"name\": \"accounting_mode\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"init_position\",\n \"docs\": [\n \"init a liquidity position single OR 2-sided\"\n ],\n \"discriminator\": [\n 197,\n 20,\n 10,\n 1,\n 97,\n 160,\n 177,\n 91\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"nonce\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"init_position_bin\",\n \"docs\": [\n \"Initializes a PositionBin account binding a Position to a specific LiquidityBin.\",\n \"This is usually called once per bin you want to deposit into (or created lazily).\"\n ],\n \"discriminator\": [\n 249,\n 110,\n 124,\n 16,\n 185,\n 55,\n 149,\n 13\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position\",\n \"docs\": [\n \"Position PDA (canonical seeds), ensures owner & pool binding\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"position.nonce\",\n \"account\": \"Position\"\n }\n ]\n }\n },\n {\n \"name\": \"position_bin\",\n \"docs\": [\n \"PositionBin PDA (canonical)\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"bin_index\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"init_user_holder_state\",\n \"docs\": [\n \"Initializes user holder state for CIPHER holder rewards.\",\n \"**PREREQUISITE**: init_holder_global_state must be called first.\",\n \"**PREREQUISITE**: Must be called before first claim_holder_rewards call.\",\n \"User pays rent (~0.128 SOL for 144 bytes).\",\n \"\",\n \"# Process\",\n \"1. Create user holder state PDA\",\n \"2. Initialize with current global index (prevents retroactive rewards)\",\n \"\",\n \"# Security\",\n \"- Permissionless but harmless (just creates tracking account)\",\n \"- Initializes with current index (no retroactive rewards)\"\n ],\n \"discriminator\": [\n 49,\n 178,\n 188,\n 199,\n 246,\n 133,\n 51,\n 222\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Payer for account creation\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User this state is for (does not need to sign)\"\n ]\n },\n {\n \"name\": \"holder_global_state\",\n \"docs\": [\n \"Global holder state (read current index for initialization)\"\n ]\n },\n {\n \"name\": \"user_holder_state\",\n \"docs\": [\n \"User holder state (initialized)\",\n \"PDA: [b\\\"holder_user\\\", user]\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 104,\n 111,\n 108,\n 100,\n 101,\n 114,\n 95,\n 117,\n 115,\n 101,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"init_user_nft_state\",\n \"docs\": [\n \"Initializes user NFT state for CIPHER_OWLS NFT holder rewards.\",\n \"**PREREQUISITE**: init_nft_global_state must be called first.\",\n \"**PREREQUISITE**: Must be called before first claim_nft_rewards call.\",\n \"User pays rent (~0.128 SOL for 144 bytes).\",\n \"\",\n \"# Process\",\n \"1. Create user NFT state PDA\",\n \"2. Initialize with current global index (prevents retroactive rewards)\",\n \"\",\n \"# Security\",\n \"- Permissionless but harmless (just creates tracking account)\",\n \"- Initializes with current index (no retroactive rewards)\"\n ],\n \"discriminator\": [\n 175,\n 85,\n 43,\n 138,\n 194,\n 163,\n 71,\n 36\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"docs\": [\n \"Payer for account creation\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User this state is for (does not need to sign)\"\n ]\n },\n {\n \"name\": \"nft_global_state\",\n \"docs\": [\n \"Global NFT state (read current index for initialization)\"\n ]\n },\n {\n \"name\": \"user_nft_state\",\n \"docs\": [\n \"User NFT state (initialized)\",\n \"PDA: [b\\\"nft_user\\\", user]\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 102,\n 116,\n 95,\n 117,\n 115,\n 101,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"lock_liquidity\",\n \"docs\": [\n \"Locks liquidity metadata.\"\n ],\n \"discriminator\": [\n 179,\n 201,\n 236,\n 158,\n 212,\n 98,\n 70,\n 182\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool state (PDA) - validated in function body\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"liquidity_lock\",\n \"docs\": [\n \"Per-user lock record (PDA) - manually initialized\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108,\n 111,\n 99,\n 107\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User who owns the lock record\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"user_lp\",\n \"docs\": [\n \"User LP account to validate they have enough tokens and transfer from\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"lp_mint\"\n },\n {\n \"name\": \"escrow_lp\",\n \"docs\": [\n \"Escrow account owned by pool PDA to hold locked LP tokens\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"associated_token_program\",\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lock_duration\",\n \"type\": \"i64\"\n }\n ]\n },\n {\n \"name\": \"reconcile_pool_drift\",\n \"docs\": [\n \"Reconciles accounting drift caused by OC-1 bug (fee payouts not deducted\",\n \"from bin reserves during withdrawals).\",\n \"\",\n \"Adjusts bin reserves DOWN proportionally to match actual vault balances.\",\n \"Admin-only. Must pass ALL BinArray accounts as remaining_accounts.\",\n \"\",\n \"# When to Call\",\n \"- Once after deploying OC-1 fix to resolve Error 6052 on deposits\"\n ],\n \"discriminator\": [\n 61,\n 105,\n 25,\n 71,\n 110,\n 94,\n 194,\n 66\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool to reconcile (mutable - we read admin/vaults).\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"base_vault\"\n },\n {\n \"name\": \"quote_vault\"\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin signer - only admin can reconcile.\"\n ],\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"set_pause\",\n \"docs\": [\n \"Pauses or unpauses the pool.\"\n ],\n \"discriminator\": [\n 63,\n 32,\n 154,\n 2,\n 56,\n 103,\n 79,\n 45\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"pause\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"set_pause_bits\",\n \"docs\": [\n \"Sets pause bits for the pool (pause_guardian only).\"\n ],\n \"discriminator\": [\n 122,\n 45,\n 85,\n 156,\n 176,\n 64,\n 45,\n 83\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"pause_guardian\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"new_bits\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"swap\",\n \"docs\": [\n \"Executes a swap using BinArray architecture with accounting validation.\",\n \"Unified swap instruction with support for both exact input and exact output modes.\",\n \"\",\n \"# Modes\",\n \"- **ExactIn**: Specify exact input, get minimum output (most common)\",\n \"- **ExactOut**: Specify exact output, spend maximum input (bills, bridges)\",\n \"\",\n \"# Features\",\n \"- Traverses bins across multiple BinArrays efficiently\",\n \"- Updates fee growth on each bin touched (auto-compounding)\",\n \"- Post-swap validation: sum(bin_reserves) == vault_balances\",\n \"- Distributes fees to 6 vaults (protocol, creator, holders, NFT)\",\n \"- Optional oracle observation recording (TWAP support)\",\n \"\",\n \"# Security\",\n \"Strict accounting validation - fails loud on drift detection.\",\n \"\",\n \"# Examples\",\n \"```rust\",\n \"// Exact input (most common)\",\n \"swap(ctx, SwapSpec::ExactIn {\",\n \"amount_in: 1000000,\",\n \"min_amount_out: 950000,\",\n \"}, route)\",\n \"\",\n \"// Exact output (bills, bridges)\",\n \"swap(ctx, SwapSpec::ExactOut {\",\n \"amount_out: 1000000,\",\n \"max_amount_in: 1100000,\",\n \"}, route)\",\n \"```\"\n ],\n \"discriminator\": [\n 248,\n 198,\n 158,\n 145,\n 225,\n 117,\n 135,\n 200\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"user\",\n \"signer\": true\n },\n {\n \"name\": \"user_source\",\n \"docs\": [\n \"User's source token account (validated in function)\",\n \"SECURITY: Added ownership constraint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"user_destination\",\n \"docs\": [\n \"User's destination token account (validated in function)\",\n \"SECURITY: Added ownership constraint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"Pool's base vault (validated in function)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"Pool's quote vault (validated in function)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"protocol_fee_vault\",\n \"docs\": [\n \"Protocol fee vault (12.5% of total swap fees)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"creator_fee_vault\",\n \"docs\": [\n \"Creator fee vault (validated in function)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"holders_fee_vault\",\n \"docs\": [\n \"Holders fee vault (validated in function)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"nft_fee_vault\",\n \"docs\": [\n \"NFT fee vault (validated in function)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"cipher_mint\",\n \"docs\": [\n \"CIPHER token mint (for live supply query in index calculation)\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"spec\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapSpec\"\n }\n }\n },\n {\n \"name\": \"route\",\n \"type\": {\n \"defined\": {\n \"name\": \"SwapRoute\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"sync_holder_stake\",\n \"docs\": [\n \"Synchronizes user's staked CIPHER amount for time-weighted rewards.\",\n \"**CRITICAL**: Must be called after every stake/unstake in Streamflow.\",\n \"**CRITICAL**: Must be called at least once before first claim_holder_rewards.\",\n \"User pays rent on first sync (~0.156 SOL for 176 bytes).\",\n \"\",\n \"# Process\",\n \"1. Verify actual stake amount from Streamflow StakeEntry account (on-chain)\",\n \"2. Calculate rewards accrued during previous stake period\",\n \"3. Add accrued to pending_rewards (preserves across periods)\",\n \"4. Update staked amount to verified value (trustless)\",\n \"5. Reset entry_index to current global index\",\n \"\",\n \"# Arguments\",\n \"- stake_pool_address: Streamflow stake pool address (for PDA derivation)\",\n \"- stake_entry_nonce: Nonce for the user's StakeEntry (for PDA derivation)\",\n \"\",\n \"# Security\",\n \"- SECURITY FIX: On-chain verification via Streamflow StakeEntry\",\n \"- No user-provided amount (trustless)\",\n \"- Verifies stake belongs to correct pool and authority\",\n \"- Economic security: Can't drain more than proportional share\",\n \"- First sync starts from current index (no retroactive rewards)\",\n \"- Pending rewards preserve across stake periods (fair accumulation)\",\n \"\",\n \"# Integration with Streamflow\",\n \"- Streamflow Program: STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH\",\n \"- CIPHER Mint: Ciphern9cCXtms66s8Mm6wCFC27b2JProRQLYmiLMH3N\",\n \"- Frontend must pass correct StakeEntry account and nonce\"\n ],\n \"discriminator\": [\n 151,\n 230,\n 186,\n 138,\n 237,\n 187,\n 231,\n 155\n ],\n \"accounts\": [\n {\n \"name\": \"holder_global_state\",\n \"docs\": [\n \"Global holder reward state (for current index)\",\n \"READ AS RAW BYTES to avoid zero-copy AccountLoader heap usage.\",\n \"Two zero-copy loads (global + user) exceed the 256KB heap limit.\"\n ]\n },\n {\n \"name\": \"user_holder_state\",\n \"docs\": [\n \"User's holder state (checkpoint tracking)\",\n \"MUST be pre-initialized via init_user_holder_state instruction\",\n \"PDA: [b\\\"holder_user\\\", user]\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 104,\n 111,\n 108,\n 100,\n 101,\n 114,\n 95,\n 117,\n 115,\n 101,\n 114\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n }\n ]\n }\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User (signer)\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"streamflow_stake_entry\",\n \"docs\": [\n \"SECURITY FIX: Streamflow StakeEntry account for verification\"\n ]\n },\n {\n \"name\": \"streamflow_program\",\n \"docs\": [\n \"SECURITY FIX: Streamflow program for verification\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"stake_pool_address\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"stake_entry_nonce\",\n \"type\": \"u32\"\n }\n ]\n },\n {\n \"name\": \"sync_reward_indexes\",\n \"docs\": [\n \"Sync global reward indexes from pool state.\",\n \"\",\n \"**SECURITY FIX:** Aggregates per-pool reward-index deltas into global state indexes.\",\n \"\",\n \"**Problem Solved:**\",\n \"- Swaps update pool.reward_indexes.{holders_q128, nft_q128}\",\n \"- Claims read holder_global_state.reward_index_q128, nft_global_state.reward_index_q128\",\n \"- Without sync, global indexes remain at 0 -> incorrect claim calculations\",\n \"\",\n \"**Permissionless:** Anyone can call to sync indexes.\",\n \"\",\n \"**When to Call:**\",\n \"- After swaps that generate fees\",\n \"- Before users claim rewards\",\n \"- Periodically via cron (e.g., every 10 minutes)\",\n \"\",\n \"# Accounts\",\n \"- pool: Pool account (read-only)\",\n \"- holder_global_state: Global holder state (PDA, updated)\",\n \"- nft_global_state: Global NFT state (PDA, updated)\"\n ],\n \"discriminator\": [\n 173,\n 205,\n 183,\n 214,\n 147,\n 35,\n 238,\n 156\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (source of truth for indexes + sync checkpoints)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"holder_global_state\",\n \"docs\": [\n \"Holder global state (PDA, receives holder index from pool)\",\n \"PDA: [b\\\"holder_global\\\"]\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 104,\n 111,\n 108,\n 100,\n 101,\n 114,\n 95,\n 103,\n 108,\n 111,\n 98,\n 97,\n 108\n ]\n }\n ]\n }\n },\n {\n \"name\": \"nft_global_state\",\n \"docs\": [\n \"NFT global state (PDA, receives NFT index from pool)\",\n \"PDA: [b\\\"nft_global\\\"]\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 110,\n 102,\n 116,\n 95,\n 103,\n 108,\n 111,\n 98,\n 97,\n 108\n ]\n }\n ]\n }\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"transfer_protocol_fees\",\n \"docs\": [\n \"Transfers protocol fees to Squads multisig vault.\",\n \"**PERMISSIONLESS**: Anyone can call this to sweep protocol fees.\",\n \"The protocol fee (12.5% of total swap fees) is automatically collected\",\n \"and can be transferred to the hardcoded Squads vault for protocol treasury.\",\n \"\",\n \"# Arguments\",\n \"* `amount` - Amount to transfer (0 = transfer full protocol_fee_vault balance)\",\n \"\",\n \"# Security\",\n \"- Destination hardcoded to prevent redirect attacks\",\n \"- Mint validation ensures correct token\",\n \"- Pool PDA authority ensures only pool can sign\"\n ],\n \"discriminator\": [\n 142,\n 148,\n 70,\n 57,\n 116,\n 166,\n 82,\n 111\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (immutable, just need to read quote_mint and bump)\"\n ]\n },\n {\n \"name\": \"fee_withdraw_authority\",\n \"docs\": [\n \"SECURITY FIX: Authorized signer for fee withdrawals\",\n \"Must match pool.fee_withdraw_authority\"\n ],\n \"signer\": true\n },\n {\n \"name\": \"protocol_fee_vault\",\n \"docs\": [\n \"Protocol fee vault PDA (validated against pool.protocol_fee_vault)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"squads_vault_destination\",\n \"docs\": [\n \"Squads vault destination token account\",\n \"Must match SQUADS_VAULT constant and pool quote_mint\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"pool_authority\",\n \"docs\": [\n \"Pool PDA authority (signs for protocol_fee_vault transfer)\"\n ]\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"unlock_liquidity\",\n \"docs\": [\n \"Unlock liquidity (if you implemented lock/unlock with escrow).\"\n ],\n \"discriminator\": [\n 154,\n 98,\n 151,\n 31,\n 8,\n 180,\n 144,\n 1\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool state (PDA)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"liquidity_lock\",\n \"docs\": [\n \"Per-user liquidity lock PDA\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 108,\n 111,\n 99,\n 107\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"user\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n }\n ]\n }\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User who owns the lock\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"user_lp\",\n \"docs\": [\n \"User LP account to receive unlocked tokens\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"escrow_lp\",\n \"docs\": [\n \"Escrow LP account owned by pool PDA\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"unpause_override\",\n \"docs\": [\n \"Emergency unpause override by Squads multisig.\",\n \"Can unpause pool regardless of pause_guardian state.\",\n \"Hardcoded to Squads multisig: 7nEfnDyd7ZuzK2UK4mqqP45js89YdeWBqyUmd9KCxNrn\"\n ],\n \"discriminator\": [\n 150,\n 175,\n 134,\n 15,\n 132,\n 92,\n 237,\n 185\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"squads_signer\",\n \"docs\": [\n \"Squads multisig wallet signer (hardcoded address).\",\n \"This instruction is authorized only when this exact wallet signs.\"\n ],\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"update_admin\",\n \"docs\": [\n \"Updates the pool admin (admin only).\"\n ],\n \"discriminator\": [\n 161,\n 176,\n 40,\n 213,\n 60,\n 184,\n 179,\n 228\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Admin validation via constraint (AccountLoader validates discriminator + program ownership)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"new_admin\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"update_authorities\",\n \"docs\": [\n \"Updates pool authorities (admin only).\"\n ],\n \"discriminator\": [\n 175,\n 228,\n 137,\n 18,\n 175,\n 70,\n 220,\n 165\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Admin validation via has_one (AccountLoader validates discriminator + program ownership)\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin signer (must match pool.admin)\"\n ],\n \"signer\": true,\n \"relations\": [\n \"pool\"\n ]\n }\n ],\n \"args\": [\n {\n \"name\": \"config_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pause_guardian\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_withdraw_authority\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"update_fee_config\",\n \"docs\": [\n \"Updates the pool fee configuration.\"\n ],\n \"discriminator\": [\n 104,\n 184,\n 103,\n 242,\n 88,\n 151,\n 107,\n 20\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Signer account used for config updates.\",\n \"Kept as `admin` for client compatibility; validated against `pool.config_authority`.\"\n ],\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"new_fee_config\",\n \"type\": {\n \"defined\": {\n \"name\": \"FeeConfig\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"verify_pool_accounting\",\n \"docs\": [\n \"Verifies pool accounting by reconciling vault balances with bin reserves.\",\n \"\",\n \"This instruction validates that total vault balances match the sum of all\",\n \"bin reserves across all BinArrays. Should be called AFTER batched liquidity\",\n \"operations complete to ensure no accounting drift occurred.\",\n \"\",\n \"# Arguments\",\n \"* `ctx` - Instruction context with pool, vaults, and verifier\",\n \"\",\n \"# Remaining Accounts\",\n \"All BinArray accounts for the pool must be passed. Missing BinArrays will\",\n \"cause false drift detection.\",\n \"\",\n \"# Security\",\n \"- Permissionless (anyone can verify)\",\n \"- Fails if any accounting drift detected\",\n \"- Emits PoolAccountingVerified event on success\",\n \"\",\n \"# Usage\",\n \"- Call after completing batched add_liquidity_batch operations\",\n \"- Call before marking pool as \\\"active\\\" for trading\",\n \"- Call periodically to audit pool accounting\"\n ],\n \"discriminator\": [\n 31,\n 234,\n 130,\n 0,\n 221,\n 80,\n 83,\n 220\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool to verify (immutable - read-only verification).\"\n ]\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"Pool's base vault (immutable - read-only verification).\"\n ]\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"Pool's quote vault (immutable - read-only verification).\"\n ]\n },\n {\n \"name\": \"verifier\",\n \"docs\": [\n \"Admin or any authorized party that triggers verification.\",\n \"Does not need to be admin - anyone can verify accounting.\"\n ],\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"view_farming_position\",\n \"docs\": [\n \"View farming position analytics (read-only).\",\n \"\",\n \"Returns comprehensive position data without modifying state:\",\n \"- Position shares and ownership\",\n \"- Current reserves (position's share of bin liquidity)\",\n \"- Accrued fees (auto-compounding via Q128 fee growth)\",\n \"- Total value (reserves + fees)\",\n \"\",\n \"**Use Case:**\",\n \"Frontend dashboard to display \\\"farming\\\" positions and their accumulated value.\",\n \"\",\n \"# Returns\",\n \"FarmingPositionView struct serialized in transaction return data.\"\n ],\n \"discriminator\": [\n 29,\n 39,\n 65,\n 136,\n 187,\n 153,\n 243,\n 130\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool account (validation only)\"\n ]\n },\n {\n \"name\": \"position\",\n \"docs\": [\n \"Position account\"\n ]\n },\n {\n \"name\": \"position_bin\",\n \"docs\": [\n \"PositionBin account\"\n ]\n },\n {\n \"name\": \"bin_array\",\n \"docs\": [\n \"BinArray containing the bin\"\n ]\n }\n ],\n \"args\": [],\n \"returns\": {\n \"defined\": {\n \"name\": \"FarmingPositionView\"\n }\n }\n },\n {\n \"name\": \"withdraw\",\n \"docs\": [\n \"Withdraws liquidity from multiple bins with auto-compounded fee distribution.\",\n \"\",\n \"# V2 Features\",\n \"- Calculates accrued fees: (current_fee_growth - initial_fee_growth) * shares\",\n \"- Distributes fees automatically (no separate claim needed)\",\n \"- Validates vault balance decreases match expected amounts\",\n \"- Post-withdrawal accounting validation\",\n \"- Completeness check: all relevant bins must be included\",\n \"\",\n \"Unified withdrawal instruction with support for both exact and range modes.\",\n \"\",\n \"# Modes\",\n \"- **Exact**: Specify exact shares per bin (granular control)\",\n \"- **Range**: Specify bin range + percentage (simple, user-friendly)\",\n \"\",\n \"# Fee Distribution\",\n \"Fees are auto-compounded - withdrawal includes proportional share of all fees\",\n \"earned since deposit. No separate claiming required.\",\n \"\",\n \"# Examples\",\n \"```rust\",\n \"// Full withdrawal (range mode)\",\n \"withdraw(ctx, WithdrawalSpec::Range { from_bin: -1000, to_bin: 1000, bps: 10000 })\",\n \"\",\n \"// Partial withdrawal (range mode)\",\n \"withdraw(ctx, WithdrawalSpec::Range { from_bin: 100, to_bin: 110, bps: 5000 })\",\n \"\",\n \"// Granular control (exact mode)\",\n \"withdraw(ctx, WithdrawalSpec::Exact { withdrawals: vec![\",\n \"BinWithdrawal { bin_index: 50, shares: 1000 },\",\n \"BinWithdrawal { bin_index: 51, shares: 2000 },\",\n \"]})\",\n \"```\"\n ],\n \"discriminator\": [\n 183,\n 18,\n 70,\n 156,\n 148,\n 109,\n 161,\n 34\n ],\n \"accounts\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool (zero-copy).\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Position owner (signs).\"\n ],\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"owner_base\",\n \"docs\": [\n \"Owner's base token account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"owner_quote\",\n \"docs\": [\n \"Owner's quote token account.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"base_vault\",\n \"docs\": [\n \"Pool's base vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"quote_vault\",\n \"docs\": [\n \"Pool's quote vault.\"\n ],\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"docs\": [\n \"Position PDA.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112,\n 111,\n 115,\n 105,\n 116,\n 105,\n 111,\n 110\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"position.nonce\",\n \"account\": \"Position\"\n }\n ]\n }\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"spec\",\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawalSpec\"\n }\n }\n },\n {\n \"name\": \"min_base_out\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_quote_out\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"BinArray\",\n \"discriminator\": [\n 92,\n 142,\n 92,\n 220,\n 5,\n 148,\n 70,\n 181\n ]\n },\n {\n \"name\": \"HolderGlobalState\",\n \"discriminator\": [\n 201,\n 13,\n 55,\n 112,\n 49,\n 124,\n 252,\n 241\n ]\n },\n {\n \"name\": \"LiquidityLock\",\n \"discriminator\": [\n 154,\n 210,\n 64,\n 149,\n 2,\n 60,\n 4,\n 78\n ]\n },\n {\n \"name\": \"NftGlobalState\",\n \"discriminator\": [\n 153,\n 133,\n 196,\n 53,\n 53,\n 146,\n 35,\n 130\n ]\n },\n {\n \"name\": \"Oracle\",\n \"discriminator\": [\n 139,\n 194,\n 131,\n 179,\n 140,\n 179,\n 229,\n 244\n ]\n },\n {\n \"name\": \"PairRegistry\",\n \"discriminator\": [\n 180,\n 142,\n 99,\n 6,\n 243,\n 194,\n 134,\n 152\n ]\n },\n {\n \"name\": \"Pool\",\n \"discriminator\": [\n 241,\n 154,\n 109,\n 4,\n 17,\n 177,\n 109,\n 188\n ]\n },\n {\n \"name\": \"Position\",\n \"discriminator\": [\n 170,\n 188,\n 143,\n 228,\n 122,\n 64,\n 247,\n 208\n ]\n },\n {\n \"name\": \"PositionBin\",\n \"discriminator\": [\n 145,\n 172,\n 1,\n 90,\n 204,\n 13,\n 245,\n 171\n ]\n },\n {\n \"name\": \"UserHolderState\",\n \"discriminator\": [\n 109,\n 105,\n 38,\n 190,\n 82,\n 186,\n 180,\n 81\n ]\n },\n {\n \"name\": \"UserNftState\",\n \"discriminator\": [\n 41,\n 154,\n 221,\n 64,\n 116,\n 186,\n 73,\n 171\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"AdminUpdated\",\n \"discriminator\": [\n 69,\n 82,\n 49,\n 171,\n 43,\n 3,\n 80,\n 161\n ]\n },\n {\n \"name\": \"AuthoritiesUpdated\",\n \"discriminator\": [\n 67,\n 41,\n 36,\n 180,\n 223,\n 84,\n 221,\n 76\n ]\n },\n {\n \"name\": \"BinArrayCreated\",\n \"discriminator\": [\n 124,\n 208,\n 24,\n 108,\n 92,\n 150,\n 57,\n 156\n ]\n },\n {\n \"name\": \"BinLiquidityUpdated\",\n \"discriminator\": [\n 75,\n 48,\n 154,\n 36,\n 109,\n 209,\n 141,\n 126\n ]\n },\n {\n \"name\": \"ClaimHolderRewardsEvent\",\n \"discriminator\": [\n 97,\n 42,\n 168,\n 9,\n 85,\n 193,\n 87,\n 102\n ]\n },\n {\n \"name\": \"FeeConfigUpdated\",\n \"discriminator\": [\n 45,\n 50,\n 42,\n 173,\n 193,\n 67,\n 52,\n 244\n ]\n },\n {\n \"name\": \"FeesDistributed\",\n \"discriminator\": [\n 209,\n 24,\n 174,\n 200,\n 236,\n 90,\n 154,\n 55\n ]\n },\n {\n \"name\": \"LiquidityLocked\",\n \"discriminator\": [\n 150,\n 201,\n 204,\n 183,\n 217,\n 13,\n 119,\n 185\n ]\n },\n {\n \"name\": \"LiquidityWithdrawnUser\",\n \"discriminator\": [\n 142,\n 245,\n 211,\n 16,\n 66,\n 171,\n 36,\n 40\n ]\n },\n {\n \"name\": \"PauseUpdated\",\n \"discriminator\": [\n 203,\n 203,\n 33,\n 225,\n 130,\n 103,\n 90,\n 105\n ]\n },\n {\n \"name\": \"PoolAccountingVerified\",\n \"discriminator\": [\n 191,\n 132,\n 206,\n 125,\n 68,\n 125,\n 202,\n 59\n ]\n },\n {\n \"name\": \"PoolDriftReconciled\",\n \"discriminator\": [\n 205,\n 79,\n 238,\n 9,\n 11,\n 138,\n 66,\n 84\n ]\n },\n {\n \"name\": \"PoolInitialized\",\n \"discriminator\": [\n 100,\n 118,\n 173,\n 87,\n 12,\n 198,\n 254,\n 229\n ]\n },\n {\n \"name\": \"RewardIndexesSyncedEvent\",\n \"discriminator\": [\n 210,\n 60,\n 89,\n 229,\n 251,\n 209,\n 214,\n 189\n ]\n },\n {\n \"name\": \"SyncHolderStakeEvent\",\n \"discriminator\": [\n 47,\n 69,\n 233,\n 184,\n 242,\n 2,\n 125,\n 106\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidLiquidity\",\n \"msg\": \"The provided liquidity value is invalid.\"\n },\n {\n \"code\": 6001,\n \"name\": \"CalculationError\",\n \"msg\": \"Calculation error occurred during arithmetic operations.\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidInput\",\n \"msg\": \"The provided input data is invalid.\"\n },\n {\n \"code\": 6003,\n \"name\": \"MissingBins\",\n \"msg\": \"Missing liquidity bin accounts for withdrawal; pass all active bins in remaining_accounts.\"\n },\n {\n \"code\": 6004,\n \"name\": \"InternalInconsistency\",\n \"msg\": \"Operation aborted due to an internal inconsistency.\"\n },\n {\n \"code\": 6005,\n \"name\": \"UnknownError\",\n \"msg\": \"An unknown error has occurred.\"\n },\n {\n \"code\": 6006,\n \"name\": \"SlippageExceeded\",\n \"msg\": \"The swap operation did not meet the minimum output requirements due to slippage protection.\"\n },\n {\n \"code\": 6007,\n \"name\": \"InsufficientLiquidity\",\n \"msg\": \"The pool does not have sufficient liquidity to perform this operation.\"\n },\n {\n \"code\": 6008,\n \"name\": \"UnauthorizedOperation\",\n \"msg\": \"Unauthorized operation attempted.\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidAuthority\",\n \"msg\": \"Invalid or missing protocol authority for this operation.\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidAccountState\",\n \"msg\": \"The account state is invalid.\"\n },\n {\n \"code\": 6011,\n \"name\": \"MintMismatch\",\n \"msg\": \"Token account mint does not match expected mint for this pool.\"\n },\n {\n \"code\": 6012,\n \"name\": \"OwnerMismatch\",\n \"msg\": \"Token account owner does not match expected authority.\"\n },\n {\n \"code\": 6013,\n \"name\": \"TokenTransferFailed\",\n \"msg\": \"Token transfer failed to execute correctly.\"\n },\n {\n \"code\": 6014,\n \"name\": \"PoolPaused\",\n \"msg\": \"Pool is currently paused.\"\n },\n {\n \"code\": 6015,\n \"name\": \"PoolAlreadyExists\",\n \"msg\": \"Pool already exists for this token pair and configuration.\"\n },\n {\n \"code\": 6016,\n \"name\": \"PoolNotFound\",\n \"msg\": \"Pool not found for the requested token pair and configuration.\"\n },\n {\n \"code\": 6017,\n \"name\": \"RegistryViolation\",\n \"msg\": \"Pair registry constraint violated.\"\n },\n {\n \"code\": 6018,\n \"name\": \"BinAlreadyExists\",\n \"msg\": \"Liquidity bin already exists for this index.\"\n },\n {\n \"code\": 6019,\n \"name\": \"BinNotFound\",\n \"msg\": \"Liquidity bin not found for the requested index.\"\n },\n {\n \"code\": 6020,\n \"name\": \"InvalidBinBounds\",\n \"msg\": \"Invalid liquidity bin bounds.\"\n },\n {\n \"code\": 6021,\n \"name\": \"LPTokenMismatch\",\n \"msg\": \"LP token mint or account does not match this pool.\"\n },\n {\n \"code\": 6022,\n \"name\": \"NotEnoughShares\",\n \"msg\": \"Not enough LP shares to complete this operation.\"\n },\n {\n \"code\": 6023,\n \"name\": \"LPVaultMismatch\",\n \"msg\": \"LP vault or escrow does not match expected authority.\"\n },\n {\n \"code\": 6024,\n \"name\": \"ReentrancyDetected\",\n \"msg\": \"Reentrancy detected: operation aborted for security reasons.\"\n },\n {\n \"code\": 6025,\n \"name\": \"InvalidVaultOwner\",\n \"msg\": \"Vault is not owned by the SPL Token program\"\n },\n {\n \"code\": 6026,\n \"name\": \"InvalidVaultAuthority\",\n \"msg\": \"Vault has an unexpected authority\"\n },\n {\n \"code\": 6027,\n \"name\": \"InvalidVaultMint\",\n \"msg\": \"Vault has an unexpected mint\"\n },\n {\n \"code\": 6028,\n \"name\": \"InvalidVaultData\",\n \"msg\": \"Account data is too short to be a valid SPL Token account\"\n },\n {\n \"code\": 6029,\n \"name\": \"ActiveLock\",\n \"msg\": \"Liquidity is currently locked and cannot be withdrawn until the lock period expires.\"\n },\n {\n \"code\": 6030,\n \"name\": \"InsufficientLP\",\n \"msg\": \"Insufficient LP tokens for this operation.\"\n },\n {\n \"code\": 6031,\n \"name\": \"VaultsAlreadyInitialized\",\n \"msg\": \"Pool vaults already initialized.\"\n },\n {\n \"code\": 6032,\n \"name\": \"WrongMode\",\n \"msg\": \"Wrong accounting mode for this instruction.\"\n },\n {\n \"code\": 6033,\n \"name\": \"InvalidTokenProgram\",\n \"msg\": \"Invalid token program.\"\n },\n {\n \"code\": 6034,\n \"name\": \"InvalidProgramOwner\",\n \"msg\": \"Invalid program-owned account.\"\n },\n {\n \"code\": 6035,\n \"name\": \"InvalidPda\",\n \"msg\": \"Invalid PDA for the provided account.\"\n },\n {\n \"code\": 6036,\n \"name\": \"InvalidRemainingAccountsLayout\",\n \"msg\": \"Invalid remaining accounts layout.\"\n },\n {\n \"code\": 6037,\n \"name\": \"DuplicateBinIndex\",\n \"msg\": \"Duplicate bin index provided.\"\n },\n {\n \"code\": 6038,\n \"name\": \"ActiveBinDepositForbidden\",\n \"msg\": \"Deposits into the active bin are forbidden to prevent price manipulation.\"\n },\n {\n \"code\": 6039,\n \"name\": \"ActiveBinWithdrawalForbidden\",\n \"msg\": \"Withdrawals from the active bin are forbidden to prevent price manipulation.\"\n },\n {\n \"code\": 6040,\n \"name\": \"MissingPositionBin\",\n \"msg\": \"Missing position bin account.\"\n },\n {\n \"code\": 6041,\n \"name\": \"PositionPoolMismatch\",\n \"msg\": \"Position pool mismatch.\"\n },\n {\n \"code\": 6042,\n \"name\": \"PositionOwnerMismatch\",\n \"msg\": \"Position owner mismatch.\"\n },\n {\n \"code\": 6043,\n \"name\": \"BinPoolMismatch\",\n \"msg\": \"Bin pool mismatch.\"\n },\n {\n \"code\": 6044,\n \"name\": \"PositionBinPositionMismatch\",\n \"msg\": \"PositionBin position mismatch.\"\n },\n {\n \"code\": 6045,\n \"name\": \"PositionBinPoolMismatch\",\n \"msg\": \"PositionBin pool mismatch.\"\n },\n {\n \"code\": 6046,\n \"name\": \"AccountingInvariantViolation\",\n \"msg\": \"Accounting invariant violated.\"\n },\n {\n \"code\": 6047,\n \"name\": \"InsufficientPositionBinShares\",\n \"msg\": \"Insufficient position bin shares.\"\n },\n {\n \"code\": 6048,\n \"name\": \"AccountingMismatch\",\n \"msg\": \"Accounting mismatch: bin deltas do not match vault payout. Pass all active bins in remaining_accounts.\"\n },\n {\n \"code\": 6049,\n \"name\": \"DuplicateBinAccount\",\n \"msg\": \"Duplicate bin account provided.\"\n },\n {\n \"code\": 6050,\n \"name\": \"InvalidMetadata\",\n \"msg\": \"NFT metadata is invalid or cannot be parsed.\"\n },\n {\n \"code\": 6051,\n \"name\": \"InvalidNftRarity\",\n \"msg\": \"NFT rarity indicator not found or invalid in metadata name.\"\n },\n {\n \"code\": 6052,\n \"name\": \"InsufficientOracleData\",\n \"msg\": \"Insufficient oracle data: not enough price observations recorded.\"\n },\n {\n \"code\": 6053,\n \"name\": \"InvalidTimestamp\",\n \"msg\": \"Invalid timestamp for oracle observation.\"\n },\n {\n \"code\": 6054,\n \"name\": \"InvalidOracleWindow\",\n \"msg\": \"Invalid oracle observation window.\"\n },\n {\n \"code\": 6055,\n \"name\": \"OraclePoolMismatch\",\n \"msg\": \"Oracle pool mismatch.\"\n },\n {\n \"code\": 6056,\n \"name\": \"InvalidBinArrayPda\",\n \"msg\": \"Invalid BinArray PDA derivation.\"\n },\n {\n \"code\": 6057,\n \"name\": \"InvalidPositionBinPda\",\n \"msg\": \"Invalid PositionBin PDA derivation.\"\n },\n {\n \"code\": 6058,\n \"name\": \"ClaimTooSoon\",\n \"msg\": \"Claim cooldown not elapsed. Please wait before claiming again.\"\n },\n {\n \"code\": 6059,\n \"name\": \"PositionHasLiquidity\",\n \"msg\": \"Position has active liquidity and cannot be closed. Withdraw all liquidity first.\"\n },\n {\n \"code\": 6060,\n \"name\": \"ExcessiveFee\",\n \"msg\": \"Fee exceeds maximum allowed (10%). Cannot set base_fee_bps > 1000.\"\n },\n {\n \"code\": 6061,\n \"name\": \"FeeConfigImmutable\",\n \"msg\": \"Fee configuration is immutable after pool creation. Cannot change fees once pool has liquidity or swaps.\"\n },\n {\n \"code\": 6062,\n \"name\": \"PauseDurationExceeded\",\n \"msg\": \"Pause duration exceeds maximum allowed (7 days). Automatic unpause required.\"\n },\n {\n \"code\": 6063,\n \"name\": \"InvalidStakePool\",\n \"msg\": \"Invalid stake pool. Must stake in the official CIPHER staking pool.\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AdminUpdated\",\n \"docs\": [\n \"Emitted when the admin rotates to a new key.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"old_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"AuthoritiesUpdated\",\n \"docs\": [\n \"Emitted when auxiliary authorities are updated.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"config_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pause_guardian\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_withdraw_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"BinArray\",\n \"docs\": [\n \"BinArray account holding BIN_ARRAY_SIZE (64) consecutive bins.\",\n \"Bins are indexed as: bin_index = lower_bin_index + array_offset (0..63)\",\n \"\",\n \"PDA Derivation:\",\n \"seeds = [b\\\"bin_array\\\", pool.key(), lower_bin_index.to_le_bytes()]\",\n \"\",\n \"lower_bin_index is always aligned to BIN_ARRAY_SIZE boundaries:\",\n \"lower_bin_index = (actual_bin_index / 64) * 64\",\n \"\",\n \"Example: bin indices 128-191 are stored in BinArray with lower_bin_index=128\",\n \"\",\n \"Field order optimized to avoid padding (bins placed first after pool for proper alignment)\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Owning pool.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bins\",\n \"docs\": [\n \"Packed bins (64 consecutive bins). Must be 16-byte aligned.\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"CompactBin\"\n }\n },\n 64\n ]\n }\n },\n {\n \"name\": \"lower_bin_index\",\n \"docs\": [\n \"Starting bin index for this array (always multiple of BIN_ARRAY_SIZE).\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump seed.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_reserved\",\n \"docs\": [\n \"Reserved for 16-byte alignment (u128 fields require struct to be 16-byte aligned).\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 11\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"BinArrayCreated\",\n \"docs\": [\n \"Event emitted when a new BinArray is created.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lower_bin_index\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"bin_array\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"BinLiquidityDeposit\",\n \"docs\": [\n \"Per-bin liquidity deposit specification.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_index\",\n \"docs\": [\n \"Bin index (canonically encoded)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"base_in\",\n \"docs\": [\n \"Base tokens to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"quote_in\",\n \"docs\": [\n \"Quote tokens to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_shares_out\",\n \"docs\": [\n \"Minimum shares expected (slippage protection)\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"BinLiquidityUpdated\",\n \"docs\": [\n \"Emitted whenever a bin’s reserves change (e.g., deposit or swap traversal).\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bin_index\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"delta_base\",\n \"docs\": [\n \"Change in base/quote reserve (unsigned magnitudes).\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"delta_quote\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"reserve_base\",\n \"docs\": [\n \"Resulting reserves after the change.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reserve_quote\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"BinWithdrawal\",\n \"docs\": [\n \"Per-bin withdrawal specification for exact mode.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_index\",\n \"docs\": [\n \"Bin index (canonically encoded)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"shares\",\n \"docs\": [\n \"Exact shares to burn from this bin\"\n ],\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"ClaimHolderRewardsEvent\",\n \"docs\": [\n \"Emitted when user claims holder rewards based on staked CIPHER.\",\n \"\",\n \"**When Emitted:**\",\n \"- User calls `claim_holder_rewards()`\",\n \"- Only claimable if user has synced their stake at least once\",\n \"\",\n \"**Calculation:**\",\n \"- `current_period_claimed`: Rewards from current stake period (entry_index → current_index)\",\n \"- `pending_claimed`: Rewards accumulated from previous stake periods\",\n \"- `amount`: Total claimed (current_period + pending)\",\n \"\",\n \"**Fields:**\",\n \"- `user`: User's public key\",\n \"- `pool`: Pool address (if pool-specific) or default for global\",\n \"- `amount`: Total USDC (or quote token) claimed\",\n \"- `pending_claimed`: Portion from previous periods\",\n \"- `current_period_claimed`: Portion from current period\",\n \"- `timestamp`: Unix timestamp of claim\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"pending_claimed\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"current_period_claimed\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"CompactBin\",\n \"docs\": [\n \"Compact bin data stored within a BinArray.\",\n \"bin_index is implicitly derived as: lower_bin_index + offset\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"reserve_base\",\n \"docs\": [\n \"Actual token reserves at this bin's fixed price.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reserve_quote\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_shares\",\n \"docs\": [\n \"Total bin shares outstanding across all positions.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"fee_growth_base_q128\",\n \"docs\": [\n \"Cumulative fee growth per unit of share in Q128 fixed-point.\",\n \"Used for auto-compounding fee distribution to position holders.\",\n \"Updated on every swap that touches this bin.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"fee_growth_quote_q128\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"FarmingPositionView\",\n \"docs\": [\n \"Farming position view data (returned to client).\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"docs\": [\n \"Position pubkey\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Position owner\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bin_index\",\n \"docs\": [\n \"Bin index\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"shares\",\n \"docs\": [\n \"Position shares in this bin\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_shares\",\n \"docs\": [\n \"Total shares in this bin\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reserve_base\",\n \"docs\": [\n \"Current reserves (position's share)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reserve_quote\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"accrued_fee_base\",\n \"docs\": [\n \"Accrued fees (auto-compounding)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"accrued_fee_quote\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_value_base\",\n \"docs\": [\n \"Total value (reserves + fees)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_value_quote\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"last_updated\",\n \"docs\": [\n \"Timestamps\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"position_created_at\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"FeeConfig\",\n \"docs\": [\n \"Fee distribution configuration for the pool.\"\n ],\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"split_holders_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"split_nft_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"split_creator_extra_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"variable_fee_control\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"max_volatility_accumulator\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"base_fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"creator_cut_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"legacy_volatility_multiplier_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"max_dynamic_fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"dynamic_fee_enabled\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"_fee_reserved\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"FeeConfigUpdated\",\n \"docs\": [\n \"Emitted whenever the fee configuration is changed.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"creator_cut_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"split_holders_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"split_nft_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"split_creator_extra_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"FeesDistributed\",\n \"docs\": [\n \"Emitted when fees are split to fee vaults during swap.\",\n \"V2: Includes protocol fee (12.5% of total) extracted FIRST before other splits.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_fee\",\n \"docs\": [\n \"Protocol treasury cut (after staker sub-share is split out)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_staker_fee\",\n \"docs\": [\n \"Portion of protocol fee redirected to CIPHER stakers.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"holders_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"nft_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator_extra_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"HolderGlobalState\",\n \"docs\": [\n \"Global state for CIPHER holder rewards across all pools.\",\n \"Tracks cumulative reward index using Q128 fixed-point arithmetic.\",\n \"\",\n \"**Design Philosophy:**\",\n \"- Staking required: Users claim based on staked CIPHER checkpoints\",\n \"- Q128 precision: Same as Uniswap V3 fee growth tracking (2^128 precision levels)\",\n \"- Global index: Aggregates rewards from all pools for simplified claiming\",\n \"\",\n \"**Index Math:**\",\n \"```\",\n \"reward_index_growth = (holder_fees * Q128) / total_cipher_supply\",\n \"user_claimable = (current_index - user_last_index) * user_balance / Q128\",\n \"```\",\n \"\",\n \"**Security:**\",\n \"- Index monotonically increases (prevents retroactive claims)\",\n \"- Overflow protected by Q128 scale\",\n \"- Admin-only index updates (verified in instruction)\",\n \"\",\n \"PDA Seeds: [b\\\"holder_global\\\"]\",\n \"Size: 144 bytes (~0.128 SOL rent-exempt)\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_rewards_accumulated\",\n \"docs\": [\n \"Total rewards accumulated across all pools (in quote token terms, e.g., USDC/SOL)\",\n \"This is a cumulative counter that only increases\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reward_index_q128\",\n \"docs\": [\n \"Global reward index in Q128 fixed-point format\",\n \"Index = cumulative_fees * Q128 / total_cipher_supply\",\n \"Monotonically increasing to prevent retroactive claims\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"cached_total_supply\",\n \"docs\": [\n \"Cached total CIPHER supply (updated periodically for gas optimization)\",\n \"Real-time supply queried on-chain during index updates\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_updated\",\n \"docs\": [\n \"Last timestamp when the index was updated\",\n \"Used for monitoring and preventing stale data\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin authority (can update index, typically automated crank)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump seed for PDA derivation\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_reserved1\",\n \"docs\": [\n \"Reserved space for future upgrades (64 bytes: 32 + 32)\",\n \"Prevents need for migration if we add new fields\",\n \"Split into two arrays due to bytemuck Pod trait limits (max 32 elements)\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"_reserved2\",\n \"type\": {\n \"array\": [\n \"u8\",\n 31\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityLock\",\n \"docs\": [\n \"Liquidity lock account.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"locked_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lock_end\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityLocked\",\n \"docs\": [\n \"Emitted when a user locks liquidity (book-entry in current code).\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lock_end\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityWithdrawnUser\",\n \"docs\": [\n \"Emitted when a user withdraws by burning LP shares.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"shares_burned\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"base_amount_out\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"quote_amount_out\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"NftGlobalState\",\n \"docs\": [\n \"Global state for NFT holder rewards across all pools.\",\n \"Tracks cumulative reward index using Q128 fixed-point arithmetic.\",\n \"\",\n \"**Design Philosophy:**\",\n \"- No staking required: Users claim based on NFT ownership at claim time\",\n \"- Q128 precision: Same as holder rewards (2^128 precision levels)\",\n \"- Weighted by rarity: Rare NFTs earn more than common\",\n \"- Global index: Aggregates rewards from all pools for simplified claiming\",\n \"\",\n \"**Index Math:**\",\n \"```\",\n \"reward_index_growth = (nft_fees * Q128) / total_collection_weight\",\n \"user_claimable = (current_index - user_last_index) * user_nft_weight / Q128\",\n \"```\",\n \"\",\n \"**Security:**\",\n \"- Index monotonically increases (prevents retroactive claims)\",\n \"- Overflow protected by Q128 scale\",\n \"- Admin-only index updates (verified in instruction)\",\n \"\",\n \"PDA Seeds: [b\\\"nft_global\\\"]\",\n \"Size: 144 bytes (~0.128 SOL rent-exempt)\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"total_rewards_accumulated\",\n \"docs\": [\n \"Total rewards accumulated across all pools (in quote token terms)\",\n \"This is a cumulative counter that only increases\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reward_index_q128\",\n \"docs\": [\n \"Global reward index in Q128 fixed-point format\",\n \"Index = cumulative_fees * Q128 / total_collection_weight\",\n \"Monotonically increasing to prevent retroactive claims\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"last_updated\",\n \"docs\": [\n \"Last timestamp when the index was updated\",\n \"Used for monitoring and preventing stale data\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"admin\",\n \"docs\": [\n \"Admin authority (can update index, typically automated crank)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump seed for PDA derivation\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad\",\n \"docs\": [\n \"Additional padding for alignment\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n },\n {\n \"name\": \"_reserved1\",\n \"docs\": [\n \"Reserved space for future upgrades (64 bytes: 32 + 32)\",\n \"Prevents need for migration if we add new fields\",\n \"Split into two arrays due to bytemuck Pod trait limits (max 32 elements)\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"_reserved2\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Oracle\",\n \"docs\": [\n \"Oracle account for tracking price observations.\",\n \"\",\n \"Provides TWAP (Time-Weighted Average Price) calculation capability\",\n \"for external protocol integrations (lending, perpetuals, etc.) and\",\n \"MEV protection through price impact analysis.\",\n \"\",\n \"# Security Considerations\",\n \"- Observations are immutable once written (no manipulation)\",\n \"- Circular buffer prevents overflow\",\n \"- Timestamps must be strictly increasing\",\n \"- Only swap instructions can update observations\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool this oracle belongs to (32 bytes, align 1)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"active_index\",\n \"docs\": [\n \"Current active observation index (circular buffer)\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"observation_count\",\n \"docs\": [\n \"Number of observations initialized (0 to MAX_OBSERVATIONS)\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"_reserved\",\n \"docs\": [\n \"Reserved bytes to align observations array to 8-byte boundary\",\n \"(32 + 2 + 2 + 4 = 40 bytes, which is 8-byte aligned)\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"observations\",\n \"docs\": [\n \"Circular buffer of price observations\",\n \"PriceObservation is 40 bytes (i64 + i128 + u128), needs 8-byte alignment\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"PriceObservation\"\n }\n },\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PairRegistry\",\n \"docs\": [\n \"Pair registry to prevent duplicate pools.\",\n \"PDA seeds: [b\\\"registry\\\", base_mint, quote_mint, bin_step_bps]\",\n \"Each pool (unique base_mint + quote_mint + bin_step_bps combination) has its own registry.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_mint\",\n \"docs\": [\n \"Token pair (can be in any order)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"quote_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool address created for this pair.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bin_step_bps\",\n \"docs\": [\n \"Bin step used by this pool (bps).\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"created_at\",\n \"docs\": [\n \"Creation timestamp.\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump seed.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_reserved\",\n \"docs\": [\n \"Reserved for future config (e.g., flags).\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 13\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PauseUpdated\",\n \"docs\": [\n \"Emitted when pause bitmask changes.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"paused\",\n \"docs\": [\n \"Bitmask of paused features (see state/flags.rs):\",\n \"PAUSE_SWAP | PAUSE_DEPOSIT | PAUSE_WITHDRAW\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"Pool\",\n \"docs\": [\n \"Main pool account holding configuration, authorities, price cache and vaults.\",\n \"Fields are ordered to minimize padding for zero-copy compatibility.\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"config_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pause_guardian\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_withdraw_authority\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"quote_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"quote_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator_fee_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"holders_fee_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"nft_fee_vault\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"protocol_fee_vault\",\n \"docs\": [\n \"Protocol fee vault (12.5% of total swap fees)\",\n \"Can be permissionlessly swept to Squads multisig\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lp_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"price_q64_64\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_shares\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_holder_units\",\n \"docs\": [\n \"Sync checkpoint for holder rewards index (per-pool).\",\n \"Used by `sync_reward_indexes` to aggregate deltas into global holder index.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_nft_units\",\n \"docs\": [\n \"Sync checkpoint for NFT rewards index (per-pool).\",\n \"Used by `sync_reward_indexes` to aggregate deltas into global NFT index.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"reward_indexes\",\n \"type\": {\n \"defined\": {\n \"name\": \"RewardIndexes\"\n }\n }\n },\n {\n \"name\": \"last_updated\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_swap_time\",\n \"docs\": [\n \"Legacy: timestamp of last swap (can be used for analytics/legacy)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_volatility_update\",\n \"docs\": [\n \"timestamp of last volatility update\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"initial_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"active_bin\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"previous_bin\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"reference_bin\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"split_holders_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"split_nft_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"split_creator_extra_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"variable_fee_control\",\n \"docs\": [\n \"variable_fee_control (C)\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"max_volatility_accumulator\",\n \"docs\": [\n \"cap on va accumulator\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"volatility_reference\",\n \"docs\": [\n \"vr state\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"volatility_accumulator\",\n \"docs\": [\n \"va state\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"bin_step_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"creator_cut_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"legacy_volatility_multiplier_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"docs\": [\n \"seconds\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor_bps\",\n \"docs\": [\n \"0..=10000\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"max_dynamic_fee_bps\",\n \"docs\": [\n \"Cap on total fee (base + variable)\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"version\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"pause_bits\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"accounting_mode\",\n \"docs\": [\n \"Accounting mode:\",\n \"0 = legacy global LP shares\",\n \"1 = position-bin shares\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"dynamic_fee_enabled\",\n \"docs\": [\n \"Dynamic fee enabled flag (0 = disabled, 1 = enabled)\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_fee_reserved\",\n \"docs\": [\n \"Reserved for future parameters (and padding)\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"_pad2\",\n \"docs\": [\n \"Explicit padding to bring total struct size to a multiple of 8\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 2\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PoolAccountingVerified\",\n \"docs\": [\n \"Event emitted when pool accounting is verified.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_vault_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"quote_vault_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bin_base_total\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"bin_quote_total\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"base_drift\",\n \"type\": \"i128\"\n },\n {\n \"name\": \"quote_drift\",\n \"type\": \"i128\"\n },\n {\n \"name\": \"verified_by\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolDriftReconciled\",\n \"docs\": [\n \"Event emitted when pool drift is reconciled.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_drift_before\",\n \"type\": \"i128\"\n },\n {\n \"name\": \"quote_drift_before\",\n \"type\": \"i128\"\n },\n {\n \"name\": \"bins_adjusted\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"reconciled_by\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolInitialized\",\n \"docs\": [\n \"Emitted once when a pool is initialized.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"quote_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bin_step_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"initial_price_q64_64\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"base_fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"creator_cut_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"split_holders_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"split_nft_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"split_creator_extra_microbps\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"ts\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"docs\": [\n \"A Position represents *ownership authority* in a pool.\",\n \"It does NOT store liquidity. All accounting is per-bin in PositionBin.\",\n \"\",\n \"PDA seeds (canonical):\",\n \"[POSITION_SEED, pool, owner, nonce_le]\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Owning pool\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of this position\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"nonce\",\n \"docs\": [\n \"Optional user-defined nonce to allow multiple positions per pool\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"created_at\",\n \"docs\": [\n \"Creation timestamp\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_updated\",\n \"docs\": [\n \"Last updated timestamp\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_reserved\",\n \"docs\": [\n \"Reserved for future use (alignment + upgrades)\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PositionBin\",\n \"docs\": [\n \"A PositionBin represents how many bin-shares\",\n \"a specific Position owns in a specific LiquidityBin.\",\n \"\",\n \"PDA seeds (canonical):\",\n \"[POSITION_BIN_SEED, position, bin_index_le]\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"docs\": [\n \"Parent position\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Owning pool (redundant but useful for validation)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bin_index\",\n \"docs\": [\n \"Bin index this position participates in\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"shares\",\n \"docs\": [\n \"Bin shares owned by this position.\",\n \"These are claims on LiquidityBin reserves via:\",\n \"amount_out = reserves * shares_burn / total_shares\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"fee_growth_base_q128\",\n \"docs\": [\n \"Accrued fees (optional, future use)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"fee_growth_quote_q128\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"last_updated\",\n \"docs\": [\n \"Last update timestamp\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"PDA bump\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_reserved\",\n \"docs\": [\n \"Reserved for upgrades / alignment\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PriceObservation\",\n \"docs\": [\n \"Single price observation at a specific timestamp.\",\n \"\",\n \"Stores cumulative values for TWAP calculation:\",\n \"- Cumulative bin ID (sum of active_bin over time)\",\n \"- Cumulative volatility (sum of volatility_accumulator over time)\",\n \"\",\n \"TWAP = (cumulative_end - cumulative_start) / (timestamp_end - timestamp_start)\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"timestamp\",\n \"docs\": [\n \"Unix timestamp of this observation\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"cumulative_bin_id_low\",\n \"docs\": [\n \"Cumulative sum of active bin ID (for TWAP price calculation) - low 64 bits\",\n \"Full value = cumulative_bin_id_low | (cumulative_bin_id_high << 64)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulative_bin_id_high\",\n \"docs\": [\n \"Cumulative sum of active bin ID - high 64 bits (signed)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"cumulative_volatility_low\",\n \"docs\": [\n \"Cumulative sum of volatility accumulator (for volatility TWAP) - low 64 bits\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulative_volatility_high\",\n \"docs\": [\n \"Cumulative sum of volatility accumulator - high 64 bits\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardIndexes\",\n \"docs\": [\n \"Tracks accumulated reward indexes for holders and NFT stakers.\"\n ],\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"holders_q128\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"nft_q128\",\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardIndexesSyncedEvent\",\n \"docs\": [\n \"Emitted when reward indexes are synced from pool to global states.\",\n \"\",\n \"**SECURITY FIX EVENT:** This event tracks the critical sync operation that ensures\",\n \"global state indexes (used by claims) match pool indexes (updated by swaps).\",\n \"\",\n \"**When Emitted:**\",\n \"- Anyone calls `sync_reward_indexes()` instruction\",\n \"- Should be called after swaps and before claims\",\n \"\",\n \"**Monitoring:**\",\n \"- Track if indexes are being synced regularly\",\n \"- Alert if indexes haven't synced in a long time\",\n \"- Verify index values are increasing (fees accumulating)\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"holder_index_before\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"holder_index_after\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"nft_index_before\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"nft_index_after\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"SwapRoute\",\n \"docs\": [\n \"Swap route specifying bin indices to traverse.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_indices\",\n \"docs\": [\n \"Ordered bin indices (best price -> worst price)\"\n ],\n \"type\": {\n \"vec\": \"i32\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"SwapSpec\",\n \"docs\": [\n \"Swap specification - supports both exact input and exact output modes.\",\n \"\",\n \"# Modes\",\n \"- **ExactIn**: User specifies exact input amount, gets minimum output (most common)\",\n \"- **ExactOut**: User specifies exact output amount, spends maximum input (bills, bridges)\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"ExactIn\",\n \"fields\": [\n {\n \"name\": \"amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_out\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"ExactOut\",\n \"fields\": [\n {\n \"name\": \"amount_out\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount_in\",\n \"type\": \"u64\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"SyncHolderStakeEvent\",\n \"docs\": [\n \"Emitted when user synchronizes their staked CIPHER amount for time-weighted rewards.\",\n \"This is a checkpoint that records stake entry/exit for proper reward calculation.\",\n \"\",\n \"**When Emitted:**\",\n \"- After user stakes/unstakes CIPHER in Streamflow (external program)\",\n \"- On first sync (initialization)\",\n \"- User must call `sync_holder_stake()` after each Streamflow stake change\",\n \"\",\n \"**Fields:**\",\n \"- `user`: User's public key\",\n \"- `previous_staked_amount`: Amount staked before this sync (0 on first sync)\",\n \"- `new_staked_amount`: Amount staked after this sync (from Streamflow)\",\n \"- `accrued_rewards`: Rewards accumulated during previous stake period\",\n \"- `pending_rewards_after`: Total pending rewards (accrued + previous pending)\",\n \"- `stake_entry_index`: Global reward index when this stake period began\",\n \"- `timestamp`: Unix timestamp of sync\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"previous_staked_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_staked_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"accrued_rewards\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"pending_rewards_after\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"stake_entry_index\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"UserHolderState\",\n \"docs\": [\n \"Per-user holder reward claim state with time-weighted staking checkpoints.\",\n \"Tracks stake periods and accumulated rewards from CIPHER staked via Streamflow.\",\n \"\",\n \"**CRITICAL REQUIREMENT:**\",\n \"Users MUST stake CIPHER via Streamflow to earn holder rewards.\",\n \"Rewards only accumulate during periods when tokens are actively staked.\",\n \"\",\n \"**Checkpoint System:**\",\n \"- User calls `sync_holder_stake()` after each stake/unstake in Streamflow\",\n \"- Sync records: entry index, staked amount, pending rewards from previous period\",\n \"- Claim calculates: pending + (current_index - entry_index) * staked_amount / Q128\",\n \"\",\n \"**Time-Weighted Formula:**\",\n \"```\",\n \"On sync:\",\n \"accrued = (current_index - entry_index) * previous_staked_amount / Q128\",\n \"pending_rewards += accrued // Preserve from past periods\",\n \"entry_index = current_index // Start new period\",\n \"staked_amount = new_amount // Update stake\",\n \"\",\n \"On claim:\",\n \"current_period = (current_index - entry_index) * staked_amount / Q128\",\n \"total_claimable = pending_rewards + current_period\",\n \"transfer(total_claimable)\",\n \"pending_rewards = 0\",\n \"entry_index = current_index\",\n \"```\",\n \"\",\n \"**Security:**\",\n \"- Self-reported staked amount (validated by frontend against indexer)\",\n \"- Economic security: Can't drain more than proportional share (vault balance cap)\",\n \"- First sync initializes with current index (prevents retroactive claims)\",\n \"- Pending rewards preserve across stake periods (fair accumulation)\",\n \"\",\n \"**Integration with Streamflow:**\",\n \"- Streamflow Program: STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH\",\n \"- Indexer tracks stakes: GET /api/v1/streamflow/stakes/:owner\",\n \"- Frontend validates sync amount against indexer (prevents errors)\",\n \"- On-chain Streamflow verification in sync_holder_stake (trustless checkpointing)\",\n \"\",\n \"PDA Seeds: [b\\\"holder_user\\\", user_pubkey]\",\n \"Size: 160 bytes (~0.142 SOL rent-exempt, paid by user on first sync)\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"stake_entry_index_q128\",\n \"docs\": [\n \"Reward index when current stake period began\",\n \"Set on each sync to current global index\",\n \"Used to calculate rewards accumulated during current period\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"pending_rewards\",\n \"docs\": [\n \"Accumulated rewards from previous stake periods (unclaimed)\",\n \"Preserved across syncs to allow multi-period accumulation\",\n \"Reset to 0 on claim\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_claimed\",\n \"docs\": [\n \"Total rewards claimed by this user (cumulative, never decreases)\",\n \"Sum across all periods and claim events\",\n \"Denominated in quote token (e.g., USDC)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"user\",\n \"docs\": [\n \"User this state belongs to\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_reserved\",\n \"docs\": [\n \"Reserved space for future upgrades (40 bytes)\",\n \"Reduced from 64 bytes due to new fields\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 5\n ]\n }\n },\n {\n \"name\": \"current_staked_amount\",\n \"docs\": [\n \"Current staked CIPHER amount (per last sync)\",\n \"Updated via `sync_holder_stake()` after each Streamflow stake/unstake\",\n \"\",\n \"SECURITY: ON-CHAIN VERIFIED via Streamflow CPI (NOT self-reported)\",\n \"- Reads actual amount from Streamflow StakeEntry account\",\n \"- Verifies account owned by Streamflow program\",\n \"- Validates authority, stake pool, nonce, and active status\",\n \"- See: sync_holder_stake.rs verify_and_get_stake_amount()\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_claim_time\",\n \"docs\": [\n \"Last timestamp when user claimed rewards\",\n \"Used for analytics and monitoring\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_sync_time\",\n \"docs\": [\n \"Last timestamp when user synced their stake\",\n \"Used to detect stale state and prompt frontend to sync\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump seed for PDA derivation\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad\",\n \"docs\": [\n \"Additional padding to align struct to 16-byte boundary (Pod requirement)\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 15\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"UserNftState\",\n \"docs\": [\n \"Per-user NFT reward claim state.\",\n \"Tracks the last claimed index to calculate pending rewards.\",\n \"\",\n \"**Design:**\",\n \"- Initialized lazily on first claim (saves rent for non-claimers)\",\n \"- Index-based claiming prevents double-claiming\",\n \"- No NFT list stored (verifies ownership at claim time)\",\n \"\",\n \"**Claiming Formula:**\",\n \"```\",\n \"index_delta = current_index - user_last_claimed_index\",\n \"user_nft_weight = sum(nft_rarities.map(r => r.weight()))\",\n \"claimable = (index_delta * user_nft_weight) / Q128\",\n \"```\",\n \"\",\n \"**Security:**\",\n \"- First claim initializes with current index (prevents retroactive claims)\",\n \"- Index updated after claim (prevents double-claiming same period)\",\n \"- NFT ownership checked at claim time (prevents borrowed NFT exploits)\",\n \"- Max 10 NFTs per claim (prevents compute limit issues)\",\n \"\",\n \"PDA Seeds: [b\\\"nft_user\\\", user_pubkey]\",\n \"Size: 144 bytes (~0.128 SOL rent-exempt, paid by user on first claim)\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"user\",\n \"docs\": [\n \"User this state belongs to\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"last_claimed_index_q128\",\n \"docs\": [\n \"Last reward index when user claimed\",\n \"Initialized to current index on first claim (prevents retroactive)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"total_claimed\",\n \"docs\": [\n \"Total rewards claimed by this user (cumulative, never decreases)\",\n \"Sum across all pools and claim events\",\n \"Denominated in quote token (e.g., USDC)\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"last_claim_time\",\n \"docs\": [\n \"Last timestamp when user claimed\",\n \"Used for analytics and rate limiting (if desired)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"_reserved\",\n \"docs\": [\n \"Reserved space for future upgrades (64 bytes)\",\n \"Using u64 array to avoid Pod padding issues\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 8\n ]\n }\n },\n {\n \"name\": \"bump\",\n \"docs\": [\n \"Bump seed for PDA derivation\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_pad\",\n \"docs\": [\n \"Additional padding to reach target size\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawalSpec\",\n \"docs\": [\n \"Withdrawal specification - supports both exact and range modes.\",\n \"\",\n \"# Modes\",\n \"- **Exact**: Specify exact shares to burn per bin (granular control)\",\n \"- **Range**: Specify bin range + percentage (simple, user-friendly)\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Exact\",\n \"fields\": [\n {\n \"name\": \"withdrawals\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"BinWithdrawal\"\n }\n }\n }\n }\n ]\n },\n {\n \"name\": \"Range\",\n \"fields\": [\n {\n \"name\": \"from_bin\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"to_bin\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"bps_to_withdraw\",\n \"type\": \"u16\"\n }\n ]\n }\n ]\n }\n }\n ]\n}","import { Connection, PublicKey } from \"@solana/web3.js\";\nimport { Program, AnchorProvider } from \"@coral-xyz/anchor\";\nimport type { Idl } from \"@coral-xyz/anchor\";\nimport { DEFAULT_PROGRAM_ID } from \"../constants\";\nimport type { PoolState, FeeConfig } from \"../types/pool\";\nimport idlJson from \"../idl/orbit_finance.json\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyProgram = Program<any>;\n\n/** Create a read-only Anchor program instance */\nexport function createReadOnlyProgram(\n connection: Connection,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): AnyProgram {\n const provider = new AnchorProvider(\n connection,\n // Dummy wallet — only used for reads, never signs\n { publicKey: PublicKey.default, signTransaction: async (tx: unknown) => tx, signAllTransactions: async (txs: unknown) => txs } as AnchorProvider[\"wallet\"],\n { commitment: \"confirmed\" }\n );\n return new Program(idlJson as unknown as Idl, provider) as AnyProgram;\n}\n\n/** Fetch and decode a Pool account */\nexport async function fetchPool(\n connection: Connection,\n poolAddress: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<PoolState> {\n const program = createReadOnlyProgram(connection, programId);\n const raw = await (program.account as Record<string, { fetch: (addr: PublicKey) => Promise<Record<string, unknown>> }>).pool.fetch(poolAddress);\n\n return decodePoolAccount(poolAddress, raw);\n}\n\n/** Fetch all pools (warning: expensive RPC call) */\nexport async function fetchAllPools(\n connection: Connection,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<PoolState[]> {\n const program = createReadOnlyProgram(connection, programId);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const accounts = await (program.account as any).pool.all();\n return accounts.map((a: { publicKey: PublicKey; account: Record<string, unknown> }) => decodePoolAccount(a.publicKey, a.account));\n}\n\nfunction decodePoolAccount(address: PublicKey, raw: Record<string, unknown>): PoolState {\n const feeConfigRaw = raw.feeConfig as Record<string, unknown> || {};\n\n const feeConfig: FeeConfig = {\n baseFeeBps: toNumber(feeConfigRaw.baseFeeBps),\n creatorCutBps: toNumber(feeConfigRaw.creatorCutBps),\n holdersCutBps: toNumber(feeConfigRaw.holdersCutBps),\n nftCutBps: toNumber(feeConfigRaw.nftCutBps),\n protocolCutBps: toNumber(feeConfigRaw.protocolCutBps),\n };\n\n return {\n address,\n baseMint: toPubkey(raw.baseMint),\n quoteMint: toPubkey(raw.quoteMint),\n baseVault: toPubkey(raw.baseVault),\n quoteVault: toPubkey(raw.quoteVault),\n protocolFeeVault: toPubkey(raw.protocolFeeVault),\n creatorFeeVault: toPubkey(raw.creatorFeeVault),\n holdersFeeVault: toPubkey(raw.holdersFeeVault),\n nftFeeVault: toPubkey(raw.nftFeeVault),\n binStepBps: toNumber(raw.binStepBps),\n baseFeeBps: toNumber(raw.baseFeeBps),\n activeBinId: toNumber(raw.activeBin),\n activeBinPrice: toBigInt(raw.activeBinPrice),\n admin: toPubkey(raw.admin),\n creator: toPubkey(raw.creator),\n configAuthority: toPubkey(raw.configAuthority),\n pauseGuardian: toPubkey(raw.pauseGuardian),\n feeWithdrawAuthority: toPubkey(raw.feeWithdrawAuthority),\n feeConfig,\n pausedBits: toNumber(raw.pausedBits),\n baseDecimals: toNumber(raw.baseDecimals),\n quoteDecimals: toNumber(raw.quoteDecimals),\n };\n}\n\nfunction toPubkey(v: unknown): PublicKey {\n if (v instanceof PublicKey) return v;\n if (typeof v === \"string\") return new PublicKey(v);\n if (v && typeof v === \"object\" && \"toBase58\" in v) return v as PublicKey;\n return PublicKey.default;\n}\n\nfunction toNumber(v: unknown): number {\n if (typeof v === \"number\") return v;\n if (typeof v === \"bigint\") return Number(v);\n if (v && typeof v === \"object\" && \"toNumber\" in v) return (v as { toNumber(): number }).toNumber();\n return 0;\n}\n\nfunction toBigInt(v: unknown): bigint {\n if (typeof v === \"bigint\") return v;\n if (typeof v === \"number\") return BigInt(v);\n if (v && typeof v === \"object\" && \"toString\" in v) return BigInt((v as { toString(): string }).toString());\n return 0n;\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { BIN_ARRAY_SIZE, DEFAULT_PROGRAM_ID } from \"../constants\";\n\n/**\n * Calculate which BinArray contains a given bin index.\n * BinArrays are aligned to 64-bin boundaries.\n *\n * @example\n * getBinArrayLowerIndex(0) // => 0 (bins 0-63)\n * getBinArrayLowerIndex(150) // => 128 (bins 128-191)\n * getBinArrayLowerIndex(-1) // => -64 (bins -64 to -1)\n * getBinArrayLowerIndex(-65) // => -128\n */\nexport function getBinArrayLowerIndex(binIndexSigned: number): number {\n // Math.floor rounds towards -infinity (correct for negative bins)\n // Math.trunc rounds towards 0 (WRONG for negative bins)\n const arrayNumber = Math.floor(binIndexSigned / BIN_ARRAY_SIZE);\n return arrayNumber * BIN_ARRAY_SIZE;\n}\n\n/**\n * Calculate offset within BinArray for a given bin index.\n *\n * @example\n * getBinOffsetInArray(150, 128) // => 22\n * getBinOffsetInArray(63, 0) // => 63\n */\nexport function getBinOffsetInArray(\n binIndexSigned: number,\n lowerBinIndex: number\n): number {\n const offset = binIndexSigned - lowerBinIndex;\n if (offset < 0 || offset >= BIN_ARRAY_SIZE) {\n throw new Error(\n `Bin index ${binIndexSigned} not in array ${lowerBinIndex} (offset: ${offset})`\n );\n }\n return offset;\n}\n\n/**\n * Derive BinArray PDA (holds 64 consecutive bins).\n *\n * Seeds: [\"bin_array\", pool, lower_bin_index_i32_le]\n *\n * @param pool - Pool public key\n * @param lowerBinIndex - Starting bin index (must be multiple of 64)\n * @param programId - Program ID (defaults to CipherDLMM mainnet)\n */\nexport function deriveBinArrayPda(\n pool: PublicKey,\n lowerBinIndex: number,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): [PublicKey, number] {\n if (lowerBinIndex % BIN_ARRAY_SIZE !== 0) {\n throw new Error(\n `lowerBinIndex ${lowerBinIndex} must be multiple of ${BIN_ARRAY_SIZE}`\n );\n }\n\n const lowerBinIndexBuffer = Buffer.allocUnsafe(4);\n lowerBinIndexBuffer.writeInt32LE(lowerBinIndex, 0);\n\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"bin_array\"), pool.toBuffer(), lowerBinIndexBuffer],\n programId\n );\n}\n\n/**\n * Group bin indices by their containing BinArray.\n *\n * @example\n * groupBinsByArray([0, 50, 64, 150])\n * // => Map { 0 => [0, 50], 64 => [64], 128 => [150] }\n */\nexport function groupBinsByArray(\n binIndices: number[]\n): Map<number, number[]> {\n const groups = new Map<number, number[]>();\n for (const binIndex of binIndices) {\n const lower = getBinArrayLowerIndex(binIndex);\n const group = groups.get(lower) || [];\n group.push(binIndex);\n groups.set(lower, group);\n }\n return groups;\n}\n\n/**\n * Get unique BinArray PDAs needed for a set of bin indices.\n * Deduplicates to minimize account fetches.\n */\nexport function getUniqueBinArrayPdas(\n pool: PublicKey,\n binIndices: number[],\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Array<{ pda: PublicKey; lowerBinIndex: number }> {\n const uniqueLowerIndices = new Set(binIndices.map(getBinArrayLowerIndex));\n return Array.from(uniqueLowerIndices).map((lowerBinIndex) => {\n const [pda] = deriveBinArrayPda(pool, lowerBinIndex, programId);\n return { pda, lowerBinIndex };\n });\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { DEFAULT_PROGRAM_ID } from \"../constants\";\n\n/**\n * Derive Pool PDA.\n *\n * Seeds: [\"pool\", base_mint, quote_mint, bin_step_bps_u16_le, base_fee_bps_u16_le]\n *\n * @param baseMint - Base token mint\n * @param quoteMint - Quote token mint\n * @param binStepBps - Bin step in basis points (u16)\n * @param baseFeeBps - Base fee in basis points (u16)\n * @param programId - Program ID (defaults to CipherDLMM mainnet)\n */\nexport function derivePoolPda(\n baseMint: PublicKey,\n quoteMint: PublicKey,\n binStepBps: number,\n baseFeeBps: number,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): [PublicKey, number] {\n const binStepBuffer = Buffer.alloc(2);\n binStepBuffer.writeUInt16LE(binStepBps);\n\n const baseFeeBuffer = Buffer.alloc(2);\n baseFeeBuffer.writeUInt16LE(baseFeeBps);\n\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"pool\"),\n baseMint.toBuffer(),\n quoteMint.toBuffer(),\n binStepBuffer,\n baseFeeBuffer,\n ],\n programId\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { DEFAULT_PROGRAM_ID } from \"../constants\";\n\n/**\n * Derive Position PDA.\n *\n * Seeds: [\"position\", pool, owner, nonce_u64_le]\n *\n * @param pool - Pool public key\n * @param owner - Owner public key\n * @param nonce - Position nonce (u64)\n * @param programId - Program ID (defaults to CipherDLMM mainnet)\n */\nexport function derivePositionPda(\n pool: PublicKey,\n owner: PublicKey,\n nonce: bigint,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): [PublicKey, number] {\n const nonceBuffer = Buffer.allocUnsafe(8);\n nonceBuffer.writeBigUInt64LE(nonce, 0);\n\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position\"), pool.toBuffer(), owner.toBuffer(), nonceBuffer],\n programId\n );\n}\n\n/**\n * Derive PositionBin PDA (links Position to a specific bin).\n *\n * Seeds: [\"position_bin\", position, bin_index_i32_le]\n *\n * CRITICAL: Uses i32 (4 bytes) for bin_index seed to match the Rust program.\n *\n * @param position - Position public key\n * @param binIndexI32 - Bin index as signed i32\n * @param programId - Program ID (defaults to CipherDLMM mainnet)\n */\nexport function derivePositionBinPda(\n position: PublicKey,\n binIndexI32: number,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): [PublicKey, number] {\n if (binIndexI32 < -2147483648 || binIndexI32 > 2147483647) {\n throw new Error(`Bin index ${binIndexI32} out of i32 range`);\n }\n\n const binIndexBuffer = Buffer.allocUnsafe(4);\n binIndexBuffer.writeInt32LE(binIndexI32, 0);\n\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"position_bin\"), position.toBuffer(), binIndexBuffer],\n programId\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { DEFAULT_PROGRAM_ID } from \"../constants\";\n\n/**\n * Derive LiquidityLock PDA (escrow/timelock).\n *\n * Seeds: [\"lock\", user, pool]\n */\nexport function deriveLiquidityLockPda(\n user: PublicKey,\n pool: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"lock\"), user.toBuffer(), pool.toBuffer()],\n programId\n );\n}\n","import { PublicKey } from \"@solana/web3.js\";\nimport { DEFAULT_PROGRAM_ID } from \"../constants\";\n\n/** Derive HolderGlobalState PDA */\nexport function deriveHolderGlobalStatePda(\n pool: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"holder_global_state\"), pool.toBuffer()],\n programId\n );\n}\n\n/** Derive NftGlobalState PDA */\nexport function deriveNftGlobalStatePda(\n pool: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"nft_global_state\"), pool.toBuffer()],\n programId\n );\n}\n\n/** Derive UserHolderState PDA */\nexport function deriveUserHolderStatePda(\n holderGlobalState: PublicKey,\n user: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_holder_state\"), holderGlobalState.toBuffer(), user.toBuffer()],\n programId\n );\n}\n\n/** Derive UserNftState PDA */\nexport function deriveUserNftStatePda(\n nftGlobalState: PublicKey,\n user: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"user_nft_state\"), nftGlobalState.toBuffer(), user.toBuffer()],\n programId\n );\n}\n\n/** Derive PoolAuthority PDA */\nexport function derivePoolAuthorityPda(\n pool: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): [PublicKey, number] {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"authority\"), pool.toBuffer()],\n programId\n );\n}\n","/**\n * Encode canonical bin index to match Rust's encoding: (i32 as i64) as u64\n * Performs 64-bit sign extension, NOT 32-bit two's complement.\n *\n * @example\n * canonicalBinIndexU64(100) // => 100n\n * canonicalBinIndexU64(0) // => 0n\n * canonicalBinIndexU64(-1) // => 18446744073709551615n (0xFFFFFFFFFFFFFFFF)\n * canonicalBinIndexU64(-1224) // => 18446744073709550392n\n */\nexport function canonicalBinIndexU64(binIndexSigned: number): bigint {\n if (binIndexSigned < -2147483648 || binIndexSigned > 2147483647) {\n throw new Error(`Bin index ${binIndexSigned} out of i32 range`);\n }\n return BigInt(binIndexSigned) & 0xFFFFFFFFFFFFFFFFn;\n}\n\n/**\n * Decode canonical u64 back to signed i32.\n */\nexport function decodeBinIndexSigned(canonicalU64: bigint): number {\n if (canonicalU64 < 0x80000000n) {\n return Number(canonicalU64);\n } else if (canonicalU64 <= 0xFFFFFFFFn) {\n return Number(canonicalU64) - 0x100000000;\n } else {\n throw new Error(`Invalid canonical bin index: ${canonicalU64}`);\n }\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\nimport { DEFAULT_PROGRAM_ID, BIN_ARRAY_SIZE } from \"../constants\";\nimport { deriveBinArrayPda, getBinArrayLowerIndex } from \"../pda\";\nimport { createReadOnlyProgram } from \"./pool\";\nimport type { BinArrayState, CompactBin } from \"../types/pool\";\n\n/**\n * Fetch BinArray accounts for a range of bin indices.\n *\n * @param connection - Solana connection\n * @param pool - Pool public key\n * @param minBinId - Minimum bin index (inclusive)\n * @param maxBinId - Maximum bin index (inclusive)\n * @param programId - Program ID\n * @returns Array of decoded BinArray accounts (only those that exist on-chain)\n */\nexport async function fetchBinArraysForRange(\n connection: Connection,\n pool: PublicKey,\n minBinId: number,\n maxBinId: number,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<BinArrayState[]> {\n const program = createReadOnlyProgram(connection, programId);\n\n // Calculate all BinArray PDAs needed\n const lowerMin = getBinArrayLowerIndex(minBinId);\n const lowerMax = getBinArrayLowerIndex(maxBinId);\n const pdas: Array<{ pda: PublicKey; lower: number }> = [];\n\n for (let lower = lowerMin; lower <= lowerMax; lower += BIN_ARRAY_SIZE) {\n const [pda] = deriveBinArrayPda(pool, lower, programId);\n pdas.push({ pda, lower });\n }\n\n // Batch fetch (some may not exist yet)\n const results: BinArrayState[] = [];\n\n for (const { pda, lower } of pdas) {\n try {\n const raw = await (program.account as any).binArray.fetch(pda);\n results.push(decodeBinArray(pda, pool, lower, raw));\n } catch {\n // BinArray doesn't exist yet (no liquidity in this range)\n }\n }\n\n return results;\n}\n\n/**\n * Fetch all BinArray accounts for a pool.\n * Uses memcmp filter on the pool field.\n */\nexport async function fetchAllBinArrays(\n connection: Connection,\n pool: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<BinArrayState[]> {\n const program = createReadOnlyProgram(connection, programId);\n\n const accounts = await (program.account as any).binArray.all([\n {\n memcmp: {\n offset: 8, // After discriminator\n bytes: pool.toBase58(),\n },\n },\n ]);\n\n return accounts.map((a: { publicKey: PublicKey; account: Record<string, unknown> }) => {\n const raw = a.account;\n const lower = toNumber(raw.lowerBinIndex);\n return decodeBinArray(a.publicKey, pool, lower, raw);\n });\n}\n\nfunction decodeBinArray(\n address: PublicKey,\n pool: PublicKey,\n lowerBinIndex: number,\n raw: Record<string, unknown>\n): BinArrayState {\n const binsRaw = (raw.bins as unknown[]) || [];\n\n const bins: CompactBin[] = binsRaw.map((binRaw, offset) => {\n const b = binRaw as Record<string, unknown>;\n return {\n binIndex: lowerBinIndex + offset,\n baseReserve: toBigInt(b.baseReserve),\n quoteReserve: toBigInt(b.quoteReserve),\n totalShares: toBigInt(b.totalShares),\n feeBaseAccrued: toBigInt(b.feeBaseAccrued),\n feeQuoteAccrued: toBigInt(b.feeQuoteAccrued),\n };\n });\n\n return { address, pool, lowerBinIndex, bins };\n}\n\nfunction toNumber(v: unknown): number {\n if (typeof v === \"number\") return v;\n if (typeof v === \"bigint\") return Number(v);\n if (v && typeof v === \"object\" && \"toNumber\" in v) return (v as { toNumber(): number }).toNumber();\n return 0;\n}\n\nfunction toBigInt(v: unknown): bigint {\n if (typeof v === \"bigint\") return v;\n if (typeof v === \"number\") return BigInt(v);\n if (v && typeof v === \"object\" && \"toString\" in v) return BigInt((v as { toString(): string }).toString());\n return 0n;\n}\n","import { Connection, PublicKey } from \"@solana/web3.js\";\nimport { DEFAULT_PROGRAM_ID } from \"../constants\";\nimport { createReadOnlyProgram } from \"./pool\";\nimport type { PositionState, PositionBinState, UserPosition } from \"../types/position\";\n\n/**\n * Fetch all positions for a user on a specific pool.\n *\n * @param connection - Solana connection\n * @param user - User public key\n * @param pool - Pool public key\n * @param programId - Program ID\n */\nexport async function fetchPositions(\n connection: Connection,\n user: PublicKey,\n pool: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<UserPosition[]> {\n const program = createReadOnlyProgram(connection, programId);\n\n // Find Position accounts: memcmp on owner field (offset: 8 + 32 = 40)\n const positionAccounts = await (program.account as any).position.all([\n { memcmp: { offset: 8, bytes: pool.toBase58() } },\n { memcmp: { offset: 8 + 32, bytes: user.toBase58() } },\n ]);\n\n const positions: UserPosition[] = [];\n\n for (const posAccount of positionAccounts) {\n const posRaw = posAccount.account as Record<string, unknown>;\n const position: PositionState = {\n address: posAccount.publicKey,\n pool: toPubkey(posRaw.pool),\n owner: toPubkey(posRaw.owner),\n nonce: toBigInt(posRaw.nonce),\n };\n\n // Fetch all PositionBin accounts for this position\n const positionBinAccounts = await (program.account as any).positionBin.all([\n { memcmp: { offset: 8, bytes: posAccount.publicKey.toBase58() } },\n ]);\n\n const bins: PositionBinState[] = positionBinAccounts.map((binAcc: { publicKey: PublicKey; account: Record<string, unknown> }) => {\n const binRaw = binAcc.account as Record<string, unknown>;\n return {\n address: binAcc.publicKey,\n position: toPubkey(binRaw.position),\n pool: toPubkey(binRaw.pool),\n binIndex: toNumber(binRaw.binIndex),\n shares: toBigInt(binRaw.shares),\n entryBaseReserve: toBigInt(binRaw.entryBaseReserve),\n entryQuoteReserve: toBigInt(binRaw.entryQuoteReserve),\n };\n });\n\n bins.sort((a, b) => a.binIndex - b.binIndex);\n\n positions.push({\n position,\n bins,\n totalBaseAtoms: bins.reduce((s, b) => s + b.entryBaseReserve, 0n),\n totalQuoteAtoms: bins.reduce((s, b) => s + b.entryQuoteReserve, 0n),\n totalValueUsd: null,\n });\n }\n\n return positions;\n}\n\n/**\n * Fetch all positions for a user across ALL pools.\n */\nexport async function fetchAllUserPositions(\n connection: Connection,\n user: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<UserPosition[]> {\n const program = createReadOnlyProgram(connection, programId);\n\n // Find all Position accounts for this user (offset 40 = 8 discriminator + 32 pool)\n const positionAccounts = await (program.account as any).position.all([\n { memcmp: { offset: 8 + 32, bytes: user.toBase58() } },\n ]);\n\n const positions: UserPosition[] = [];\n\n for (const posAccount of positionAccounts) {\n const posRaw = posAccount.account as Record<string, unknown>;\n const position: PositionState = {\n address: posAccount.publicKey,\n pool: toPubkey(posRaw.pool),\n owner: toPubkey(posRaw.owner),\n nonce: toBigInt(posRaw.nonce),\n };\n\n const positionBinAccounts = await (program.account as any).positionBin.all([\n { memcmp: { offset: 8, bytes: posAccount.publicKey.toBase58() } },\n ]);\n\n const bins: PositionBinState[] = positionBinAccounts.map((binAcc: { publicKey: PublicKey; account: Record<string, unknown> }) => {\n const binRaw = binAcc.account as Record<string, unknown>;\n return {\n address: binAcc.publicKey,\n position: toPubkey(binRaw.position),\n pool: toPubkey(binRaw.pool),\n binIndex: toNumber(binRaw.binIndex),\n shares: toBigInt(binRaw.shares),\n entryBaseReserve: toBigInt(binRaw.entryBaseReserve),\n entryQuoteReserve: toBigInt(binRaw.entryQuoteReserve),\n };\n });\n\n bins.sort((a, b) => a.binIndex - b.binIndex);\n\n positions.push({\n position,\n bins,\n totalBaseAtoms: bins.reduce((s, b) => s + b.entryBaseReserve, 0n),\n totalQuoteAtoms: bins.reduce((s, b) => s + b.entryQuoteReserve, 0n),\n totalValueUsd: null,\n });\n }\n\n return positions;\n}\n\nfunction toPubkey(v: unknown): PublicKey {\n if (v instanceof PublicKey) return v;\n if (typeof v === \"string\") return new PublicKey(v);\n if (v && typeof v === \"object\" && \"toBase58\" in v) return v as PublicKey;\n return PublicKey.default;\n}\n\nfunction toNumber(v: unknown): number {\n if (typeof v === \"number\") return v;\n if (typeof v === \"bigint\") return Number(v);\n if (v && typeof v === \"object\" && \"toNumber\" in v) return (v as { toNumber(): number }).toNumber();\n return 0;\n}\n\nfunction toBigInt(v: unknown): bigint {\n if (typeof v === \"bigint\") return v;\n if (typeof v === \"number\") return BigInt(v);\n if (v && typeof v === \"object\" && \"toString\" in v) return BigInt((v as { toString(): string }).toString());\n return 0n;\n}\n","import {\n Connection,\n PublicKey,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n ComputeBudgetProgram,\n type AddressLookupTableAccount,\n} from \"@solana/web3.js\";\nimport { REQUIRED_HEAP_BYTES } from \"../constants\";\n\nexport interface BuildTransactionOptions {\n /** Payer public key */\n payer: PublicKey;\n /** Instructions to include */\n instructions: TransactionInstruction[];\n /** Address lookup table accounts (optional, reduces tx size) */\n addressLookupTableAccounts?: AddressLookupTableAccount[];\n /** Compute unit price in microlamports (default: 100000) */\n computeUnitPrice?: number;\n /** Compute unit limit (default: 400000) */\n computeUnitLimit?: number;\n /** Include 256KB heap frame request (default: true) */\n includeHeapFrame?: boolean;\n}\n\n/**\n * Build an unsigned VersionedTransaction (v0) with compute budget and heap frame.\n *\n * Every CipherDLMM transaction needs:\n * 1. Compute budget (price + limit)\n * 2. 256KB heap frame request\n * 3. The actual instructions\n *\n * @returns Unsigned transaction ready for signing\n */\nexport async function buildTransaction(\n connection: Connection,\n options: BuildTransactionOptions\n): Promise<{\n transaction: VersionedTransaction;\n blockhash: string;\n lastValidBlockHeight: number;\n}> {\n const {\n payer,\n instructions,\n addressLookupTableAccounts = [],\n computeUnitPrice = 100_000,\n computeUnitLimit = 400_000,\n includeHeapFrame = true,\n } = options;\n\n if (instructions.length === 0) {\n throw new Error(\"No instructions provided\");\n }\n\n // Prepend compute budget + heap frame\n const allIxs: TransactionInstruction[] = [\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports: computeUnitPrice }),\n ComputeBudgetProgram.setComputeUnitLimit({ units: computeUnitLimit }),\n ];\n\n if (includeHeapFrame) {\n allIxs.push(\n ComputeBudgetProgram.requestHeapFrame({ bytes: REQUIRED_HEAP_BYTES })\n );\n }\n\n allIxs.push(...instructions);\n\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash(\"confirmed\");\n\n const message = new TransactionMessage({\n payerKey: payer,\n recentBlockhash: blockhash,\n instructions: allIxs,\n }).compileToV0Message(addressLookupTableAccounts);\n\n const transaction = new VersionedTransaction(message);\n\n return { transaction, blockhash, lastValidBlockHeight };\n}\n","/**\n * Add liquidity instruction builder.\n * Handles the 32-bin-per-transaction limit by splitting into chunks.\n */\n\nimport {\n Connection,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport BN from \"bn.js\";\nimport { DEFAULT_PROGRAM_ID, MAX_BINS_PER_TX } from \"../constants\";\nimport { createReadOnlyProgram } from \"../accounts/pool\";\nimport {\n deriveBinArrayPda,\n derivePositionPda,\n derivePositionBinPda,\n getBinArrayLowerIndex,\n canonicalBinIndexU64,\n} from \"../pda\";\nimport type { BinAllocation } from \"../math/distribution\";\n\n/**\n * Build add_liquidity_batch instructions.\n *\n * Automatically splits deposits exceeding 32 bins into multiple instruction sets.\n * Each instruction set is one transaction's worth of instructions.\n *\n * Remaining accounts layout per bin:\n * [bin_array_pda, position_bin_pda]\n *\n * @returns Array of instruction arrays (one per transaction)\n */\nexport async function buildAddLiquidityIxs(\n connection: Connection,\n poolAddress: PublicKey,\n user: PublicKey,\n positionNonce: bigint,\n deposits: BinAllocation[],\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<TransactionInstruction[][]> {\n if (deposits.length === 0) return [];\n\n const program = createReadOnlyProgram(connection, programId);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const poolAccount = await (program.account as any).pool.fetch(poolAddress);\n\n const [position] = derivePositionPda(poolAddress, user, positionNonce, programId);\n\n // Split into chunks of MAX_BINS_PER_TX\n const chunks: BinAllocation[][] = [];\n for (let i = 0; i < deposits.length; i += MAX_BINS_PER_TX) {\n chunks.push(deposits.slice(i, i + MAX_BINS_PER_TX));\n }\n\n const txInstructions: TransactionInstruction[][] = [];\n\n for (const chunk of chunks) {\n // Build BinLiquidityDeposit entries + remaining accounts\n const binDeposits: Array<{\n binIndex: unknown; // BN\n baseIn: unknown; // BN\n quoteIn: unknown; // BN\n minSharesOut: unknown; // BN\n }> = [];\n\n const remainingAccounts: Array<{\n pubkey: PublicKey;\n isSigner: boolean;\n isWritable: boolean;\n }> = [];\n\n for (const deposit of chunk) {\n // Canonical bin index encoding (i32 -> u64 sign extension)\n const canonicalBin = canonicalBinIndexU64(deposit.binIndex);\n\n binDeposits.push({\n binIndex: new BN(canonicalBin.toString()),\n baseIn: new BN(deposit.baseAtoms.toString()),\n quoteIn: new BN(deposit.quoteAtoms.toString()),\n minSharesOut: new BN(0), // No slippage protection by default\n });\n\n // Remaining accounts: bin_array PDA, position_bin PDA\n const lowerBinIndex = getBinArrayLowerIndex(deposit.binIndex);\n const [binArrayPda] = deriveBinArrayPda(poolAddress, lowerBinIndex, programId);\n const [positionBinPda] = derivePositionBinPda(position, deposit.binIndex, programId);\n\n remainingAccounts.push(\n { pubkey: binArrayPda, isSigner: false, isWritable: true },\n { pubkey: positionBinPda, isSigner: false, isWritable: true }\n );\n }\n\n const ix = await program.methods\n .addLiquidityBatch(binDeposits)\n .accountsStrict({\n pool: poolAddress,\n position,\n owner: user,\n baseVault: poolAccount.baseVault,\n quoteVault: poolAccount.quoteVault,\n userBaseAccount: await findAta(poolAccount.baseMint, user),\n userQuoteAccount: await findAta(poolAccount.quoteMint, user),\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .remainingAccounts(remainingAccounts)\n .instruction();\n\n txInstructions.push([ix]);\n }\n\n return txInstructions;\n}\n\nasync function findAta(mint: PublicKey, owner: PublicKey): Promise<PublicKey> {\n const { getAssociatedTokenAddress } = await import(\"@solana/spl-token\");\n return getAssociatedTokenAddress(mint, owner);\n}\n","/**\n * Remove liquidity instruction builder.\n */\n\nimport {\n Connection,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { TOKEN_PROGRAM_ID, getAssociatedTokenAddress } from \"@solana/spl-token\";\nimport BN from \"bn.js\";\nimport { DEFAULT_PROGRAM_ID } from \"../constants\";\nimport { createReadOnlyProgram } from \"../accounts/pool\";\nimport {\n deriveBinArrayPda,\n derivePositionBinPda,\n getBinArrayLowerIndex,\n canonicalBinIndexU64,\n} from \"../pda\";\n\n/**\n * Build remove_liquidity instruction.\n *\n * @param connection - Solana connection\n * @param poolAddress - Pool address\n * @param user - User public key\n * @param position - Position public key\n * @param withdrawals - Array of { binIndex, shares } to withdraw\n * @param programId - Program ID\n * @returns Withdrawal instruction\n */\nexport async function buildRemoveLiquidityIx(\n connection: Connection,\n poolAddress: PublicKey,\n user: PublicKey,\n position: PublicKey,\n withdrawals: Array<{ binIndex: number; shares: bigint }>,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<TransactionInstruction> {\n if (withdrawals.length === 0) {\n throw new Error(\"No withdrawals specified\");\n }\n\n const program = createReadOnlyProgram(connection, programId);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const poolAccount = await (program.account as any).pool.fetch(poolAddress);\n\n // Build withdrawal entries\n const withdrawalEntries = withdrawals.map((w) => ({\n binIndex: new BN(canonicalBinIndexU64(w.binIndex).toString()),\n shares: new BN(w.shares.toString()),\n }));\n\n // Build remaining accounts: [bin_array, position_bin] per withdrawal\n const remainingAccounts: Array<{\n pubkey: PublicKey;\n isSigner: boolean;\n isWritable: boolean;\n }> = [];\n\n for (const w of withdrawals) {\n const lowerBinIndex = getBinArrayLowerIndex(w.binIndex);\n const [binArrayPda] = deriveBinArrayPda(poolAddress, lowerBinIndex, programId);\n const [positionBinPda] = derivePositionBinPda(position, w.binIndex, programId);\n\n remainingAccounts.push(\n { pubkey: binArrayPda, isSigner: false, isWritable: true },\n { pubkey: positionBinPda, isSigner: false, isWritable: true }\n );\n }\n\n const userBaseAta = await getAssociatedTokenAddress(poolAccount.baseMint, user);\n const userQuoteAta = await getAssociatedTokenAddress(poolAccount.quoteMint, user);\n\n return program.methods\n .removeLiquidity(withdrawalEntries)\n .accountsStrict({\n pool: poolAddress,\n position,\n owner: user,\n baseVault: poolAccount.baseVault,\n quoteVault: poolAccount.quoteVault,\n userBaseAccount: userBaseAta,\n userQuoteAccount: userQuoteAta,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .remainingAccounts(remainingAccounts)\n .instruction();\n}\n","/**\n * Swap instruction builder for CipherDLMM.\n */\n\nimport {\n Connection,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport {\n getAssociatedTokenAddress,\n createAssociatedTokenAccountIdempotentInstruction,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport BN from \"bn.js\";\nimport { DEFAULT_PROGRAM_ID } from \"../constants\";\nimport { createReadOnlyProgram } from \"../accounts/pool\";\nimport { getUniqueBinArrayPdas, getBinArrayLowerIndex } from \"../pda\";\nimport type { SwapParams } from \"../types/instructions\";\n\n/**\n * Build swap instruction with bin array resolution.\n *\n * @param connection - Solana connection\n * @param poolAddress - Pool address\n * @param params - Swap parameters (user, amountIn, minAmountOut, swapForBase)\n * @param programId - Program ID\n * @returns Array of instructions (ATA creation if needed + swap)\n */\nexport async function buildSwapIxs(\n connection: Connection,\n poolAddress: PublicKey,\n params: SwapParams,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<TransactionInstruction[]> {\n const program = createReadOnlyProgram(connection, programId);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const poolAccount = await (program.account as any).pool.fetch(poolAddress);\n\n const { user, amountIn, minAmountOut, swapForBase } = params;\n\n // Determine input/output mints\n const inputMint = swapForBase ? poolAccount.quoteMint : poolAccount.baseMint;\n const outputMint = swapForBase ? poolAccount.baseMint : poolAccount.quoteMint;\n\n // Get ATAs\n const userInputAta = await getAssociatedTokenAddress(inputMint, user);\n const userOutputAta = await getAssociatedTokenAddress(outputMint, user);\n\n // Resolve BinArrays in the swap path\n // For a swap, we need BinArrays around the active bin\n const activeBin = Number(poolAccount.activeBin || poolAccount.activeBinId || 0);\n const swapRange = 10; // BinArrays to include (covers ~640 bins)\n const lowerBound = getBinArrayLowerIndex(activeBin - swapRange * 64);\n const upperBound = getBinArrayLowerIndex(activeBin + swapRange * 64);\n\n const binIndices: number[] = [];\n for (let i = lowerBound; i <= upperBound; i += 64) {\n binIndices.push(i);\n }\n\n const binArrayPdas = getUniqueBinArrayPdas(poolAddress, binIndices, programId);\n const remainingAccounts = binArrayPdas.map(({ pda }) => ({\n pubkey: pda,\n isSigner: false,\n isWritable: true,\n }));\n\n // Build swap instruction\n const swapIx = await program.methods\n .swap(new BN(amountIn.toString()), new BN(minAmountOut.toString()), swapForBase)\n .accountsStrict({\n pool: poolAddress,\n user,\n userBaseAccount: swapForBase ? userOutputAta : userInputAta,\n userQuoteAccount: swapForBase ? userInputAta : userOutputAta,\n baseVault: poolAccount.baseVault,\n quoteVault: poolAccount.quoteVault,\n creatorFeeVault: poolAccount.creatorFeeVault,\n holdersFeeVault: poolAccount.holdersFeeVault,\n nftFeeVault: poolAccount.nftFeeVault,\n protocolFeeVault: poolAccount.protocolFeeVault,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .remainingAccounts(remainingAccounts)\n .instruction();\n\n // Ensure output ATA exists\n const ensureAtaIx = createAssociatedTokenAccountIdempotentInstruction(\n user, userOutputAta, user, outputMint,\n TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n return [ensureAtaIx, swapIx];\n}\n","/**\n * Position lifecycle instructions (init + close).\n */\n\nimport {\n Connection,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport { DEFAULT_PROGRAM_ID } from \"../constants\";\nimport { createReadOnlyProgram } from \"../accounts/pool\";\nimport { derivePositionPda } from \"../pda\";\n\n/**\n * Build init_position instruction.\n * Creates a new Position PDA for the user on a pool.\n */\nexport async function buildInitPositionIx(\n connection: Connection,\n poolAddress: PublicKey,\n user: PublicKey,\n nonce: bigint,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<TransactionInstruction> {\n const program = createReadOnlyProgram(connection, programId);\n const [position] = derivePositionPda(poolAddress, user, nonce, programId);\n\n return program.methods\n .initPosition(new BN(nonce.toString()))\n .accountsStrict({\n pool: poolAddress,\n position,\n owner: user,\n payer: user,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n}\n\n/**\n * Build close_position instruction.\n * Position must have zero liquidity (all bins withdrawn).\n */\nexport async function buildClosePositionIx(\n connection: Connection,\n poolAddress: PublicKey,\n user: PublicKey,\n position: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<TransactionInstruction> {\n const program = createReadOnlyProgram(connection, programId);\n\n return program.methods\n .closePosition()\n .accountsStrict({\n pool: poolAddress,\n position,\n owner: user,\n rentReceiver: user,\n })\n .instruction();\n}\n","/**\n * Instruction builders for reward claiming and staking sync.\n */\n\nimport {\n Connection,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport {\n getAssociatedTokenAddress,\n createAssociatedTokenAccountIdempotentInstruction,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport { DEFAULT_PROGRAM_ID } from \"../constants\";\nimport { createReadOnlyProgram } from \"../accounts/pool\";\n\nconst STREAMFLOW_PROGRAM_ID = new PublicKey(\"STAKEvGqQTtzJZH6BWDcbpzXXn2BBerPAgQ3EGLN2GH\");\nconst DEFAULT_CIPHER_POOL = new PublicKey(\"Fh7u35PsxFWBWNE5Pme2yffixJ5H7YocAymJHs6L73N\");\n\n// ── PDA helpers (reward-specific seeds differ from pool PDAs) ──\n\nfunction deriveHolderGlobal(programId: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync([Buffer.from(\"holder_global\")], programId)[0];\n}\n\nfunction deriveNftGlobal(programId: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync([Buffer.from(\"nft_global\")], programId)[0];\n}\n\nfunction deriveUserHolder(user: PublicKey, programId: PublicKey): PublicKey {\n return PublicKey.findProgramAddressSync([Buffer.from(\"holder_user\"), user.toBuffer()], programId)[0];\n}\n\nfunction deriveStreamflowStakeEntry(\n stakePool: PublicKey,\n user: PublicKey,\n nonce: number\n): PublicKey {\n const nonceBuf = Buffer.alloc(4);\n nonceBuf.writeUInt32LE(nonce, 0);\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"stake-entry\"), stakePool.toBuffer(), user.toBuffer(), nonceBuf],\n STREAMFLOW_PROGRAM_ID\n )[0];\n}\n\n/**\n * Build sync_holder_stake instruction.\n * Records a staking checkpoint for time-weighted reward calculation.\n * Must be called after stake/unstake in Streamflow.\n */\nexport function buildSyncHolderStakeIx(\n user: PublicKey,\n stakeEntryNonce: number,\n stakePoolAddress: PublicKey = DEFAULT_CIPHER_POOL,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): TransactionInstruction {\n const holderGlobalState = deriveHolderGlobal(programId);\n const userHolderState = deriveUserHolder(user, programId);\n const streamflowStakeEntry = deriveStreamflowStakeEntry(stakePoolAddress, user, stakeEntryNonce);\n\n const SYNC_DISCRIMINATOR = Buffer.from([151, 230, 186, 138, 237, 187, 231, 155]);\n const nonceBuf = Buffer.alloc(4);\n nonceBuf.writeUInt32LE(stakeEntryNonce, 0);\n const data = Buffer.concat([SYNC_DISCRIMINATOR, stakePoolAddress.toBuffer(), nonceBuf]);\n\n return new TransactionInstruction({\n programId,\n keys: [\n { pubkey: holderGlobalState, isSigner: false, isWritable: false },\n { pubkey: userHolderState, isSigner: false, isWritable: true },\n { pubkey: user, isSigner: true, isWritable: false },\n { pubkey: streamflowStakeEntry, isSigner: false, isWritable: false },\n { pubkey: STREAMFLOW_PROGRAM_ID, isSigner: false, isWritable: false },\n ],\n data,\n });\n}\n\n/**\n * Build claim_holder_rewards instructions.\n * Returns [ensureATA, syncRewardIndexes, claimHolderRewards].\n */\nexport async function buildClaimHolderRewardsIxs(\n connection: Connection,\n user: PublicKey,\n poolAddress: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<TransactionInstruction[]> {\n const program = createReadOnlyProgram(connection, programId);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const poolAccount = await (program.account as any).pool.fetch(poolAddress);\n\n const holderGlobalState = deriveHolderGlobal(programId);\n const nftGlobalState = deriveNftGlobal(programId);\n const userHolderState = deriveUserHolder(user, programId);\n\n // Derive pool authority PDA\n const binStepBuffer = Buffer.alloc(2);\n binStepBuffer.writeUInt16LE(Number(poolAccount.binStepBps));\n const baseFeeBuffer = Buffer.alloc(2);\n baseFeeBuffer.writeUInt16LE(Number(poolAccount.baseFeeBps));\n const [poolAuthority] = PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"pool\"),\n poolAccount.baseMint.toBuffer(),\n poolAccount.quoteMint.toBuffer(),\n binStepBuffer,\n baseFeeBuffer,\n ],\n programId\n );\n\n const userRewardDestination = await getAssociatedTokenAddress(poolAccount.quoteMint, user);\n\n // Sync reward indexes\n const syncIx = await program.methods\n .syncRewardIndexes()\n .accountsStrict({ pool: poolAddress, holderGlobalState, nftGlobalState })\n .instruction();\n\n // Claim holder rewards\n const claimIx = await program.methods\n .claimHolderRewards()\n .accountsStrict({\n pool: poolAddress,\n holderGlobalState,\n user,\n userRewardDestination,\n holdersFeeVault: poolAccount.holdersFeeVault,\n userHolderState,\n poolAuthority,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .instruction();\n\n // Ensure user has ATA for reward token\n const ensureAtaIx = createAssociatedTokenAccountIdempotentInstruction(\n user, userRewardDestination, user, poolAccount.quoteMint,\n TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n return [ensureAtaIx, syncIx, claimIx];\n}\n\n/**\n * Build init_user_holder_state instruction.\n * Required before first claim.\n */\nexport async function buildInitHolderStateIx(\n connection: Connection,\n user: PublicKey,\n programId: PublicKey = DEFAULT_PROGRAM_ID\n): Promise<TransactionInstruction> {\n const program = createReadOnlyProgram(connection, programId);\n const holderGlobalState = deriveHolderGlobal(programId);\n const userHolderState = deriveUserHolder(user, programId);\n\n return program.methods\n .initUserHolderState()\n .accountsStrict({\n payer: user,\n user,\n holderGlobalState,\n userHolderState,\n systemProgram: SystemProgram.programId,\n })\n .instruction();\n}\n","/**\n * Liquidity distribution strategies for CipherDLMM.\n * Determines how liquidity is spread across bins.\n */\n\n/** Distribution strategy types */\nexport type DistributionStrategy =\n | \"uniform\"\n | \"concentrated\"\n | \"skew_bid\"\n | \"skew_ask\"\n | \"bid-ask\"\n | \"curve\"\n | \"custom\";\n\n/** Per-bin allocation result (in atoms) */\nexport type BinAllocation = {\n binIndex: number;\n baseAtoms: bigint;\n quoteAtoms: bigint;\n};\n\n/** Distribution validation result */\nexport type ValidationResult = {\n valid: boolean;\n errors: string[];\n warnings: string[];\n deposits: BinAllocation[];\n};\n\n// ── Helpers ──\n\nfunction clamp01(x: number): number {\n if (!Number.isFinite(x)) return 0;\n return Math.max(0, Math.min(1, x));\n}\n\nfunction sum(arr: number[]): number {\n let s = 0;\n for (const v of arr) s += v;\n return s;\n}\n\nfunction normalizeWeights(weights: number[]): number[] {\n const s = sum(weights);\n if (!Number.isFinite(s) || s <= 0) return weights.map(() => 0);\n return weights.map((x) => x / s);\n}\n\nfunction weightsGaussian(numBins: number, sigma: number, shift = 0): number[] {\n if (numBins <= 1) return [1];\n const mid = (numBins - 1) / 2 + shift;\n const s = Math.max(0.85, sigma);\n const weights = Array.from({ length: numBins }, (_, i) => {\n const x = (i - mid) / s;\n return Math.exp(-0.5 * x * x);\n });\n return normalizeWeights(weights);\n}\n\n// ── Weight Functions ──\n\n/** Equal weight across all bins */\nexport function weightsUniform(numBins: number): number[] {\n if (numBins <= 0) return [];\n return normalizeWeights(Array.from({ length: numBins }, () => 1));\n}\n\n/** Symmetric bell curve */\nexport function weightsBalanced(numBins: number): number[] {\n return weightsGaussian(numBins, Math.max(1, numBins / 6), 0);\n}\n\n/** Tight bell curve (decay controls falloff: 0 = flat, 1 = tight) */\nexport function weightsConcentrated(numBins: number, decay: number): number[] {\n if (numBins <= 1) return [1];\n const center = Math.floor(numBins / 2);\n const weights = Array.from({ length: numBins }, (_, i) => {\n const distance = Math.abs(i - center);\n return Math.pow(1 - clamp01(decay), distance);\n });\n return normalizeWeights(weights);\n}\n\n/** More weight on bid (lower price) side */\nexport function weightsSkewBid(numBins: number, decay: number): number[] {\n if (numBins <= 1) return [1];\n const shift = -Math.max(0.6, numBins * 0.06);\n const base = weightsGaussian(numBins, Math.max(1, numBins / 5.4), shift);\n const p = 1.5 + clamp01(decay) * 1.5;\n const weights = base.map((x, i) => {\n const t = numBins <= 1 ? 1 : (numBins - 1 - i) / (numBins - 1);\n return x * Math.pow(0.35 + 0.65 * t, p);\n });\n return normalizeWeights(weights);\n}\n\n/** More weight on ask (higher price) side */\nexport function weightsSkewAsk(numBins: number, decay: number): number[] {\n if (numBins <= 1) return [1];\n const shift = Math.max(0.6, numBins * 0.06);\n const base = weightsGaussian(numBins, Math.max(1, numBins / 5.4), shift);\n const p = 1.5 + clamp01(decay) * 1.5;\n const weights = base.map((x, i) => {\n const t = numBins <= 1 ? 1 : i / (numBins - 1);\n return x * Math.pow(0.35 + 0.65 * t, p);\n });\n return normalizeWeights(weights);\n}\n\n/** U-shaped: high edges, low center (100x ratio) */\nexport function weightsBidAsk(numBins: number): number[] {\n if (numBins <= 2) return normalizeWeights(Array.from({ length: numBins }, () => 1));\n const mid = (numBins - 1) / 2;\n const denom = Math.max(1, mid);\n const weights = Array.from({ length: numBins }, (_, i) => {\n const d = Math.abs(i - mid) / denom;\n return Math.pow(0.10 + 0.90 * d, 2.15);\n });\n return normalizeWeights(weights);\n}\n\n/** Wide bell curve */\nexport function weightsCurve(numBins: number): number[] {\n return weightsGaussian(numBins, Math.max(1.2, numBins / 4.6), 0);\n}\n\n/**\n * Calculate distribution weights for a given strategy.\n *\n * @param strategy - Distribution strategy name\n * @param numBins - Total number of bins\n * @param decay - Decay factor (0..1) for concentrated/skew strategies\n * @returns Normalized weights (sum = 1)\n */\nexport function calculateDistributionWeights(\n strategy: DistributionStrategy | string,\n numBins: number,\n decay: number\n): number[] {\n switch (strategy) {\n case \"uniform\": return weightsUniform(numBins);\n case \"concentrated\": return weightsConcentrated(numBins, decay);\n case \"skew_bid\": return weightsSkewBid(numBins, decay);\n case \"skew_ask\": return weightsSkewAsk(numBins, decay);\n case \"bid-ask\": return weightsBidAsk(numBins);\n case \"curve\": return weightsCurve(numBins);\n case \"custom\": return weightsConcentrated(numBins, decay);\n default: return weightsUniform(numBins);\n }\n}\n\n// ── Allocation ──\n\n/**\n * Allocate token amounts to bins based on distribution weights.\n *\n * - Bins < activeBin get QUOTE only\n * - Bins > activeBin get BASE only\n * - Active bin is excluded\n * - Remainder atoms distributed to first N bins (no loss)\n */\nexport function allocateToBins(\n binIndices: number[],\n weights: number[],\n baseAtoms: bigint,\n quoteAtoms: bigint,\n activeBin: number\n): BinAllocation[] {\n if (binIndices.length !== weights.length) {\n throw new Error(`Bins/weights length mismatch: ${binIndices.length} vs ${weights.length}`);\n }\n if (binIndices.length === 0) return [];\n\n const leftBins: Array<{ index: number; weight: number }> = [];\n const rightBins: Array<{ index: number; weight: number }> = [];\n\n binIndices.forEach((binIndex, i) => {\n const weight = weights[i] || 0;\n if (binIndex < activeBin) leftBins.push({ index: binIndex, weight });\n else if (binIndex > activeBin) rightBins.push({ index: binIndex, weight });\n });\n\n const leftWeights = normalizeWeights(leftBins.map((b) => b.weight));\n const rightWeights = normalizeWeights(rightBins.map((b) => b.weight));\n const allocations: BinAllocation[] = [];\n\n // Quote to left side\n if (leftBins.length > 0 && quoteAtoms > 0n) {\n const quoteAllocs: BinAllocation[] = leftBins.map((bin, i) => ({\n binIndex: bin.index,\n baseAtoms: 0n,\n quoteAtoms: BigInt(Math.floor(Number(quoteAtoms) * leftWeights[i])),\n }));\n let remainder = quoteAtoms - quoteAllocs.reduce((s, a) => s + a.quoteAtoms, 0n);\n for (let j = 0; remainder > 0n && j < quoteAllocs.length; j++) {\n quoteAllocs[j].quoteAtoms += 1n;\n remainder -= 1n;\n }\n allocations.push(...quoteAllocs);\n }\n\n // Base to right side\n if (rightBins.length > 0 && baseAtoms > 0n) {\n const baseAllocs: BinAllocation[] = rightBins.map((bin, i) => ({\n binIndex: bin.index,\n baseAtoms: BigInt(Math.floor(Number(baseAtoms) * rightWeights[i])),\n quoteAtoms: 0n,\n }));\n let remainder = baseAtoms - baseAllocs.reduce((s, a) => s + a.baseAtoms, 0n);\n for (let j = 0; remainder > 0n && j < baseAllocs.length; j++) {\n baseAllocs[j].baseAtoms += 1n;\n remainder -= 1n;\n }\n allocations.push(...baseAllocs);\n }\n\n allocations.sort((a, b) => a.binIndex - b.binIndex);\n return allocations;\n}\n\n// ── Validation ──\n\n/**\n * Validate distribution: filter zero-atom bins, check sums, detect duplicates.\n */\nexport function validateDistribution(\n allocations: BinAllocation[],\n expectedBase: bigint,\n expectedQuote: bigint\n): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const invalidBins = allocations.filter((a) => a.baseAtoms > 0n && a.quoteAtoms > 0n);\n if (invalidBins.length > 0) {\n errors.push(`${invalidBins.length} bins have both base and quote`);\n }\n\n const deposits = allocations.filter((a) => a.baseAtoms > 0n || a.quoteAtoms > 0n);\n const zeroCount = allocations.length - deposits.length;\n if (zeroCount > 0) {\n warnings.push(`Filtered ${zeroCount} zero-atom bins (rounding). Use larger amounts or fewer bins.`);\n }\n\n if (deposits.length === 0) {\n errors.push(\"All bins rounded to zero atoms. Amount too small for bin count.\");\n }\n\n const totalBase = deposits.reduce((s, d) => s + d.baseAtoms, 0n);\n const totalQuote = deposits.reduce((s, d) => s + d.quoteAtoms, 0n);\n const maxTolerance = BigInt(allocations.length * 10);\n\n const baseDiff = totalBase > expectedBase ? totalBase - expectedBase : expectedBase - totalBase;\n const quoteDiff = totalQuote > expectedQuote ? totalQuote - expectedQuote : expectedQuote - totalQuote;\n\n if (baseDiff > maxTolerance) {\n errors.push(`Base sum mismatch: expected ${expectedBase}, got ${totalBase}`);\n }\n if (quoteDiff > maxTolerance) {\n errors.push(`Quote sum mismatch: expected ${expectedQuote}, got ${totalQuote}`);\n }\n\n const uniqueBins = new Set(deposits.map((d) => d.binIndex));\n if (uniqueBins.size !== deposits.length) {\n errors.push(\"Duplicate bin indices detected\");\n }\n\n return { valid: errors.length === 0, errors, warnings, deposits };\n}\n","/**\n * Price conversion utilities for CipherDLMM.\n *\n * Q64.64 fixed-point format: price = (quoteAtoms << 64) / baseAtoms\n */\n\n/** Q64.64 fixed-point price (bigint) */\nexport type PriceQ64_64 = bigint;\n\n/**\n * Convert decimal price to Q64.64 fixed-point format.\n *\n * @param price - Decimal price (e.g., 6.35 for \"6.35 USDC per CIPHER\")\n * @param baseDecimals - Base token decimals (e.g., 9 for CIPHER)\n * @param quoteDecimals - Quote token decimals (e.g., 6 for USDC)\n *\n * @example\n * calculatePriceQ64_64(6.35, 9, 6) // => 117187505469792690n\n */\nexport function calculatePriceQ64_64(\n price: number,\n baseDecimals: number,\n quoteDecimals: number\n): PriceQ64_64 {\n if (!Number.isFinite(price) || price <= 0) {\n throw new Error(`Price must be positive, got ${price}`);\n }\n if (baseDecimals < 0 || baseDecimals > 18) {\n throw new Error(`baseDecimals must be 0-18, got ${baseDecimals}`);\n }\n if (quoteDecimals < 0 || quoteDecimals > 18) {\n throw new Error(`quoteDecimals must be 0-18, got ${quoteDecimals}`);\n }\n\n const quoteAtoms = BigInt(Math.floor(price * 10 ** quoteDecimals));\n const baseAtoms = BigInt(10 ** baseDecimals);\n return (quoteAtoms << 64n) / baseAtoms;\n}\n\n/**\n * Convert Q64.64 fixed-point price back to decimal.\n *\n * @example\n * q64_64ToDecimal(117187505469792690n, 9, 6) // => ~6.35\n */\nexport function q64_64ToDecimal(\n priceQ64_64: PriceQ64_64,\n baseDecimals: number,\n quoteDecimals: number\n): number {\n const baseAtoms = BigInt(10 ** baseDecimals);\n const quoteAtomsPerUnit = BigInt(10 ** quoteDecimals);\n const shiftedQuote = priceQ64_64 * baseAtoms;\n const quoteAtoms = shiftedQuote >> 64n;\n return Number(quoteAtoms) / Number(quoteAtomsPerUnit);\n}\n\n/**\n * Calculate relative price between two tokens using USD prices.\n *\n * @returns quote tokens per 1 base token\n *\n * @example\n * calculateRelativePrice(6.35, 100) // => 0.0635 (CIPHER/SOL)\n */\nexport function calculateRelativePrice(\n basePriceUsd: number,\n quotePriceUsd: number\n): number {\n if (!Number.isFinite(basePriceUsd) || basePriceUsd <= 0) {\n throw new Error(`basePriceUsd must be positive, got ${basePriceUsd}`);\n }\n if (!Number.isFinite(quotePriceUsd) || quotePriceUsd <= 0) {\n throw new Error(`quotePriceUsd must be positive, got ${quotePriceUsd}`);\n }\n return basePriceUsd / quotePriceUsd;\n}\n\n/**\n * Calculate price from bin ID and bin step.\n *\n * @param binId - Signed bin index\n * @param binStepBps - Bin step in basis points\n * @returns Price multiplier relative to bin 0\n *\n * @example\n * binIdToPrice(100, 10) // => ~1.01005 (100 bins at 0.1% each)\n */\nexport function binIdToPrice(binId: number, binStepBps: number): number {\n const stepFactor = 1 + binStepBps / 10_000;\n return Math.pow(stepFactor, binId);\n}\n\n/**\n * Calculate bin ID from price and bin step.\n *\n * @param price - Price relative to bin 0\n * @param binStepBps - Bin step in basis points\n * @returns Nearest bin ID (signed integer)\n */\nexport function priceToBinId(price: number, binStepBps: number): number {\n if (price <= 0) throw new Error(\"Price must be positive\");\n const stepFactor = 1 + binStepBps / 10_000;\n return Math.round(Math.log(price) / Math.log(stepFactor));\n}\n\n/**\n * Estimate price range from bin configuration.\n *\n * @param initialPrice - Starting price (decimal)\n * @param binStepBps - Bin step in basis points\n * @param numBins - Total number of bins in range\n */\nexport function estimatePriceRange(\n initialPrice: number,\n binStepBps: number,\n numBins: number\n): { minPrice: number; maxPrice: number } {\n if (initialPrice <= 0 || binStepBps <= 0 || numBins <= 0) {\n throw new Error(\"All parameters must be positive\");\n }\n const multiplier = 1 + binStepBps / 10_000;\n const halfBins = Math.floor(numBins / 2);\n return {\n minPrice: initialPrice * Math.pow(multiplier, -halfBins),\n maxPrice: initialPrice * Math.pow(multiplier, halfBins),\n };\n}\n","/**\n * CipherDlmm — Main SDK class for interacting with CipherDLMM pools.\n *\n * Mirrors the @meteora-ag/dlmm DLMM class API for familiarity.\n * All write methods return unsigned VersionedTransactions.\n */\n\nimport { Connection, PublicKey, VersionedTransaction } from \"@solana/web3.js\";\nimport { DEFAULT_PROGRAM_ID } from \"./constants\";\nimport { fetchPool } from \"./accounts/pool\";\nimport { fetchBinArraysForRange, fetchAllBinArrays } from \"./accounts/bin-array\";\nimport { fetchPositions, fetchAllUserPositions } from \"./accounts/position\";\nimport { buildTransaction } from \"./transactions/builder\";\nimport { buildAddLiquidityIxs } from \"./instructions/add-liquidity\";\nimport { buildRemoveLiquidityIx } from \"./instructions/remove-liquidity\";\nimport { buildSwapIxs } from \"./instructions/swap\";\nimport { buildInitPositionIx, buildClosePositionIx } from \"./instructions/position\";\nimport { buildClaimHolderRewardsIxs, buildInitHolderStateIx } from \"./instructions/rewards\";\nimport { calculateDistributionWeights, allocateToBins } from \"./math/distribution\";\nimport { q64_64ToDecimal } from \"./math/price\";\nimport type { PoolState, BinArrayState } from \"./types/pool\";\nimport type { UserPosition, ActiveBin } from \"./types/position\";\nimport type {\n AddLiquidityByStrategyParams,\n RemoveLiquidityParams,\n SwapParams,\n CipherDlmmConfig,\n} from \"./types\";\n\nexport class CipherDlmm {\n readonly connection: Connection;\n readonly poolAddress: PublicKey;\n readonly programId: PublicKey;\n private _pool: PoolState | null = null;\n\n private constructor(\n connection: Connection,\n poolAddress: PublicKey,\n programId: PublicKey,\n pool: PoolState\n ) {\n this.connection = connection;\n this.poolAddress = poolAddress;\n this.programId = programId;\n this._pool = pool;\n }\n\n /** Pool state (cached — call refetch() to update) */\n get pool(): PoolState {\n if (!this._pool) throw new Error(\"Pool not loaded. Call refetch().\");\n return this._pool;\n }\n\n // ── Factory ──\n\n /** Create a CipherDlmm instance for a pool */\n static async create(\n connection: Connection,\n poolAddress: PublicKey,\n config?: CipherDlmmConfig\n ): Promise<CipherDlmm> {\n const programId = config?.programId ?? DEFAULT_PROGRAM_ID;\n const pool = await fetchPool(connection, poolAddress, programId);\n return new CipherDlmm(connection, poolAddress, programId, pool);\n }\n\n /** Refresh pool state from chain */\n async refetch(): Promise<void> {\n this._pool = await fetchPool(this.connection, this.poolAddress, this.programId);\n }\n\n // ── Read-only ──\n\n /** Get the active bin ID and price */\n getActiveBin(): ActiveBin {\n const pool = this.pool;\n const price = q64_64ToDecimal(pool.activeBinPrice, pool.baseDecimals, pool.quoteDecimals);\n return {\n binId: pool.activeBinId,\n price,\n priceQ64_64: pool.activeBinPrice,\n };\n }\n\n /** Fetch BinArrays for a bin range */\n async getBinArrays(minBinId?: number, maxBinId?: number): Promise<BinArrayState[]> {\n if (minBinId !== undefined && maxBinId !== undefined) {\n return fetchBinArraysForRange(this.connection, this.poolAddress, minBinId, maxBinId, this.programId);\n }\n return fetchAllBinArrays(this.connection, this.poolAddress, this.programId);\n }\n\n /** Fetch all positions for a user on this pool */\n async getPositionsByUser(user: PublicKey): Promise<UserPosition[]> {\n return fetchPositions(this.connection, user, this.poolAddress, this.programId);\n }\n\n /** Fetch all positions for a user across ALL pools */\n static async getAllPositionsByUser(\n connection: Connection,\n user: PublicKey,\n config?: CipherDlmmConfig\n ): Promise<UserPosition[]> {\n return fetchAllUserPositions(connection, user, config?.programId ?? DEFAULT_PROGRAM_ID);\n }\n\n // ── Write (returns unsigned VersionedTransaction[]) ──\n\n /**\n * Add liquidity using a distribution strategy.\n * Automatically splits into multiple transactions if >32 bins.\n */\n async addLiquidityByStrategy(\n params: AddLiquidityByStrategyParams\n ): Promise<VersionedTransaction[]> {\n const pool = this.pool;\n\n // Calculate bin range\n const binIndices: number[] = [];\n for (let i = params.minBinId; i <= params.maxBinId; i++) {\n if (i !== pool.activeBinId) binIndices.push(i); // Active bin excluded\n }\n\n // Calculate weights\n const weights = calculateDistributionWeights(\n params.strategy,\n binIndices.length,\n params.decay ?? 0.3\n );\n\n // Allocate to bins\n const allocations = allocateToBins(\n binIndices,\n weights,\n params.totalBaseAmount,\n params.totalQuoteAmount,\n pool.activeBinId\n );\n\n // Filter zero-amount bins\n const nonZero = allocations.filter((a) => a.baseAtoms > 0n || a.quoteAtoms > 0n);\n if (nonZero.length === 0) throw new Error(\"All bins rounded to zero. Use larger amounts.\");\n\n // Build instruction chunks\n const ixChunks = await buildAddLiquidityIxs(\n this.connection,\n this.poolAddress,\n params.user,\n params.positionNonce,\n nonZero,\n this.programId\n );\n\n // Build transactions\n const txs: VersionedTransaction[] = [];\n for (const ixs of ixChunks) {\n const { transaction } = await buildTransaction(this.connection, {\n payer: params.user,\n instructions: ixs,\n });\n txs.push(transaction);\n }\n\n return txs;\n }\n\n /** Remove liquidity from a position */\n async removeLiquidity(params: RemoveLiquidityParams): Promise<VersionedTransaction> {\n // If no specific bins, fetch all position bins\n let withdrawals: Array<{ binIndex: number; shares: bigint }>;\n\n if (params.binIndices && params.binIndices.length > 0) {\n // Specific bins requested — fetch position to get shares\n const positions = await this.getPositionsByUser(params.user);\n const pos = positions.find((p) => p.position.address.equals(params.position));\n if (!pos) throw new Error(\"Position not found\");\n\n withdrawals = params.binIndices.map((binIndex) => {\n const bin = pos.bins.find((b) => b.binIndex === binIndex);\n if (!bin) throw new Error(`Bin ${binIndex} not found in position`);\n const shares = params.bpsPct ? (bin.shares * BigInt(params.bpsPct)) / 10000n : bin.shares;\n return { binIndex, shares };\n });\n } else {\n // Withdraw from all bins\n const positions = await this.getPositionsByUser(params.user);\n const pos = positions.find((p) => p.position.address.equals(params.position));\n if (!pos) throw new Error(\"Position not found\");\n\n withdrawals = pos.bins\n .filter((b) => b.shares > 0n)\n .map((b) => ({\n binIndex: b.binIndex,\n shares: params.bpsPct ? (b.shares * BigInt(params.bpsPct)) / 10000n : b.shares,\n }));\n }\n\n if (withdrawals.length === 0) throw new Error(\"No bins to withdraw from\");\n\n const ix = await buildRemoveLiquidityIx(\n this.connection,\n this.poolAddress,\n params.user,\n params.position,\n withdrawals,\n this.programId\n );\n\n const { transaction } = await buildTransaction(this.connection, {\n payer: params.user,\n instructions: [ix],\n });\n\n return transaction;\n }\n\n /** Execute a swap */\n async swap(params: SwapParams): Promise<VersionedTransaction> {\n const ixs = await buildSwapIxs(\n this.connection,\n this.poolAddress,\n params,\n this.programId\n );\n\n const { transaction } = await buildTransaction(this.connection, {\n payer: params.user,\n instructions: ixs,\n });\n\n return transaction;\n }\n\n /** Initialize a new position */\n async initializePosition(user: PublicKey, nonce: bigint): Promise<VersionedTransaction> {\n const ix = await buildInitPositionIx(\n this.connection,\n this.poolAddress,\n user,\n nonce,\n this.programId\n );\n\n const { transaction } = await buildTransaction(this.connection, {\n payer: user,\n instructions: [ix],\n });\n\n return transaction;\n }\n\n /** Close an empty position */\n async closePosition(user: PublicKey, position: PublicKey): Promise<VersionedTransaction> {\n const ix = await buildClosePositionIx(\n this.connection,\n this.poolAddress,\n user,\n position,\n this.programId\n );\n\n const { transaction } = await buildTransaction(this.connection, {\n payer: user,\n instructions: [ix],\n });\n\n return transaction;\n }\n\n /** Claim holder rewards (USDC) */\n async claimHolderRewards(user: PublicKey): Promise<VersionedTransaction> {\n const ixs = await buildClaimHolderRewardsIxs(\n this.connection,\n user,\n this.poolAddress,\n this.programId\n );\n\n const { transaction } = await buildTransaction(this.connection, {\n payer: user,\n instructions: ixs,\n });\n\n return transaction;\n }\n\n /** Initialize holder state (required before first claim) */\n async initHolderState(user: PublicKey): Promise<VersionedTransaction> {\n const ix = await buildInitHolderStateIx(\n this.connection,\n user,\n this.programId\n );\n\n const { transaction } = await buildTransaction(this.connection, {\n payer: user,\n instructions: [ix],\n });\n\n return transaction;\n }\n}\n","/** CipherDLMM on-chain error codes mapped from the Anchor IDL */\nexport const CIPHER_DLMM_ERRORS: Record<number, { name: string; msg: string }> = {\n 6000: { name: \"InvalidLiquidity\", msg: \"The provided liquidity value is invalid.\" },\n 6001: { name: \"CalculationError\", msg: \"Calculation error occurred during arithmetic operations.\" },\n 6002: { name: \"InvalidInput\", msg: \"The provided input data is invalid.\" },\n 6003: { name: \"MissingBins\", msg: \"Missing liquidity bin accounts for withdrawal.\" },\n 6004: { name: \"InternalInconsistency\", msg: \"Operation aborted due to an internal inconsistency.\" },\n 6005: { name: \"UnknownError\", msg: \"An unknown error has occurred.\" },\n 6006: { name: \"SlippageExceeded\", msg: \"Swap did not meet minimum output (slippage protection).\" },\n 6007: { name: \"InsufficientLiquidity\", msg: \"Pool does not have sufficient liquidity.\" },\n 6008: { name: \"UnauthorizedOperation\", msg: \"Unauthorized operation attempted.\" },\n 6009: { name: \"InvalidAuthority\", msg: \"Invalid or missing protocol authority.\" },\n 6010: { name: \"InvalidAccountState\", msg: \"The account state is invalid.\" },\n 6011: { name: \"MintMismatch\", msg: \"Token account mint does not match expected mint.\" },\n 6012: { name: \"OwnerMismatch\", msg: \"Token account owner does not match expected authority.\" },\n 6013: { name: \"TokenTransferFailed\", msg: \"Token transfer failed.\" },\n 6014: { name: \"PoolPaused\", msg: \"Pool is currently paused.\" },\n 6015: { name: \"PoolAlreadyExists\", msg: \"Pool already exists for this configuration.\" },\n 6016: { name: \"PoolNotFound\", msg: \"Pool not found.\" },\n 6017: { name: \"RegistryViolation\", msg: \"Pair registry constraint violated.\" },\n 6018: { name: \"BinAlreadyExists\", msg: \"Liquidity bin already exists for this index.\" },\n 6019: { name: \"BinNotFound\", msg: \"Liquidity bin not found.\" },\n 6020: { name: \"InvalidBinBounds\", msg: \"Invalid liquidity bin bounds.\" },\n 6021: { name: \"LPTokenMismatch\", msg: \"LP token does not match this pool.\" },\n 6022: { name: \"NotEnoughShares\", msg: \"Not enough LP shares.\" },\n 6023: { name: \"LPVaultMismatch\", msg: \"LP vault does not match expected authority.\" },\n 6024: { name: \"ReentrancyDetected\", msg: \"Reentrancy detected: operation aborted.\" },\n 6025: { name: \"InvalidVaultOwner\", msg: \"Vault is not owned by the SPL Token program.\" },\n 6026: { name: \"InvalidVaultAuthority\", msg: \"Vault has an unexpected authority.\" },\n 6027: { name: \"InvalidVaultMint\", msg: \"Vault has an unexpected mint.\" },\n 6028: { name: \"InvalidVaultData\", msg: \"Account data too short for valid SPL Token account.\" },\n 6029: { name: \"ActiveLock\", msg: \"Liquidity is locked until the lock period expires.\" },\n 6030: { name: \"InsufficientLP\", msg: \"Insufficient LP tokens.\" },\n 6031: { name: \"VaultsAlreadyInitialized\", msg: \"Pool vaults already initialized.\" },\n 6032: { name: \"WrongMode\", msg: \"Wrong accounting mode for this instruction.\" },\n 6033: { name: \"InvalidTokenProgram\", msg: \"Invalid token program.\" },\n 6034: { name: \"InvalidProgramOwner\", msg: \"Invalid program-owned account.\" },\n 6035: { name: \"InvalidPda\", msg: \"Invalid PDA for the provided account.\" },\n 6036: { name: \"InvalidRemainingAccountsLayout\", msg: \"Invalid remaining accounts layout.\" },\n 6037: { name: \"DuplicateBinIndex\", msg: \"Duplicate bin index provided.\" },\n 6038: { name: \"ActiveBinDepositForbidden\", msg: \"Deposits into the active bin are forbidden.\" },\n 6039: { name: \"ActiveBinWithdrawalForbidden\", msg: \"Withdrawals from the active bin are forbidden.\" },\n 6040: { name: \"MissingPositionBin\", msg: \"Missing position bin account.\" },\n 6041: { name: \"PositionPoolMismatch\", msg: \"Position pool mismatch.\" },\n 6042: { name: \"PositionOwnerMismatch\", msg: \"Position owner mismatch.\" },\n 6043: { name: \"BinPoolMismatch\", msg: \"Bin pool mismatch.\" },\n 6044: { name: \"PositionBinPositionMismatch\", msg: \"PositionBin position mismatch.\" },\n 6045: { name: \"PositionBinPoolMismatch\", msg: \"PositionBin pool mismatch.\" },\n 6046: { name: \"AccountingInvariantViolation\", msg: \"Accounting invariant violated.\" },\n 6047: { name: \"InsufficientPositionBinShares\", msg: \"Insufficient position bin shares.\" },\n 6048: { name: \"AccountingMismatch\", msg: \"Accounting mismatch: bin deltas do not match vault payout.\" },\n 6049: { name: \"DuplicateBinAccount\", msg: \"Duplicate bin account provided.\" },\n 6050: { name: \"InvalidMetadata\", msg: \"NFT metadata is invalid.\" },\n 6051: { name: \"InvalidNftRarity\", msg: \"NFT rarity not found or invalid.\" },\n 6052: { name: \"InsufficientOracleData\", msg: \"Insufficient oracle data.\" },\n 6053: { name: \"InvalidTimestamp\", msg: \"Invalid timestamp for oracle observation.\" },\n 6054: { name: \"InvalidOracleWindow\", msg: \"Invalid oracle observation window.\" },\n 6055: { name: \"OraclePoolMismatch\", msg: \"Oracle pool mismatch.\" },\n 6056: { name: \"InvalidBinArrayPda\", msg: \"Invalid BinArray PDA derivation.\" },\n 6057: { name: \"InvalidPositionBinPda\", msg: \"Invalid PositionBin PDA derivation.\" },\n 6058: { name: \"ClaimTooSoon\", msg: \"Claim cooldown not elapsed.\" },\n 6059: { name: \"PositionHasLiquidity\", msg: \"Position has active liquidity. Withdraw first.\" },\n 6060: { name: \"ExcessiveFee\", msg: \"Fee exceeds maximum allowed (10%).\" },\n 6061: { name: \"FeeConfigImmutable\", msg: \"Fee configuration is immutable after pool creation.\" },\n 6062: { name: \"PauseDurationExceeded\", msg: \"Pause duration exceeds maximum (7 days).\" },\n 6063: { name: \"InvalidStakePool\", msg: \"Invalid stake pool.\" },\n};\n\n/** Custom error class for CipherDLMM program errors */\nexport class CipherDlmmError extends Error {\n readonly code: number;\n readonly errorName: string;\n\n constructor(code: number, message?: string) {\n const known = CIPHER_DLMM_ERRORS[code];\n const msg = message || known?.msg || `Unknown error ${code}`;\n super(msg);\n this.name = \"CipherDlmmError\";\n this.code = code;\n this.errorName = known?.name || \"UnknownError\";\n }\n}\n\n/** Parse an Anchor error code from a transaction error */\nexport function parseProgramError(errorCode: number): CipherDlmmError | null {\n if (CIPHER_DLMM_ERRORS[errorCode]) {\n return new CipherDlmmError(errorCode);\n }\n return null;\n}\n"]}