@hodlmarkets/sdk 0.1.3 → 0.1.4

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/safe-buffer/index.js","../node_modules/base-x/src/index.js","../node_modules/bs58/index.js","../src/constants.ts","../src/errors.ts","../src/pda.ts","../src/math.ts","../src/idl/hodl.json","../src/program.ts","../src/accounts.ts","../src/instructions.ts","../src/events.ts","../src/transaction.ts","../src/client.ts"],"names":["exports","Buffer","i","j","PublicKey","BN","claimable","AnchorProvider","Program","getAssociatedTokenAddressSync","TOKEN_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","SystemProgram","SYSVAR_RENT_PUBKEY","SYSVAR_INSTRUCTIONS_PUBKEY","BorshCoder","bs58","utils","ComputeBudgetProgram","TransactionMessage","VersionedTransaction"],"mappings":"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","file":"index.cjs","sourcesContent":["/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return _Buffer.alloc(0) }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (psz < source.length) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = _Buffer.allocUnsafe(zeroes + (size - it4))\n vch.fill(0x00, 0, zeroes)\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","var basex = require('base-x')\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","import { PublicKey } from '@solana/web3.js'\nimport BN from 'bn.js'\n\nexport const BPS_DENOMINATOR = 10_000\n\nexport const PROGRAM_ID = new PublicKey('hodLrUfwyK3Z7Td5hdZhyojyznG1rqbHVex11y5s4yG')\nexport const PROTOCOL_AUTHORITY = new PublicKey('EFAquDGAHjkoPB6TGKVibD3BYhbFXNDjuXKpiBHdYzji')\n\nexport const VIRTUAL_SOL = new BN('30000000000')\nexport const TOTAL_SUPPLY = new BN('1000000000000000')\nexport const PROTOCOL_MINT_FEE = new BN('100000000')\nexport const DECIMALS = 6\n\nexport const SEEDS = {\n POOL: Buffer.from('pool'),\n VAULT_AUTHORITY: Buffer.from('vault_authority'),\n SOL_VAULT: Buffer.from('sol_vault'),\n POSITION: Buffer.from('position'),\n PROTOCOL_FEES: Buffer.from('protocol_fees'),\n EVENT_AUTHORITY: Buffer.from('__event_authority'),\n} as const\n\nexport const MAINNET_CONFIG = {\n programId: PROGRAM_ID,\n virtualSol: VIRTUAL_SOL,\n protocolAuthority: PROTOCOL_AUTHORITY,\n protocolMintFee: PROTOCOL_MINT_FEE,\n decimals: DECIMALS,\n totalSupply: TOTAL_SUPPLY,\n} as const\n\nexport const DEVNET_CONFIG = {\n programId: PROGRAM_ID,\n virtualSol: VIRTUAL_SOL,\n protocolAuthority: PROTOCOL_AUTHORITY,\n protocolMintFee: PROTOCOL_MINT_FEE,\n decimals: DECIMALS,\n totalSupply: TOTAL_SUPPLY,\n} as const\n\n/** Trade fee in basis points (25 bps = 0.25%). Only applies after migration threshold (85 SOL). */\nexport const TRADE_FEE_BPS = 25\n\n/** SOL threshold in lamports that triggers migration and fee activation (85 SOL). */\nexport const MIGRATION_SOL_THRESHOLD = new BN('85000000000')\n\n/** Allowed vest duration modes (in seconds). The program only accepts these values. */\nexport const VEST_DURATION = {\n ONE_MINUTE: 60,\n THIRTY_MINUTES: 1800,\n} as const\n\nexport type VestDuration = typeof VEST_DURATION[keyof typeof VEST_DURATION]\n\nexport const LIMITS = {\n NAME: { min: 1, max: 32 },\n SYMBOL: { min: 1, max: 16 },\n URI: { min: 10, max: 100 },\n DESCRIPTION: { min: 0, max: 200 },\n} as const\n","export class HodlError extends Error {\n constructor(public readonly code: number, message: string) {\n super(message)\n this.name = 'HodlError'\n }\n}\n\nexport const HODL_ERRORS: Record<number, string> = {\n 7005: 'Insufficient token reserves in vault',\n 7100: 'Arithmetic overflow',\n 7102: 'Division by zero or invalid division',\n 7104: 'Token calculation overflow',\n 7105: 'Token calculation underflow',\n 7200: 'Slippage exceeded: output below minimum threshold',\n 7312: 'Accrual calculation overflow',\n 7315: 'Position is not empty, must sell all tokens first',\n 7319: 'Invalid protocol authority',\n 7321: 'Position must have tokens to perform this operation',\n 7500: 'Position not owned by signer',\n 7505: 'SOL vault PDA derivation mismatch',\n 7601: 'Invalid vesting type',\n 7604: 'Invalid percentage value (must be 0-100)',\n 7901: 'Not authorized',\n 8014: 'Insufficient liquidity',\n 8018: 'vAMM is not active',\n 8020: 'Invalid amount',\n}\n\nexport function parseHodlError(err: unknown): HodlError | null {\n if (err && typeof err === 'object' && 'code' in err) {\n const code = (err as { code: number }).code\n if (code in HODL_ERRORS) return new HodlError(code, HODL_ERRORS[code])\n }\n return null\n}\n","import { PublicKey } from '@solana/web3.js'\nimport { SEEDS } from './constants'\n\nexport function getPoolStatePDA(mint: PublicKey, programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.POOL, mint.toBuffer()], programId)\n}\n\nexport function getVaultAuthorityPDA(poolState: PublicKey, programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.VAULT_AUTHORITY, poolState.toBuffer()], programId)\n}\n\nexport function getSolVaultPDA(poolState: PublicKey, programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.SOL_VAULT, poolState.toBuffer()], programId)\n}\n\nexport function getPositionPDA(poolState: PublicKey, owner: PublicKey, programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.POSITION, poolState.toBuffer(), owner.toBuffer()], programId)\n}\n\nexport function getProtocolFeesPDA(programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.PROTOCOL_FEES], programId)\n}\n\nexport function getEventAuthorityPDA(programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.EVENT_AUTHORITY], programId)\n}\n","import BN from 'bn.js'\nimport { VIRTUAL_SOL } from './constants'\n\nconst ZERO = new BN(0)\nconst BPS = new BN(10_000)\n\n// Band logic from the program:\n// 40% tradable at 0-50M tokens sold, +5% per 50M band, 100% at 600M+\nconst BASE_TRADABLE_PCT = 40\nconst PCT_PER_BAND = 5\nconst BAND_SIZE = new BN('50000000000000') // 50M tokens × 10^6 decimals\nconst MAX_TRADABLE_PCT = 100\n\n/**\n * Calculate tokens out for a given SOL input using the vAMM constant product formula.\n * k = (vammRealSol + VIRTUAL_SOL) * vammTokens\n */\nexport function calculateBuyAmount(\n solIn: BN,\n vammRealSol: BN,\n vammTokens: BN,\n vammK: BN,\n): BN {\n if (solIn.isZero() || solIn.isNeg()) return ZERO\n const currentSolSide = vammRealSol.add(VIRTUAL_SOL)\n const newSolSide = currentSolSide.add(solIn)\n const newTokenSide = vammK.div(newSolSide)\n return vammTokens.sub(newTokenSide)\n}\n\n/**\n * Calculate SOL out for a given token input.\n */\nexport function calculateSellAmount(\n tokensIn: BN,\n vammRealSol: BN,\n vammTokens: BN,\n vammK: BN,\n): BN {\n if (tokensIn.isZero() || tokensIn.isNeg()) return ZERO\n const newTokenSide = vammTokens.add(tokensIn)\n const newRealSol = vammK.div(newTokenSide).sub(VIRTUAL_SOL)\n return vammRealSol.sub(newRealSol)\n}\n\n/**\n * Calculate SOL required to buy an exact number of tokens.\n * Inverse of calculateBuyAmount.\n */\nexport function calculateSolForExactTokens(\n tokensOut: BN,\n vammRealSol: BN,\n vammTokens: BN,\n vammK: BN,\n): BN {\n if (tokensOut.isZero() || tokensOut.isNeg()) return ZERO\n if (tokensOut.gte(vammTokens)) throw new Error('tokensOut exceeds available vAMM liquidity')\n const newTokenSide = vammTokens.sub(tokensOut)\n const newSolSide = vammK.div(newTokenSide)\n const currentSolSide = vammRealSol.add(VIRTUAL_SOL)\n return newSolSide.sub(currentSolSide)\n}\n\n/**\n * Apply slippage tolerance to a minimum output amount.\n * slippageBps: basis points, e.g. 100 = 1%\n */\nexport function applySlippage(amount: BN, slippageBps: number): BN {\n return amount.mul(new BN(10_000 - slippageBps)).div(BPS)\n}\n\n/**\n * Calculate the tradable/vaulted split for newly purchased tokens.\n *\n * Band logic (from the on-chain program):\n * 0–50M tokens sold: 40% tradable / 60% vaulted\n * each additional 50M band: +5% tradable\n * 600M+ tokens sold: 100% tradable / 0% vaulted\n *\n * After vest_duration has fully elapsed, all buys are 100% tradable.\n *\n * @param tokensOut tokens received from this buy\n * @param tokensSold cumulative tokens sold in the pool (before this buy)\n * @param bandSize band width in base token units (default 50M)\n */\nexport function calculateTradableVaultedSplit(\n tokensOut: BN,\n tokensSold: BN,\n bandSize: BN = BAND_SIZE,\n): { tradable: BN; vaulted: BN; tradablePct: number } {\n if (tokensOut.isZero()) return { tradable: ZERO, vaulted: ZERO, tradablePct: 0 }\n\n const bandIndex = bandSize.isZero() ? 0 : tokensSold.div(bandSize).toNumber()\n const tradablePct = Math.min(BASE_TRADABLE_PCT + PCT_PER_BAND * bandIndex, MAX_TRADABLE_PCT)\n const tradable = tokensOut.mul(new BN(tradablePct)).div(new BN(100))\n const vaulted = tokensOut.sub(tradable)\n\n return { tradable, vaulted, tradablePct }\n}\n\n/**\n * Calculate claimable tokens for a position at a given timestamp.\n *\n * Mirrors the on-chain logic exactly:\n * 1. update_position_accrual: vaulted tokens accrue linearly to tradable\n * 2. claim_accrued: claimable = new_tradable - tokens_transferred\n *\n * Handles both per-position accrual and global pool unlock.\n */\nexport function calculateClaimableTokens(\n tradableTokens: BN,\n vaultedTokens: BN,\n initialVaulted: BN,\n tokensTransferred: BN,\n entryTimestamp: BN,\n poolCreationTimestamp: BN,\n vestDuration: BN,\n currentTimestamp: BN,\n): BN {\n const totalTokens = tradableTokens.add(vaultedTokens)\n if (totalTokens.isZero()) return ZERO\n\n // Global unlock: if pool vest period has passed, everything is tradable\n const globalUnlockTime = poolCreationTimestamp.add(vestDuration)\n if (currentTimestamp.gte(globalUnlockTime)) {\n const claimable = totalTokens.sub(tokensTransferred)\n return claimable.isNeg() ? ZERO : claimable\n }\n\n // Per-position accrual\n if (initialVaulted.isZero() || vestDuration.isZero()) {\n const claimable = totalTokens.sub(tokensTransferred)\n return claimable.isNeg() ? ZERO : claimable\n }\n\n const elapsed = currentTimestamp.sub(entryTimestamp)\n if (elapsed.isNeg()) {\n // Before entry — only pre-existing tradable minus transferred\n const claimable = tradableTokens.sub(tokensTransferred)\n return claimable.isNeg() ? ZERO : claimable\n }\n\n // current_vaulted = initial_vaulted * (1 - elapsed / vest_duration)\n let currentVaulted: BN\n if (elapsed.gte(vestDuration)) {\n currentVaulted = ZERO\n } else {\n const remainingBps = BPS.sub(elapsed.mul(BPS).div(vestDuration))\n currentVaulted = initialVaulted.mul(remainingBps).div(BPS)\n }\n\n // Cap: vaulted can't exceed total tokens\n if (currentVaulted.gt(totalTokens)) {\n currentVaulted = totalTokens\n }\n\n const newTradable = totalTokens.sub(currentVaulted)\n const claimable = newTradable.sub(tokensTransferred)\n return claimable.isNeg() ? ZERO : claimable\n}\n\n/**\n * @deprecated Use calculateClaimableTokens instead. This function doesn't account for\n * the full position state and produces incorrect results when tokensTransferred\n * includes the initial tradable portion.\n */\nexport function calculateAccruedTokens(\n initialVaulted: BN,\n tokensTransferred: BN,\n entryTimestamp: BN,\n vestDuration: BN,\n currentTimestamp: BN,\n): BN {\n if (initialVaulted.isZero()) return ZERO\n const remaining = initialVaulted.sub(tokensTransferred)\n if (vestDuration.isZero()) return remaining\n const elapsed = currentTimestamp.sub(entryTimestamp)\n if (elapsed.isNeg()) return ZERO\n if (elapsed.gte(vestDuration)) return remaining\n const totalAccrued = initialVaulted.mul(elapsed).div(vestDuration)\n const claimable = totalAccrued.sub(tokensTransferred)\n return claimable.isNeg() ? ZERO : claimable\n}\n\n/**\n * Spot price: how much SOL (in lamports) one whole token costs at the current curve position.\n * Returns price scaled by 1e6 for precision (i.e. micro-lamports per base token unit).\n */\nexport function calculateSpotPrice(\n vammRealSol: BN,\n vammTokens: BN,\n): BN {\n if (vammTokens.isZero()) return ZERO\n return vammRealSol.add(VIRTUAL_SOL).mul(new BN(1_000_000)).div(vammTokens)\n}\n\n/**\n * Price impact of a buy, in basis points.\n * Compares the effective price of the trade to the current spot price.\n */\nexport function calculatePriceImpact(\n solIn: BN,\n tokensOut: BN,\n vammRealSol: BN,\n vammTokens: BN,\n): number {\n if (solIn.isZero() || tokensOut.isZero() || vammTokens.isZero()) return 0\n const solSide = vammRealSol.add(VIRTUAL_SOL)\n const numerator = solIn.mul(vammTokens).mul(BPS)\n const denominator = tokensOut.mul(solSide)\n if (denominator.isZero()) return 0\n const ratioBps = numerator.div(denominator)\n return ratioBps.sub(BPS).toNumber()\n}\n","{\n \"address\": \"hodLrUfwyK3Z7Td5hdZhyojyznG1rqbHVex11y5s4yG\",\n \"metadata\": {\n \"name\": \"hodl\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\"\n },\n \"instructions\": [\n {\n \"name\": \"buy\",\n \"docs\": [\n \"Buy tokens from the vAMM\",\n \"\",\n \"Tokens are split into tradable (immediate) and vaulted (accrue linearly).\",\n \"Allocation is based on token-amount range bands: 40/60 at 0-50M, +5% per 50M band, 100/0 at 600M+.\",\n \"After vest_duration passes, all buys are 100% tradable.\"\n ],\n \"discriminator\": [\n 102,\n 6,\n 61,\n 18,\n 1,\n 218,\n 235,\n 234\n ],\n \"accounts\": [\n {\n \"name\": \"buyer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_state\",\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\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_vault\",\n \"writable\": true\n },\n {\n \"name\": \"vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"buyer_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"pool_sol_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 111,\n 108,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\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 \"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_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n }\n ]\n }\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"sol_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_tokens_out\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claim_accrued\",\n \"docs\": [\n \"Claim accrued tokens\",\n \"Transfers tokens that have accrued from vaulted to tradable from vault to wallet\"\n ],\n \"discriminator\": [\n 209,\n 92,\n 30,\n 216,\n 89,\n 249,\n 122,\n 243\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"pool_state\",\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\": \"account\",\n \"path\": \"pool_state.mint\",\n \"account\": \"PoolState\"\n }\n ]\n }\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_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"token_vault\",\n \"writable\": true\n },\n {\n \"name\": \"vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"user_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_position\",\n \"docs\": [\n \"Close an empty position account and reclaim rent\"\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 \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_state\",\n \"writable\": 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_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"user_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_token\",\n \"docs\": [\n \"Create a new token and initialize vAMM pool\"\n ],\n \"discriminator\": [\n 84,\n 52,\n 204,\n 228,\n 24,\n 140,\n 234,\n 75\n ],\n \"accounts\": [\n {\n \"name\": \"creator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_authority\"\n },\n {\n \"name\": \"mint\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_state\",\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\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_vault\",\n \"writable\": true\n },\n {\n \"name\": \"vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"metadata\",\n \"writable\": true\n },\n {\n \"name\": \"pool_sol_account\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_fee_wallet\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\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 115\n ]\n }\n ]\n }\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 \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n },\n {\n \"name\": \"metadata_program\"\n },\n {\n \"name\": \"sysvar_instructions\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"name\": \"uri\",\n \"type\": \"string\"\n },\n {\n \"name\": \"pool_description\",\n \"type\": \"string\"\n },\n {\n \"name\": \"vest_duration\",\n \"type\": \"i64\"\n }\n ]\n },\n {\n \"name\": \"emergency_withdraw_sol\",\n \"docs\": [\n \"Emergency withdraw SOL from a pool's sol_vault\"\n ],\n \"discriminator\": [\n 219,\n 156,\n 123,\n 176,\n 91,\n 105,\n 30,\n 160\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_state\"\n },\n {\n \"name\": \"sol_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 111,\n 108,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"sell\",\n \"docs\": [\n \"Sell tokens back to the vAMM\",\n \"If sell_percentage is provided, it overrides token_amount\"\n ],\n \"discriminator\": [\n 51,\n 230,\n 133,\n 164,\n 1,\n 127,\n 131,\n 173\n ],\n \"accounts\": [\n {\n \"name\": \"seller\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_state\",\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\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\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_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"seller\"\n }\n ]\n }\n },\n {\n \"name\": \"token_vault\",\n \"writable\": true\n },\n {\n \"name\": \"vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"seller_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"pool_sol_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 111,\n 108,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"token_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_sol_out\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sell_percentage\",\n \"type\": {\n \"option\": \"u8\"\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_protocol_fees\",\n \"docs\": [\n \"Withdraw accumulated protocol fees\"\n ],\n \"discriminator\": [\n 11,\n 68,\n 165,\n 98,\n 18,\n 208,\n 134,\n 73\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_fee_wallet\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\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 115\n ]\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"PoolState\",\n \"discriminator\": [\n 247,\n 237,\n 227,\n 245,\n 215,\n 195,\n 222,\n 70\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 \"events\": [\n {\n \"name\": \"AccrualClaimed\",\n \"discriminator\": [\n 86,\n 99,\n 51,\n 211,\n 226,\n 48,\n 235,\n 238\n ]\n },\n {\n \"name\": \"PositionClosed\",\n \"discriminator\": [\n 157,\n 163,\n 227,\n 228,\n 13,\n 97,\n 138,\n 121\n ]\n },\n {\n \"name\": \"TokenCreated\",\n \"discriminator\": [\n 236,\n 19,\n 41,\n 255,\n 130,\n 78,\n 147,\n 172\n ]\n },\n {\n \"name\": \"TokenPurchased\",\n \"discriminator\": [\n 3,\n 73,\n 186,\n 50,\n 15,\n 181,\n 213,\n 37\n ]\n },\n {\n \"name\": \"TokenSold\",\n \"discriminator\": [\n 88,\n 61,\n 1,\n 247,\n 185,\n 6,\n 252,\n 86\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 7005,\n \"name\": \"InsufficientTokens\",\n \"msg\": \"Insufficient token reserves in vault\"\n },\n {\n \"code\": 7100,\n \"name\": \"ArithmeticOverflow\",\n \"msg\": \"Arithmetic overflow\"\n },\n {\n \"code\": 7102,\n \"name\": \"DivisionError\",\n \"msg\": \"Division by zero or invalid division\"\n },\n {\n \"code\": 7104,\n \"name\": \"TokenOverflow\",\n \"msg\": \"Token calculation overflow\"\n },\n {\n \"code\": 7105,\n \"name\": \"TokenUnderflow\",\n \"msg\": \"Token calculation underflow\"\n },\n {\n \"code\": 7200,\n \"name\": \"SlippageExceeded\",\n \"msg\": \"Slippage exceeded: output below minimum threshold\"\n },\n {\n \"code\": 7312,\n \"name\": \"AccrualCalculationOverflow\",\n \"msg\": \"Accrual calculation overflow\"\n },\n {\n \"code\": 7315,\n \"name\": \"PositionNotEmpty\",\n \"msg\": \"Position is not empty, must sell all tokens first\"\n },\n {\n \"code\": 7319,\n \"name\": \"InvalidProtocolAuthority\",\n \"msg\": \"Invalid protocol authority - must match PROTOCOL_AUTHORITY constant\"\n },\n {\n \"code\": 7321,\n \"name\": \"MustHaveUnlockedPortion\",\n \"msg\": \"Position must have tokens to perform this operation\"\n },\n {\n \"code\": 7500,\n \"name\": \"PositionNotOwnedBySigner\",\n \"msg\": \"Position not owned by signer\"\n },\n {\n \"code\": 7505,\n \"name\": \"InvalidSolVaultPDA\",\n \"msg\": \"SOL vault PDA derivation mismatch\"\n },\n {\n \"code\": 7601,\n \"name\": \"InvalidVestingType\",\n \"msg\": \"Invalid vesting type\"\n },\n {\n \"code\": 7604,\n \"name\": \"InvalidPercentage\",\n \"msg\": \"Invalid percentage value (must be 0-100)\"\n },\n {\n \"code\": 7901,\n \"name\": \"NotAuthorized\",\n \"msg\": \"Not authorized\"\n },\n {\n \"code\": 8014,\n \"name\": \"InsufficientLiquidity\",\n \"msg\": \"Insufficient liquidity\"\n },\n {\n \"code\": 8018,\n \"name\": \"VammNotActive\",\n \"msg\": \"vAMM is not active\"\n },\n {\n \"code\": 8020,\n \"name\": \"InvalidAmount\",\n \"msg\": \"Invalid amount\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AccrualClaimed\",\n \"docs\": [\n \"Event emitted when accrued tokens are claimed\"\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\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"tokens_claimed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_tradable_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"remaining_vaulted_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_transferred\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"initial_vaulted\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolMetadata\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"name\",\n \"docs\": [\n \"Optional pool name\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"description\",\n \"docs\": [\n \"Optional pool description\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"version\",\n \"docs\": [\n \"Pool version\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolState\",\n \"docs\": [\n \"Pool state account - main state for a vAMM pool\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Pool authority (creator)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Token mint for this pool\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"Token vault (holds unsold tokens)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vault_authority\",\n \"docs\": [\n \"Vault authority (PDA)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"sol_vault\",\n \"docs\": [\n \"Pool SOL vault (holds raised SOL)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_positions\",\n \"docs\": [\n \"Total number of positions in this pool\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creation_timestamp\",\n \"docs\": [\n \"Pool creation timestamp (Unix timestamp)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_update_timestamp\",\n \"docs\": [\n \"Last update timestamp (Unix timestamp)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"metadata\",\n \"docs\": [\n \"Pool metadata\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolMetadata\"\n }\n }\n },\n {\n \"name\": \"vest_duration\",\n \"docs\": [\n \"=== ACCRUAL SYSTEM FIELDS ===\",\n \"Dev-set unlock duration in seconds (applies to all traders)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"next_position_number\",\n \"docs\": [\n \"Next position number to assign (sequential counter for display/identity)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_active\",\n \"docs\": [\n \"=== VAMM STATE ===\",\n \"vAMM is active for trading\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"vamm_real_sol\",\n \"docs\": [\n \"Real SOL in the vAMM\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_tokens\",\n \"docs\": [\n \"Real tokens in the vAMM\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_k\",\n \"docs\": [\n \"The invariant k (set at creation, never changes)\",\n \"k = (vamm_real_sol + VIRTUAL_SOL) * vamm_tokens\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"tokens_sold\",\n \"docs\": [\n \"Cumulative tokens bought from vAMM (increases on buy, decreases on sell)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_reserved_for_claims\",\n \"docs\": [\n \"Vault tokens reserved for position claims (not available for vAMM liquidity)\",\n \"Incremented on buy (vaulted portion), decremented on claim_accrued\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"migration_complete\",\n \"docs\": [\n \"One-way flag: set to true once vamm_real_sol >= MIGRATION_SOL_THRESHOLD, never reverts\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"total_fees_sol\",\n \"docs\": [\n \"Cumulative SOL fees collected from buys (lamports)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_fees_tokens\",\n \"docs\": [\n \"Cumulative token fees collected from sells\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump_vault_auth\",\n \"docs\": [\n \"Bump seeds for PDAs\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump_pool\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"docs\": [\n \"Position in a vAMM pool\",\n \"Tokens split into tradable (immediate) and vaulted (accrue linearly over vest_duration)\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner's public key\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool this position belongs to\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"tradable_tokens\",\n \"docs\": [\n \"Tradable tokens (can be sold immediately)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vaulted_tokens\",\n \"docs\": [\n \"Vaulted tokens (accruing linearly to tradable)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sol_spent\",\n \"docs\": [\n \"SOL spent on this position\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_transferred\",\n \"docs\": [\n \"Cumulative tokens transferred to wallet (for claim_accrued tracking)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"entry_timestamp\",\n \"docs\": [\n \"Entry timestamp (for accrual calculation)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"initial_vaulted\",\n \"docs\": [\n \"Cumulative initial vaulted tokens from all buys (for accrual calculation)\",\n \"This tracks the total vaulted amount at buy time, used to calculate accrual progress\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"position_number\",\n \"docs\": [\n \"Position number in the pool (sequential counter for display/identity)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_update_timestamp\",\n \"docs\": [\n \"Last update timestamp\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionClosed\",\n \"docs\": [\n \"Event emitted when a position account is closed\"\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\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"rent_reclaimed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenCreated\",\n \"docs\": [\n \"Event emitted when a new token and vAMM pool is created\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"name\": \"total_supply\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"initial_k\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"vamm_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vest_duration\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"creation_timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenPurchased\",\n \"docs\": [\n \"Event emitted when tokens are bought\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"buyer\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"sol_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_received\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_real_sol\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_sold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_number\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vest_duration\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"unlock_time_seconds\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"tradable_tokens\",\n \"docs\": [\n \"Position state after buy\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vaulted_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sol_spent\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_transferred\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"initial_vaulted\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenSold\",\n \"docs\": [\n \"Event emitted when tokens are sold\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"seller\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sol_received\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_real_sol\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_sold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_number\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vest_duration\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"unlock_time_seconds\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"tradable_tokens\",\n \"docs\": [\n \"Position state after sell\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vaulted_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sol_spent\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_transferred\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"initial_vaulted\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}","import { Connection, PublicKey } from '@solana/web3.js'\nimport { Program, AnchorProvider } from '@coral-xyz/anchor'\nimport type { Hodl } from './idl/hodl'\nimport IDL from './idl/hodl.json'\n\nconst DUMMY_WALLET = {\n publicKey: PublicKey.default,\n signTransaction: async <T>(tx: T): Promise<T> => tx,\n signAllTransactions: async <T>(txs: T[]): Promise<T[]> => txs,\n}\n\nexport function getProgram(connection: Connection): Program<Hodl> {\n const provider = new AnchorProvider(connection, DUMMY_WALLET as any, { commitment: 'confirmed' })\n return new Program<Hodl>(IDL as unknown as Hodl, provider)\n}\n","import { Connection, PublicKey } from '@solana/web3.js'\nimport type { PoolState, Position, SdkConfig } from './types'\nimport { getPoolStatePDA, getPositionPDA } from './pda'\nimport { getProgram } from './program'\n\nexport async function fetchPoolState(\n connection: Connection,\n mint: PublicKey,\n config: SdkConfig,\n): Promise<PoolState> {\n const program = getProgram(connection)\n const [poolStatePDA] = getPoolStatePDA(mint, config.programId)\n return program.account.poolState.fetch(poolStatePDA) as unknown as PoolState\n}\n\nexport async function fetchPosition(\n connection: Connection,\n poolState: PublicKey,\n owner: PublicKey,\n config: SdkConfig,\n): Promise<Position> {\n const program = getProgram(connection)\n const [positionPDA] = getPositionPDA(poolState, owner, config.programId)\n return program.account.position.fetch(positionPDA) as unknown as Position\n}\n\nexport async function fetchPoolStateByAddress(\n connection: Connection,\n poolStatePDA: PublicKey,\n): Promise<PoolState> {\n const program = getProgram(connection)\n return program.account.poolState.fetch(poolStatePDA) as unknown as PoolState\n}\n","import {\n Connection,\n PublicKey,\n TransactionInstruction,\n SystemProgram,\n SYSVAR_RENT_PUBKEY,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n} from '@solana/web3.js'\nimport { getAssociatedTokenAddressSync, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport type { SdkConfig, BuyParams, SellParams, CreateTokenParams } from './types'\n\nimport {\n getPoolStatePDA,\n getVaultAuthorityPDA,\n getSolVaultPDA,\n getPositionPDA,\n getEventAuthorityPDA,\n getProtocolFeesPDA,\n} from './pda'\nimport { getProgram } from './program'\n\nconst METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s')\n\nfunction getMetadataPDA(mint: PublicKey): PublicKey {\n const [pda] = PublicKey.findProgramAddressSync(\n [Buffer.from('metadata'), METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()],\n METADATA_PROGRAM_ID,\n )\n return pda\n}\n\nexport async function buildBuyInstruction(params: BuyParams & {\n buyer: PublicKey\n mint: PublicKey\n connection: Connection\n config: SdkConfig\n}): Promise<TransactionInstruction> {\n const { buyer, mint, solAmount, minTokensOut, connection, config } = params\n const program = getProgram(connection)\n\n const [poolState] = getPoolStatePDA(mint, config.programId)\n const [vaultAuthority] = getVaultAuthorityPDA(poolState, config.programId)\n const tokenVault = getAssociatedTokenAddressSync(mint, vaultAuthority, true)\n const buyerTokenAccount = getAssociatedTokenAddressSync(mint, buyer)\n const [poolSolAccount] = getSolVaultPDA(poolState, config.programId)\n const [position] = getPositionPDA(poolState, buyer, config.programId)\n const [eventAuthority] = getEventAuthorityPDA(config.programId)\n\n return program.methods\n .buy(solAmount, minTokensOut)\n .accountsPartial({\n buyer,\n poolState,\n tokenVault,\n vaultAuthority,\n buyerTokenAccount,\n poolSolAccount,\n mint,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n position,\n eventAuthority,\n program: config.programId,\n })\n .instruction()\n}\n\nexport async function buildSellInstruction(params: SellParams & {\n seller: PublicKey\n mint: PublicKey\n connection: Connection\n config: SdkConfig\n}): Promise<TransactionInstruction> {\n const { seller, mint, tokenAmount, minSolOut, sellPercentage, connection, config } = params\n const program = getProgram(connection)\n\n const [poolState] = getPoolStatePDA(mint, config.programId)\n const [vaultAuthority] = getVaultAuthorityPDA(poolState, config.programId)\n const tokenVault = getAssociatedTokenAddressSync(mint, vaultAuthority, true)\n const sellerTokenAccount = getAssociatedTokenAddressSync(mint, seller)\n const [poolSolAccount] = getSolVaultPDA(poolState, config.programId)\n const [position] = getPositionPDA(poolState, seller, config.programId)\n const [eventAuthority] = getEventAuthorityPDA(config.programId)\n\n return program.methods\n .sell(tokenAmount, minSolOut, sellPercentage ?? null)\n .accountsPartial({\n seller,\n poolState,\n position,\n tokenVault,\n vaultAuthority,\n sellerTokenAccount,\n poolSolAccount,\n mint,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n eventAuthority,\n program: config.programId,\n })\n .instruction()\n}\n\nexport async function buildCreateTokenInstruction(params: CreateTokenParams & {\n creator: PublicKey\n mint: PublicKey\n connection: Connection\n config: SdkConfig\n}): Promise<TransactionInstruction> {\n const { creator, mint, name, symbol, uri, poolDescription, vestDuration, connection, config } = params\n const program = getProgram(connection)\n\n const [poolState] = getPoolStatePDA(mint, config.programId)\n const [vaultAuthority] = getVaultAuthorityPDA(poolState, config.programId)\n const tokenVault = getAssociatedTokenAddressSync(mint, vaultAuthority, true)\n const metadata = getMetadataPDA(mint)\n const [poolSolAccount] = getSolVaultPDA(poolState, config.programId)\n const [protocolFeeWallet] = getProtocolFeesPDA(config.programId)\n const [eventAuthority] = getEventAuthorityPDA(config.programId)\n\n return program.methods\n .createToken(name, symbol, uri, poolDescription, vestDuration)\n .accountsPartial({\n creator,\n protocolAuthority: config.protocolAuthority,\n mint,\n poolState,\n tokenVault,\n vaultAuthority,\n metadata,\n poolSolAccount,\n protocolFeeWallet,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n metadataProgram: METADATA_PROGRAM_ID,\n sysvarInstructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n eventAuthority,\n program: config.programId,\n })\n .instruction()\n}\n\nexport async function buildClaimAccruedInstruction(params: {\n owner: PublicKey\n poolState: PublicKey\n connection: Connection\n config: SdkConfig\n}): Promise<TransactionInstruction> {\n const { owner, poolState, connection, config } = params\n const program = getProgram(connection)\n\n // Fetch pool state to get mint — needed for token vault and user ATA derivation\n const poolData = await program.account.poolState.fetch(poolState)\n const mint = poolData.mint\n\n const [vaultAuthority] = getVaultAuthorityPDA(poolState, config.programId)\n const tokenVault = getAssociatedTokenAddressSync(mint, vaultAuthority, true)\n const userTokenAccount = getAssociatedTokenAddressSync(mint, owner)\n const [position] = getPositionPDA(poolState, owner, config.programId)\n const [eventAuthority] = getEventAuthorityPDA(config.programId)\n\n return program.methods\n .claimAccrued()\n .accountsPartial({\n owner,\n poolState,\n position,\n tokenVault,\n vaultAuthority,\n userTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n eventAuthority,\n program: config.programId,\n })\n .instruction()\n}\n\nexport async function buildClosePositionInstruction(params: {\n owner: PublicKey\n poolState: PublicKey\n mint: PublicKey\n userTokenAccount: PublicKey\n connection: Connection\n config: SdkConfig\n}): Promise<TransactionInstruction> {\n const { owner, poolState, mint, userTokenAccount, connection, config } = params\n const program = getProgram(connection)\n\n const [position] = getPositionPDA(poolState, owner, config.programId)\n const [eventAuthority] = getEventAuthorityPDA(config.programId)\n\n return program.methods\n .closePosition()\n .accountsPartial({\n owner,\n poolState,\n position,\n userTokenAccount,\n mint,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n eventAuthority,\n program: config.programId,\n })\n .instruction()\n}\n","import { Connection } from '@solana/web3.js'\nimport { BorshCoder, utils } from '@coral-xyz/anchor'\nimport bs58 from 'bs58'\nimport type { VersionedTransactionResponse } from '@solana/web3.js'\nimport type {\n HodlEvent,\n SdkConfig,\n TokenPurchasedEvent,\n TokenSoldEvent,\n TokenCreatedEvent,\n AccrualClaimedEvent,\n PositionClosedEvent,\n} from './types'\nimport IDL from './idl/hodl.json'\n\nconst PROGRAM_DATA_PREFIX = 'Program data: '\n\n/** Convert PascalCase IDL event name to camelCase for SDK types */\nfunction toCamelCase(name: string): string {\n return name.charAt(0).toLowerCase() + name.slice(1)\n}\n\n/** Convert snake_case keys to camelCase (one level deep) */\nfunction snakeToCamelKeys(obj: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = {}\n for (const [key, value] of Object.entries(obj)) {\n const camelKey = key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())\n result[camelKey] = value\n }\n return result\n}\n\nfunction tryDecodeEvent(coder: BorshCoder, data: string): HodlEvent | null {\n try {\n const event = coder.events.decode(data)\n if (event) {\n return {\n name: toCamelCase(event.name),\n data: snakeToCamelKeys(event.data),\n } as HodlEvent\n }\n } catch {\n // Not one of our events\n }\n return null\n}\n\n/**\n * Parse events from a full transaction response.\n *\n * Handles two event emission patterns:\n * 1. emit!() — event data appears as \"Program data: <base64>\" in log messages\n * 2. emit_cpi!() — event data is the instruction data of a self-CPI (inner instruction)\n *\n * Anchor's EventParser only handles #1 and fails on #2 due to CPI depth tracking.\n */\nexport function parseTransactionEvents(tx: VersionedTransactionResponse | null, config: SdkConfig): HodlEvent[]\nexport function parseTransactionEvents(logs: string[], config: SdkConfig): HodlEvent[]\nexport function parseTransactionEvents(\n input: VersionedTransactionResponse | string[] | null,\n config: SdkConfig,\n): HodlEvent[] {\n if (!input) return []\n\n const coder = new BorshCoder(IDL as any)\n const events: HodlEvent[] = []\n\n // If given raw logs (string[]), can only parse emit!() events\n if (Array.isArray(input)) {\n for (const log of input) {\n if (!log.startsWith(PROGRAM_DATA_PREFIX)) continue\n const b64 = log.slice(PROGRAM_DATA_PREFIX.length)\n const event = tryDecodeEvent(coder, b64)\n if (event) events.push(event)\n }\n return events\n }\n\n // Full transaction response — parse both emit!() and emit_cpi!() events\n const tx = input\n\n // 1. Parse emit!() events from log messages\n const logs = tx.meta?.logMessages ?? []\n for (const log of logs) {\n if (!log.startsWith(PROGRAM_DATA_PREFIX)) continue\n const b64 = log.slice(PROGRAM_DATA_PREFIX.length)\n const event = tryDecodeEvent(coder, b64)\n if (event) events.push(event)\n }\n\n // 2. Parse emit_cpi!() events from inner instructions\n // These are self-CPI calls where the instruction data IS the event (discriminator + borsh data)\n const programId = config.programId.toBase58()\n\n // Build full account key list (static + loaded addresses for v0 txs)\n const staticKeys = tx.transaction.message.staticAccountKeys\n const loadedWritable = tx.meta?.loadedAddresses?.writable ?? []\n const loadedReadonly = tx.meta?.loadedAddresses?.readonly ?? []\n const allKeys = [...staticKeys, ...loadedWritable, ...loadedReadonly]\n\n for (const inner of tx.meta?.innerInstructions ?? []) {\n for (const ix of inner.instructions) {\n // Check if this inner instruction targets our program\n const ixProgramKey = allKeys[ix.programIdIndex]\n if (!ixProgramKey || ixProgramKey.toBase58() !== programId) continue\n\n // Try to decode the instruction data as an event\n // CPI event data may have an 8-byte Anchor instruction prefix before the event discriminator\n try {\n const bytes = bs58.decode(ix.data)\n\n // Try full data first (event discriminator at offset 0)\n const b64Full = utils.bytes.base64.encode(Buffer.from(bytes))\n const eventFull = tryDecodeEvent(coder, b64Full)\n if (eventFull) { events.push(eventFull); continue }\n\n // Try skipping 8-byte Anchor instruction prefix\n if (bytes.length > 8) {\n const b64Skip = utils.bytes.base64.encode(Buffer.from(bytes.slice(8)))\n const eventSkip = tryDecodeEvent(coder, b64Skip)\n if (eventSkip) events.push(eventSkip)\n }\n } catch {\n // Not an event instruction\n }\n }\n }\n\n return events\n}\n\nexport async function fetchAndParseTransaction(\n connection: Connection,\n signature: string,\n config: SdkConfig,\n): Promise<HodlEvent[]> {\n const tx = await connection.getTransaction(signature, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n return parseTransactionEvents(tx, config)\n}\n\nexport interface SubscriptionOptions {\n commitment?: 'processed' | 'confirmed' | 'finalized'\n onError?: (err: Error) => void\n}\n\nexport function subscribeToEvents(\n connection: Connection,\n config: SdkConfig,\n onEvent: (event: HodlEvent, slot: number, signature: string) => void,\n opts: SubscriptionOptions = {},\n): number {\n const commitment = opts.commitment ?? 'confirmed'\n const coder = new BorshCoder(IDL as any)\n\n return connection.onLogs(\n config.programId,\n ({ logs, err, signature }, context) => {\n if (err) {\n opts.onError?.(new Error(`Log subscription error: ${JSON.stringify(err)}`))\n return\n }\n // Real-time subscriptions only get log messages, not inner instructions.\n // This means only emit!() events are available via subscriptions.\n // emit_cpi!() events require fetching the full transaction.\n try {\n for (const log of logs) {\n if (!log.startsWith(PROGRAM_DATA_PREFIX)) continue\n const b64 = log.slice(PROGRAM_DATA_PREFIX.length)\n const event = tryDecodeEvent(coder, b64)\n if (event) {\n onEvent(event, context.slot, signature)\n }\n }\n } catch (e) {\n opts.onError?.(e instanceof Error ? e : new Error(String(e)))\n }\n },\n commitment,\n )\n}\n\nexport function unsubscribeFromEvents(\n connection: Connection,\n subscriptionId: number,\n): Promise<void> {\n return connection.removeOnLogsListener(subscriptionId)\n}\n\nexport function subscribeToTokenPurchased(\n connection: Connection,\n config: SdkConfig,\n onEvent: (data: TokenPurchasedEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n): number {\n return subscribeToEvents(connection, config, (event, slot, sig) => {\n if (event.name === 'tokenPurchased') onEvent(event.data, slot, sig)\n }, opts)\n}\n\nexport function subscribeToTokenSold(\n connection: Connection,\n config: SdkConfig,\n onEvent: (data: TokenSoldEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n): number {\n return subscribeToEvents(connection, config, (event, slot, sig) => {\n if (event.name === 'tokenSold') onEvent(event.data, slot, sig)\n }, opts)\n}\n\nexport function subscribeToTokenCreated(\n connection: Connection,\n config: SdkConfig,\n onEvent: (data: TokenCreatedEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n): number {\n return subscribeToEvents(connection, config, (event, slot, sig) => {\n if (event.name === 'tokenCreated') onEvent(event.data, slot, sig)\n }, opts)\n}\n\nexport function subscribeToAccrualClaimed(\n connection: Connection,\n config: SdkConfig,\n onEvent: (data: AccrualClaimedEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n): number {\n return subscribeToEvents(connection, config, (event, slot, sig) => {\n if (event.name === 'accrualClaimed') onEvent(event.data, slot, sig)\n }, opts)\n}\n\nexport function subscribeToPositionClosed(\n connection: Connection,\n config: SdkConfig,\n onEvent: (data: PositionClosedEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n): number {\n return subscribeToEvents(connection, config, (event, slot, sig) => {\n if (event.name === 'positionClosed') onEvent(event.data, slot, sig)\n }, opts)\n}\n","import {\n Connection,\n PublicKey,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n ComputeBudgetProgram,\n} from '@solana/web3.js'\n\nexport interface TxOptions {\n priorityFee?: number // microlamports per CU\n computeUnits?: number\n}\n\n/**\n * Build a versioned transaction with a fresh blockhash.\n * Returns an unsigned VersionedTransaction — caller signs and sends.\n */\nexport async function buildTransaction(\n connection: Connection,\n instructions: TransactionInstruction[],\n payer: PublicKey,\n opts: TxOptions = {},\n): Promise<VersionedTransaction> {\n const cuLimit = opts.computeUnits ?? 200_000\n const priorityFee = opts.priorityFee ?? 1_000\n\n const computeIxs: TransactionInstruction[] = [\n ComputeBudgetProgram.setComputeUnitLimit({ units: cuLimit }),\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports: priorityFee }),\n ]\n\n const { blockhash } = await connection.getLatestBlockhash('confirmed')\n\n const message = new TransactionMessage({\n payerKey: payer,\n recentBlockhash: blockhash,\n instructions: [...computeIxs, ...instructions],\n }).compileToV0Message()\n\n return new VersionedTransaction(message)\n}\n","import { Connection, PublicKey, VersionedTransaction } from '@solana/web3.js'\nimport type { SdkConfig, BuyParams, SellParams, CreateTokenParams, PoolState, Position, HodlEvent } from './types'\nimport { MAINNET_CONFIG } from './constants'\nimport { fetchPoolState, fetchPosition } from './accounts'\nimport {\n buildBuyInstruction,\n buildSellInstruction,\n buildCreateTokenInstruction,\n buildClaimAccruedInstruction,\n buildClosePositionInstruction,\n} from './instructions'\nimport { buildTransaction, type TxOptions } from './transaction'\nimport {\n subscribeToEvents as _subscribeToEvents,\n unsubscribeFromEvents,\n fetchAndParseTransaction as _fetchAndParseTransaction,\n type SubscriptionOptions,\n} from './events'\n\nexport class HodlClient {\n readonly connection: Connection\n readonly config: SdkConfig\n\n constructor({ connection, config }: { connection: Connection; config?: SdkConfig }) {\n this.connection = connection\n this.config = config ?? MAINNET_CONFIG\n }\n\n fetchPool(mint: PublicKey): Promise<PoolState> {\n return fetchPoolState(this.connection, mint, this.config)\n }\n\n fetchPosition(poolState: PublicKey, owner: PublicKey): Promise<Position> {\n return fetchPosition(this.connection, poolState, owner, this.config)\n }\n\n async buy(params: BuyParams & { mint: PublicKey; buyer: PublicKey }, opts?: TxOptions): Promise<VersionedTransaction> {\n const ix = await buildBuyInstruction({ ...params, connection: this.connection, config: this.config })\n return buildTransaction(this.connection, [ix], params.buyer, opts)\n }\n\n async sell(params: SellParams & { mint: PublicKey; seller: PublicKey }, opts?: TxOptions): Promise<VersionedTransaction> {\n const ix = await buildSellInstruction({ ...params, connection: this.connection, config: this.config })\n return buildTransaction(this.connection, [ix], params.seller, opts)\n }\n\n async createToken(params: CreateTokenParams & { creator: PublicKey; mint: PublicKey }, opts?: TxOptions): Promise<VersionedTransaction> {\n const ix = await buildCreateTokenInstruction({ ...params, connection: this.connection, config: this.config })\n return buildTransaction(this.connection, [ix], params.creator, opts)\n }\n\n async claimAccrued(params: { owner: PublicKey; poolState: PublicKey }, opts?: TxOptions): Promise<VersionedTransaction> {\n const ix = await buildClaimAccruedInstruction({ ...params, connection: this.connection, config: this.config })\n return buildTransaction(this.connection, [ix], params.owner, opts)\n }\n\n async closePosition(params: { owner: PublicKey; poolState: PublicKey; mint: PublicKey; userTokenAccount: PublicKey }, opts?: TxOptions): Promise<VersionedTransaction> {\n const ix = await buildClosePositionInstruction({ ...params, connection: this.connection, config: this.config })\n return buildTransaction(this.connection, [ix], params.owner, opts)\n }\n\n /**\n * Build a transaction from raw instructions. Fetches a fresh blockhash.\n * Sign the returned transaction, then send via connection.sendRawTransaction.\n */\n buildTransaction(instructions: Parameters<typeof buildTransaction>[1], payer: PublicKey, opts?: TxOptions): Promise<VersionedTransaction> {\n return buildTransaction(this.connection, instructions, payer, opts)\n }\n\n subscribeToEvents(\n onEvent: (event: HodlEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n ): number {\n return _subscribeToEvents(this.connection, this.config, onEvent, opts)\n }\n\n unsubscribe(subscriptionId: number): Promise<void> {\n return unsubscribeFromEvents(this.connection, subscriptionId)\n }\n\n fetchAndParseTransaction(signature: string): Promise<HodlEvent[]> {\n return _fetchAndParseTransaction(this.connection, signature, this.config)\n }\n}\n"]}
1
+ {"version":3,"sources":["../node_modules/safe-buffer/index.js","../node_modules/base-x/src/index.js","../node_modules/bs58/index.js","../src/constants.ts","../src/errors.ts","../src/pda.ts","../src/math.ts","../src/idl/hodl.json","../src/program.ts","../src/accounts.ts","../src/instructions.ts","../src/events.ts","../src/transaction.ts","../src/client.ts"],"names":["exports","Buffer","i","j","PublicKey","BN","claimable","AnchorProvider","Program","getAssociatedTokenAddressSync","TOKEN_PROGRAM_ID","ASSOCIATED_TOKEN_PROGRAM_ID","SystemProgram","SYSVAR_RENT_PUBKEY","SYSVAR_INSTRUCTIONS_PUBKEY","BorshCoder","bs58","utils","ComputeBudgetProgram","TransactionMessage","VersionedTransaction"],"mappings":"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","file":"index.cjs","sourcesContent":["/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return _Buffer.alloc(0) }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (psz < source.length) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = _Buffer.allocUnsafe(zeroes + (size - it4))\n vch.fill(0x00, 0, zeroes)\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","var basex = require('base-x')\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","import { PublicKey } from '@solana/web3.js'\nimport BN from 'bn.js'\n\nexport const BPS_DENOMINATOR = 10_000\n\nexport const PROGRAM_ID = new PublicKey('hodLrUfwyK3Z7Td5hdZhyojyznG1rqbHVex11y5s4yG')\nexport const PROTOCOL_AUTHORITY = new PublicKey('EFAquDGAHjkoPB6TGKVibD3BYhbFXNDjuXKpiBHdYzji')\n\nexport const VIRTUAL_SOL = new BN('30000000000')\nexport const TOTAL_SUPPLY = new BN('1000000000000000')\nexport const PROTOCOL_MINT_FEE = new BN('100000000')\nexport const DECIMALS = 6\n\nexport const SEEDS = {\n POOL: Buffer.from('pool'),\n VAULT_AUTHORITY: Buffer.from('vault_authority'),\n SOL_VAULT: Buffer.from('sol_vault'),\n POSITION: Buffer.from('position'),\n PROTOCOL_FEES: Buffer.from('protocol_fees'),\n EVENT_AUTHORITY: Buffer.from('__event_authority'),\n} as const\n\nexport const MAINNET_CONFIG = {\n programId: PROGRAM_ID,\n virtualSol: VIRTUAL_SOL,\n protocolAuthority: PROTOCOL_AUTHORITY,\n protocolMintFee: PROTOCOL_MINT_FEE,\n decimals: DECIMALS,\n totalSupply: TOTAL_SUPPLY,\n} as const\n\nexport const DEVNET_CONFIG = {\n programId: PROGRAM_ID,\n virtualSol: VIRTUAL_SOL,\n protocolAuthority: PROTOCOL_AUTHORITY,\n protocolMintFee: PROTOCOL_MINT_FEE,\n decimals: DECIMALS,\n totalSupply: TOTAL_SUPPLY,\n} as const\n\n/** Trade fee in basis points (25 bps = 0.25%). Only applies after migration threshold (85 SOL). */\nexport const TRADE_FEE_BPS = 25\n\n/** SOL threshold in lamports that triggers migration and fee activation (85 SOL). */\nexport const MIGRATION_SOL_THRESHOLD = new BN('85000000000')\n\n/** Allowed vest duration modes (in seconds). The program only accepts these values. */\nexport const VEST_DURATION = {\n ONE_MINUTE: 60,\n THIRTY_MINUTES: 1800,\n} as const\n\nexport type VestDuration = typeof VEST_DURATION[keyof typeof VEST_DURATION]\n\nexport const LIMITS = {\n NAME: { min: 1, max: 32 },\n SYMBOL: { min: 1, max: 16 },\n URI: { min: 10, max: 100 },\n DESCRIPTION: { min: 0, max: 200 },\n} as const\n","export class HodlError extends Error {\n constructor(public readonly code: number, message: string) {\n super(message)\n this.name = 'HodlError'\n }\n}\n\nexport const HODL_ERRORS: Record<number, string> = {\n 7005: 'Insufficient token reserves in vault',\n 7100: 'Arithmetic overflow',\n 7102: 'Division by zero or invalid division',\n 7104: 'Token calculation overflow',\n 7105: 'Token calculation underflow',\n 7200: 'Slippage exceeded: output below minimum threshold',\n 7312: 'Accrual calculation overflow',\n 7315: 'Position is not empty, must sell all tokens first',\n 7319: 'Invalid protocol authority',\n 7321: 'Position must have tokens to perform this operation',\n 7500: 'Position not owned by signer',\n 7505: 'SOL vault PDA derivation mismatch',\n 7601: 'Invalid vesting type',\n 7604: 'Invalid percentage value (must be 0-100)',\n 7901: 'Not authorized',\n 8014: 'Insufficient liquidity',\n 8018: 'vAMM is not active',\n 8020: 'Invalid amount',\n}\n\nfunction fromCode(code: number): HodlError | null {\n if (code in HODL_ERRORS) return new HodlError(code, HODL_ERRORS[code])\n return null\n}\n\n/**\n * Parse a HODL program error from any Solana error shape.\n *\n * Handles:\n * - SendTransactionError with InstructionError: [index, { Custom: code }]\n * - Anchor-style errors with error.errorCode.number\n * - Transaction logs containing \"Error Number: <code>\"\n * - Plain { code } objects\n */\nexport function parseHodlError(err: unknown): HodlError | null {\n if (!err || typeof err !== 'object') return null\n\n const e = err as Record<string, any>\n\n // 1. InstructionError: [index, { Custom: code }]\n // From SendTransactionError.transactionError or err.error\n const ixErr = e.InstructionError ?? e.error?.InstructionError\n ?? e.transactionError?.InstructionError\n if (Array.isArray(ixErr) && ixErr.length === 2) {\n const custom = ixErr[1]?.Custom\n if (typeof custom === 'number') {\n const result = fromCode(custom)\n if (result) return result\n }\n }\n\n // 2. Anchor errorCode.number (from AnchorError)\n const anchorCode = e.error?.errorCode?.number ?? e.errorCode?.number\n if (typeof anchorCode === 'number') {\n const result = fromCode(anchorCode)\n if (result) return result\n }\n\n // 3. Transaction logs: \"Error Number: 7601\"\n const logs: unknown[] = e.logs ?? e.transactionLogs ?? []\n if (Array.isArray(logs)) {\n for (const log of logs) {\n if (typeof log !== 'string') continue\n const match = log.match(/Error Number: (\\d+)/)\n if (match) {\n const result = fromCode(Number(match[1]))\n if (result) return result\n }\n }\n }\n\n // 4. Direct { code } property\n if ('code' in e && typeof e.code === 'number') {\n return fromCode(e.code)\n }\n\n return null\n}\n","import { PublicKey } from '@solana/web3.js'\nimport { SEEDS } from './constants'\n\nexport function getPoolStatePDA(mint: PublicKey, programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.POOL, mint.toBuffer()], programId)\n}\n\nexport function getVaultAuthorityPDA(poolState: PublicKey, programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.VAULT_AUTHORITY, poolState.toBuffer()], programId)\n}\n\nexport function getSolVaultPDA(poolState: PublicKey, programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.SOL_VAULT, poolState.toBuffer()], programId)\n}\n\nexport function getPositionPDA(poolState: PublicKey, owner: PublicKey, programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.POSITION, poolState.toBuffer(), owner.toBuffer()], programId)\n}\n\nexport function getProtocolFeesPDA(programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.PROTOCOL_FEES], programId)\n}\n\nexport function getEventAuthorityPDA(programId: PublicKey): [PublicKey, number] {\n return PublicKey.findProgramAddressSync([SEEDS.EVENT_AUTHORITY], programId)\n}\n","import BN from 'bn.js'\nimport { VIRTUAL_SOL } from './constants'\n\nconst ZERO = new BN(0)\nconst BPS = new BN(10_000)\n\n// Band logic from the program:\n// 40% tradable at 0-50M tokens sold, +5% per 50M band, 100% at 600M+\nconst BASE_TRADABLE_PCT = 40\nconst PCT_PER_BAND = 5\nconst BAND_SIZE = new BN('50000000000000') // 50M tokens × 10^6 decimals\nconst MAX_TRADABLE_PCT = 100\n\n/**\n * Calculate tokens out for a given SOL input using the vAMM constant product formula.\n * k = (vammRealSol + VIRTUAL_SOL) * vammTokens\n */\nexport function calculateBuyAmount(\n solIn: BN,\n vammRealSol: BN,\n vammTokens: BN,\n vammK: BN,\n): BN {\n if (solIn.isZero() || solIn.isNeg()) return ZERO\n const currentSolSide = vammRealSol.add(VIRTUAL_SOL)\n const newSolSide = currentSolSide.add(solIn)\n const newTokenSide = vammK.div(newSolSide)\n return vammTokens.sub(newTokenSide)\n}\n\n/**\n * Calculate SOL out for a given token input.\n */\nexport function calculateSellAmount(\n tokensIn: BN,\n vammRealSol: BN,\n vammTokens: BN,\n vammK: BN,\n): BN {\n if (tokensIn.isZero() || tokensIn.isNeg()) return ZERO\n const newTokenSide = vammTokens.add(tokensIn)\n const newRealSol = vammK.div(newTokenSide).sub(VIRTUAL_SOL)\n return vammRealSol.sub(newRealSol)\n}\n\n/**\n * Calculate SOL required to buy an exact number of tokens.\n * Inverse of calculateBuyAmount.\n */\nexport function calculateSolForExactTokens(\n tokensOut: BN,\n vammRealSol: BN,\n vammTokens: BN,\n vammK: BN,\n): BN {\n if (tokensOut.isZero() || tokensOut.isNeg()) return ZERO\n if (tokensOut.gte(vammTokens)) throw new Error('tokensOut exceeds available vAMM liquidity')\n const newTokenSide = vammTokens.sub(tokensOut)\n const newSolSide = vammK.div(newTokenSide)\n const currentSolSide = vammRealSol.add(VIRTUAL_SOL)\n return newSolSide.sub(currentSolSide)\n}\n\n/**\n * Apply slippage tolerance to a minimum output amount.\n * slippageBps: basis points, e.g. 100 = 1%\n */\nexport function applySlippage(amount: BN, slippageBps: number): BN {\n return amount.mul(new BN(10_000 - slippageBps)).div(BPS)\n}\n\n/**\n * Calculate the tradable/vaulted split for newly purchased tokens.\n *\n * Band logic (from the on-chain program):\n * 0–50M tokens sold: 40% tradable / 60% vaulted\n * each additional 50M band: +5% tradable\n * 600M+ tokens sold: 100% tradable / 0% vaulted\n *\n * After vest_duration has fully elapsed, all buys are 100% tradable.\n *\n * @param tokensOut tokens received from this buy\n * @param tokensSold cumulative tokens sold in the pool (before this buy)\n * @param bandSize band width in base token units (default 50M)\n */\nexport function calculateTradableVaultedSplit(\n tokensOut: BN,\n tokensSold: BN,\n bandSize: BN = BAND_SIZE,\n): { tradable: BN; vaulted: BN; tradablePct: number } {\n if (tokensOut.isZero()) return { tradable: ZERO, vaulted: ZERO, tradablePct: 0 }\n\n const bandIndex = bandSize.isZero() ? 0 : tokensSold.div(bandSize).toNumber()\n const tradablePct = Math.min(BASE_TRADABLE_PCT + PCT_PER_BAND * bandIndex, MAX_TRADABLE_PCT)\n const tradable = tokensOut.mul(new BN(tradablePct)).div(new BN(100))\n const vaulted = tokensOut.sub(tradable)\n\n return { tradable, vaulted, tradablePct }\n}\n\n/**\n * Calculate claimable tokens for a position at a given timestamp.\n *\n * Mirrors the on-chain logic exactly:\n * 1. update_position_accrual: vaulted tokens accrue linearly to tradable\n * 2. claim_accrued: claimable = new_tradable - tokens_transferred\n *\n * Handles both per-position accrual and global pool unlock.\n */\nexport function calculateClaimableTokens(\n tradableTokens: BN,\n vaultedTokens: BN,\n initialVaulted: BN,\n tokensTransferred: BN,\n entryTimestamp: BN,\n poolCreationTimestamp: BN,\n vestDuration: BN,\n currentTimestamp: BN,\n): BN {\n const totalTokens = tradableTokens.add(vaultedTokens)\n if (totalTokens.isZero()) return ZERO\n\n // Global unlock: if pool vest period has passed, everything is tradable\n const globalUnlockTime = poolCreationTimestamp.add(vestDuration)\n if (currentTimestamp.gte(globalUnlockTime)) {\n const claimable = totalTokens.sub(tokensTransferred)\n return claimable.isNeg() ? ZERO : claimable\n }\n\n // Per-position accrual\n if (initialVaulted.isZero() || vestDuration.isZero()) {\n const claimable = totalTokens.sub(tokensTransferred)\n return claimable.isNeg() ? ZERO : claimable\n }\n\n const elapsed = currentTimestamp.sub(entryTimestamp)\n if (elapsed.isNeg()) {\n // Before entry — only pre-existing tradable minus transferred\n const claimable = tradableTokens.sub(tokensTransferred)\n return claimable.isNeg() ? ZERO : claimable\n }\n\n // current_vaulted = initial_vaulted * (1 - elapsed / vest_duration)\n let currentVaulted: BN\n if (elapsed.gte(vestDuration)) {\n currentVaulted = ZERO\n } else {\n const remainingBps = BPS.sub(elapsed.mul(BPS).div(vestDuration))\n currentVaulted = initialVaulted.mul(remainingBps).div(BPS)\n }\n\n // Cap: vaulted can't exceed total tokens\n if (currentVaulted.gt(totalTokens)) {\n currentVaulted = totalTokens\n }\n\n const newTradable = totalTokens.sub(currentVaulted)\n const claimable = newTradable.sub(tokensTransferred)\n return claimable.isNeg() ? ZERO : claimable\n}\n\n/**\n * @deprecated Use calculateClaimableTokens instead. This function doesn't account for\n * the full position state and produces incorrect results when tokensTransferred\n * includes the initial tradable portion.\n */\nexport function calculateAccruedTokens(\n initialVaulted: BN,\n tokensTransferred: BN,\n entryTimestamp: BN,\n vestDuration: BN,\n currentTimestamp: BN,\n): BN {\n if (initialVaulted.isZero()) return ZERO\n const remaining = initialVaulted.sub(tokensTransferred)\n if (vestDuration.isZero()) return remaining\n const elapsed = currentTimestamp.sub(entryTimestamp)\n if (elapsed.isNeg()) return ZERO\n if (elapsed.gte(vestDuration)) return remaining\n const totalAccrued = initialVaulted.mul(elapsed).div(vestDuration)\n const claimable = totalAccrued.sub(tokensTransferred)\n return claimable.isNeg() ? ZERO : claimable\n}\n\n/**\n * Spot price: how much SOL (in lamports) one whole token costs at the current curve position.\n * Returns price scaled by 1e6 for precision (i.e. micro-lamports per base token unit).\n */\nexport function calculateSpotPrice(\n vammRealSol: BN,\n vammTokens: BN,\n): BN {\n if (vammTokens.isZero()) return ZERO\n return vammRealSol.add(VIRTUAL_SOL).mul(new BN(1_000_000)).div(vammTokens)\n}\n\n/**\n * Price impact of a buy, in basis points.\n * Compares the effective price of the trade to the current spot price.\n */\nexport function calculatePriceImpact(\n solIn: BN,\n tokensOut: BN,\n vammRealSol: BN,\n vammTokens: BN,\n): number {\n if (solIn.isZero() || tokensOut.isZero() || vammTokens.isZero()) return 0\n const solSide = vammRealSol.add(VIRTUAL_SOL)\n const numerator = solIn.mul(vammTokens).mul(BPS)\n const denominator = tokensOut.mul(solSide)\n if (denominator.isZero()) return 0\n const ratioBps = numerator.div(denominator)\n return ratioBps.sub(BPS).toNumber()\n}\n","{\n \"address\": \"hodLrUfwyK3Z7Td5hdZhyojyznG1rqbHVex11y5s4yG\",\n \"metadata\": {\n \"name\": \"hodl\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\"\n },\n \"instructions\": [\n {\n \"name\": \"buy\",\n \"docs\": [\n \"Buy tokens from the vAMM\",\n \"\",\n \"Tokens are split into tradable (immediate) and vaulted (accrue linearly).\",\n \"Allocation is based on token-amount range bands: 40/60 at 0-50M, +5% per 50M band, 100/0 at 600M+.\",\n \"After vest_duration passes, all buys are 100% tradable.\"\n ],\n \"discriminator\": [\n 102,\n 6,\n 61,\n 18,\n 1,\n 218,\n 235,\n 234\n ],\n \"accounts\": [\n {\n \"name\": \"buyer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_state\",\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\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_vault\",\n \"writable\": true\n },\n {\n \"name\": \"vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"buyer_token_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n },\n {\n \"kind\": \"const\",\n \"value\": [\n 6,\n 221,\n 246,\n 225,\n 215,\n 101,\n 161,\n 147,\n 217,\n 203,\n 225,\n 70,\n 206,\n 235,\n 121,\n 172,\n 28,\n 180,\n 133,\n 237,\n 95,\n 91,\n 55,\n 145,\n 58,\n 140,\n 245,\n 133,\n 126,\n 255,\n 0,\n 169\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140,\n 151,\n 37,\n 143,\n 78,\n 36,\n 137,\n 241,\n 187,\n 61,\n 16,\n 41,\n 20,\n 142,\n 13,\n 131,\n 11,\n 90,\n 19,\n 153,\n 218,\n 255,\n 16,\n 132,\n 4,\n 142,\n 123,\n 216,\n 219,\n 233,\n 248,\n 89\n ]\n }\n }\n },\n {\n \"name\": \"pool_sol_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 111,\n 108,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\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 \"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_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"buyer\"\n }\n ]\n }\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"sol_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_tokens_out\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claim_accrued\",\n \"docs\": [\n \"Claim accrued tokens\",\n \"Transfers tokens that have accrued from vaulted to tradable from vault to wallet\"\n ],\n \"discriminator\": [\n 209,\n 92,\n 30,\n 216,\n 89,\n 249,\n 122,\n 243\n ],\n \"accounts\": [\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"pool_state\",\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\": \"account\",\n \"path\": \"pool_state.mint\",\n \"account\": \"PoolState\"\n }\n ]\n }\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_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"token_vault\",\n \"writable\": true\n },\n {\n \"name\": \"vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"user_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_position\",\n \"docs\": [\n \"Close an empty position account and reclaim rent\"\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 \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_state\",\n \"writable\": 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_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"owner\"\n }\n ]\n }\n },\n {\n \"name\": \"user_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_token\",\n \"docs\": [\n \"Create a new token and initialize vAMM pool\"\n ],\n \"discriminator\": [\n 84,\n 52,\n 204,\n 228,\n 24,\n 140,\n 234,\n 75\n ],\n \"accounts\": [\n {\n \"name\": \"creator\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_authority\"\n },\n {\n \"name\": \"mint\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_state\",\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\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\n },\n {\n \"name\": \"token_vault\",\n \"writable\": true\n },\n {\n \"name\": \"vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"metadata\",\n \"writable\": true\n },\n {\n \"name\": \"pool_sol_account\",\n \"writable\": true\n },\n {\n \"name\": \"protocol_fee_wallet\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\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 115\n ]\n }\n ]\n }\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 \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n },\n {\n \"name\": \"metadata_program\"\n },\n {\n \"name\": \"sysvar_instructions\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"name\": \"uri\",\n \"type\": \"string\"\n },\n {\n \"name\": \"pool_description\",\n \"type\": \"string\"\n },\n {\n \"name\": \"vest_duration\",\n \"type\": \"i64\"\n }\n ]\n },\n {\n \"name\": \"emergency_withdraw_sol\",\n \"docs\": [\n \"Emergency withdraw SOL from a pool's sol_vault\"\n ],\n \"discriminator\": [\n 219,\n 156,\n 123,\n 176,\n 91,\n 105,\n 30,\n 160\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_state\"\n },\n {\n \"name\": \"sol_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 111,\n 108,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"sell\",\n \"docs\": [\n \"Sell tokens back to the vAMM\",\n \"If sell_percentage is provided, it overrides token_amount\"\n ],\n \"discriminator\": [\n 51,\n 230,\n 133,\n 164,\n 1,\n 127,\n 131,\n 173\n ],\n \"accounts\": [\n {\n \"name\": \"seller\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"pool_state\",\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\": \"account\",\n \"path\": \"mint\"\n }\n ]\n }\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_state\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"seller\"\n }\n ]\n }\n },\n {\n \"name\": \"token_vault\",\n \"writable\": true\n },\n {\n \"name\": \"vault_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 118,\n 97,\n 117,\n 108,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"seller_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"pool_sol_account\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 115,\n 111,\n 108,\n 95,\n 118,\n 97,\n 117,\n 108,\n 116\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"pool_state\"\n }\n ]\n }\n },\n {\n \"name\": \"mint\"\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95,\n 95,\n 101,\n 118,\n 101,\n 110,\n 116,\n 95,\n 97,\n 117,\n 116,\n 104,\n 111,\n 114,\n 105,\n 116,\n 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"token_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_sol_out\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sell_percentage\",\n \"type\": {\n \"option\": \"u8\"\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_protocol_fees\",\n \"docs\": [\n \"Withdraw accumulated protocol fees\"\n ],\n \"discriminator\": [\n 11,\n 68,\n 165,\n 98,\n 18,\n 208,\n 134,\n 73\n ],\n \"accounts\": [\n {\n \"name\": \"authority\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"protocol_fee_wallet\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\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 115\n ]\n }\n ]\n }\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"PoolState\",\n \"discriminator\": [\n 247,\n 237,\n 227,\n 245,\n 215,\n 195,\n 222,\n 70\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 \"events\": [\n {\n \"name\": \"AccrualClaimed\",\n \"discriminator\": [\n 86,\n 99,\n 51,\n 211,\n 226,\n 48,\n 235,\n 238\n ]\n },\n {\n \"name\": \"PositionClosed\",\n \"discriminator\": [\n 157,\n 163,\n 227,\n 228,\n 13,\n 97,\n 138,\n 121\n ]\n },\n {\n \"name\": \"TokenCreated\",\n \"discriminator\": [\n 236,\n 19,\n 41,\n 255,\n 130,\n 78,\n 147,\n 172\n ]\n },\n {\n \"name\": \"TokenPurchased\",\n \"discriminator\": [\n 3,\n 73,\n 186,\n 50,\n 15,\n 181,\n 213,\n 37\n ]\n },\n {\n \"name\": \"TokenSold\",\n \"discriminator\": [\n 88,\n 61,\n 1,\n 247,\n 185,\n 6,\n 252,\n 86\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 7005,\n \"name\": \"InsufficientTokens\",\n \"msg\": \"Insufficient token reserves in vault\"\n },\n {\n \"code\": 7100,\n \"name\": \"ArithmeticOverflow\",\n \"msg\": \"Arithmetic overflow\"\n },\n {\n \"code\": 7102,\n \"name\": \"DivisionError\",\n \"msg\": \"Division by zero or invalid division\"\n },\n {\n \"code\": 7104,\n \"name\": \"TokenOverflow\",\n \"msg\": \"Token calculation overflow\"\n },\n {\n \"code\": 7105,\n \"name\": \"TokenUnderflow\",\n \"msg\": \"Token calculation underflow\"\n },\n {\n \"code\": 7200,\n \"name\": \"SlippageExceeded\",\n \"msg\": \"Slippage exceeded: output below minimum threshold\"\n },\n {\n \"code\": 7312,\n \"name\": \"AccrualCalculationOverflow\",\n \"msg\": \"Accrual calculation overflow\"\n },\n {\n \"code\": 7315,\n \"name\": \"PositionNotEmpty\",\n \"msg\": \"Position is not empty, must sell all tokens first\"\n },\n {\n \"code\": 7319,\n \"name\": \"InvalidProtocolAuthority\",\n \"msg\": \"Invalid protocol authority - must match PROTOCOL_AUTHORITY constant\"\n },\n {\n \"code\": 7321,\n \"name\": \"MustHaveUnlockedPortion\",\n \"msg\": \"Position must have tokens to perform this operation\"\n },\n {\n \"code\": 7500,\n \"name\": \"PositionNotOwnedBySigner\",\n \"msg\": \"Position not owned by signer\"\n },\n {\n \"code\": 7505,\n \"name\": \"InvalidSolVaultPDA\",\n \"msg\": \"SOL vault PDA derivation mismatch\"\n },\n {\n \"code\": 7601,\n \"name\": \"InvalidVestingType\",\n \"msg\": \"Invalid vesting type\"\n },\n {\n \"code\": 7604,\n \"name\": \"InvalidPercentage\",\n \"msg\": \"Invalid percentage value (must be 0-100)\"\n },\n {\n \"code\": 7901,\n \"name\": \"NotAuthorized\",\n \"msg\": \"Not authorized\"\n },\n {\n \"code\": 8014,\n \"name\": \"InsufficientLiquidity\",\n \"msg\": \"Insufficient liquidity\"\n },\n {\n \"code\": 8018,\n \"name\": \"VammNotActive\",\n \"msg\": \"vAMM is not active\"\n },\n {\n \"code\": 8020,\n \"name\": \"InvalidAmount\",\n \"msg\": \"Invalid amount\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AccrualClaimed\",\n \"docs\": [\n \"Event emitted when accrued tokens are claimed\"\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\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"tokens_claimed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_tradable_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"remaining_vaulted_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_transferred\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"initial_vaulted\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolMetadata\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"name\",\n \"docs\": [\n \"Optional pool name\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"description\",\n \"docs\": [\n \"Optional pool description\"\n ],\n \"type\": \"string\"\n },\n {\n \"name\": \"version\",\n \"docs\": [\n \"Pool version\"\n ],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PoolState\",\n \"docs\": [\n \"Pool state account - main state for a vAMM pool\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"authority\",\n \"docs\": [\n \"Pool authority (creator)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Token mint for this pool\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_vault\",\n \"docs\": [\n \"Token vault (holds unsold tokens)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vault_authority\",\n \"docs\": [\n \"Vault authority (PDA)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"sol_vault\",\n \"docs\": [\n \"Pool SOL vault (holds raised SOL)\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"total_positions\",\n \"docs\": [\n \"Total number of positions in this pool\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creation_timestamp\",\n \"docs\": [\n \"Pool creation timestamp (Unix timestamp)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"last_update_timestamp\",\n \"docs\": [\n \"Last update timestamp (Unix timestamp)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"metadata\",\n \"docs\": [\n \"Pool metadata\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"PoolMetadata\"\n }\n }\n },\n {\n \"name\": \"vest_duration\",\n \"docs\": [\n \"=== ACCRUAL SYSTEM FIELDS ===\",\n \"Dev-set unlock duration in seconds (applies to all traders)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"next_position_number\",\n \"docs\": [\n \"Next position number to assign (sequential counter for display/identity)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_active\",\n \"docs\": [\n \"=== VAMM STATE ===\",\n \"vAMM is active for trading\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"vamm_real_sol\",\n \"docs\": [\n \"Real SOL in the vAMM\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_tokens\",\n \"docs\": [\n \"Real tokens in the vAMM\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_k\",\n \"docs\": [\n \"The invariant k (set at creation, never changes)\",\n \"k = (vamm_real_sol + VIRTUAL_SOL) * vamm_tokens\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"tokens_sold\",\n \"docs\": [\n \"Cumulative tokens bought from vAMM (increases on buy, decreases on sell)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_reserved_for_claims\",\n \"docs\": [\n \"Vault tokens reserved for position claims (not available for vAMM liquidity)\",\n \"Incremented on buy (vaulted portion), decremented on claim_accrued\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"migration_complete\",\n \"docs\": [\n \"One-way flag: set to true once vamm_real_sol >= MIGRATION_SOL_THRESHOLD, never reverts\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"total_fees_sol\",\n \"docs\": [\n \"Cumulative SOL fees collected from buys (lamports)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_fees_tokens\",\n \"docs\": [\n \"Cumulative token fees collected from sells\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bump_vault_auth\",\n \"docs\": [\n \"Bump seeds for PDAs\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"bump_pool\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"docs\": [\n \"Position in a vAMM pool\",\n \"Tokens split into tradable (immediate) and vaulted (accrue linearly over vest_duration)\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner's public key\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"pool\",\n \"docs\": [\n \"Pool this position belongs to\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"tradable_tokens\",\n \"docs\": [\n \"Tradable tokens (can be sold immediately)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vaulted_tokens\",\n \"docs\": [\n \"Vaulted tokens (accruing linearly to tradable)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"sol_spent\",\n \"docs\": [\n \"SOL spent on this position\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_transferred\",\n \"docs\": [\n \"Cumulative tokens transferred to wallet (for claim_accrued tracking)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"entry_timestamp\",\n \"docs\": [\n \"Entry timestamp (for accrual calculation)\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"initial_vaulted\",\n \"docs\": [\n \"Cumulative initial vaulted tokens from all buys (for accrual calculation)\",\n \"This tracks the total vaulted amount at buy time, used to calculate accrual progress\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"position_number\",\n \"docs\": [\n \"Position number in the pool (sequential counter for display/identity)\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"last_update_timestamp\",\n \"docs\": [\n \"Last update timestamp\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionClosed\",\n \"docs\": [\n \"Event emitted when a position account is closed\"\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\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"rent_reclaimed\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenCreated\",\n \"docs\": [\n \"Event emitted when a new token and vAMM pool is created\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"creator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"name\": \"total_supply\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"initial_k\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"vamm_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vest_duration\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"creation_timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenPurchased\",\n \"docs\": [\n \"Event emitted when tokens are bought\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"buyer\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"sol_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_received\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_real_sol\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_sold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_number\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vest_duration\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"unlock_time_seconds\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"tradable_tokens\",\n \"docs\": [\n \"Position state after buy\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vaulted_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sol_spent\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_transferred\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"initial_vaulted\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenSold\",\n \"docs\": [\n \"Event emitted when tokens are sold\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"seller\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"pool\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sol_received\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_real_sol\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vamm_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_sold\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position_number\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"vest_duration\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"unlock_time_seconds\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"tradable_tokens\",\n \"docs\": [\n \"Position state after sell\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"vaulted_tokens\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sol_spent\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"tokens_transferred\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"initial_vaulted\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"timestamp\",\n \"type\": \"i64\"\n }\n ]\n }\n }\n ]\n}","import { Connection, PublicKey } from '@solana/web3.js'\nimport { Program, AnchorProvider } from '@coral-xyz/anchor'\nimport type { Hodl } from './idl/hodl'\nimport IDL from './idl/hodl.json'\n\nconst DUMMY_WALLET = {\n publicKey: PublicKey.default,\n signTransaction: async <T>(tx: T): Promise<T> => tx,\n signAllTransactions: async <T>(txs: T[]): Promise<T[]> => txs,\n}\n\nexport function getProgram(connection: Connection): Program<Hodl> {\n const provider = new AnchorProvider(connection, DUMMY_WALLET as any, { commitment: 'confirmed' })\n return new Program<Hodl>(IDL as unknown as Hodl, provider)\n}\n","import { Connection, PublicKey } from '@solana/web3.js'\nimport type { PoolState, Position, SdkConfig } from './types'\nimport { getPoolStatePDA, getPositionPDA } from './pda'\nimport { getProgram } from './program'\n\nexport async function fetchPoolState(\n connection: Connection,\n mint: PublicKey,\n config: SdkConfig,\n): Promise<PoolState> {\n const program = getProgram(connection)\n const [poolStatePDA] = getPoolStatePDA(mint, config.programId)\n return program.account.poolState.fetch(poolStatePDA) as unknown as PoolState\n}\n\nexport async function fetchPosition(\n connection: Connection,\n poolState: PublicKey,\n owner: PublicKey,\n config: SdkConfig,\n): Promise<Position> {\n const program = getProgram(connection)\n const [positionPDA] = getPositionPDA(poolState, owner, config.programId)\n return program.account.position.fetch(positionPDA) as unknown as Position\n}\n\nexport async function fetchPoolStateByAddress(\n connection: Connection,\n poolStatePDA: PublicKey,\n): Promise<PoolState> {\n const program = getProgram(connection)\n return program.account.poolState.fetch(poolStatePDA) as unknown as PoolState\n}\n","import {\n Connection,\n PublicKey,\n TransactionInstruction,\n SystemProgram,\n SYSVAR_RENT_PUBKEY,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n} from '@solana/web3.js'\nimport { getAssociatedTokenAddressSync, TOKEN_PROGRAM_ID, ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport type { SdkConfig, BuyParams, SellParams, CreateTokenParams } from './types'\n\nimport {\n getPoolStatePDA,\n getVaultAuthorityPDA,\n getSolVaultPDA,\n getPositionPDA,\n getEventAuthorityPDA,\n getProtocolFeesPDA,\n} from './pda'\nimport { getProgram } from './program'\n\nconst METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s')\n\nfunction getMetadataPDA(mint: PublicKey): PublicKey {\n const [pda] = PublicKey.findProgramAddressSync(\n [Buffer.from('metadata'), METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer()],\n METADATA_PROGRAM_ID,\n )\n return pda\n}\n\nexport async function buildBuyInstruction(params: BuyParams & {\n buyer: PublicKey\n mint: PublicKey\n connection: Connection\n config: SdkConfig\n}): Promise<TransactionInstruction> {\n const { buyer, mint, solAmount, minTokensOut, connection, config } = params\n const program = getProgram(connection)\n\n const [poolState] = getPoolStatePDA(mint, config.programId)\n const [vaultAuthority] = getVaultAuthorityPDA(poolState, config.programId)\n const tokenVault = getAssociatedTokenAddressSync(mint, vaultAuthority, true)\n const buyerTokenAccount = getAssociatedTokenAddressSync(mint, buyer)\n const [poolSolAccount] = getSolVaultPDA(poolState, config.programId)\n const [position] = getPositionPDA(poolState, buyer, config.programId)\n const [eventAuthority] = getEventAuthorityPDA(config.programId)\n\n return program.methods\n .buy(solAmount, minTokensOut)\n .accountsPartial({\n buyer,\n poolState,\n tokenVault,\n vaultAuthority,\n buyerTokenAccount,\n poolSolAccount,\n mint,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n position,\n eventAuthority,\n program: config.programId,\n })\n .instruction()\n}\n\nexport async function buildSellInstruction(params: SellParams & {\n seller: PublicKey\n mint: PublicKey\n connection: Connection\n config: SdkConfig\n}): Promise<TransactionInstruction> {\n const { seller, mint, tokenAmount, minSolOut, sellPercentage, connection, config } = params\n const program = getProgram(connection)\n\n const [poolState] = getPoolStatePDA(mint, config.programId)\n const [vaultAuthority] = getVaultAuthorityPDA(poolState, config.programId)\n const tokenVault = getAssociatedTokenAddressSync(mint, vaultAuthority, true)\n const sellerTokenAccount = getAssociatedTokenAddressSync(mint, seller)\n const [poolSolAccount] = getSolVaultPDA(poolState, config.programId)\n const [position] = getPositionPDA(poolState, seller, config.programId)\n const [eventAuthority] = getEventAuthorityPDA(config.programId)\n\n return program.methods\n .sell(tokenAmount, minSolOut, sellPercentage ?? null)\n .accountsPartial({\n seller,\n poolState,\n position,\n tokenVault,\n vaultAuthority,\n sellerTokenAccount,\n poolSolAccount,\n mint,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n eventAuthority,\n program: config.programId,\n })\n .instruction()\n}\n\nexport async function buildCreateTokenInstruction(params: CreateTokenParams & {\n creator: PublicKey\n mint: PublicKey\n connection: Connection\n config: SdkConfig\n}): Promise<TransactionInstruction> {\n const { creator, mint, name, symbol, uri, poolDescription, vestDuration, connection, config } = params\n const program = getProgram(connection)\n\n const [poolState] = getPoolStatePDA(mint, config.programId)\n const [vaultAuthority] = getVaultAuthorityPDA(poolState, config.programId)\n const tokenVault = getAssociatedTokenAddressSync(mint, vaultAuthority, true)\n const metadata = getMetadataPDA(mint)\n const [poolSolAccount] = getSolVaultPDA(poolState, config.programId)\n const [protocolFeeWallet] = getProtocolFeesPDA(config.programId)\n const [eventAuthority] = getEventAuthorityPDA(config.programId)\n\n return program.methods\n .createToken(name, symbol, uri, poolDescription, vestDuration)\n .accountsPartial({\n creator,\n protocolAuthority: config.protocolAuthority,\n mint,\n poolState,\n tokenVault,\n vaultAuthority,\n metadata,\n poolSolAccount,\n protocolFeeWallet,\n tokenProgram: TOKEN_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n metadataProgram: METADATA_PROGRAM_ID,\n sysvarInstructions: SYSVAR_INSTRUCTIONS_PUBKEY,\n eventAuthority,\n program: config.programId,\n })\n .instruction()\n}\n\nexport async function buildClaimAccruedInstruction(params: {\n owner: PublicKey\n poolState: PublicKey\n connection: Connection\n config: SdkConfig\n}): Promise<TransactionInstruction> {\n const { owner, poolState, connection, config } = params\n const program = getProgram(connection)\n\n // Fetch pool state to get mint — needed for token vault and user ATA derivation\n const poolData = await program.account.poolState.fetch(poolState)\n const mint = poolData.mint\n\n const [vaultAuthority] = getVaultAuthorityPDA(poolState, config.programId)\n const tokenVault = getAssociatedTokenAddressSync(mint, vaultAuthority, true)\n const userTokenAccount = getAssociatedTokenAddressSync(mint, owner)\n const [position] = getPositionPDA(poolState, owner, config.programId)\n const [eventAuthority] = getEventAuthorityPDA(config.programId)\n\n return program.methods\n .claimAccrued()\n .accountsPartial({\n owner,\n poolState,\n position,\n tokenVault,\n vaultAuthority,\n userTokenAccount,\n tokenProgram: TOKEN_PROGRAM_ID,\n eventAuthority,\n program: config.programId,\n })\n .instruction()\n}\n\nexport async function buildClosePositionInstruction(params: {\n owner: PublicKey\n poolState: PublicKey\n mint: PublicKey\n userTokenAccount: PublicKey\n connection: Connection\n config: SdkConfig\n}): Promise<TransactionInstruction> {\n const { owner, poolState, mint, userTokenAccount, connection, config } = params\n const program = getProgram(connection)\n\n const [position] = getPositionPDA(poolState, owner, config.programId)\n const [eventAuthority] = getEventAuthorityPDA(config.programId)\n\n return program.methods\n .closePosition()\n .accountsPartial({\n owner,\n poolState,\n position,\n userTokenAccount,\n mint,\n tokenProgram: TOKEN_PROGRAM_ID,\n systemProgram: SystemProgram.programId,\n eventAuthority,\n program: config.programId,\n })\n .instruction()\n}\n","import { Connection } from '@solana/web3.js'\nimport { BorshCoder, utils } from '@coral-xyz/anchor'\nimport bs58 from 'bs58'\nimport type { VersionedTransactionResponse } from '@solana/web3.js'\nimport type {\n HodlEvent,\n SdkConfig,\n TokenPurchasedEvent,\n TokenSoldEvent,\n TokenCreatedEvent,\n AccrualClaimedEvent,\n PositionClosedEvent,\n} from './types'\nimport IDL from './idl/hodl.json'\n\nconst PROGRAM_DATA_PREFIX = 'Program data: '\n\n/** Convert PascalCase IDL event name to camelCase for SDK types */\nfunction toCamelCase(name: string): string {\n return name.charAt(0).toLowerCase() + name.slice(1)\n}\n\n/** Convert snake_case keys to camelCase (one level deep) */\nfunction snakeToCamelKeys(obj: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = {}\n for (const [key, value] of Object.entries(obj)) {\n const camelKey = key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())\n result[camelKey] = value\n }\n return result\n}\n\nfunction tryDecodeEvent(coder: BorshCoder, data: string): HodlEvent | null {\n try {\n const event = coder.events.decode(data)\n if (event) {\n return {\n name: toCamelCase(event.name),\n data: snakeToCamelKeys(event.data),\n } as HodlEvent\n }\n } catch {\n // Not one of our events\n }\n return null\n}\n\n/**\n * Parse events from a full transaction response.\n *\n * Handles two event emission patterns:\n * 1. emit!() — event data appears as \"Program data: <base64>\" in log messages\n * 2. emit_cpi!() — event data is the instruction data of a self-CPI (inner instruction)\n *\n * Anchor's EventParser only handles #1 and fails on #2 due to CPI depth tracking.\n */\nexport function parseTransactionEvents(tx: VersionedTransactionResponse | null, config: SdkConfig): HodlEvent[]\nexport function parseTransactionEvents(logs: string[], config: SdkConfig): HodlEvent[]\nexport function parseTransactionEvents(\n input: VersionedTransactionResponse | string[] | null,\n config: SdkConfig,\n): HodlEvent[] {\n if (!input) return []\n\n const coder = new BorshCoder(IDL as any)\n const events: HodlEvent[] = []\n\n // If given raw logs (string[]), can only parse emit!() events\n if (Array.isArray(input)) {\n for (const log of input) {\n if (!log.startsWith(PROGRAM_DATA_PREFIX)) continue\n const b64 = log.slice(PROGRAM_DATA_PREFIX.length)\n const event = tryDecodeEvent(coder, b64)\n if (event) events.push(event)\n }\n return events\n }\n\n // Full transaction response — parse both emit!() and emit_cpi!() events\n const tx = input\n\n // 1. Parse emit!() events from log messages\n const logs = tx.meta?.logMessages ?? []\n for (const log of logs) {\n if (!log.startsWith(PROGRAM_DATA_PREFIX)) continue\n const b64 = log.slice(PROGRAM_DATA_PREFIX.length)\n const event = tryDecodeEvent(coder, b64)\n if (event) events.push(event)\n }\n\n // 2. Parse emit_cpi!() events from inner instructions\n // These are self-CPI calls where the instruction data IS the event (discriminator + borsh data)\n const programId = config.programId.toBase58()\n\n // Build full account key list (static + loaded addresses for v0 txs)\n const staticKeys = tx.transaction.message.staticAccountKeys\n const loadedWritable = tx.meta?.loadedAddresses?.writable ?? []\n const loadedReadonly = tx.meta?.loadedAddresses?.readonly ?? []\n const allKeys = [...staticKeys, ...loadedWritable, ...loadedReadonly]\n\n for (const inner of tx.meta?.innerInstructions ?? []) {\n for (const ix of inner.instructions) {\n // Check if this inner instruction targets our program\n const ixProgramKey = allKeys[ix.programIdIndex]\n if (!ixProgramKey || ixProgramKey.toBase58() !== programId) continue\n\n // Try to decode the instruction data as an event\n // CPI event data may have an 8-byte Anchor instruction prefix before the event discriminator\n try {\n const bytes = bs58.decode(ix.data)\n\n // Try full data first (event discriminator at offset 0)\n const b64Full = utils.bytes.base64.encode(Buffer.from(bytes))\n const eventFull = tryDecodeEvent(coder, b64Full)\n if (eventFull) { events.push(eventFull); continue }\n\n // Try skipping 8-byte Anchor instruction prefix\n if (bytes.length > 8) {\n const b64Skip = utils.bytes.base64.encode(Buffer.from(bytes.slice(8)))\n const eventSkip = tryDecodeEvent(coder, b64Skip)\n if (eventSkip) events.push(eventSkip)\n }\n } catch {\n // Not an event instruction\n }\n }\n }\n\n return events\n}\n\nexport async function fetchAndParseTransaction(\n connection: Connection,\n signature: string,\n config: SdkConfig,\n): Promise<HodlEvent[]> {\n const tx = await connection.getTransaction(signature, {\n commitment: 'confirmed',\n maxSupportedTransactionVersion: 0,\n })\n return parseTransactionEvents(tx, config)\n}\n\nexport interface SubscriptionOptions {\n commitment?: 'processed' | 'confirmed' | 'finalized'\n onError?: (err: Error) => void\n}\n\nexport function subscribeToEvents(\n connection: Connection,\n config: SdkConfig,\n onEvent: (event: HodlEvent, slot: number, signature: string) => void,\n opts: SubscriptionOptions = {},\n): number {\n const commitment = opts.commitment ?? 'confirmed'\n const coder = new BorshCoder(IDL as any)\n\n return connection.onLogs(\n config.programId,\n ({ logs, err, signature }, context) => {\n if (err) {\n opts.onError?.(new Error(`Log subscription error: ${JSON.stringify(err)}`))\n return\n }\n // Real-time subscriptions only get log messages, not inner instructions.\n // This means only emit!() events are available via subscriptions.\n // emit_cpi!() events require fetching the full transaction.\n try {\n for (const log of logs) {\n if (!log.startsWith(PROGRAM_DATA_PREFIX)) continue\n const b64 = log.slice(PROGRAM_DATA_PREFIX.length)\n const event = tryDecodeEvent(coder, b64)\n if (event) {\n onEvent(event, context.slot, signature)\n }\n }\n } catch (e) {\n opts.onError?.(e instanceof Error ? e : new Error(String(e)))\n }\n },\n commitment,\n )\n}\n\nexport function unsubscribeFromEvents(\n connection: Connection,\n subscriptionId: number,\n): Promise<void> {\n return connection.removeOnLogsListener(subscriptionId)\n}\n\nexport function subscribeToTokenPurchased(\n connection: Connection,\n config: SdkConfig,\n onEvent: (data: TokenPurchasedEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n): number {\n return subscribeToEvents(connection, config, (event, slot, sig) => {\n if (event.name === 'tokenPurchased') onEvent(event.data, slot, sig)\n }, opts)\n}\n\nexport function subscribeToTokenSold(\n connection: Connection,\n config: SdkConfig,\n onEvent: (data: TokenSoldEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n): number {\n return subscribeToEvents(connection, config, (event, slot, sig) => {\n if (event.name === 'tokenSold') onEvent(event.data, slot, sig)\n }, opts)\n}\n\nexport function subscribeToTokenCreated(\n connection: Connection,\n config: SdkConfig,\n onEvent: (data: TokenCreatedEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n): number {\n return subscribeToEvents(connection, config, (event, slot, sig) => {\n if (event.name === 'tokenCreated') onEvent(event.data, slot, sig)\n }, opts)\n}\n\nexport function subscribeToAccrualClaimed(\n connection: Connection,\n config: SdkConfig,\n onEvent: (data: AccrualClaimedEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n): number {\n return subscribeToEvents(connection, config, (event, slot, sig) => {\n if (event.name === 'accrualClaimed') onEvent(event.data, slot, sig)\n }, opts)\n}\n\nexport function subscribeToPositionClosed(\n connection: Connection,\n config: SdkConfig,\n onEvent: (data: PositionClosedEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n): number {\n return subscribeToEvents(connection, config, (event, slot, sig) => {\n if (event.name === 'positionClosed') onEvent(event.data, slot, sig)\n }, opts)\n}\n","import {\n Connection,\n PublicKey,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n ComputeBudgetProgram,\n} from '@solana/web3.js'\n\nexport interface TxOptions {\n priorityFee?: number // microlamports per CU\n computeUnits?: number\n}\n\n/**\n * Build a versioned transaction with a fresh blockhash.\n * Returns an unsigned VersionedTransaction — caller signs and sends.\n */\nexport async function buildTransaction(\n connection: Connection,\n instructions: TransactionInstruction[],\n payer: PublicKey,\n opts: TxOptions = {},\n): Promise<VersionedTransaction> {\n const cuLimit = opts.computeUnits ?? 200_000\n const priorityFee = opts.priorityFee ?? 1_000\n\n const computeIxs: TransactionInstruction[] = [\n ComputeBudgetProgram.setComputeUnitLimit({ units: cuLimit }),\n ComputeBudgetProgram.setComputeUnitPrice({ microLamports: priorityFee }),\n ]\n\n const { blockhash } = await connection.getLatestBlockhash('confirmed')\n\n const message = new TransactionMessage({\n payerKey: payer,\n recentBlockhash: blockhash,\n instructions: [...computeIxs, ...instructions],\n }).compileToV0Message()\n\n return new VersionedTransaction(message)\n}\n","import { Connection, PublicKey, VersionedTransaction } from '@solana/web3.js'\nimport type { SdkConfig, BuyParams, SellParams, CreateTokenParams, PoolState, Position, HodlEvent } from './types'\nimport { MAINNET_CONFIG } from './constants'\nimport { fetchPoolState, fetchPosition } from './accounts'\nimport {\n buildBuyInstruction,\n buildSellInstruction,\n buildCreateTokenInstruction,\n buildClaimAccruedInstruction,\n buildClosePositionInstruction,\n} from './instructions'\nimport { buildTransaction, type TxOptions } from './transaction'\nimport {\n subscribeToEvents as _subscribeToEvents,\n unsubscribeFromEvents,\n fetchAndParseTransaction as _fetchAndParseTransaction,\n type SubscriptionOptions,\n} from './events'\n\nexport class HodlClient {\n readonly connection: Connection\n readonly config: SdkConfig\n\n constructor({ connection, config }: { connection: Connection; config?: SdkConfig }) {\n this.connection = connection\n this.config = config ?? MAINNET_CONFIG\n }\n\n fetchPool(mint: PublicKey): Promise<PoolState> {\n return fetchPoolState(this.connection, mint, this.config)\n }\n\n fetchPosition(poolState: PublicKey, owner: PublicKey): Promise<Position> {\n return fetchPosition(this.connection, poolState, owner, this.config)\n }\n\n async buy(params: BuyParams & { mint: PublicKey; buyer: PublicKey }, opts?: TxOptions): Promise<VersionedTransaction> {\n const ix = await buildBuyInstruction({ ...params, connection: this.connection, config: this.config })\n return buildTransaction(this.connection, [ix], params.buyer, opts)\n }\n\n async sell(params: SellParams & { mint: PublicKey; seller: PublicKey }, opts?: TxOptions): Promise<VersionedTransaction> {\n const ix = await buildSellInstruction({ ...params, connection: this.connection, config: this.config })\n return buildTransaction(this.connection, [ix], params.seller, opts)\n }\n\n async createToken(params: CreateTokenParams & { creator: PublicKey; mint: PublicKey }, opts?: TxOptions): Promise<VersionedTransaction> {\n const ix = await buildCreateTokenInstruction({ ...params, connection: this.connection, config: this.config })\n return buildTransaction(this.connection, [ix], params.creator, opts)\n }\n\n async claimAccrued(params: { owner: PublicKey; poolState: PublicKey }, opts?: TxOptions): Promise<VersionedTransaction> {\n const ix = await buildClaimAccruedInstruction({ ...params, connection: this.connection, config: this.config })\n return buildTransaction(this.connection, [ix], params.owner, opts)\n }\n\n async closePosition(params: { owner: PublicKey; poolState: PublicKey; mint: PublicKey; userTokenAccount: PublicKey }, opts?: TxOptions): Promise<VersionedTransaction> {\n const ix = await buildClosePositionInstruction({ ...params, connection: this.connection, config: this.config })\n return buildTransaction(this.connection, [ix], params.owner, opts)\n }\n\n /**\n * Build a transaction from raw instructions. Fetches a fresh blockhash.\n * Sign the returned transaction, then send via connection.sendRawTransaction.\n */\n buildTransaction(instructions: Parameters<typeof buildTransaction>[1], payer: PublicKey, opts?: TxOptions): Promise<VersionedTransaction> {\n return buildTransaction(this.connection, instructions, payer, opts)\n }\n\n subscribeToEvents(\n onEvent: (event: HodlEvent, slot: number, signature: string) => void,\n opts?: SubscriptionOptions,\n ): number {\n return _subscribeToEvents(this.connection, this.config, onEvent, opts)\n }\n\n unsubscribe(subscriptionId: number): Promise<void> {\n return unsubscribeFromEvents(this.connection, subscriptionId)\n }\n\n fetchAndParseTransaction(signature: string): Promise<HodlEvent[]> {\n return _fetchAndParseTransaction(this.connection, signature, this.config)\n }\n}\n"]}