@meteora-ag/dlmm 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/dlmm/index.ts","../src/dlmm/idl.ts","../src/dlmm/constants/index.ts","../src/dlmm/types/index.ts","../src/dlmm/helpers/index.ts","../src/dlmm/helpers/math.ts","../src/dlmm/helpers/derive.ts","../src/dlmm/helpers/binArray.ts","../src/dlmm/helpers/strategy.ts","../src/dlmm/helpers/fee.ts","../src/dlmm/error.ts","../src/index.ts"],"sourcesContent":["import {\n Cluster,\n Connection,\n PublicKey,\n TransactionInstruction,\n Transaction,\n AccountMeta,\n SYSVAR_RENT_PUBKEY,\n SystemProgram,\n SYSVAR_CLOCK_PUBKEY,\n} from \"@solana/web3.js\";\nimport { IDL } from \"./idl\";\nimport {\n BASIS_POINT_MAX,\n FEE_PRECISION,\n LBCLMM_PROGRAM_IDS,\n MAX_BIN_PER_POSITION,\n MAX_FEE_RATE,\n MAX_CLAIM_ALL_ALLOWED,\n PRECISION,\n MAX_BIN_LENGTH_ALLOWED_IN_ONE_TX,\n SCALE_OFFSET,\n MAX_ACTIVE_BIN_SLIPPAGE,\n} from \"./constants\";\nimport {\n BinLiquidity,\n ClmmProgram,\n LbPairAccount,\n LbPairAccountsStruct,\n PositionAccount,\n PositionBinData,\n PositionData,\n TokenReserve,\n TInitializePositionAndAddLiquidityParams,\n BinAndAmount,\n vParameters,\n sParameters,\n BinArrayAccount,\n SwapParams,\n BinLiquidityReduction,\n BinArrayBitmapExtensionAccount,\n Bin,\n BinArray,\n LiquidityParameterByWeight,\n LiquidityOneSideParameter,\n BinArrayBitmapExtension,\n PositionVersion,\n Position,\n FeeInfo,\n EmissionRate,\n PositionInfo,\n SwapQuote,\n SwapFee,\n LMRewards,\n} from \"./types\";\nimport { AnchorProvider, BN, Program } from \"@coral-xyz/anchor\";\nimport {\n binIdToBinArrayIndex,\n chunks,\n computeFeeFromAmount,\n deriveBinArray,\n deriveBinArrayBitmapExtension,\n deriveReserve,\n getBinArrayLowerUpperBinId,\n getBinFromBinArray,\n getOrCreateATAInstruction,\n getOutAmount,\n getTokenDecimals,\n isBinIdWithinBinArray,\n isOverflowDefaultBinArrayBitmap,\n swapQuoteAtBin,\n unwrapSOLInstruction,\n wrapSOLInstruction,\n findNextBinArrayWithLiquidity,\n getTotalFee,\n toWeightDistribution,\n chunkedGetMultipleAccountInfos,\n deriveLbPair,\n deriveOracle,\n derivePresetParameter,\n computeBudgetIx,\n} from \"./helpers\";\nimport { bs58 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\nimport Decimal from \"decimal.js\";\nimport {\n AccountLayout,\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport { Rounding, mulShr } from \"./helpers/math\";\n\ntype Opt = {\n cluster: Cluster | \"localhost\";\n};\n\nexport class DLMM {\n constructor(\n public pubkey: PublicKey,\n public program: ClmmProgram,\n public lbPair: LbPairAccount,\n public binArrayBitmapExtension: BinArrayBitmapExtensionAccount | null,\n public tokenX: TokenReserve,\n public tokenY: TokenReserve,\n private opt?: Opt\n ) {}\n\n /** Static public method */\n\n /**\n * The function `getLbPairs` retrieves a list of LB pair accounts using a connection and optional\n * parameters.\n * @param {Connection} connection - The `connection` parameter is an instance of the `Connection`\n * class, which represents the connection to the Solana blockchain network.\n * @param {Opt} [opt] - The `opt` parameter is an optional object that contains additional options\n * for the function. It can have the following properties:\n * @returns The function `getLbPairs` returns a Promise that resolves to an array of\n * `LbPairAccountsStruct` objects.\n */\n public static async getLbPairs(\n connection: Connection,\n opt?: Opt\n ): Promise<LbPairAccountsStruct[]> {\n const provider = new AnchorProvider(\n connection,\n {} as any,\n AnchorProvider.defaultOptions()\n );\n const program = new Program(\n IDL,\n LBCLMM_PROGRAM_IDS[opt?.cluster ?? \"mainnet-beta\"],\n provider\n );\n\n return program.account.lbPair.all();\n }\n\n /**\n * The `create` function is a static method that creates a new instance of the `DLMM` class\n * @param {Connection} connection - The `connection` parameter is an instance of the `Connection`\n * class, which represents the connection to the Solana blockchain network.\n * @param {PublicKey} dlmm - The PublicKey of LB Pair.\n * @param {Opt} [opt] - The `opt` parameter is an optional object that can contain additional options\n * for the `create` function. It has the following properties:\n * @returns The `create` function returns a `Promise` that resolves to a `DLMM` object.\n */\n static async create(\n connection: Connection,\n dlmm: PublicKey,\n opt?: Opt\n ): Promise<DLMM> {\n const cluster = opt?.cluster || \"mainnet-beta\";\n\n const provider = new AnchorProvider(\n connection,\n {} as any,\n AnchorProvider.defaultOptions()\n );\n const program = new Program(IDL, LBCLMM_PROGRAM_IDS[cluster], provider);\n\n const binArrayBitMapExtensionPubkey = deriveBinArrayBitmapExtension(\n dlmm,\n program.programId\n )[0];\n const accountsToFetch = [dlmm, binArrayBitMapExtensionPubkey];\n\n const accountsInfo = await chunkedGetMultipleAccountInfos(\n connection,\n accountsToFetch\n );\n const lbPairAccountInfoBuffer = accountsInfo[0]?.data;\n if (!lbPairAccountInfoBuffer)\n throw new Error(`LB Pair account ${dlmm.toBase58()} not found`);\n const lbPairAccInfo: LbPairAccount = program.coder.accounts.decode(\n \"lbPair\",\n lbPairAccountInfoBuffer\n );\n const binArrayBitMapAccountInfoBuffer = accountsInfo[1]?.data;\n let binArrayBitMapExtensionAccInfo: BinArrayBitmapExtension | null = null;\n if (binArrayBitMapAccountInfoBuffer) {\n binArrayBitMapExtensionAccInfo = program.coder.accounts.decode(\n \"binArrayBitmapExtension\",\n binArrayBitMapAccountInfoBuffer\n );\n }\n\n const reserveAccountsInfo = await chunkedGetMultipleAccountInfos(\n program.provider.connection,\n [lbPairAccInfo.reserveX, lbPairAccInfo.reserveY]\n );\n let binArrayBitmapExtension: BinArrayBitmapExtensionAccount | null;\n if (binArrayBitMapExtensionAccInfo) {\n binArrayBitmapExtension = {\n account: binArrayBitMapExtensionAccInfo,\n publicKey: binArrayBitMapExtensionPubkey,\n };\n }\n\n const reserveXBalance = AccountLayout.decode(reserveAccountsInfo[0].data);\n const reserveYBalance = AccountLayout.decode(reserveAccountsInfo[1].data);\n const [tokenXDecimal, tokenYDecimal] = await Promise.all([\n getTokenDecimals(program.provider.connection, lbPairAccInfo.tokenXMint),\n getTokenDecimals(program.provider.connection, lbPairAccInfo.tokenYMint),\n ]);\n const tokenX = {\n publicKey: lbPairAccInfo.tokenXMint,\n reserve: lbPairAccInfo.reserveX,\n amount: reserveXBalance.amount,\n decimal: tokenXDecimal,\n };\n const tokenY = {\n publicKey: lbPairAccInfo.tokenYMint,\n reserve: lbPairAccInfo.reserveY,\n amount: reserveYBalance.amount,\n decimal: tokenYDecimal,\n };\n return new DLMM(\n dlmm,\n program,\n lbPairAccInfo,\n binArrayBitmapExtension,\n tokenX,\n tokenY,\n opt\n );\n }\n\n /**\n * Similar to `create` function, but it accept multiple lbPairs to be initialized.\n * @param {Connection} connection - The `connection` parameter is an instance of the `Connection`\n * class, which represents the connection to the Solana blockchain network.\n * @param dlmmList - An Array of PublicKey of LB Pairs.\n * @param {Opt} [opt] - An optional parameter of type `Opt`.\n * @returns The function `createMultiple` returns a Promise that resolves to an array of `DLMM`\n * objects.\n */\n static async createMultiple(\n connection: Connection,\n dlmmList: Array<PublicKey>,\n opt?: Opt\n ): Promise<DLMM[]> {\n const cluster = opt?.cluster || \"mainnet-beta\";\n\n const provider = new AnchorProvider(\n connection,\n {} as any,\n AnchorProvider.defaultOptions()\n );\n const program = new Program(IDL, LBCLMM_PROGRAM_IDS[cluster], provider);\n\n const binArrayBitMapExtensions = dlmmList.map(\n (lbPair) => deriveBinArrayBitmapExtension(lbPair, program.programId)[0]\n );\n const accountsToFetch = [...dlmmList, ...binArrayBitMapExtensions];\n\n const accountsInfo = await chunkedGetMultipleAccountInfos(\n connection,\n accountsToFetch\n );\n\n const lbPairArraysMap = new Map<string, LbPairAccount>();\n for (let i = 0; i < dlmmList.length; i++) {\n const lbPairPubKey = dlmmList[i];\n const lbPairAccountInfoBuffer = accountsInfo[i]?.data;\n if (!lbPairAccountInfoBuffer)\n throw new Error(`LB Pair account ${lbPairPubKey.toBase58()} not found`);\n const binArrayAccInfo = program.coder.accounts.decode(\n \"lbPair\",\n lbPairAccountInfoBuffer\n );\n lbPairArraysMap.set(lbPairPubKey.toBase58(), binArrayAccInfo);\n }\n\n const binArrayBitMapExtensionsMap = new Map<\n string,\n BinArrayBitmapExtension\n >();\n for (let i = dlmmList.length; i < accountsInfo.length; i++) {\n const index = i - dlmmList.length;\n const lbPairPubkey = dlmmList[index];\n const binArrayBitMapAccountInfoBuffer = accountsInfo[i]?.data;\n if (binArrayBitMapAccountInfoBuffer) {\n const binArrayBitMapExtensionAccInfo = program.coder.accounts.decode(\n \"binArrayBitmapExtension\",\n binArrayBitMapAccountInfoBuffer\n );\n binArrayBitMapExtensionsMap.set(\n lbPairPubkey.toBase58(),\n binArrayBitMapExtensionAccInfo\n );\n }\n }\n\n const reservePublicKeys = Array.from(lbPairArraysMap.values())\n .map(({ reserveX, reserveY }) => [reserveX, reserveY])\n .flat();\n\n const reserveAccountsInfo = await chunkedGetMultipleAccountInfos(\n program.provider.connection,\n reservePublicKeys\n );\n\n const lbClmmImpl = await Promise.all(\n dlmmList.map(async (lbPair, index) => {\n const lbPairState = lbPairArraysMap.get(lbPair.toBase58());\n if (!lbPairState)\n throw new Error(`LB Pair ${lbPair.toBase58()} state not found`);\n\n const binArrayBitmapExtensionState = binArrayBitMapExtensionsMap.get(\n lbPair.toBase58()\n );\n const binArrayBitmapExtensionPubkey = binArrayBitMapExtensions[index];\n\n let binArrayBitmapExtension: BinArrayBitmapExtensionAccount | null =\n null;\n if (binArrayBitmapExtensionState) {\n binArrayBitmapExtension = {\n account: binArrayBitmapExtensionState,\n publicKey: binArrayBitmapExtensionPubkey,\n };\n }\n\n const reserveXAccountInfo = reserveAccountsInfo[index * 2];\n const reserveYAccountInfo = reserveAccountsInfo[index * 2 + 1];\n\n if (!reserveXAccountInfo || !reserveYAccountInfo)\n throw new Error(\n `Reserve account for LB Pair ${lbPair.toBase58()} not found`\n );\n\n const reserveXBalance = AccountLayout.decode(reserveXAccountInfo.data);\n const reserveYBalance = AccountLayout.decode(reserveYAccountInfo.data);\n const [tokenXDecimal, tokenYDecimal] = await Promise.all([\n getTokenDecimals(program.provider.connection, lbPairState.tokenXMint),\n getTokenDecimals(program.provider.connection, lbPairState.tokenYMint),\n ]);\n const tokenX = {\n publicKey: lbPairState.tokenXMint,\n reserve: lbPairState.reserveX,\n amount: reserveXBalance.amount,\n decimal: tokenXDecimal,\n };\n const tokenY = {\n publicKey: lbPairState.tokenYMint,\n reserve: lbPairState.reserveY,\n amount: reserveYBalance.amount,\n decimal: tokenYDecimal,\n };\n return new DLMM(\n lbPair,\n program,\n lbPairState,\n binArrayBitmapExtension,\n tokenX,\n tokenY,\n opt\n );\n })\n );\n\n return lbClmmImpl;\n }\n\n /**\n * The function `getAllLbPairPositionsByUser` retrieves all liquidity pool pair positions for a given\n * user.\n * @param {Connection} connection - The `connection` parameter is an instance of the `Connection`\n * class, which represents the connection to the Solana blockchain.\n * @param {PublicKey} userPubKey - The user's wallet public key.\n * @param {Opt} [opt] - An optional object that contains additional options for the function.\n * @returns The function `getAllLbPairPositionsByUser` returns a `Promise` that resolves to a `Map`\n * object. The `Map` object contains key-value pairs, where the key is a string representing the LB\n * Pair account, and the value is an object of PositionInfo\n */\n static async getAllLbPairPositionsByUser(\n connection: Connection,\n userPubKey: PublicKey,\n opt?: Opt\n ): Promise<Map<string, PositionInfo>> {\n const cluster = opt?.cluster || \"mainnet-beta\";\n\n const provider = new AnchorProvider(\n connection,\n {} as any,\n AnchorProvider.defaultOptions()\n );\n const program = new Program(IDL, LBCLMM_PROGRAM_IDS[cluster], provider);\n\n const positions = await program.account.position.all([\n {\n memcmp: {\n bytes: bs58.encode(userPubKey.toBuffer()),\n offset: 8 + 32,\n },\n },\n ]);\n\n const positionsV2 = await program.account.positionV2.all([\n {\n memcmp: {\n bytes: bs58.encode(userPubKey.toBuffer()),\n offset: 8 + 32,\n },\n },\n ]);\n\n const binArrayPubkeySet = new Set<string>();\n const lbPairSet = new Set<string>();\n positions.forEach(({ account: { upperBinId, lowerBinId, lbPair } }) => {\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n const [lowerBinArrayPubKey] = deriveBinArray(\n lbPair,\n lowerBinArrayIndex,\n program.programId\n );\n const [upperBinArrayPubKey] = deriveBinArray(\n lbPair,\n upperBinArrayIndex,\n program.programId\n );\n binArrayPubkeySet.add(lowerBinArrayPubKey.toBase58());\n binArrayPubkeySet.add(upperBinArrayPubKey.toBase58());\n lbPairSet.add(lbPair.toBase58());\n });\n const binArrayPubkeyArray = Array.from(binArrayPubkeySet).map(\n (pubkey) => new PublicKey(pubkey)\n );\n const lbPairArray = Array.from(lbPairSet).map(\n (pubkey) => new PublicKey(pubkey)\n );\n\n const binArrayPubkeySetV2 = new Set<string>();\n const lbPairSetV2 = new Set<string>();\n positionsV2.forEach(({ account: { upperBinId, lowerBinId, lbPair } }) => {\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n const [lowerBinArrayPubKey] = deriveBinArray(\n lbPair,\n lowerBinArrayIndex,\n program.programId\n );\n const [upperBinArrayPubKey] = deriveBinArray(\n lbPair,\n upperBinArrayIndex,\n program.programId\n );\n binArrayPubkeySetV2.add(lowerBinArrayPubKey.toBase58());\n binArrayPubkeySetV2.add(upperBinArrayPubKey.toBase58());\n lbPairSetV2.add(lbPair.toBase58());\n });\n const binArrayPubkeyArrayV2 = Array.from(binArrayPubkeySetV2).map(\n (pubkey) => new PublicKey(pubkey)\n );\n const lbPairArrayV2 = Array.from(lbPairSetV2).map(\n (pubkey) => new PublicKey(pubkey)\n );\n\n const [clockAccInfo, ...binArraysAccInfo] =\n await chunkedGetMultipleAccountInfos(connection, [\n SYSVAR_CLOCK_PUBKEY,\n ...binArrayPubkeyArray,\n ...lbPairArray,\n ...binArrayPubkeyArrayV2,\n ...lbPairArrayV2,\n ]);\n\n const positionBinArraysMap = new Map();\n for (let i = 0; i < binArrayPubkeyArray.length; i++) {\n const binArrayPubkey = binArrayPubkeyArray[i];\n const binArrayAccInfoBuffer = binArraysAccInfo[i];\n if (!binArrayAccInfoBuffer)\n throw new Error(\n `Bin Array account ${binArrayPubkey.toBase58()} not found`\n );\n const binArrayAccInfo = program.coder.accounts.decode(\n \"binArray\",\n binArrayAccInfoBuffer.data\n );\n positionBinArraysMap.set(binArrayPubkey.toBase58(), binArrayAccInfo);\n }\n\n const lbPairArraysMap = new Map();\n for (\n let i = binArrayPubkeyArray.length;\n i < binArrayPubkeyArray.length + lbPairArray.length;\n i++\n ) {\n const lbPairPubkey = lbPairArray[i - binArrayPubkeyArray.length];\n const lbPairAccInfoBuffer = binArraysAccInfo[i];\n if (!lbPairAccInfoBuffer)\n throw new Error(`LB Pair account ${lbPairPubkey.toBase58()} not found`);\n const lbPairAccInfo = program.coder.accounts.decode(\n \"lbPair\",\n lbPairAccInfoBuffer.data\n );\n lbPairArraysMap.set(lbPairPubkey.toBase58(), lbPairAccInfo);\n }\n\n const reservePublicKeys = Array.from(lbPairArraysMap.values())\n .map(({ reserveX, reserveY }) => [reserveX, reserveY])\n .flat();\n\n const positionBinArraysMapV2 = new Map();\n for (\n let i = binArrayPubkeyArray.length + lbPairArray.length;\n i <\n binArrayPubkeyArray.length +\n lbPairArray.length +\n binArrayPubkeyArrayV2.length;\n i++\n ) {\n const binArrayPubkey =\n binArrayPubkeyArrayV2[\n i - (binArrayPubkeyArray.length + lbPairArray.length)\n ];\n const binArrayAccInfoBufferV2 = binArraysAccInfo[i];\n if (!binArrayAccInfoBufferV2)\n throw new Error(\n `Bin Array account ${binArrayPubkey.toBase58()} not found`\n );\n const binArrayAccInfo = program.coder.accounts.decode(\n \"binArray\",\n binArrayAccInfoBufferV2.data\n );\n positionBinArraysMapV2.set(binArrayPubkey.toBase58(), binArrayAccInfo);\n }\n\n const lbPairArraysMapV2 = new Map();\n for (\n let i =\n binArrayPubkeyArray.length +\n lbPairArray.length +\n binArrayPubkeyArrayV2.length;\n i < binArraysAccInfo.length;\n i++\n ) {\n const lbPairPubkey =\n lbPairArrayV2[\n i -\n (binArrayPubkeyArray.length +\n lbPairArray.length +\n binArrayPubkeyArrayV2.length)\n ];\n const lbPairAccInfoBufferV2 = binArraysAccInfo[i];\n if (!lbPairAccInfoBufferV2)\n throw new Error(`LB Pair account ${lbPairPubkey.toBase58()} not found`);\n const lbPairAccInfo = program.coder.accounts.decode(\n \"lbPair\",\n lbPairAccInfoBufferV2.data\n );\n lbPairArraysMapV2.set(lbPairPubkey.toBase58(), lbPairAccInfo);\n }\n\n const reservePublicKeysV2 = Array.from(lbPairArraysMapV2.values())\n .map(({ reserveX, reserveY }) => [reserveX, reserveY])\n .flat();\n\n const reserveAccountsInfo = await chunkedGetMultipleAccountInfos(\n program.provider.connection,\n [...reservePublicKeys, ...reservePublicKeysV2]\n );\n\n const lbPairReserveMap = new Map<\n string,\n { reserveX: bigint; reserveY: bigint }\n >();\n lbPairArray.forEach((lbPair, idx) => {\n const index = idx * 2;\n const reserveAccBufferX = reserveAccountsInfo[index];\n const reserveAccBufferY = reserveAccountsInfo[index + 1];\n if (!reserveAccBufferX || !reserveAccBufferY)\n throw new Error(\n `Reserve account for LB Pair ${lbPair.toBase58()} not found`\n );\n const reserveAccX = AccountLayout.decode(reserveAccBufferX.data);\n const reserveAccY = AccountLayout.decode(reserveAccBufferY.data);\n\n lbPairReserveMap.set(lbPair.toBase58(), {\n reserveX: reserveAccX.amount,\n reserveY: reserveAccY.amount,\n });\n });\n\n const lbPairReserveMapV2 = new Map<\n string,\n { reserveX: bigint; reserveY: bigint }\n >();\n lbPairArrayV2.forEach((lbPair, idx) => {\n const index = idx * 2;\n const reserveAccBufferXV2 =\n reserveAccountsInfo[reservePublicKeys.length + index];\n const reserveAccBufferYV2 =\n reserveAccountsInfo[reservePublicKeys.length + index + 1];\n if (!reserveAccBufferXV2 || !reserveAccBufferYV2)\n throw new Error(\n `Reserve account for LB Pair ${lbPair.toBase58()} not found`\n );\n const reserveAccX = AccountLayout.decode(reserveAccBufferXV2.data);\n const reserveAccY = AccountLayout.decode(reserveAccBufferYV2.data);\n\n lbPairReserveMapV2.set(lbPair.toBase58(), {\n reserveX: reserveAccX.amount,\n reserveY: reserveAccY.amount,\n });\n });\n\n const onChainTimestamp = new BN(\n clockAccInfo.data.readBigInt64LE(32).toString()\n ).toNumber();\n const positionsMap: Map<\n string,\n {\n publicKey: PublicKey;\n lbPair: LbPairAccount;\n tokenX: TokenReserve;\n tokenY: TokenReserve;\n lbPairPositionsData: Array<{\n publicKey: PublicKey;\n positionData: PositionData;\n version: PositionVersion;\n }>;\n }\n > = new Map();\n for (let position of positions) {\n const { account, publicKey: positionPubKey } = position;\n\n const { upperBinId, lowerBinId, lbPair } = account;\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n const [lowerBinArrayPubKey] = deriveBinArray(\n lbPair,\n lowerBinArrayIndex,\n program.programId\n );\n const [upperBinArrayPubKey] = deriveBinArray(\n lbPair,\n upperBinArrayIndex,\n program.programId\n );\n const lowerBinArray = positionBinArraysMap.get(\n lowerBinArrayPubKey.toBase58()\n );\n const upperBinArray = positionBinArraysMap.get(\n upperBinArrayPubKey.toBase58()\n );\n const lbPairAcc = lbPairArraysMap.get(lbPair.toBase58());\n const [baseTokenDecimal, quoteTokenDecimal] = await Promise.all([\n getTokenDecimals(program.provider.connection, lbPairAcc.tokenXMint),\n getTokenDecimals(program.provider.connection, lbPairAcc.tokenYMint),\n ]);\n const reserveXBalance =\n lbPairReserveMap.get(lbPair.toBase58())?.reserveX ?? BigInt(0);\n const reserveYBalance =\n lbPairReserveMap.get(lbPair.toBase58())?.reserveY ?? BigInt(0);\n const tokenX = {\n publicKey: lbPairAcc.tokenXMint,\n reserve: lbPairAcc.reserveX,\n amount: reserveXBalance,\n decimal: baseTokenDecimal,\n };\n const tokenY = {\n publicKey: lbPairAcc.tokenYMint,\n reserve: lbPairAcc.reserveY,\n amount: reserveYBalance,\n decimal: quoteTokenDecimal,\n };\n const positionData = await DLMM.processPosition(\n program,\n PositionVersion.V1,\n lbPairAcc,\n onChainTimestamp,\n account,\n baseTokenDecimal,\n quoteTokenDecimal,\n lowerBinArray,\n upperBinArray\n );\n\n if (positionData) {\n positionsMap.set(lbPair.toBase58(), {\n publicKey: lbPair,\n lbPair: lbPairAcc,\n tokenX,\n tokenY,\n lbPairPositionsData: [\n ...(positionsMap.get(lbPair.toBase58())?.lbPairPositionsData ?? []),\n {\n publicKey: positionPubKey,\n positionData,\n version: PositionVersion.V1,\n },\n ],\n });\n }\n }\n\n for (let position of positionsV2) {\n const { account, publicKey: positionPubKey } = position;\n\n const { upperBinId, lowerBinId, lbPair } = account;\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n const [lowerBinArrayPubKey] = deriveBinArray(\n lbPair,\n lowerBinArrayIndex,\n program.programId\n );\n const [upperBinArrayPubKey] = deriveBinArray(\n lbPair,\n upperBinArrayIndex,\n program.programId\n );\n const lowerBinArray = positionBinArraysMapV2.get(\n lowerBinArrayPubKey.toBase58()\n );\n const upperBinArray = positionBinArraysMapV2.get(\n upperBinArrayPubKey.toBase58()\n );\n const lbPairAcc = lbPairArraysMapV2.get(lbPair.toBase58());\n const [baseTokenDecimal, quoteTokenDecimal] = await Promise.all([\n getTokenDecimals(program.provider.connection, lbPairAcc.tokenXMint),\n getTokenDecimals(program.provider.connection, lbPairAcc.tokenYMint),\n ]);\n const reserveXBalance =\n lbPairReserveMapV2.get(lbPair.toBase58())?.reserveX ?? BigInt(0);\n const reserveYBalance =\n lbPairReserveMapV2.get(lbPair.toBase58())?.reserveY ?? BigInt(0);\n const tokenX = {\n publicKey: lbPairAcc.tokenXMint,\n reserve: lbPairAcc.reserveX,\n amount: reserveXBalance,\n decimal: baseTokenDecimal,\n };\n const tokenY = {\n publicKey: lbPairAcc.tokenYMint,\n reserve: lbPairAcc.reserveY,\n amount: reserveYBalance,\n decimal: quoteTokenDecimal,\n };\n const positionData = await DLMM.processPosition(\n program,\n PositionVersion.V2,\n lbPairAcc,\n onChainTimestamp,\n account,\n baseTokenDecimal,\n quoteTokenDecimal,\n lowerBinArray,\n upperBinArray\n );\n\n if (positionData) {\n positionsMap.set(lbPair.toBase58(), {\n publicKey: lbPair,\n lbPair: lbPairAcc,\n tokenX,\n tokenY,\n lbPairPositionsData: [\n ...(positionsMap.get(lbPair.toBase58())?.lbPairPositionsData ?? []),\n {\n publicKey: positionPubKey,\n positionData,\n version: PositionVersion.V2,\n },\n ],\n });\n }\n }\n\n return positionsMap;\n }\n\n static async migratePosition(\n connection: Connection,\n positions: PublicKey[],\n newPositions: PublicKey[],\n walletPubkey: PublicKey,\n opt?: Opt\n ): Promise<Transaction[]> {\n const cluster = opt?.cluster || \"mainnet-beta\";\n\n const provider = new AnchorProvider(\n connection,\n {} as any,\n AnchorProvider.defaultOptions()\n );\n const program = new Program(IDL, LBCLMM_PROGRAM_IDS[cluster], provider);\n\n const positionsState = await program.account.position.fetchMultiple(\n positions\n );\n\n const { blockhash, lastValidBlockHeight } =\n await connection.getLatestBlockhash(\"confirmed\");\n return Promise.all(\n positionsState.map(async ({ lbPair, lowerBinId }, idx) => {\n const position = positions[idx];\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n\n const [lowerBinArrayPubKey] = deriveBinArray(\n lbPair,\n lowerBinArrayIndex,\n program.programId\n );\n const [upperBinArrayPubKey] = deriveBinArray(\n lbPair,\n upperBinArrayIndex,\n program.programId\n );\n\n const migrateTx = await program.methods\n .migratePosition()\n .accounts({\n binArrayLower: lowerBinArrayPubKey,\n binArrayUpper: upperBinArrayPubKey,\n lbPair,\n owner: walletPubkey,\n positionV1: position,\n positionV2: newPositions[idx],\n program: program.programId,\n rentReceiver: walletPubkey,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: walletPubkey,\n }).add(migrateTx);\n })\n );\n }\n\n /** Public methods */\n\n public static async createLbPair(\n connection: Connection,\n funder: PublicKey,\n tokenX: PublicKey,\n tokenY: PublicKey,\n activeId: BN,\n binStep: BN,\n opt?: Opt\n ): Promise<Transaction> {\n const provider = new AnchorProvider(\n connection,\n {} as any,\n AnchorProvider.defaultOptions()\n );\n const program = new Program(IDL, LBCLMM_PROGRAM_IDS[opt.cluster], provider);\n\n const [lbPair] = deriveLbPair(tokenX, tokenY, binStep, program.programId);\n\n const [reserveX] = deriveReserve(tokenX, lbPair, program.programId);\n const [reserveY] = deriveReserve(tokenY, lbPair, program.programId);\n const [oracle] = deriveOracle(lbPair, program.programId);\n const [presetParameter] = derivePresetParameter(binStep, program.programId);\n\n const activeBinArrayIndex = binIdToBinArrayIndex(activeId);\n const binArrayBitmapExtension = isOverflowDefaultBinArrayBitmap(\n activeBinArrayIndex\n )\n ? deriveBinArrayBitmapExtension(lbPair, program.programId)[0]\n : null;\n\n return program.methods\n .initializeLbPair(activeId.toNumber(), binStep.toNumber())\n .accounts({\n funder,\n lbPair,\n rent: SYSVAR_RENT_PUBKEY,\n reserveX,\n reserveY,\n binArrayBitmapExtension,\n tokenMintX: tokenX,\n tokenMintY: tokenY,\n tokenProgram: TOKEN_PROGRAM_ID,\n oracle,\n presetParameter,\n systemProgram: SystemProgram.programId,\n })\n .transaction();\n }\n\n /**\n * The function `refetchStates` retrieves and updates various states and data related to bin arrays\n * and lb pairs.\n */\n public async refetchStates(): Promise<void> {\n const binArrayBitmapExtensionPubkey = deriveBinArrayBitmapExtension(\n this.pubkey,\n this.program.programId\n )[0];\n const binArrayBitmapExtensionState =\n await this.program.account.binArrayBitmapExtension.fetchNullable(\n binArrayBitmapExtensionPubkey\n );\n\n if (binArrayBitmapExtensionState) {\n this.binArrayBitmapExtension = {\n account: binArrayBitmapExtensionState,\n publicKey: binArrayBitmapExtensionPubkey,\n };\n }\n\n const newLbPair = await this.program.account.lbPair.fetch(this.pubkey);\n\n this.lbPair = newLbPair;\n }\n\n /**\n * The function `getBinArrays` returns an array of `BinArrayAccount` objects\n * @returns a Promise that resolves to an array of BinArrayAccount objects.\n */\n public async getBinArrays(): Promise<BinArrayAccount[]> {\n return this.program.account.binArray.all([\n {\n memcmp: {\n bytes: bs58.encode(this.pubkey.toBuffer()),\n offset: 8 + 16,\n },\n },\n ]);\n }\n\n /**\n * The function `getFeeInfo` calculates and returns the base fee rate percentage, maximum fee rate\n * percentage, and protocol fee percentage.\n * @returns an object of type `FeeInfo` with the following properties: baseFeeRatePercentage, maxFeeRatePercentage, and protocolFeePercentage.\n */\n public getFeeInfo(): FeeInfo {\n const { baseFactor, protocolShare } = this.lbPair.parameters;\n\n const baseFeeRate = new BN(baseFactor)\n .mul(new BN(this.lbPair.binStep))\n .mul(new BN(10));\n\n const baseFeeRatePercentage = new Decimal(baseFeeRate.toString())\n .mul(new Decimal(100))\n .div(new Decimal(FEE_PRECISION.toString()));\n\n const maxFeeRatePercentage = new Decimal(MAX_FEE_RATE.toString())\n .mul(new Decimal(100))\n .div(new Decimal(FEE_PRECISION.toString()));\n\n const protocolFeePercentage = new Decimal(protocolShare.toString())\n .mul(new Decimal(100))\n .div(new Decimal(BASIS_POINT_MAX));\n\n return {\n baseFeeRatePercentage,\n maxFeeRatePercentage,\n protocolFeePercentage,\n };\n }\n\n /**\n * The function calculates and returns a dynamic fee\n * @returns a Decimal value representing the dynamic fee.\n */\n public getDynamicFee(): Decimal {\n let vParameterClone = Object.assign({}, this.lbPair.vParameters);\n let activeId = new BN(this.lbPair.activeId);\n const sParameters = this.lbPair.parameters;\n\n const currentTimestamp = Date.now() / 1000;\n this.updateReference(\n activeId.toNumber(),\n vParameterClone,\n sParameters,\n currentTimestamp\n );\n this.updateVolatilityAccumulator(\n vParameterClone,\n sParameters,\n activeId.toNumber()\n );\n\n const totalFee = getTotalFee(\n this.lbPair.binStep,\n sParameters,\n vParameterClone\n );\n return new Decimal(totalFee.toString())\n .div(new Decimal(FEE_PRECISION.toString()))\n .mul(100);\n }\n\n /**\n * The function `getEmissionRate` returns the emission rates for two rewards.\n * @returns an object of type `EmissionRate`. The object has two properties: `rewardOne` and\n * `rewardTwo`, both of which are of type `Decimal`.\n */\n public getEmissionRate(): EmissionRate {\n const [rewardOneEmissionRate, rewardTwoEmissionRate] =\n this.lbPair.rewardInfos.map(({ rewardRate }) => rewardRate);\n\n return {\n rewardOne: new Decimal(rewardOneEmissionRate.toString()).div(PRECISION),\n rewardTwo: new Decimal(rewardTwoEmissionRate.toString()).div(PRECISION),\n };\n }\n\n /**\n * The function `getBinsAroundActiveBin` retrieves a specified number of bins to the left and right\n * of the active bin and returns them along with the active bin ID.\n * @param {number} numberOfBinsToTheLeft - The parameter `numberOfBinsToTheLeft` represents the\n * number of bins to the left of the active bin that you want to retrieve. It determines how many\n * bins you want to include in the result that are positioned to the left of the active bin.\n * @param {number} numberOfBinsToTheRight - The parameter `numberOfBinsToTheRight` represents the\n * number of bins to the right of the active bin that you want to retrieve.\n * @returns an object with two properties: \"activeBin\" and \"bins\". The value of \"activeBin\" is the\n * value of \"this.lbPair.activeId\", and the value of \"bins\" is the result of calling the \"getBins\"\n * function with the specified parameters.\n */\n public async getBinsAroundActiveBin(\n numberOfBinsToTheLeft: number,\n numberOfBinsToTheRight: number\n ): Promise<{ activeBin: number; bins: BinLiquidity[] }> {\n const lowerBinId = this.lbPair.activeId - numberOfBinsToTheLeft - 1;\n const upperBinId = this.lbPair.activeId + numberOfBinsToTheRight + 1;\n\n const bins = await this.getBins(\n this.pubkey,\n lowerBinId,\n upperBinId,\n this.tokenX.decimal,\n this.tokenY.decimal\n );\n\n return { activeBin: this.lbPair.activeId, bins };\n }\n\n /**\n * The function `getBinsBetweenMinAndMaxPrice` retrieves a list of bins within a specified price\n * range.\n * @param {number} minPrice - The minimum price value for filtering the bins.\n * @param {number} maxPrice - The `maxPrice` parameter is the maximum price value that you want to\n * use for filtering the bins.\n * @returns an object with two properties: \"activeBin\" and \"bins\". The value of \"activeBin\" is the\n * active bin ID of the lbPair, and the value of \"bins\" is an array of BinLiquidity objects.\n */\n public async getBinsBetweenMinAndMaxPrice(\n minPrice: number,\n maxPrice: number\n ): Promise<{ activeBin: number; bins: BinLiquidity[] }> {\n const lowerBinId = this.getBinIdFromPrice(minPrice, true) - 1;\n const upperBinId = this.getBinIdFromPrice(maxPrice, false) + 1;\n\n const bins = await this.getBins(\n this.pubkey,\n lowerBinId,\n upperBinId,\n this.tokenX.decimal,\n this.tokenX.decimal\n );\n\n return { activeBin: this.lbPair.activeId, bins };\n }\n\n /**\n * The function `getBinsBetweenLowerAndUpperBound` retrieves a list of bins between a lower and upper\n * bin ID and returns the active bin ID and the list of bins.\n * @param {number} lowerBinId - The lowerBinId parameter is a number that represents the ID of the\n * lowest bin.\n * @param {number} upperBinId - The upperBinID parameter is a number that represents the ID of the\n * highest bin.\n * @param {BinArray} [lowerBinArrays] - The `lowerBinArrays` parameter is an optional parameter of\n * type `BinArray`. It represents an array of bins that are below the lower bin ID.\n * @param {BinArray} [upperBinArrays] - The parameter `upperBinArrays` is an optional parameter of\n * type `BinArray`. It represents an array of bins that are above the upper bin ID.\n * @returns an object with two properties: \"activeBin\" and \"bins\". The value of \"activeBin\" is the\n * active bin ID of the lbPair, and the value of \"bins\" is an array of BinLiquidity objects.\n */\n public async getBinsBetweenLowerAndUpperBound(\n lowerBinId: number,\n upperBinId: number,\n lowerBinArrays?: BinArray,\n upperBinArrays?: BinArray\n ): Promise<{ activeBin: number; bins: BinLiquidity[] }> {\n const bins = await this.getBins(\n this.pubkey,\n lowerBinId,\n upperBinId,\n this.tokenX.decimal,\n this.tokenY.decimal,\n lowerBinArrays,\n upperBinArrays\n );\n\n return { activeBin: this.lbPair.activeId, bins };\n }\n\n /**\n * The function converts a real price of bin to a lamport value\n * @param {number} price - The `price` parameter is a number representing the price of a token.\n * @returns {string} price per Lamport of bin\n */\n public toPricePerLamport(price: number): string {\n return new Decimal(price)\n .mul(new Decimal(10 ** (this.tokenY.decimal - this.tokenX.decimal)))\n .toString();\n }\n\n /**\n * The function converts a price per lamport value to a real price of bin\n * @param {number} pricePerLamport - The parameter `pricePerLamport` is a number representing the\n * price per lamport.\n * @returns {string} real price of bin\n */\n public fromPricePerLamport(pricePerLamport: number): string {\n return new Decimal(pricePerLamport)\n .div(new Decimal(10 ** (this.tokenY.decimal - this.tokenX.decimal)))\n .toString();\n }\n\n /**\n * The function retrieves the active bin ID and its corresponding price.\n * @returns an object with two properties: \"binId\" which is a number, and \"price\" which is a string.\n */\n public async getActiveBin(): Promise<{ binId: number; price: string }> {\n const { activeId } = await this.program.account.lbPair.fetch(this.pubkey);\n return {\n binId: activeId,\n price: this.getPriceOfBinByBinId(activeId),\n };\n }\n\n /**\n * The function get the price of a bin based on its bin ID.\n * @param {number} binId - The `binId` parameter is a number that represents the ID of a bin.\n * @returns {number} the calculated price of a bin based on the provided binId.\n */\n public getPriceOfBinByBinId(binId: number): string {\n const binStepNum = new Decimal(this.lbPair.binStep).div(\n new Decimal(BASIS_POINT_MAX)\n );\n return new Decimal(1)\n .add(new Decimal(binStepNum))\n .pow(new Decimal(binId))\n .toString();\n }\n\n /**\n * The function get bin ID based on a given price and a boolean flag indicating whether to\n * round down or up.\n * @param {number} price - The price parameter is a number that represents the price value.\n * @param {boolean} min - The \"min\" parameter is a boolean value that determines whether to round\n * down or round up the calculated binId. If \"min\" is true, the binId will be rounded down (floor),\n * otherwise it will be rounded up (ceil).\n * @returns {number} which is the binId calculated based on the given price and whether the minimum\n * value should be used.\n */\n public getBinIdFromPrice(price: number, min: boolean): number {\n const binStepNum = new Decimal(this.lbPair.binStep).div(\n new Decimal(BASIS_POINT_MAX)\n );\n const binId = new Decimal(price)\n .log()\n .dividedBy(new Decimal(1).add(binStepNum).log());\n return (min ? binId.floor() : binId.ceil()).toNumber();\n }\n\n /**\n * The function `getPositionsByUserAndLbPair` retrieves positions by user and LB pair, including\n * active bin and user positions.\n * @param {PublicKey} [userPubKey] - The `userPubKey` parameter is an optional parameter of type\n * `PublicKey`. It represents the public key of a user. If no `userPubKey` is provided, the function\n * will return an object with an empty `userPositions` array and the active bin information obtained\n * from the `getActive\n * @returns The function `getPositionsByUserAndLbPair` returns a Promise that resolves to an object\n * with two properties:\n * - \"activeBin\" which is an object with two properties: \"binId\" and \"price\". The value of \"binId\"\n * is the active bin ID of the lbPair, and the value of \"price\" is the price of the active bin.\n * - \"userPositions\" which is an array of Position objects.\n */\n public async getPositionsByUserAndLbPair(userPubKey?: PublicKey): Promise<{\n activeBin: {\n binId: any;\n price: string;\n };\n userPositions: Array<Position>;\n }> {\n if (!userPubKey) {\n return {\n activeBin: await this.getActiveBin(),\n userPositions: [],\n };\n }\n\n const positions = await this.program.account.position.all([\n {\n memcmp: {\n bytes: bs58.encode(userPubKey.toBuffer()),\n offset: 8 + 32,\n },\n },\n {\n memcmp: {\n bytes: bs58.encode(this.pubkey.toBuffer()),\n offset: 8,\n },\n },\n ]);\n\n const positionsV2 = await this.program.account.positionV2.all([\n {\n memcmp: {\n bytes: bs58.encode(userPubKey.toBuffer()),\n offset: 8 + 32,\n },\n },\n {\n memcmp: {\n bytes: bs58.encode(this.pubkey.toBuffer()),\n offset: 8,\n },\n },\n ]);\n\n const binArrayPubkeySet = new Set<string>();\n positions.forEach(({ account: { upperBinId, lowerBinId } }) => {\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n const [lowerBinArrayPubKey] = deriveBinArray(\n this.pubkey,\n lowerBinArrayIndex,\n this.program.programId\n );\n const [upperBinArrayPubKey] = deriveBinArray(\n this.pubkey,\n upperBinArrayIndex,\n this.program.programId\n );\n binArrayPubkeySet.add(lowerBinArrayPubKey.toBase58());\n binArrayPubkeySet.add(upperBinArrayPubKey.toBase58());\n });\n const binArrayPubkeyArray = Array.from(binArrayPubkeySet).map(\n (pubkey) => new PublicKey(pubkey)\n );\n\n const binArrayPubkeySetV2 = new Set<string>();\n positionsV2.forEach(({ account: { upperBinId, lowerBinId, lbPair } }) => {\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n const [lowerBinArrayPubKey] = deriveBinArray(\n this.pubkey,\n lowerBinArrayIndex,\n this.program.programId\n );\n const [upperBinArrayPubKey] = deriveBinArray(\n this.pubkey,\n upperBinArrayIndex,\n this.program.programId\n );\n binArrayPubkeySetV2.add(lowerBinArrayPubKey.toBase58());\n binArrayPubkeySetV2.add(upperBinArrayPubKey.toBase58());\n });\n const binArrayPubkeyArrayV2 = Array.from(binArrayPubkeySetV2).map(\n (pubkey) => new PublicKey(pubkey)\n );\n\n const lbPairAndBinArrays = await chunkedGetMultipleAccountInfos(\n this.program.provider.connection,\n [\n this.pubkey,\n SYSVAR_CLOCK_PUBKEY,\n ...binArrayPubkeyArray,\n ...binArrayPubkeyArrayV2,\n ]\n );\n\n const [lbPairAccInfo, clockAccInfo, ...binArraysAccInfo] =\n lbPairAndBinArrays;\n\n const positionBinArraysMap = new Map();\n for (let i = 0; i < binArrayPubkeyArray.length; i++) {\n const binArrayPubkey = binArrayPubkeyArray[i];\n const binArrayAccBuffer = binArraysAccInfo[i];\n if (!binArrayAccBuffer)\n throw new Error(\n `Bin Array account ${binArrayPubkey.toBase58()} not found`\n );\n const binArrayAccInfo = this.program.coder.accounts.decode(\n \"binArray\",\n binArrayAccBuffer.data\n );\n positionBinArraysMap.set(binArrayPubkey.toBase58(), binArrayAccInfo);\n }\n\n const positionBinArraysMapV2 = new Map();\n for (let i = binArrayPubkeyArray.length; i < binArraysAccInfo.length; i++) {\n const binArrayPubkey =\n binArrayPubkeyArrayV2[i - binArrayPubkeyArray.length];\n const binArrayAccBufferV2 = binArraysAccInfo[i];\n if (!binArrayAccBufferV2)\n throw new Error(\n `Bin Array account ${binArrayPubkey.toBase58()} not found`\n );\n const binArrayAccInfo = this.program.coder.accounts.decode(\n \"binArray\",\n binArrayAccBufferV2.data\n );\n positionBinArraysMapV2.set(binArrayPubkey.toBase58(), binArrayAccInfo);\n }\n\n if (!lbPairAccInfo)\n throw new Error(`LB Pair account ${this.pubkey.toBase58()} not found`);\n const { activeId } = this.program.coder.accounts.decode(\n \"lbPair\",\n lbPairAccInfo.data\n );\n\n const onChainTimestamp = new BN(\n clockAccInfo.data.readBigInt64LE(32).toString()\n ).toNumber();\n const userPositions = await Promise.all(\n positions.map(async ({ publicKey, account }) => {\n const { lowerBinId, upperBinId } = account;\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n const [lowerBinArrayPubKey] = deriveBinArray(\n this.pubkey,\n lowerBinArrayIndex,\n this.program.programId\n );\n const [upperBinArrayPubKey] = deriveBinArray(\n this.pubkey,\n upperBinArrayIndex,\n this.program.programId\n );\n const lowerBinArray = positionBinArraysMap.get(\n lowerBinArrayPubKey.toBase58()\n );\n const upperBinArray = positionBinArraysMap.get(\n upperBinArrayPubKey.toBase58()\n );\n return {\n publicKey,\n positionData: await DLMM.processPosition(\n this.program,\n PositionVersion.V1,\n this.lbPair,\n onChainTimestamp,\n account,\n this.tokenX.decimal,\n this.tokenY.decimal,\n lowerBinArray,\n upperBinArray\n ),\n version: PositionVersion.V1,\n };\n })\n );\n\n const userPositionsV2 = await Promise.all(\n positionsV2.map(async ({ publicKey, account }) => {\n const { lowerBinId, upperBinId } = account;\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n const [lowerBinArrayPubKey] = deriveBinArray(\n this.pubkey,\n lowerBinArrayIndex,\n this.program.programId\n );\n const [upperBinArrayPubKey] = deriveBinArray(\n this.pubkey,\n upperBinArrayIndex,\n this.program.programId\n );\n const lowerBinArray = positionBinArraysMapV2.get(\n lowerBinArrayPubKey.toBase58()\n );\n const upperBinArray = positionBinArraysMapV2.get(\n upperBinArrayPubKey.toBase58()\n );\n return {\n publicKey,\n positionData: await DLMM.processPosition(\n this.program,\n PositionVersion.V2,\n this.lbPair,\n onChainTimestamp,\n account,\n this.tokenX.decimal,\n this.tokenY.decimal,\n lowerBinArray,\n upperBinArray\n ),\n version: PositionVersion.V2,\n };\n })\n );\n\n return {\n activeBin: {\n binId: activeId,\n price: this.getPriceOfBinByBinId(activeId),\n },\n userPositions: [...userPositions, ...userPositionsV2],\n };\n }\n\n /**\n * The function `initializePositionAndAddLiquidityByWeight` function is used to initializes a position and adds liquidity\n * @param {TInitializePositionAndAddLiquidityParams}\n * - `positionPubKey`: The public key of the position account. (usually use `new Keypair()`)\n * - `totalXAmount`: The total amount of token X to be added to the liquidity pool.\n * - `totalYAmount`: The total amount of token Y to be added to the liquidity pool.\n * - `xYAmountDistribution`: An array of objects of type `XYAmountDistribution` that represents (can use `calculateSpotDistribution`, `calculateBidAskDistribution` & `calculateNormalDistribution`)\n * - `user`: The public key of the user account.\n * @returns {Promise<Transaction|Transaction[]>} The function `initializePositionAndAddLiquidityByWeight` returns a `Promise` that\n * resolves to either a single `Transaction` object (if less than 26bin involved) or an array of `Transaction` objects.\n */\n public async initializePositionAndAddLiquidityByWeight({\n positionPubKey,\n totalXAmount,\n totalYAmount,\n xYAmountDistribution,\n user,\n }: TInitializePositionAndAddLiquidityParams): Promise<\n Transaction | Transaction[]\n > {\n const { lowerBinId, upperBinId, binIds } =\n this.processXYAmountDistribution(xYAmountDistribution);\n\n if (upperBinId >= lowerBinId + MAX_BIN_PER_POSITION.toNumber()) {\n throw new Error(\n `Position must be within a range of 1 to ${MAX_BIN_PER_POSITION.toNumber()} bins.`\n );\n }\n\n const preInstructions: Array<TransactionInstruction> = [];\n const initializePositionIx = await this.program.methods\n .initializePosition(lowerBinId, upperBinId - lowerBinId + 1)\n .accounts({\n payer: user,\n position: positionPubKey,\n lbPair: this.pubkey,\n owner: user,\n })\n .instruction();\n preInstructions.push(initializePositionIx);\n\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const [binArrayLower] = deriveBinArray(\n this.pubkey,\n lowerBinArrayIndex,\n this.program.programId\n );\n\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n const [binArrayUpper] = deriveBinArray(\n this.pubkey,\n upperBinArrayIndex,\n this.program.programId\n );\n\n const binArraysNeeded: BN[] = Array.from(\n { length: upperBinArrayIndex.sub(lowerBinArrayIndex).toNumber() + 4 },\n (_, index) => index - 2 + lowerBinArrayIndex.toNumber()\n ).map((idx) => new BN(idx));\n\n const createBinArrayIxs = await this.createBinArraysIfNeeded(\n this.pubkey,\n binArraysNeeded,\n user\n );\n preInstructions.push(...createBinArrayIxs);\n\n const [\n { ataPubKey: userTokenX, ix: createPayerTokenXIx },\n { ataPubKey: userTokenY, ix: createPayerTokenYIx },\n ] = await Promise.all([\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenX.publicKey,\n user\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenY.publicKey,\n user\n ),\n ]);\n createPayerTokenXIx && preInstructions.push(createPayerTokenXIx);\n createPayerTokenYIx && preInstructions.push(createPayerTokenYIx);\n\n if (this.tokenX.publicKey.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenX,\n BigInt(totalXAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (this.tokenY.publicKey.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenY,\n BigInt(totalYAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: Array<TransactionInstruction> = [];\n if (\n [\n this.tokenX.publicKey.toBase58(),\n this.tokenY.publicKey.toBase58(),\n ].includes(NATIVE_MINT.toBase58())\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const setComputeUnitLimitIx = computeBudgetIx();\n\n const minBinId = Math.min(...binIds);\n const maxBinId = Math.max(...binIds);\n\n const minBinArrayIndex = binIdToBinArrayIndex(new BN(minBinId));\n const maxBinArrayIndex = binIdToBinArrayIndex(new BN(maxBinId));\n\n const useExtension =\n isOverflowDefaultBinArrayBitmap(minBinArrayIndex) ||\n isOverflowDefaultBinArrayBitmap(maxBinArrayIndex);\n\n const binArrayBitmapExtension = useExtension\n ? deriveBinArrayBitmapExtension(this.pubkey, this.program.programId)[0]\n : null;\n\n const activeId = (await this.getActiveBin()).binId;\n\n const binLiquidityDist: LiquidityParameterByWeight[\"binLiquidityDist\"] =\n toWeightDistribution(\n totalXAmount,\n totalYAmount,\n xYAmountDistribution.map((item) => ({\n binId: item.binId,\n xAmountBpsOfTotal: item.xAmountBpsOfTotal,\n yAmountBpsOfTotal: item.yAmountBpsOfTotal,\n })),\n this.lbPair.binStep\n );\n\n if (binLiquidityDist.length === 0) {\n throw new Error(\"No liquidity to add\");\n }\n\n const liquidityParams: LiquidityParameterByWeight = {\n amountX: totalXAmount,\n amountY: totalYAmount,\n binLiquidityDist,\n activeId,\n maxActiveBinSlippage: MAX_ACTIVE_BIN_SLIPPAGE,\n };\n\n const addLiquidityAccounts = {\n position: positionPubKey,\n lbPair: this.pubkey,\n userTokenX,\n userTokenY,\n reserveX: this.lbPair.reserveX,\n reserveY: this.lbPair.reserveY,\n tokenXMint: this.lbPair.tokenXMint,\n tokenYMint: this.lbPair.tokenYMint,\n binArrayLower,\n binArrayUpper,\n binArrayBitmapExtension,\n sender: user,\n tokenXProgram: TOKEN_PROGRAM_ID,\n tokenYProgram: TOKEN_PROGRAM_ID,\n };\n\n const oneSideLiquidityParams: LiquidityOneSideParameter = {\n amount: totalXAmount.isZero() ? totalYAmount : totalXAmount,\n activeId,\n maxActiveBinSlippage: MAX_ACTIVE_BIN_SLIPPAGE,\n binLiquidityDist,\n };\n\n const oneSideAddLiquidityAccounts = {\n binArrayLower,\n binArrayUpper,\n lbPair: this.pubkey,\n binArrayBitmapExtension: null,\n sender: user,\n position: positionPubKey,\n reserve: totalXAmount.isZero()\n ? this.lbPair.reserveY\n : this.lbPair.reserveX,\n tokenMint: totalXAmount.isZero()\n ? this.lbPair.tokenYMint\n : this.lbPair.tokenXMint,\n tokenProgram: TOKEN_PROGRAM_ID,\n userToken: totalXAmount.isZero() ? userTokenY : userTokenX,\n };\n\n const isOneSideDeposit = totalXAmount.isZero() || totalYAmount.isZero();\n const programMethod = isOneSideDeposit\n ? this.program.methods.addLiquidityOneSide(oneSideLiquidityParams)\n : this.program.methods.addLiquidityByWeight(liquidityParams);\n\n if (xYAmountDistribution.length < MAX_BIN_LENGTH_ALLOWED_IN_ONE_TX) {\n const addLiqTx = await programMethod\n .accounts(\n isOneSideDeposit ? oneSideAddLiquidityAccounts : addLiquidityAccounts\n )\n .preInstructions([setComputeUnitLimitIx, ...preInstructions])\n .postInstructions(postInstructions)\n .transaction();\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(addLiqTx);\n }\n\n const addLiqTx = await programMethod\n .accounts(\n isOneSideDeposit ? oneSideAddLiquidityAccounts : addLiquidityAccounts\n )\n .preInstructions([setComputeUnitLimitIx])\n .transaction();\n\n const transactions: Transaction[] = [];\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n if (preInstructions.length) {\n const preInstructionsTx = new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(...preInstructions);\n transactions.push(preInstructionsTx);\n }\n\n const mainTx = new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(addLiqTx);\n transactions.push(mainTx);\n\n if (postInstructions.length) {\n const postInstructionsTx = new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(...postInstructions);\n transactions.push(postInstructionsTx);\n }\n\n return transactions;\n }\n\n /**\n * The `addLiquidityByWeight` function is used to add liquidity to existing position\n * @param {TInitializePositionAndAddLiquidityParams}\n * - `positionPubKey`: The public key of the position account. (usually use `new Keypair()`)\n * - `totalXAmount`: The total amount of token X to be added to the liquidity pool.\n * - `totalYAmount`: The total amount of token Y to be added to the liquidity pool.\n * - `xYAmountDistribution`: An array of objects of type `XYAmountDistribution` that represents (can use `calculateSpotDistribution`, `calculateBidAskDistribution` & `calculateNormalDistribution`)\n * - `user`: The public key of the user account.\n * @returns {Promise<Transaction|Transaction[]>} The function `addLiquidityByWeight` returns a `Promise` that resolves to either a single\n * `Transaction` object (if less than 26bin involved) or an array of `Transaction` objects.\n */\n public async addLiquidityByWeight({\n lbPairPubKey,\n positionPubKey,\n totalXAmount,\n totalYAmount,\n xYAmountDistribution,\n user,\n }: TInitializePositionAndAddLiquidityParams): Promise<\n Transaction | Transaction[]\n > {\n const positionAccount = await this.program.account.positionV2.fetch(\n positionPubKey\n );\n const { lowerBinId, upperBinId, binIds } =\n this.processXYAmountDistribution(xYAmountDistribution);\n\n if (lowerBinId < positionAccount.lowerBinId)\n throw new Error(\n `Lower Bin ID (${lowerBinId}) lower than Position Lower Bin Id (${positionAccount.lowerBinId})`\n );\n if (upperBinId > positionAccount.upperBinId)\n throw new Error(\n `Upper Bin ID (${upperBinId}) higher than Position Upper Bin Id (${positionAccount.upperBinId})`\n );\n\n const minBinId = Math.min(...binIds);\n const maxBinId = Math.max(...binIds);\n\n const minBinArrayIndex = binIdToBinArrayIndex(new BN(minBinId));\n const maxBinArrayIndex = binIdToBinArrayIndex(new BN(maxBinId));\n\n const useExtension =\n isOverflowDefaultBinArrayBitmap(minBinArrayIndex) ||\n isOverflowDefaultBinArrayBitmap(maxBinArrayIndex);\n\n const binArrayBitmapExtension = useExtension\n ? deriveBinArrayBitmapExtension(this.pubkey, this.program.programId)[0]\n : null;\n\n const activeId = (await this.getActiveBin()).binId;\n\n const binLiquidityDist: LiquidityParameterByWeight[\"binLiquidityDist\"] =\n toWeightDistribution(\n totalXAmount,\n totalYAmount,\n xYAmountDistribution.map((item) => ({\n binId: item.binId,\n xAmountBpsOfTotal: item.xAmountBpsOfTotal,\n yAmountBpsOfTotal: item.yAmountBpsOfTotal,\n })),\n this.lbPair.binStep\n );\n\n if (binLiquidityDist.length === 0) {\n throw new Error(\"No liquidity to add\");\n }\n\n const lowerBinArrayIndex = binIdToBinArrayIndex(\n new BN(positionAccount.lowerBinId)\n );\n const [binArrayLower] = deriveBinArray(\n lbPairPubKey,\n lowerBinArrayIndex,\n this.program.programId\n );\n\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n const [binArrayUpper] = deriveBinArray(\n lbPairPubKey,\n upperBinArrayIndex,\n this.program.programId\n );\n\n const binArraysNeeded: BN[] = Array.from(\n { length: upperBinArrayIndex.sub(lowerBinArrayIndex).toNumber() + 4 },\n (_, index) => index - 2 + lowerBinArrayIndex.toNumber()\n ).map((idx) => new BN(idx));\n\n const preInstructions: TransactionInstruction[] = [];\n const createBinArrayIxs = await this.createBinArraysIfNeeded(\n lbPairPubKey,\n binArraysNeeded,\n user\n );\n preInstructions.push(...createBinArrayIxs);\n\n const [\n { ataPubKey: userTokenX, ix: createPayerTokenXIx },\n { ataPubKey: userTokenY, ix: createPayerTokenYIx },\n ] = await Promise.all([\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenX.publicKey,\n user\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenY.publicKey,\n user\n ),\n ]);\n createPayerTokenXIx && preInstructions.push(createPayerTokenXIx);\n createPayerTokenYIx && preInstructions.push(createPayerTokenYIx);\n\n if (this.tokenX.publicKey.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenX,\n BigInt(totalXAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (this.tokenY.publicKey.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenY,\n BigInt(totalYAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: Array<TransactionInstruction> = [];\n if (\n [\n this.tokenX.publicKey.toBase58(),\n this.tokenY.publicKey.toBase58(),\n ].includes(NATIVE_MINT.toBase58())\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const setComputeUnitLimitIx = computeBudgetIx();\n\n const liquidityParams: LiquidityParameterByWeight = {\n amountX: totalXAmount,\n amountY: totalYAmount,\n binLiquidityDist,\n activeId,\n maxActiveBinSlippage: MAX_ACTIVE_BIN_SLIPPAGE,\n };\n\n const addLiquidityAccounts = {\n position: positionPubKey,\n lbPair: this.pubkey,\n userTokenX,\n userTokenY,\n reserveX: this.lbPair.reserveX,\n reserveY: this.lbPair.reserveY,\n tokenXMint: this.lbPair.tokenXMint,\n tokenYMint: this.lbPair.tokenYMint,\n binArrayLower,\n binArrayUpper,\n binArrayBitmapExtension,\n sender: user,\n tokenXProgram: TOKEN_PROGRAM_ID,\n tokenYProgram: TOKEN_PROGRAM_ID,\n };\n\n const oneSideLiquidityParams: LiquidityOneSideParameter = {\n amount: totalXAmount.isZero() ? totalYAmount : totalXAmount,\n activeId,\n maxActiveBinSlippage: MAX_ACTIVE_BIN_SLIPPAGE,\n binLiquidityDist,\n };\n\n const oneSideAddLiquidityAccounts = {\n binArrayLower,\n binArrayUpper,\n lbPair: this.pubkey,\n binArrayBitmapExtension: null,\n sender: user,\n position: positionPubKey,\n reserve: totalXAmount.isZero()\n ? this.lbPair.reserveY\n : this.lbPair.reserveX,\n tokenMint: totalXAmount.isZero()\n ? this.lbPair.tokenYMint\n : this.lbPair.tokenXMint,\n tokenProgram: TOKEN_PROGRAM_ID,\n userToken: totalXAmount.isZero() ? userTokenY : userTokenX,\n };\n\n const isOneSideDeposit = totalXAmount.isZero() || totalYAmount.isZero();\n const programMethod = isOneSideDeposit\n ? this.program.methods.addLiquidityOneSide(oneSideLiquidityParams)\n : this.program.methods.addLiquidityByWeight(liquidityParams);\n\n if (xYAmountDistribution.length < MAX_BIN_LENGTH_ALLOWED_IN_ONE_TX) {\n const addLiqTx = await programMethod\n .accounts(\n isOneSideDeposit ? oneSideAddLiquidityAccounts : addLiquidityAccounts\n )\n .preInstructions([setComputeUnitLimitIx, ...preInstructions])\n .postInstructions(postInstructions)\n .transaction();\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(addLiqTx);\n }\n\n const addLiqTx = await programMethod\n .accounts(\n isOneSideDeposit ? oneSideAddLiquidityAccounts : addLiquidityAccounts\n )\n .preInstructions([setComputeUnitLimitIx])\n .transaction();\n\n const transactions: Transaction[] = [];\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n if (preInstructions.length) {\n const preInstructionsTx = new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(...preInstructions);\n transactions.push(preInstructionsTx);\n }\n\n const mainTx = new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(addLiqTx);\n transactions.push(mainTx);\n\n if (postInstructions.length) {\n const postInstructionsTx = new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(...postInstructions);\n transactions.push(postInstructionsTx);\n }\n\n return transactions;\n }\n\n /**\n * The `removeLiquidity` function is used to remove liquidity from a position,\n * with the option to claim rewards and close the position.\n * @param\n * - `user`: The public key of the user account.\n * - `position`: The public key of the position account.\n * - `binIds`: An array of numbers that represent the bin IDs to remove liquidity from.\n * - `liquiditiesBpsToRemove`: An array of numbers (percentage) that represent the liquidity to remove from each bin.\n * - `shouldClaimAndClose`: A boolean flag that indicates whether to claim rewards and close the position.\n * @returns {Promise<Transaction|Transaction[]>}\n */\n public async removeLiquidity({\n user,\n position,\n binIds,\n liquiditiesBpsToRemove,\n shouldClaimAndClose = false,\n }: {\n user: PublicKey;\n position: PublicKey;\n binIds: number[];\n liquiditiesBpsToRemove: BN[];\n shouldClaimAndClose?: boolean;\n }): Promise<Transaction | Transaction[]> {\n const { lbPair, lowerBinId } = await this.program.account.positionV2.fetch(\n position\n );\n\n /// assertions\n if (binIds.length !== liquiditiesBpsToRemove.length)\n throw new Error(\n \"binIds and liquiditiesBpsToRemove should be of equal length\"\n );\n\n const { reserveX, reserveY, tokenXMint, tokenYMint } =\n await this.program.account.lbPair.fetch(lbPair);\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n const [binArrayLower] = deriveBinArray(\n lbPair,\n lowerBinArrayIndex,\n this.program.programId\n );\n const [binArrayUpper] = deriveBinArray(\n lbPair,\n upperBinArrayIndex,\n this.program.programId\n );\n\n const preInstructions: Array<TransactionInstruction> = [];\n const setComputeUnitLimitIx = computeBudgetIx();\n preInstructions.push(setComputeUnitLimitIx);\n\n const [\n { ataPubKey: userTokenX, ix: createPayerTokenXIx },\n { ataPubKey: userTokenY, ix: createPayerTokenYIx },\n ] = await Promise.all([\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenX.publicKey,\n user\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenY.publicKey,\n user\n ),\n ]);\n createPayerTokenXIx && preInstructions.push(createPayerTokenXIx);\n createPayerTokenYIx && preInstructions.push(createPayerTokenYIx);\n\n const secondTransactionsIx: TransactionInstruction[] = [];\n const postInstructions: Array<TransactionInstruction> = [];\n\n if (shouldClaimAndClose) {\n const claimSwapFeeIx = await this.program.methods\n .claimFee()\n .accounts({\n binArrayLower,\n binArrayUpper,\n lbPair: this.pubkey,\n sender: user,\n position,\n reserveX,\n reserveY,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenXMint: this.tokenX.publicKey,\n tokenYMint: this.tokenY.publicKey,\n userTokenX,\n userTokenY,\n })\n .instruction();\n postInstructions.push(claimSwapFeeIx);\n\n for (let i = 0; i < 2; i++) {\n const rewardInfo = this.lbPair.rewardInfos[i];\n if (!rewardInfo || rewardInfo.mint.equals(PublicKey.default)) continue;\n\n const { ataPubKey, ix: rewardAtaIx } = await getOrCreateATAInstruction(\n this.program.provider.connection,\n rewardInfo.mint,\n user\n );\n rewardAtaIx && preInstructions.push(rewardAtaIx);\n\n const claimRewardIx = await this.program.methods\n .claimReward(new BN(i))\n .accounts({\n lbPair: this.pubkey,\n sender: user,\n position,\n binArrayLower,\n binArrayUpper,\n rewardVault: rewardInfo.vault,\n rewardMint: rewardInfo.mint,\n tokenProgram: TOKEN_PROGRAM_ID,\n userTokenAccount: ataPubKey,\n })\n .instruction();\n secondTransactionsIx.push(claimRewardIx);\n }\n\n const closePositionIx = await this.program.methods\n .closePosition()\n .accounts({\n binArrayLower,\n binArrayUpper,\n rentReceiver: user,\n position,\n lbPair: this.pubkey,\n sender: user,\n })\n .instruction();\n if (secondTransactionsIx.length) {\n secondTransactionsIx.push(closePositionIx);\n } else {\n postInstructions.push(closePositionIx);\n }\n }\n\n if (\n [\n this.tokenX.publicKey.toBase58(),\n this.tokenY.publicKey.toBase58(),\n ].includes(NATIVE_MINT.toBase58())\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const binLiquidityReduction: BinLiquidityReduction[] = binIds.map(\n (binId, idx) => {\n return {\n binId,\n bpsToRemove: liquiditiesBpsToRemove[idx].toNumber(),\n };\n }\n );\n\n const minBinId = Math.min(...binIds);\n const maxBinId = Math.max(...binIds);\n\n const minBinArrayIndex = binIdToBinArrayIndex(new BN(minBinId));\n const maxBinArrayIndex = binIdToBinArrayIndex(new BN(maxBinId));\n\n const useExtension =\n isOverflowDefaultBinArrayBitmap(minBinArrayIndex) ||\n isOverflowDefaultBinArrayBitmap(maxBinArrayIndex);\n\n const binArrayBitmapExtension = useExtension\n ? deriveBinArrayBitmapExtension(this.pubkey, this.program.programId)[0]\n : null;\n\n const removeLiquidityTx = await this.program.methods\n .removeLiquidity(binLiquidityReduction)\n .accounts({\n position,\n lbPair,\n userTokenX,\n userTokenY,\n reserveX,\n reserveY,\n tokenXMint,\n tokenYMint,\n binArrayLower,\n binArrayUpper,\n binArrayBitmapExtension,\n tokenXProgram: TOKEN_PROGRAM_ID,\n tokenYProgram: TOKEN_PROGRAM_ID,\n sender: user,\n })\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n if (secondTransactionsIx.length) {\n const claimRewardsTx = new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(...secondTransactionsIx);\n\n const mainTx = new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(removeLiquidityTx);\n\n return [mainTx, claimRewardsTx];\n } else {\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(removeLiquidityTx);\n }\n }\n\n /**\n * The `closePosition` function closes a position\n * @param\n * - `owner`: The public key of the owner of the position.\n * - `position`: The public key of the position account.\n * @returns {Promise<Transaction>}\n */\n public async closePosition({\n owner,\n position,\n }: {\n owner: PublicKey;\n position: Position;\n }): Promise<Transaction> {\n const { lowerBinId } = await this.program.account.positionV2.fetch(\n position.publicKey\n );\n\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const [binArrayLower] = deriveBinArray(\n this.pubkey,\n lowerBinArrayIndex,\n this.program.programId\n );\n\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n const [binArrayUpper] = deriveBinArray(\n this.pubkey,\n upperBinArrayIndex,\n this.program.programId\n );\n\n const closePositionTx = await this.program.methods\n .closePosition()\n .accounts({\n binArrayLower,\n binArrayUpper,\n rentReceiver: owner,\n position: position.publicKey,\n lbPair: this.pubkey,\n sender: owner,\n })\n .transaction();\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: owner,\n }).add(closePositionTx);\n }\n\n /**\n * The `swapQuote` function returns a quote for a swap\n * @param\n * - `inAmount`: Amount of lamport to swap in\n * - `swapForY`: Swap token X to Y when it is true, else reversed.\n * - `allowedSlipage`: Allowed slippage for the swap. Expressed in BPS. To convert from slippage percentage to BPS unit: SLIPPAGE_PERCENTAGE * 100\n * @returns {SwapQuote}\n * - `outAmount`: Amount of lamport to swap out\n * - `fee`: Fee amount\n * - `protocolFee`: Protocol fee amount\n * - `minOutAmount`: Minimum amount of lamport to swap out\n * - `priceImpact`: Price impact of the swap\n * - `binArraysPubkey`: Array of bin arrays involved in the swap\n */\n public swapQuote(\n inAmount: BN,\n swapForY: boolean,\n allowedSlippage: BN,\n binArrays: BinArrayAccount[]\n ): SwapQuote {\n // TODO: Should we use onchain clock ? Volatile fee rate is sensitive to time. Caching clock might causes the quoted fee off ...\n const currentTimestamp = Date.now() / 1000;\n let inAmountLeft = inAmount;\n\n let vParameterClone = Object.assign({}, this.lbPair.vParameters);\n let activeId = new BN(this.lbPair.activeId);\n\n const binStep = this.lbPair.binStep;\n const sParameters = this.lbPair.parameters;\n\n this.updateReference(\n activeId.toNumber(),\n vParameterClone,\n sParameters,\n currentTimestamp\n );\n\n let startBin: Bin | null = null;\n let binArraysForSwap = new Map();\n let actualOutAmount: BN = new BN(0);\n let feeAmount: BN = new BN(0);\n let protocolFeeAmount: BN = new BN(0);\n\n while (!inAmountLeft.isZero()) {\n let binArrayAccountToSwap = findNextBinArrayWithLiquidity(\n swapForY,\n activeId,\n this.lbPair,\n this.binArrayBitmapExtension?.account,\n binArrays\n );\n\n if (binArrayAccountToSwap == null) {\n throw new Error(\"Insufficient liquidity\");\n }\n\n binArraysForSwap.set(binArrayAccountToSwap.publicKey, true);\n\n this.updateVolatilityAccumulator(\n vParameterClone,\n sParameters,\n activeId.toNumber()\n );\n\n if (\n isBinIdWithinBinArray(activeId, binArrayAccountToSwap.account.index)\n ) {\n const bin = getBinFromBinArray(\n activeId.toNumber(),\n binArrayAccountToSwap.account\n );\n const { amountIn, amountOut, fee, protocolFee } = swapQuoteAtBin(\n bin,\n binStep,\n sParameters,\n vParameterClone,\n inAmountLeft,\n swapForY\n );\n\n if (!amountIn.isZero()) {\n inAmountLeft = inAmountLeft.sub(amountIn);\n actualOutAmount = actualOutAmount.add(amountOut);\n feeAmount = feeAmount.add(fee);\n protocolFeeAmount = protocolFee.add(protocolFee);\n\n if (!startBin) {\n startBin = bin;\n }\n }\n }\n\n if (!inAmountLeft.isZero()) {\n if (swapForY) {\n activeId = activeId.sub(new BN(1));\n } else {\n activeId = activeId.add(new BN(1));\n }\n }\n }\n\n if (!startBin) throw new Error(\"Invalid start bin\");\n\n const outAmountWithoutSlippage = getOutAmount(\n startBin,\n inAmount.sub(\n computeFeeFromAmount(binStep, sParameters, vParameterClone, inAmount)\n ),\n swapForY\n );\n\n const priceImpact = new Decimal(actualOutAmount.toString())\n .sub(new Decimal(outAmountWithoutSlippage.toString()))\n .div(new Decimal(outAmountWithoutSlippage.toString()))\n .mul(new Decimal(100));\n\n const minOutAmount = actualOutAmount\n .mul(new BN(BASIS_POINT_MAX).sub(allowedSlippage))\n .div(new BN(BASIS_POINT_MAX));\n\n return {\n outAmount: actualOutAmount,\n fee: feeAmount,\n protocolFee: protocolFeeAmount,\n minOutAmount,\n priceImpact,\n binArraysPubkey: [...binArraysForSwap.keys()],\n };\n }\n\n /**\n * Returns a transaction to be signed and sent by user performing swap.\n * @param {SwapParams}\n * - `inToken`: The public key of the token to be swapped in.\n * - `outToken`: The public key of the token to be swapped out.\n * - `inAmount`: The amount of token to be swapped in.\n * - `minOutAmount`: The minimum amount of token to be swapped out.\n * - `lbPair`: The public key of the liquidity pool.\n * - `user`: The public key of the user account.\n * - `binArraysPubkey`: Array of bin arrays involved in the swap\n * @returns {Promise<Transaction>}\n */\n public async swap({\n inToken,\n outToken,\n inAmount,\n minOutAmount,\n lbPair,\n user,\n binArraysPubkey,\n }: SwapParams): Promise<Transaction> {\n const { tokenXMint, tokenYMint, reserveX, reserveY, activeId, oracle } =\n await this.program.account.lbPair.fetch(lbPair);\n\n const preInstructions: TransactionInstruction[] = [computeBudgetIx()];\n\n const [\n { ataPubKey: userTokenIn, ix: createInTokenAccountIx },\n { ataPubKey: userTokenOut, ix: createOutTokenAccountIx },\n ] = await Promise.all([\n getOrCreateATAInstruction(\n this.program.provider.connection,\n inToken,\n user\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n outToken,\n user\n ),\n ]);\n createInTokenAccountIx && preInstructions.push(createInTokenAccountIx);\n createOutTokenAccountIx && preInstructions.push(createOutTokenAccountIx);\n\n if (inToken.equals(NATIVE_MINT)) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenIn,\n BigInt(inAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n const postInstructions: Array<TransactionInstruction> = [];\n if (outToken.equals(NATIVE_MINT)) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n let swapForY = true;\n if (outToken.equals(tokenXMint)) swapForY = false;\n\n // TODO: needs some refinement in case binArray not yet initialized\n const binArrays: AccountMeta[] = binArraysPubkey.map((pubkey) => {\n return {\n isSigner: false,\n isWritable: true,\n pubkey,\n };\n });\n\n return await this.program.methods\n .swap(inAmount, minOutAmount)\n .accounts({\n lbPair,\n reserveX,\n reserveY,\n tokenXMint,\n tokenYMint,\n tokenXProgram: TOKEN_PROGRAM_ID, // dont use 2022 first; lack familiarity\n tokenYProgram: TOKEN_PROGRAM_ID, // dont use 2022 first; lack familiarity\n user,\n userTokenIn,\n userTokenOut,\n binArrayBitmapExtension: this.binArrayBitmapExtension\n ? this.binArrayBitmapExtension.publicKey\n : null,\n oracle,\n hostFeeIn: null,\n })\n .remainingAccounts(binArrays)\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n }\n\n /**\n * The claimLMReward function is used to claim rewards for a specific position owned by a specific owner.\n * @param\n * - `owner`: The public key of the owner of the position.\n * - `position`: The public key of the position account.\n * @returns {Promise<Transaction>}\n */\n public async claimLMReward({\n owner,\n position,\n }: {\n owner: PublicKey;\n position: Position;\n }): Promise<Transaction> {\n const claimTransactions = await this.createClaimBuildMethod({\n owner,\n position,\n });\n if (!claimTransactions.length) return;\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: owner,\n }).add(...claimTransactions);\n }\n\n /**\n * The `claimAllLMRewards` function is used to claim all liquidity mining rewards for a given owner\n * and their positions.\n * @param\n * - `owner`: The public key of the owner of the positions.\n * - `positions`: An array of objects of type `PositionData` that represents the positions to claim rewards from.\n * @returns {Promise<Transaction[]>}\n */\n public async claimAllLMRewards({\n owner,\n positions,\n }: {\n owner: PublicKey;\n positions: Position[];\n }): Promise<Transaction[]> {\n const claimAllTxs = (\n await Promise.all(\n positions.map(async (position, idx) => {\n return await this.createClaimBuildMethod({\n owner,\n position,\n shouldIncludePreIx: idx === 0,\n });\n })\n )\n ).flat();\n\n const chunkedClaimAllTx = chunks(claimAllTxs, MAX_CLAIM_ALL_ALLOWED);\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n return Promise.all(\n chunkedClaimAllTx.map(async (claimAllTx) => {\n return new Transaction({\n feePayer: owner,\n blockhash,\n lastValidBlockHeight,\n })\n .add(computeBudgetIx())\n .add(...claimAllTx);\n })\n );\n }\n\n /**\n * The function `claimSwapFee` is used to claim swap fees for a specific position owned by a specific owner.\n * @param\n * - `owner`: The public key of the owner of the position.\n * - `position`: The public key of the position account.\n * @returns {Promise<Transaction>}\n */\n public async claimSwapFee({\n owner,\n position,\n }: {\n owner: PublicKey;\n position: Position;\n }): Promise<Transaction> {\n const claimFeeTx = await this.createClaimSwapFeeMethod({ owner, position });\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: owner,\n }).add(claimFeeTx);\n }\n\n /**\n * The `claimAllSwapFee` function to claim swap fees for multiple positions owned by a specific owner.\n * @param\n * - `owner`: The public key of the owner of the positions.\n * - `positions`: An array of objects of type `PositionData` that represents the positions to claim swap fees from.\n * @returns {Promise<Transaction[]>}\n */\n public async claimAllSwapFee({\n owner,\n positions,\n }: {\n owner: PublicKey;\n positions: Position[];\n }): Promise<Transaction[]> {\n const claimAllTxs = (\n await Promise.all(\n positions.map(async (position, idx) => {\n return await this.createClaimSwapFeeMethod({\n owner,\n position,\n shouldIncludePretIx: idx === 0,\n shouldIncludePostIx: idx === positions.length - 1,\n });\n })\n )\n ).flat();\n\n const chunkedClaimAllTx = chunks(claimAllTxs, MAX_CLAIM_ALL_ALLOWED);\n\n return Promise.all(\n chunkedClaimAllTx.map(async (claimAllTx) => {\n const { recentBlockhash, lastValidBlockHeight } = claimAllTx[0];\n return new Transaction({\n feePayer: owner,\n blockhash: recentBlockhash,\n lastValidBlockHeight,\n })\n .add(computeBudgetIx())\n .add(...claimAllTx);\n })\n );\n }\n\n /**\n * The function `claimAllRewardsByPosition` allows a user to claim all rewards for a specific\n * position.\n * @param\n * - `owner`: The public key of the owner of the position.\n * - `position`: The public key of the position account.\n * @returns {Promise<Transaction[]>}\n */\n public async claimAllRewardsByPosition({\n owner,\n position,\n }: {\n owner: PublicKey;\n position: Position;\n }): Promise<Transaction[]> {\n const claimAllSwapFeeTxs = await this.createClaimSwapFeeMethod({\n owner,\n position,\n });\n const claimAllLMTxs = await this.createClaimBuildMethod({\n owner,\n position,\n });\n\n const claimAllTxs = chunks(\n [claimAllSwapFeeTxs, ...claimAllLMTxs],\n MAX_CLAIM_ALL_ALLOWED\n );\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n return Promise.all(\n claimAllTxs.map(async (claimAllTx) => {\n return new Transaction({\n feePayer: owner,\n blockhash,\n lastValidBlockHeight,\n })\n .add(computeBudgetIx())\n .add(...claimAllTx);\n })\n );\n }\n\n /**\n * The `claimAllRewards` function to claim swap fees and LM rewards for multiple positions owned by a specific owner.\n * @param\n * - `owner`: The public key of the owner of the positions.\n * - `positions`: An array of objects of type `PositionData` that represents the positions to claim swap fees and LM rewards from.\n * @returns {Promise<Transaction[]>}\n */\n public async claimAllRewards({\n owner,\n positions,\n }: {\n owner: PublicKey;\n positions: Position[];\n }): Promise<Transaction[]> {\n const claimAllSwapFeeTxs = (\n await Promise.all(\n positions.map(async (position, idx) => {\n return await this.createClaimSwapFeeMethod({\n owner,\n position,\n shouldIncludePretIx: idx === 0,\n shouldIncludePostIx: idx === positions.length - 1,\n });\n })\n )\n ).flat();\n\n const claimAllLMTxs = (\n await Promise.all(\n positions.map(async (position, idx) => {\n return await this.createClaimBuildMethod({\n owner,\n position,\n shouldIncludePreIx: idx === 0,\n });\n })\n )\n ).flat();\n\n const chunkedClaimAllTx = chunks(\n [...claimAllSwapFeeTxs, ...claimAllLMTxs],\n MAX_CLAIM_ALL_ALLOWED\n );\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n return Promise.all(\n chunkedClaimAllTx.map(async (claimAllTx) => {\n return new Transaction({\n feePayer: owner,\n blockhash,\n lastValidBlockHeight,\n })\n .add(computeBudgetIx())\n .add(...claimAllTx);\n })\n );\n }\n\n /** Private static method */\n\n private static async getBinArrays(\n program: ClmmProgram,\n lbPairPubkey: PublicKey\n ): Promise<Array<BinArrayAccount>> {\n return program.account.binArray.all([\n {\n memcmp: {\n bytes: bs58.encode(lbPairPubkey.toBuffer()),\n offset: 8 + 16,\n },\n },\n ]);\n }\n\n private static async getClaimableLMReward(\n program: ClmmProgram,\n positionVersion: PositionVersion,\n lbPair: LbPairAccount,\n onChainTimestamp: number,\n position: PositionAccount,\n lowerBinArray?: BinArray,\n upperBinArray?: BinArray\n ): Promise<LMRewards> {\n const lowerBinArrayIdx = binIdToBinArrayIndex(new BN(position.lowerBinId));\n\n let rewards = [new BN(0), new BN(0)];\n\n let _lowerBinArray: BinArray | undefined | null = lowerBinArray;\n let _upperBinArray: BinArray | undefined | null = upperBinArray;\n if (!lowerBinArray || !upperBinArray) {\n const lowerBinArrayIdx = binIdToBinArrayIndex(\n new BN(position.lowerBinId)\n );\n const [lowerBinArray] = deriveBinArray(\n position.lbPair,\n lowerBinArrayIdx,\n program.programId\n );\n\n const upperBinArrayIdx = lowerBinArrayIdx.add(new BN(1));\n const [upperBinArray] = deriveBinArray(\n position.lbPair,\n upperBinArrayIdx,\n program.programId\n );\n\n [_lowerBinArray, _upperBinArray] =\n await program.account.binArray.fetchMultiple([\n lowerBinArray,\n upperBinArray,\n ]);\n }\n\n if (!_lowerBinArray || !_upperBinArray)\n throw new Error(\"BinArray not found\");\n\n for (let i = position.lowerBinId; i <= position.upperBinId; i++) {\n const binArrayIdx = binIdToBinArrayIndex(new BN(i));\n const binArray = binArrayIdx.eq(lowerBinArrayIdx)\n ? _lowerBinArray\n : _upperBinArray;\n const binState = getBinFromBinArray(i, binArray);\n const binIdxInPosition = i - position.lowerBinId;\n\n const positionRewardInfo = position.rewardInfos[binIdxInPosition];\n const liquidityShare =\n positionVersion === PositionVersion.V1\n ? position.liquidityShares[binIdxInPosition]\n : position.liquidityShares[binIdxInPosition].shrn(64);\n\n for (let j = 0; j < 2; j++) {\n const pairRewardInfo = lbPair.rewardInfos[j];\n\n if (!pairRewardInfo.mint.equals(PublicKey.default)) {\n let rewardPerTokenStored = binState.rewardPerTokenStored[j];\n\n if (i == lbPair.activeId && !binState.liquiditySupply.isZero()) {\n const currentTime = new BN(\n Math.min(\n onChainTimestamp,\n pairRewardInfo.rewardDurationEnd.toNumber()\n )\n );\n const delta = currentTime.sub(pairRewardInfo.lastUpdateTime);\n const liquiditySupply =\n binArray.version == 0\n ? binState.liquiditySupply\n : binState.liquiditySupply.shrn(64);\n const rewardPerTokenStoredDelta = pairRewardInfo.rewardRate\n .mul(delta)\n .div(new BN(15))\n .div(liquiditySupply);\n rewardPerTokenStored = rewardPerTokenStored.add(\n rewardPerTokenStoredDelta\n );\n }\n\n const delta = rewardPerTokenStored.sub(\n positionRewardInfo.rewardPerTokenCompletes[j]\n );\n const newReward = mulShr(\n delta,\n liquidityShare,\n SCALE_OFFSET,\n Rounding.Down\n );\n rewards[j] = rewards[j]\n .add(newReward)\n .add(positionRewardInfo.rewardPendings[j]);\n }\n }\n }\n\n return {\n rewardOne: rewards[0],\n rewardTwo: rewards[1],\n };\n }\n\n private static async getClaimableSwapFee(\n program: ClmmProgram,\n positionVersion: PositionVersion,\n position: PositionAccount,\n lowerBinArray?: BinArray,\n upperBinArray?: BinArray\n ): Promise<SwapFee> {\n const lowerBinArrayIdx = binIdToBinArrayIndex(new BN(position.lowerBinId));\n\n let feeX = new BN(0);\n let feeY = new BN(0);\n\n let _lowerBinArray: BinArray | undefined | null = lowerBinArray;\n let _upperBinArray: BinArray | undefined | null = upperBinArray;\n if (!lowerBinArray || !upperBinArray) {\n const lowerBinArrayIdx = binIdToBinArrayIndex(\n new BN(position.lowerBinId)\n );\n const [lowerBinArray] = deriveBinArray(\n position.lbPair,\n lowerBinArrayIdx,\n program.programId\n );\n\n const upperBinArrayIdx = lowerBinArrayIdx.add(new BN(1));\n const [upperBinArray] = deriveBinArray(\n position.lbPair,\n upperBinArrayIdx,\n program.programId\n );\n\n [_lowerBinArray, _upperBinArray] =\n await program.account.binArray.fetchMultiple([\n lowerBinArray,\n upperBinArray,\n ]);\n }\n\n if (!_lowerBinArray || !_upperBinArray)\n throw new Error(\"BinArray not found\");\n\n for (let i = position.lowerBinId; i <= position.upperBinId; i++) {\n const binArrayIdx = binIdToBinArrayIndex(new BN(i));\n const binArray = binArrayIdx.eq(lowerBinArrayIdx)\n ? _lowerBinArray\n : _upperBinArray;\n const binState = getBinFromBinArray(i, binArray);\n const binIdxInPosition = i - position.lowerBinId;\n\n const feeInfos = position.feeInfos[binIdxInPosition];\n const liquidityShare =\n positionVersion === PositionVersion.V1\n ? position.liquidityShares[binIdxInPosition]\n : position.liquidityShares[binIdxInPosition].shrn(64);\n\n const newFeeX = mulShr(\n liquidityShare,\n binState.feeAmountXPerTokenStored.sub(feeInfos.feeXPerTokenComplete),\n SCALE_OFFSET,\n Rounding.Down\n );\n\n const newFeeY = mulShr(\n liquidityShare,\n binState.feeAmountYPerTokenStored.sub(feeInfos.feeYPerTokenComplete),\n SCALE_OFFSET,\n Rounding.Down\n );\n\n feeX = feeX.add(newFeeX).add(feeInfos.feeXPending);\n feeY = feeY.add(newFeeY).add(feeInfos.feeYPending);\n }\n\n return { feeX, feeY };\n }\n\n private static async processPosition(\n program: ClmmProgram,\n version: PositionVersion,\n lbPair: LbPairAccount,\n onChainTimestamp: number,\n positionAccount: PositionAccount,\n baseTokenDecimal: number,\n quoteTokenDecimal: number,\n lowerBinArray: BinArray,\n upperBinArray: BinArray\n ): Promise<PositionData | null> {\n const {\n lowerBinId,\n upperBinId,\n liquidityShares: posShares,\n lastUpdatedAt,\n } = positionAccount;\n\n const bins = this.getBinsBetweenLowerAndUpperBound(\n lbPair,\n lowerBinId,\n upperBinId,\n baseTokenDecimal,\n quoteTokenDecimal,\n lowerBinArray,\n upperBinArray\n );\n\n if (!bins.length) return null;\n\n /// assertion\n if (\n bins[0].binId !== lowerBinId ||\n bins[bins.length - 1].binId !== upperBinId\n )\n throw new Error(\"Bin ID mismatch\");\n\n const positionData: PositionBinData[] = [];\n let totalXAmount = new Decimal(0);\n let totalYAmount = new Decimal(0);\n\n bins.forEach((bin, idx) => {\n const binSupply = new Decimal(bin.supply.toString());\n\n let posShare;\n if (bin.version === 1 && version === PositionVersion.V1) {\n posShare = new Decimal(posShares[idx].shln(64).toString());\n } else {\n posShare = new Decimal(posShares[idx].toString());\n }\n const positionXAmount = binSupply.eq(new Decimal(\"0\"))\n ? new Decimal(\"0\")\n : posShare.mul(bin.xAmount.toString()).div(binSupply).floor();\n const positionYAmount = binSupply.eq(new Decimal(\"0\"))\n ? new Decimal(\"0\")\n : posShare.mul(bin.yAmount.toString()).div(binSupply).floor();\n\n totalXAmount = totalXAmount.add(positionXAmount);\n totalYAmount = totalYAmount.add(positionYAmount);\n\n positionData.push({\n binId: bin.binId,\n price: bin.price,\n pricePerToken: bin.pricePerToken,\n binXAmount: bin.xAmount.toString(),\n binYAmount: bin.yAmount.toString(),\n binLiquidity: binSupply.toString(),\n positionLiquidity: posShare.toString(),\n positionXAmount: positionXAmount.toString(),\n positionYAmount: positionYAmount.toString(),\n });\n });\n\n const { feeX, feeY } = await this.getClaimableSwapFee(\n program,\n version,\n positionAccount,\n lowerBinArray,\n upperBinArray\n );\n const { rewardOne, rewardTwo } = await this.getClaimableLMReward(\n program,\n version,\n lbPair,\n onChainTimestamp,\n positionAccount,\n lowerBinArray,\n upperBinArray\n );\n\n return {\n totalXAmount: totalXAmount.toString(),\n totalYAmount: totalYAmount.toString(),\n positionBinData: positionData,\n lastUpdatedAt,\n lowerBinId,\n upperBinId,\n feeX,\n feeY,\n rewardOne,\n rewardTwo,\n };\n }\n\n private static getBinsBetweenLowerAndUpperBound(\n lbPair: LbPairAccount,\n lowerBinId: number,\n upperBinId: number,\n baseTokenDecimal: number,\n quoteTokenDecimal: number,\n lowerBinArrays: BinArray,\n upperBinArrays: BinArray\n ): BinLiquidity[] {\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n let bins: BinLiquidity[] = [];\n if (lowerBinArrayIndex.eq(upperBinArrayIndex)) {\n const binArray = lowerBinArrays;\n\n const [lowerBinIdForBinArray] = getBinArrayLowerUpperBinId(\n binArray.index\n );\n\n binArray.bins.forEach((bin, idx) => {\n const binId = lowerBinIdForBinArray.toNumber() + idx;\n\n if (binId >= lowerBinId && binId <= upperBinId) {\n const pricePerLamport = this.getPriceOfBinByBinId(\n lbPair.binStep,\n binId\n );\n bins.push({\n binId,\n xAmount: bin.amountX,\n yAmount: bin.amountY,\n supply: bin.liquiditySupply,\n price: pricePerLamport,\n version: binArray.version,\n pricePerToken: new Decimal(pricePerLamport)\n .mul(new Decimal(10 ** (baseTokenDecimal - quoteTokenDecimal)))\n .toString(),\n });\n }\n });\n } else {\n const binArrays = [lowerBinArrays, upperBinArrays];\n\n binArrays.forEach((binArray) => {\n const [lowerBinIdForBinArray] = getBinArrayLowerUpperBinId(\n binArray.index\n );\n binArray.bins.forEach((bin, idx) => {\n const binId = lowerBinIdForBinArray.toNumber() + idx;\n if (binId >= lowerBinId && binId <= upperBinId) {\n const pricePerLamport = this.getPriceOfBinByBinId(\n lbPair.binStep,\n binId\n );\n bins.push({\n binId,\n xAmount: bin.amountX,\n yAmount: bin.amountY,\n supply: bin.liquiditySupply,\n price: pricePerLamport,\n version: binArray.version,\n pricePerToken: new Decimal(pricePerLamport)\n .mul(new Decimal(10 ** (baseTokenDecimal - quoteTokenDecimal)))\n .toString(),\n });\n }\n });\n });\n }\n\n return bins;\n }\n\n private static getPriceOfBinByBinId(binStep: number, binId: number): string {\n const binStepNum = new Decimal(binStep).div(new Decimal(BASIS_POINT_MAX));\n return new Decimal(1)\n .add(new Decimal(binStepNum))\n .pow(new Decimal(binId))\n .toString();\n }\n\n /** Private method */\n\n private processXYAmountDistribution(xYAmountDistribution: BinAndAmount[]) {\n let currentBinId: number | null = null;\n const xAmountDistribution: BN[] = [];\n const yAmountDistribution: BN[] = [];\n const binIds: number[] = [];\n\n xYAmountDistribution.forEach((binAndAmount) => {\n xAmountDistribution.push(binAndAmount.xAmountBpsOfTotal);\n yAmountDistribution.push(binAndAmount.yAmountBpsOfTotal);\n binIds.push(binAndAmount.binId);\n\n if (currentBinId && binAndAmount.binId !== currentBinId + 1) {\n throw new Error(\"Discontinuous Bin ID\");\n } else {\n currentBinId = binAndAmount.binId;\n }\n });\n\n return {\n lowerBinId: xYAmountDistribution[0].binId,\n upperBinId: xYAmountDistribution[xYAmountDistribution.length - 1].binId,\n xAmountDistribution,\n yAmountDistribution,\n binIds,\n };\n }\n\n private async getBins(\n lbPairPubKey: PublicKey,\n lowerBinId: number,\n upperBinId: number,\n baseTokenDecimal: number,\n quoteTokenDecimal: number,\n lowerBinArrays?: BinArray,\n upperBinArrays?: BinArray\n ): Promise<BinLiquidity[]> {\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n let bins: BinLiquidity[] = [];\n if (lowerBinArrayIndex.eq(upperBinArrayIndex)) {\n const [binArrayPubKey] = deriveBinArray(\n lbPairPubKey,\n lowerBinArrayIndex,\n this.program.programId\n );\n const binArray =\n lowerBinArrays ??\n (await this.program.account.binArray.fetch(binArrayPubKey));\n\n const [lowerBinIdForBinArray] = getBinArrayLowerUpperBinId(\n binArray.index\n );\n\n binArray.bins.forEach((bin, idx) => {\n const binId = lowerBinIdForBinArray.toNumber() + idx;\n\n if (binId >= lowerBinId && binId <= upperBinId) {\n const pricePerLamport = this.getPriceOfBinByBinId(binId);\n bins.push({\n binId,\n xAmount: bin.amountX,\n yAmount: bin.amountY,\n supply: bin.liquiditySupply,\n price: pricePerLamport,\n version: binArray.version,\n pricePerToken: new Decimal(pricePerLamport)\n .mul(new Decimal(10 ** (baseTokenDecimal - quoteTokenDecimal)))\n .toString(),\n });\n }\n });\n } else {\n const [lowerBinArrayPubKey] = deriveBinArray(\n lbPairPubKey,\n lowerBinArrayIndex,\n this.program.programId\n );\n const [upperBinArrayPubKey] = deriveBinArray(\n lbPairPubKey,\n upperBinArrayIndex,\n this.program.programId\n );\n\n const binArrays = await (async () => {\n if (!lowerBinArrays || !upperBinArrays) {\n return (\n await this.program.account.binArray.fetchMultiple([\n lowerBinArrayPubKey,\n upperBinArrayPubKey,\n ])\n ).filter((binArray) => binArray !== null);\n }\n\n return [lowerBinArrays, upperBinArrays];\n })();\n\n binArrays.forEach((binArray) => {\n if (!binArray) return;\n const [lowerBinIdForBinArray] = getBinArrayLowerUpperBinId(\n binArray.index\n );\n binArray.bins.forEach((bin, idx) => {\n const binId = lowerBinIdForBinArray.toNumber() + idx;\n if (binId >= lowerBinId && binId <= upperBinId) {\n const pricePerLamport = this.getPriceOfBinByBinId(binId);\n bins.push({\n binId,\n xAmount: bin.amountX,\n yAmount: bin.amountY,\n supply: bin.liquiditySupply,\n price: pricePerLamport,\n version: binArray.version,\n pricePerToken: new Decimal(pricePerLamport)\n .mul(new Decimal(10 ** (baseTokenDecimal - quoteTokenDecimal)))\n .toString(),\n });\n }\n });\n });\n }\n\n return bins;\n }\n\n private async createBinArraysIfNeeded(\n lbPair: PublicKey,\n binArrayIndexes: BN[],\n funder: PublicKey\n ): Promise<TransactionInstruction[]> {\n const ixs: TransactionInstruction[] = [];\n\n for (const idx of binArrayIndexes) {\n const [binArray] = deriveBinArray(lbPair, idx, this.program.programId);\n\n const binArrayAccount =\n await this.program.provider.connection.getAccountInfo(binArray);\n\n if (binArrayAccount == null) {\n ixs.push(\n await this.program.methods\n .initializeBinArray(idx)\n .accounts({\n binArray,\n funder,\n lbPair,\n })\n .instruction()\n );\n }\n }\n return ixs;\n }\n\n private updateVolatilityAccumulator(\n vParameter: vParameters,\n sParameter: sParameters,\n activeId: number\n ) {\n const deltaId = Math.abs(vParameter.indexReference - activeId);\n const newVolatilityAccumulator =\n vParameter.volatilityReference + deltaId * BASIS_POINT_MAX;\n\n vParameter.volatilityAccumulator = Math.min(\n newVolatilityAccumulator,\n sParameter.maxVolatilityAccumulator\n );\n }\n\n private updateReference(\n activeId: number,\n vParameter: vParameters,\n sParameter: sParameters,\n currentTimestamp: number\n ) {\n const elapsed =\n currentTimestamp - vParameter.lastUpdateTimestamp.toNumber();\n\n if (elapsed >= sParameter.filterPeriod) {\n vParameter.indexReference = activeId;\n if (elapsed < sParameter.decayPeriod) {\n const decayedVolatilityReference = Math.floor(\n (vParameter.volatilityAccumulator * sParameter.reductionFactor) /\n BASIS_POINT_MAX\n );\n vParameter.volatilityReference = decayedVolatilityReference;\n } else {\n vParameter.volatilityReference = 0;\n }\n }\n }\n\n private async createClaimBuildMethod({\n owner,\n position,\n shouldIncludePreIx = true,\n }: {\n owner: PublicKey;\n position: Position;\n shouldIncludePreIx?: boolean;\n }) {\n const lowerBinArrayIndex = binIdToBinArrayIndex(\n new BN(position.positionData.lowerBinId)\n );\n const [binArrayLower] = deriveBinArray(\n this.pubkey,\n lowerBinArrayIndex,\n this.program.programId\n );\n\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n const [binArrayUpper] = deriveBinArray(\n this.pubkey,\n upperBinArrayIndex,\n this.program.programId\n );\n\n const claimTransactions: Transaction[] = [];\n for (let i = 0; i < 2; i++) {\n const rewardInfo = this.lbPair.rewardInfos[i];\n if (!rewardInfo || rewardInfo.mint.equals(PublicKey.default)) continue;\n\n const preInstructions = [];\n const { ataPubKey, ix } = await getOrCreateATAInstruction(\n this.program.provider.connection,\n rewardInfo.mint,\n owner\n );\n ix && preInstructions.push(ix);\n const claimTransaction = await this.program.methods\n .claimReward(new BN(i))\n .accounts({\n lbPair: this.pubkey,\n sender: owner,\n position: position.publicKey,\n binArrayLower,\n binArrayUpper,\n rewardVault: rewardInfo.vault,\n rewardMint: rewardInfo.mint,\n tokenProgram: TOKEN_PROGRAM_ID,\n userTokenAccount: ataPubKey,\n })\n .preInstructions(shouldIncludePreIx ? preInstructions : [])\n .transaction();\n claimTransactions.push(claimTransaction);\n }\n\n return claimTransactions;\n }\n\n private async createClaimSwapFeeMethod({\n owner,\n position,\n shouldIncludePretIx = true,\n shouldIncludePostIx = true,\n }: {\n owner: PublicKey;\n position: Position;\n shouldIncludePretIx?: boolean;\n shouldIncludePostIx?: boolean;\n }) {\n const { lowerBinId } = position.positionData;\n\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const [binArrayLower] = deriveBinArray(\n this.pubkey,\n lowerBinArrayIndex,\n this.program.programId\n );\n\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n const [binArrayUpper] = deriveBinArray(\n this.pubkey,\n upperBinArrayIndex,\n this.program.programId\n );\n\n const [reserveX] = deriveReserve(\n this.tokenX.publicKey,\n this.pubkey,\n this.program.programId\n );\n const [reserveY] = deriveReserve(\n this.tokenY.publicKey,\n this.pubkey,\n this.program.programId\n );\n\n const preInstructions: TransactionInstruction[] = [];\n const [\n { ataPubKey: userTokenX, ix: createInTokenAccountIx },\n { ataPubKey: userTokenY, ix: createOutTokenAccountIx },\n ] = await Promise.all([\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenX.publicKey,\n owner\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenY.publicKey,\n owner\n ),\n ]);\n createInTokenAccountIx && preInstructions.push(createInTokenAccountIx);\n createOutTokenAccountIx && preInstructions.push(createOutTokenAccountIx);\n\n const postInstructions: Array<TransactionInstruction> = [];\n if (\n [\n this.tokenX.publicKey.toBase58(),\n this.tokenY.publicKey.toBase58(),\n ].includes(NATIVE_MINT.toBase58())\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const claimFeeTx = await this.program.methods\n .claimFee()\n .accounts({\n binArrayLower,\n binArrayUpper,\n lbPair: this.pubkey,\n sender: owner,\n position: position.publicKey,\n reserveX,\n reserveY,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenXMint: this.tokenX.publicKey,\n tokenYMint: this.tokenY.publicKey,\n userTokenX,\n userTokenY,\n })\n .preInstructions(shouldIncludePretIx ? preInstructions : [])\n .postInstructions(shouldIncludePostIx ? postInstructions : [])\n .transaction();\n\n return claimFeeTx;\n }\n}\n","export type LbClmm = {\n \"version\": \"0.5.0\",\n \"name\": \"lb_clmm\",\n \"constants\": [\n {\n \"name\": \"BASIS_POINT_MAX\",\n \"type\": \"i32\",\n \"value\": \"10000\"\n },\n {\n \"name\": \"MAX_BIN_PER_ARRAY\",\n \"type\": {\n \"defined\": \"usize\"\n },\n \"value\": \"70\"\n },\n {\n \"name\": \"MAX_BIN_PER_POSITION\",\n \"type\": {\n \"defined\": \"usize\"\n },\n \"value\": \"70\"\n },\n {\n \"name\": \"MIN_BIN_ID\",\n \"type\": \"i32\",\n \"value\": \"- 443636\"\n },\n {\n \"name\": \"MAX_BIN_ID\",\n \"type\": \"i32\",\n \"value\": \"443636\"\n },\n {\n \"name\": \"MAX_FEE_RATE\",\n \"type\": \"u64\",\n \"value\": \"100_000_000\"\n },\n {\n \"name\": \"FEE_PRECISION\",\n \"type\": \"u64\",\n \"value\": \"1_000_000_000\"\n },\n {\n \"name\": \"MAX_PROTOCOL_SHARE\",\n \"type\": \"u16\",\n \"value\": \"2_500\"\n },\n {\n \"name\": \"HOST_FEE_BPS\",\n \"type\": \"u16\",\n \"value\": \"2_000\"\n },\n {\n \"name\": \"NUM_REWARDS\",\n \"type\": {\n \"defined\": \"usize\"\n },\n \"value\": \"2\"\n },\n {\n \"name\": \"MIN_REWARD_DURATION\",\n \"type\": \"u64\",\n \"value\": \"1\"\n },\n {\n \"name\": \"MAX_REWARD_DURATION\",\n \"type\": \"u64\",\n \"value\": \"31536000\"\n },\n {\n \"name\": \"EXTENSION_BINARRAY_BITMAP_SIZE\",\n \"type\": {\n \"defined\": \"usize\"\n },\n \"value\": \"12\"\n },\n {\n \"name\": \"BIN_ARRAY_BITMAP_SIZE\",\n \"type\": \"i32\",\n \"value\": \"512\"\n },\n {\n \"name\": \"MAX_REWARD_BIN_SPLIT\",\n \"type\": {\n \"defined\": \"usize\"\n },\n \"value\": \"15\"\n },\n {\n \"name\": \"BIN_ARRAY\",\n \"type\": \"bytes\",\n \"value\": \"[98, 105, 110, 95, 97, 114, 114, 97, 121]\"\n },\n {\n \"name\": \"ORACLE\",\n \"type\": \"bytes\",\n \"value\": \"[111, 114, 97, 99, 108, 101]\"\n },\n {\n \"name\": \"BIN_ARRAY_BITMAP_SEED\",\n \"type\": \"bytes\",\n \"value\": \"[98, 105, 116, 109, 97, 112]\"\n },\n {\n \"name\": \"PRESET_PARAMETER\",\n \"type\": \"bytes\",\n \"value\": \"[112, 114, 101, 115, 101, 116, 95, 112, 97, 114, 97, 109, 101, 116, 101, 114]\"\n },\n {\n \"name\": \"PERMISSION\",\n \"type\": \"bytes\",\n \"value\": \"[112, 101, 114, 109, 105, 115, 115, 105, 111, 110]\"\n },\n {\n \"name\": \"POSITION\",\n \"type\": \"bytes\",\n \"value\": \"[112, 111, 115, 105, 116, 105, 111, 110]\"\n }\n ],\n \"instructions\": [\n {\n \"name\": \"initializeLbPair\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"tokenMintX\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenMintY\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"oracle\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"presetParameter\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"funder\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"activeId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"binStep\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"initializePermissionLbPair\",\n \"accounts\": [\n {\n \"name\": \"base\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"tokenMintX\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenMintY\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"oracle\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"presetParameter\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"activeId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"binStep\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"initializeBinArrayBitmapExtension\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"docs\": [\n \"Initialize an account to store if a bin array is initialized.\"\n ]\n },\n {\n \"name\": \"funder\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"initializeBinArray\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArray\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"funder\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"index\",\n \"type\": \"i64\"\n }\n ]\n },\n {\n \"name\": \"addLiquidity\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidityParameter\",\n \"type\": {\n \"defined\": \"LiquidityParameter\"\n }\n }\n ]\n },\n {\n \"name\": \"addLiquidityByWeight\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidityParameter\",\n \"type\": {\n \"defined\": \"LiquidityParameterByWeight\"\n }\n }\n ]\n },\n {\n \"name\": \"addLiquidityByStrategy\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidityParameter\",\n \"type\": {\n \"defined\": \"LiquidityParameterByStrategy\"\n }\n }\n ]\n },\n {\n \"name\": \"addLiquidityByStrategyOneSide\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userToken\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserve\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidityParameter\",\n \"type\": {\n \"defined\": \"LiquidityParameterByStrategyOneSide\"\n }\n }\n ]\n },\n {\n \"name\": \"addLiquidityOneSide\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userToken\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserve\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidityParameter\",\n \"type\": {\n \"defined\": \"LiquidityOneSideParameter\"\n }\n }\n ]\n },\n {\n \"name\": \"removeLiquidity\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"binLiquidityRemoval\",\n \"type\": {\n \"vec\": {\n \"defined\": \"BinLiquidityReduction\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initializePosition\",\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"owner\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"lowerBinId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"width\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"initializePositionPda\",\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"base\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"owner\",\n \"isMut\": false,\n \"isSigner\": true,\n \"docs\": [\n \"owner\"\n ]\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"lowerBinId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"width\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"initializePositionByOperator\",\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"base\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"operator\",\n \"isMut\": false,\n \"isSigner\": true,\n \"docs\": [\n \"operator\"\n ]\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"lowerBinId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"width\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"updatePositionOperator\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"owner\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"operator\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"swap\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": false,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenIn\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenOut\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"oracle\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"hostFeeIn\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"user\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"amountIn\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minAmountOut\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdrawProtocolFee\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"receiverTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"receiverTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"feeOwner\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"amountX\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"updateFeeOwner\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"newFeeOwner\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"initializeReward\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardVault\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"rewardDuration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"fundReward\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardVault\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"funderTokenAccount\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"funder\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"binArray\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"carryForward\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"updateRewardFunder\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"newFunder\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"updateRewardDuration\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"binArray\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"newDuration\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claimReward\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"rewardVault\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenAccount\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claimFee\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"closePosition\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"rentReceiver\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"updateFeeParameters\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"feeParameter\",\n \"type\": {\n \"defined\": \"FeeParameter\"\n }\n }\n ]\n },\n {\n \"name\": \"increaseOracleLength\",\n \"accounts\": [\n {\n \"name\": \"oracle\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"funder\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"lengthToAdd\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initializePresetParameter\",\n \"accounts\": [\n {\n \"name\": \"presetParameter\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"ix\",\n \"type\": {\n \"defined\": \"InitPresetParametersIx\"\n }\n }\n ]\n },\n {\n \"name\": \"closePresetParameter\",\n \"accounts\": [\n {\n \"name\": \"presetParameter\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"rentReceiver\",\n \"isMut\": true,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"removeAllLiquidity\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"togglePairStatus\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"updateWhitelistedWallet\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"idx\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"wallet\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"migratePosition\",\n \"accounts\": [\n {\n \"name\": \"positionV2\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"positionV1\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"owner\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rentReceiver\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"migrateBinArray\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"updateFeesAndRewards\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"owner\",\n \"isMut\": false,\n \"isSigner\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"withdrawIneligibleReward\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardVault\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"funderTokenAccount\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"funder\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"binArray\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"binArrayBitmapExtension\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"positiveBinArrayBitmap\",\n \"docs\": [\n \"Packed initialized bin array state for start_bin_index is positive\"\n ],\n \"type\": {\n \"array\": [\n {\n \"array\": [\n \"u64\",\n 8\n ]\n },\n 12\n ]\n }\n },\n {\n \"name\": \"negativeBinArrayBitmap\",\n \"docs\": [\n \"Packed initialized bin array state for start_bin_index is negative\"\n ],\n \"type\": {\n \"array\": [\n {\n \"array\": [\n \"u64\",\n 8\n ]\n },\n 12\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"binArray\",\n \"docs\": [\n \"An account to contain a range of bin. For example: Bin 100 <-> 200.\",\n \"For example:\",\n \"BinArray index: 0 contains bin 0 <-> 599\",\n \"index: 2 contains bin 600 <-> 1199, ...\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"index\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"version\",\n \"docs\": [\n \"Version of binArray\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n },\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"bins\",\n \"type\": {\n \"array\": [\n {\n \"defined\": \"Bin\"\n },\n 70\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"lbPair\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"parameters\",\n \"type\": {\n \"defined\": \"StaticParameters\"\n }\n },\n {\n \"name\": \"vParameters\",\n \"type\": {\n \"defined\": \"VariableParameters\"\n }\n },\n {\n \"name\": \"bumpSeed\",\n \"type\": {\n \"array\": [\n \"u8\",\n 1\n ]\n }\n },\n {\n \"name\": \"binStepSeed\",\n \"docs\": [\n \"Bin step signer seed\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 2\n ]\n }\n },\n {\n \"name\": \"pairType\",\n \"docs\": [\n \"Type of the pair\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"activeId\",\n \"docs\": [\n \"Active bin id\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"binStep\",\n \"docs\": [\n \"Bin step. Represent the price increment / decrement.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"status\",\n \"docs\": [\n \"Status of the pair\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding1\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"tokenXMint\",\n \"docs\": [\n \"Token X mint\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"tokenYMint\",\n \"docs\": [\n \"Token Y mint\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"reserveX\",\n \"docs\": [\n \"LB token X vault\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"reserveY\",\n \"docs\": [\n \"LB token Y vault\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"protocolFee\",\n \"docs\": [\n \"Uncollected protocol fee\"\n ],\n \"type\": {\n \"defined\": \"ProtocolFee\"\n }\n },\n {\n \"name\": \"feeOwner\",\n \"docs\": [\n \"Protocol fee owner,\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"rewardInfos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": \"RewardInfo\"\n },\n 2\n ]\n }\n },\n {\n \"name\": \"oracle\",\n \"docs\": [\n \"Oracle pubkey\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"binArrayBitmap\",\n \"docs\": [\n \"Packed initialized bin array state\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 16\n ]\n }\n },\n {\n \"name\": \"lastUpdatedAt\",\n \"docs\": [\n \"Last time the pool fee parameter was updated\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"whitelistedWallet\",\n \"docs\": [\n \"Whitelisted wallet\"\n ],\n \"type\": {\n \"array\": [\n \"publicKey\",\n 2\n ]\n }\n },\n {\n \"name\": \"baseKey\",\n \"docs\": [\n \"Base keypair. Only required for permission pair\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"reserved\",\n \"docs\": [\n \"Reserved space for future use\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 88\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"oracle\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"idx\",\n \"docs\": [\n \"Index of latest observation slot\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activeSize\",\n \"docs\": [\n \"Size of active sample. Active sample is initialized observation.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"length\",\n \"docs\": [\n \"Number of observations\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"position\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"docs\": [\n \"The LB pair of this position\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of the position. Client rely on this to to fetch their positions.\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"liquidityShares\",\n \"docs\": [\n \"Liquidity shares of this position in bins (lower_bin_id <-> upper_bin_id). This is the same as LP concept.\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 70\n ]\n }\n },\n {\n \"name\": \"rewardInfos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": \"UserRewardInfo\"\n },\n 70\n ]\n }\n },\n {\n \"name\": \"feeInfos\",\n \"docs\": [\n \"Swap fee to claim information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": \"FeeInfo\"\n },\n 70\n ]\n }\n },\n {\n \"name\": \"lowerBinId\",\n \"docs\": [\n \"Lower bin ID\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"upperBinId\",\n \"docs\": [\n \"Upper bin ID\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"lastUpdatedAt\",\n \"docs\": [\n \"Last updated timestamp\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"totalClaimedFeeXAmount\",\n \"docs\": [\n \"Total claimed token fee X\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"totalClaimedFeeYAmount\",\n \"docs\": [\n \"Total claimed token fee Y\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"totalClaimedRewards\",\n \"docs\": [\n \"Total claimed rewards\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\n },\n {\n \"name\": \"reserved\",\n \"docs\": [\n \"Reserved space for future use\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 160\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"positionV2\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"docs\": [\n \"The LB pair of this position\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of the position. Client rely on this to to fetch their positions.\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"liquidityShares\",\n \"docs\": [\n \"Liquidity shares of this position in bins (lower_bin_id <-> upper_bin_id). This is the same as LP concept.\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 70\n ]\n }\n },\n {\n \"name\": \"rewardInfos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": \"UserRewardInfo\"\n },\n 70\n ]\n }\n },\n {\n \"name\": \"feeInfos\",\n \"docs\": [\n \"Swap fee to claim information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": \"FeeInfo\"\n },\n 70\n ]\n }\n },\n {\n \"name\": \"lowerBinId\",\n \"docs\": [\n \"Lower bin ID\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"upperBinId\",\n \"docs\": [\n \"Upper bin ID\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"lastUpdatedAt\",\n \"docs\": [\n \"Last updated timestamp\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"totalClaimedFeeXAmount\",\n \"docs\": [\n \"Total claimed token fee X\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"totalClaimedFeeYAmount\",\n \"docs\": [\n \"Total claimed token fee Y\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"totalClaimedRewards\",\n \"docs\": [\n \"Total claimed rewards\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"Operator of position\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"reserved\",\n \"docs\": [\n \"Reserved space for future use\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 128\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"presetParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"binStep\",\n \"docs\": [\n \"Bin step. Represent the price increment / decrement.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"baseFactor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filterPeriod\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decayPeriod\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reductionFactor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variableFeeControl\",\n \"docs\": [\n \"Used to scale the variable fee component depending on the dynamic of the market\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"maxVolatilityAccumulator\",\n \"docs\": [\n \"Maximum number of bin crossed can be accumulated. Used to cap volatile fee rate.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"minBinId\",\n \"docs\": [\n \"Min bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxBinId\",\n \"docs\": [\n \"Max bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"protocolShare\",\n \"docs\": [\n \"Portion of swap fees retained by the protocol by controlling protocol_share parameter. protocol_swap_fee = protocol_share * total_swap_fee\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n }\n ],\n \"types\": [\n {\n \"name\": \"LiquidityParameterByStrategyOneSide\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount\",\n \"docs\": [\n \"Amount of X token or Y token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activeId\",\n \"docs\": [\n \"Active bin that integrator observe off-chain\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxActiveBinSlippage\",\n \"docs\": [\n \"max active bin slippage allowed\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"strategyParameters\",\n \"docs\": [\n \"strategy parameters\"\n ],\n \"type\": {\n \"defined\": \"StrategyParameters\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityParameterByStrategy\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amountX\",\n \"docs\": [\n \"Amount of X token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"docs\": [\n \"Amount of Y token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activeId\",\n \"docs\": [\n \"Active bin that integrator observe off-chain\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxActiveBinSlippage\",\n \"docs\": [\n \"max active bin slippage allowed\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"strategyParameters\",\n \"docs\": [\n \"strategy parameters\"\n ],\n \"type\": {\n \"defined\": \"StrategyParameters\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"StrategyParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"minBinId\",\n \"docs\": [\n \"min bin id\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxBinId\",\n \"docs\": [\n \"max bin id\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"strategyType\",\n \"docs\": [\n \"strategy type\"\n ],\n \"type\": {\n \"defined\": \"StrategyType\"\n }\n },\n {\n \"name\": \"parameteres\",\n \"docs\": [\n \"parameters\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 64\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ParabolicParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"aAsk\",\n \"docs\": [\n \"amplification in ask side\"\n ],\n \"type\": \"i16\"\n },\n {\n \"name\": \"aBid\",\n \"docs\": [\n \"amplification in bid side\"\n ],\n \"type\": \"i16\"\n },\n {\n \"name\": \"aActiveBin\",\n \"docs\": [\n \"amplification in active bin\"\n ],\n \"type\": \"i16\"\n },\n {\n \"name\": \"centerBinId\",\n \"docs\": [\n \"center bin id\"\n ],\n \"type\": \"i32\"\n }\n ]\n }\n },\n {\n \"name\": \"SpotParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"weightAsk\",\n \"docs\": [\n \"weight in ask side\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"weightBid\",\n \"docs\": [\n \"weight in bid side\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"weightActiveBin\",\n \"docs\": [\n \"weight in active bin\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"BinLiquidityDistributionByWeight\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"binId\",\n \"docs\": [\n \"Define the bin ID wish to deposit to.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"weight\",\n \"docs\": [\n \"weight of liquidity distributed for this bin id\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityParameterByWeight\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amountX\",\n \"docs\": [\n \"Amount of X token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"docs\": [\n \"Amount of Y token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activeId\",\n \"docs\": [\n \"Active bin that integrator observe off-chain\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxActiveBinSlippage\",\n \"docs\": [\n \"max active bin slippage allowed\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"binLiquidityDist\",\n \"docs\": [\n \"Liquidity distribution to each bins\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": \"BinLiquidityDistributionByWeight\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityOneSideParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount\",\n \"docs\": [\n \"Amount of X token or Y token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activeId\",\n \"docs\": [\n \"Active bin that integrator observe off-chain\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxActiveBinSlippage\",\n \"docs\": [\n \"max active bin slippage allowed\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"binLiquidityDist\",\n \"docs\": [\n \"Liquidity distribution to each bins\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": \"BinLiquidityDistributionByWeight\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"BinLiquidityDistribution\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"binId\",\n \"docs\": [\n \"Define the bin ID wish to deposit to.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"distributionX\",\n \"docs\": [\n \"DistributionX (or distributionY) is the percentages of amountX (or amountY) you want to add to each bin.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"distributionY\",\n \"docs\": [\n \"DistributionX (or distributionY) is the percentages of amountX (or amountY) you want to add to each bin.\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amountX\",\n \"docs\": [\n \"Amount of X token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"docs\": [\n \"Amount of Y token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"binLiquidityDist\",\n \"docs\": [\n \"Liquidity distribution to each bins\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": \"BinLiquidityDistribution\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"InitPresetParametersIx\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"binStep\",\n \"docs\": [\n \"Bin step. Represent the price increment / decrement.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"baseFactor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filterPeriod\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decayPeriod\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reductionFactor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variableFeeControl\",\n \"docs\": [\n \"Used to scale the variable fee component depending on the dynamic of the market\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"maxVolatilityAccumulator\",\n \"docs\": [\n \"Maximum number of bin crossed can be accumulated. Used to cap volatile fee rate.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"minBinId\",\n \"docs\": [\n \"Min bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxBinId\",\n \"docs\": [\n \"Max bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"protocolShare\",\n \"docs\": [\n \"Portion of swap fees retained by the protocol by controlling protocol_share parameter. protocol_swap_fee = protocol_share * total_swap_fee\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"BinLiquidityReduction\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"binId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"bpsToRemove\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"FeeParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"protocolShare\",\n \"docs\": [\n \"Portion of swap fees retained by the protocol by controlling protocol_share parameter. protocol_swap_fee = protocol_share * total_swap_fee\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"baseFactor\",\n \"docs\": [\n \"Base factor for base fee rate\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"Bin\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amountX\",\n \"docs\": [\n \"Amount of token X in the bin. This already excluded protocol fees.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"docs\": [\n \"Amount of token Y in the bin. This already excluded protocol fees.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"price\",\n \"docs\": [\n \"Bin price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquiditySupply\",\n \"docs\": [\n \"Liquidities of the bin. This is the same as LP mint supply. q-number\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"rewardPerTokenStored\",\n \"docs\": [\n \"reward_a_per_token_stored\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 2\n ]\n }\n },\n {\n \"name\": \"feeAmountXPerTokenStored\",\n \"docs\": [\n \"Swap fee amount of token X per liquidity deposited.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"feeAmountYPerTokenStored\",\n \"docs\": [\n \"Swap fee amount of token Y per liquidity deposited.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"amountXIn\",\n \"docs\": [\n \"Total token X swap into the bin. Only used for tracking purpose.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"amountYIn\",\n \"docs\": [\n \"Total token Y swap into he bin. Only used for tracking purpose.\"\n ],\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amountX\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardInfo\",\n \"docs\": [\n \"Stores the state relevant for tracking liquidity mining rewards\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Reward token mint.\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Reward vault token account.\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"funder\",\n \"docs\": [\n \"Authority account that allows to fund rewards\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"rewardDuration\",\n \"docs\": [\n \"TODO check whether we need to store it in pool\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"rewardDurationEnd\",\n \"docs\": [\n \"TODO check whether we need to store it in pool\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"rewardRate\",\n \"docs\": [\n \"TODO check whether we need to store it in pool\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"lastUpdateTime\",\n \"docs\": [\n \"The last time reward states were updated.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulativeSecondsWithEmptyLiquidityReward\",\n \"docs\": [\n \"Accumulated seconds where when farm distribute rewards, but the bin is empty. The reward will be accumulated for next reward time window.\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Observation\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cumulativeActiveBinId\",\n \"docs\": [\n \"Cumulative active bin ID\"\n ],\n \"type\": \"i128\"\n },\n {\n \"name\": \"createdAt\",\n \"docs\": [\n \"Observation sample created timestamp\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"lastUpdatedAt\",\n \"docs\": [\n \"Observation sample last updated timestamp\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"StaticParameters\",\n \"docs\": [\n \"Parameter that set by the protocol\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"baseFactor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filterPeriod\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decayPeriod\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reductionFactor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variableFeeControl\",\n \"docs\": [\n \"Used to scale the variable fee component depending on the dynamic of the market\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"maxVolatilityAccumulator\",\n \"docs\": [\n \"Maximum number of bin crossed can be accumulated. Used to cap volatile fee rate.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"minBinId\",\n \"docs\": [\n \"Min bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxBinId\",\n \"docs\": [\n \"Max bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"protocolShare\",\n \"docs\": [\n \"Portion of swap fees retained by the protocol by controlling protocol_share parameter. protocol_swap_fee = protocol_share * total_swap_fee\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"Padding for bytemuck safe alignment\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"VariableParameters\",\n \"docs\": [\n \"Parameters that changes based on dynamic of the market\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"volatilityAccumulator\",\n \"docs\": [\n \"Volatility accumulator measure the number of bin crossed since reference bin ID. Normally (without filter period taken into consideration), reference bin ID is the active bin of last swap.\",\n \"It affects the variable fee rate\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"volatilityReference\",\n \"docs\": [\n \"Volatility reference is decayed volatility accumulator. It is always <= volatility_accumulator\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"indexReference\",\n \"docs\": [\n \"Active bin id of last swap.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"Padding for bytemuck safe alignment\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"lastUpdateTimestamp\",\n \"docs\": [\n \"Last timestamp the variable parameters was updated\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"padding1\",\n \"docs\": [\n \"Padding for bytemuck safe alignment\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"FeeInfo\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"feeXPerTokenComplete\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"feeYPerTokenComplete\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"feeXPending\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"feeYPending\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"UserRewardInfo\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"rewardPerTokenCompletes\",\n \"type\": {\n \"array\": [\n \"u128\",\n 2\n ]\n }\n },\n {\n \"name\": \"rewardPendings\",\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"StrategyType\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Spot\"\n },\n {\n \"name\": \"Curve\"\n },\n {\n \"name\": \"BidAsk\"\n }\n ]\n }\n },\n {\n \"name\": \"Rounding\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Up\"\n },\n {\n \"name\": \"Down\"\n }\n ]\n }\n },\n {\n \"name\": \"LayoutVersion\",\n \"docs\": [\n \"Layout version\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"V0\"\n },\n {\n \"name\": \"V1\"\n }\n ]\n }\n },\n {\n \"name\": \"PairType\",\n \"docs\": [\n \"Type of the Pair. 0 = Permissionless, 1 = Permission. Putting 0 as permissionless for backward compatibility.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Permissionless\"\n },\n {\n \"name\": \"Permission\"\n }\n ]\n }\n },\n {\n \"name\": \"PairStatus\",\n \"docs\": [\n \"Pair status. 0 = Enabled, 1 = Disabled. Putting 0 as enabled for backward compatibility.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Enabled\"\n },\n {\n \"name\": \"Disabled\"\n }\n ]\n }\n }\n ],\n \"events\": [\n {\n \"name\": \"CompositionFee\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"binId\",\n \"type\": \"i16\",\n \"index\": false\n },\n {\n \"name\": \"tokenXFeeAmount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"tokenYFeeAmount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"protocolTokenXFeeAmount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"protocolTokenYFeeAmount\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"AddLiquidity\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"from\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amounts\",\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n },\n \"index\": false\n },\n {\n \"name\": \"activeBinId\",\n \"type\": \"i32\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"RemoveLiquidity\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"from\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amounts\",\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n },\n \"index\": false\n },\n {\n \"name\": \"activeBinId\",\n \"type\": \"i32\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"Swap\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"from\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"startBinId\",\n \"type\": \"i32\",\n \"index\": false\n },\n {\n \"name\": \"endBinId\",\n \"type\": \"i32\",\n \"index\": false\n },\n {\n \"name\": \"amountIn\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"amountOut\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"swapForY\",\n \"type\": \"bool\",\n \"index\": false\n },\n {\n \"name\": \"fee\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"protocolFee\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"feeBps\",\n \"type\": \"u128\",\n \"index\": false\n },\n {\n \"name\": \"hostFee\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"ClaimReward\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"totalReward\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"FundReward\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"funder\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"InitializeReward\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardMint\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"funder\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"rewardDuration\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"UpdateRewardDuration\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"oldRewardDuration\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"newRewardDuration\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"UpdateRewardFunder\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"oldFunder\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"newFunder\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"PositionClose\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"ClaimFee\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"feeX\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"feeY\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"LbPairCreate\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"binStep\",\n \"type\": \"u16\",\n \"index\": false\n },\n {\n \"name\": \"tokenX\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"tokenY\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"PositionCreate\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"FeeParameterUpdate\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"protocolShare\",\n \"type\": \"u16\",\n \"index\": false\n },\n {\n \"name\": \"baseFactor\",\n \"type\": \"u16\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"IncreaseObservation\",\n \"fields\": [\n {\n \"name\": \"oracle\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"newObservationLength\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"WithdrawIneligibleReward\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardMint\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"UpdatePositionOperator\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"oldOperator\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"newOperator\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidStartBinIndex\",\n \"msg\": \"Invalid start bin index\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidBinId\",\n \"msg\": \"Invalid bin id\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidInput\",\n \"msg\": \"Invalid input data\"\n },\n {\n \"code\": 6003,\n \"name\": \"ExceededAmountSlippageTolerance\",\n \"msg\": \"Exceeded amount slippage tolerance\"\n },\n {\n \"code\": 6004,\n \"name\": \"ExceededBinSlippageTolerance\",\n \"msg\": \"Exceeded bin slippage tolerance\"\n },\n {\n \"code\": 6005,\n \"name\": \"CompositionFactorFlawed\",\n \"msg\": \"Composition factor flawed\"\n },\n {\n \"code\": 6006,\n \"name\": \"NonPresetBinStep\",\n \"msg\": \"Non preset bin step\"\n },\n {\n \"code\": 6007,\n \"name\": \"ZeroLiquidity\",\n \"msg\": \"Zero liquidity\"\n },\n {\n \"code\": 6008,\n \"name\": \"InvalidPosition\",\n \"msg\": \"Invalid position\"\n },\n {\n \"code\": 6009,\n \"name\": \"BinArrayNotFound\",\n \"msg\": \"Bin array not found\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidTokenMint\",\n \"msg\": \"Invalid token mint\"\n },\n {\n \"code\": 6011,\n \"name\": \"InvalidAccountForSingleDeposit\",\n \"msg\": \"Invalid account for single deposit\"\n },\n {\n \"code\": 6012,\n \"name\": \"PairInsufficientLiquidity\",\n \"msg\": \"Pair insufficient liquidity\"\n },\n {\n \"code\": 6013,\n \"name\": \"InvalidFeeOwner\",\n \"msg\": \"Invalid fee owner\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidFeeWithdrawAmount\",\n \"msg\": \"Invalid fee withdraw amount\"\n },\n {\n \"code\": 6015,\n \"name\": \"InvalidAdmin\",\n \"msg\": \"Invalid admin\"\n },\n {\n \"code\": 6016,\n \"name\": \"IdenticalFeeOwner\",\n \"msg\": \"Identical fee owner\"\n },\n {\n \"code\": 6017,\n \"name\": \"InvalidBps\",\n \"msg\": \"Invalid basis point\"\n },\n {\n \"code\": 6018,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math operation overflow\"\n },\n {\n \"code\": 6019,\n \"name\": \"TypeCastFailed\",\n \"msg\": \"Type cast error\"\n },\n {\n \"code\": 6020,\n \"name\": \"InvalidRewardIndex\",\n \"msg\": \"Invalid reward index\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidRewardDuration\",\n \"msg\": \"Invalid reward duration\"\n },\n {\n \"code\": 6022,\n \"name\": \"RewardInitialized\",\n \"msg\": \"Reward already initialized\"\n },\n {\n \"code\": 6023,\n \"name\": \"RewardUninitialized\",\n \"msg\": \"Reward not initialized\"\n },\n {\n \"code\": 6024,\n \"name\": \"IdenticalFunder\",\n \"msg\": \"Identical funder\"\n },\n {\n \"code\": 6025,\n \"name\": \"RewardCampaignInProgress\",\n \"msg\": \"Reward campaign in progress\"\n },\n {\n \"code\": 6026,\n \"name\": \"IdenticalRewardDuration\",\n \"msg\": \"Reward duration is the same\"\n },\n {\n \"code\": 6027,\n \"name\": \"InvalidBinArray\",\n \"msg\": \"Invalid bin array\"\n },\n {\n \"code\": 6028,\n \"name\": \"NonContinuousBinArrays\",\n \"msg\": \"Bin arrays must be continuous\"\n },\n {\n \"code\": 6029,\n \"name\": \"InvalidRewardVault\",\n \"msg\": \"Invalid reward vault\"\n },\n {\n \"code\": 6030,\n \"name\": \"NonEmptyPosition\",\n \"msg\": \"Position is not empty\"\n },\n {\n \"code\": 6031,\n \"name\": \"UnauthorizedAlphaAccess\",\n \"msg\": \"Unauthorized alpha access\"\n },\n {\n \"code\": 6032,\n \"name\": \"InvalidFeeParameter\",\n \"msg\": \"Invalid fee parameter\"\n },\n {\n \"code\": 6033,\n \"name\": \"MissingOracle\",\n \"msg\": \"Missing oracle account\"\n },\n {\n \"code\": 6034,\n \"name\": \"InsufficientSample\",\n \"msg\": \"Insufficient observation sample\"\n },\n {\n \"code\": 6035,\n \"name\": \"InvalidLookupTimestamp\",\n \"msg\": \"Invalid lookup timestamp\"\n },\n {\n \"code\": 6036,\n \"name\": \"BitmapExtensionAccountIsNotProvided\",\n \"msg\": \"Bitmap extension account is not provided\"\n },\n {\n \"code\": 6037,\n \"name\": \"CannotFindNonZeroLiquidityBinArrayId\",\n \"msg\": \"Cannot find non-zero liquidity binArrayId\"\n },\n {\n \"code\": 6038,\n \"name\": \"BinIdOutOfBound\",\n \"msg\": \"Bin id out of bound\"\n },\n {\n \"code\": 6039,\n \"name\": \"InsufficientOutAmount\",\n \"msg\": \"Insufficient amount in for minimum out\"\n },\n {\n \"code\": 6040,\n \"name\": \"InvalidPositionWidth\",\n \"msg\": \"Invalid position width\"\n },\n {\n \"code\": 6041,\n \"name\": \"ExcessiveFeeUpdate\",\n \"msg\": \"Excessive fee update\"\n },\n {\n \"code\": 6042,\n \"name\": \"PoolDisabled\",\n \"msg\": \"Pool disabled\"\n },\n {\n \"code\": 6043,\n \"name\": \"InvalidPoolType\",\n \"msg\": \"Invalid pool type\"\n },\n {\n \"code\": 6044,\n \"name\": \"ExceedMaxWhitelist\",\n \"msg\": \"Whitelist for wallet is full\"\n },\n {\n \"code\": 6045,\n \"name\": \"InvalidIndex\",\n \"msg\": \"Invalid index\"\n },\n {\n \"code\": 6046,\n \"name\": \"RewardNotEnded\",\n \"msg\": \"Reward not ended\"\n },\n {\n \"code\": 6047,\n \"name\": \"MustWithdrawnIneligibleReward\",\n \"msg\": \"Must withdraw ineligible reward\"\n }\n ]\n};\n\nexport const IDL: LbClmm = {\n \"version\": \"0.5.0\",\n \"name\": \"lb_clmm\",\n \"constants\": [\n {\n \"name\": \"BASIS_POINT_MAX\",\n \"type\": \"i32\",\n \"value\": \"10000\"\n },\n {\n \"name\": \"MAX_BIN_PER_ARRAY\",\n \"type\": {\n \"defined\": \"usize\"\n },\n \"value\": \"70\"\n },\n {\n \"name\": \"MAX_BIN_PER_POSITION\",\n \"type\": {\n \"defined\": \"usize\"\n },\n \"value\": \"70\"\n },\n {\n \"name\": \"MIN_BIN_ID\",\n \"type\": \"i32\",\n \"value\": \"- 443636\"\n },\n {\n \"name\": \"MAX_BIN_ID\",\n \"type\": \"i32\",\n \"value\": \"443636\"\n },\n {\n \"name\": \"MAX_FEE_RATE\",\n \"type\": \"u64\",\n \"value\": \"100_000_000\"\n },\n {\n \"name\": \"FEE_PRECISION\",\n \"type\": \"u64\",\n \"value\": \"1_000_000_000\"\n },\n {\n \"name\": \"MAX_PROTOCOL_SHARE\",\n \"type\": \"u16\",\n \"value\": \"2_500\"\n },\n {\n \"name\": \"HOST_FEE_BPS\",\n \"type\": \"u16\",\n \"value\": \"2_000\"\n },\n {\n \"name\": \"NUM_REWARDS\",\n \"type\": {\n \"defined\": \"usize\"\n },\n \"value\": \"2\"\n },\n {\n \"name\": \"MIN_REWARD_DURATION\",\n \"type\": \"u64\",\n \"value\": \"1\"\n },\n {\n \"name\": \"MAX_REWARD_DURATION\",\n \"type\": \"u64\",\n \"value\": \"31536000\"\n },\n {\n \"name\": \"EXTENSION_BINARRAY_BITMAP_SIZE\",\n \"type\": {\n \"defined\": \"usize\"\n },\n \"value\": \"12\"\n },\n {\n \"name\": \"BIN_ARRAY_BITMAP_SIZE\",\n \"type\": \"i32\",\n \"value\": \"512\"\n },\n {\n \"name\": \"MAX_REWARD_BIN_SPLIT\",\n \"type\": {\n \"defined\": \"usize\"\n },\n \"value\": \"15\"\n },\n {\n \"name\": \"BIN_ARRAY\",\n \"type\": \"bytes\",\n \"value\": \"[98, 105, 110, 95, 97, 114, 114, 97, 121]\"\n },\n {\n \"name\": \"ORACLE\",\n \"type\": \"bytes\",\n \"value\": \"[111, 114, 97, 99, 108, 101]\"\n },\n {\n \"name\": \"BIN_ARRAY_BITMAP_SEED\",\n \"type\": \"bytes\",\n \"value\": \"[98, 105, 116, 109, 97, 112]\"\n },\n {\n \"name\": \"PRESET_PARAMETER\",\n \"type\": \"bytes\",\n \"value\": \"[112, 114, 101, 115, 101, 116, 95, 112, 97, 114, 97, 109, 101, 116, 101, 114]\"\n },\n {\n \"name\": \"PERMISSION\",\n \"type\": \"bytes\",\n \"value\": \"[112, 101, 114, 109, 105, 115, 115, 105, 111, 110]\"\n },\n {\n \"name\": \"POSITION\",\n \"type\": \"bytes\",\n \"value\": \"[112, 111, 115, 105, 116, 105, 111, 110]\"\n }\n ],\n \"instructions\": [\n {\n \"name\": \"initializeLbPair\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"tokenMintX\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenMintY\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"oracle\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"presetParameter\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"funder\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"activeId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"binStep\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"initializePermissionLbPair\",\n \"accounts\": [\n {\n \"name\": \"base\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"tokenMintX\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenMintY\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"oracle\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"presetParameter\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"activeId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"binStep\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"initializeBinArrayBitmapExtension\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"docs\": [\n \"Initialize an account to store if a bin array is initialized.\"\n ]\n },\n {\n \"name\": \"funder\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"initializeBinArray\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArray\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"funder\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"index\",\n \"type\": \"i64\"\n }\n ]\n },\n {\n \"name\": \"addLiquidity\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidityParameter\",\n \"type\": {\n \"defined\": \"LiquidityParameter\"\n }\n }\n ]\n },\n {\n \"name\": \"addLiquidityByWeight\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidityParameter\",\n \"type\": {\n \"defined\": \"LiquidityParameterByWeight\"\n }\n }\n ]\n },\n {\n \"name\": \"addLiquidityByStrategy\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidityParameter\",\n \"type\": {\n \"defined\": \"LiquidityParameterByStrategy\"\n }\n }\n ]\n },\n {\n \"name\": \"addLiquidityByStrategyOneSide\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userToken\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserve\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidityParameter\",\n \"type\": {\n \"defined\": \"LiquidityParameterByStrategyOneSide\"\n }\n }\n ]\n },\n {\n \"name\": \"addLiquidityOneSide\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userToken\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserve\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidityParameter\",\n \"type\": {\n \"defined\": \"LiquidityOneSideParameter\"\n }\n }\n ]\n },\n {\n \"name\": \"removeLiquidity\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"binLiquidityRemoval\",\n \"type\": {\n \"vec\": {\n \"defined\": \"BinLiquidityReduction\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initializePosition\",\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"owner\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"lowerBinId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"width\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"initializePositionPda\",\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"base\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"owner\",\n \"isMut\": false,\n \"isSigner\": true,\n \"docs\": [\n \"owner\"\n ]\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"lowerBinId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"width\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"initializePositionByOperator\",\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"base\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"operator\",\n \"isMut\": false,\n \"isSigner\": true,\n \"docs\": [\n \"operator\"\n ]\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"lowerBinId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"width\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"updatePositionOperator\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"owner\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"operator\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"swap\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": false,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenIn\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenOut\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"oracle\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"hostFeeIn\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"user\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"amountIn\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"minAmountOut\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"withdrawProtocolFee\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"receiverTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"receiverTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"feeOwner\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"amountX\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"updateFeeOwner\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"newFeeOwner\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"initializeReward\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardVault\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"rewardDuration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"fundReward\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardVault\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"funderTokenAccount\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"funder\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"binArray\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"carryForward\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"name\": \"updateRewardFunder\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"newFunder\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"updateRewardDuration\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"binArray\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"newDuration\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claimReward\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"rewardVault\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenAccount\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claimFee\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"closePosition\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"rentReceiver\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"updateFeeParameters\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"feeParameter\",\n \"type\": {\n \"defined\": \"FeeParameter\"\n }\n }\n ]\n },\n {\n \"name\": \"increaseOracleLength\",\n \"accounts\": [\n {\n \"name\": \"oracle\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"funder\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"lengthToAdd\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initializePresetParameter\",\n \"accounts\": [\n {\n \"name\": \"presetParameter\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rent\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"ix\",\n \"type\": {\n \"defined\": \"InitPresetParametersIx\"\n }\n }\n ]\n },\n {\n \"name\": \"closePresetParameter\",\n \"accounts\": [\n {\n \"name\": \"presetParameter\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"rentReceiver\",\n \"isMut\": true,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"removeAllLiquidity\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayBitmapExtension\",\n \"isMut\": true,\n \"isSigner\": false,\n \"isOptional\": true\n },\n {\n \"name\": \"userTokenX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"userTokenY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveX\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"reserveY\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenXMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"sender\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"tokenXProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenYProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"togglePairStatus\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"updateWhitelistedWallet\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"admin\",\n \"isMut\": false,\n \"isSigner\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"idx\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"wallet\",\n \"type\": \"publicKey\"\n }\n ]\n },\n {\n \"name\": \"migratePosition\",\n \"accounts\": [\n {\n \"name\": \"positionV2\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"positionV1\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"owner\",\n \"isMut\": true,\n \"isSigner\": true\n },\n {\n \"name\": \"systemProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"rentReceiver\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"migrateBinArray\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"updateFeesAndRewards\",\n \"accounts\": [\n {\n \"name\": \"position\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayLower\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"binArrayUpper\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"owner\",\n \"isMut\": false,\n \"isSigner\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"withdrawIneligibleReward\",\n \"accounts\": [\n {\n \"name\": \"lbPair\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardVault\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"rewardMint\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"funderTokenAccount\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"funder\",\n \"isMut\": false,\n \"isSigner\": true\n },\n {\n \"name\": \"binArray\",\n \"isMut\": true,\n \"isSigner\": false\n },\n {\n \"name\": \"tokenProgram\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"eventAuthority\",\n \"isMut\": false,\n \"isSigner\": false\n },\n {\n \"name\": \"program\",\n \"isMut\": false,\n \"isSigner\": false\n }\n ],\n \"args\": [\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\"\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"binArrayBitmapExtension\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"positiveBinArrayBitmap\",\n \"docs\": [\n \"Packed initialized bin array state for start_bin_index is positive\"\n ],\n \"type\": {\n \"array\": [\n {\n \"array\": [\n \"u64\",\n 8\n ]\n },\n 12\n ]\n }\n },\n {\n \"name\": \"negativeBinArrayBitmap\",\n \"docs\": [\n \"Packed initialized bin array state for start_bin_index is negative\"\n ],\n \"type\": {\n \"array\": [\n {\n \"array\": [\n \"u64\",\n 8\n ]\n },\n 12\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"binArray\",\n \"docs\": [\n \"An account to contain a range of bin. For example: Bin 100 <-> 200.\",\n \"For example:\",\n \"BinArray index: 0 contains bin 0 <-> 599\",\n \"index: 2 contains bin 600 <-> 1199, ...\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"index\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"version\",\n \"docs\": [\n \"Version of binArray\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\n \"u8\",\n 7\n ]\n }\n },\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"bins\",\n \"type\": {\n \"array\": [\n {\n \"defined\": \"Bin\"\n },\n 70\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"lbPair\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"parameters\",\n \"type\": {\n \"defined\": \"StaticParameters\"\n }\n },\n {\n \"name\": \"vParameters\",\n \"type\": {\n \"defined\": \"VariableParameters\"\n }\n },\n {\n \"name\": \"bumpSeed\",\n \"type\": {\n \"array\": [\n \"u8\",\n 1\n ]\n }\n },\n {\n \"name\": \"binStepSeed\",\n \"docs\": [\n \"Bin step signer seed\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 2\n ]\n }\n },\n {\n \"name\": \"pairType\",\n \"docs\": [\n \"Type of the pair\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"activeId\",\n \"docs\": [\n \"Active bin id\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"binStep\",\n \"docs\": [\n \"Bin step. Represent the price increment / decrement.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"status\",\n \"docs\": [\n \"Status of the pair\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding1\",\n \"type\": {\n \"array\": [\n \"u8\",\n 5\n ]\n }\n },\n {\n \"name\": \"tokenXMint\",\n \"docs\": [\n \"Token X mint\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"tokenYMint\",\n \"docs\": [\n \"Token Y mint\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"reserveX\",\n \"docs\": [\n \"LB token X vault\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"reserveY\",\n \"docs\": [\n \"LB token Y vault\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"protocolFee\",\n \"docs\": [\n \"Uncollected protocol fee\"\n ],\n \"type\": {\n \"defined\": \"ProtocolFee\"\n }\n },\n {\n \"name\": \"feeOwner\",\n \"docs\": [\n \"Protocol fee owner,\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"rewardInfos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": \"RewardInfo\"\n },\n 2\n ]\n }\n },\n {\n \"name\": \"oracle\",\n \"docs\": [\n \"Oracle pubkey\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"binArrayBitmap\",\n \"docs\": [\n \"Packed initialized bin array state\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 16\n ]\n }\n },\n {\n \"name\": \"lastUpdatedAt\",\n \"docs\": [\n \"Last time the pool fee parameter was updated\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"whitelistedWallet\",\n \"docs\": [\n \"Whitelisted wallet\"\n ],\n \"type\": {\n \"array\": [\n \"publicKey\",\n 2\n ]\n }\n },\n {\n \"name\": \"baseKey\",\n \"docs\": [\n \"Base keypair. Only required for permission pair\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"reserved\",\n \"docs\": [\n \"Reserved space for future use\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 88\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"oracle\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"idx\",\n \"docs\": [\n \"Index of latest observation slot\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activeSize\",\n \"docs\": [\n \"Size of active sample. Active sample is initialized observation.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"length\",\n \"docs\": [\n \"Number of observations\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"position\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"docs\": [\n \"The LB pair of this position\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of the position. Client rely on this to to fetch their positions.\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"liquidityShares\",\n \"docs\": [\n \"Liquidity shares of this position in bins (lower_bin_id <-> upper_bin_id). This is the same as LP concept.\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 70\n ]\n }\n },\n {\n \"name\": \"rewardInfos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": \"UserRewardInfo\"\n },\n 70\n ]\n }\n },\n {\n \"name\": \"feeInfos\",\n \"docs\": [\n \"Swap fee to claim information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": \"FeeInfo\"\n },\n 70\n ]\n }\n },\n {\n \"name\": \"lowerBinId\",\n \"docs\": [\n \"Lower bin ID\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"upperBinId\",\n \"docs\": [\n \"Upper bin ID\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"lastUpdatedAt\",\n \"docs\": [\n \"Last updated timestamp\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"totalClaimedFeeXAmount\",\n \"docs\": [\n \"Total claimed token fee X\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"totalClaimedFeeYAmount\",\n \"docs\": [\n \"Total claimed token fee Y\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"totalClaimedRewards\",\n \"docs\": [\n \"Total claimed rewards\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\n },\n {\n \"name\": \"reserved\",\n \"docs\": [\n \"Reserved space for future use\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 160\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"positionV2\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"docs\": [\n \"The LB pair of this position\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of the position. Client rely on this to to fetch their positions.\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"liquidityShares\",\n \"docs\": [\n \"Liquidity shares of this position in bins (lower_bin_id <-> upper_bin_id). This is the same as LP concept.\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 70\n ]\n }\n },\n {\n \"name\": \"rewardInfos\",\n \"docs\": [\n \"Farming reward information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": \"UserRewardInfo\"\n },\n 70\n ]\n }\n },\n {\n \"name\": \"feeInfos\",\n \"docs\": [\n \"Swap fee to claim information\"\n ],\n \"type\": {\n \"array\": [\n {\n \"defined\": \"FeeInfo\"\n },\n 70\n ]\n }\n },\n {\n \"name\": \"lowerBinId\",\n \"docs\": [\n \"Lower bin ID\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"upperBinId\",\n \"docs\": [\n \"Upper bin ID\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"lastUpdatedAt\",\n \"docs\": [\n \"Last updated timestamp\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"totalClaimedFeeXAmount\",\n \"docs\": [\n \"Total claimed token fee X\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"totalClaimedFeeYAmount\",\n \"docs\": [\n \"Total claimed token fee Y\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"totalClaimedRewards\",\n \"docs\": [\n \"Total claimed rewards\"\n ],\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\n },\n {\n \"name\": \"operator\",\n \"docs\": [\n \"Operator of position\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"reserved\",\n \"docs\": [\n \"Reserved space for future use\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 128\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"presetParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"binStep\",\n \"docs\": [\n \"Bin step. Represent the price increment / decrement.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"baseFactor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filterPeriod\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decayPeriod\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reductionFactor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variableFeeControl\",\n \"docs\": [\n \"Used to scale the variable fee component depending on the dynamic of the market\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"maxVolatilityAccumulator\",\n \"docs\": [\n \"Maximum number of bin crossed can be accumulated. Used to cap volatile fee rate.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"minBinId\",\n \"docs\": [\n \"Min bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxBinId\",\n \"docs\": [\n \"Max bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"protocolShare\",\n \"docs\": [\n \"Portion of swap fees retained by the protocol by controlling protocol_share parameter. protocol_swap_fee = protocol_share * total_swap_fee\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n }\n ],\n \"types\": [\n {\n \"name\": \"LiquidityParameterByStrategyOneSide\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount\",\n \"docs\": [\n \"Amount of X token or Y token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activeId\",\n \"docs\": [\n \"Active bin that integrator observe off-chain\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxActiveBinSlippage\",\n \"docs\": [\n \"max active bin slippage allowed\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"strategyParameters\",\n \"docs\": [\n \"strategy parameters\"\n ],\n \"type\": {\n \"defined\": \"StrategyParameters\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityParameterByStrategy\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amountX\",\n \"docs\": [\n \"Amount of X token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"docs\": [\n \"Amount of Y token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activeId\",\n \"docs\": [\n \"Active bin that integrator observe off-chain\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxActiveBinSlippage\",\n \"docs\": [\n \"max active bin slippage allowed\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"strategyParameters\",\n \"docs\": [\n \"strategy parameters\"\n ],\n \"type\": {\n \"defined\": \"StrategyParameters\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"StrategyParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"minBinId\",\n \"docs\": [\n \"min bin id\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxBinId\",\n \"docs\": [\n \"max bin id\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"strategyType\",\n \"docs\": [\n \"strategy type\"\n ],\n \"type\": {\n \"defined\": \"StrategyType\"\n }\n },\n {\n \"name\": \"parameteres\",\n \"docs\": [\n \"parameters\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 64\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ParabolicParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"aAsk\",\n \"docs\": [\n \"amplification in ask side\"\n ],\n \"type\": \"i16\"\n },\n {\n \"name\": \"aBid\",\n \"docs\": [\n \"amplification in bid side\"\n ],\n \"type\": \"i16\"\n },\n {\n \"name\": \"aActiveBin\",\n \"docs\": [\n \"amplification in active bin\"\n ],\n \"type\": \"i16\"\n },\n {\n \"name\": \"centerBinId\",\n \"docs\": [\n \"center bin id\"\n ],\n \"type\": \"i32\"\n }\n ]\n }\n },\n {\n \"name\": \"SpotParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"weightAsk\",\n \"docs\": [\n \"weight in ask side\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"weightBid\",\n \"docs\": [\n \"weight in bid side\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"weightActiveBin\",\n \"docs\": [\n \"weight in active bin\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"BinLiquidityDistributionByWeight\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"binId\",\n \"docs\": [\n \"Define the bin ID wish to deposit to.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"weight\",\n \"docs\": [\n \"weight of liquidity distributed for this bin id\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityParameterByWeight\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amountX\",\n \"docs\": [\n \"Amount of X token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"docs\": [\n \"Amount of Y token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activeId\",\n \"docs\": [\n \"Active bin that integrator observe off-chain\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxActiveBinSlippage\",\n \"docs\": [\n \"max active bin slippage allowed\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"binLiquidityDist\",\n \"docs\": [\n \"Liquidity distribution to each bins\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": \"BinLiquidityDistributionByWeight\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityOneSideParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount\",\n \"docs\": [\n \"Amount of X token or Y token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"activeId\",\n \"docs\": [\n \"Active bin that integrator observe off-chain\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxActiveBinSlippage\",\n \"docs\": [\n \"max active bin slippage allowed\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"binLiquidityDist\",\n \"docs\": [\n \"Liquidity distribution to each bins\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": \"BinLiquidityDistributionByWeight\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"BinLiquidityDistribution\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"binId\",\n \"docs\": [\n \"Define the bin ID wish to deposit to.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"distributionX\",\n \"docs\": [\n \"DistributionX (or distributionY) is the percentages of amountX (or amountY) you want to add to each bin.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"distributionY\",\n \"docs\": [\n \"DistributionX (or distributionY) is the percentages of amountX (or amountY) you want to add to each bin.\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amountX\",\n \"docs\": [\n \"Amount of X token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"docs\": [\n \"Amount of Y token to deposit\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"binLiquidityDist\",\n \"docs\": [\n \"Liquidity distribution to each bins\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": \"BinLiquidityDistribution\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"InitPresetParametersIx\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"binStep\",\n \"docs\": [\n \"Bin step. Represent the price increment / decrement.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"baseFactor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filterPeriod\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decayPeriod\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reductionFactor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variableFeeControl\",\n \"docs\": [\n \"Used to scale the variable fee component depending on the dynamic of the market\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"maxVolatilityAccumulator\",\n \"docs\": [\n \"Maximum number of bin crossed can be accumulated. Used to cap volatile fee rate.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"minBinId\",\n \"docs\": [\n \"Min bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxBinId\",\n \"docs\": [\n \"Max bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"protocolShare\",\n \"docs\": [\n \"Portion of swap fees retained by the protocol by controlling protocol_share parameter. protocol_swap_fee = protocol_share * total_swap_fee\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"BinLiquidityReduction\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"binId\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"bpsToRemove\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"FeeParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"protocolShare\",\n \"docs\": [\n \"Portion of swap fees retained by the protocol by controlling protocol_share parameter. protocol_swap_fee = protocol_share * total_swap_fee\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"baseFactor\",\n \"docs\": [\n \"Base factor for base fee rate\"\n ],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"Bin\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amountX\",\n \"docs\": [\n \"Amount of token X in the bin. This already excluded protocol fees.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"docs\": [\n \"Amount of token Y in the bin. This already excluded protocol fees.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"price\",\n \"docs\": [\n \"Bin price\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquiditySupply\",\n \"docs\": [\n \"Liquidities of the bin. This is the same as LP mint supply. q-number\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"rewardPerTokenStored\",\n \"docs\": [\n \"reward_a_per_token_stored\"\n ],\n \"type\": {\n \"array\": [\n \"u128\",\n 2\n ]\n }\n },\n {\n \"name\": \"feeAmountXPerTokenStored\",\n \"docs\": [\n \"Swap fee amount of token X per liquidity deposited.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"feeAmountYPerTokenStored\",\n \"docs\": [\n \"Swap fee amount of token Y per liquidity deposited.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"amountXIn\",\n \"docs\": [\n \"Total token X swap into the bin. Only used for tracking purpose.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"amountYIn\",\n \"docs\": [\n \"Total token Y swap into he bin. Only used for tracking purpose.\"\n ],\n \"type\": \"u128\"\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amountX\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amountY\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardInfo\",\n \"docs\": [\n \"Stores the state relevant for tracking liquidity mining rewards\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\n \"Reward token mint.\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"vault\",\n \"docs\": [\n \"Reward vault token account.\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"funder\",\n \"docs\": [\n \"Authority account that allows to fund rewards\"\n ],\n \"type\": \"publicKey\"\n },\n {\n \"name\": \"rewardDuration\",\n \"docs\": [\n \"TODO check whether we need to store it in pool\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"rewardDurationEnd\",\n \"docs\": [\n \"TODO check whether we need to store it in pool\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"rewardRate\",\n \"docs\": [\n \"TODO check whether we need to store it in pool\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"lastUpdateTime\",\n \"docs\": [\n \"The last time reward states were updated.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulativeSecondsWithEmptyLiquidityReward\",\n \"docs\": [\n \"Accumulated seconds where when farm distribute rewards, but the bin is empty. The reward will be accumulated for next reward time window.\"\n ],\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"Observation\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"cumulativeActiveBinId\",\n \"docs\": [\n \"Cumulative active bin ID\"\n ],\n \"type\": \"i128\"\n },\n {\n \"name\": \"createdAt\",\n \"docs\": [\n \"Observation sample created timestamp\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"lastUpdatedAt\",\n \"docs\": [\n \"Observation sample last updated timestamp\"\n ],\n \"type\": \"i64\"\n }\n ]\n }\n },\n {\n \"name\": \"StaticParameters\",\n \"docs\": [\n \"Parameter that set by the protocol\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"baseFactor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filterPeriod\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decayPeriod\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reductionFactor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variableFeeControl\",\n \"docs\": [\n \"Used to scale the variable fee component depending on the dynamic of the market\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"maxVolatilityAccumulator\",\n \"docs\": [\n \"Maximum number of bin crossed can be accumulated. Used to cap volatile fee rate.\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"minBinId\",\n \"docs\": [\n \"Min bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"maxBinId\",\n \"docs\": [\n \"Max bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"protocolShare\",\n \"docs\": [\n \"Portion of swap fees retained by the protocol by controlling protocol_share parameter. protocol_swap_fee = protocol_share * total_swap_fee\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"Padding for bytemuck safe alignment\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 6\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"VariableParameters\",\n \"docs\": [\n \"Parameters that changes based on dynamic of the market\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"volatilityAccumulator\",\n \"docs\": [\n \"Volatility accumulator measure the number of bin crossed since reference bin ID. Normally (without filter period taken into consideration), reference bin ID is the active bin of last swap.\",\n \"It affects the variable fee rate\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"volatilityReference\",\n \"docs\": [\n \"Volatility reference is decayed volatility accumulator. It is always <= volatility_accumulator\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"indexReference\",\n \"docs\": [\n \"Active bin id of last swap.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\n \"Padding for bytemuck safe alignment\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 4\n ]\n }\n },\n {\n \"name\": \"lastUpdateTimestamp\",\n \"docs\": [\n \"Last timestamp the variable parameters was updated\"\n ],\n \"type\": \"i64\"\n },\n {\n \"name\": \"padding1\",\n \"docs\": [\n \"Padding for bytemuck safe alignment\"\n ],\n \"type\": {\n \"array\": [\n \"u8\",\n 8\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"FeeInfo\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"feeXPerTokenComplete\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"feeYPerTokenComplete\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"feeXPending\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"feeYPending\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"UserRewardInfo\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"rewardPerTokenCompletes\",\n \"type\": {\n \"array\": [\n \"u128\",\n 2\n ]\n }\n },\n {\n \"name\": \"rewardPendings\",\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"StrategyType\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Spot\"\n },\n {\n \"name\": \"Curve\"\n },\n {\n \"name\": \"BidAsk\"\n }\n ]\n }\n },\n {\n \"name\": \"Rounding\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Up\"\n },\n {\n \"name\": \"Down\"\n }\n ]\n }\n },\n {\n \"name\": \"LayoutVersion\",\n \"docs\": [\n \"Layout version\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"V0\"\n },\n {\n \"name\": \"V1\"\n }\n ]\n }\n },\n {\n \"name\": \"PairType\",\n \"docs\": [\n \"Type of the Pair. 0 = Permissionless, 1 = Permission. Putting 0 as permissionless for backward compatibility.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Permissionless\"\n },\n {\n \"name\": \"Permission\"\n }\n ]\n }\n },\n {\n \"name\": \"PairStatus\",\n \"docs\": [\n \"Pair status. 0 = Enabled, 1 = Disabled. Putting 0 as enabled for backward compatibility.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Enabled\"\n },\n {\n \"name\": \"Disabled\"\n }\n ]\n }\n }\n ],\n \"events\": [\n {\n \"name\": \"CompositionFee\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"binId\",\n \"type\": \"i16\",\n \"index\": false\n },\n {\n \"name\": \"tokenXFeeAmount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"tokenYFeeAmount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"protocolTokenXFeeAmount\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"protocolTokenYFeeAmount\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"AddLiquidity\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"from\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amounts\",\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n },\n \"index\": false\n },\n {\n \"name\": \"activeBinId\",\n \"type\": \"i32\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"RemoveLiquidity\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"from\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amounts\",\n \"type\": {\n \"array\": [\n \"u64\",\n 2\n ]\n },\n \"index\": false\n },\n {\n \"name\": \"activeBinId\",\n \"type\": \"i32\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"Swap\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"from\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"startBinId\",\n \"type\": \"i32\",\n \"index\": false\n },\n {\n \"name\": \"endBinId\",\n \"type\": \"i32\",\n \"index\": false\n },\n {\n \"name\": \"amountIn\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"amountOut\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"swapForY\",\n \"type\": \"bool\",\n \"index\": false\n },\n {\n \"name\": \"fee\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"protocolFee\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"feeBps\",\n \"type\": \"u128\",\n \"index\": false\n },\n {\n \"name\": \"hostFee\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"ClaimReward\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"totalReward\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"FundReward\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"funder\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"InitializeReward\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardMint\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"funder\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"rewardDuration\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"UpdateRewardDuration\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"oldRewardDuration\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"newRewardDuration\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"UpdateRewardFunder\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardIndex\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"oldFunder\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"newFunder\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"PositionClose\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"ClaimFee\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"feeX\",\n \"type\": \"u64\",\n \"index\": false\n },\n {\n \"name\": \"feeY\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"LbPairCreate\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"binStep\",\n \"type\": \"u16\",\n \"index\": false\n },\n {\n \"name\": \"tokenX\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"tokenY\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"PositionCreate\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"owner\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"FeeParameterUpdate\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"protocolShare\",\n \"type\": \"u16\",\n \"index\": false\n },\n {\n \"name\": \"baseFactor\",\n \"type\": \"u16\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"IncreaseObservation\",\n \"fields\": [\n {\n \"name\": \"oracle\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"newObservationLength\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"WithdrawIneligibleReward\",\n \"fields\": [\n {\n \"name\": \"lbPair\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"rewardMint\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\",\n \"index\": false\n }\n ]\n },\n {\n \"name\": \"UpdatePositionOperator\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"oldOperator\",\n \"type\": \"publicKey\",\n \"index\": false\n },\n {\n \"name\": \"newOperator\",\n \"type\": \"publicKey\",\n \"index\": false\n }\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"InvalidStartBinIndex\",\n \"msg\": \"Invalid start bin index\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidBinId\",\n \"msg\": \"Invalid bin id\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidInput\",\n \"msg\": \"Invalid input data\"\n },\n {\n \"code\": 6003,\n \"name\": \"ExceededAmountSlippageTolerance\",\n \"msg\": \"Exceeded amount slippage tolerance\"\n },\n {\n \"code\": 6004,\n \"name\": \"ExceededBinSlippageTolerance\",\n \"msg\": \"Exceeded bin slippage tolerance\"\n },\n {\n \"code\": 6005,\n \"name\": \"CompositionFactorFlawed\",\n \"msg\": \"Composition factor flawed\"\n },\n {\n \"code\": 6006,\n \"name\": \"NonPresetBinStep\",\n \"msg\": \"Non preset bin step\"\n },\n {\n \"code\": 6007,\n \"name\": \"ZeroLiquidity\",\n \"msg\": \"Zero liquidity\"\n },\n {\n \"code\": 6008,\n \"name\": \"InvalidPosition\",\n \"msg\": \"Invalid position\"\n },\n {\n \"code\": 6009,\n \"name\": \"BinArrayNotFound\",\n \"msg\": \"Bin array not found\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidTokenMint\",\n \"msg\": \"Invalid token mint\"\n },\n {\n \"code\": 6011,\n \"name\": \"InvalidAccountForSingleDeposit\",\n \"msg\": \"Invalid account for single deposit\"\n },\n {\n \"code\": 6012,\n \"name\": \"PairInsufficientLiquidity\",\n \"msg\": \"Pair insufficient liquidity\"\n },\n {\n \"code\": 6013,\n \"name\": \"InvalidFeeOwner\",\n \"msg\": \"Invalid fee owner\"\n },\n {\n \"code\": 6014,\n \"name\": \"InvalidFeeWithdrawAmount\",\n \"msg\": \"Invalid fee withdraw amount\"\n },\n {\n \"code\": 6015,\n \"name\": \"InvalidAdmin\",\n \"msg\": \"Invalid admin\"\n },\n {\n \"code\": 6016,\n \"name\": \"IdenticalFeeOwner\",\n \"msg\": \"Identical fee owner\"\n },\n {\n \"code\": 6017,\n \"name\": \"InvalidBps\",\n \"msg\": \"Invalid basis point\"\n },\n {\n \"code\": 6018,\n \"name\": \"MathOverflow\",\n \"msg\": \"Math operation overflow\"\n },\n {\n \"code\": 6019,\n \"name\": \"TypeCastFailed\",\n \"msg\": \"Type cast error\"\n },\n {\n \"code\": 6020,\n \"name\": \"InvalidRewardIndex\",\n \"msg\": \"Invalid reward index\"\n },\n {\n \"code\": 6021,\n \"name\": \"InvalidRewardDuration\",\n \"msg\": \"Invalid reward duration\"\n },\n {\n \"code\": 6022,\n \"name\": \"RewardInitialized\",\n \"msg\": \"Reward already initialized\"\n },\n {\n \"code\": 6023,\n \"name\": \"RewardUninitialized\",\n \"msg\": \"Reward not initialized\"\n },\n {\n \"code\": 6024,\n \"name\": \"IdenticalFunder\",\n \"msg\": \"Identical funder\"\n },\n {\n \"code\": 6025,\n \"name\": \"RewardCampaignInProgress\",\n \"msg\": \"Reward campaign in progress\"\n },\n {\n \"code\": 6026,\n \"name\": \"IdenticalRewardDuration\",\n \"msg\": \"Reward duration is the same\"\n },\n {\n \"code\": 6027,\n \"name\": \"InvalidBinArray\",\n \"msg\": \"Invalid bin array\"\n },\n {\n \"code\": 6028,\n \"name\": \"NonContinuousBinArrays\",\n \"msg\": \"Bin arrays must be continuous\"\n },\n {\n \"code\": 6029,\n \"name\": \"InvalidRewardVault\",\n \"msg\": \"Invalid reward vault\"\n },\n {\n \"code\": 6030,\n \"name\": \"NonEmptyPosition\",\n \"msg\": \"Position is not empty\"\n },\n {\n \"code\": 6031,\n \"name\": \"UnauthorizedAlphaAccess\",\n \"msg\": \"Unauthorized alpha access\"\n },\n {\n \"code\": 6032,\n \"name\": \"InvalidFeeParameter\",\n \"msg\": \"Invalid fee parameter\"\n },\n {\n \"code\": 6033,\n \"name\": \"MissingOracle\",\n \"msg\": \"Missing oracle account\"\n },\n {\n \"code\": 6034,\n \"name\": \"InsufficientSample\",\n \"msg\": \"Insufficient observation sample\"\n },\n {\n \"code\": 6035,\n \"name\": \"InvalidLookupTimestamp\",\n \"msg\": \"Invalid lookup timestamp\"\n },\n {\n \"code\": 6036,\n \"name\": \"BitmapExtensionAccountIsNotProvided\",\n \"msg\": \"Bitmap extension account is not provided\"\n },\n {\n \"code\": 6037,\n \"name\": \"CannotFindNonZeroLiquidityBinArrayId\",\n \"msg\": \"Cannot find non-zero liquidity binArrayId\"\n },\n {\n \"code\": 6038,\n \"name\": \"BinIdOutOfBound\",\n \"msg\": \"Bin id out of bound\"\n },\n {\n \"code\": 6039,\n \"name\": \"InsufficientOutAmount\",\n \"msg\": \"Insufficient amount in for minimum out\"\n },\n {\n \"code\": 6040,\n \"name\": \"InvalidPositionWidth\",\n \"msg\": \"Invalid position width\"\n },\n {\n \"code\": 6041,\n \"name\": \"ExcessiveFeeUpdate\",\n \"msg\": \"Excessive fee update\"\n },\n {\n \"code\": 6042,\n \"name\": \"PoolDisabled\",\n \"msg\": \"Pool disabled\"\n },\n {\n \"code\": 6043,\n \"name\": \"InvalidPoolType\",\n \"msg\": \"Invalid pool type\"\n },\n {\n \"code\": 6044,\n \"name\": \"ExceedMaxWhitelist\",\n \"msg\": \"Whitelist for wallet is full\"\n },\n {\n \"code\": 6045,\n \"name\": \"InvalidIndex\",\n \"msg\": \"Invalid index\"\n },\n {\n \"code\": 6046,\n \"name\": \"RewardNotEnded\",\n \"msg\": \"Reward not ended\"\n },\n {\n \"code\": 6047,\n \"name\": \"MustWithdrawnIneligibleReward\",\n \"msg\": \"Must withdraw ineligible reward\"\n }\n ]\n};\n","import { PublicKey } from \"@solana/web3.js\";\nimport { IDL } from \"../idl\";\nimport { BN } from \"@coral-xyz/anchor\";\n\nexport const LBCLMM_PROGRAM_IDS = {\n devnet: \"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo\",\n localhost: \"LbVRzDTvBDEcrthxfZ4RL6yiq3uZw8bS6MwtdY6UhFQ\",\n \"mainnet-beta\": \"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo\",\n};\n\nexport const ADMIN = {\n devnet: \"6WaLrrRfReGKBYUSkmx2K6AuT21ida4j8at2SUiZdXu8\",\n localhost: \"bossj3JvwiNK7pvjr149DqdtJxf2gdygbcmEPTkb2F1\",\n};\n\nexport enum Network {\n MAINNET = \"mainnet-beta\",\n TESTNET = \"testnet\",\n DEVNET = \"devnet\",\n LOCAL = \"localhost\",\n}\n\nexport const BASIS_POINT_MAX = 10000;\nexport const SCALE_OFFSET = 64;\nexport const SCALE = new BN(1).shln(SCALE_OFFSET);\n\nexport const FEE_PRECISION = new BN(1_000_000_000);\nexport const MAX_FEE_RATE = new BN(100_000_000);\n\nconst CONSTANTS = Object.entries(IDL.constants);\n\nexport const MAX_BIN_ARRAY_SIZE = new BN(\n CONSTANTS.find(([k, v]) => v.name == \"MAX_BIN_PER_ARRAY\")?.[1].value ?? 0\n);\nexport const MAX_BIN_PER_POSITION = new BN(\n CONSTANTS.find(([k, v]) => v.name == \"MAX_BIN_PER_POSITION\")?.[1].value ?? 0\n);\nexport const BIN_ARRAY_BITMAP_SIZE = new BN(\n CONSTANTS.find(([k, v]) => v.name == \"BIN_ARRAY_BITMAP_SIZE\")?.[1].value ?? 0\n);\nexport const EXTENSION_BINARRAY_BITMAP_SIZE = new BN(\n CONSTANTS.find(([k, v]) => v.name == \"EXTENSION_BINARRAY_BITMAP_SIZE\")?.[1]\n .value ?? 0\n);\n\nexport const SIMULATION_USER = new PublicKey(\n \"HrY9qR5TiB2xPzzvbBu5KrBorMfYGQXh9osXydz4jy9s\"\n);\n\nexport const PRECISION = 18446744073709551616;\n\nexport const MAX_CLAIM_ALL_ALLOWED = 3;\n\nexport const MAX_BIN_LENGTH_ALLOWED_IN_ONE_TX = 26;\n\nexport const MAX_ACTIVE_BIN_SLIPPAGE = 3;\n","import {\n BN,\n IdlAccounts,\n IdlTypes,\n Program,\n ProgramAccount,\n} from \"@coral-xyz/anchor\";\nimport { LbClmm } from \"../idl\";\nimport { PublicKey, TransactionInstruction } from \"@solana/web3.js\";\nimport Decimal from \"decimal.js\";\nimport { struct, s16, u16, s32 } from \"@solana/buffer-layout\";\n\nexport interface FeeInfo {\n baseFeeRatePercentage: Decimal;\n maxFeeRatePercentage: Decimal;\n protocolFeePercentage: Decimal;\n}\n\nexport interface BinAndAmount {\n binId: number;\n xAmountBpsOfTotal: BN;\n yAmountBpsOfTotal: BN;\n}\n\nexport interface TokenReserve {\n publicKey: PublicKey;\n reserve: PublicKey;\n amount: bigint;\n decimal: number;\n}\n\nexport type ClmmProgram = Program<LbClmm>;\n\nexport type LbPairAccount = IdlAccounts<LbClmm>[\"lbPair\"];\nexport type LbPairAccountsStruct = ProgramAccount<\n IdlAccounts<LbClmm>[\"lbPair\"]\n>;\n\nexport type Bin = IdlTypes<LbClmm>[\"Bin\"];\nexport type BinArray = IdlAccounts<LbClmm>[\"binArray\"];\nexport type BinArrayAccount = ProgramAccount<IdlAccounts<LbClmm>[\"binArray\"]>;\n\nexport type PositionAccount = IdlAccounts<LbClmm>[\"position\"];\n\nexport type vParameters = IdlAccounts<LbClmm>[\"lbPair\"][\"vParameters\"];\nexport type sParameters = IdlAccounts<LbClmm>[\"lbPair\"][\"parameters\"];\n\nexport type BinLiquidityDistribution =\n IdlTypes<LbClmm>[\"BinLiquidityDistribution\"];\nexport type BinLiquidityReduction = IdlTypes<LbClmm>[\"BinLiquidityReduction\"];\n\nexport type BinArrayBitmapExtensionAccount = ProgramAccount<\n IdlAccounts<LbClmm>[\"binArrayBitmapExtension\"]\n>;\nexport type BinArrayBitmapExtension =\n IdlAccounts<LbClmm>[\"binArrayBitmapExtension\"];\n\nexport type LiquidityParameterByWeight =\n IdlTypes<LbClmm>[\"LiquidityParameterByWeight\"];\nexport type LiquidityOneSideParameter =\n IdlTypes<LbClmm>[\"LiquidityOneSideParameter\"];\n\nexport interface Position {\n publicKey: PublicKey;\n positionData: PositionData;\n version: PositionVersion;\n}\n\nexport interface PositionInfo {\n publicKey: PublicKey;\n lbPair: LbPairAccount;\n tokenX: TokenReserve;\n tokenY: TokenReserve;\n lbPairPositionsData: Array<Position>;\n}\n\nexport interface FeeInfo {\n baseFeeRatePercentage: Decimal;\n maxFeeRatePercentage: Decimal;\n protocolFeePercentage: Decimal;\n}\n\nexport interface EmissionRate {\n rewardOne: Decimal;\n rewardTwo: Decimal;\n}\n\nexport interface SwapFee {\n feeX: BN;\n feeY: BN;\n}\n\nexport interface LMRewards {\n rewardOne: BN;\n rewardTwo: BN;\n}\n\nexport enum PositionVersion {\n V1,\n V2,\n}\n\nexport enum StrategyType {\n Spot,\n Curve,\n BidAsk,\n}\n\nexport interface StrategyParameters {\n maxBinId: number;\n minBinId: number;\n strategyType: StrategyType;\n aAsk: number; // for curve or bid/ask\n aBid: number; // for curve or bid/ask\n aActiveBin: number; // for curve or bid/ask\n centerBinId: number; // for curve or bid/ask\n weightAsk: number; // for spot\n weightBid: number; // for spot\n weightActiveBin: number; // for spot\n}\n\nexport type ParabolicParameter = IdlTypes<LbClmm>[\"ParabolicParameter\"];\nexport const parabolicParameter = struct<ParabolicParameter>([\n s16(\"aAsk\"),\n s16(\"aBid\"),\n s16(`aActiveBin`),\n s32(`centerBinId`),\n]);\n\nexport type SpotParameter = IdlTypes<LbClmm>[\"SpotParameter\"];\nexport const spotParameter = struct<SpotParameter>([\n u16(\"weightAsk\"),\n u16(\"weightBid\"),\n u16(\"weightActiveBin\"),\n]);\n\nexport interface TInitializePositionAndAddLiquidityParams {\n lbPairPubKey: PublicKey;\n positionPubKey: PublicKey;\n totalXAmount: BN;\n totalYAmount: BN;\n xYAmountDistribution: BinAndAmount[];\n user: PublicKey;\n}\n\nexport interface BinLiquidity {\n binId: number;\n xAmount: BN;\n yAmount: BN;\n supply: BN;\n version: number;\n price: string;\n pricePerToken: string;\n}\n\nexport interface SwapQuote {\n outAmount: BN;\n fee: BN;\n protocolFee: BN;\n minOutAmount: BN;\n priceImpact: Decimal;\n binArraysPubkey: any[];\n}\n\nexport interface IAccountsCache {\n binArrays: Map<String, BinArray>;\n lbPair: LbPairAccount;\n}\n\nexport interface PositionBinData {\n binId: number;\n price: string;\n pricePerToken: string;\n binXAmount: string;\n binYAmount: string;\n binLiquidity: string;\n positionLiquidity: string;\n positionXAmount: string;\n positionYAmount: string;\n}\n\nexport interface PositionData {\n totalXAmount: string;\n totalYAmount: string;\n positionBinData: PositionBinData[];\n lastUpdatedAt: BN;\n upperBinId: number;\n lowerBinId: number;\n feeX: BN;\n feeY: BN;\n rewardOne: BN;\n rewardTwo: BN;\n}\n\nexport interface SwapParams {\n /**\n * mint of in token\n */\n inToken: PublicKey;\n /**\n * mint of out token\n */\n outToken: PublicKey;\n /**\n * in token amount\n */\n inAmount: BN;\n /**\n * minimum out with slippage\n */\n minOutAmount: BN;\n /**\n * desired lbPair to swap against\n */\n lbPair: PublicKey;\n /**\n * user\n */\n user: PublicKey;\n binArraysPubkey: PublicKey[];\n}\n\nexport interface GetOrCreateATAResponse {\n ataPubKey: PublicKey;\n ix?: TransactionInstruction;\n}\n\nexport enum BitmapType {\n U1024,\n U512,\n}\n","import { BN, EventParser } from \"@coral-xyz/anchor\";\nimport {\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountInstruction,\n createCloseAccountInstruction,\n getAccount,\n getAssociatedTokenAddress,\n getAssociatedTokenAddressSync,\n getMint,\n} from \"@solana/spl-token\";\nimport { SCALE_OFFSET } from \"../constants\";\nimport {\n ComputeBudgetProgram,\n Connection,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { Bin, ClmmProgram, GetOrCreateATAResponse } from \"../types\";\nimport { Rounding, mulShr, shlDiv } from \"./math\";\n\nexport * from \"./derive\";\nexport * from \"./binArray\";\nexport * from \"./strategy\";\nexport * from \"./fee\";\n\nexport function chunks<T>(array: T[], size: number): T[][] {\n return Array.apply(0, new Array(Math.ceil(array.length / size))).map(\n (_, index) => array.slice(index * size, (index + 1) * size)\n );\n}\n\nexport async function chunkedFetchMultiplePoolAccount(\n program: ClmmProgram,\n pks: PublicKey[],\n chunkSize: number = 100\n) {\n const accounts = (\n await Promise.all(\n chunks(pks, chunkSize).map((chunk) =>\n program.account.lbPair.fetchMultiple(chunk)\n )\n )\n ).flat();\n\n return accounts.filter(Boolean);\n}\n\nexport async function chunkedFetchMultipleBinArrayBitmapExtensionAccount(\n program: ClmmProgram,\n pks: PublicKey[],\n chunkSize: number = 100\n) {\n const accounts = (\n await Promise.all(\n chunks(pks, chunkSize).map((chunk) =>\n program.account.binArrayBitmapExtension.fetchMultiple(chunk)\n )\n )\n ).flat();\n\n return accounts;\n}\n\nexport function getOutAmount(bin: Bin, inAmount: BN, swapForY: boolean) {\n return swapForY\n ? mulShr(inAmount, bin.price, SCALE_OFFSET, Rounding.Down)\n : shlDiv(inAmount, bin.price, SCALE_OFFSET, Rounding.Down);\n}\n\nexport async function getTokenDecimals(conn: Connection, mint: PublicKey) {\n const token = await getMint(conn, mint);\n return await token.decimals;\n}\n\nexport const getOrCreateATAInstruction = async (\n connection: Connection,\n tokenMint: PublicKey,\n owner: PublicKey,\n payer: PublicKey = owner,\n allowOwnerOffCurve = true\n): Promise<GetOrCreateATAResponse> => {\n try {\n const toAccount = await getAssociatedTokenAddress(\n tokenMint,\n owner,\n allowOwnerOffCurve\n );\n\n const account = await connection.getAccountInfo(toAccount);\n\n if (account) return { ataPubKey: toAccount, ix: undefined };\n\n const ix = createAssociatedTokenAccountInstruction(\n payer,\n toAccount,\n owner,\n tokenMint\n );\n\n return { ataPubKey: toAccount, ix };\n } catch (e) {\n /* handle error */\n console.error(\"Error::getOrCreateATAInstruction\", e);\n throw e;\n }\n};\n\nexport async function getTokenBalance(\n conn: Connection,\n tokenAccount: PublicKey\n): Promise<bigint> {\n const acc = await getAccount(conn, tokenAccount);\n return acc.amount;\n}\n\nexport const parseLogs = <T>(eventParser: EventParser, logs: string[]) => {\n if (!logs.length) throw new Error(\"No logs found\");\n\n for (const event of eventParser?.parseLogs(logs)) {\n return event.data as T;\n }\n\n throw new Error(\"No events found\");\n};\n\nexport const wrapSOLInstruction = (\n from: PublicKey,\n to: PublicKey,\n amount: bigint\n): TransactionInstruction[] => {\n return [\n SystemProgram.transfer({\n fromPubkey: from,\n toPubkey: to,\n lamports: amount,\n }),\n new TransactionInstruction({\n keys: [\n {\n pubkey: to,\n isSigner: false,\n isWritable: true,\n },\n ],\n data: Buffer.from(new Uint8Array([17])),\n programId: TOKEN_PROGRAM_ID,\n }),\n ];\n};\n\nexport const unwrapSOLInstruction = async (owner: PublicKey) => {\n const wSolATAAccount = getAssociatedTokenAddressSync(NATIVE_MINT, owner);\n if (wSolATAAccount) {\n const closedWrappedSolInstruction = createCloseAccountInstruction(\n wSolATAAccount,\n owner,\n owner,\n [],\n TOKEN_PROGRAM_ID\n );\n return closedWrappedSolInstruction;\n }\n return null;\n};\n\nexport async function chunkedGetMultipleAccountInfos(\n connection: Connection,\n pks: PublicKey[],\n chunkSize: number = 100\n) {\n const accountInfos = (\n await Promise.all(\n chunks(pks, chunkSize).map((chunk) =>\n connection.getMultipleAccountsInfo(chunk)\n )\n )\n ).flat();\n\n return accountInfos;\n}\n\nexport const computeBudgetIx = () => {\n return ComputeBudgetProgram.setComputeUnitLimit({\n units: 1_400_000,\n });\n};\n","import { BN } from '@coral-xyz/anchor';\n\nexport enum Rounding {\n Up,\n Down,\n}\n\nexport function mulShr(x: BN, y: BN, offset: number, rounding: Rounding) {\n const denominator = new BN(1).shln(offset);\n return mulDiv(x, y, denominator, rounding);\n}\n\nexport function shlDiv(x: BN, y: BN, offset: number, rounding: Rounding) {\n const scale = new BN(1).shln(offset);\n return mulDiv(x, scale, y, rounding);\n}\n\nexport function mulDiv(x: BN, y: BN, denominator: BN, rounding: Rounding) {\n const { div, mod } = x.mul(y).divmod(denominator);\n\n if (rounding == Rounding.Up && !mod.isZero()) {\n return div.add(new BN(1));\n }\n return div;\n}\n","import { BN } from '@coral-xyz/anchor';\nimport { PublicKey } from '@solana/web3.js';\n\n/** private */\nfunction sortTokenMints(tokenX: PublicKey, tokenY: PublicKey) {\n const [minKey, maxKey] = tokenX.toBuffer().compare(tokenY.toBuffer()) == 1 ? [tokenY, tokenX] : [tokenX, tokenY];\n return [minKey, maxKey];\n}\n/** private */\n\nexport function derivePresetParameter(binStep: BN, programId: PublicKey) {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"preset_parameter\"),\n new Uint8Array(binStep.toBuffer(\"le\", 2)),\n ],\n programId\n );\n}\n\nexport function deriveLbPair(tokenX: PublicKey, tokenY: PublicKey, binStep: BN, programId: PublicKey) {\n const [minKey, maxKey] = sortTokenMints(tokenX, tokenY);\n return PublicKey.findProgramAddressSync(\n [minKey.toBuffer(), maxKey.toBuffer(), new Uint8Array(binStep.toBuffer('le', 2))],\n programId,\n );\n}\n\n\n\nexport function deriveOracle(lbPair: PublicKey, programId: PublicKey) {\n return PublicKey.findProgramAddressSync([Buffer.from('oracle'), lbPair.toBytes()], programId);\n}\n\nexport function derivePosition(mint: PublicKey, programId: PublicKey) {\n return PublicKey.findProgramAddressSync([Buffer.from('position'), mint.toBuffer()], programId);\n}\n\n\n\nexport function deriveBinArray(lbPair: PublicKey, index: BN, programId: PublicKey) {\n let binArrayBytes: Uint8Array;\n if (index.isNeg()) {\n binArrayBytes = new Uint8Array(index.toTwos(64).toBuffer('le', 8));\n } else {\n binArrayBytes = new Uint8Array(index.toBuffer('le', 8));\n }\n return PublicKey.findProgramAddressSync([Buffer.from('bin_array'), lbPair.toBytes(), binArrayBytes], programId);\n}\n\nexport function deriveReserve(token: PublicKey, lbPair: PublicKey, programId: PublicKey) {\n return PublicKey.findProgramAddressSync([lbPair.toBuffer(), token.toBuffer()], programId);\n}","import { BN } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport { MAX_BIN_ARRAY_SIZE } from \"../constants\";\nimport {\n Bin,\n BinArray,\n BinArrayAccount,\n BinArrayBitmapExtension,\n BitmapType,\n LbPairAccount,\n} from \"../types\";\nimport {\n EXTENSION_BINARRAY_BITMAP_SIZE,\n BIN_ARRAY_BITMAP_SIZE,\n} from \"../constants\";\n\n/** private */\nfunction internalBitmapRange() {\n const lowerBinArrayIndex = BIN_ARRAY_BITMAP_SIZE.neg();\n const upperBinArrayIndex = BIN_ARRAY_BITMAP_SIZE.sub(new BN(1));\n return [lowerBinArrayIndex, upperBinArrayIndex];\n}\n\nfunction buildBitmapFromU64Arrays(u64Arrays: BN[], type: BitmapType) {\n const buffer = Buffer.concat(\n u64Arrays.map((b) => {\n return b.toBuffer(\"le\", 8);\n })\n );\n\n return new BN(buffer, \"le\");\n}\n\nfunction bitmapTypeDetail(type: BitmapType) {\n if (type == BitmapType.U1024) {\n return {\n bits: 1024,\n bytes: 1024 / 8,\n };\n } else {\n return {\n bits: 512,\n bytes: 512 / 8,\n };\n }\n}\n\nfunction mostSignificantBit(number: BN, bitLength: number) {\n const highestIndex = bitLength - 1;\n if (number.isZero()) {\n return null;\n }\n\n for (let i = highestIndex; i >= 0; i--) {\n if (number.testn(i)) {\n return highestIndex - i;\n }\n }\n return null;\n}\n\nfunction leastSignificantBit(number: BN, bitLength: number) {\n if (number.isZero()) {\n return null;\n }\n for (let i = 0; i < bitLength; i++) {\n if (number.testn(i)) {\n return i;\n }\n }\n return null;\n}\n\nfunction extensionBitmapRange() {\n return [\n BIN_ARRAY_BITMAP_SIZE.neg().mul(\n EXTENSION_BINARRAY_BITMAP_SIZE.add(new BN(1))\n ),\n BIN_ARRAY_BITMAP_SIZE.mul(\n EXTENSION_BINARRAY_BITMAP_SIZE.add(new BN(1))\n ).sub(new BN(1)),\n ];\n}\n\nfunction findSetBit(\n startIndex: number,\n endIndex: number,\n binArrayBitmapExtension: BinArrayBitmapExtension\n): number | null {\n const getBinArrayOffset = (binArrayIndex: number) => {\n return binArrayIndex > 0\n ? (binArrayIndex % BIN_ARRAY_BITMAP_SIZE.toNumber()) - 1\n : Math.abs(binArrayIndex - 1) % BIN_ARRAY_BITMAP_SIZE.toNumber();\n };\n\n const getBitmapOffset = (binArrayIndex: number) => {\n return binArrayIndex > 0\n ? binArrayIndex / BIN_ARRAY_BITMAP_SIZE.toNumber() - 1\n : -(binArrayIndex + 1) / BIN_ARRAY_BITMAP_SIZE.toNumber() - 1;\n };\n\n if (startIndex <= endIndex) {\n for (let i = startIndex; i <= endIndex; i++) {\n const binArrayOffset = getBinArrayOffset(i);\n const bitmapOffset = getBitmapOffset(i);\n const bitmapChunks =\n i > 0\n ? binArrayBitmapExtension.positiveBinArrayBitmap[bitmapOffset]\n : binArrayBitmapExtension.negativeBinArrayBitmap[bitmapOffset];\n const bitmap = buildBitmapFromU64Arrays(bitmapChunks, BitmapType.U512);\n if (bitmap.testn(binArrayOffset)) {\n return i;\n }\n }\n } else {\n for (let i = startIndex; i >= endIndex; i--) {\n const binArrayOffset = getBinArrayOffset(i);\n const bitmapOffset = getBitmapOffset(i);\n const bitmapChunks =\n i > 0\n ? binArrayBitmapExtension.positiveBinArrayBitmap[bitmapOffset]\n : binArrayBitmapExtension.negativeBinArrayBitmap[bitmapOffset];\n const bitmap = buildBitmapFromU64Arrays(bitmapChunks, BitmapType.U512);\n if (bitmap.testn(binArrayOffset)) {\n return i;\n }\n }\n }\n\n return null;\n}\n/** private */\n\nexport function isOverflowDefaultBinArrayBitmap(binArrayIndex: BN) {\n const [minBinArrayIndex, maxBinArrayIndex] = internalBitmapRange();\n return (\n binArrayIndex.gt(maxBinArrayIndex) || binArrayIndex.lt(minBinArrayIndex)\n );\n}\n\nexport function deriveBinArrayBitmapExtension(\n lbPair: PublicKey,\n programId: PublicKey\n) {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"bitmap\"), lbPair.toBytes()],\n programId\n );\n}\n\nexport function binIdToBinArrayIndex(binId: BN): BN {\n const { div: idx, mod } = binId.divmod(MAX_BIN_ARRAY_SIZE);\n return binId.isNeg() && !mod.isZero() ? idx.sub(new BN(1)) : idx;\n}\n\nexport function getBinArrayLowerUpperBinId(binArrayIndex: BN) {\n const lowerBinId = binArrayIndex.mul(MAX_BIN_ARRAY_SIZE);\n const upperBinId = lowerBinId.add(MAX_BIN_ARRAY_SIZE).sub(new BN(1));\n\n return [lowerBinId, upperBinId];\n}\n\nexport function isBinIdWithinBinArray(activeId: BN, binArrayIndex: BN) {\n const [lowerBinId, upperBinId] = getBinArrayLowerUpperBinId(binArrayIndex);\n return activeId.gte(lowerBinId) && activeId.lte(upperBinId);\n}\n\nexport function getBinFromBinArray(binId: number, binArray: BinArray): Bin {\n const [lowerBinId, upperBinId] = getBinArrayLowerUpperBinId(binArray.index);\n\n let index = 0;\n if (binId > 0) {\n index = binId - lowerBinId.toNumber();\n } else {\n const delta = upperBinId.toNumber() - binId;\n index = MAX_BIN_ARRAY_SIZE.toNumber() - delta - 1;\n }\n\n return binArray.bins[index];\n}\n\nexport function findNextBinArrayIndexWithLiquidity(\n swapForY: boolean,\n activeId: BN,\n lbPairState: LbPairAccount,\n binArrayBitmapExtension: BinArrayBitmapExtension | null\n): BN | null {\n const [lowerBinArrayIndex, upperBinArrayIndex] = internalBitmapRange();\n let startBinArrayIndex = binIdToBinArrayIndex(activeId);\n\n while (true) {\n if (isOverflowDefaultBinArrayBitmap(startBinArrayIndex)) {\n if (binArrayBitmapExtension == null) {\n return null;\n }\n // When bin array index is negative, the MSB is smallest bin array index.\n\n const [minBinArrayIndex, maxBinArrayIndex] = extensionBitmapRange();\n\n if (startBinArrayIndex.isNeg()) {\n if (swapForY) {\n const binArrayIndex = findSetBit(\n startBinArrayIndex.toNumber(),\n minBinArrayIndex.toNumber(),\n binArrayBitmapExtension\n );\n\n if (binArrayIndex != null) {\n return new BN(binArrayIndex);\n } else {\n return null;\n }\n } else {\n const binArrayIndex = findSetBit(\n startBinArrayIndex.toNumber(),\n BIN_ARRAY_BITMAP_SIZE.neg().sub(new BN(1)).toNumber(),\n binArrayBitmapExtension\n );\n\n if (binArrayIndex != null) {\n return new BN(binArrayIndex);\n } else {\n // Move to internal bitmap\n startBinArrayIndex = BIN_ARRAY_BITMAP_SIZE.neg();\n }\n }\n } else {\n if (swapForY) {\n const binArrayIndex = findSetBit(\n startBinArrayIndex.toNumber(),\n BIN_ARRAY_BITMAP_SIZE.toNumber(),\n binArrayBitmapExtension\n );\n\n if (binArrayIndex != null) {\n return new BN(binArrayIndex);\n } else {\n // Move to internal bitmap\n startBinArrayIndex = BIN_ARRAY_BITMAP_SIZE;\n }\n } else {\n const binArrayIndex = findSetBit(\n startBinArrayIndex.toNumber(),\n maxBinArrayIndex.toNumber(),\n binArrayBitmapExtension\n );\n\n if (binArrayIndex != null) {\n return new BN(binArrayIndex);\n } else {\n return null;\n }\n }\n }\n } else {\n // Internal bitmap\n const bitmapType = BitmapType.U1024;\n const bitmapDetail = bitmapTypeDetail(bitmapType);\n const offset = startBinArrayIndex.add(BIN_ARRAY_BITMAP_SIZE);\n\n const bitmap = buildBitmapFromU64Arrays(\n lbPairState.binArrayBitmap,\n bitmapType\n );\n\n if (swapForY) {\n const upperBitRange = new BN(bitmapDetail.bits - 1).sub(offset);\n const croppedBitmap = bitmap.shln(upperBitRange.toNumber());\n\n const msb = mostSignificantBit(croppedBitmap, bitmapDetail.bits);\n\n if (msb != null) {\n return startBinArrayIndex.sub(new BN(msb));\n } else {\n // Move to extension\n startBinArrayIndex = lowerBinArrayIndex.sub(new BN(1));\n }\n } else {\n const lowerBitRange = offset;\n const croppedBitmap = bitmap.shrn(lowerBitRange.toNumber());\n const lsb = leastSignificantBit(croppedBitmap, bitmapDetail.bits);\n if (lsb != null) {\n return startBinArrayIndex.add(new BN(lsb));\n } else {\n // Move to extension\n startBinArrayIndex = upperBinArrayIndex.add(new BN(1));\n }\n }\n }\n }\n}\n\nexport function findNextBinArrayWithLiquidity(\n swapForY: boolean,\n activeBinId: BN,\n lbPairState: LbPairAccount,\n binArrayBitmapExtension: BinArrayBitmapExtension,\n binArrays: BinArrayAccount[]\n): BinArrayAccount | null {\n const nearestBinArrayIndexWithLiquidity = findNextBinArrayIndexWithLiquidity(\n swapForY,\n activeBinId,\n lbPairState,\n binArrayBitmapExtension\n );\n\n if (nearestBinArrayIndexWithLiquidity == null) {\n return null;\n }\n\n const binArrayAccount = binArrays.find((ba) =>\n ba.account.index.eq(nearestBinArrayIndexWithLiquidity)\n );\n if (!binArrayAccount) {\n // Critical bug\n throw new Error(\"Bin array not found based on indexing\");\n }\n\n return binArrayAccount;\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport gaussian, { Gaussian } from \"gaussian\";\nimport { BASIS_POINT_MAX } from \"../constants\";\nimport {\n StrategyParameters,\n StrategyType,\n parabolicParameter,\n spotParameter,\n} from \"../types\";\nimport Decimal from \"decimal.js\";\n\nexport function getPriceOfBinByBinId(binId: number, binStep: number): Decimal {\n const binStepNum = new Decimal(binStep).div(new Decimal(BASIS_POINT_MAX));\n return new Decimal(1).add(new Decimal(binStepNum)).pow(new Decimal(binId));\n}\n\n/// Build a gaussian distribution from the bins, with active bin as the mean.\nfunction buildGaussianFromBins(activeBin: number, binIds: number[]) {\n const smallestBin = Math.min(...binIds);\n const largestBin = Math.max(...binIds);\n\n // Define the Gaussian distribution. The mean will be active bin when active bin is within the bin ids. Else, use left or right most bin id as the mean.\n let mean = 0;\n const isAroundActiveBin = binIds.find((bid) => bid == activeBin);\n // The liquidity will be distributed surrounding active bin\n if (isAroundActiveBin) {\n mean = activeBin;\n }\n // The liquidity will be distributed to the right side of the active bin.\n else if (activeBin < smallestBin) {\n mean = smallestBin;\n }\n // The liquidity will be distributed to the left side of the active bin.\n else {\n mean = largestBin;\n }\n\n const TWO_STANDARD_DEVIATION = 4;\n const stdDev = (largestBin - smallestBin) / TWO_STANDARD_DEVIATION;\n const variance = Math.max(stdDev ** 2, 1);\n\n return gaussian(mean, variance);\n}\n\n/// Find the probability of the bin id over the gaussian. The probability ranged from 0 - 1 and will be used as liquidity allocation for that particular bin.\nfunction generateBinLiquidityAllocation(\n gaussian: Gaussian,\n binIds: number[],\n invert: boolean\n) {\n const allocations = binIds.map((bid) =>\n invert ? 1 / gaussian.pdf(bid) : gaussian.pdf(bid)\n );\n const totalAllocations = allocations.reduce((acc, v) => acc + v, 0);\n // Gaussian impossible to cover 100%, normalized it to have total of 100%\n return allocations.map((a) => a / totalAllocations);\n}\n\n/// Convert liquidity allocation from 0..1 to 0..10000 bps unit. The sum of allocations must be 1. Return BPS and the loss after conversion.\nfunction computeAllocationBps(allocations: number[]): {\n bpsAllocations: BN[];\n pLoss: BN;\n} {\n let totalAllocation = new BN(0);\n const bpsAllocations: BN[] = [];\n\n for (const allocation of allocations) {\n const allocBps = new BN(allocation * 10000);\n bpsAllocations.push(allocBps);\n totalAllocation = totalAllocation.add(allocBps);\n }\n\n const pLoss = new BN(10000).sub(totalAllocation);\n return {\n bpsAllocations,\n pLoss,\n };\n}\n/** private */\n\nexport function toWeightDistribution(\n amountX: BN,\n amountY: BN,\n distributions: {\n binId: number;\n xAmountBpsOfTotal: BN;\n yAmountBpsOfTotal: BN;\n }[],\n binStep: number\n): { binId: number; weight: number }[] {\n // get all quote amount\n let totalQuote = new BN(0);\n const precision = 1_000_000_000_000;\n const quoteDistributions = distributions.map((bin) => {\n const price = new BN(\n getPriceOfBinByBinId(bin.binId, binStep).mul(precision).floor().toString()\n );\n const quoteValue = amountX\n .mul(new BN(bin.xAmountBpsOfTotal))\n .mul(new BN(price))\n .div(new BN(BASIS_POINT_MAX))\n .div(new BN(precision));\n const quoteAmount = quoteValue.add(\n amountY.mul(new BN(bin.yAmountBpsOfTotal)).div(new BN(BASIS_POINT_MAX))\n );\n totalQuote = totalQuote.add(quoteAmount);\n return {\n binId: bin.binId,\n quoteAmount,\n };\n });\n\n if (totalQuote.eq(new BN(0))) {\n return [];\n }\n\n const distributionWeights = quoteDistributions\n .map((bin) => {\n const weight = Math.floor(\n bin.quoteAmount.mul(new BN(65535)).div(totalQuote).toNumber()\n );\n return {\n binId: bin.binId,\n weight,\n };\n })\n .filter((item) => item.weight > 0);\n\n return distributionWeights;\n}\n\nexport function calculateSpotDistribution(\n activeBin: number,\n binIds: number[]\n): { binId: number; xAmountBpsOfTotal: BN; yAmountBpsOfTotal: BN }[] {\n if (!binIds.includes(activeBin)) {\n const { div: dist, mod: rem } = new BN(10_000).divmod(\n new BN(binIds.length)\n );\n const loss = rem.isZero() ? new BN(0) : new BN(1);\n\n const distributions =\n binIds[0] < activeBin\n ? binIds.map((binId) => ({\n binId,\n xAmountBpsOfTotal: new BN(0),\n yAmountBpsOfTotal: dist,\n }))\n : binIds.map((binId) => ({\n binId,\n xAmountBpsOfTotal: dist,\n yAmountBpsOfTotal: new BN(0),\n }));\n\n // Add the loss to the left most bin\n if (binIds[0] < activeBin) {\n distributions[0].yAmountBpsOfTotal.add(loss);\n }\n // Add the loss to the right most bin\n else {\n distributions[binIds.length - 1].xAmountBpsOfTotal.add(loss);\n }\n\n return distributions;\n }\n\n const binYCount = binIds.filter((binId) => binId < activeBin).length;\n const binXCount = binIds.filter((binId) => binId > activeBin).length;\n\n const totalYBinCapacity = binYCount + 0.5;\n const totalXBinCapacity = binXCount + 0.5;\n\n const yBinBps = new BN(10_000 / totalYBinCapacity);\n const yActiveBinBps = new BN(10_000).sub(yBinBps.mul(new BN(binYCount)));\n\n const xBinBps = new BN(10_000 / totalXBinCapacity);\n const xActiveBinBps = new BN(10_000).sub(xBinBps.mul(new BN(binXCount)));\n\n return binIds.map((binId) => {\n const isYBin = binId < activeBin;\n const isXBin = binId > activeBin;\n const isActiveBin = binId === activeBin;\n\n if (isYBin) {\n return {\n binId,\n xAmountBpsOfTotal: new BN(0),\n yAmountBpsOfTotal: yBinBps,\n };\n }\n\n if (isXBin) {\n return {\n binId,\n xAmountBpsOfTotal: xBinBps,\n yAmountBpsOfTotal: new BN(0),\n };\n }\n\n if (isActiveBin) {\n return {\n binId,\n xAmountBpsOfTotal: xActiveBinBps,\n yAmountBpsOfTotal: yActiveBinBps,\n };\n }\n });\n}\n\nexport function calculateBidAskDistribution(\n activeBin: number,\n binIds: number[]\n): {\n binId: number;\n xAmountBpsOfTotal: BN;\n yAmountBpsOfTotal: BN;\n}[] {\n const smallestBin = Math.min(...binIds);\n const largestBin = Math.max(...binIds);\n\n const rightOnly = activeBin < smallestBin;\n const leftOnly = activeBin > largestBin;\n\n const gaussian = buildGaussianFromBins(activeBin, binIds);\n const allocations = generateBinLiquidityAllocation(gaussian, binIds, true);\n\n // To the right of active bin, liquidity distribution consists of only token X.\n if (rightOnly) {\n const { bpsAllocations, pLoss } = computeAllocationBps(allocations);\n const binDistributions = binIds.map((bid, idx) => ({\n binId: bid,\n xAmountBpsOfTotal: bpsAllocations[idx],\n yAmountBpsOfTotal: new BN(0),\n }));\n const idx = binDistributions.length - 1;\n binDistributions[idx].xAmountBpsOfTotal =\n binDistributions[idx].xAmountBpsOfTotal.add(pLoss);\n return binDistributions;\n }\n\n // To the left of active bin, liquidity distribution consists of only token Y.\n if (leftOnly) {\n const { bpsAllocations, pLoss } = computeAllocationBps(allocations);\n const binDistributions = binIds.map((bid, idx) => ({\n binId: bid,\n xAmountBpsOfTotal: new BN(0),\n yAmountBpsOfTotal: bpsAllocations[idx],\n }));\n binDistributions[0].yAmountBpsOfTotal =\n binDistributions[0].yAmountBpsOfTotal.add(pLoss);\n return binDistributions;\n }\n\n // Find total X, and Y bps allocations for normalization.\n const [totalXAllocation, totalYAllocation] = allocations.reduce(\n ([xAcc, yAcc], allocation, idx) => {\n const binId = binIds[idx];\n if (binId > activeBin) {\n return [xAcc + allocation, yAcc];\n } else if (binId < activeBin) {\n return [xAcc, yAcc + allocation];\n } else {\n const half = allocation / 2;\n return [xAcc + half, yAcc + half];\n }\n },\n [0, 0]\n );\n\n // Normalize and convert to BPS\n const [normXAllocations, normYAllocations] = allocations.reduce<[BN[], BN[]]>(\n ([xAllocations, yAllocations], allocation, idx) => {\n const binId = binIds[idx];\n if (binId > activeBin) {\n const distX = new BN((allocation * 10000) / totalXAllocation);\n xAllocations.push(distX);\n }\n if (binId < activeBin) {\n const distY = new BN((allocation * 10000) / totalYAllocation);\n yAllocations.push(distY);\n }\n if (binId == activeBin) {\n const half = allocation / 2;\n const distX = new BN((half * 10000) / totalXAllocation);\n const distY = new BN((half * 10000) / totalYAllocation);\n xAllocations.push(distX);\n yAllocations.push(distY);\n }\n return [xAllocations, yAllocations];\n },\n [[], []]\n );\n\n const totalXNormAllocations = normXAllocations.reduce(\n (acc, v) => acc.add(v),\n new BN(0)\n );\n const totalYNormAllocations = normYAllocations.reduce(\n (acc, v) => acc.add(v),\n new BN(0)\n );\n\n const xPLoss = new BN(10000).sub(totalXNormAllocations);\n const yPLoss = new BN(10000).sub(totalYNormAllocations);\n\n const distributions = binIds.map((binId) => {\n if (binId === activeBin) {\n return {\n binId,\n xAmountBpsOfTotal: normXAllocations.shift(),\n yAmountBpsOfTotal: normYAllocations.shift(),\n };\n }\n\n if (binId > activeBin) {\n return {\n binId,\n xAmountBpsOfTotal: normXAllocations.shift(),\n yAmountBpsOfTotal: new BN(0),\n };\n }\n\n if (binId < activeBin) {\n return {\n binId,\n xAmountBpsOfTotal: new BN(0),\n yAmountBpsOfTotal: normYAllocations.shift(),\n };\n }\n });\n\n if (!yPLoss.isZero()) {\n distributions[0].yAmountBpsOfTotal =\n distributions[0].yAmountBpsOfTotal.add(yPLoss);\n }\n\n if (!xPLoss.isZero()) {\n const last = distributions.length - 1;\n distributions[last].xAmountBpsOfTotal =\n distributions[last].xAmountBpsOfTotal.add(xPLoss);\n }\n\n return distributions;\n}\n\nexport function calculateNormalDistribution(\n activeBin: number,\n binIds: number[]\n): {\n binId: number;\n xAmountBpsOfTotal: BN;\n yAmountBpsOfTotal: BN;\n}[] {\n const smallestBin = Math.min(...binIds);\n const largestBin = Math.max(...binIds);\n\n const rightOnly = activeBin < smallestBin;\n const leftOnly = activeBin > largestBin;\n\n const gaussian = buildGaussianFromBins(activeBin, binIds);\n const allocations = generateBinLiquidityAllocation(gaussian, binIds, false);\n\n // To the right of active bin, liquidity distribution consists of only token X.\n if (rightOnly) {\n const { bpsAllocations, pLoss } = computeAllocationBps(allocations);\n const binDistributions = binIds.map((bid, idx) => ({\n binId: bid,\n xAmountBpsOfTotal: bpsAllocations[idx],\n yAmountBpsOfTotal: new BN(0),\n }));\n // When contains only X token, bin closest to active bin will be index 0.\n // Add back the precision loss\n binDistributions[0].xAmountBpsOfTotal =\n binDistributions[0].xAmountBpsOfTotal.add(pLoss);\n return binDistributions;\n }\n\n // To the left of active bin, liquidity distribution consists of only token Y.\n if (leftOnly) {\n const { bpsAllocations, pLoss } = computeAllocationBps(allocations);\n const binDistributions = binIds.map((bid, idx) => ({\n binId: bid,\n xAmountBpsOfTotal: new BN(0),\n yAmountBpsOfTotal: bpsAllocations[idx],\n }));\n // When contains only Y token, bin closest to active bin will be last index.\n // Add back the precision loss\n const idx = binDistributions.length - 1;\n binDistributions[idx].yAmountBpsOfTotal =\n binDistributions[idx].yAmountBpsOfTotal.add(pLoss);\n return binDistributions;\n }\n\n // The liquidity distribution consists of token X and Y. Allocations from gaussian only says how much liquidity percentage per bin over the full bin range.\n // Normalize liquidity allocation percentage into X - 100%, Y - 100%.\n\n // Find total X, and Y bps allocations for normalization.\n const [totalXAllocation, totalYAllocation] = allocations.reduce(\n ([xAcc, yAcc], allocation, idx) => {\n const binId = binIds[idx];\n if (binId > activeBin) {\n return [xAcc + allocation, yAcc];\n } else if (binId < activeBin) {\n return [xAcc, yAcc + allocation];\n } else {\n const half = allocation / 2;\n return [xAcc + half, yAcc + half];\n }\n },\n [0, 0]\n );\n\n // Normalize and convert to BPS\n const [normXAllocations, normYAllocations] = allocations.reduce(\n ([xAllocations, yAllocations], allocation, idx) => {\n const binId = binIds[idx];\n if (binId > activeBin) {\n const distX = new BN((allocation * 10000) / totalXAllocation);\n xAllocations.push(distX);\n }\n if (binId < activeBin) {\n const distY = new BN((allocation * 10000) / totalYAllocation);\n yAllocations.push(distY);\n }\n return [xAllocations, yAllocations];\n },\n [[], []]\n );\n\n const normXActiveBinAllocation = normXAllocations.reduce(\n (maxBps, bps) => maxBps.sub(bps),\n new BN(10_000)\n );\n const normYActiveBinAllocation = normYAllocations.reduce(\n (maxBps, bps) => maxBps.sub(bps),\n new BN(10_000)\n );\n\n return binIds.map((binId) => {\n if (binId === activeBin) {\n return {\n binId,\n xAmountBpsOfTotal: normXActiveBinAllocation,\n yAmountBpsOfTotal: normYActiveBinAllocation,\n };\n }\n\n if (binId > activeBin) {\n return {\n binId,\n xAmountBpsOfTotal: normXAllocations.shift(),\n yAmountBpsOfTotal: new BN(0),\n };\n }\n\n if (binId < activeBin) {\n return {\n binId,\n xAmountBpsOfTotal: new BN(0),\n yAmountBpsOfTotal: normYAllocations.shift(),\n };\n }\n });\n}\n\nexport function fromStrategyParamstoWeightDistribution(\n activeId: number,\n strategyParameters: StrategyParameters\n): { binId: number; weight: number }[] {\n const {\n maxBinId,\n minBinId,\n strategyType,\n aAsk,\n aBid,\n aActiveBin,\n centerBinId,\n weightAsk,\n weightBid,\n weightActiveBin,\n } = strategyParameters;\n // validate firstly\n if (maxBinId < minBinId) {\n throw new Error(\"maxBinId cannot be smaller than minBinId\");\n }\n let distributionWeights: Array<{ binId: number; weight: number }> = [];\n switch (strategyType) {\n case StrategyType.Spot: {\n for (let i = minBinId; i <= maxBinId; i++) {\n if (i < activeId) {\n distributionWeights.push({\n binId: i,\n weight: weightBid,\n });\n }\n if (i > activeId) {\n distributionWeights.push({\n binId: i,\n weight: weightAsk,\n });\n }\n if (i == activeId) {\n distributionWeights.push({\n binId: i,\n weight: weightActiveBin,\n });\n }\n }\n break;\n }\n case StrategyType.Curve: {\n if (aAsk >= 0 || aAsk < -32768) {\n throw new Error(\"aAsk is out of range\");\n }\n if (aBid >= 0 || aBid < -32768) {\n throw new Error(\"aBid is out of range\");\n }\n const midBinId = centerBinId;\n const binWidth = maxBinId - midBinId;\n const b = binWidth * binWidth;\n for (let i = minBinId; i <= maxBinId; i++) {\n let binDelta = i - midBinId;\n let a = aActiveBin;\n if (i < activeId) {\n a = aBid;\n } else if (i > activeId) {\n a = aAsk;\n }\n distributionWeights.push({\n binId: i,\n weight: Math.max(\n Math.floor(a * binDelta * binDelta - a * b) / 15000,\n 0\n ),\n });\n }\n break;\n }\n case StrategyType.BidAsk: {\n if (aAsk <= 0 || aAsk > 32768) {\n throw new Error(\"aAsk is out of range\");\n }\n if (aBid <= 0 || aBid > 32768) {\n throw new Error(\"aBid is out of range\");\n }\n const midBinId = centerBinId;\n for (let i = minBinId; i <= maxBinId; i++) {\n let binDelta = i - midBinId;\n let a = aActiveBin;\n if (i < activeId) {\n a = aBid;\n } else if (i > activeId) {\n a = aAsk;\n }\n distributionWeights.push({\n binId: i,\n weight: Math.max(Math.floor(a * binDelta * binDelta) / 15000, 0),\n });\n }\n break;\n }\n }\n return distributionWeights;\n}\n\n// this this function to convert correct type for program\nexport function toStrategyParameters(strategyParameters: StrategyParameters) {\n const {\n maxBinId,\n minBinId,\n strategyType,\n aAsk,\n aBid,\n aActiveBin,\n centerBinId,\n weightAsk,\n weightBid,\n weightActiveBin,\n } = strategyParameters;\n switch (strategyType) {\n case StrategyType.Spot: {\n const data = Buffer.alloc(spotParameter.span);\n spotParameter.encode(\n {\n weightAsk,\n weightBid,\n weightActiveBin,\n },\n data\n );\n let parameters = Buffer.concat([\n data,\n Buffer.from(new Array<number>(58).fill(0)),\n ]);\n return {\n minBinId,\n maxBinId,\n strategyType: { spot: {} },\n parameteres: parameters.toJSON().data,\n };\n }\n case StrategyType.Curve: {\n const data = Buffer.alloc(parabolicParameter.span);\n parabolicParameter.encode(\n {\n aAsk,\n aBid,\n aActiveBin,\n centerBinId,\n },\n data\n );\n let parameters = Buffer.concat([\n data,\n Buffer.from(new Array<number>(54).fill(0)),\n ]);\n return {\n minBinId,\n maxBinId,\n strategyType: { curve: {} },\n parameteres: parameters.toJSON().data,\n };\n }\n case StrategyType.BidAsk:\n const data = Buffer.alloc(parabolicParameter.span);\n parabolicParameter.encode(\n {\n aAsk,\n aBid,\n aActiveBin,\n centerBinId,\n },\n data\n );\n let parameters = Buffer.concat([\n data,\n Buffer.from(new Array<number>(54).fill(0)),\n ]);\n return {\n minBinId,\n maxBinId,\n strategyType: { bidAsk: {} },\n parameteres: parameters.toJSON().data,\n };\n }\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport {\n BASIS_POINT_MAX,\n FEE_PRECISION,\n MAX_FEE_RATE,\n SCALE_OFFSET,\n} from \"../constants\";\nimport { Bin, sParameters, vParameters } from \"../types\";\nimport { Rounding, mulShr, shlDiv } from \"./math\";\nimport { getOutAmount } from \".\";\n\nexport function getBaseFee(binStep: number, sParameter: sParameters) {\n return new BN(sParameter.baseFactor).mul(new BN(binStep)).mul(new BN(10));\n}\n\nexport function getVariableFee(\n binStep: number,\n sParameter: sParameters,\n vParameter: vParameters\n) {\n if (sParameter.variableFeeControl > 0) {\n const square_vfa_bin = new BN(vParameter.volatilityAccumulator)\n .mul(new BN(binStep))\n .pow(new BN(2));\n const v_fee = new BN(sParameter.variableFeeControl).mul(square_vfa_bin);\n\n return v_fee.add(new BN(99_999_999_999)).div(new BN(100_000_000_000));\n }\n return new BN(0);\n}\n\nexport function getTotalFee(\n binStep: number,\n sParameter: sParameters,\n vParameter: vParameters\n) {\n const totalFee = getBaseFee(binStep, sParameter).add(\n getVariableFee(binStep, sParameter, vParameter)\n );\n return totalFee.gt(MAX_FEE_RATE) ? MAX_FEE_RATE : totalFee;\n}\n\nexport function computeFee(\n binStep: number,\n sParameter: sParameters,\n vParameter: vParameters,\n inAmount: BN\n) {\n const totalFee = getTotalFee(binStep, sParameter, vParameter);\n const denominator = FEE_PRECISION.sub(totalFee);\n\n return inAmount\n .mul(totalFee)\n .add(denominator)\n .sub(new BN(1))\n .div(denominator);\n}\n\nexport function computeFeeFromAmount(\n binStep: number,\n sParameter: sParameters,\n vParameter: vParameters,\n inAmountWithFees: BN\n) {\n const totalFee = getTotalFee(binStep, sParameter, vParameter);\n return inAmountWithFees\n .mul(totalFee)\n .add(FEE_PRECISION.sub(new BN(1)))\n .div(FEE_PRECISION);\n}\n\nexport function computeProtocolFee(feeAmount: BN, sParameter: sParameters) {\n return feeAmount\n .mul(new BN(sParameter.protocolShare))\n .div(new BN(BASIS_POINT_MAX));\n}\n\nexport function swapQuoteAtBin(\n bin: Bin,\n binStep: number,\n sParameter: sParameters,\n vParameter: vParameters,\n inAmount: BN,\n swapForY: boolean\n): {\n amountIn: BN;\n amountOut: BN;\n fee: BN;\n protocolFee: BN;\n} {\n if (swapForY && bin.amountY.isZero()) {\n return {\n amountIn: new BN(0),\n amountOut: new BN(0),\n fee: new BN(0),\n protocolFee: new BN(0),\n };\n }\n\n if (!swapForY && bin.amountX.isZero()) {\n return {\n amountIn: new BN(0),\n amountOut: new BN(0),\n fee: new BN(0),\n protocolFee: new BN(0),\n };\n }\n\n let maxAmountOut: BN;\n let maxAmountIn: BN;\n\n if (swapForY) {\n maxAmountOut = bin.amountY;\n maxAmountIn = shlDiv(bin.amountY, bin.price, SCALE_OFFSET, Rounding.Up);\n } else {\n maxAmountOut = bin.amountX;\n maxAmountIn = mulShr(bin.amountX, bin.price, SCALE_OFFSET, Rounding.Up);\n }\n\n const maxFee = computeFee(binStep, sParameter, vParameter, maxAmountIn);\n maxAmountIn = maxAmountIn.add(maxFee);\n\n let amountInWithFees: BN;\n let amountOut: BN;\n let fee: BN;\n let protocolFee: BN;\n\n if (inAmount.gt(maxAmountIn)) {\n amountInWithFees = maxAmountIn;\n amountOut = maxAmountOut;\n fee = maxFee;\n protocolFee = computeProtocolFee(maxFee, sParameter);\n } else {\n fee = computeFeeFromAmount(binStep, sParameter, vParameter, inAmount);\n const amountInAfterFee = inAmount.sub(fee);\n const computedOutAmount = getOutAmount(bin, amountInAfterFee, swapForY);\n\n amountOut = computedOutAmount.gt(maxAmountOut)\n ? maxAmountOut\n : computedOutAmount;\n protocolFee = computeProtocolFee(fee, sParameter);\n amountInWithFees = inAmount;\n }\n\n return {\n amountIn: amountInWithFees,\n amountOut,\n fee,\n protocolFee,\n };\n}\n","import { IDL } from './idl';\nimport { AnchorError, ProgramError } from '@coral-xyz/anchor';\nimport { LBCLMM_PROGRAM_IDS } from './constants';\n\ntype Codes = (typeof IDL.errors)[number]['code'];\n\nclass DLMMError extends Error {\n public errorCode: number;\n public errorName: string;\n public errorMessage: string;\n\n constructor(error: object | Codes) {\n let _errorCode = 0;\n let _errorName = 'Something went wrong';\n let _errorMessage = 'Something went wrong';\n\n if (error instanceof Error) {\n const anchorError = AnchorError.parse(JSON.parse(JSON.stringify(error)).logs as string[]);\n\n if (anchorError?.program.toBase58() === LBCLMM_PROGRAM_IDS['mainnet-beta']) {\n _errorCode = anchorError.error.errorCode.number;\n _errorName = anchorError.error.errorCode.code;\n _errorMessage = anchorError.error.errorMessage;\n }\n } else {\n const idlError = IDL.errors.find((err) => err.code === error);\n\n if (idlError) {\n _errorCode = idlError.code;\n _errorName = idlError.name;\n _errorMessage = idlError.msg;\n }\n }\n\n super(_errorMessage);\n\n this.errorCode = _errorCode;\n this.errorName = _errorName;\n this.errorMessage = _errorMessage;\n }\n}\n\nexport default DLMMError;\n","import { DLMM } from \"./dlmm\";\n\nexport default DLMM;\nexport * from \"./dlmm/helpers\";\nexport * from \"./dlmm/types\";\nexport * from \"./dlmm/error\";\nexport * from \"./dlmm/constants\";\n"],"mappings":"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CR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AA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","names":["PublicKey","SystemProgram","Network","PositionVersion","StrategyType","BitmapType","BN","BN","BN","PublicKey","BN","PublicKey","BN","PublicKey","BN","gaussian","BN","idx","data","parameters","BN","BN","Decimal","NATIVE_MINT","TOKEN_PROGRAM_ID","BN","PublicKey","SystemProgram","TOKEN_PROGRAM_ID","Decimal","sParameters","NATIVE_MINT","addLiqTx","blockhash","lastValidBlockHeight","lowerBinArrayIdx","lowerBinArray","upperBinArray","delta"]}