@meteora-ag/dlmm 1.8.0-rc.1 → 1.9.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +7 -3
- package/dist/index.js +1342 -1336
- package/dist/index.js.map +1 -1
- package/dist/{index.cjs → index.mjs} +1119 -1259
- package/dist/index.mjs.map +1 -0
- package/package.json +1 -2
- package/dist/index.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dlmm/index.ts","../src/dlmm/constants/index.ts","../src/dlmm/dlmm.json","../src/dlmm/error.ts","../src/dlmm/helpers/index.ts","../src/dlmm/types/index.ts","../src/dlmm/helpers/binArray.ts","../src/dlmm/helpers/math.ts","../src/dlmm/helpers/u64xu64_math.ts","../src/dlmm/helpers/weight.ts","../src/dlmm/helpers/weightToAmounts.ts","../src/dlmm/helpers/token_2022.ts","../src/dlmm/helpers/derive.ts","../src/dlmm/helpers/computeUnit.ts","../src/dlmm/helpers/positions/index.ts","../src/dlmm/helpers/positions/wrapper.ts","../src/dlmm/helpers/rebalance/rebalancePosition.ts","../src/dlmm/helpers/fee.ts","../src/dlmm/helpers/rebalance/liquidity_strategy/index.ts","../src/dlmm/helpers/rebalance/liquidity_strategy/bidAsk.ts","../src/dlmm/helpers/rebalance/liquidity_strategy/curve.ts","../src/dlmm/helpers/rebalance/liquidity_strategy/spot.ts","../src/dlmm/helpers/lbPair.ts","../src/dlmm/helpers/strategy.ts","../src/dlmm/helpers/accountFilters.ts","../src/dlmm/helpers/rebalance/strategy/balanced.ts","../src/dlmm/helpers/rebalance/strategy/index.ts","../src/index.ts"],"sourcesContent":["import { BN } from \"@coral-xyz/anchor\";\nimport {\n AccountLayout,\n Mint,\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n createTransferCheckedInstruction,\n getAssociatedTokenAddressSync,\n unpackAccount,\n unpackMint,\n} from \"@solana/spl-token\";\nimport {\n AccountMeta,\n ComputeBudgetInstruction,\n ComputeBudgetProgram,\n Connection,\n Keypair,\n LAMPORTS_PER_SOL,\n PublicKey,\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n SystemProgram,\n Transaction,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport Decimal from \"decimal.js\";\nimport {\n ALT_ADDRESS,\n BASIS_POINT_MAX,\n BIN_ARRAY_BITMAP_FEE,\n BIN_ARRAY_BITMAP_FEE_BN,\n BIN_ARRAY_FEE,\n BIN_ARRAY_FEE_BN,\n DEFAULT_BIN_PER_POSITION,\n FEE_PRECISION,\n MAX_ACTIVE_BIN_SLIPPAGE,\n MAX_BINS_PER_POSITION,\n MAX_BIN_ARRAY_SIZE,\n MAX_BIN_LENGTH_ALLOWED_IN_ONE_TX,\n MAX_CLAIM_ALL_ALLOWED,\n MAX_EXTRA_BIN_ARRAYS,\n MAX_FEE_RATE,\n MAX_RESIZE_LENGTH,\n POSITION_FEE,\n POSITION_FEE_BN,\n POSITION_MAX_LENGTH,\n PRECISION,\n SCALE_OFFSET,\n TOKEN_ACCOUNT_FEE_BN,\n U64_MAX,\n} from \"./constants\";\nimport { DlmmSdkError } from \"./error\";\nimport {\n Opt,\n binIdToBinArrayIndex,\n capSlippagePercentage,\n chunkDepositWithRebalanceEndpoint,\n chunkedGetMultipleAccountInfos,\n chunks,\n computeFeeFromAmount,\n createProgram,\n decodeAccount,\n deriveBinArray,\n deriveBinArrayBitmapExtension,\n deriveCustomizablePermissionlessLbPair,\n deriveLbPair,\n deriveLbPair2,\n deriveLbPairWithPresetParamWithIndexKey,\n deriveOracle,\n derivePosition,\n deriveReserve,\n deriveTokenBadge,\n enumerateBins,\n findNextBinArrayIndexWithLiquidity,\n findNextBinArrayWithLiquidity,\n getAndCapMaxActiveBinSlippage,\n getBinArrayLowerUpperBinId,\n getBinCount,\n getBinFromBinArray,\n getEstimatedComputeUnitIxWithBuffer,\n getOrCreateATAInstruction,\n getOutAmount,\n getPositionCountByBinCount,\n getPriceOfBinByBinId,\n getSlippageMaxAmount,\n getSlippageMinAmount,\n getTokenProgramId,\n getTotalFee,\n isBinIdWithinBinArray,\n isOverflowDefaultBinArrayBitmap,\n range,\n swapExactInQuoteAtBin,\n swapExactOutQuoteAtBin,\n toStrategyParameters,\n toWeightDistribution,\n unwrapSOLInstruction,\n wrapSOLInstruction,\n} from \"./helpers\";\nimport {\n binArrayLbPairFilter,\n positionLbPairFilter,\n positionOwnerFilter,\n positionV2Filter,\n presetParameter2BaseFactorFilter,\n presetParameter2BaseFeePowerFactor,\n presetParameter2BinStepFilter,\n} from \"./helpers/accountFilters\";\nimport {\n DEFAULT_ADD_LIQUIDITY_CU,\n DEFAULT_INIT_BIN_ARRAY_CU,\n DEFAULT_INIT_POSITION_CU,\n getDefaultExtendPositionCU,\n getSimulationComputeUnits,\n} from \"./helpers/computeUnit\";\nimport {\n Rounding,\n compressBinAmount,\n computeBaseFactorFromFeeBps,\n distributeAmountToCompressedBinsByRatio,\n findOptimumDecompressMultiplier,\n generateAmountForBinRange,\n getPositionCount,\n mulShr,\n} from \"./helpers/math\";\nimport {\n IPosition,\n chunkBinRange,\n getBinArrayAccountMetasCoverage,\n getBinArrayIndexesCoverage,\n getExtendedPositionBinCount,\n getPositionExpandRentExemption,\n getPositionLowerUpperBinIdWithLiquidity,\n isPositionNoFee,\n isPositionNoReward,\n wrapPosition,\n} from \"./helpers/positions\";\nimport {\n RebalancePosition,\n RebalanceWithDeposit,\n RebalanceWithWithdraw,\n buildLiquidityStrategyParameters,\n getLiquidityStrategyParameterBuilder,\n getRebalanceBinArrayIndexesAndBitmapCoverage,\n} from \"./helpers/rebalance\";\nimport { RebalanceStrategyBuilder } from \"./helpers/rebalance/strategy\";\nimport { BalancedStrategyBuilder } from \"./helpers/rebalance/strategy/balanced\";\nimport {\n calculateTransferFeeExcludedAmount,\n calculateTransferFeeIncludedAmount,\n getExtraAccountMetasForTransferHook,\n getMultipleMintsExtraAccountMetasForTransferHook,\n} from \"./helpers/token_2022\";\nimport {\n ActionType,\n ActivationType,\n Bin,\n BinAndAmount,\n BinArray,\n BinArrayAccount,\n BinArrayBitmapExtension,\n BinArrayBitmapExtensionAccount,\n BinLiquidity,\n BinLiquidityDistribution,\n ClmmProgram,\n Clock,\n ClockLayout,\n CompressedBinDepositAmounts,\n EmissionRate,\n FeeInfo,\n InitCustomizablePermissionlessPairIx,\n InitializeMultiplePositionAndAddLiquidityByStrategyResponse,\n InitializeMultiplePositionAndAddLiquidityByStrategyResponse2,\n LbPair,\n LbPairAccount,\n LbPosition,\n LiquidityOneSideParameter,\n LiquidityParameter,\n LiquidityParameterByStrategy,\n LiquidityParameterByWeight,\n MEMO_PROGRAM_ID,\n PairLockInfo,\n PairStatus,\n PairType,\n PositionBinData,\n PositionData,\n PositionInfo,\n PositionV2,\n PositionVersion,\n ProgramStrategyParameter,\n REBALANCE_POSITION_PADDING,\n RebalanceAddLiquidityParam,\n RebalancePositionBinArrayRentalCostQuote,\n RebalancePositionResponse,\n RebalanceRemoveLiquidityParam,\n RemainingAccountsInfoSlice,\n ResizeSide,\n SeedLiquidityResponse,\n SeedLiquiditySingleBinResponse,\n ShrinkMode,\n StrategyParameters,\n StrategyType,\n SwapExactOutParams,\n SwapParams,\n SwapQuote,\n SwapQuoteExactOut,\n SwapWithPriceImpactParams,\n TInitializePositionAndAddLiquidityParams,\n TInitializePositionAndAddLiquidityParamsByStrategy,\n TQuoteCreatePositionParams,\n TokenReserve,\n sParameters,\n vParameters,\n} from \"./types\";\n\nexport class DLMM {\n constructor(\n public pubkey: PublicKey,\n public program: ClmmProgram,\n public lbPair: LbPair,\n public binArrayBitmapExtension: BinArrayBitmapExtensionAccount | null,\n public tokenX: TokenReserve,\n public tokenY: TokenReserve,\n public rewards: Array<TokenReserve | null>,\n public clock: Clock,\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 * `LbPairAccount` objects.\n */\n public static async getLbPairs(\n connection: Connection,\n opt?: Opt\n ): Promise<LbPairAccount[]> {\n const program = createProgram(connection, opt);\n return program.account.lbPair.all();\n }\n\n /**\n * Retrieves the public key of a LB pair if it exists. This function expect the RPC have getProgramAccounts RPC method enabled.\n * @param connection The connection to the Solana cluster.\n * @param tokenX The mint address of token X.\n * @param tokenY The mint address of token Y.\n * @param binStep The bin step of the LB pair.\n * @param baseFactor The base factor of the LB pair.\n * @param baseFeePowerFactor The base fee power factor of the LB pair. It allow small bin step to have bigger fee rate.\n * @param opt Optional parameters.\n * @returns The public key of the LB pair if it exists, or null.\n */\n public static async getPairPubkeyIfExists(\n connection: Connection,\n tokenX: PublicKey,\n tokenY: PublicKey,\n binStep: BN,\n baseFactor: BN,\n baseFeePowerFactor: BN,\n opt?: Opt\n ): Promise<PublicKey | null> {\n const program = createProgram(connection, opt);\n\n const [lbPair2Key] = deriveLbPair2(\n tokenX,\n tokenY,\n binStep,\n baseFactor,\n program.programId\n );\n const account2 = await program.account.lbPair.fetchNullable(lbPair2Key);\n if (\n account2 &&\n account2.parameters.baseFeePowerFactor == baseFeePowerFactor.toNumber()\n ) {\n return lbPair2Key;\n }\n\n const [lbPairKey] = deriveLbPair(\n tokenX,\n tokenY,\n binStep,\n program.programId\n );\n\n const account = await program.account.lbPair.fetchNullable(lbPairKey);\n if (\n account &&\n account.parameters.baseFactor === baseFactor.toNumber() &&\n account.parameters.baseFeePowerFactor === baseFeePowerFactor.toNumber()\n ) {\n return lbPairKey;\n }\n\n const presetParametersWithIndex =\n await program.account.presetParameter2.all([\n presetParameter2BinStepFilter(binStep),\n presetParameter2BaseFactorFilter(baseFactor),\n presetParameter2BaseFeePowerFactor(baseFeePowerFactor),\n ]);\n\n if (presetParametersWithIndex.length > 0) {\n const possibleLbPairKeys = presetParametersWithIndex.map((account) => {\n return deriveLbPairWithPresetParamWithIndexKey(\n account.publicKey,\n tokenX,\n tokenY,\n program.programId\n )[0];\n });\n\n const accounts = await chunkedGetMultipleAccountInfos(\n program.provider.connection,\n possibleLbPairKeys\n );\n\n for (let i = 0; i < possibleLbPairKeys.length; i++) {\n const pairKey = possibleLbPairKeys[i];\n const account = accounts[i];\n\n if (account) {\n return pairKey;\n }\n }\n }\n\n return null;\n }\n\n public static async getCustomizablePermissionlessLbPairIfExists(\n connection: Connection,\n tokenX: PublicKey,\n tokenY: PublicKey,\n opt?: Opt\n ): Promise<PublicKey | null> {\n const program = createProgram(connection, opt);\n\n try {\n const [lpPair] = deriveCustomizablePermissionlessLbPair(\n tokenX,\n tokenY,\n program.programId\n );\n const account = await program.account.lbPair.fetchNullable(lpPair);\n if (account) return lpPair;\n\n return null;\n } catch (error) {\n return null;\n }\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 program = createProgram(connection, opt);\n\n const binArrayBitMapExtensionPubkey = deriveBinArrayBitmapExtension(\n dlmm,\n program.programId\n )[0];\n let accountsToFetch = [\n dlmm,\n binArrayBitMapExtensionPubkey,\n SYSVAR_CLOCK_PUBKEY,\n ];\n\n const accountsInfo = await chunkedGetMultipleAccountInfos(\n connection,\n accountsToFetch\n );\n\n const lbPairAccountInfoBuffer = accountsInfo[0]?.data;\n if (!lbPairAccountInfoBuffer)\n throw new Error(`LB Pair account ${dlmm.toBase58()} not found`);\n\n const lbPairAccInfo = decodeAccount<LbPair>(\n program,\n \"lbPair\",\n lbPairAccountInfoBuffer\n );\n\n const binArrayBitMapAccountInfoBuffer = accountsInfo[1]?.data;\n\n let binArrayBitMapExtensionAccInfo: BinArrayBitmapExtension | null = null;\n if (binArrayBitMapAccountInfoBuffer) {\n binArrayBitMapExtensionAccInfo = decodeAccount(\n program,\n \"binArrayBitmapExtension\",\n binArrayBitMapAccountInfoBuffer\n );\n }\n\n const clockAccountInfoBuffer = accountsInfo[2]?.data;\n if (!clockAccountInfoBuffer) throw new Error(`Clock account not found`);\n const clock = ClockLayout.decode(clockAccountInfoBuffer) as Clock;\n\n accountsToFetch = [\n lbPairAccInfo.reserveX,\n lbPairAccInfo.reserveY,\n lbPairAccInfo.tokenXMint,\n lbPairAccInfo.tokenYMint,\n lbPairAccInfo.rewardInfos[0].vault,\n lbPairAccInfo.rewardInfos[1].vault,\n lbPairAccInfo.rewardInfos[0].mint,\n lbPairAccInfo.rewardInfos[1].mint,\n ];\n\n const [\n reserveXAccount,\n reserveYAccount,\n tokenXMintAccount,\n tokenYMintAccount,\n reward0VaultAccount,\n reward1VaultAccount,\n reward0MintAccount,\n reward1MintAccount,\n ] = await chunkedGetMultipleAccountInfos(\n program.provider.connection,\n accountsToFetch\n );\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(reserveXAccount.data);\n const reserveYBalance = AccountLayout.decode(reserveYAccount.data);\n\n const mintX = unpackMint(\n lbPairAccInfo.tokenXMint,\n tokenXMintAccount,\n tokenXMintAccount.owner\n );\n\n const mintY = unpackMint(\n lbPairAccInfo.tokenYMint,\n tokenYMintAccount,\n tokenYMintAccount.owner\n );\n\n const [\n tokenXTransferHook,\n tokenYTransferHook,\n reward0TransferHook,\n reward1TransferHook,\n ] = await Promise.all([\n getExtraAccountMetasForTransferHook(\n connection,\n lbPairAccInfo.tokenXMint,\n tokenXMintAccount\n ),\n getExtraAccountMetasForTransferHook(\n connection,\n lbPairAccInfo.tokenYMint,\n tokenYMintAccount\n ),\n reward0MintAccount\n ? getExtraAccountMetasForTransferHook(\n connection,\n lbPairAccInfo.rewardInfos[0].mint,\n reward0MintAccount\n )\n : [],\n reward1MintAccount\n ? getExtraAccountMetasForTransferHook(\n connection,\n lbPairAccInfo.rewardInfos[1].mint,\n reward1MintAccount\n )\n : [],\n ]);\n\n const tokenX: TokenReserve = {\n publicKey: lbPairAccInfo.tokenXMint,\n reserve: lbPairAccInfo.reserveX,\n amount: reserveXBalance.amount,\n mint: mintX,\n owner: tokenXMintAccount.owner,\n transferHookAccountMetas: tokenXTransferHook,\n };\n\n const tokenY: TokenReserve = {\n publicKey: lbPairAccInfo.tokenYMint,\n reserve: lbPairAccInfo.reserveY,\n amount: reserveYBalance.amount,\n mint: mintY,\n owner: tokenYMintAccount.owner,\n transferHookAccountMetas: tokenYTransferHook,\n };\n\n const reward0: TokenReserve = !lbPairAccInfo.rewardInfos[0].mint.equals(\n PublicKey.default\n )\n ? {\n publicKey: lbPairAccInfo.rewardInfos[0].mint,\n reserve: lbPairAccInfo.rewardInfos[0].vault,\n amount: AccountLayout.decode(reward0VaultAccount.data).amount,\n mint: unpackMint(\n lbPairAccInfo.rewardInfos[0].mint,\n reward0MintAccount,\n reward0MintAccount.owner\n ),\n owner: reward0MintAccount.owner,\n transferHookAccountMetas: reward0TransferHook,\n }\n : null;\n\n const reward1: TokenReserve = !lbPairAccInfo.rewardInfos[1].mint.equals(\n PublicKey.default\n )\n ? {\n publicKey: lbPairAccInfo.rewardInfos[1].mint,\n reserve: lbPairAccInfo.rewardInfos[1].vault,\n amount: AccountLayout.decode(reward1VaultAccount.data).amount,\n mint: unpackMint(\n lbPairAccInfo.rewardInfos[1].mint,\n reward1MintAccount,\n reward1MintAccount.owner\n ),\n owner: reward1MintAccount.owner,\n transferHookAccountMetas: reward1TransferHook,\n }\n : null;\n\n return new DLMM(\n dlmm,\n program,\n lbPairAccInfo,\n binArrayBitmapExtension,\n tokenX,\n tokenY,\n [reward0, reward1],\n clock,\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 program = createProgram(connection, opt);\n\n const binArrayBitMapExtensions = dlmmList.map(\n (lbPair) => deriveBinArrayBitmapExtension(lbPair, program.programId)[0]\n );\n const accountsToFetch = [\n ...dlmmList,\n ...binArrayBitMapExtensions,\n SYSVAR_CLOCK_PUBKEY,\n ];\n\n let accountsInfo = await chunkedGetMultipleAccountInfos(\n connection,\n accountsToFetch\n );\n\n const clockAccount = accountsInfo.pop();\n const clockAccountInfoBuffer = clockAccount?.data;\n if (!clockAccountInfoBuffer) throw new Error(`Clock account not found`);\n const clock = ClockLayout.decode(clockAccountInfoBuffer) as Clock;\n\n const lbPairArraysMap = new Map<string, LbPair>();\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 lbPairAccInfo = decodeAccount<LbPair>(\n program,\n \"lbPair\",\n lbPairAccountInfoBuffer\n );\n lbPairArraysMap.set(lbPairPubKey.toBase58(), lbPairAccInfo);\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 =\n decodeAccount<BinArrayBitmapExtension>(\n program,\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 tokenMintPublicKeys = Array.from(lbPairArraysMap.values())\n .map(({ tokenXMint, tokenYMint }) => [tokenXMint, tokenYMint])\n .flat();\n\n const rewardVaultPublicKeys = Array.from(lbPairArraysMap.values())\n .map(({ rewardInfos }) => rewardInfos.map(({ vault }) => vault))\n .flat();\n\n const rewardMintPublicKeys = Array.from(lbPairArraysMap.values())\n .map(({ rewardInfos }) => rewardInfos.map(({ mint }) => mint))\n .flat();\n\n accountsInfo = await chunkedGetMultipleAccountInfos(\n program.provider.connection,\n [\n ...reservePublicKeys,\n ...tokenMintPublicKeys,\n ...rewardVaultPublicKeys,\n ...rewardMintPublicKeys,\n ]\n );\n\n const offsetToTokenMint = reservePublicKeys.length;\n const offsetToRewardMint =\n reservePublicKeys.length +\n tokenMintPublicKeys.length +\n rewardVaultPublicKeys.length;\n\n const tokenMintAccounts = accountsInfo.slice(\n offsetToTokenMint,\n offsetToTokenMint + tokenMintPublicKeys.length\n );\n\n const rewardMintAccounts = accountsInfo.slice(\n offsetToRewardMint,\n offsetToRewardMint + rewardMintPublicKeys.length\n );\n\n const tokenMintsWithAccount = tokenMintPublicKeys\n .map((key, idx) => {\n return {\n mintAddress: key,\n mintAccountInfo: tokenMintAccounts[idx],\n };\n })\n .filter(({ mintAddress }) => mintAddress !== PublicKey.default);\n\n const rewardMintsWithAccount = rewardMintPublicKeys\n .map((key, idx) => {\n return {\n mintAddress: key,\n mintAccountInfo: rewardMintAccounts[idx],\n };\n })\n .filter(({ mintAddress }) => mintAddress !== PublicKey.default);\n\n const uniqueMintWithAccounts = Array.from(\n new Set(tokenMintsWithAccount.concat(rewardMintsWithAccount))\n );\n\n const mintHookAccountsMap =\n await getMultipleMintsExtraAccountMetasForTransferHook(\n connection,\n uniqueMintWithAccounts\n );\n\n const lbClmmImpl = dlmmList.map((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 = null;\n if (binArrayBitmapExtensionState) {\n binArrayBitmapExtension = {\n account: binArrayBitmapExtensionState,\n publicKey: binArrayBitmapExtensionPubkey,\n };\n }\n\n const reserveXAccountInfo = accountsInfo[index * 2];\n const reserveYAccountInfo = accountsInfo[index * 2 + 1];\n\n let offsetToTokenMint = reservePublicKeys.length;\n\n const tokenXMintAccountInfo = accountsInfo[offsetToTokenMint + index * 2];\n const tokenYMintAccountInfo =\n accountsInfo[offsetToTokenMint + index * 2 + 1];\n\n const offsetToRewardVaultAccountInfos =\n offsetToTokenMint + tokenMintPublicKeys.length;\n\n const reward0VaultAccountInfo =\n accountsInfo[offsetToRewardVaultAccountInfos + index * 2];\n const reward1VaultAccountInfo =\n accountsInfo[offsetToRewardVaultAccountInfos + index * 2 + 1];\n\n const offsetToRewardMintAccountInfos =\n offsetToRewardVaultAccountInfos + rewardVaultPublicKeys.length;\n\n const reward0MintAccountInfo =\n accountsInfo[offsetToRewardMintAccountInfos + index * 2];\n const reward1MintAccountInfo =\n accountsInfo[offsetToRewardMintAccountInfos + 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\n const mintX = unpackMint(\n lbPairState.tokenXMint,\n tokenXMintAccountInfo,\n tokenXMintAccountInfo.owner\n );\n\n const mintY = unpackMint(\n lbPairState.tokenYMint,\n tokenYMintAccountInfo,\n tokenYMintAccountInfo.owner\n );\n\n const tokenX: TokenReserve = {\n publicKey: lbPairState.tokenXMint,\n reserve: lbPairState.reserveX,\n mint: mintX,\n amount: reserveXBalance.amount,\n owner: tokenXMintAccountInfo.owner,\n transferHookAccountMetas:\n mintHookAccountsMap.get(lbPairState.tokenXMint.toBase58()) ?? [],\n };\n\n const tokenY: TokenReserve = {\n publicKey: lbPairState.tokenYMint,\n reserve: lbPairState.reserveY,\n amount: reserveYBalance.amount,\n mint: mintY,\n owner: tokenYMintAccountInfo.owner,\n transferHookAccountMetas:\n mintHookAccountsMap.get(lbPairState.tokenYMint.toBase58()) ?? [],\n };\n\n const reward0: TokenReserve = !lbPairState.rewardInfos[0].mint.equals(\n PublicKey.default\n )\n ? {\n publicKey: lbPairState.rewardInfos[0].mint,\n reserve: lbPairState.rewardInfos[0].vault,\n amount: AccountLayout.decode(reward0VaultAccountInfo.data).amount,\n mint: unpackMint(\n lbPairState.rewardInfos[0].mint,\n reward0MintAccountInfo,\n reward0MintAccountInfo.owner\n ),\n owner: reward0MintAccountInfo.owner,\n transferHookAccountMetas:\n mintHookAccountsMap.get(\n lbPairState.rewardInfos[0].mint.toBase58()\n ) ?? [],\n }\n : null;\n\n const reward1: TokenReserve = !lbPairState.rewardInfos[1].mint.equals(\n PublicKey.default\n )\n ? {\n publicKey: lbPairState.rewardInfos[1].mint,\n reserve: lbPairState.rewardInfos[1].vault,\n amount: AccountLayout.decode(reward1VaultAccountInfo.data).amount,\n mint: unpackMint(\n lbPairState.rewardInfos[1].mint,\n reward1MintAccountInfo,\n reward1MintAccountInfo.owner\n ),\n owner: reward1MintAccountInfo.owner,\n transferHookAccountMetas:\n mintHookAccountsMap.get(\n lbPairState.rewardInfos[1].mint.toBase58()\n ) ?? [],\n }\n : null;\n\n return new DLMM(\n lbPair,\n program,\n lbPairState,\n binArrayBitmapExtension,\n tokenX,\n tokenY,\n [reward0, reward1],\n clock,\n opt\n );\n });\n\n return lbClmmImpl;\n }\n\n /**\n * The `getAllPresetParameters` function retrieves all preset parameter accounts\n * for the given DLMM program.\n *\n * @param {Connection} connection - The connection to the Solana cluster.\n * @param {Opt} [opt] - The optional parameters for the function.\n *\n * @returns A promise that resolves to an object containing the preset parameter\n * accounts, with the following properties:\n * - `presetParameter`: The preset parameter accounts for the original `PresetParameter` struct.\n * - `presetParameter2`: The preset parameter accounts for the `PresetParameter2` struct.\n */\n static async getAllPresetParameters(connection: Connection, opt?: Opt) {\n const program = createProgram(connection, opt);\n\n const [presetParameter, presetParameter2] = await Promise.all([\n program.account.presetParameter.all(),\n program.account.presetParameter2.all(),\n ]);\n\n return {\n presetParameter,\n presetParameter2,\n };\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 program = createProgram(connection, opt);\n\n const positionsV2 = await program.provider.connection.getProgramAccounts(\n program.programId,\n {\n filters: [positionV2Filter(), positionOwnerFilter(userPubKey)],\n }\n );\n\n const positionWrappers: IPosition[] = [\n ...positionsV2.map((p) => wrapPosition(program, p.pubkey, p.account)),\n ];\n\n const binArrayPubkeySetV2 = new Set<string>();\n const lbPairSetV2 = new Set<string>();\n\n positionWrappers.forEach((p) => {\n const binArrayKeys = p.getBinArrayKeysCoverage(program.programId);\n binArrayKeys.forEach((binArrayKey) => {\n binArrayPubkeySetV2.add(binArrayKey.toBase58());\n });\n lbPairSetV2.add(p.lbPair().toBase58());\n });\n\n const binArrayPubkeyArrayV2 = Array.from(binArrayPubkeySetV2).map(\n (pubkey) => new PublicKey(pubkey)\n );\n const lbPairKeys = Array.from(lbPairSetV2).map(\n (pubkey) => new PublicKey(pubkey)\n );\n\n const [clockAccInfo, ...binArraysAccInfo] =\n await chunkedGetMultipleAccountInfos(connection, [\n SYSVAR_CLOCK_PUBKEY,\n ...binArrayPubkeyArrayV2,\n ...lbPairKeys,\n ]);\n\n const positionBinArraysMapV2 = new Map();\n\n for (let i = 0; i < binArrayPubkeyArrayV2.length; i++) {\n const binArrayPubkey = binArrayPubkeyArrayV2[i];\n const binArrayAccInfoBufferV2 = binArraysAccInfo[i];\n if (binArrayAccInfoBufferV2) {\n const binArrayAccInfo = decodeAccount<BinArray>(\n program,\n \"binArray\",\n binArrayAccInfoBufferV2.data\n );\n positionBinArraysMapV2.set(binArrayPubkey.toBase58(), binArrayAccInfo);\n }\n }\n\n const lbPairMap = new Map<string, LbPair>();\n for (\n let i = binArrayPubkeyArrayV2.length;\n i < binArraysAccInfo.length;\n i++\n ) {\n const lbPairPubkey = lbPairKeys[i - binArrayPubkeyArrayV2.length];\n const lbPairAccInfoBufferV2 = binArraysAccInfo[i];\n if (!lbPairAccInfoBufferV2)\n throw new Error(`LB Pair account ${lbPairPubkey.toBase58()} not found`);\n const lbPairAccInfo = decodeAccount<LbPair>(\n program,\n \"lbPair\",\n lbPairAccInfoBufferV2.data\n );\n lbPairMap.set(lbPairPubkey.toBase58(), lbPairAccInfo);\n }\n\n const accountKeys = Array.from(lbPairMap.values())\n .map(({ reserveX, reserveY, tokenXMint, tokenYMint, rewardInfos }) => [\n reserveX,\n reserveY,\n tokenXMint,\n tokenYMint,\n rewardInfos[0].mint,\n rewardInfos[1].mint,\n ])\n .flat();\n\n const accountInfos = await chunkedGetMultipleAccountInfos(\n program.provider.connection,\n accountKeys\n );\n\n const lbPairReserveMap = new Map<\n string,\n { reserveX: bigint; reserveY: bigint }\n >();\n\n const lbPairMintMap = new Map<\n string,\n {\n mintX: Mint;\n mintY: Mint;\n rewardMint0: Mint | null;\n rewardMint1: Mint | null;\n }\n >();\n\n lbPairKeys.forEach((lbPair, idx) => {\n const index = idx * 6;\n const reserveXAccount = accountInfos[index];\n const reserveYAccount = accountInfos[index + 1];\n\n if (!reserveXAccount || !reserveYAccount)\n throw new Error(\n `Reserve account for LB Pair ${lbPair.toBase58()} not found`\n );\n\n const reserveAccX = AccountLayout.decode(reserveXAccount.data);\n const reserveAccY = AccountLayout.decode(reserveYAccount.data);\n\n lbPairReserveMap.set(lbPair.toBase58(), {\n reserveX: reserveAccX.amount,\n reserveY: reserveAccY.amount,\n });\n\n const mintXAccount = accountInfos[index + 2];\n const mintYAccount = accountInfos[index + 3];\n if (!mintXAccount || !mintYAccount)\n throw new Error(\n `Mint account for LB Pair ${lbPair.toBase58()} not found`\n );\n\n const mintX = unpackMint(\n reserveAccX.mint,\n mintXAccount,\n mintXAccount.owner\n );\n\n const mintY = unpackMint(\n reserveAccY.mint,\n mintYAccount,\n mintYAccount.owner\n );\n\n const rewardMint0Account = accountInfos[index + 4];\n const rewardMint1Account = accountInfos[index + 5];\n\n const lbPairState = lbPairMap.get(lbPair.toBase58());\n\n let rewardMint0: Mint | null = null;\n let rewardMint1: Mint | null = null;\n\n if (!lbPairState.rewardInfos[0].mint.equals(PublicKey.default)) {\n rewardMint0 = unpackMint(\n lbPairState.rewardInfos[0].mint,\n rewardMint0Account,\n rewardMint0Account.owner\n );\n }\n\n if (!lbPairState.rewardInfos[1].mint.equals(PublicKey.default)) {\n rewardMint1 = unpackMint(\n lbPairState.rewardInfos[1].mint,\n rewardMint1Account,\n rewardMint1Account.owner\n );\n }\n\n lbPairMintMap.set(lbPair.toBase58(), {\n mintX,\n mintY,\n rewardMint0,\n rewardMint1,\n });\n });\n\n const clock: Clock = ClockLayout.decode(clockAccInfo.data);\n\n const positionsMap: Map<\n string,\n {\n publicKey: PublicKey;\n lbPair: LbPair;\n tokenX: TokenReserve;\n tokenY: TokenReserve;\n lbPairPositionsData: Array<{\n publicKey: PublicKey;\n positionData: PositionData;\n version: PositionVersion;\n }>;\n }\n > = new Map();\n\n for (const position of positionWrappers) {\n const lbPair = position.lbPair();\n const positionPubkey = position.address();\n const version = position.version();\n\n const lbPairAcc = lbPairMap.get(lbPair.toBase58());\n const { mintX, mintY, rewardMint0, rewardMint1 } = lbPairMintMap.get(\n lbPair.toBase58()\n );\n\n const reserveXBalance =\n lbPairReserveMap.get(lbPair.toBase58())?.reserveX ?? BigInt(0);\n const reserveYBalance =\n lbPairReserveMap.get(lbPair.toBase58())?.reserveY ?? BigInt(0);\n\n const { tokenXProgram, tokenYProgram } = getTokenProgramId(lbPairAcc);\n\n const tokenX: TokenReserve = {\n publicKey: lbPairAcc.tokenXMint,\n reserve: lbPairAcc.reserveX,\n amount: reserveXBalance,\n mint: mintX,\n owner: tokenXProgram,\n transferHookAccountMetas: [], // No need, the TokenReserve created just for processing position info, doesn't require any transaction\n };\n\n const tokenY: TokenReserve = {\n publicKey: lbPairAcc.tokenYMint,\n reserve: lbPairAcc.reserveY,\n amount: reserveYBalance,\n mint: mintY,\n owner: tokenYProgram,\n transferHookAccountMetas: [], // No need, the TokenReserve created just for processing position info, doesn't require any transaction\n };\n\n const positionData = await DLMM.processPosition(\n program,\n lbPairAcc,\n clock,\n position,\n mintX,\n mintY,\n rewardMint0,\n rewardMint1,\n positionBinArraysMapV2\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,\n },\n ],\n });\n }\n }\n\n return positionsMap;\n }\n\n public static getPricePerLamport(\n tokenXDecimal: number,\n tokenYDecimal: number,\n price: number\n ): string {\n return new Decimal(price)\n .mul(new Decimal(10 ** (tokenYDecimal - tokenXDecimal)))\n .toString();\n }\n\n public static getBinIdFromPrice(\n price: string | number | Decimal,\n binStep: number,\n min: boolean\n ): number {\n const binStepNum = new Decimal(binStep).div(new Decimal(BASIS_POINT_MAX));\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 `getLbPairLockInfo` retrieves all pair positions that has locked liquidity.\n * @param {number} [lockDurationOpt] - An optional value indicating the minimum position lock duration that the function should return.\n * Depending on the lbPair activationType, the param should be a number of seconds or a number of slots.\n * @returns The function `getLbPairLockInfo` returns a `Promise` that resolves to a `PairLockInfo`\n * object. The `PairLockInfo` object contains an array of `PositionLockInfo` objects.\n */\n public async getLbPairLockInfo(\n lockDurationOpt?: number\n ): Promise<PairLockInfo> {\n const lockDuration = lockDurationOpt | 0;\n\n const positionAccounts =\n await this.program.provider.connection.getProgramAccounts(\n this.program.programId,\n {\n filters: [positionLbPairFilter(this.pubkey)],\n }\n );\n\n const lbPairPositions = positionAccounts.map((acc) => {\n return wrapPosition(this.program, acc.pubkey, acc.account);\n });\n\n // filter positions has lock_release_point > currentTimestamp + lockDurationSecs\n const clockAccInfo = await this.program.provider.connection.getAccountInfo(\n SYSVAR_CLOCK_PUBKEY\n );\n const clock = ClockLayout.decode(clockAccInfo.data) as Clock;\n\n const currentPoint =\n this.lbPair.activationType == ActivationType.Slot\n ? clock.slot\n : clock.unixTimestamp;\n\n const minLockReleasePoint = currentPoint.add(new BN(lockDuration));\n\n const positionsWithLock = lbPairPositions.filter((p) =>\n p.lockReleasePoint().gt(minLockReleasePoint)\n );\n\n if (positionsWithLock.length == 0) {\n return {\n positions: [],\n };\n }\n\n const binArrayPubkeySetV2 = new Set<string>();\n positionsWithLock.forEach((position) => {\n const binArrayKeys = position.getBinArrayKeysCoverage(\n this.program.programId\n );\n\n binArrayKeys.forEach((key) => {\n binArrayPubkeySetV2.add(key.toBase58());\n });\n });\n\n const binArrayPubkeyArrayV2 = Array.from(binArrayPubkeySetV2).map(\n (pubkey) => new PublicKey(pubkey)\n );\n\n const binArraysAccInfo = await chunkedGetMultipleAccountInfos(\n this.program.provider.connection,\n binArrayPubkeyArrayV2\n );\n\n const positionBinArraysMapV2 = new Map();\n\n for (let i = 0; i < binArraysAccInfo.length; i++) {\n const binArrayPubkey = binArrayPubkeyArrayV2[i];\n const binArrayAccBufferV2 = binArraysAccInfo[i];\n if (!binArrayAccBufferV2)\n throw new Error(\n `Bin Array account ${binArrayPubkey.toBase58()} not found`\n );\n const binArrayAccInfo = decodeAccount<BinArray>(\n this.program,\n \"binArray\",\n binArrayAccBufferV2.data\n );\n positionBinArraysMapV2.set(binArrayPubkey.toBase58(), binArrayAccInfo);\n }\n\n const positionsLockInfo = await Promise.all(\n positionsWithLock.map(async (position) => {\n const positionData = await DLMM.processPosition(\n this.program,\n this.lbPair,\n clock,\n position,\n this.tokenX.mint,\n this.tokenY.mint,\n this.rewards[0].mint,\n this.rewards[1].mint,\n positionBinArraysMapV2\n );\n\n return {\n positionAddress: position.address(),\n owner: position.owner(),\n lockReleasePoint: position.lockReleasePoint().toNumber(),\n tokenXAmount: positionData.totalXAmount,\n tokenYAmount: positionData.totalYAmount,\n };\n })\n );\n\n return {\n positions: positionsLockInfo,\n };\n }\n\n /** Public methods */\n\n /**\n * Create a new customizable permissionless pair. Support both token and token 2022.\n * @param connection A connection to the Solana cluster.\n * @param binStep The bin step for the pair.\n * @param tokenX The mint of the first token.\n * @param tokenY The mint of the second token.\n * @param activeId The ID of the initial active bin. Represent the starting price.\n * @param feeBps The fee rate for swaps in the pair, in basis points.\n * @param activationType The type of activation for the pair.\n * @param hasAlphaVault Whether the pair has an alpha vault.\n * @param creatorKey The public key of the creator of the pair.\n * @param activationPoint The timestamp at which the pair will be activated.\n * @param opt An options object.\n * @returns A transaction that creates the pair.\n */\n public static async createCustomizablePermissionlessLbPair2(\n connection: Connection,\n binStep: BN,\n tokenX: PublicKey,\n tokenY: PublicKey,\n activeId: BN,\n feeBps: BN,\n activationType: ActivationType,\n hasAlphaVault: boolean,\n creatorKey: PublicKey,\n activationPoint?: BN,\n creatorPoolOnOffControl?: boolean,\n opt?: Opt\n ): Promise<Transaction> {\n const program = createProgram(connection, opt);\n\n const [tokenBadgeX] = deriveTokenBadge(tokenX, program.programId);\n const [tokenBadgeY] = deriveTokenBadge(tokenY, program.programId);\n\n const [\n tokenXAccount,\n tokenYAccount,\n tokenBadgeXAccount,\n tokenBadgeYAccount,\n ] = await connection.getMultipleAccountsInfo([\n tokenX,\n tokenY,\n tokenBadgeX,\n tokenBadgeY,\n ]);\n\n const [lbPair] = deriveCustomizablePermissionlessLbPair(\n tokenX,\n tokenY,\n program.programId\n );\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\n const activeBinArrayIndex = binIdToBinArrayIndex(activeId);\n const binArrayBitmapExtension = isOverflowDefaultBinArrayBitmap(\n activeBinArrayIndex\n )\n ? deriveBinArrayBitmapExtension(lbPair, program.programId)[0]\n : null;\n\n const [baseFactor, baseFeePowerFactor] = computeBaseFactorFromFeeBps(\n binStep,\n feeBps\n );\n\n const ixData: InitCustomizablePermissionlessPairIx = {\n activeId: activeId.toNumber(),\n binStep: binStep.toNumber(),\n baseFactor: baseFactor.toNumber(),\n activationType,\n activationPoint: activationPoint ? activationPoint : null,\n hasAlphaVault,\n creatorPoolOnOffControl: creatorPoolOnOffControl\n ? creatorPoolOnOffControl\n : false,\n baseFeePowerFactor: baseFeePowerFactor.toNumber(),\n padding: Array(63).fill(0),\n };\n\n const userTokenX = getAssociatedTokenAddressSync(\n tokenX,\n creatorKey,\n true,\n tokenXAccount.owner\n );\n\n const userTokenY = getAssociatedTokenAddressSync(\n tokenY,\n creatorKey,\n true,\n tokenYAccount.owner\n );\n\n return program.methods\n .initializeCustomizablePermissionlessLbPair2(ixData)\n .accountsPartial({\n tokenBadgeX: tokenBadgeXAccount ? tokenBadgeX : program.programId,\n tokenBadgeY: tokenBadgeYAccount ? tokenBadgeY : program.programId,\n lbPair,\n reserveX,\n reserveY,\n binArrayBitmapExtension,\n tokenMintX: tokenX,\n tokenMintY: tokenY,\n oracle,\n systemProgram: SystemProgram.programId,\n userTokenX,\n userTokenY,\n funder: creatorKey,\n tokenProgramX: tokenXAccount.owner,\n tokenProgramY: tokenYAccount.owner,\n })\n .transaction();\n }\n\n /**\n * Create a new customizable permissionless pair. Support only token program.\n * @param connection A connection to the Solana cluster.\n * @param binStep The bin step for the pair.\n * @param tokenX The mint of the first token.\n * @param tokenY The mint of the second token.\n * @param activeId The ID of the initial active bin. Represent the starting price.\n * @param feeBps The fee rate for swaps in the pair, in basis points.\n * @param activationType The type of activation for the pair.\n * @param hasAlphaVault Whether the pair has an alpha vault.\n * @param creatorKey The public key of the creator of the pair.\n * @param activationPoint The timestamp at which the pair will be activated.\n * @param opt An options object.\n * @returns A transaction that creates the pair.\n */\n public static async createCustomizablePermissionlessLbPair(\n connection: Connection,\n binStep: BN,\n tokenX: PublicKey,\n tokenY: PublicKey,\n activeId: BN,\n feeBps: BN,\n activationType: ActivationType,\n hasAlphaVault: boolean,\n creatorKey: PublicKey,\n activationPoint?: BN,\n creatorPoolOnOffControl?: boolean,\n opt?: Opt\n ): Promise<Transaction> {\n const program = createProgram(connection, opt);\n\n const [lbPair] = deriveCustomizablePermissionlessLbPair(\n tokenX,\n tokenY,\n program.programId\n );\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\n const activeBinArrayIndex = binIdToBinArrayIndex(activeId);\n const binArrayBitmapExtension = isOverflowDefaultBinArrayBitmap(\n activeBinArrayIndex\n )\n ? deriveBinArrayBitmapExtension(lbPair, program.programId)[0]\n : null;\n\n const [baseFactor, baseFeePowerFactor] = computeBaseFactorFromFeeBps(\n binStep,\n feeBps\n );\n\n if (!baseFeePowerFactor.isZero()) {\n throw \"base factor for the give fee bps overflow u16\";\n }\n\n const ixData: InitCustomizablePermissionlessPairIx = {\n activeId: activeId.toNumber(),\n binStep: binStep.toNumber(),\n baseFactor: baseFactor.toNumber(),\n activationType,\n activationPoint: activationPoint ? activationPoint : null,\n hasAlphaVault,\n baseFeePowerFactor: 0,\n creatorPoolOnOffControl: creatorPoolOnOffControl\n ? creatorPoolOnOffControl\n : false,\n padding: Array(63).fill(0),\n };\n\n const userTokenX = getAssociatedTokenAddressSync(tokenX, creatorKey);\n const userTokenY = getAssociatedTokenAddressSync(tokenY, creatorKey);\n\n return program.methods\n .initializeCustomizablePermissionlessLbPair(ixData)\n .accountsPartial({\n lbPair,\n reserveX,\n reserveY,\n binArrayBitmapExtension,\n tokenMintX: tokenX,\n tokenMintY: tokenY,\n oracle,\n systemProgram: SystemProgram.programId,\n userTokenX,\n userTokenY,\n funder: creatorKey,\n })\n .transaction();\n }\n\n /**\n * Create a new liquidity pair. Support only token program.\n * @param connection A connection to the Solana cluster.\n * @param funder The public key of the funder of the pair.\n * @param tokenX The mint of the first token.\n * @param tokenY The mint of the second token.\n * @param binStep The bin step for the pair.\n * @param baseFactor The base factor for the pair.\n * @param presetParameter The public key of the preset parameter account.\n * @param activeId The ID of the initial active bin. Represent the starting price.\n * @param opt An options object.\n * @returns A transaction that creates the pair.\n * @throws If the pair already exists.\n */\n public static async createLbPair(\n connection: Connection,\n funder: PublicKey,\n tokenX: PublicKey,\n tokenY: PublicKey,\n binStep: BN,\n baseFactor: BN,\n presetParameter: PublicKey,\n activeId: BN,\n opt?: Opt\n ): Promise<Transaction> {\n const program = createProgram(connection, opt);\n\n const existsPool = await this.getPairPubkeyIfExists(\n connection,\n tokenX,\n tokenY,\n binStep,\n baseFactor,\n new BN(0)\n );\n\n if (existsPool) {\n throw new Error(\"Pool already exists\");\n }\n\n const [lbPair] = deriveLbPair2(\n tokenX,\n tokenY,\n binStep,\n baseFactor,\n program.programId\n );\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\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 .accountsPartial({\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 * Create a new liquidity pair. Support both token and token2022 program.\n * @param connection A connection to the Solana cluster.\n * @param funder The public key of the funder of the pair.\n * @param tokenX The mint of the first token.\n * @param tokenY The mint of the second token.\n * @param presetParameter The public key of the preset parameter account.\n * @param activeId The ID of the initial active bin. Represent the starting price.\n * @param opt An options object.\n * @returns A transaction that creates the pair.\n * @throws If the pair already exists.\n */\n public static async createLbPair2(\n connection: Connection,\n funder: PublicKey,\n tokenX: PublicKey,\n tokenY: PublicKey,\n presetParameter: PublicKey,\n activeId: BN,\n opt?: Opt\n ): Promise<Transaction> {\n const program = createProgram(connection, opt);\n\n const [tokenBadgeX] = deriveTokenBadge(tokenX, program.programId);\n const [tokenBadgeY] = deriveTokenBadge(tokenY, program.programId);\n\n const [\n tokenXAccount,\n tokenYAccount,\n tokenBadgeXAccount,\n tokenBadgeYAccount,\n ] = await connection.getMultipleAccountsInfo([\n tokenX,\n tokenY,\n tokenBadgeX,\n tokenBadgeY,\n ]);\n\n const presetParameterState = await program.account.presetParameter2.fetch(\n presetParameter\n );\n\n const existsPool = await this.getPairPubkeyIfExists(\n connection,\n tokenX,\n tokenY,\n new BN(presetParameterState.binStep),\n new BN(presetParameterState.baseFactor),\n new BN(presetParameterState.baseFeePowerFactor),\n {\n cluster: opt?.cluster,\n programId: opt?.programId,\n }\n );\n\n if (existsPool) {\n throw new Error(\"Pool already exists\");\n }\n\n const [lbPair] = deriveLbPairWithPresetParamWithIndexKey(\n presetParameter,\n tokenX,\n tokenY,\n program.programId\n );\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\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 .initializeLbPair2({\n activeId: activeId.toNumber(),\n padding: Array(96).fill(0),\n })\n .accountsPartial({\n funder,\n lbPair,\n reserveX,\n reserveY,\n binArrayBitmapExtension,\n tokenMintX: tokenX,\n tokenMintY: tokenY,\n tokenBadgeX: tokenBadgeXAccount ? tokenBadgeX : program.programId,\n tokenBadgeY: tokenBadgeYAccount ? tokenBadgeY : program.programId,\n tokenProgramX: tokenXAccount.owner,\n tokenProgramY: tokenYAccount.owner,\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\n const [\n lbPairAccountInfo,\n binArrayBitmapExtensionAccountInfo,\n reserveXAccountInfo,\n reserveYAccountInfo,\n mintXAccountInfo,\n mintYAccountInfo,\n reward0VaultAccountInfo,\n reward1VaultAccountInfo,\n rewardMint0AccountInfo,\n rewardMint1AccountInfo,\n clockAccountInfo,\n ] = await chunkedGetMultipleAccountInfos(this.program.provider.connection, [\n this.pubkey,\n binArrayBitmapExtensionPubkey,\n this.lbPair.reserveX,\n this.lbPair.reserveY,\n this.lbPair.tokenXMint,\n this.lbPair.tokenYMint,\n this.lbPair.rewardInfos[0].vault,\n this.lbPair.rewardInfos[1].vault,\n this.lbPair.rewardInfos[0].mint,\n this.lbPair.rewardInfos[1].mint,\n SYSVAR_CLOCK_PUBKEY,\n ]);\n\n const lbPairState = decodeAccount<LbPair>(\n this.program,\n \"lbPair\",\n lbPairAccountInfo.data\n );\n if (binArrayBitmapExtensionAccountInfo) {\n const binArrayBitmapExtensionState =\n decodeAccount<BinArrayBitmapExtension>(\n this.program,\n \"binArrayBitmapExtension\",\n binArrayBitmapExtensionAccountInfo.data\n );\n\n if (binArrayBitmapExtensionState) {\n this.binArrayBitmapExtension = {\n account: binArrayBitmapExtensionState,\n publicKey: binArrayBitmapExtensionPubkey,\n };\n }\n }\n\n const reserveXBalance = AccountLayout.decode(reserveXAccountInfo.data);\n const reserveYBalance = AccountLayout.decode(reserveYAccountInfo.data);\n\n const [\n tokenXTransferHook,\n tokenYTransferHook,\n reward0TransferHook,\n reward1TransferHook,\n ] = await Promise.all([\n getExtraAccountMetasForTransferHook(\n this.program.provider.connection,\n lbPairState.tokenXMint,\n mintXAccountInfo\n ),\n getExtraAccountMetasForTransferHook(\n this.program.provider.connection,\n lbPairState.tokenYMint,\n mintYAccountInfo\n ),\n rewardMint0AccountInfo\n ? getExtraAccountMetasForTransferHook(\n this.program.provider.connection,\n lbPairState.rewardInfos[0].mint,\n rewardMint0AccountInfo\n )\n : [],\n rewardMint1AccountInfo\n ? getExtraAccountMetasForTransferHook(\n this.program.provider.connection,\n lbPairState.rewardInfos[1].mint,\n rewardMint1AccountInfo\n )\n : [],\n ]);\n\n const mintX = unpackMint(\n this.tokenX.publicKey,\n mintXAccountInfo,\n mintXAccountInfo.owner\n );\n\n const mintY = unpackMint(\n this.tokenY.publicKey,\n mintYAccountInfo,\n mintYAccountInfo.owner\n );\n\n this.tokenX = {\n amount: reserveXBalance.amount,\n mint: mintX,\n publicKey: lbPairState.tokenXMint,\n reserve: lbPairState.reserveX,\n owner: mintXAccountInfo.owner,\n transferHookAccountMetas: tokenXTransferHook,\n };\n\n this.tokenY = {\n amount: reserveYBalance.amount,\n mint: mintY,\n publicKey: lbPairState.tokenYMint,\n reserve: lbPairState.reserveY,\n owner: mintYAccountInfo.owner,\n transferHookAccountMetas: tokenYTransferHook,\n };\n\n this.rewards[0] = null;\n this.rewards[1] = null;\n\n if (!lbPairState.rewardInfos[0].mint.equals(PublicKey.default)) {\n this.rewards[0] = {\n publicKey: lbPairState.rewardInfos[0].mint,\n reserve: lbPairState.rewardInfos[0].vault,\n mint: unpackMint(\n lbPairState.rewardInfos[0].mint,\n rewardMint0AccountInfo,\n rewardMint0AccountInfo.owner\n ),\n amount: AccountLayout.decode(reward0VaultAccountInfo.data).amount,\n owner: rewardMint0AccountInfo.owner,\n transferHookAccountMetas: reward0TransferHook,\n };\n }\n\n if (!lbPairState.rewardInfos[1].mint.equals(PublicKey.default)) {\n this.rewards[1] = {\n publicKey: lbPairState.rewardInfos[1].mint,\n reserve: lbPairState.rewardInfos[1].vault,\n mint: unpackMint(\n lbPairState.rewardInfos[1].mint,\n rewardMint1AccountInfo,\n rewardMint1AccountInfo.owner\n ),\n amount: AccountLayout.decode(reward1VaultAccountInfo.data).amount,\n owner: rewardMint1AccountInfo.owner,\n transferHookAccountMetas: reward1TransferHook,\n };\n }\n\n const clock = ClockLayout.decode(clockAccountInfo.data) as Clock;\n this.clock = clock;\n\n this.lbPair = lbPairState;\n }\n\n /**\n * Set the status of a permissionless LB pair to either enabled or disabled. This require pool field `creator_pool_on_off_control` to be true and type `CustomizablePermissionless`.\n * Pool creator can enable/disable the pair anytime before the pool is opened / activated. Once the pool activation time is passed, the pool creator can only enable the pair.\n * Useful for token launches which do not have fixed activation time.\n * @param enable If true, the pair will be enabled. If false, the pair will be disabled.\n * @param creator The public key of the pool creator.\n * @returns a Promise that resolves to the transaction.\n */\n public async setPairStatusPermissionless(\n enable: boolean,\n creator: PublicKey\n ) {\n const status: PairStatus = enable ? 0 : 1; // 0 = enable, 1 = disable\n\n const tx = await this.program.methods\n .setPairStatusPermissionless(status)\n .accountsPartial({\n lbPair: this.pubkey,\n creator,\n })\n .transaction();\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return new Transaction({\n feePayer: this.lbPair.creator,\n blockhash,\n lastValidBlockHeight,\n }).add(tx);\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 binArrayLbPairFilter(this.pubkey),\n ]);\n }\n\n /**\n * The function `getBinArrayAroundActiveBin` retrieves a specified number of `BinArrayAccount`\n * objects from the blockchain, based on the active bin and its surrounding bin arrays.\n * @param\n * swapForY - The `swapForY` parameter is a boolean value that indicates whether the swap is using quote token as input.\n * [count=4] - The `count` parameter is the number of bin arrays to retrieve on left and right respectively. By default, it is set to 4.\n * @returns an array of `BinArrayAccount` objects.\n */\n public async getBinArrayForSwap(\n swapForY: boolean,\n count = 4\n ): Promise<BinArrayAccount[]> {\n await this.refetchStates();\n\n const binArraysPubkey = new Set<string>();\n\n let shouldStop = false;\n let activeIdToLoop = this.lbPair.activeId;\n\n while (!shouldStop) {\n const binArrayIndex = findNextBinArrayIndexWithLiquidity(\n swapForY,\n new BN(activeIdToLoop),\n this.lbPair,\n this.binArrayBitmapExtension?.account ?? null\n );\n if (binArrayIndex === null) shouldStop = true;\n else {\n const [binArrayPubKey] = deriveBinArray(\n this.pubkey,\n binArrayIndex,\n this.program.programId\n );\n binArraysPubkey.add(binArrayPubKey.toBase58());\n\n const [lowerBinId, upperBinId] =\n getBinArrayLowerUpperBinId(binArrayIndex);\n activeIdToLoop = swapForY\n ? lowerBinId.toNumber() - 1\n : upperBinId.toNumber() + 1;\n }\n\n if (binArraysPubkey.size === count) shouldStop = true;\n }\n\n const accountsToFetch = Array.from(binArraysPubkey).map(\n (pubkey) => new PublicKey(pubkey)\n );\n\n const binArraysAccInfoBuffer = await chunkedGetMultipleAccountInfos(\n this.program.provider.connection,\n accountsToFetch\n );\n\n const binArrays: BinArrayAccount[] = await Promise.all(\n binArraysAccInfoBuffer.map(async (accInfo, idx) => {\n const account = decodeAccount<BinArray>(\n this.program,\n \"binArray\",\n accInfo.data\n );\n const publicKey = accountsToFetch[idx];\n return {\n account,\n publicKey,\n };\n })\n );\n\n return binArrays;\n }\n\n /**\n * The function `calculateFeeInfo` calculates the base fee rate percentage and maximum fee rate percentage\n * given the base factor, bin step, and optional base fee power factor.\n * @param baseFactor - The base factor of the pair.\n * @param binStep - The bin step of the pair.\n * @param baseFeePowerFactor - Optional parameter to allow small bin step to have bigger fee rate. Default to 0.\n * @returns an object of type `Omit<FeeInfo, \"protocolFeePercentage\">` with the following properties: baseFeeRatePercentage and maxFeeRatePercentage.\n */\n public static calculateFeeInfo(\n baseFactor: number | string,\n binStep: number | string,\n baseFeePowerFactor?: number | string\n ): Omit<FeeInfo, \"protocolFeePercentage\"> {\n const baseFeeRate = new BN(baseFactor)\n .mul(new BN(binStep))\n .mul(new BN(10))\n .mul(new BN(10).pow(new BN(baseFeePowerFactor ?? 0)));\n const baseFeeRatePercentage = new Decimal(baseFeeRate.toString())\n .mul(new Decimal(100))\n .div(new Decimal(FEE_PRECISION.toString()));\n const maxFeeRatePercentage = new Decimal(MAX_FEE_RATE.toString())\n .mul(new Decimal(100))\n .div(new Decimal(FEE_PRECISION.toString()));\n\n return {\n baseFeeRatePercentage,\n maxFeeRatePercentage,\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 { baseFeeRatePercentage, maxFeeRatePercentage } =\n DLMM.calculateFeeInfo(\n baseFactor,\n this.lbPair.binStep,\n this.lbPair.parameters.baseFeePowerFactor\n );\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 DLMM.updateReference(\n activeId.toNumber(),\n vParameterClone,\n sParameters,\n currentTimestamp\n );\n DLMM.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 now = Date.now() / 1000;\n const [rewardOneEmissionRate, rewardTwoEmissionRate] =\n this.lbPair.rewardInfos.map(({ rewardRate, rewardDurationEnd }) =>\n now > rewardDurationEnd.toNumber() ? undefined : rewardRate\n );\n\n return {\n rewardOne: rewardOneEmissionRate\n ? new Decimal(rewardOneEmissionRate.toString()).div(PRECISION)\n : undefined,\n rewardTwo: rewardTwoEmissionRate\n ? new Decimal(rewardTwoEmissionRate.toString()).div(PRECISION)\n : undefined,\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.mint.decimals,\n this.tokenY.mint.decimals\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.mint.decimals,\n this.tokenX.mint.decimals\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 lowerBinArray?: BinArray,\n upperBinArray?: BinArray\n ): Promise<{ activeBin: number; bins: BinLiquidity[] }> {\n const bins = await this.getBins(\n this.pubkey,\n lowerBinId,\n upperBinId,\n this.tokenX.mint.decimals,\n this.tokenY.mint.decimals,\n lowerBinArray,\n upperBinArray\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 DLMM.getPricePerLamport(\n this.tokenX.mint.decimals,\n this.tokenY.mint.decimals,\n price\n );\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(\n new Decimal(\n 10 ** (this.tokenY.mint.decimals - this.tokenX.mint.decimals)\n )\n )\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<BinLiquidity> {\n const { activeId } = await this.program.account.lbPair.fetch(this.pubkey);\n const [activeBinState] = await this.getBins(\n this.pubkey,\n activeId,\n activeId,\n this.tokenX.mint.decimals,\n this.tokenY.mint.decimals\n );\n return activeBinState;\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 return DLMM.getBinIdFromPrice(price, this.lbPair.binStep, min);\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: BinLiquidity;\n userPositions: Array<LbPosition>;\n }> {\n const promiseResults = await Promise.all([\n this.getActiveBin(),\n userPubKey &&\n this.program.provider.connection.getProgramAccounts(\n this.program.programId,\n {\n filters: [\n positionV2Filter(),\n positionOwnerFilter(userPubKey),\n positionLbPairFilter(this.pubkey),\n ],\n }\n ),\n ]);\n\n const [activeBin, positionsV2] = promiseResults;\n\n if (!activeBin) {\n throw new Error(\"Error fetching active bin\");\n }\n\n if (!userPubKey) {\n return {\n activeBin,\n userPositions: [],\n };\n }\n\n const positions = [\n ...positionsV2.map((p) =>\n wrapPosition(this.program, p.pubkey, p.account)\n ),\n ];\n\n if (!positions) {\n throw new Error(\"Error fetching positions\");\n }\n\n const binArrayPubkeySetV2 = new Set<string>();\n positions.forEach((position) => {\n const binArrayKeys = position.getBinArrayKeysCoverage(\n this.program.programId\n );\n\n binArrayKeys.forEach((key) => {\n binArrayPubkeySetV2.add(key.toBase58());\n });\n });\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 [this.pubkey, SYSVAR_CLOCK_PUBKEY, ...binArrayPubkeyArrayV2]\n );\n\n const [lbPairAccInfo, clockAccInfo, ...binArraysAccInfo] =\n lbPairAndBinArrays;\n\n const positionBinArraysMapV2 = new Map();\n for (let i = 0; i < binArraysAccInfo.length; i++) {\n const binArrayPubkey = binArrayPubkeyArrayV2[i];\n const binArrayAccBufferV2 = binArraysAccInfo[i];\n if (binArrayAccBufferV2) {\n const binArrayAccInfo = decodeAccount<BinArray>(\n this.program,\n \"binArray\",\n binArrayAccBufferV2.data\n );\n positionBinArraysMapV2.set(binArrayPubkey.toBase58(), binArrayAccInfo);\n }\n }\n\n if (!lbPairAccInfo)\n throw new Error(`LB Pair account ${this.pubkey.toBase58()} not found`);\n\n const clock: Clock = ClockLayout.decode(clockAccInfo.data);\n\n const userPositions = await Promise.all(\n positions.map(async (position) => {\n return {\n publicKey: position.address(),\n positionData: await DLMM.processPosition(\n this.program,\n this.lbPair,\n clock,\n position,\n this.tokenX.mint,\n this.tokenY.mint,\n this.rewards[0]?.mint,\n this.rewards[1]?.mint,\n positionBinArraysMapV2\n ),\n version: position.version(),\n };\n })\n );\n\n return {\n activeBin,\n userPositions,\n };\n }\n\n /**\n * Estimates the cost to extend a position by a specified number of bins. Max position length is 1400\n *\n * The function calculates the rent cost required to expand a position and the cost\n * to create necessary bin arrays for the new position range.\n *\n * @param currentMinBinId - The current minimum bin ID of the position.\n * @param currentMaxBinId - The current maximum bin ID of the position.\n * @param binCountToExpand - The number of bins to expand the position by.\n * @returns An object containing:\n * - positionExtendCost: The estimated rent cost in lamports for extending the position.\n * - binArrayCost: The estimated cost for creating necessary bin arrays.\n */\n\n public async quoteExtendPosition(\n currentMinBinId: BN,\n currentMaxBinId: BN,\n binCountToExpand: BN\n ) {\n const positionExtendCost = await getPositionExpandRentExemption(\n currentMinBinId,\n currentMaxBinId,\n this.program.provider.connection,\n binCountToExpand\n );\n\n const lowerBinArrayIndex = binIdToBinArrayIndex(currentMinBinId);\n const upperBinArrayIndex = binIdToBinArrayIndex(currentMaxBinId);\n\n const binArraysCount = (\n await this.binArraysToBeCreate(lowerBinArrayIndex, upperBinArrayIndex)\n ).length;\n\n const binArrayCost = new Decimal(binArraysCount).mul(\n new Decimal(BIN_ARRAY_FEE)\n );\n\n return {\n positionExtendCost: new Decimal(positionExtendCost).div(\n new Decimal(LAMPORTS_PER_SOL)\n ),\n binArrayCost,\n };\n }\n\n public async quoteCreatePosition({ strategy }: TQuoteCreatePositionParams) {\n const { minBinId, maxBinId } = strategy;\n\n const binCount = maxBinId - minBinId + 1;\n let positionCount = Math.floor(binCount / MAX_BINS_PER_POSITION.toNumber());\n if (binCount % MAX_BINS_PER_POSITION.toNumber() > 0) {\n positionCount++;\n }\n\n let positionReallocCost = 0;\n\n let lastUpperBinId = minBinId;\n for (let i = 0; i < positionCount; i++) {\n const lowerBinId = lastUpperBinId;\n const upperBinId = Math.min(\n maxBinId,\n lowerBinId + DEFAULT_BIN_PER_POSITION.toNumber() - 1\n );\n\n const maxUpperBinId = Math.min(\n maxBinId,\n upperBinId + MAX_BINS_PER_POSITION.toNumber() - 1\n );\n\n const binToExpand = maxUpperBinId - upperBinId;\n const { positionExtendCost } = await this.quoteExtendPosition(\n new BN(lowerBinId),\n new BN(upperBinId),\n new BN(binToExpand)\n );\n\n positionReallocCost += positionExtendCost.toNumber();\n lastUpperBinId = upperBinId;\n }\n\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(minBinId));\n const upperBinArrayIndex = BN.max(\n binIdToBinArrayIndex(new BN(maxBinId)),\n lowerBinArrayIndex.add(new BN(1))\n );\n\n let bitmapExtensionCost = 0;\n if (\n isOverflowDefaultBinArrayBitmap(lowerBinArrayIndex) ||\n isOverflowDefaultBinArrayBitmap(upperBinArrayIndex)\n ) {\n bitmapExtensionCost = BIN_ARRAY_BITMAP_FEE;\n }\n\n const binArraysCount = (\n await this.binArraysToBeCreate(lowerBinArrayIndex, upperBinArrayIndex)\n ).length;\n\n const transactionCount = Math.ceil(\n (maxBinId - minBinId + 1) / DEFAULT_BIN_PER_POSITION.toNumber()\n );\n\n const binArrayCost = binArraysCount * BIN_ARRAY_FEE;\n\n return {\n positionCount,\n positionCost: positionCount * POSITION_FEE,\n positionReallocCost,\n bitmapExtensionCost,\n binArraysCount,\n binArrayCost,\n transactionCount,\n };\n }\n\n /**\n * Creates an empty position and initializes the corresponding bin arrays if needed.\n * @param param0 The settings of the requested new position.\n * @returns A promise that resolves into a transaction for creating the requested position.\n */\n public async createEmptyPosition({\n positionPubKey,\n minBinId,\n maxBinId,\n user,\n }: {\n positionPubKey: PublicKey;\n minBinId: number;\n maxBinId: number;\n user: PublicKey;\n }) {\n const createPositionIx = await this.program.methods\n .initializePosition(minBinId, maxBinId - minBinId + 1)\n .accountsPartial({\n payer: user,\n position: positionPubKey,\n lbPair: this.pubkey,\n owner: user,\n })\n .instruction();\n\n const binArrayIndexes = getBinArrayIndexesCoverage(\n new BN(minBinId),\n new BN(maxBinId)\n );\n\n const createBinArrayIxs = await this.createBinArraysIfNeeded(\n binArrayIndexes,\n user\n );\n\n const instructions = [createPositionIx, ...createBinArrayIxs];\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n instructions,\n user\n );\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(setCUIx, ...instructions);\n }\n\n /**\n * The function `getPosition` retrieves position information for a given public key and processes it\n * using various data to return a `LbPosition` object.\n * @param {PublicKey} positionPubKey - The `getPosition` function you provided is an asynchronous\n * function that fetches position information based on a given public key. Here's a breakdown of the\n * parameters used in the function:\n * @returns The `getPosition` function returns a Promise that resolves to an object of type\n * `LbPosition`. The object contains the following properties:\n * - `publicKey`: The public key of the position account\n * - `positionData`: Position Object\n * - `version`: The version of the position (in this case, `Position.V2`)\n */\n public async getPosition(positionPubKey: PublicKey): Promise<LbPosition> {\n const positionAccountInfo =\n await this.program.provider.connection.getAccountInfo(positionPubKey);\n\n if (!positionAccountInfo) {\n throw new Error(\n `Position account ${positionPubKey.toBase58()} not found`\n );\n }\n\n let position: IPosition = wrapPosition(\n this.program,\n positionPubKey,\n positionAccountInfo\n );\n\n const binArrayKeys = position.getBinArrayKeysCoverage(\n this.program.programId\n );\n\n const [clockAccInfo, ...binArrayAccountsInfo] =\n await chunkedGetMultipleAccountInfos(this.program.provider.connection, [\n SYSVAR_CLOCK_PUBKEY,\n ...binArrayKeys,\n ]);\n\n const clock: Clock = ClockLayout.decode(clockAccInfo.data);\n\n const binArrayMap = new Map<String, BinArray>();\n\n for (let i = 0; i < binArrayAccountsInfo.length; i++) {\n if (binArrayAccountsInfo[i]) {\n const binArrayState = decodeAccount<BinArray>(\n this.program,\n \"binArray\",\n binArrayAccountsInfo[i].data\n );\n\n binArrayMap.set(binArrayKeys[i].toBase58(), binArrayState);\n }\n }\n\n return {\n publicKey: positionPubKey,\n positionData: await DLMM.processPosition(\n this.program,\n this.lbPair,\n clock,\n position,\n this.tokenX.mint,\n this.tokenY.mint,\n this.rewards[0]?.mint,\n this.rewards[1]?.mint,\n binArrayMap\n ),\n version: position.version(),\n };\n }\n\n /**\n * Creates multiple positions and adds liquidity by strategy. It allow parallel execution of transactions.\n * @param positionKeypairGenerator A function that generates a specified number of keypairs.\n * @param totalXAmount The total amount of token X to be added.\n * @param totalYAmount The total amount of token Y to be added.\n * @param strategy The strategy for adding liquidity.\n * @param owner The owner of the position.\n * @param payer The payer of the transaction.\n * @param slippagePercentage The slippage percentage for adding liquidity.\n * @returns An object with two properties: `initPositionIxs` and `addLiquidityIxs`.\n */\n public async initializeMultiplePositionAndAddLiquidityByStrategy2(\n positionKeypairGenerator: (count: number) => Promise<Keypair[]>,\n totalXAmount: BN,\n totalYAmount: BN,\n strategy: StrategyParameters,\n owner: PublicKey,\n payer: PublicKey,\n slippagePercentage: number,\n altAddress?: PublicKey\n ): Promise<InitializeMultiplePositionAndAddLiquidityByStrategyResponse2> {\n const maxActiveBinSlippage = getAndCapMaxActiveBinSlippage(\n slippagePercentage,\n this.lbPair.binStep,\n MAX_ACTIVE_BIN_SLIPPAGE\n );\n\n const { minBinId, maxBinId } = strategy;\n\n const binCount = getBinCount(minBinId, maxBinId);\n\n const defaultAltAddressString =\n altAddress ?? ALT_ADDRESS[this.opt?.cluster];\n\n if (defaultAltAddressString) {\n altAddress = new PublicKey(defaultAltAddressString);\n }\n\n const maxResizeIxAllowed = altAddress ? 5 : 3; // 525:343 bins will not exceed transaction limit. This is based on worst case where tokens are SOL + token 2022 with hook (1 account)\n\n const maxBinPerParallelizedPosition =\n DEFAULT_BIN_PER_POSITION.toNumber() +\n MAX_RESIZE_LENGTH.toNumber() * maxResizeIxAllowed;\n\n const positionCount = Math.ceil(binCount / maxBinPerParallelizedPosition);\n\n const positionKeypairs = await positionKeypairGenerator(positionCount);\n\n const liquidityStrategyParameters = buildLiquidityStrategyParameters(\n totalXAmount,\n totalYAmount,\n new BN(minBinId - this.lbPair.activeId),\n new BN(maxBinId - this.lbPair.activeId),\n new BN(this.lbPair.binStep),\n strategy.singleSidedX,\n new BN(this.lbPair.activeId),\n getLiquidityStrategyParameterBuilder(strategy.strategyType)\n );\n\n let startBinId = minBinId;\n\n const response: InitializeMultiplePositionAndAddLiquidityByStrategyResponse2 =\n { instructionsByPositions: [], lookupTableAddress: altAddress };\n\n for (const position of positionKeypairs) {\n const txsIxs: TransactionInstruction[][] = [];\n\n const endBinId = Math.min(\n startBinId + maxBinPerParallelizedPosition - 1,\n maxBinId\n );\n\n const finalPositionWidth = endBinId - startBinId + 1;\n\n const initialPositionWidth =\n finalPositionWidth > DEFAULT_BIN_PER_POSITION.toNumber()\n ? DEFAULT_BIN_PER_POSITION.toNumber()\n : finalPositionWidth;\n\n const initPositionIx = await this.program.methods\n .initializePosition2(startBinId, initialPositionWidth)\n .accountsPartial({\n position: position.publicKey,\n lbPair: this.pubkey,\n owner,\n payer,\n })\n .instruction();\n\n const extendPositionIxs: TransactionInstruction[] = [];\n\n let currentEndBinId = startBinId + initialPositionWidth - 1;\n while (true) {\n if (currentEndBinId == endBinId) break;\n\n currentEndBinId = Math.min(\n currentEndBinId + MAX_RESIZE_LENGTH.toNumber(),\n endBinId\n );\n\n const increaseLengthIx = await this.program.methods\n .increasePositionLength2(currentEndBinId)\n .accountsPartial({\n lbPair: this.pubkey,\n position: position.publicKey,\n funder: payer,\n owner,\n })\n .instruction();\n\n extendPositionIxs.push(increaseLengthIx);\n }\n\n const addLiquidityIxs = await chunkDepositWithRebalanceEndpoint(\n this,\n strategy,\n slippagePercentage,\n maxActiveBinSlippage,\n position.publicKey,\n startBinId,\n endBinId,\n liquidityStrategyParameters,\n owner,\n payer,\n true,\n this.opt?.skipSolWrappingOperation\n );\n\n for (const instructions of addLiquidityIxs) {\n const txIxs: TransactionInstruction[] = [];\n txIxs.push(initPositionIx);\n txIxs.push(...extendPositionIxs);\n txIxs.push(...instructions);\n\n const setCuIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n txIxs,\n payer,\n 0.1,\n altAddress\n );\n\n txIxs.unshift(setCuIx);\n txsIxs.push(txIxs);\n }\n\n response.instructionsByPositions.push({\n positionKeypair: position,\n transactionInstructions: txsIxs,\n });\n\n startBinId = endBinId + 1;\n }\n\n return response;\n }\n\n /**\n * Creates multiple positions and adds liquidity by strategy without chainsaw issues.\n * @param positionKeypairGenerator A function that generates a specified number of keypairs.\n * @param totalXAmount The total amount of token X to be added.\n * @param totalYAmount The total amount of token Y to be added.\n * @param strategy The strategy for adding liquidity.\n * @param owner The owner of the position.\n * @param payer The payer of the transaction.\n * @param slippagePercentage The slippage percentage for adding liquidity.\n * @returns An object with two properties: `initPositionIxs` and `addLiquidityIxs`.\n */\n public async initializeMultiplePositionAndAddLiquidityByStrategy(\n positionKeypairGenerator: (count: number) => Promise<Keypair[]>,\n totalXAmount: BN,\n totalYAmount: BN,\n strategy: StrategyParameters,\n owner: PublicKey,\n payer: PublicKey,\n slippagePercentage: number\n ): Promise<InitializeMultiplePositionAndAddLiquidityByStrategyResponse> {\n const maxActiveBinSlippage = getAndCapMaxActiveBinSlippage(\n slippagePercentage,\n this.lbPair.binStep,\n MAX_ACTIVE_BIN_SLIPPAGE\n );\n\n const { minBinId, maxBinId } = strategy;\n const binCount = getBinCount(minBinId, maxBinId);\n const positionCount = getPositionCountByBinCount(binCount);\n\n const positionKeypairs = await positionKeypairGenerator(positionCount);\n\n const liquidityStrategyParameters = buildLiquidityStrategyParameters(\n totalXAmount,\n totalYAmount,\n new BN(minBinId - this.lbPair.activeId),\n new BN(maxBinId - this.lbPair.activeId),\n new BN(this.lbPair.binStep),\n strategy.singleSidedX,\n new BN(this.lbPair.activeId),\n getLiquidityStrategyParameterBuilder(strategy.strategyType)\n );\n\n const instructionsByPositions = [];\n let startBinId = minBinId;\n\n const initializeAtaIxs: TransactionInstruction[] = [];\n\n if (!this.tokenX.publicKey.equals(NATIVE_MINT)) {\n const ownerAtaX = getAssociatedTokenAddressSync(\n this.tokenX.publicKey,\n owner,\n true,\n this.tokenX.owner\n );\n initializeAtaIxs.push(\n createAssociatedTokenAccountIdempotentInstruction(\n owner,\n ownerAtaX,\n owner,\n this.tokenX.publicKey,\n this.tokenX.owner\n )\n );\n }\n\n if (!this.tokenY.publicKey.equals(NATIVE_MINT)) {\n const ownerAtaY = getAssociatedTokenAddressSync(\n this.tokenY.publicKey,\n owner,\n true,\n this.tokenY.owner\n );\n initializeAtaIxs.push(\n createAssociatedTokenAccountIdempotentInstruction(\n owner,\n ownerAtaY,\n owner,\n this.tokenY.publicKey,\n this.tokenY.owner\n )\n );\n }\n\n for (const position of positionKeypairs) {\n const endBinId = Math.min(\n startBinId + MAX_BINS_PER_POSITION.toNumber() - 1,\n maxBinId\n );\n\n const binCount = getBinCount(startBinId, endBinId);\n const positionWidth = Math.min(\n binCount,\n DEFAULT_BIN_PER_POSITION.toNumber()\n );\n\n const initPositionIx = await this.program.methods\n .initializePosition(startBinId, positionWidth)\n .accountsPartial({\n position: position.publicKey,\n lbPair: this.pubkey,\n owner,\n payer,\n })\n .instruction();\n\n const chunkedAddLiquidityIx = await chunkDepositWithRebalanceEndpoint(\n this,\n strategy,\n slippagePercentage,\n maxActiveBinSlippage,\n position.publicKey,\n startBinId,\n endBinId,\n liquidityStrategyParameters,\n owner,\n payer,\n false,\n this.opt?.skipSolWrappingOperation\n );\n\n instructionsByPositions.push({\n positionKeypair: position,\n initializePositionIx: initPositionIx,\n initializeAtaIxs,\n addLiquidityIxs: chunkedAddLiquidityIx,\n });\n\n startBinId = endBinId + 1;\n }\n\n return {\n instructionsByPositions,\n };\n }\n\n /**\n * Adds liquidity to an existing position using a specified strategy, allowing for chunkable transactions.\n * If adding liquidity to bin out of position range, it will automatically expand. The limitation is 70 bins.\n *\n * @param {TInitializePositionAndAddLiquidityParamsByStrategy} params - The parameters required for adding liquidity.\n * @param {PublicKey} params.positionPubKey - The public key of the position to which liquidity is being added.\n * @param {BN} params.totalXAmount - The total amount of token X to be added as liquidity.\n * @param {BN} params.totalYAmount - The total amount of token Y to be added as liquidity.\n * @param {StrategyParameters} params.strategy - The strategy parameters for adding liquidity.\n * @param {PublicKey} params.user - The public key of the user adding liquidity.\n * @param {number} params.slippage - The slippage percentage allowed for the transaction.\n *\n * @returns {Promise<Transaction[]>} A promise that resolves to an array of transactions for adding liquidity.\n */\n\n public async addLiquidityByStrategyChunkable({\n positionPubKey,\n totalXAmount,\n totalYAmount,\n strategy,\n user,\n slippage,\n }: TInitializePositionAndAddLiquidityParamsByStrategy): Promise<\n Transaction[]\n > {\n const maxActiveBinSlippage = getAndCapMaxActiveBinSlippage(\n slippage,\n this.lbPair.binStep,\n MAX_ACTIVE_BIN_SLIPPAGE\n );\n\n const { minBinId, maxBinId } = strategy;\n\n const liquidityStrategyParameters = buildLiquidityStrategyParameters(\n totalXAmount,\n totalYAmount,\n new BN(minBinId - this.lbPair.activeId),\n new BN(maxBinId - this.lbPair.activeId),\n new BN(this.lbPair.binStep),\n strategy.singleSidedX,\n new BN(this.lbPair.activeId),\n getLiquidityStrategyParameterBuilder(strategy.strategyType)\n );\n\n const chunkedAddLiquidityIx = await chunkDepositWithRebalanceEndpoint(\n this,\n strategy,\n slippage,\n maxActiveBinSlippage,\n positionPubKey,\n minBinId,\n maxBinId,\n liquidityStrategyParameters,\n user,\n user,\n true,\n this.opt?.skipSolWrappingOperation\n );\n\n const latestBlockhashInfo =\n await this.program.provider.connection.getLatestBlockhash();\n\n return chunkedAddLiquidityIx.map((ixs) => {\n return new Transaction({\n ...latestBlockhashInfo,\n feePayer: user,\n }).add(...ixs);\n });\n }\n\n /**\n * The function `initializePositionAndAddLiquidityByStrategy` function is used to initializes a position and adds liquidity\n * @param {TInitializePositionAndAddLiquidityParamsByStrategy}\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 * - `strategy`: The strategy parameters to be used for the liquidity pool (Can use `calculateStrategyParameter` to calculate).\n * - `user`: The public key of the user account.\n * - `slippage`: The slippage percentage to be used for the liquidity pool.\n * @returns {Promise<Transaction>} The function `initializePositionAndAddLiquidityByStrategy` returns a `Promise` that\n * resolves to either a single `Transaction` object.\n */\n public async initializePositionAndAddLiquidityByStrategy({\n positionPubKey,\n totalXAmount,\n totalYAmount,\n strategy,\n user,\n slippage,\n }: TInitializePositionAndAddLiquidityParamsByStrategy) {\n const { maxBinId, minBinId } = strategy;\n\n const maxActiveBinSlippage = slippage\n ? Math.ceil(slippage / (this.lbPair.binStep / 100))\n : MAX_ACTIVE_BIN_SLIPPAGE;\n\n const preInstructions: TransactionInstruction[] = [];\n const initializePositionIx = await this.program.methods\n .initializePosition(minBinId, maxBinId - minBinId + 1)\n .accountsPartial({\n payer: user,\n position: positionPubKey,\n lbPair: this.pubkey,\n owner: user,\n })\n .instruction();\n preInstructions.push(initializePositionIx);\n\n const binArrayIndexes = getBinArrayIndexesCoverage(\n new BN(minBinId),\n new BN(maxBinId)\n );\n\n const binArrayAccountMetas = getBinArrayAccountMetasCoverage(\n new BN(minBinId),\n new BN(maxBinId),\n this.pubkey,\n this.program.programId\n );\n\n const createBinArrayIxs = await this.createBinArraysIfNeeded(\n binArrayIndexes,\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 this.tokenX.owner\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenY.publicKey,\n user,\n this.tokenY.owner\n ),\n ]);\n createPayerTokenXIx && preInstructions.push(createPayerTokenXIx);\n createPayerTokenYIx && preInstructions.push(createPayerTokenYIx);\n\n if (\n this.tokenX.publicKey.equals(NATIVE_MINT) &&\n !totalXAmount.isZero() &&\n !this.opt?.skipSolWrappingOperation\n ) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenX,\n BigInt(totalXAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (\n this.tokenY.publicKey.equals(NATIVE_MINT) &&\n !totalYAmount.isZero() &&\n !this.opt?.skipSolWrappingOperation\n ) {\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 !this.opt?.skipSolWrappingOperation\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\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 = this.lbPair.activeId;\n\n const strategyParameters: LiquidityParameterByStrategy[\"strategyParameters\"] =\n toStrategyParameters(strategy) as ProgramStrategyParameter;\n\n const liquidityParams: LiquidityParameterByStrategy = {\n amountX: totalXAmount,\n amountY: totalYAmount,\n activeId,\n maxActiveBinSlippage,\n strategyParameters,\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 binArrayBitmapExtension,\n sender: user,\n tokenXProgram: this.tokenX.owner,\n tokenYProgram: this.tokenY.owner,\n memoProgram: MEMO_PROGRAM_ID,\n };\n\n const { slices, accounts: transferHookAccounts } =\n this.getPotentialToken2022IxDataAndAccounts(ActionType.Liquidity);\n\n const programMethod = this.program.methods.addLiquidityByStrategy2(\n liquidityParams,\n {\n slices,\n }\n );\n\n const addLiquidityIx = await programMethod\n .accountsPartial(addLiquidityAccounts)\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(binArrayAccountMetas)\n .instruction();\n\n const instructions = [\n ...preInstructions,\n addLiquidityIx,\n ...postInstructions,\n ];\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n instructions,\n user\n );\n\n instructions.unshift(setCUIx);\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(...instructions);\n }\n\n /**\n * @deprecated Use `initializePositionAndAddLiquidityByStrategy` instead which support both token and token2022.\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 * - `slippage`: The slippage percentage to be used for the liquidity pool.\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 slippage,\n }: TInitializePositionAndAddLiquidityParams): Promise<\n Transaction | Transaction[]\n > {\n const { lowerBinId, upperBinId, binIds } =\n this.processXYAmountDistribution(xYAmountDistribution);\n\n const maxActiveBinSlippage = slippage\n ? Math.ceil(slippage / (this.lbPair.binStep / 100))\n : MAX_ACTIVE_BIN_SLIPPAGE;\n\n if (upperBinId >= lowerBinId + DEFAULT_BIN_PER_POSITION.toNumber()) {\n throw new Error(\n `Position must be within a range of 1 to ${DEFAULT_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 .accountsPartial({\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 = BN.max(\n lowerBinArrayIndex.add(new BN(1)),\n binIdToBinArrayIndex(new BN(upperBinId))\n );\n const [binArrayUpper] = deriveBinArray(\n this.pubkey,\n upperBinArrayIndex,\n this.program.programId\n );\n\n const createBinArrayIxs = await this.createBinArraysIfNeeded(\n [lowerBinArrayIndex, upperBinArrayIndex],\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 this.tokenX.owner\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenY.publicKey,\n user,\n this.tokenY.owner\n ),\n ]);\n createPayerTokenXIx && preInstructions.push(createPayerTokenXIx);\n createPayerTokenYIx && preInstructions.push(createPayerTokenYIx);\n\n if (\n this.tokenX.publicKey.equals(NATIVE_MINT) &&\n !totalXAmount.isZero() &&\n !this.opt?.skipSolWrappingOperation\n ) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenX,\n BigInt(totalXAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (\n this.tokenY.publicKey.equals(NATIVE_MINT) &&\n !totalYAmount.isZero() &&\n !this.opt?.skipSolWrappingOperation\n ) {\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 !this.opt?.skipSolWrappingOperation\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\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 = this.lbPair.activeId;\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,\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,\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 addLiqIx = await programMethod\n .accountsPartial(\n isOneSideDeposit ? oneSideAddLiquidityAccounts : addLiquidityAccounts\n )\n .instruction();\n\n const instructions = [...preInstructions, addLiqIx, ...postInstructions];\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n instructions,\n user\n );\n\n instructions.unshift(setCUIx);\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(...instructions);\n }\n\n const addLiqIx = await programMethod\n .accountsPartial(\n isOneSideDeposit ? oneSideAddLiquidityAccounts : addLiquidityAccounts\n )\n .instruction();\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n [addLiqIx],\n user,\n DEFAULT_ADD_LIQUIDITY_CU // The function return multiple transactions that dependent on each other, simulation will fail\n );\n\n const mainInstructions = [setCUIx, addLiqIx];\n\n const transactions: Transaction[] = [];\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\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(...mainInstructions);\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 `addLiquidityByStrategy` function is used to add liquidity to existing position\n * @param {TInitializePositionAndAddLiquidityParamsByStrategy}\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 * - `strategy`: The strategy parameters to be used for the liquidity pool (Can use `calculateStrategyParameter` to calculate).\n * - `user`: The public key of the user account.\n * - `slippage`: The slippage percentage to be used for the liquidity pool.\n * @returns {Promise<Transaction>} The function `addLiquidityByWeight` returns a `Promise` that resolves to either a single\n * `Transaction` object\n */\n public async addLiquidityByStrategy({\n positionPubKey,\n totalXAmount,\n totalYAmount,\n strategy,\n user,\n slippage,\n }: TInitializePositionAndAddLiquidityParamsByStrategy): Promise<Transaction> {\n const { maxBinId, minBinId } = strategy;\n\n const maxActiveBinSlippage = slippage\n ? Math.ceil(slippage / (this.lbPair.binStep / 100))\n : MAX_ACTIVE_BIN_SLIPPAGE;\n\n const preInstructions: TransactionInstruction[] = [];\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 strategyParameters: LiquidityParameterByStrategy[\"strategyParameters\"] =\n toStrategyParameters(strategy) as ProgramStrategyParameter;\n\n const binArrayIndexes = getBinArrayIndexesCoverage(\n new BN(minBinId),\n new BN(maxBinId)\n );\n\n const binArrayAccountsMeta = getBinArrayAccountMetasCoverage(\n new BN(minBinId),\n new BN(maxBinId),\n this.pubkey,\n this.program.programId\n );\n\n const createBinArrayIxs = await this.createBinArraysIfNeeded(\n binArrayIndexes,\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 this.tokenX.owner\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenY.publicKey,\n user,\n this.tokenY.owner\n ),\n ]);\n\n createPayerTokenXIx && preInstructions.push(createPayerTokenXIx);\n createPayerTokenYIx && preInstructions.push(createPayerTokenYIx);\n\n if (\n this.tokenX.publicKey.equals(NATIVE_MINT) &&\n !totalXAmount.isZero() &&\n !this.opt?.skipSolWrappingOperation\n ) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenX,\n BigInt(totalXAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (\n this.tokenY.publicKey.equals(NATIVE_MINT) &&\n !totalYAmount.isZero() &&\n !this.opt?.skipSolWrappingOperation\n ) {\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 !this.opt?.skipSolWrappingOperation\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const liquidityParams: LiquidityParameterByStrategy = {\n amountX: totalXAmount,\n amountY: totalYAmount,\n activeId: this.lbPair.activeId,\n maxActiveBinSlippage,\n strategyParameters,\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 binArrayBitmapExtension,\n sender: user,\n tokenXProgram: this.tokenX.owner,\n tokenYProgram: this.tokenY.owner,\n memoProgram: MEMO_PROGRAM_ID,\n };\n\n const { slices, accounts: transferHookAccounts } =\n this.getPotentialToken2022IxDataAndAccounts(ActionType.Liquidity);\n\n const programMethod = this.program.methods.addLiquidityByStrategy2(\n liquidityParams,\n {\n slices,\n }\n );\n\n const addLiquidityIx = await programMethod\n .accounts(addLiquidityAccounts)\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(binArrayAccountsMeta)\n .instruction();\n\n const instructions = [\n ...preInstructions,\n addLiquidityIx,\n ...postInstructions,\n ];\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n instructions,\n user\n );\n\n instructions.unshift(setCUIx);\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(...instructions);\n }\n\n /**\n * @deprecated Use `addLiquidityByStrategy` instead which support both token and token2022.\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 * - `slippage`: The slippage percentage to be used for the liquidity pool.\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 positionPubKey,\n totalXAmount,\n totalYAmount,\n xYAmountDistribution,\n user,\n slippage,\n }: TInitializePositionAndAddLiquidityParams): Promise<\n Transaction | Transaction[]\n > {\n const maxActiveBinSlippage = slippage\n ? Math.ceil(slippage / (this.lbPair.binStep / 100))\n : MAX_ACTIVE_BIN_SLIPPAGE;\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 = this.lbPair.activeId;\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 this.pubkey,\n lowerBinArrayIndex,\n this.program.programId\n );\n\n const upperBinArrayIndex = BN.max(\n lowerBinArrayIndex.add(new BN(1)),\n binIdToBinArrayIndex(new BN(positionAccount.upperBinId))\n );\n const [binArrayUpper] = deriveBinArray(\n this.pubkey,\n upperBinArrayIndex,\n this.program.programId\n );\n\n const preInstructions: TransactionInstruction[] = [];\n const createBinArrayIxs = await this.createBinArraysIfNeeded(\n [lowerBinArrayIndex, upperBinArrayIndex],\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 this.tokenX.owner\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenY.publicKey,\n user,\n this.tokenY.owner\n ),\n ]);\n createPayerTokenXIx && preInstructions.push(createPayerTokenXIx);\n createPayerTokenYIx && preInstructions.push(createPayerTokenYIx);\n\n if (\n this.tokenX.publicKey.equals(NATIVE_MINT) &&\n !totalXAmount.isZero() &&\n !this.opt?.skipSolWrappingOperation\n ) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenX,\n BigInt(totalXAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n }\n\n if (\n this.tokenY.publicKey.equals(NATIVE_MINT) &&\n !totalYAmount.isZero() &&\n !this.opt?.skipSolWrappingOperation\n ) {\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 !this.opt?.skipSolWrappingOperation\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const liquidityParams: LiquidityParameterByWeight = {\n amountX: totalXAmount,\n amountY: totalYAmount,\n binLiquidityDist,\n activeId,\n maxActiveBinSlippage,\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,\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 addLiqIx = await programMethod\n .accountsPartial(\n isOneSideDeposit ? oneSideAddLiquidityAccounts : addLiquidityAccounts\n )\n .instruction();\n\n const instructions = [...preInstructions, addLiqIx, ...postInstructions];\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n instructions,\n user\n );\n\n instructions.unshift(setCUIx);\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(...instructions);\n }\n\n const addLiqIx = await programMethod\n .accountsPartial(\n isOneSideDeposit ? oneSideAddLiquidityAccounts : addLiquidityAccounts\n )\n .instruction();\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n [addLiqIx],\n user\n );\n\n const mainInstructions = [setCUIx, addLiqIx];\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(...mainInstructions);\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 * - `fromBinId`: The ID of the starting bin to remove liquidity from. Must within position range.\n * - `toBinId`: The ID of the ending bin to remove liquidity from. Must within position range.\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 * - `skipUnwrapSOL`: A boolean flag that indicates whether to skip unwrapping SOL. Enable this when using zap-sdk to ensure accuracy in SOL zap out amount when SOL is in token\n * @returns {Promise<Transaction[]>}\n */\n public async removeLiquidity({\n user,\n position,\n fromBinId,\n toBinId,\n bps,\n shouldClaimAndClose = false,\n skipUnwrapSOL = false,\n }: {\n user: PublicKey;\n position: PublicKey;\n fromBinId: number;\n toBinId: number;\n bps: BN;\n shouldClaimAndClose?: boolean;\n skipUnwrapSOL?: boolean;\n }): Promise<Transaction[]> {\n const positionAccount =\n await this.program.provider.connection.getAccountInfo(position);\n\n const positionState = wrapPosition(this.program, position, positionAccount);\n\n const lbPair = positionState.lbPair();\n const owner = positionState.owner();\n const feeOwner = positionState.feeOwner();\n const liquidityShares = positionState.liquidityShares();\n\n const liqudityShareWithBinId = liquidityShares.map((share, i) => {\n return {\n share,\n binId: positionState.lowerBinId().add(new BN(i)),\n };\n });\n\n const binIdsWithLiquidity = liqudityShareWithBinId.filter((bin) => {\n return !bin.share.isZero();\n });\n\n if (binIdsWithLiquidity.length == 0) {\n throw new Error(\"No liquidity to remove\");\n }\n\n const lowerBinIdWithLiquidity = binIdsWithLiquidity[0].binId.toNumber();\n const upperBinIdWithLiquidity =\n binIdsWithLiquidity[binIdsWithLiquidity.length - 1].binId.toNumber();\n\n // Avoid to attempt to load uninitialized bin array on the program\n if (fromBinId < lowerBinIdWithLiquidity) {\n fromBinId = lowerBinIdWithLiquidity;\n }\n\n if (toBinId > upperBinIdWithLiquidity) {\n toBinId = upperBinIdWithLiquidity;\n }\n\n const walletToReceiveFee = feeOwner.equals(PublicKey.default)\n ? user\n : feeOwner;\n\n const userTokenX = getAssociatedTokenAddressSync(\n this.lbPair.tokenXMint,\n owner,\n true,\n this.tokenX.owner\n );\n\n const userTokenY = getAssociatedTokenAddressSync(\n this.lbPair.tokenYMint,\n owner,\n true,\n this.tokenY.owner\n );\n\n const feeOwnerTokenX = getAssociatedTokenAddressSync(\n this.lbPair.tokenXMint,\n walletToReceiveFee,\n true,\n this.tokenX.owner\n );\n\n const feeOwnerTokenY = getAssociatedTokenAddressSync(\n this.lbPair.tokenYMint,\n walletToReceiveFee,\n true,\n this.tokenY.owner\n );\n\n const createUserTokenXIx =\n createAssociatedTokenAccountIdempotentInstruction(\n user,\n userTokenX,\n owner,\n this.lbPair.tokenXMint,\n this.tokenX.owner\n );\n\n const createUserTokenYIx =\n createAssociatedTokenAccountIdempotentInstruction(\n user,\n userTokenY,\n owner,\n this.lbPair.tokenYMint,\n this.tokenY.owner\n );\n\n const createFeeOwnerTokenXIx =\n createAssociatedTokenAccountIdempotentInstruction(\n user,\n feeOwnerTokenX,\n walletToReceiveFee,\n this.lbPair.tokenXMint,\n this.tokenX.owner\n );\n\n const createFeeOwnerTokenYIx =\n createAssociatedTokenAccountIdempotentInstruction(\n user,\n feeOwnerTokenY,\n walletToReceiveFee,\n this.lbPair.tokenYMint,\n this.tokenY.owner\n );\n\n const chunkedBinRange = chunkBinRange(fromBinId, toBinId);\n const groupedInstructions: TransactionInstruction[][] = [];\n\n for (const { lowerBinId, upperBinId } of chunkedBinRange) {\n const binArrayAccountsMeta = getBinArrayAccountMetasCoverage(\n new BN(lowerBinId),\n new BN(upperBinId),\n this.pubkey,\n this.program.programId\n );\n\n const { slices, accounts: transferHookAccounts } =\n this.getPotentialToken2022IxDataAndAccounts(ActionType.Liquidity);\n\n const preInstructions: Array<TransactionInstruction> = [];\n const postInstructions: Array<TransactionInstruction> = [];\n\n if (shouldClaimAndClose) {\n const claimSwapFeeIx = await this.program.methods\n .claimFee2(lowerBinId, upperBinId, {\n slices,\n })\n .accountsPartial({\n lbPair: this.pubkey,\n sender: user,\n position,\n reserveX: this.lbPair.reserveX,\n reserveY: this.lbPair.reserveY,\n tokenXMint: this.tokenX.publicKey,\n tokenYMint: this.tokenY.publicKey,\n userTokenX: feeOwnerTokenX,\n userTokenY: feeOwnerTokenY,\n tokenProgramX: this.tokenX.owner,\n tokenProgramY: this.tokenY.owner,\n memoProgram: MEMO_PROGRAM_ID,\n })\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(binArrayAccountsMeta)\n .instruction();\n\n preInstructions.push(createFeeOwnerTokenXIx);\n preInstructions.push(createFeeOwnerTokenYIx);\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))\n continue;\n\n const userRewardAccount = getAssociatedTokenAddressSync(\n rewardInfo.mint,\n user,\n true,\n this.rewards[i].owner\n );\n\n const createUserRewardAccountIx =\n createAssociatedTokenAccountIdempotentInstruction(\n user,\n userRewardAccount,\n user,\n rewardInfo.mint,\n this.rewards[i].owner\n );\n\n preInstructions.push(createUserRewardAccountIx);\n\n const { slices, accounts: transferHookAccounts } =\n this.getPotentialToken2022IxDataAndAccounts(ActionType.Reward, i);\n\n const claimRewardIx = await this.program.methods\n .claimReward2(new BN(i), lowerBinId, upperBinId, {\n slices,\n })\n .accountsPartial({\n lbPair: this.pubkey,\n sender: user,\n position,\n rewardVault: rewardInfo.vault,\n rewardMint: rewardInfo.mint,\n tokenProgram: this.rewards[i].owner,\n userTokenAccount: userRewardAccount,\n memoProgram: MEMO_PROGRAM_ID,\n })\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(binArrayAccountsMeta)\n .instruction();\n\n postInstructions.push(claimRewardIx);\n }\n\n const closePositionIx = await this.program.methods\n .closePositionIfEmpty()\n .accountsPartial({\n rentReceiver: owner, // Must be position owner\n position,\n sender: user,\n })\n .instruction();\n\n postInstructions.push(closePositionIx);\n }\n\n if (\n [\n this.tokenX.publicKey.toBase58(),\n this.tokenY.publicKey.toBase58(),\n ].includes(NATIVE_MINT.toBase58()) &&\n (!skipUnwrapSOL || !this.opt?.skipSolWrappingOperation)\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n preInstructions.push(createUserTokenXIx);\n preInstructions.push(createUserTokenYIx);\n\n const binArrayBitmapExtension = this.binArrayBitmapExtension\n ? this.binArrayBitmapExtension.publicKey\n : this.program.programId;\n\n const removeLiquidityTx = await this.program.methods\n .removeLiquidityByRange2(lowerBinId, upperBinId, bps.toNumber(), {\n slices,\n })\n .accountsPartial({\n position,\n lbPair,\n userTokenX,\n userTokenY,\n reserveX: this.lbPair.reserveX,\n reserveY: this.lbPair.reserveY,\n tokenXMint: this.tokenX.publicKey,\n tokenYMint: this.tokenY.publicKey,\n binArrayBitmapExtension,\n tokenXProgram: this.tokenX.owner,\n tokenYProgram: this.tokenY.owner,\n sender: user,\n memoProgram: MEMO_PROGRAM_ID,\n })\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(binArrayAccountsMeta)\n .instruction();\n\n const instructions = [\n ...preInstructions,\n removeLiquidityTx,\n ...postInstructions,\n ];\n\n groupedInstructions.push(instructions);\n }\n\n const groupedInstructionsWithCUIx = await Promise.all(\n groupedInstructions.map(async (ixs) => {\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n ixs,\n user,\n 0.3 // Extra 30% buffer CU\n );\n\n return [setCUIx, ...ixs];\n })\n );\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return groupedInstructionsWithCUIx.map((ixs) => {\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: user,\n }).add(...ixs);\n });\n }\n\n /**\n * The `closePositionIfEmpty` function closes a position if it is empty. Else, it does nothing.\n */\n public async closePositionIfEmpty({\n owner,\n position,\n }: {\n owner: PublicKey;\n position: LbPosition;\n }): Promise<Transaction> {\n const closePositionIfEmptyIx = await this.program.methods\n .closePositionIfEmpty()\n .accountsPartial({\n rentReceiver: owner,\n position: position.publicKey,\n sender: owner,\n })\n .instruction();\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n [closePositionIfEmptyIx],\n owner\n );\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: owner,\n }).add(setCUIx, closePositionIfEmptyIx);\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: LbPosition;\n }): Promise<Transaction> {\n const closePositionIx = await this.program.methods\n .closePosition2()\n .accountsPartial({\n rentReceiver: owner,\n position: position.publicKey,\n sender: owner,\n })\n .instruction();\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n [closePositionIx],\n owner\n );\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: owner,\n }).add(setCUIx, closePositionIx);\n }\n\n /**\n * The `swapQuoteExactOut` function returns a quote for a swap\n * @param\n * - `outAmount`: Amount of lamport to swap out\n * - `swapForY`: Swap token X to Y when it is true, else reversed.\n * - `allowedSlippage`: Allowed slippage for the swap. Expressed in BPS. To convert from slippage percentage to BPS unit: SLIPPAGE_PERCENTAGE * 100\n * - `maxExtraBinArrays`: Maximum number of extra binArrays to return\n * @returns {SwapQuote}\n * - `inAmount`: Amount of lamport to swap in\n * - `outAmount`: Amount of lamport to swap out\n * - `fee`: Fee amount\n * - `protocolFee`: Protocol fee amount\n * - `maxInAmount`: Maximum amount of lamport to swap in\n * - `binArraysPubkey`: Array of bin arrays involved in the swap\n * @throws {DlmmSdkError}\n *\n */\n public swapQuoteExactOut(\n outAmount: BN,\n swapForY: boolean,\n allowedSlippage: BN,\n binArrays: BinArrayAccount[],\n maxExtraBinArrays: number = 0\n ): SwapQuoteExactOut {\n const currentTimestamp = Date.now() / 1000;\n\n const [inMint, outMint] = swapForY\n ? [this.tokenX.mint, this.tokenY.mint]\n : [this.tokenY.mint, this.tokenX.mint];\n\n let outAmountLeft = calculateTransferFeeIncludedAmount(\n outAmount,\n outMint,\n this.clock.epoch.toNumber()\n ).amount;\n\n if (maxExtraBinArrays < 0 || maxExtraBinArrays > MAX_EXTRA_BIN_ARRAYS) {\n throw new DlmmSdkError(\n \"INVALID_MAX_EXTRA_BIN_ARRAYS\",\n `maxExtraBinArrays must be a value between 0 and ${MAX_EXTRA_BIN_ARRAYS}`\n );\n }\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 DLMM.updateReference(\n activeId.toNumber(),\n vParameterClone,\n sParameters,\n currentTimestamp\n );\n\n let startBinId = activeId;\n let binArraysForSwap = new Map();\n let actualInAmount: BN = new BN(0);\n let feeAmount: BN = new BN(0);\n let protocolFeeAmount: BN = new BN(0);\n\n while (!outAmountLeft.isZero()) {\n let binArrayAccountToSwap = findNextBinArrayWithLiquidity(\n swapForY,\n activeId,\n this.lbPair,\n this.binArrayBitmapExtension?.account ?? null,\n binArrays\n );\n\n if (binArrayAccountToSwap == null) {\n throw new DlmmSdkError(\n \"SWAP_QUOTE_INSUFFICIENT_LIQUIDITY\",\n \"Insufficient liquidity in binArrays\"\n );\n }\n\n binArraysForSwap.set(binArrayAccountToSwap.publicKey, true);\n\n DLMM.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 } =\n swapExactOutQuoteAtBin(\n bin,\n binStep,\n sParameters,\n vParameterClone,\n outAmountLeft,\n swapForY\n );\n\n if (!amountOut.isZero()) {\n outAmountLeft = outAmountLeft.sub(amountOut);\n actualInAmount = actualInAmount.add(amountIn);\n feeAmount = feeAmount.add(fee);\n protocolFeeAmount = protocolFee.add(protocolFee);\n }\n }\n\n if (!outAmountLeft.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 const startPrice = getPriceOfBinByBinId(\n startBinId.toNumber(),\n this.lbPair.binStep\n );\n const endPrice = getPriceOfBinByBinId(\n activeId.toNumber(),\n this.lbPair.binStep\n );\n\n const priceImpact = startPrice\n .sub(endPrice)\n .abs()\n .div(startPrice)\n .mul(new Decimal(100));\n\n actualInAmount = calculateTransferFeeIncludedAmount(\n actualInAmount.add(feeAmount),\n inMint,\n this.clock.epoch.toNumber()\n ).amount;\n\n const maxInAmount = actualInAmount\n .mul(new BN(BASIS_POINT_MAX).add(allowedSlippage))\n .div(new BN(BASIS_POINT_MAX));\n\n if (maxExtraBinArrays > 0 && maxExtraBinArrays <= MAX_EXTRA_BIN_ARRAYS) {\n const extraBinArrays: Array<PublicKey> = new Array<PublicKey>();\n\n while (extraBinArrays.length < maxExtraBinArrays) {\n let binArrayAccountToSwap = findNextBinArrayWithLiquidity(\n swapForY,\n activeId,\n this.lbPair,\n this.binArrayBitmapExtension?.account ?? null,\n binArrays\n );\n\n if (binArrayAccountToSwap == null) {\n break;\n }\n\n const binArrayAccountToSwapExisted = binArraysForSwap.has(\n binArrayAccountToSwap.publicKey\n );\n\n if (binArrayAccountToSwapExisted) {\n if (swapForY) {\n activeId = activeId.sub(new BN(1));\n } else {\n activeId = activeId.add(new BN(1));\n }\n } else {\n extraBinArrays.push(binArrayAccountToSwap.publicKey);\n const [lowerBinId, upperBinId] = getBinArrayLowerUpperBinId(\n binArrayAccountToSwap.account.index\n );\n\n if (swapForY) {\n activeId = lowerBinId.sub(new BN(1));\n } else {\n activeId = upperBinId.add(new BN(1));\n }\n }\n }\n\n // save to binArraysForSwap result\n extraBinArrays.forEach((binArrayPubkey) => {\n binArraysForSwap.set(binArrayPubkey, true);\n });\n }\n\n const binArraysPubkey = Array.from(binArraysForSwap.keys());\n\n return {\n inAmount: actualInAmount,\n maxInAmount,\n outAmount,\n priceImpact,\n fee: feeAmount,\n protocolFee: protocolFeeAmount,\n binArraysPubkey,\n };\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 * - `allowedSlippage`: Allowed slippage for the swap. Expressed in BPS. To convert from slippage percentage to BPS unit: SLIPPAGE_PERCENTAGE * 100\n * - `binArrays`: binArrays for swapQuote.\n * - `isPartialFill`: Flag to check whether the the swapQuote is partial fill, default = false.\n * - `maxExtraBinArrays`: Maximum number of extra binArrays to return\n * @returns {SwapQuote}\n * - `consumedInAmount`: Amount of lamport to swap in\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 * @throws {DlmmSdkError}\n */\n public swapQuote(\n inAmount: BN,\n swapForY: boolean,\n allowedSlippage: BN,\n binArrays: BinArrayAccount[],\n isPartialFill?: boolean,\n maxExtraBinArrays: number = 0\n ): SwapQuote {\n const currentTimestamp = Date.now() / 1000;\n\n if (maxExtraBinArrays < 0 || maxExtraBinArrays > MAX_EXTRA_BIN_ARRAYS) {\n throw new DlmmSdkError(\n \"INVALID_MAX_EXTRA_BIN_ARRAYS\",\n `maxExtraBinArrays must be a value between 0 and ${MAX_EXTRA_BIN_ARRAYS}`\n );\n }\n\n const [inMint, outMint] = swapForY\n ? [this.tokenX.mint, this.tokenY.mint]\n : [this.tokenY.mint, this.tokenX.mint];\n\n let transferFeeExcludedAmountIn = calculateTransferFeeExcludedAmount(\n inAmount,\n inMint,\n this.clock.epoch.toNumber()\n ).amount;\n\n let inAmountLeft = transferFeeExcludedAmountIn;\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 DLMM.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 totalOutAmount: BN = new BN(0);\n let feeAmount: BN = new BN(0);\n let protocolFeeAmount: BN = new BN(0);\n let lastFilledActiveBinId = activeId;\n\n while (!inAmountLeft.isZero()) {\n let binArrayAccountToSwap = findNextBinArrayWithLiquidity(\n swapForY,\n activeId,\n this.lbPair,\n this.binArrayBitmapExtension?.account ?? null,\n binArrays\n );\n\n if (binArrayAccountToSwap == null) {\n if (isPartialFill) {\n break;\n } else {\n throw new DlmmSdkError(\n \"SWAP_QUOTE_INSUFFICIENT_LIQUIDITY\",\n \"Insufficient liquidity in binArrays for swapQuote\"\n );\n }\n }\n\n binArraysForSwap.set(binArrayAccountToSwap.publicKey, true);\n\n DLMM.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 } = swapExactInQuoteAtBin(\n bin,\n binStep,\n sParameters,\n vParameterClone,\n inAmountLeft,\n swapForY\n );\n\n if (!amountIn.isZero()) {\n inAmountLeft = inAmountLeft.sub(amountIn);\n totalOutAmount = totalOutAmount.add(amountOut);\n feeAmount = feeAmount.add(fee);\n protocolFeeAmount = protocolFee.add(protocolFee);\n\n if (!startBin) {\n startBin = bin;\n }\n\n lastFilledActiveBinId = activeId;\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) {\n // The pool insufficient liquidity\n throw new DlmmSdkError(\n \"SWAP_QUOTE_INSUFFICIENT_LIQUIDITY\",\n \"Insufficient liquidity\"\n );\n }\n\n const actualInAmount = transferFeeExcludedAmountIn.sub(inAmountLeft);\n\n let transferFeeIncludedInAmount = calculateTransferFeeIncludedAmount(\n actualInAmount,\n inMint,\n this.clock.epoch.toNumber()\n ).amount;\n\n transferFeeIncludedInAmount = transferFeeIncludedInAmount.gt(inAmount)\n ? inAmount\n : transferFeeIncludedInAmount;\n\n const outAmountWithoutSlippage = getOutAmount(\n startBin,\n actualInAmount.sub(\n computeFeeFromAmount(\n binStep,\n sParameters,\n vParameterClone,\n actualInAmount\n )\n ),\n swapForY\n );\n\n const priceImpact = new Decimal(totalOutAmount.toString())\n .sub(new Decimal(outAmountWithoutSlippage.toString()))\n .div(new Decimal(outAmountWithoutSlippage.toString()))\n .mul(new Decimal(100))\n .abs();\n\n const endPrice = getPriceOfBinByBinId(\n lastFilledActiveBinId.toNumber(),\n this.lbPair.binStep\n );\n\n if (maxExtraBinArrays > 0 && maxExtraBinArrays <= MAX_EXTRA_BIN_ARRAYS) {\n const extraBinArrays: Array<PublicKey> = new Array<PublicKey>();\n\n while (extraBinArrays.length < maxExtraBinArrays) {\n let binArrayAccountToSwap = findNextBinArrayWithLiquidity(\n swapForY,\n activeId,\n this.lbPair,\n this.binArrayBitmapExtension?.account ?? null,\n binArrays\n );\n\n if (binArrayAccountToSwap == null) {\n break;\n }\n\n const binArrayAccountToSwapExisted = binArraysForSwap.has(\n binArrayAccountToSwap.publicKey\n );\n\n if (binArrayAccountToSwapExisted) {\n if (swapForY) {\n activeId = activeId.sub(new BN(1));\n } else {\n activeId = activeId.add(new BN(1));\n }\n } else {\n extraBinArrays.push(binArrayAccountToSwap.publicKey);\n const [lowerBinId, upperBinId] = getBinArrayLowerUpperBinId(\n binArrayAccountToSwap.account.index\n );\n\n if (swapForY) {\n activeId = lowerBinId.sub(new BN(1));\n } else {\n activeId = upperBinId.add(new BN(1));\n }\n }\n }\n\n // save to binArraysForSwap result\n extraBinArrays.forEach((binArrayPubkey) => {\n binArraysForSwap.set(binArrayPubkey, true);\n });\n }\n\n const binArraysPubkey = Array.from(binArraysForSwap.keys());\n const transferFeeExcludedAmountOut = calculateTransferFeeExcludedAmount(\n totalOutAmount,\n outMint,\n this.clock.epoch.toNumber()\n ).amount;\n\n const minOutAmount = transferFeeExcludedAmountOut\n .mul(new BN(BASIS_POINT_MAX).sub(allowedSlippage))\n .div(new BN(BASIS_POINT_MAX));\n\n return {\n consumedInAmount: transferFeeIncludedInAmount,\n outAmount: transferFeeExcludedAmountOut,\n fee: feeAmount,\n protocolFee: protocolFeeAmount,\n minOutAmount,\n priceImpact,\n binArraysPubkey,\n endPrice,\n };\n }\n\n public async swapExactOut({\n inToken,\n outToken,\n outAmount,\n maxInAmount,\n lbPair,\n user,\n binArraysPubkey,\n }: SwapExactOutParams): Promise<Transaction> {\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: Array<TransactionInstruction> = [];\n\n const [inTokenProgram, outTokenProgram] = inToken.equals(\n this.lbPair.tokenXMint\n )\n ? [this.tokenX.owner, this.tokenY.owner]\n : [this.tokenY.owner, this.tokenX.owner];\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 inTokenProgram\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n outToken,\n user,\n outTokenProgram\n ),\n ]);\n createInTokenAccountIx && preInstructions.push(createInTokenAccountIx);\n createOutTokenAccountIx && preInstructions.push(createOutTokenAccountIx);\n\n if (inToken.equals(NATIVE_MINT) && !this.opt?.skipSolWrappingOperation) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenIn,\n BigInt(maxInAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (outToken.equals(NATIVE_MINT) && !this.opt?.skipSolWrappingOperation) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const { slices, accounts: transferHookAccounts } =\n this.getPotentialToken2022IxDataAndAccounts(ActionType.Liquidity);\n\n const binArrays: AccountMeta[] = binArraysPubkey.map((pubkey) => {\n return {\n isSigner: false,\n isWritable: true,\n pubkey,\n };\n });\n\n const swapIx = await this.program.methods\n .swapExactOut2(maxInAmount, outAmount, { slices })\n .accountsPartial({\n lbPair,\n reserveX: this.lbPair.reserveX,\n reserveY: this.lbPair.reserveY,\n tokenXMint: this.lbPair.tokenXMint,\n tokenYMint: this.lbPair.tokenYMint,\n tokenXProgram: this.tokenX.owner,\n tokenYProgram: this.tokenY.owner,\n user,\n userTokenIn,\n userTokenOut,\n binArrayBitmapExtension: this.binArrayBitmapExtension\n ? this.binArrayBitmapExtension.publicKey\n : null,\n oracle: this.lbPair.oracle,\n hostFeeIn: null,\n memoProgram: MEMO_PROGRAM_ID,\n })\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(binArrays)\n .instruction();\n\n const instructions = [...preInstructions, swapIx, ...postInstructions];\n\n // const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n // this.program.provider.connection,\n // instructions,\n // user\n // );\n\n // instructions.unshift(setCUIx);\n\n instructions.push(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: 1_400_000,\n })\n );\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(...instructions);\n }\n\n /**\n * Returns a transaction to be signed and sent by user performing swap.\n * @param {SwapWithPriceImpactParams}\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 * - `priceImpact`: Accepted price impact bps.\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 swapWithPriceImpact({\n inToken,\n outToken,\n inAmount,\n lbPair,\n user,\n priceImpact,\n binArraysPubkey,\n }: SwapWithPriceImpactParams): Promise<Transaction> {\n const preInstructions: TransactionInstruction[] = [];\n const postInstructions: Array<TransactionInstruction> = [];\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 this.tokenX.owner\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n outToken,\n user,\n this.tokenY.owner\n ),\n ]);\n createInTokenAccountIx && preInstructions.push(createInTokenAccountIx);\n createOutTokenAccountIx && preInstructions.push(createOutTokenAccountIx);\n\n if (inToken.equals(NATIVE_MINT) && !this.opt?.skipSolWrappingOperation) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenIn,\n BigInt(inAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (outToken.equals(NATIVE_MINT) && !this.opt?.skipSolWrappingOperation) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\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 const { slices, accounts: transferHookAccounts } =\n this.getPotentialToken2022IxDataAndAccounts(ActionType.Liquidity);\n\n const swapIx = await this.program.methods\n .swapWithPriceImpact2(\n inAmount,\n this.lbPair.activeId,\n priceImpact.toNumber(),\n { slices }\n )\n .accountsPartial({\n lbPair,\n reserveX: this.lbPair.reserveX,\n reserveY: this.lbPair.reserveY,\n tokenXMint: this.lbPair.tokenXMint,\n tokenYMint: this.lbPair.tokenYMint,\n tokenXProgram: this.tokenX.owner,\n tokenYProgram: this.tokenY.owner,\n user,\n userTokenIn,\n userTokenOut,\n binArrayBitmapExtension: this.binArrayBitmapExtension\n ? this.binArrayBitmapExtension.publicKey\n : null,\n oracle: this.lbPair.oracle,\n hostFeeIn: null,\n memoProgram: MEMO_PROGRAM_ID,\n })\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(binArrays)\n .instruction();\n\n const instructions = [...preInstructions, swapIx, ...postInstructions];\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n instructions,\n user\n );\n\n instructions.unshift(setCUIx);\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(...instructions);\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 preInstructions: TransactionInstruction[] = [];\n const postInstructions: Array<TransactionInstruction> = [];\n\n const [inTokenProgram, outTokenProgram] = inToken.equals(\n this.lbPair.tokenXMint\n )\n ? [this.tokenX.owner, this.tokenY.owner]\n : [this.tokenY.owner, this.tokenX.owner];\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 inTokenProgram\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n outToken,\n user,\n outTokenProgram\n ),\n ]);\n createInTokenAccountIx && preInstructions.push(createInTokenAccountIx);\n createOutTokenAccountIx && preInstructions.push(createOutTokenAccountIx);\n\n if (inToken.equals(NATIVE_MINT) && !this.opt?.skipSolWrappingOperation) {\n const wrapSOLIx = wrapSOLInstruction(\n user,\n userTokenIn,\n BigInt(inAmount.toString())\n );\n\n preInstructions.push(...wrapSOLIx);\n\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n if (outToken.equals(NATIVE_MINT) && !this.opt?.skipSolWrappingOperation) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(user);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\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 const { slices, accounts: transferHookAccounts } =\n this.getPotentialToken2022IxDataAndAccounts(ActionType.Liquidity);\n\n const swapIx = await this.program.methods\n .swap2(inAmount, minOutAmount, { slices })\n .accountsPartial({\n lbPair,\n reserveX: this.lbPair.reserveX,\n reserveY: this.lbPair.reserveY,\n tokenXMint: this.lbPair.tokenXMint,\n tokenYMint: this.lbPair.tokenYMint,\n tokenXProgram: this.tokenX.owner,\n tokenYProgram: this.tokenY.owner,\n user,\n userTokenIn,\n userTokenOut,\n binArrayBitmapExtension: this.binArrayBitmapExtension\n ? this.binArrayBitmapExtension.publicKey\n : null,\n oracle: this.lbPair.oracle,\n hostFeeIn: null,\n memoProgram: MEMO_PROGRAM_ID,\n })\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(binArrays)\n .instruction();\n\n const instructions = [...preInstructions, swapIx, ...postInstructions];\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n instructions,\n user\n );\n\n instructions.unshift(setCUIx);\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(...instructions);\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[]>} Claim LM reward transactions.\n */\n public async claimLMReward({\n owner,\n position,\n }: {\n owner: PublicKey;\n position: LbPosition;\n }): Promise<Transaction[]> {\n if (isPositionNoReward(position.positionData)) {\n throw new Error(\"No LM reward to claim\");\n }\n\n const claimTransactions = await this.createClaimBuildMethod({\n owner,\n position,\n });\n\n if (!claimTransactions.length) return;\n\n const claimTransactionWithCUIx = await Promise.all(\n claimTransactions.map(async (tx) => {\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n tx.instructions,\n owner\n );\n\n return [setCUIx, ...tx.instructions];\n })\n );\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return claimTransactionWithCUIx.map((ixs) => {\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: owner,\n }).add(...ixs);\n });\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[]>} Array of claim LM reward and fees transactions.\n */\n public async claimAllLMRewards({\n owner,\n positions,\n }: {\n owner: PublicKey;\n positions: LbPosition[];\n }): Promise<Transaction[]> {\n if (\n positions.every((position) => isPositionNoReward(position.positionData))\n ) {\n throw new Error(\"No LM reward to claim\");\n }\n\n const claimAllTxs = (\n await Promise.all(\n positions\n .filter(\n ({ positionData: { rewardOne, rewardTwo } }) =>\n !rewardOne.isZero() || !rewardTwo.isZero()\n )\n .map(async (position, idx) => {\n return await this.createClaimBuildMethod({\n owner,\n position,\n });\n })\n )\n ).flat();\n\n const chunkedClaimAllTx = chunks(claimAllTxs, MAX_CLAIM_ALL_ALLOWED);\n\n if (chunkedClaimAllTx.length === 0) return [];\n\n const chunkedClaimAllTxIx = await Promise.all(\n chunkedClaimAllTx.map(async (txs) => {\n const ixs = txs.map((t) => t.instructions).flat();\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n ixs,\n owner\n );\n\n return [setCUIx, ...ixs];\n })\n );\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return Promise.all(\n chunkedClaimAllTxIx.map(async (claimAllTx) => {\n return new Transaction({\n feePayer: owner,\n blockhash,\n lastValidBlockHeight,\n }).add(...claimAllTx);\n })\n );\n }\n\n public async setActivationPoint(activationPoint: BN) {\n const setActivationPointTx = await this.program.methods\n .setActivationPoint(activationPoint)\n .accountsPartial({\n lbPair: this.pubkey,\n admin: this.lbPair.creator,\n })\n .transaction();\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return new Transaction({\n feePayer: this.lbPair.creator,\n blockhash,\n lastValidBlockHeight,\n }).add(setActivationPointTx);\n }\n\n public async setPairStatus(enabled: boolean): Promise<Transaction> {\n const pairStatus = enabled ? 0 : 1;\n const tx = await this.program.methods\n .setPairStatus(pairStatus)\n .accountsPartial({\n lbPair: this.pubkey,\n admin: this.lbPair.creator,\n })\n .transaction();\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return new Transaction({\n feePayer: this.lbPair.creator,\n blockhash,\n lastValidBlockHeight,\n }).add(tx);\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 * - `binRange`: The bin range to claim swap fees for. If not provided, the function claim swap fees for full range.\n * @returns {Promise<Transaction[]>} Claim swap fee transactions.\n */\n public async claimSwapFee({\n owner,\n position,\n }: {\n owner: PublicKey;\n position: LbPosition;\n }): Promise<Transaction[]> {\n if (isPositionNoFee(position.positionData)) {\n throw new Error(\"No fee to claim\");\n }\n\n const claimFeeTxs = await this.createClaimSwapFeeMethod({\n owner,\n position,\n });\n\n const claimFeeTxsWithCUIx = await Promise.all(\n claimFeeTxs.map(async (tx) => {\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n tx.instructions,\n owner\n );\n\n return [setCUIx, ...tx.instructions];\n })\n );\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return claimFeeTxsWithCUIx.map((ixs) => {\n return new Transaction({\n blockhash,\n lastValidBlockHeight,\n feePayer: owner,\n }).add(...ixs);\n });\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[]>} Array of claim swap fee transactions.\n */\n public async claimAllSwapFee({\n owner,\n positions,\n }: {\n owner: PublicKey;\n positions: LbPosition[];\n }): Promise<Transaction[]> {\n if (positions.every((position) => isPositionNoFee(position.positionData))) {\n throw new Error(\"No fee to claim\");\n }\n\n const claimAllTxs = (\n await Promise.all(\n positions\n .filter(\n ({ positionData: { feeX, feeY } }) =>\n !feeX.isZero() || !feeY.isZero()\n )\n .map(async (position) => {\n return await this.createClaimSwapFeeMethod({\n owner,\n position,\n });\n })\n )\n ).flat();\n\n const chunkedClaimAllTx = chunks(claimAllTxs, MAX_CLAIM_ALL_ALLOWED);\n\n if (chunkedClaimAllTx.length === 0) return [];\n\n const chunkedClaimAllTxIxs = await Promise.all(\n chunkedClaimAllTx.map(async (tx) => {\n const ixs = tx.map((t) => t.instructions).flat();\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n ixs,\n owner\n );\n\n return [setCUIx, ...ixs];\n })\n );\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return Promise.all(\n chunkedClaimAllTxIxs.map(async (claimAllTx) => {\n return new Transaction({\n feePayer: owner,\n blockhash,\n lastValidBlockHeight,\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[]>} Array of claim reward transactions.\n */\n public async claimAllRewardsByPosition({\n owner,\n position,\n }: {\n owner: PublicKey;\n position: LbPosition;\n }): Promise<Transaction[]> {\n if (\n isPositionNoFee(position.positionData) &&\n isPositionNoReward(position.positionData)\n ) {\n throw new Error(\"No fee/reward to claim\");\n }\n\n const claimAllSwapFeeTxs = await this.createClaimSwapFeeMethod({\n owner,\n position,\n });\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\n return Promise.all(\n claimAllTxs.map(async (txs) => {\n const instructions = txs.flatMap((tx) => tx.instructions);\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n instructions,\n owner\n );\n\n const transaction = new Transaction({\n feePayer: owner,\n blockhash,\n lastValidBlockHeight,\n }).add(setCUIx, ...instructions);\n\n return transaction;\n })\n );\n }\n\n /**\n * The `seedLiquidity` function create multiple grouped instructions. The grouped instructions will be [init ata + send lamport for token provde], [initialize bin array + initialize position instructions] and [deposit instruction]. Each grouped instructions can be executed parallelly.\n * @param\n * - `owner`: The public key of the positions owner.\n * - `seedAmount`: Lamport amount to be seeded to the pool.\n * - `minPrice`: Start price in UI format\n * - `maxPrice`: End price in UI format\n * - `base`: Base key\n * - `txPayer`: Account rental fee payer\n * - `feeOwner`: Fee owner key. Default to position owner\n * - `operator`: Operator key\n * - `lockReleasePoint`: Timelock. Point (slot/timestamp) the position can withdraw the liquidity,\n * - `shouldSeedPositionOwner` (optional): Whether to send 1 lamport amount of token X to the position owner to prove ownership.\n * @returns {Promise<SeedLiquidityResponse>}\n */\n public async seedLiquidity(\n owner: PublicKey,\n seedAmount: BN,\n curvature: number,\n minPrice: number,\n maxPrice: number,\n base: PublicKey,\n payer: PublicKey,\n feeOwner: PublicKey,\n operator: PublicKey,\n lockReleasePoint: BN,\n shouldSeedPositionOwner: boolean = false\n ): Promise<SeedLiquidityResponse> {\n let tokenOwnerProveAssociatedTokenAccountLamports = new BN(0);\n let totalPositionCount = new BN(0);\n let totalPositionLamports = new BN(0);\n let totalBinArraysCount = new BN(0);\n let totalBinArraysLamports = new BN(0);\n let binArrayBitmapLamports = new BN(0);\n\n const toLamportMultiplier = new Decimal(\n 10 ** (this.tokenY.mint.decimals - this.tokenX.mint.decimals)\n );\n\n const minPricePerLamport = new Decimal(minPrice).mul(toLamportMultiplier);\n const maxPricePerLamport = new Decimal(maxPrice).mul(toLamportMultiplier);\n\n const minBinId = new BN(\n DLMM.getBinIdFromPrice(minPricePerLamport, this.lbPair.binStep, false)\n );\n\n const maxBinId = new BN(\n DLMM.getBinIdFromPrice(maxPricePerLamport, this.lbPair.binStep, true)\n );\n\n if (minBinId.toNumber() < this.lbPair.activeId) {\n throw new Error(\"minPrice < current pair price\");\n }\n\n if (minBinId.toNumber() >= maxBinId.toNumber()) {\n throw new Error(\"Price range too small\");\n }\n\n // Generate amount for each bin\n const k = 1.0 / curvature;\n\n const binDepositAmount = generateAmountForBinRange(\n seedAmount,\n this.lbPair.binStep,\n this.tokenX.mint.decimals,\n this.tokenY.mint.decimals,\n minBinId,\n maxBinId,\n k\n );\n\n const decompressMultiplier = findOptimumDecompressMultiplier(\n binDepositAmount,\n new BN(this.tokenX.mint.decimals)\n );\n\n let { compressedBinAmount, compressionLoss } = compressBinAmount(\n binDepositAmount,\n decompressMultiplier\n );\n\n // Distribute loss after compression back to bins based on bin ratio with total deposited amount\n let {\n newCompressedBinAmount: compressedBinDepositAmount,\n loss: finalLoss,\n } = distributeAmountToCompressedBinsByRatio(\n compressedBinAmount,\n compressionLoss,\n decompressMultiplier,\n new BN(2 ** 32 - 1) // u32\n );\n\n // This amount will be deposited to the last bin without compression\n const positionCount = getPositionCount(minBinId, maxBinId.sub(new BN(1)));\n\n const seederTokenX = getAssociatedTokenAddressSync(\n this.lbPair.tokenXMint,\n operator,\n false,\n this.tokenX.owner\n );\n\n const seederTokenY = getAssociatedTokenAddressSync(\n this.lbPair.tokenYMint,\n operator,\n false,\n this.tokenY.owner\n );\n\n const ownerTokenX = getAssociatedTokenAddressSync(\n this.lbPair.tokenXMint,\n owner,\n false,\n this.tokenX.owner\n );\n\n const [binArrayBitmapExtension] = deriveBinArrayBitmapExtension(\n this.pubkey,\n this.program.programId\n );\n\n const sendPositionOwnerTokenProveIxs = [];\n const initializeBinArraysAndPositionIxs = [];\n const addLiquidityIxs = [];\n const appendedInitBinArrayIx = new Set();\n let appendedInitBinArrayBitmap = false;\n\n if (shouldSeedPositionOwner) {\n const positionOwnerTokenX =\n await this.program.provider.connection.getAccountInfo(ownerTokenX);\n\n let requireTokenProve = false;\n\n if (positionOwnerTokenX) {\n const ownerTokenXState = unpackAccount(\n ownerTokenX,\n positionOwnerTokenX,\n this.tokenX.owner\n );\n\n requireTokenProve = ownerTokenXState.amount == 0n;\n } else {\n requireTokenProve = true;\n }\n\n if (requireTokenProve) {\n if (!positionOwnerTokenX) {\n tokenOwnerProveAssociatedTokenAccountLamports =\n tokenOwnerProveAssociatedTokenAccountLamports.add(\n TOKEN_ACCOUNT_FEE_BN\n );\n }\n\n const initPositionOwnerTokenX =\n createAssociatedTokenAccountIdempotentInstruction(\n payer,\n ownerTokenX,\n owner,\n this.lbPair.tokenXMint,\n this.tokenX.owner\n );\n\n const proveAmount = calculateTransferFeeIncludedAmount(\n new BN(1),\n this.tokenX.mint,\n this.clock.epoch.toNumber()\n ).amount;\n\n sendPositionOwnerTokenProveIxs.push(initPositionOwnerTokenX);\n\n const transferIx = createTransferCheckedInstruction(\n seederTokenX,\n this.lbPair.tokenXMint,\n ownerTokenX,\n operator,\n BigInt(proveAmount.toString()),\n this.tokenX.mint.decimals,\n [],\n this.tokenX.owner\n );\n transferIx.keys.push(...this.tokenX.transferHookAccountMetas);\n sendPositionOwnerTokenProveIxs.push(transferIx);\n }\n }\n\n const slices: RemainingAccountsInfoSlice[] = [\n {\n accountsType: {\n transferHookX: {},\n },\n length: this.tokenX.transferHookAccountMetas.length,\n },\n ];\n const transferHookAccountMetas = this.tokenX.transferHookAccountMetas;\n\n for (let i = 0; i < positionCount.toNumber(); i++) {\n const lowerBinId = minBinId.add(DEFAULT_BIN_PER_POSITION.mul(new BN(i)));\n const upperBinId = lowerBinId\n .add(DEFAULT_BIN_PER_POSITION)\n .sub(new BN(1));\n\n const binArrayAccountMetas = getBinArrayAccountMetasCoverage(\n lowerBinId,\n upperBinId,\n this.pubkey,\n this.program.programId\n );\n\n const binArrayIndexes = getBinArrayIndexesCoverage(\n lowerBinId,\n upperBinId\n );\n\n const [positionPda, _bump] = derivePosition(\n this.pubkey,\n base,\n lowerBinId,\n DEFAULT_BIN_PER_POSITION,\n this.program.programId\n );\n\n const accounts =\n await this.program.provider.connection.getMultipleAccountsInfo([\n ...binArrayAccountMetas.map((acc) => acc.pubkey),\n positionPda,\n ]);\n\n let instructions: TransactionInstruction[] = [];\n\n const binArrayAccounts = accounts.splice(0, binArrayAccountMetas.length);\n\n for (let i = 0; i < binArrayAccountMetas.length; i++) {\n const account = binArrayAccounts[i];\n const pubkey = binArrayAccountMetas[i].pubkey.toBase58();\n const index = binArrayIndexes[i];\n\n if (!account && !appendedInitBinArrayIx.has(pubkey)) {\n totalBinArraysCount = totalBinArraysCount.add(new BN(1));\n totalBinArraysLamports = totalBinArraysLamports.add(BIN_ARRAY_FEE_BN);\n\n instructions.push(\n await this.program.methods\n .initializeBinArray(index)\n .accountsPartial({\n lbPair: this.pubkey,\n binArray: pubkey,\n funder: payer,\n })\n .instruction()\n );\n }\n }\n\n const positionAccount = accounts.pop();\n if (!positionAccount) {\n totalPositionCount = totalPositionCount.add(new BN(1));\n totalPositionLamports = totalPositionLamports.add(POSITION_FEE_BN);\n\n instructions.push(\n await this.program.methods\n .initializePositionByOperator(\n lowerBinId.toNumber(),\n DEFAULT_BIN_PER_POSITION.toNumber(),\n feeOwner,\n lockReleasePoint\n )\n .accountsPartial({\n lbPair: this.pubkey,\n position: positionPda,\n base,\n owner,\n operator,\n operatorTokenX: seederTokenX,\n ownerTokenX,\n systemProgram: SystemProgram.programId,\n payer,\n })\n .instruction()\n );\n }\n\n // Initialize bin arrays and initialize position account in 1 tx\n if (instructions.length > 0) {\n initializeBinArraysAndPositionIxs.push(instructions);\n instructions = [];\n }\n\n const positionDeposited =\n positionAccount &&\n decodeAccount<PositionV2>(\n this.program,\n \"positionV2\",\n positionAccount.data\n )\n .liquidityShares.reduce((total, cur) => total.add(cur), new BN(0))\n .gt(new BN(0));\n\n if (!positionDeposited) {\n let overflowDefaultBinArrayBitmap = false;\n for (const binArrayIndex of binArrayIndexes) {\n if (isOverflowDefaultBinArrayBitmap(binArrayIndex)) {\n if (!this.binArrayBitmapExtension && !appendedInitBinArrayBitmap) {\n initializeBinArraysAndPositionIxs.push(\n await this.program.methods\n .initializeBinArrayBitmapExtension()\n .accountsPartial({\n binArrayBitmapExtension,\n funder: payer,\n lbPair: this.pubkey,\n })\n .instruction()\n );\n\n appendedInitBinArrayBitmap = true;\n binArrayBitmapLamports = binArrayBitmapLamports.add(\n BIN_ARRAY_BITMAP_FEE_BN\n );\n }\n\n overflowDefaultBinArrayBitmap = true;\n }\n }\n\n const cappedUpperBinId = Math.min(\n upperBinId.toNumber(),\n maxBinId.toNumber() - 1\n );\n\n const bins: CompressedBinDepositAmounts = [];\n\n for (let i = lowerBinId.toNumber(); i <= cappedUpperBinId; i++) {\n bins.push({\n binId: i,\n amount: compressedBinDepositAmount.get(i).toNumber(),\n });\n }\n\n instructions.push(\n await this.program.methods\n .addLiquidityOneSidePrecise2(\n {\n bins,\n decompressMultiplier,\n maxAmount: U64_MAX,\n },\n {\n slices,\n }\n )\n .accountsPartial({\n position: positionPda,\n lbPair: this.pubkey,\n binArrayBitmapExtension: overflowDefaultBinArrayBitmap\n ? binArrayBitmapExtension\n : this.program.programId,\n userToken: seederTokenX,\n reserve: this.lbPair.reserveX,\n tokenMint: this.lbPair.tokenXMint,\n sender: operator,\n tokenProgram: this.tokenX.owner,\n })\n .remainingAccounts([\n ...transferHookAccountMetas,\n ...binArrayAccountMetas,\n ])\n .instruction()\n );\n\n // Last position\n if (i + 1 >= positionCount.toNumber() && !finalLoss.isZero()) {\n const finalLossIncludesTransferFee =\n calculateTransferFeeIncludedAmount(\n finalLoss,\n this.tokenX.mint,\n this.clock.epoch.toNumber()\n ).amount;\n\n instructions.push(\n await this.program.methods\n .addLiquidity2(\n {\n amountX: finalLossIncludesTransferFee,\n amountY: new BN(0),\n binLiquidityDist: [\n {\n binId: cappedUpperBinId,\n distributionX: BASIS_POINT_MAX,\n distributionY: BASIS_POINT_MAX,\n },\n ],\n },\n {\n slices,\n }\n )\n .accountsPartial({\n position: positionPda,\n lbPair: this.pubkey,\n binArrayBitmapExtension: overflowDefaultBinArrayBitmap\n ? binArrayBitmapExtension\n : this.program.programId,\n userTokenX: seederTokenX,\n userTokenY: seederTokenY,\n reserveX: this.lbPair.reserveX,\n reserveY: this.lbPair.reserveY,\n tokenXMint: this.lbPair.tokenXMint,\n tokenYMint: this.lbPair.tokenYMint,\n tokenXProgram: this.tokenX.owner,\n tokenYProgram: this.tokenY.owner,\n sender: operator,\n })\n .remainingAccounts([\n ...transferHookAccountMetas,\n ...getBinArrayAccountMetasCoverage(\n new BN(cappedUpperBinId),\n new BN(cappedUpperBinId),\n this.pubkey,\n this.program.programId\n ),\n ])\n .instruction()\n );\n }\n\n addLiquidityIxs.push([\n ComputeBudgetProgram.setComputeUnitLimit({\n units: DEFAULT_ADD_LIQUIDITY_CU,\n }),\n ...instructions,\n ]);\n }\n }\n\n return {\n sendPositionOwnerTokenProveIxs,\n initializeBinArraysAndPositionIxs,\n addLiquidityIxs,\n costBreakdown: {\n tokenOwnerProveAssociatedTokenAccountLamports,\n totalBinArraysCount,\n totalBinArraysLamports,\n totalPositionCount,\n totalPositionLamports,\n binArrayBitmapLamports,\n },\n };\n }\n\n /**\n * The `seedLiquiditySingleBin` function seed liquidity into a single bin.\n * @param\n * - `payer`: The public key of the tx payer.\n * - `base`: Base key\n * - `seedAmount`: Token X lamport amount to be seeded to the pool.\n * - `price`: TokenX/TokenY Price in UI format\n * - `roundingUp`: Whether to round up the price\n * - `positionOwner`: The owner of the position\n * - `feeOwner`: Position fee owner\n * - `operator`: Operator of the position. Operator able to manage the position on behalf of the position owner. However, liquidity withdrawal issue by the operator can only send to the position owner.\n * - `lockReleasePoint`: The lock release point of the position.\n * - `shouldSeedPositionOwner` (optional): Whether to send 1 lamport amount of token X to the position owner to prove ownership.\n *\n * The returned instructions need to be executed sequentially if it was separated into multiple transactions.\n * @returns {Promise<SeedLiquiditySingleBinResponse>}\n */\n public async seedLiquiditySingleBin(\n payer: PublicKey,\n base: PublicKey,\n seedAmount: BN,\n price: number,\n roundingUp: boolean,\n positionOwner: PublicKey,\n feeOwner: PublicKey,\n operator: PublicKey,\n lockReleasePoint: BN,\n shouldSeedPositionOwner: boolean = false\n ): Promise<SeedLiquiditySingleBinResponse> {\n let tokenOwnerProveAssociatedTokenAccountLamports = new BN(0);\n let totalPositionCount = new BN(0);\n let totalPositionLamports = new BN(0);\n let totalBinArraysCount = new BN(0);\n let totalBinArraysLamports = new BN(0);\n let binArrayBitmapLamports = new BN(0);\n\n const pricePerLamport = DLMM.getPricePerLamport(\n this.tokenX.mint.decimals,\n this.tokenY.mint.decimals,\n price\n );\n const binIdNumber = DLMM.getBinIdFromPrice(\n pricePerLamport,\n this.lbPair.binStep,\n !roundingUp\n );\n\n const binId = new BN(binIdNumber);\n\n const [positionPda] = derivePosition(\n this.pubkey,\n base,\n binId,\n new BN(1),\n this.program.programId\n );\n\n const binArrayIndex = binIdToBinArrayIndex(binId);\n const [binArrayKey] = deriveBinArray(\n this.pubkey,\n binArrayIndex,\n this.program.programId\n );\n\n const preInstructions = [];\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 operator,\n this.tokenX.owner,\n payer\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenY.publicKey,\n operator,\n this.tokenY.owner,\n payer\n ),\n ]);\n\n // create userTokenX and userTokenY accounts\n createPayerTokenXIx && preInstructions.push(createPayerTokenXIx);\n createPayerTokenYIx && preInstructions.push(createPayerTokenYIx);\n\n let [binArrayBitmapExtension] = deriveBinArrayBitmapExtension(\n this.pubkey,\n this.program.programId\n );\n\n const [binArrayAccount, positionAccount, bitmapExtensionAccount] =\n await this.program.provider.connection.getMultipleAccountsInfo([\n binArrayKey,\n positionPda,\n binArrayBitmapExtension,\n ]);\n\n if (isOverflowDefaultBinArrayBitmap(binArrayIndex)) {\n if (!bitmapExtensionAccount) {\n preInstructions.push(\n await this.program.methods\n .initializeBinArrayBitmapExtension()\n .accountsPartial({\n binArrayBitmapExtension,\n funder: payer,\n lbPair: this.pubkey,\n })\n .instruction()\n );\n\n binArrayBitmapLamports = binArrayBitmapLamports.add(\n BIN_ARRAY_BITMAP_FEE_BN\n );\n }\n } else {\n binArrayBitmapExtension = this.program.programId;\n }\n\n const operatorTokenX = getAssociatedTokenAddressSync(\n this.lbPair.tokenXMint,\n operator,\n true,\n this.tokenX.owner\n );\n const positionOwnerTokenX = getAssociatedTokenAddressSync(\n this.lbPair.tokenXMint,\n positionOwner,\n true,\n this.tokenX.owner\n );\n\n if (shouldSeedPositionOwner) {\n const positionOwnerTokenXAccount =\n await this.program.provider.connection.getAccountInfo(\n positionOwnerTokenX\n );\n\n const proveAmount = calculateTransferFeeIncludedAmount(\n new BN(1),\n this.tokenX.mint,\n this.clock.epoch.toNumber()\n ).amount;\n\n if (positionOwnerTokenXAccount) {\n const account = unpackAccount(\n positionOwnerTokenX,\n positionOwnerTokenXAccount,\n this.tokenX.owner\n );\n\n if (account.amount == BigInt(0)) {\n // send 1 lamport to position owner token X to prove ownership\n const transferIx = createTransferCheckedInstruction(\n operatorTokenX,\n this.lbPair.tokenXMint,\n positionOwnerTokenX,\n operator,\n BigInt(proveAmount.toString()),\n this.tokenX.mint.decimals,\n [],\n this.tokenX.owner\n );\n transferIx.keys.push(...this.tokenX.transferHookAccountMetas);\n preInstructions.push(transferIx);\n }\n } else {\n const createPositionOwnerTokenXIx =\n createAssociatedTokenAccountIdempotentInstruction(\n payer,\n positionOwnerTokenX,\n positionOwner,\n this.lbPair.tokenXMint,\n this.tokenX.owner\n );\n preInstructions.push(createPositionOwnerTokenXIx);\n\n // send 1 lamport to position owner token X to prove ownership\n const transferIx = createTransferCheckedInstruction(\n operatorTokenX,\n this.lbPair.tokenXMint,\n positionOwnerTokenX,\n operator,\n BigInt(proveAmount.toString()),\n this.tokenX.mint.decimals,\n [],\n this.tokenX.owner\n );\n transferIx.keys.push(...this.tokenX.transferHookAccountMetas);\n preInstructions.push(transferIx);\n\n tokenOwnerProveAssociatedTokenAccountLamports =\n tokenOwnerProveAssociatedTokenAccountLamports.add(\n TOKEN_ACCOUNT_FEE_BN\n );\n }\n }\n\n if (!binArrayAccount) {\n preInstructions.push(\n await this.program.methods\n .initializeBinArray(binArrayIndex)\n .accountsPartial({\n binArray: binArrayKey,\n funder: payer,\n lbPair: this.pubkey,\n })\n .instruction()\n );\n\n totalBinArraysCount = totalBinArraysCount.add(new BN(1));\n totalBinArraysLamports = totalBinArraysLamports.add(BIN_ARRAY_FEE_BN);\n }\n\n if (!positionAccount) {\n preInstructions.push(\n await this.program.methods\n .initializePositionByOperator(\n binId.toNumber(),\n 1,\n feeOwner,\n lockReleasePoint\n )\n .accountsPartial({\n payer,\n base,\n position: positionPda,\n lbPair: this.pubkey,\n owner: positionOwner,\n operator,\n operatorTokenX,\n ownerTokenX: positionOwnerTokenX,\n })\n .instruction()\n );\n\n totalPositionCount = totalPositionCount.add(new BN(1));\n totalPositionLamports = totalPositionLamports.add(POSITION_FEE_BN);\n }\n\n const slices: RemainingAccountsInfoSlice[] = [\n {\n accountsType: {\n transferHookX: {},\n },\n length: this.tokenX.transferHookAccountMetas.length,\n },\n ];\n const transferHookAccountMetas = this.tokenX.transferHookAccountMetas;\n\n const binLiquidityDist: BinLiquidityDistribution = {\n binId: binIdNumber,\n distributionX: BASIS_POINT_MAX,\n distributionY: BASIS_POINT_MAX,\n };\n\n const seedAmountIncludeTransferFee = calculateTransferFeeIncludedAmount(\n seedAmount,\n this.tokenX.mint,\n this.clock.epoch.toNumber()\n ).amount;\n\n const addLiquidityParams: LiquidityParameter = {\n amountX: seedAmountIncludeTransferFee,\n amountY: new BN(0),\n binLiquidityDist: [binLiquidityDist],\n };\n\n const depositLiquidityIx = await this.program.methods\n .addLiquidity2(addLiquidityParams, {\n slices,\n })\n .accountsPartial({\n position: positionPda,\n lbPair: this.pubkey,\n binArrayBitmapExtension,\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 sender: operator,\n tokenXProgram: this.tokenX.owner,\n tokenYProgram: this.tokenY.owner,\n })\n .remainingAccounts([\n ...transferHookAccountMetas,\n {\n pubkey: binArrayKey,\n isSigner: false,\n isWritable: true,\n },\n ])\n .instruction();\n\n const instructions = [...preInstructions, depositLiquidityIx];\n return {\n instructions,\n costBreakdown: {\n tokenOwnerProveAssociatedTokenAccountLamports,\n totalBinArraysCount,\n totalBinArraysLamports,\n totalPositionCount,\n totalPositionLamports,\n binArrayBitmapLamports,\n },\n };\n }\n\n /**\n * Initializes bin arrays for the given bin array indexes if it wasn't initialized.\n *\n * @param {BN[]} binArrayIndexes - An array of bin array indexes to initialize.\n * @param {PublicKey} funder - The public key of the funder.\n * @return {Promise<TransactionInstruction[]>} An array of transaction instructions to initialize the bin arrays.\n */\n public async initializeBinArrays(binArrayIndexes: BN[], funder: PublicKey) {\n const ixs: TransactionInstruction[] = [];\n\n for (const idx of binArrayIndexes) {\n const [binArray] = deriveBinArray(\n this.pubkey,\n idx,\n this.program.programId\n );\n\n const binArrayAccount =\n await this.program.provider.connection.getAccountInfo(binArray);\n\n if (binArrayAccount === null) {\n const initBinArrayIx = await this.program.methods\n .initializeBinArray(idx)\n .accountsPartial({\n binArray,\n funder,\n lbPair: this.pubkey,\n })\n .instruction();\n ixs.push(initBinArrayIx);\n }\n }\n\n if (ixs.length > 0) {\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n ixs,\n funder\n );\n\n ixs.unshift(setCUIx);\n }\n\n return ixs;\n }\n\n /**\n *\n * @param\n * - `lowerBinId`: Lower bin ID of the position. This represent the lowest price of the position\n * - `positionWidth`: Width of the position. This will decide the upper bin id of the position, which represents the highest price of the position. UpperBinId = lowerBinId + positionWidth\n * - `owner`: Owner of the position.\n * - `operator`: Operator of the position. Operator able to manage the position on behalf of the position owner. However, liquidity withdrawal issue by the operator can only send to the position owner.\n * - `base`: Base key\n * - `feeOwner`: Owner of the fees earned by the position.\n * - `payer`: Payer for the position account rental.\n * - `lockReleasePoint`: The lock release point of the position.\n * @returns\n */\n public async initializePositionByOperator({\n lowerBinId,\n positionWidth,\n owner,\n feeOwner,\n base,\n operator,\n payer,\n lockReleasePoint,\n }: {\n lowerBinId: BN;\n positionWidth: BN;\n owner: PublicKey;\n feeOwner: PublicKey;\n operator: PublicKey;\n payer: PublicKey;\n base: PublicKey;\n lockReleasePoint: BN;\n }): Promise<Transaction> {\n const [positionPda, _bump] = derivePosition(\n this.pubkey,\n base,\n lowerBinId,\n positionWidth,\n this.program.programId\n );\n\n const operatorTokenX = getAssociatedTokenAddressSync(\n this.lbPair.tokenXMint,\n operator,\n true,\n this.tokenX.owner\n );\n\n const ownerTokenX = getAssociatedTokenAddressSync(\n this.lbPair.tokenXMint,\n owner,\n true,\n this.tokenY.owner\n );\n\n const initializePositionByOperatorTx = await this.program.methods\n .initializePositionByOperator(\n lowerBinId.toNumber(),\n DEFAULT_BIN_PER_POSITION.toNumber(),\n feeOwner,\n lockReleasePoint\n )\n .accountsPartial({\n lbPair: this.pubkey,\n position: positionPda,\n base,\n operator,\n owner,\n ownerTokenX,\n operatorTokenX,\n payer,\n })\n .transaction();\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n return new Transaction({\n feePayer: operator,\n blockhash,\n lastValidBlockHeight,\n }).add(initializePositionByOperatorTx);\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[]>} Array of claim swap fee and LM reward transactions.\n */\n public async claimAllRewards({\n owner,\n positions,\n }: {\n owner: PublicKey;\n positions: LbPosition[];\n }): Promise<Transaction[]> {\n // Filter only position with fees and/or rewards\n positions = positions.filter(\n ({ positionData: { feeX, feeY, rewardOne, rewardTwo } }) =>\n !feeX.isZero() ||\n !feeY.isZero() ||\n !rewardOne.isZero() ||\n !rewardTwo.isZero()\n );\n\n const claimAllSwapFeeTxs = (\n await Promise.all(\n positions.map(async (position) => {\n return await this.createClaimSwapFeeMethod({\n owner,\n position,\n });\n })\n )\n ).flat();\n\n const claimAllLMTxs = (\n await Promise.all(\n positions.map(async (position) => {\n return await this.createClaimBuildMethod({\n owner,\n position,\n });\n })\n )\n ).flat();\n\n const transactions = chunks(\n [...claimAllSwapFeeTxs, ...claimAllLMTxs],\n MAX_CLAIM_ALL_ALLOWED\n );\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return Promise.all(\n transactions.map(async (txs) => {\n const instructions = txs.flatMap((i) => i.instructions);\n\n const setCUIx = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n instructions,\n owner\n );\n\n const transaction = new Transaction({\n feePayer: owner,\n blockhash,\n lastValidBlockHeight,\n }).add(setCUIx, ...instructions);\n\n return transaction;\n })\n );\n }\n\n public canSyncWithMarketPrice(marketPrice: number, activeBinId: number) {\n const marketPriceBinId = this.getBinIdFromPrice(\n Number(\n DLMM.getPricePerLamport(\n this.tokenX.mint.decimals,\n this.tokenY.mint.decimals,\n marketPrice\n )\n ),\n false\n );\n\n const marketPriceBinArrayIndex = binIdToBinArrayIndex(\n new BN(marketPriceBinId)\n );\n\n const swapForY = marketPriceBinId < activeBinId;\n const toBinArrayIndex = findNextBinArrayIndexWithLiquidity(\n swapForY,\n new BN(activeBinId),\n this.lbPair,\n this.binArrayBitmapExtension?.account ?? null\n );\n if (toBinArrayIndex === null) return true;\n\n return swapForY\n ? marketPriceBinArrayIndex.gt(toBinArrayIndex)\n : marketPriceBinArrayIndex.lt(toBinArrayIndex);\n }\n\n /**\n * The `syncWithMarketPrice` function is used to sync the liquidity pool with the market price.\n * @param\n * - `marketPrice`: The market price to sync with.\n * - `owner`: The public key of the owner of the liquidity pool.\n * @returns {Promise<Transaction>}\n */\n public async syncWithMarketPrice(marketPrice: number, owner: PublicKey) {\n const marketPriceBinId = this.getBinIdFromPrice(\n Number(\n DLMM.getPricePerLamport(\n this.tokenX.mint.decimals,\n this.tokenY.mint.decimals,\n marketPrice\n )\n ),\n false\n );\n const activeBin = await this.getActiveBin();\n const activeBinId = activeBin.binId;\n\n if (!this.canSyncWithMarketPrice(marketPrice, activeBinId)) {\n throw new Error(\n \"Unable to sync with market price due to bin with liquidity between current and market price bin\"\n );\n }\n\n const fromBinArrayIndex = binIdToBinArrayIndex(new BN(activeBinId));\n\n const swapForY = marketPriceBinId < activeBinId;\n const toBinArrayIndex = findNextBinArrayIndexWithLiquidity(\n swapForY,\n new BN(activeBinId),\n this.lbPair,\n this.binArrayBitmapExtension?.account ?? null\n );\n const marketPriceBinArrayIndex = binIdToBinArrayIndex(\n new BN(marketPriceBinId)\n );\n const accountsToFetch = [];\n const binArrayBitMapExtensionPubkey = isOverflowDefaultBinArrayBitmap(\n new BN(marketPriceBinArrayIndex)\n )\n ? deriveBinArrayBitmapExtension(this.pubkey, this.program.programId)[0]\n : null;\n\n binArrayBitMapExtensionPubkey &&\n accountsToFetch.push(binArrayBitMapExtensionPubkey);\n const [fromBinArrayPubkey] = deriveBinArray(\n this.pubkey,\n fromBinArrayIndex,\n this.program.programId\n );\n accountsToFetch.push(fromBinArrayPubkey);\n const toBinArrayPubkey = (() => {\n if (!toBinArrayIndex) return null;\n\n const [toBinArrayPubkey] = deriveBinArray(\n this.pubkey,\n toBinArrayIndex,\n this.program.programId\n );\n\n accountsToFetch.push(toBinArrayPubkey);\n\n return toBinArrayPubkey;\n })();\n\n const binArrayAccounts =\n await this.program.provider.connection.getMultipleAccountsInfo(\n accountsToFetch\n );\n\n const preInstructions: TransactionInstruction[] = [];\n let fromBinArray: PublicKey | null = null;\n let toBinArray: PublicKey | null = null;\n let binArrayBitmapExtension: PublicKey | null = null;\n if (binArrayBitMapExtensionPubkey) {\n binArrayBitmapExtension = binArrayBitMapExtensionPubkey;\n if (!binArrayAccounts?.[0]) {\n const initializeBitmapExtensionIx = await this.program.methods\n .initializeBinArrayBitmapExtension()\n .accountsPartial({\n binArrayBitmapExtension: binArrayBitMapExtensionPubkey,\n funder: owner,\n lbPair: this.pubkey,\n })\n .instruction();\n preInstructions.push(initializeBitmapExtensionIx);\n }\n }\n if (!!binArrayAccounts?.[1]) {\n fromBinArray = fromBinArrayPubkey;\n }\n\n if (!!binArrayAccounts?.[2] && !!toBinArrayIndex) {\n toBinArray = toBinArrayPubkey;\n }\n\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n const syncWithMarketPriceTx = await this.program.methods\n .goToABin(marketPriceBinId)\n .accountsPartial({\n lbPair: this.pubkey,\n binArrayBitmapExtension,\n fromBinArray,\n toBinArray,\n })\n .preInstructions(preInstructions)\n .transaction();\n\n return new Transaction({\n feePayer: owner,\n blockhash,\n lastValidBlockHeight,\n }).add(syncWithMarketPriceTx);\n }\n\n public async getMaxPriceInBinArrays(\n binArrayAccounts: BinArrayAccount[]\n ): Promise<string> {\n // Don't mutate\n const sortedBinArrays = [...binArrayAccounts].sort(\n ({ account: { index: indexA } }, { account: { index: indexB } }) =>\n indexA.toNumber() - indexB.toNumber()\n );\n let count = sortedBinArrays.length - 1;\n let binPriceWithLastLiquidity;\n while (count >= 0) {\n const binArray = sortedBinArrays[count];\n if (binArray) {\n const bins = binArray.account.bins;\n if (bins.every(({ amountX }) => amountX.isZero())) {\n count--;\n } else {\n const lastBinWithLiquidityIndex = bins.findLastIndex(\n ({ amountX }) => !amountX.isZero()\n );\n binPriceWithLastLiquidity =\n bins[lastBinWithLiquidityIndex].price.toString();\n count = -1;\n }\n }\n }\n\n return this.fromPricePerLamport(\n Number(binPriceWithLastLiquidity) / (2 ** 64 - 1)\n );\n }\n\n /**\n *\n * @param swapInitiator Address of the swap initiator\n * @returns\n */\n public isSwapDisabled(swapInitiator: PublicKey) {\n if (this.lbPair.status == PairStatus.Disabled) {\n return true;\n }\n\n if (this.lbPair.pairType == PairType.Permissioned) {\n const currentPoint =\n this.lbPair.activationType == ActivationType.Slot\n ? this.clock.slot\n : this.clock.unixTimestamp;\n\n const preActivationSwapPoint = this.lbPair.activationPoint.sub(\n this.lbPair.preActivationDuration\n );\n\n const activationPoint =\n !this.lbPair.preActivationSwapAddress.equals(PublicKey.default) &&\n this.lbPair.preActivationSwapAddress.equals(swapInitiator)\n ? preActivationSwapPoint\n : this.lbPair.activationPoint;\n\n if (currentPoint < activationPoint) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Decrease the length of a position. The segment of the position to be decreased must be empty.\n *\n * @param position The public key of the position to decrease.\n * @param side The side of the position to decrease.\n * @param length The amount of length to decrease.\n * @param allowParallelExecution If true, the instructions will be grouped to allow parallel execution. Otherwise, the instructions will be executed sequentially.\n * @returns An array of transactions if allowParallelExecution is true. Otherwise, an empty array.\n */\n public async decreasePositionLength(\n position: PublicKey,\n side: ResizeSide,\n length: BN,\n allowParallelExecution = true\n ) {\n const positionAccount =\n await this.program.provider.connection.getAccountInfo(position);\n\n const positionState = wrapPosition(this.program, position, positionAccount);\n\n const newWidth = positionState.width().sub(length);\n\n // 1. Cap if it exceeds the min position length\n if (newWidth.lte(new BN(0))) {\n // Position must have at least one bin\n length = length.sub(newWidth.abs()).subn(1);\n }\n\n const groupedIxs: TransactionInstruction[][] = [];\n const promises = [];\n\n // 2. Split into multiple decrease position length ix to bypass stack size limit\n for (let i = length.toNumber(); i > 0; i -= MAX_RESIZE_LENGTH.toNumber()) {\n const lengthToReduce = Math.min(i, MAX_RESIZE_LENGTH.toNumber());\n\n const setCuIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: getDefaultExtendPositionCU(side),\n });\n\n const ixPromise = this.program.methods\n .decreasePositionLength(lengthToReduce, Number(side))\n .accountsPartial({\n position,\n owner: positionState.owner(),\n rentReceiver: positionState.owner(),\n })\n .instruction()\n .then((decreasePositionLengthIx) => {\n if (allowParallelExecution) {\n // Trick to make each decrease position length transaction to be unique to allow parallel execution\n decreasePositionLengthIx.keys.push({\n isSigner: false,\n isWritable: false,\n pubkey: PublicKey.unique(),\n });\n }\n const ixs = [setCuIx, decreasePositionLengthIx];\n groupedIxs.push(ixs);\n });\n\n promises.push(ixPromise);\n }\n\n await Promise.all(promises);\n\n if (groupedIxs.length > 0) {\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return groupedIxs.map((ixs) => {\n return new Transaction({\n feePayer: positionState.owner(),\n blockhash,\n lastValidBlockHeight,\n }).add(...ixs);\n });\n }\n }\n\n /**\n * Expand the position bin range to the left or right (lower or upper).\n *\n * @param position The address of the position to increase the length of.\n * @param side The side of the position to increase the length of. Must be either\n * ResizeSide.Lower or ResizeSide.Upper.\n * @param length The number of bins to increase the length of. Position length after increase must be <= 1400.\n * @param funder The address to account rental and transaction fee.\n * @param allowParallelExecution Whether to allow parallel execution of the transaction.\n * @returns The transaction to execute this instruction.\n */\n public async increasePositionLength(\n position: PublicKey,\n side: ResizeSide,\n length: BN,\n funder: PublicKey,\n allowParallelExecution = true\n ) {\n const positionAccount =\n await this.program.provider.connection.getAccountInfo(position);\n\n const positionState = wrapPosition(this.program, position, positionAccount);\n\n const newWidth = positionState.width().add(length);\n\n // 1. Cap if it exceeds the max position length\n if (newWidth.gt(POSITION_MAX_LENGTH)) {\n length = newWidth.sub(POSITION_MAX_LENGTH);\n }\n\n const groupedIxs = await this.increasePositionLengthIxs(\n position,\n side,\n length,\n funder,\n positionState.owner(),\n true,\n allowParallelExecution\n );\n\n if (groupedIxs.length > 0) {\n const { blockhash, lastValidBlockHeight } =\n await this.program.provider.connection.getLatestBlockhash(\"confirmed\");\n\n return groupedIxs.map((ixs) => {\n return new Transaction({\n feePayer: funder,\n blockhash,\n lastValidBlockHeight,\n }).add(...ixs);\n });\n }\n }\n\n public async simulateRebalancePositionWithBalancedStrategy(\n positionAddress: PublicKey,\n positionData: PositionData,\n strategy: StrategyType,\n topUpAmountX: BN,\n topUpAmountY: BN,\n xWithdrawBps: BN,\n yWithdrawBps: BN\n ) {\n const rebalancePosition = await RebalancePosition.create({\n program: this.program,\n positionAddress,\n positionData,\n shouldClaimFee: true,\n shouldClaimReward: true,\n pairAddress: this.pubkey,\n });\n\n const rebalanceStrategyBuilder = new BalancedStrategyBuilder(\n new BN(rebalancePosition.lbPair.activeId),\n new BN(rebalancePosition.lbPair.binStep),\n positionData,\n topUpAmountX,\n topUpAmountY,\n xWithdrawBps,\n yWithdrawBps,\n strategy\n );\n\n return this.simulateRebalancePositionWithStrategy(\n rebalancePosition,\n rebalanceStrategyBuilder\n );\n }\n\n private async simulateRebalancePositionWithStrategy(\n rebalancePosition: RebalancePosition,\n rebalanceStrategy: RebalanceStrategyBuilder\n ): Promise<\n RebalancePositionResponse & RebalancePositionBinArrayRentalCostQuote\n > {\n const { deposits, withdraws } =\n rebalanceStrategy.buildRebalanceStrategyParameters();\n\n const simulationResult = await rebalancePosition.simulateRebalance(\n this.program.provider.connection,\n new BN(this.lbPair.binStep),\n new BN(this.tokenX.mint.decimals),\n new BN(this.tokenY.mint.decimals),\n withdraws,\n deposits\n );\n\n const binArrayQuoteResult = await this.quoteBinArrayAccountsRentalCost(\n simulationResult.depositParams,\n simulationResult.withdrawParams,\n new BN(rebalancePosition.lbPair.activeId)\n );\n\n return {\n rebalancePosition,\n simulationResult,\n ...binArrayQuoteResult,\n };\n }\n\n private async quoteBinArrayAccountsRentalCost(\n deposits: RebalanceAddLiquidityParam[],\n withdraws: RebalanceRemoveLiquidityParam[],\n activeId: BN\n ): Promise<{\n binArrayExistence: Set<string>;\n binArrayCount: number;\n binArrayCost: number;\n bitmapExtensionCost: number;\n }> {\n const { binArrayBitmap, binArrayIndexes } =\n getRebalanceBinArrayIndexesAndBitmapCoverage(\n deposits,\n withdraws,\n activeId.toNumber(),\n this.pubkey,\n this.program.programId\n );\n\n const binArrayPublicKeys = binArrayIndexes.map((index) => {\n const [binArrayPubkey] = deriveBinArray(\n this.pubkey,\n index,\n this.program.programId\n );\n return binArrayPubkey;\n });\n\n const accountPublicKeys = [...binArrayPublicKeys];\n if (!binArrayBitmap.equals(PublicKey.default)) {\n accountPublicKeys.push(binArrayBitmap);\n }\n\n const accounts = await chunkedGetMultipleAccountInfos(\n this.program.provider.connection,\n binArrayPublicKeys\n );\n\n const binArrayAccounts = accounts.splice(0, binArrayPublicKeys.length);\n\n let binArrayCount = 0;\n let bitmapExtensionCost = 0;\n\n const binArraySet = new Set<string>();\n\n for (let i = 0; i < binArrayAccounts.length; i++) {\n const binArrayAccount = binArrayAccounts[i];\n const binArrayPubkey = binArrayPublicKeys[i];\n if (!binArrayAccount) {\n binArrayCount++;\n } else {\n binArraySet.add(binArrayPubkey.toBase58());\n }\n }\n\n if (!binArrayBitmap.equals(PublicKey.default)) {\n const bitmapAccount = accounts.pop();\n if (!bitmapAccount) {\n bitmapExtensionCost = BIN_ARRAY_BITMAP_FEE;\n }\n }\n\n return {\n binArrayCost: binArrayCount * BIN_ARRAY_FEE,\n binArrayCount,\n binArrayExistence: binArraySet,\n bitmapExtensionCost,\n };\n }\n\n /**\n * Simulates a rebalance operation on a position without actually executing it. It's recommended to use simulateRebalancePositionWithXStrategy instead unless you know what you're doing.\n *\n * @param positionAddress The address of the position to simulate rebalancing.\n * @param positionData The PositionData object associated with the position.\n * @param shouldClaimFee True if the fee should be claimed during rebalancing.\n * @param shouldClaimReward True if the reward should be claimed during rebalancing.\n * @param deposits An array of RebalanceWithDeposit objects representing the deposits to simulate.\n * @param withdraws An array of RebalanceWithWithdraw objects representing the withdraws to simulate.\n */\n public async simulateRebalancePosition(\n positionAddress: PublicKey,\n positionData: PositionData,\n shouldClaimFee: boolean,\n shouldClaimReward: boolean,\n deposits: RebalanceWithDeposit[],\n withdraws: RebalanceWithWithdraw[]\n ): Promise<\n RebalancePositionResponse & RebalancePositionBinArrayRentalCostQuote\n > {\n const rebalancePosition = await RebalancePosition.create({\n program: this.program,\n positionAddress,\n positionData,\n shouldClaimFee,\n shouldClaimReward,\n pairAddress: this.pubkey,\n });\n\n const simulationResult = await rebalancePosition.simulateRebalance(\n this.program.provider.connection,\n new BN(this.lbPair.binStep),\n new BN(this.tokenX.mint.decimals),\n new BN(this.tokenY.mint.decimals),\n withdraws,\n deposits\n );\n\n const binArrayQuoteResult = await this.quoteBinArrayAccountsRentalCost(\n simulationResult.depositParams,\n simulationResult.withdrawParams,\n new BN(rebalancePosition.lbPair.activeId)\n );\n\n return {\n rebalancePosition,\n simulationResult,\n ...binArrayQuoteResult,\n };\n }\n\n /**\n * Rebalances a position and claim rewards if specified.\n *\n * @param rebalancePositionResponse The result of `simulateRebalancePosition`.\n * @param maxActiveBinSlippage The maximum slippage allowed for active bin selection.\n * @param slippage The slippage tolerance percentage for rebalncing.\n *\n * @returns An object containing the instructions to initialize new bin arrays and the instruction to rebalance the position.\n */\n public async rebalancePosition(\n rebalancePositionResponse: RebalancePositionResponse,\n maxActiveBinSlippage: BN,\n rentPayer?: PublicKey,\n slippage: number = 100\n ) {\n const { rebalancePosition, simulationResult } = rebalancePositionResponse;\n\n const { lbPair, shouldClaimFee, shouldClaimReward, owner, address } =\n rebalancePosition;\n const { depositParams, withdrawParams } = simulationResult;\n\n const activeId = new BN(lbPair.activeId);\n\n const { slices, accounts: transferHookAccounts } =\n this.getPotentialToken2022IxDataAndAccounts(ActionType.Liquidity);\n\n const preInstructions: TransactionInstruction[] = [];\n const harvestRewardRemainingAccountMetas: AccountMeta[] = [];\n\n if (shouldClaimReward) {\n for (const [idx, reward] of this.lbPair.rewardInfos.entries()) {\n if (!reward.mint.equals(PublicKey.default)) {\n const rewardTokenInfo = this.rewards[idx];\n slices.push({\n accountsType: {\n transferHookMultiReward: {\n 0: idx,\n },\n },\n length: rewardTokenInfo.transferHookAccountMetas.length,\n });\n\n transferHookAccounts.push(\n ...rewardTokenInfo.transferHookAccountMetas\n );\n\n const userTokenRewardAddress = getAssociatedTokenAddressSync(\n reward.mint,\n owner,\n true,\n rewardTokenInfo.owner\n );\n\n preInstructions.push(\n createAssociatedTokenAccountIdempotentInstruction(\n owner,\n userTokenRewardAddress,\n owner,\n reward.mint,\n rewardTokenInfo.owner\n )\n );\n\n const rewardVault: AccountMeta = {\n pubkey: reward.vault,\n isSigner: false,\n isWritable: true,\n };\n\n const userTokenReward: AccountMeta = {\n pubkey: userTokenRewardAddress,\n isSigner: false,\n isWritable: true,\n };\n\n const rewardMint: AccountMeta = {\n pubkey: reward.mint,\n isSigner: false,\n isWritable: false,\n };\n\n const rewardTokenProgram: AccountMeta = {\n pubkey: rewardTokenInfo.owner,\n isSigner: false,\n isWritable: false,\n };\n\n harvestRewardRemainingAccountMetas.push(\n rewardVault,\n userTokenReward,\n rewardMint,\n rewardTokenProgram\n );\n }\n }\n }\n\n const initBinArrayInstructions: TransactionInstruction[] = [];\n\n const { binArrayBitmap, binArrayIndexes } =\n getRebalanceBinArrayIndexesAndBitmapCoverage(\n depositParams,\n withdrawParams,\n activeId.toNumber(),\n this.pubkey,\n this.program.programId\n );\n\n const binArrayPublicKeys = binArrayIndexes.map((index) => {\n const [binArrayPubkey] = deriveBinArray(\n this.pubkey,\n index,\n this.program.programId\n );\n return binArrayPubkey;\n });\n\n const binArrayAccounts = await chunkedGetMultipleAccountInfos(\n this.program.provider.connection,\n binArrayPublicKeys\n );\n\n for (let i = 0; i < binArrayAccounts.length; i++) {\n const binArrayAccount = binArrayAccounts[i];\n if (!binArrayAccount) {\n const binArrayPubkey = binArrayPublicKeys[i];\n const binArrayIndex = binArrayIndexes[i];\n const initBinArrayIx = await this.program.methods\n .initializeBinArray(binArrayIndex)\n .accountsPartial({\n binArray: binArrayPubkey,\n funder: owner,\n lbPair: this.pubkey,\n })\n .instruction();\n\n initBinArrayInstructions.push(initBinArrayIx);\n }\n }\n\n if (!binArrayBitmap.equals(PublicKey.default)) {\n const bitmapAccount =\n await this.program.provider.connection.getAccountInfo(binArrayBitmap);\n\n if (!bitmapAccount) {\n const initBitmapExtensionIx = await this.program.methods\n .initializeBinArrayBitmapExtension()\n .accountsPartial({\n binArrayBitmapExtension: binArrayBitmap,\n funder: owner,\n lbPair: this.pubkey,\n })\n .preInstructions([\n ComputeBudgetProgram.setComputeUnitLimit({\n units: DEFAULT_INIT_BIN_ARRAY_CU,\n }),\n ])\n .instruction();\n preInstructions.push(initBitmapExtensionIx);\n }\n }\n\n const [\n { ataPubKey: userTokenX, ix: createUserTokenXIx },\n { ataPubKey: userTokenY, ix: createUserTokenYIx },\n ] = await Promise.all([\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenX.publicKey,\n owner,\n this.tokenX.owner\n ),\n getOrCreateATAInstruction(\n this.program.provider.connection,\n this.tokenY.publicKey,\n owner,\n this.tokenY.owner\n ),\n ]);\n createUserTokenXIx && preInstructions.push(createUserTokenXIx);\n createUserTokenYIx && preInstructions.push(createUserTokenYIx);\n\n slippage = capSlippagePercentage(slippage);\n\n const maxDepositXAmount = getSlippageMaxAmount(\n simulationResult.actualAmountXDeposited,\n slippage\n );\n\n const maxDepositYAmount = getSlippageMaxAmount(\n simulationResult.actualAmountYDeposited,\n slippage\n );\n\n const minWithdrawXAmount = getSlippageMinAmount(\n simulationResult.actualAmountXWithdrawn,\n slippage\n );\n\n const minWithdrawYAmount = getSlippageMinAmount(\n simulationResult.actualAmountYWithdrawn,\n slippage\n );\n\n const postInstructions: Array<TransactionInstruction> = [];\n\n // Add wrapSOL instructions if tokenX or tokenY is NATIVE_MINT\n if (\n this.tokenX.publicKey.equals(NATIVE_MINT) &&\n simulationResult.actualAmountXDeposited.gtn(0) &&\n !this.opt?.skipSolWrappingOperation\n ) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n userTokenX,\n BigInt(simulationResult.actualAmountXDeposited.toString())\n );\n preInstructions.push(...wrapSOLIx);\n }\n\n if (\n this.tokenY.publicKey.equals(NATIVE_MINT) &&\n simulationResult.actualAmountYDeposited.gtn(0) &&\n !this.opt?.skipSolWrappingOperation\n ) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n userTokenY,\n BigInt(simulationResult.actualAmountYDeposited.toString())\n );\n preInstructions.push(...wrapSOLIx);\n }\n\n // Add unwrapSOL instructions if tokenX or tokenY is NATIVE_MINT\n if (\n (this.tokenX.publicKey.equals(NATIVE_MINT) ||\n this.tokenY.publicKey.equals(NATIVE_MINT)) &&\n !this.opt?.skipSolWrappingOperation\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const instruction = await this.program.methods\n .rebalanceLiquidity(\n {\n adds: depositParams,\n removes: withdrawParams,\n activeId: activeId.toNumber(),\n shouldClaimFee,\n shouldClaimReward,\n maxActiveBinSlippage: maxActiveBinSlippage.toNumber(),\n maxDepositXAmount,\n maxDepositYAmount,\n minWithdrawXAmount,\n minWithdrawYAmount,\n shrinkMode: ShrinkMode.ShrinkBoth,\n padding: REBALANCE_POSITION_PADDING,\n },\n {\n slices,\n }\n )\n .accountsPartial({\n lbPair: this.pubkey,\n binArrayBitmapExtension: binArrayBitmap,\n position: address,\n owner,\n userTokenX,\n userTokenY,\n reserveX: this.lbPair.reserveX,\n reserveY: this.lbPair.reserveY,\n tokenXMint: this.tokenX.publicKey,\n tokenYMint: this.tokenY.publicKey,\n tokenXProgram: this.tokenX.owner,\n tokenYProgram: this.tokenY.owner,\n memoProgram: MEMO_PROGRAM_ID,\n rentPayer: rentPayer ?? owner,\n })\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(\n binArrayPublicKeys.map((pubkey) => {\n return {\n pubkey,\n isSigner: false,\n isWritable: true,\n };\n })\n )\n .instruction();\n\n const setCUIX = await getEstimatedComputeUnitIxWithBuffer(\n this.program.provider.connection,\n [instruction],\n owner\n );\n\n const rebalancePositionInstruction = [\n setCUIX,\n ...preInstructions,\n instruction,\n ...postInstructions,\n ];\n\n return {\n initBinArrayInstructions,\n rebalancePositionInstruction,\n };\n }\n\n /**\n * Create an extended empty position.\n *\n * @param lowerBinid The lowest bin of the position.\n * @param upperBinId The highest bin of the position.\n * @param position The public key of the position.\n * @param owner The owner of the position.\n * @returns The instructions to create the extended empty position.\n */\n public async createExtendedEmptyPosition(\n lowerBinid: number,\n upperBinId: number,\n position: PublicKey,\n owner: PublicKey\n ) {\n const positionWidth = upperBinId - lowerBinid + 1;\n const basePositionWidth = Math.min(\n positionWidth,\n DEFAULT_BIN_PER_POSITION.toNumber()\n );\n\n const ixs = await this.createInitAndExtendPositionIx(\n lowerBinid,\n upperBinId,\n basePositionWidth,\n owner,\n position\n );\n\n const latestBlockhashInfo =\n await this.program.provider.connection.getLatestBlockhash();\n\n const tx = new Transaction({\n ...latestBlockhashInfo,\n feePayer: owner,\n }).add(...ixs);\n\n return tx;\n }\n\n private async createInitAndExtendPositionIx(\n lowerBinId: number,\n upperBinId: number,\n basePositionWidth: number,\n user: PublicKey,\n position: PublicKey\n ) {\n const createPositionIx = await this.program.methods\n .initializePosition(lowerBinId, basePositionWidth)\n .accountsPartial({\n payer: user,\n position,\n lbPair: this.pubkey,\n owner: user,\n })\n .instruction();\n\n const extendedBinCount = getExtendedPositionBinCount(\n new BN(lowerBinId),\n new BN(upperBinId)\n );\n\n if (extendedBinCount.gt(new BN(0))) {\n const extendPositionIxs = await this.increasePositionLengthIxs(\n position,\n ResizeSide.Upper,\n extendedBinCount,\n user,\n user,\n false,\n false\n );\n\n const extendPositionDefaultCU =\n getDefaultExtendPositionCU(ResizeSide.Upper) *\n extendedBinCount.toNumber();\n\n return [\n ComputeBudgetProgram.setComputeUnitLimit({\n units: Math.min(\n DEFAULT_INIT_POSITION_CU + extendPositionDefaultCU,\n 1_400_000\n ),\n }),\n createPositionIx,\n ...extendPositionIxs.flat(),\n ];\n } else {\n return [\n ComputeBudgetProgram.setComputeUnitLimit({\n units: DEFAULT_INIT_POSITION_CU,\n }),\n createPositionIx,\n ];\n }\n }\n\n private async increasePositionLengthIxs(\n position: PublicKey,\n side: ResizeSide,\n length: BN,\n funder: PublicKey,\n positionOwner: PublicKey,\n includeSetCuIx = true,\n allowParallelExecution = true\n ) {\n // Split into multiple increase position length ix to bypass stack size limit\n const groupedIxs: TransactionInstruction[][] = [];\n const promises = [];\n\n for (let i = 0; i < length.toNumber(); i += MAX_RESIZE_LENGTH.toNumber()) {\n const lengthToAdd = Math.min(\n length.toNumber() - i,\n MAX_RESIZE_LENGTH.toNumber()\n );\n\n // Estimate CU might off due to the CU might higher and higher as the position length increase. However, simulate CU always based on current position length.\n const setCuIx = ComputeBudgetProgram.setComputeUnitLimit({\n units: getDefaultExtendPositionCU(side),\n });\n\n const ixPromise = this.program.methods\n .increasePositionLength(lengthToAdd, Number(side))\n .accountsPartial({\n lbPair: this.pubkey,\n position,\n owner: positionOwner,\n funder,\n })\n .instruction()\n .then((increasePositionLengthIx) => {\n if (allowParallelExecution) {\n // Trick to make each increase position length transaction to be unique to allow parallel execution\n increasePositionLengthIx.keys.push({\n isSigner: false,\n isWritable: false,\n pubkey: PublicKey.unique(),\n });\n }\n\n const ixs = [increasePositionLengthIx];\n\n if (includeSetCuIx) {\n ixs.unshift(setCuIx);\n }\n\n groupedIxs.push(ixs);\n });\n\n promises.push(ixPromise);\n }\n\n await Promise.all(promises);\n return groupedIxs;\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([binArrayLbPairFilter(lbPairPubkey)]);\n }\n\n private static async processPosition(\n program: ClmmProgram,\n lbPair: LbPair,\n clock: Clock,\n position: IPosition,\n baseMint: Mint,\n quoteMint: Mint,\n rewardMint0: Mint | null,\n rewardMint1: Mint | null,\n binArrayMap: Map<String, BinArray>\n ): Promise<PositionData | null> {\n const lbPairKey = position.lbPair();\n const lowerBinId = position.lowerBinId();\n const upperBinId = position.upperBinId();\n\n const posShares = position.liquidityShares();\n const lastUpdatedAt = position.lastUpdatedAt();\n const feeInfos = position.feeInfos();\n\n const totalClaimedFeeXAmount = position.totalClaimedFeeXAmount();\n const totalClaimedFeeYAmount = position.totalClaimedFeeYAmount();\n\n const positionRewardInfos = position.rewardInfos();\n\n const feeOwner = position.feeOwner();\n\n const bins = this.getBinsBetweenLowerAndUpperBound(\n lbPairKey,\n lbPair,\n lowerBinId.toNumber(),\n upperBinId.toNumber(),\n baseMint.decimals,\n quoteMint.decimals,\n binArrayMap,\n program.programId\n );\n\n if (!bins.length) return null;\n\n const positionData: PositionBinData[] = [];\n\n let totalXAmount = new Decimal(0);\n let totalYAmount = new Decimal(0);\n\n const ZERO = new BN(0);\n\n let feeX = ZERO;\n let feeY = ZERO;\n\n let rewards = [ZERO, ZERO];\n\n bins.forEach((bin, idx) => {\n const binSupply = bin.supply;\n const posShare = posShares[idx];\n\n const posBinRewardInfo = positionRewardInfos[idx];\n\n const positionXAmount = binSupply.eq(ZERO)\n ? ZERO\n : posShare.mul(bin.xAmount).div(binSupply);\n\n const positionYAmount = binSupply.eq(ZERO)\n ? ZERO\n : posShare.mul(bin.yAmount).div(binSupply);\n\n totalXAmount = totalXAmount.add(new Decimal(positionXAmount.toString()));\n totalYAmount = totalYAmount.add(new Decimal(positionYAmount.toString()));\n\n const feeInfo = feeInfos[idx];\n\n const newFeeX = posShare.isZero()\n ? new BN(0)\n : mulShr(\n posShares[idx].shrn(SCALE_OFFSET),\n bin.feeAmountXPerTokenStored.sub(feeInfo.feeXPerTokenComplete),\n SCALE_OFFSET,\n Rounding.Down\n );\n\n const newFeeY = posShare.isZero()\n ? new BN(0)\n : mulShr(\n posShares[idx].shrn(SCALE_OFFSET),\n bin.feeAmountYPerTokenStored.sub(feeInfo.feeYPerTokenComplete),\n SCALE_OFFSET,\n Rounding.Down\n );\n\n const claimableFeeX = newFeeX.add(feeInfo.feeXPending);\n const claimableFeeY = newFeeY.add(feeInfo.feeYPending);\n\n feeX = feeX.add(claimableFeeX);\n feeY = feeY.add(claimableFeeY);\n\n const claimableRewardsInBin = [new BN(0), new BN(0)];\n\n for (let j = 0; j < claimableRewardsInBin.length; j++) {\n const pairRewardInfo = lbPair.rewardInfos[j];\n\n if (!pairRewardInfo.mint.equals(PublicKey.default)) {\n let rewardPerTokenStored = bin.rewardPerTokenStored[j];\n\n if (bin.binId == lbPair.activeId && !bin.supply.isZero()) {\n const currentTime = new BN(\n Math.min(\n clock.unixTimestamp.toNumber(),\n pairRewardInfo.rewardDurationEnd.toNumber()\n )\n );\n\n const delta = currentTime.sub(pairRewardInfo.lastUpdateTime);\n const liquiditySupply = bin.supply.shrn(SCALE_OFFSET);\n\n const rewardPerTokenStoredDelta = pairRewardInfo.rewardRate\n .mul(delta)\n .div(new BN(15))\n .div(liquiditySupply);\n\n rewardPerTokenStored = rewardPerTokenStored.add(\n rewardPerTokenStoredDelta\n );\n }\n\n const delta = rewardPerTokenStored.sub(\n posBinRewardInfo.rewardPerTokenCompletes[j]\n );\n\n const newReward = posShares[idx].isZero()\n ? new BN(0)\n : mulShr(\n delta,\n posShares[idx].shrn(SCALE_OFFSET),\n SCALE_OFFSET,\n Rounding.Down\n );\n\n const claimableReward = newReward.add(\n posBinRewardInfo.rewardPendings[j]\n );\n\n claimableRewardsInBin[j] =\n claimableRewardsInBin[j].add(claimableReward);\n rewards[j] = rewards[j].add(claimableReward);\n }\n }\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 positionFeeXAmount: claimableFeeX.toString(),\n positionFeeYAmount: claimableFeeY.toString(),\n positionRewardAmount: claimableRewardsInBin.map((amount) =>\n amount.toString()\n ),\n });\n });\n\n const currentEpoch = clock.epoch.toNumber();\n\n const feeXExcludeTransferFee = calculateTransferFeeExcludedAmount(\n feeX,\n baseMint,\n currentEpoch\n ).amount;\n\n const feeYExcludeTransferFee = calculateTransferFeeExcludedAmount(\n feeY,\n quoteMint,\n currentEpoch\n ).amount;\n\n const rewardOne = rewards[0];\n const rewardTwo = rewards[1];\n\n let rewardOneExcludeTransferFee = new BN(0);\n let rewardTwoExcludeTransferFee = new BN(0);\n\n if (rewardMint0) {\n rewardOneExcludeTransferFee = calculateTransferFeeExcludedAmount(\n rewardOne,\n rewardMint0,\n currentEpoch\n ).amount;\n }\n\n if (rewardMint1) {\n rewardTwoExcludeTransferFee = calculateTransferFeeExcludedAmount(\n rewardTwo,\n rewardMint1,\n currentEpoch\n ).amount;\n }\n\n const totalXAmountExcludeTransferFee = calculateTransferFeeExcludedAmount(\n new BN(totalXAmount.floor().toString()),\n baseMint,\n currentEpoch\n ).amount;\n\n const totalYAmountExcludeTransferFee = calculateTransferFeeExcludedAmount(\n new BN(totalYAmount.floor().toString()),\n quoteMint,\n currentEpoch\n ).amount;\n\n return {\n totalXAmount: totalXAmount.toString(),\n totalYAmount: totalYAmount.toString(),\n positionBinData: positionData,\n lastUpdatedAt,\n lowerBinId: lowerBinId.toNumber(),\n upperBinId: upperBinId.toNumber(),\n feeX,\n feeY,\n rewardOne,\n rewardTwo,\n feeOwner,\n totalClaimedFeeXAmount,\n totalClaimedFeeYAmount,\n totalXAmountExcludeTransferFee,\n totalYAmountExcludeTransferFee,\n rewardOneExcludeTransferFee,\n rewardTwoExcludeTransferFee,\n feeXExcludeTransferFee,\n feeYExcludeTransferFee,\n owner: position.owner(),\n };\n }\n\n private static getBinsBetweenLowerAndUpperBound(\n lbPairKey: PublicKey,\n lbPair: LbPair,\n lowerBinId: number,\n upperBinId: number,\n baseTokenDecimal: number,\n quoteTokenDecimal: number,\n binArrayMap: Map<String, BinArray>,\n programId: PublicKey\n ): BinLiquidity[] {\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n let bins: BinLiquidity[] = [];\n const ZERO = new BN(0);\n\n for (\n let binArrayIndex = lowerBinArrayIndex.toNumber();\n binArrayIndex <= upperBinArrayIndex.toNumber();\n binArrayIndex++\n ) {\n const binArrayIndexBN = new BN(binArrayIndex);\n const binArrayKey = deriveBinArray(\n lbPairKey,\n binArrayIndexBN,\n programId\n )[0];\n\n const [lowerBinIdForBinArray] =\n getBinArrayLowerUpperBinId(binArrayIndexBN);\n\n const binArray = binArrayMap.get(binArrayKey.toBase58());\n\n for (let i = 0; i < MAX_BIN_ARRAY_SIZE.toNumber(); i++) {\n const binId = lowerBinIdForBinArray.toNumber() + i;\n\n if (binId >= lowerBinId && binId <= upperBinId) {\n const pricePerLamport = getPriceOfBinByBinId(\n binId,\n lbPair.binStep\n ).toString();\n\n if (!binArray) {\n bins.push({\n binId,\n xAmount: ZERO,\n yAmount: ZERO,\n supply: ZERO,\n feeAmountXPerTokenStored: ZERO,\n feeAmountYPerTokenStored: ZERO,\n rewardPerTokenStored: [ZERO, ZERO],\n price: pricePerLamport,\n version: 2,\n pricePerToken: new Decimal(pricePerLamport)\n .mul(new Decimal(10 ** (baseTokenDecimal - quoteTokenDecimal)))\n .toString(),\n });\n } else {\n const bin = binArray.bins[i];\n\n bins.push({\n binId,\n xAmount: bin.amountX,\n yAmount: bin.amountY,\n supply: bin.liquiditySupply,\n feeAmountXPerTokenStored: bin.feeAmountXPerTokenStored,\n feeAmountYPerTokenStored: bin.feeAmountYPerTokenStored,\n rewardPerTokenStored: bin.rewardPerTokenStored,\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 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 lowerBinArray?: BinArray,\n upperBinArray?: BinArray\n ) {\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(lowerBinId));\n const upperBinArrayIndex = binIdToBinArrayIndex(new BN(upperBinId));\n\n const hasCachedLowerBinArray = lowerBinArray != null;\n const hasCachedUpperBinArray = upperBinArray != null;\n const isSingleBinArray = lowerBinArrayIndex.eq(upperBinArrayIndex);\n\n const lowerBinArrayIndexOffset = hasCachedLowerBinArray ? 1 : 0;\n const upperBinArrayIndexOffset = hasCachedUpperBinArray ? -1 : 0;\n\n const binArrayPubkeys = range(\n lowerBinArrayIndex.toNumber() + lowerBinArrayIndexOffset,\n upperBinArrayIndex.toNumber() + upperBinArrayIndexOffset,\n (i) => deriveBinArray(lbPairPubKey, new BN(i), this.program.programId)[0]\n );\n const fetchedBinArrays =\n binArrayPubkeys.length !== 0\n ? await this.program.account.binArray.fetchMultiple(binArrayPubkeys)\n : [];\n const binArrays = [\n ...(hasCachedLowerBinArray ? [lowerBinArray] : []),\n ...fetchedBinArrays,\n ...(hasCachedUpperBinArray && !isSingleBinArray ? [upperBinArray] : []),\n ];\n\n const binsById = new Map(\n binArrays\n .filter((x) => x != null)\n .flatMap(({ bins, index }) => {\n const [lowerBinId] = getBinArrayLowerUpperBinId(index);\n return bins.map(\n (b, i) => [lowerBinId.toNumber() + i, b] as [number, Bin]\n );\n })\n );\n const version =\n binArrays.find((binArray) => binArray != null)?.version ?? 1;\n\n return Array.from(\n enumerateBins(\n binsById,\n lowerBinId,\n upperBinId,\n this.lbPair.binStep,\n baseTokenDecimal,\n quoteTokenDecimal,\n version\n )\n );\n }\n\n private async binArraysToBeCreate(\n lowerBinArrayIndex: BN,\n upperBinArrayIndex: BN\n ) {\n const binArrayIndexes: BN[] = Array.from(\n { length: upperBinArrayIndex.sub(lowerBinArrayIndex).toNumber() + 1 },\n (_, index) => index + lowerBinArrayIndex.toNumber()\n ).map((idx) => new BN(idx));\n\n const binArrays: PublicKey[] = [];\n for (const idx of binArrayIndexes) {\n const [binArrayPubKey] = deriveBinArray(\n this.pubkey,\n idx,\n this.program.programId\n );\n binArrays.push(binArrayPubKey);\n }\n\n const binArrayAccounts =\n await this.program.provider.connection.getMultipleAccountsInfo(binArrays);\n\n return binArrayAccounts\n .filter((binArray) => binArray === null)\n .map((_, index) => binArrays[index]);\n }\n\n private async createBinArraysIfNeeded(\n binArrayIndexes: BN[],\n funder: PublicKey\n ): Promise<TransactionInstruction[]> {\n const ixs: TransactionInstruction[] = [];\n\n for (const idx of binArrayIndexes) {\n const [binArrayKey] = deriveBinArray(\n this.pubkey,\n idx,\n this.program.programId\n );\n const binArrayAccount =\n await this.program.provider.connection.getAccountInfo(binArrayKey);\n\n if (binArrayAccount === null) {\n ixs.push(\n await this.program.methods\n .initializeBinArray(idx)\n .accountsPartial({\n binArray: binArrayKey,\n funder,\n lbPair: this.pubkey,\n })\n .instruction()\n );\n }\n }\n return ixs;\n }\n\n public static 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 public static 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 }: {\n owner: PublicKey;\n position: LbPosition;\n }): Promise<Transaction[]> {\n // Avoid to attempt to load uninitialized bin array on the program\n const maybeClaimableBinRange = getPositionLowerUpperBinIdWithLiquidity(\n position.positionData\n );\n\n if (!maybeClaimableBinRange) return [];\n\n const { lowerBinId, upperBinId } = maybeClaimableBinRange;\n\n const chunkedBinRange = chunkBinRange(\n lowerBinId.toNumber(),\n upperBinId.toNumber()\n );\n\n const claimTransactions: Transaction[] = [];\n\n for (const {\n lowerBinId: chunkedLowerBinId,\n upperBinId: chunkedUpperBinId,\n } of chunkedBinRange) {\n const binArrayAccountsMeta = getBinArrayAccountMetasCoverage(\n new BN(chunkedLowerBinId),\n new BN(chunkedUpperBinId),\n this.pubkey,\n this.program.programId\n );\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 preInstructions = [];\n const userRewardToken = getAssociatedTokenAddressSync(\n rewardInfo.mint,\n owner,\n true,\n this.rewards[i].owner\n );\n\n const createUserTokenIx =\n createAssociatedTokenAccountIdempotentInstruction(\n owner,\n userRewardToken,\n owner,\n rewardInfo.mint,\n this.rewards[i].owner\n );\n\n preInstructions.push(createUserTokenIx);\n\n const { slices, accounts: transferHookAccounts } =\n this.getPotentialToken2022IxDataAndAccounts(ActionType.Reward, i);\n\n const claimTransaction = await this.program.methods\n .claimReward2(new BN(i), chunkedLowerBinId, chunkedUpperBinId, {\n slices,\n })\n .accountsPartial({\n lbPair: this.pubkey,\n sender: owner,\n position: position.publicKey,\n rewardVault: rewardInfo.vault,\n rewardMint: rewardInfo.mint,\n tokenProgram: this.rewards[i].owner,\n userTokenAccount: userRewardToken,\n memoProgram: MEMO_PROGRAM_ID,\n })\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(binArrayAccountsMeta)\n .preInstructions(preInstructions)\n .transaction();\n\n claimTransactions.push(claimTransaction);\n }\n }\n\n return claimTransactions;\n }\n\n private async createClaimSwapFeeMethod({\n owner,\n position,\n }: {\n owner: PublicKey;\n position: LbPosition;\n }): Promise<Transaction[]> {\n // Avoid to attempt to load uninitialized bin array on the program\n const maybeClaimableBinRange = getPositionLowerUpperBinIdWithLiquidity(\n position.positionData\n );\n\n if (!maybeClaimableBinRange) return [];\n\n const { lowerBinId, upperBinId } = maybeClaimableBinRange;\n\n const chunkedBinRange = chunkBinRange(\n lowerBinId.toNumber(),\n upperBinId.toNumber()\n );\n\n const claimFeeTxs = [];\n\n for (const {\n lowerBinId: chunkedLowerBinId,\n upperBinId: chunkedUpperBinId,\n } of chunkedBinRange) {\n const binArrayAccountsMeta = getBinArrayAccountMetasCoverage(\n new BN(chunkedLowerBinId),\n new BN(chunkedUpperBinId),\n this.pubkey,\n this.program.programId\n );\n\n const { feeOwner } = position.positionData;\n\n const walletToReceiveFee = feeOwner.equals(PublicKey.default)\n ? owner\n : feeOwner;\n\n const preInstructions: TransactionInstruction[] = [];\n\n const userTokenX = getAssociatedTokenAddressSync(\n this.lbPair.tokenXMint,\n walletToReceiveFee,\n true,\n this.tokenX.owner\n );\n\n const userTokenY = getAssociatedTokenAddressSync(\n this.lbPair.tokenYMint,\n walletToReceiveFee,\n true,\n this.tokenY.owner\n );\n\n const createUserTokenXIx =\n createAssociatedTokenAccountIdempotentInstruction(\n owner,\n userTokenX,\n walletToReceiveFee,\n this.lbPair.tokenXMint,\n this.tokenX.owner\n );\n\n const createUserTokenYIx =\n createAssociatedTokenAccountIdempotentInstruction(\n owner,\n userTokenY,\n walletToReceiveFee,\n this.lbPair.tokenYMint,\n this.tokenY.owner\n );\n\n preInstructions.push(createUserTokenXIx);\n preInstructions.push(createUserTokenYIx);\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 !this.opt?.skipSolWrappingOperation\n ) {\n const closeWrappedSOLIx = await unwrapSOLInstruction(owner);\n closeWrappedSOLIx && postInstructions.push(closeWrappedSOLIx);\n }\n\n const { slices, accounts: transferHookAccounts } =\n this.getPotentialToken2022IxDataAndAccounts(ActionType.Liquidity);\n\n const claimFeeTx = await this.program.methods\n .claimFee2(chunkedLowerBinId, chunkedUpperBinId, {\n slices,\n })\n .accountsPartial({\n lbPair: this.pubkey,\n sender: owner,\n position: position.publicKey,\n reserveX: this.lbPair.reserveX,\n reserveY: this.lbPair.reserveY,\n tokenProgramX: this.tokenX.owner,\n tokenProgramY: this.tokenY.owner,\n tokenXMint: this.tokenX.publicKey,\n tokenYMint: this.tokenY.publicKey,\n userTokenX,\n userTokenY,\n memoProgram: MEMO_PROGRAM_ID,\n })\n .remainingAccounts(transferHookAccounts)\n .remainingAccounts(binArrayAccountsMeta)\n .preInstructions(preInstructions)\n .postInstructions(postInstructions)\n .transaction();\n\n claimFeeTxs.push(claimFeeTx);\n }\n\n return claimFeeTxs;\n }\n\n public getPotentialToken2022IxDataAndAccounts(\n actionType: ActionType,\n rewardIndex?: number\n ): { slices: RemainingAccountsInfoSlice[]; accounts: AccountMeta[] } {\n if (actionType == ActionType.Liquidity) {\n return {\n slices: [\n {\n accountsType: {\n transferHookX: {},\n },\n length: this.tokenX.transferHookAccountMetas.length,\n },\n {\n accountsType: {\n transferHookY: {},\n },\n length: this.tokenY.transferHookAccountMetas.length,\n },\n ],\n accounts: this.tokenX.transferHookAccountMetas.concat(\n this.tokenY.transferHookAccountMetas\n ),\n };\n }\n return {\n slices: [\n {\n accountsType: {\n transferHookReward: {},\n },\n length: this.rewards[rewardIndex].transferHookAccountMetas.length,\n },\n ],\n accounts: this.rewards[rewardIndex].transferHookAccountMetas,\n };\n }\n}\n","import { LAMPORTS_PER_SOL, PublicKey } from \"@solana/web3.js\";\nimport { BN } from \"@coral-xyz/anchor\";\nimport IDL from \"../dlmm.json\";\nimport Decimal from \"decimal.js\";\n\nexport const LBCLMM_PROGRAM_IDS = {\n devnet: \"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo\",\n localhost: \"LbVRzDTvBDEcrthxfZ4RL6yiq3uZw8bS6MwtdY6UhFQ\",\n \"mainnet-beta\": \"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo\",\n};\n\nexport const ALT_ADDRESS = {\n \"mainnet-beta\": \"JA5F83HUK9L78Y12TRLCsJZbu3Tv8pCK1GfK8mVNp1sz\",\n devnet: \"BD6E8oYV52P829MxDq3sEtqWKJrHh9pDSUHeaWR1jRBs\",\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\n// https://solscan.io/tx/5JgHgEiVoqV61p3SASYzP4gnedvYFLhewPchBdFgPQZjHEiitjZCqs8u4rXyDYnGJ9zqAscknv9NoBiodsfDE1qR\nexport const BIN_ARRAY_FEE = 0.07143744;\n// https://solscan.io/tx/37yEmHsTU6tKjUc6iGG8GPiEuPHxiyBezwexsnnsqXQQKuDgwsNciEzkQZFWJShcdLpfug5xqNBPJkzit7eWvkDD\nexport const POSITION_FEE = 0.05740608;\nexport const TOKEN_ACCOUNT_FEE = 0.00203928;\n// https://solscan.io/tx/4QkTyVZbZgS3Go7ksEWzmHef7SBVgoJ8Fjjxk3eL9LZBBmrXHJarVM4TPy5Nq3XcjwdhWALeCCbL7xonExBGpNry\nexport const POOL_FEE = 0.00718272;\nexport const BIN_ARRAY_BITMAP_FEE = 0.01180416;\n\nexport const BIN_ARRAY_FEE_BN = new BN(\n new Decimal(BIN_ARRAY_FEE).mul(LAMPORTS_PER_SOL).toString()\n);\nexport const POSITION_FEE_BN = new BN(\n new Decimal(POSITION_FEE).mul(LAMPORTS_PER_SOL).toString()\n);\nexport const TOKEN_ACCOUNT_FEE_BN = new BN(\n new Decimal(TOKEN_ACCOUNT_FEE).mul(LAMPORTS_PER_SOL).toString()\n);\nexport const POOL_FEE_BN = new BN(\n new Decimal(POOL_FEE).mul(LAMPORTS_PER_SOL).toString()\n);\nexport const BIN_ARRAY_BITMAP_FEE_BN = new BN(\n new Decimal(BIN_ARRAY_BITMAP_FEE).mul(LAMPORTS_PER_SOL).toString()\n);\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 DEFAULT_BIN_PER_POSITION = new BN(\n CONSTANTS.find(([k, v]) => v.name == \"DEFAULT_BIN_PER_POSITION\")?.[1].value ??\n 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 POSITION_MAX_LENGTH = new BN(\n CONSTANTS.find(([k, v]) => v.name == \"POSITION_MAX_LENGTH\")?.[1].value ?? 0\n);\n\nexport const MAX_RESIZE_LENGTH = new BN(\n CONSTANTS.find(([k, v]) => v.name == \"MAX_RESIZE_LENGTH\")?.[1].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 = 2;\n\nexport const MAX_BIN_LENGTH_ALLOWED_IN_ONE_TX = 26;\n\nexport const MAX_ACTIVE_BIN_SLIPPAGE = 3;\n\nexport const ILM_BASE = new PublicKey(\n \"MFGQxwAmB91SwuYX36okv2Qmdc9aMuHTwWGUrp4AtB1\"\n);\n\nexport const MAX_EXTRA_BIN_ARRAYS = 3;\nexport const U64_MAX = new BN(\"18446744073709551615\");\n\nexport const MAX_BINS_PER_POSITION = new BN(\n CONSTANTS.find(([k, v]) => v.name == \"POSITION_MAX_LENGTH\")?.[1].value ?? 0\n);\n","{\n \"address\": \"LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo\",\n \"metadata\": {\n \"name\": \"lb_clmm\",\n \"version\": \"0.10.1\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"add_liquidity\",\n \"discriminator\": [181, 157, 89, 67, 143, 182, 52, 72],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\n \"position\",\n \"bin_array_bitmap_extension\",\n \"bin_array_lower\",\n \"bin_array_upper\"\n ]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_y_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"LiquidityParameter\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_liquidity2\",\n \"discriminator\": [228, 162, 78, 28, 70, 219, 116, 115],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\", \"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\"\n },\n {\n \"name\": \"token_y_program\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"LiquidityParameter\"\n }\n }\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_liquidity_by_strategy\",\n \"discriminator\": [7, 3, 150, 127, 148, 40, 61, 200],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\n \"position\",\n \"bin_array_bitmap_extension\",\n \"bin_array_lower\",\n \"bin_array_upper\"\n ]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_y_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"LiquidityParameterByStrategy\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_liquidity_by_strategy2\",\n \"discriminator\": [3, 221, 149, 218, 111, 141, 118, 213],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\", \"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\"\n },\n {\n \"name\": \"token_y_program\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"LiquidityParameterByStrategy\"\n }\n }\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_liquidity_by_strategy_one_side\",\n \"discriminator\": [41, 5, 238, 175, 100, 225, 6, 205],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\n \"position\",\n \"bin_array_bitmap_extension\",\n \"bin_array_lower\",\n \"bin_array_upper\"\n ]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token\",\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"LiquidityParameterByStrategyOneSide\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_liquidity_by_weight\",\n \"discriminator\": [28, 140, 238, 99, 231, 162, 21, 149],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\n \"position\",\n \"bin_array_bitmap_extension\",\n \"bin_array_lower\",\n \"bin_array_upper\"\n ]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_y_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"LiquidityParameterByWeight\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_liquidity_one_side\",\n \"discriminator\": [94, 155, 103, 151, 70, 95, 220, 165],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\n \"position\",\n \"bin_array_bitmap_extension\",\n \"bin_array_lower\",\n \"bin_array_upper\"\n ]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token\",\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"LiquidityOneSideParameter\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_liquidity_one_side_precise\",\n \"discriminator\": [161, 194, 103, 84, 171, 71, 250, 154],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\n \"position\",\n \"bin_array_bitmap_extension\",\n \"bin_array_lower\",\n \"bin_array_upper\"\n ]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token\",\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddLiquiditySingleSidePreciseParameter\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"add_liquidity_one_side_precise2\",\n \"discriminator\": [33, 51, 163, 201, 117, 98, 125, 231],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\", \"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token\",\n \"writable\": true\n },\n {\n \"name\": \"reserve\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"liquidity_parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"AddLiquiditySingleSidePreciseParameter2\"\n }\n }\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"claim_fee\",\n \"discriminator\": [169, 32, 79, 137, 136, 232, 70, 137],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\", \"bin_array_lower\", \"bin_array_upper\"]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"claim_fee2\",\n \"discriminator\": [112, 191, 101, 171, 28, 144, 127, 187],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\"]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_program_x\"\n },\n {\n \"name\": \"token_program_y\"\n },\n {\n \"name\": \"memo_program\",\n \"address\": \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"min_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"claim_reward\",\n \"discriminator\": [149, 95, 181, 242, 94, 90, 158, 162],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\", \"bin_array_lower\", \"bin_array_upper\"]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"user_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"claim_reward2\",\n \"discriminator\": [190, 3, 127, 119, 178, 87, 157, 183],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\"]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"user_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"memo_program\",\n \"address\": \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"close_claim_protocol_fee_operator\",\n \"discriminator\": [8, 41, 87, 35, 80, 48, 121, 26],\n \"accounts\": [\n {\n \"name\": \"claim_fee_operator\",\n \"writable\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_position\",\n \"discriminator\": [123, 134, 81, 0, 49, 68, 98, 98],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\", \"bin_array_lower\", \"bin_array_upper\"]\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_position2\",\n \"discriminator\": [174, 90, 35, 115, 186, 40, 147, 226],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_position_if_empty\",\n \"discriminator\": [59, 124, 212, 118, 91, 152, 110, 157],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_preset_parameter\",\n \"discriminator\": [4, 148, 145, 100, 134, 26, 181, 61],\n \"accounts\": [\n {\n \"name\": \"preset_parameter\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_preset_parameter2\",\n \"discriminator\": [39, 25, 95, 107, 116, 17, 115, 28],\n \"accounts\": [\n {\n \"name\": \"preset_parameter\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"close_token_badge\",\n \"discriminator\": [108, 146, 86, 110, 179, 254, 10, 104],\n \"accounts\": [\n {\n \"name\": \"token_badge\",\n \"writable\": true\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"create_claim_protocol_fee_operator\",\n \"discriminator\": [51, 19, 150, 252, 105, 157, 48, 91],\n \"accounts\": [\n {\n \"name\": \"claim_fee_operator\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [99, 102, 95, 111, 112, 101, 114, 97, 116, 111, 114]\n },\n {\n \"kind\": \"account\",\n \"path\": \"operator\"\n }\n ]\n }\n },\n {\n \"name\": \"operator\"\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"decrease_position_length\",\n \"discriminator\": [194, 219, 136, 32, 25, 96, 105, 37],\n \"accounts\": [\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"signer\": true,\n \"relations\": [\"position\"]\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"length_to_remove\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"side\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"for_idl_type_generation_do_not_call\",\n \"discriminator\": [180, 105, 69, 80, 95, 50, 73, 108],\n \"accounts\": [\n {\n \"name\": \"dummy_zc_account\"\n }\n ],\n \"args\": [\n {\n \"name\": \"_ix\",\n \"type\": {\n \"defined\": {\n \"name\": \"DummyIx\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"fund_reward\",\n \"discriminator\": [188, 50, 249, 165, 93, 151, 38, 63],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"bin_array\"]\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"funder_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"signer\": true\n },\n {\n \"name\": \"bin_array\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"carry_forward\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"go_to_a_bin\",\n \"discriminator\": [146, 72, 174, 224, 40, 253, 84, 174],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\n \"bin_array_bitmap_extension\",\n \"from_bin_array\",\n \"to_bin_array\"\n ]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"optional\": true\n },\n {\n \"name\": \"from_bin_array\",\n \"optional\": true\n },\n {\n \"name\": \"to_bin_array\",\n \"optional\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"bin_id\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"increase_oracle_length\",\n \"discriminator\": [190, 61, 125, 87, 103, 79, 158, 173],\n \"accounts\": [\n {\n \"name\": \"oracle\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"length_to_add\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"increase_position_length\",\n \"discriminator\": [80, 83, 117, 211, 66, 13, 33, 149],\n \"accounts\": [\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"lb_pair\",\n \"relations\": [\"position\"]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"signer\": true,\n \"relations\": [\"position\"]\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"length_to_add\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"side\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"increase_position_length2\",\n \"discriminator\": [255, 210, 204, 71, 115, 137, 225, 113],\n \"accounts\": [\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"lb_pair\",\n \"relations\": [\"position\"]\n },\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"signer\": true,\n \"relations\": [\"position\"]\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"minimum_upper_bin_id\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"initialize_bin_array\",\n \"discriminator\": [35, 86, 19, 185, 78, 212, 75, 211],\n \"accounts\": [\n {\n \"name\": \"lb_pair\"\n },\n {\n \"name\": \"bin_array\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [98, 105, 110, 95, 97, 114, 114, 97, 121]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"index\"\n }\n ]\n }\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"index\",\n \"type\": \"i64\"\n }\n ]\n },\n {\n \"name\": \"initialize_bin_array_bitmap_extension\",\n \"discriminator\": [47, 157, 226, 180, 12, 240, 33, 71],\n \"accounts\": [\n {\n \"name\": \"lb_pair\"\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"docs\": [\n \"Initialize an account to store if a bin array is initialized.\"\n ],\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [98, 105, 116, 109, 97, 112]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"initialize_customizable_permissionless_lb_pair\",\n \"discriminator\": [46, 39, 41, 135, 111, 183, 200, 64],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [98, 105, 116, 109, 97, 112]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"token_mint_x\"\n },\n {\n \"name\": \"token_mint_y\"\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint_x\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint_y\"\n }\n ]\n }\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [111, 114, 97, 99, 108, 101]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"user_token_x\"\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"user_token_y\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"CustomizableParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_customizable_permissionless_lb_pair2\",\n \"discriminator\": [243, 73, 129, 126, 51, 19, 241, 107],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [98, 105, 116, 109, 97, 112]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"token_mint_x\"\n },\n {\n \"name\": \"token_mint_y\"\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint_x\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint_y\"\n }\n ]\n }\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [111, 114, 97, 99, 108, 101]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"user_token_x\"\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_badge_x\",\n \"optional\": true\n },\n {\n \"name\": \"token_badge_y\",\n \"optional\": true\n },\n {\n \"name\": \"token_program_x\"\n },\n {\n \"name\": \"token_program_y\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"user_token_y\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"CustomizableParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_lb_pair\",\n \"discriminator\": [45, 154, 237, 210, 221, 15, 166, 92],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [98, 105, 116, 109, 97, 112]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"token_mint_x\"\n },\n {\n \"name\": \"token_mint_y\"\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint_x\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint_y\"\n }\n ]\n }\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [111, 114, 97, 99, 108, 101]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"preset_parameter\"\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"active_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"initialize_lb_pair2\",\n \"discriminator\": [73, 59, 36, 120, 237, 83, 108, 198],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [98, 105, 116, 109, 97, 112]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"token_mint_x\"\n },\n {\n \"name\": \"token_mint_y\"\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint_x\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint_y\"\n }\n ]\n }\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [111, 114, 97, 99, 108, 101]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"preset_parameter\"\n },\n {\n \"name\": \"funder\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_badge_x\",\n \"optional\": true\n },\n {\n \"name\": \"token_badge_y\",\n \"optional\": true\n },\n {\n \"name\": \"token_program_x\"\n },\n {\n \"name\": \"token_program_y\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitializeLbPair2Params\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_permission_lb_pair\",\n \"discriminator\": [108, 102, 213, 85, 251, 3, 53, 21],\n \"accounts\": [\n {\n \"name\": \"base\",\n \"signer\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [98, 105, 116, 109, 97, 112]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"token_mint_x\"\n },\n {\n \"name\": \"token_mint_y\"\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint_x\"\n }\n ]\n }\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint_y\"\n }\n ]\n }\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [111, 114, 97, 99, 108, 101]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n }\n ]\n }\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_badge_x\",\n \"optional\": true\n },\n {\n \"name\": \"token_badge_y\",\n \"optional\": true\n },\n {\n \"name\": \"token_program_x\"\n },\n {\n \"name\": \"token_program_y\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"ix_data\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitPermissionPairIx\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_position\",\n \"discriminator\": [219, 192, 234, 71, 190, 191, 102, 80],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"lb_pair\"\n },\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"lower_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"width\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"initialize_position2\",\n \"discriminator\": [143, 19, 242, 145, 213, 15, 104, 115],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"lb_pair\"\n },\n {\n \"name\": \"owner\",\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"lower_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"width\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"initialize_position_by_operator\",\n \"discriminator\": [251, 189, 190, 244, 117, 254, 35, 148],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"base\",\n \"signer\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [112, 111, 115, 105, 116, 105, 111, 110]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"base\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"lower_bin_id\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"width\"\n }\n ]\n }\n },\n {\n \"name\": \"lb_pair\"\n },\n {\n \"name\": \"owner\"\n },\n {\n \"name\": \"operator\",\n \"docs\": [\"operator\"],\n \"signer\": true\n },\n {\n \"name\": \"operator_token_x\"\n },\n {\n \"name\": \"owner_token_x\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"lower_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"width\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"fee_owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lock_release_point\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"initialize_position_pda\",\n \"discriminator\": [46, 82, 125, 146, 85, 141, 228, 153],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"base\",\n \"signer\": true\n },\n {\n \"name\": \"position\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [112, 111, 115, 105, 116, 105, 111, 110]\n },\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"base\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"lower_bin_id\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"width\"\n }\n ]\n }\n },\n {\n \"name\": \"lb_pair\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\"owner\"],\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"lower_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"width\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"initialize_preset_parameter\",\n \"discriminator\": [66, 188, 71, 211, 98, 109, 14, 186],\n \"accounts\": [\n {\n \"name\": \"preset_parameter\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112, 114, 101, 115, 101, 116, 95, 112, 97, 114, 97, 109, 101,\n 116, 101, 114\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"ix.bin_step\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"ix.base_factor\"\n }\n ]\n }\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"ix\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitPresetParametersIx\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_preset_parameter2\",\n \"discriminator\": [184, 7, 240, 171, 103, 47, 183, 121],\n \"accounts\": [\n {\n \"name\": \"preset_parameter\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 112, 114, 101, 115, 101, 116, 95, 112, 97, 114, 97, 109, 101,\n 116, 101, 114, 50\n ]\n },\n {\n \"kind\": \"arg\",\n \"path\": \"ix.index\"\n }\n ]\n }\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": [\n {\n \"name\": \"ix\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitPresetParameters2Ix\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"initialize_reward\",\n \"discriminator\": [95, 135, 192, 196, 242, 129, 230, 68],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"account\",\n \"path\": \"lb_pair\"\n },\n {\n \"kind\": \"arg\",\n \"path\": \"reward_index\"\n }\n ]\n }\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"token_badge\",\n \"optional\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent\",\n \"address\": \"SysvarRent111111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"initialize_token_badge\",\n \"discriminator\": [253, 77, 205, 95, 27, 224, 89, 223],\n \"accounts\": [\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_badge\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [116, 111, 107, 101, 110, 95, 98, 97, 100, 103, 101]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_mint\"\n }\n ]\n }\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"migrate_bin_array\",\n \"discriminator\": [17, 23, 159, 211, 101, 184, 41, 241],\n \"accounts\": [\n {\n \"name\": \"lb_pair\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"migrate_position\",\n \"discriminator\": [15, 132, 59, 50, 199, 6, 251, 46],\n \"accounts\": [\n {\n \"name\": \"position_v2\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"position_v1\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"relations\": [\"position_v1\", \"bin_array_lower\", \"bin_array_upper\"]\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"writable\": true,\n \"signer\": true,\n \"relations\": [\"position_v1\"]\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"rent_receiver\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"rebalance_liquidity\",\n \"discriminator\": [92, 4, 176, 193, 119, 185, 83, 9],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\", \"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"owner\",\n \"signer\": true,\n \"relations\": [\"position\"]\n },\n {\n \"name\": \"rent_payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\"\n },\n {\n \"name\": \"token_y_program\"\n },\n {\n \"name\": \"memo_program\",\n \"address\": \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n },\n {\n \"name\": \"system_program\",\n \"address\": \"11111111111111111111111111111111\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"RebalanceLiquidityParams\"\n }\n }\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"remove_all_liquidity\",\n \"discriminator\": [10, 51, 61, 35, 112, 105, 24, 85],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\n \"position\",\n \"bin_array_bitmap_extension\",\n \"bin_array_lower\",\n \"bin_array_upper\"\n ]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_y_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"remove_liquidity\",\n \"discriminator\": [80, 85, 209, 72, 24, 206, 177, 108],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\n \"position\",\n \"bin_array_bitmap_extension\",\n \"bin_array_lower\",\n \"bin_array_upper\"\n ]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_y_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"bin_liquidity_removal\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"BinLiquidityReduction\"\n }\n }\n }\n }\n ]\n },\n {\n \"name\": \"remove_liquidity2\",\n \"discriminator\": [230, 215, 82, 127, 241, 101, 227, 146],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\", \"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\"\n },\n {\n \"name\": \"token_y_program\"\n },\n {\n \"name\": \"memo_program\",\n \"address\": \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"bin_liquidity_removal\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"BinLiquidityReduction\"\n }\n }\n }\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"remove_liquidity_by_range\",\n \"discriminator\": [26, 82, 102, 152, 240, 74, 105, 26],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\n \"position\",\n \"bin_array_bitmap_extension\",\n \"bin_array_lower\",\n \"bin_array_upper\"\n ]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_y_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"from_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"to_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"bps_to_remove\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"remove_liquidity_by_range2\",\n \"discriminator\": [204, 2, 195, 145, 53, 145, 145, 205],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\", \"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user_token_x\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_y\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"sender\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\"\n },\n {\n \"name\": \"token_y_program\"\n },\n {\n \"name\": \"memo_program\",\n \"address\": \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"from_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"to_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"bps_to_remove\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"set_activation_point\",\n \"discriminator\": [91, 249, 15, 165, 26, 129, 254, 125],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"activation_point\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_pair_status\",\n \"discriminator\": [67, 248, 231, 137, 154, 149, 217, 174],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"status\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"set_pair_status_permissionless\",\n \"discriminator\": [78, 59, 152, 211, 70, 183, 46, 208],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"creator\",\n \"signer\": true,\n \"relations\": [\"lb_pair\"]\n }\n ],\n \"args\": [\n {\n \"name\": \"status\",\n \"type\": \"u8\"\n }\n ]\n },\n {\n \"name\": \"set_pre_activation_duration\",\n \"discriminator\": [165, 61, 201, 244, 130, 159, 22, 100],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"creator\",\n \"signer\": true,\n \"relations\": [\"lb_pair\"]\n }\n ],\n \"args\": [\n {\n \"name\": \"pre_activation_duration\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"set_pre_activation_swap_address\",\n \"discriminator\": [57, 139, 47, 123, 216, 80, 223, 10],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"creator\",\n \"signer\": true,\n \"relations\": [\"lb_pair\"]\n }\n ],\n \"args\": [\n {\n \"name\": \"pre_activation_swap_address\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"swap\",\n \"discriminator\": [248, 198, 158, 145, 225, 117, 135, 200],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"optional\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"user_token_in\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_out\",\n \"writable\": true\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"host_fee_in\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_y_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_out\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"swap2\",\n \"discriminator\": [65, 75, 63, 76, 235, 91, 91, 136],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"optional\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"user_token_in\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_out\",\n \"writable\": true\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"host_fee_in\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\"\n },\n {\n \"name\": \"token_y_program\"\n },\n {\n \"name\": \"memo_program\",\n \"address\": \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_out\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"swap_exact_out\",\n \"discriminator\": [250, 73, 101, 33, 38, 207, 75, 184],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"optional\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"user_token_in\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_out\",\n \"writable\": true\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"host_fee_in\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_y_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"max_in_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"out_amount\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"swap_exact_out2\",\n \"discriminator\": [43, 215, 247, 132, 137, 60, 243, 81],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"optional\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"user_token_in\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_out\",\n \"writable\": true\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"host_fee_in\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\"\n },\n {\n \"name\": \"token_y_program\"\n },\n {\n \"name\": \"memo_program\",\n \"address\": \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"max_in_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"out_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"swap_with_price_impact\",\n \"discriminator\": [56, 173, 230, 208, 173, 228, 156, 205],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"optional\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"user_token_in\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_out\",\n \"writable\": true\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"host_fee_in\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"token_y_program\",\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"active_id\",\n \"type\": {\n \"option\": \"i32\"\n }\n },\n {\n \"name\": \"max_price_impact_bps\",\n \"type\": \"u16\"\n }\n ]\n },\n {\n \"name\": \"swap_with_price_impact2\",\n \"discriminator\": [74, 98, 192, 214, 177, 51, 75, 51],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"bin_array_bitmap_extension\"]\n },\n {\n \"name\": \"bin_array_bitmap_extension\",\n \"optional\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"user_token_in\",\n \"writable\": true\n },\n {\n \"name\": \"user_token_out\",\n \"writable\": true\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"oracle\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"host_fee_in\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"user\",\n \"signer\": true\n },\n {\n \"name\": \"token_x_program\"\n },\n {\n \"name\": \"token_y_program\"\n },\n {\n \"name\": \"memo_program\",\n \"address\": \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"active_id\",\n \"type\": {\n \"option\": \"i32\"\n }\n },\n {\n \"name\": \"max_price_impact_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_base_fee_parameters\",\n \"discriminator\": [75, 168, 223, 161, 16, 195, 3, 47],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"fee_parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"BaseFeeParameter\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_dynamic_fee_parameters\",\n \"discriminator\": [92, 161, 46, 246, 255, 189, 22, 22],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"fee_parameter\",\n \"type\": {\n \"defined\": {\n \"name\": \"DynamicFeeParameter\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"update_fees_and_reward2\",\n \"discriminator\": [32, 142, 184, 154, 103, 65, 184, 88],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\"]\n },\n {\n \"name\": \"owner\",\n \"signer\": true\n }\n ],\n \"args\": [\n {\n \"name\": \"min_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_bin_id\",\n \"type\": \"i32\"\n }\n ]\n },\n {\n \"name\": \"update_fees_and_rewards\",\n \"discriminator\": [154, 230, 250, 13, 236, 209, 75, 223],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"position\", \"bin_array_lower\", \"bin_array_upper\"]\n },\n {\n \"name\": \"bin_array_lower\",\n \"writable\": true\n },\n {\n \"name\": \"bin_array_upper\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"signer\": true\n }\n ],\n \"args\": []\n },\n {\n \"name\": \"update_position_operator\",\n \"discriminator\": [202, 184, 103, 143, 180, 191, 116, 217],\n \"accounts\": [\n {\n \"name\": \"position\",\n \"writable\": true\n },\n {\n \"name\": \"owner\",\n \"signer\": true,\n \"relations\": [\"position\"]\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"operator\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"update_reward_duration\",\n \"discriminator\": [138, 174, 196, 169, 213, 235, 254, 107],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"bin_array\"]\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"bin_array\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_duration\",\n \"type\": \"u64\"\n }\n ]\n },\n {\n \"name\": \"update_reward_funder\",\n \"discriminator\": [211, 28, 48, 32, 215, 160, 35, 23],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_funder\",\n \"type\": \"pubkey\"\n }\n ]\n },\n {\n \"name\": \"withdraw_ineligible_reward\",\n \"discriminator\": [148, 206, 42, 195, 247, 49, 103, 8],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true,\n \"relations\": [\"bin_array\"]\n },\n {\n \"name\": \"reward_vault\",\n \"writable\": true\n },\n {\n \"name\": \"reward_mint\"\n },\n {\n \"name\": \"funder_token_account\",\n \"writable\": true\n },\n {\n \"name\": \"funder\",\n \"signer\": true\n },\n {\n \"name\": \"bin_array\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"memo_program\",\n \"address\": \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n },\n {\n \"name\": \"event_authority\",\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 95, 95, 101, 118, 101, 110, 116, 95, 97, 117, 116, 104, 111,\n 114, 105, 116, 121\n ]\n }\n ]\n }\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_protocol_fee\",\n \"discriminator\": [158, 201, 158, 189, 33, 93, 162, 103],\n \"accounts\": [\n {\n \"name\": \"lb_pair\",\n \"writable\": true\n },\n {\n \"name\": \"reserve_x\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"reserve_y\",\n \"writable\": true,\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_x_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"token_y_mint\",\n \"relations\": [\"lb_pair\"]\n },\n {\n \"name\": \"receiver_token_x\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 8, 234, 192, 109, 87, 125, 190, 55, 129, 173, 227, 8, 104,\n 201, 104, 13, 31, 178, 74, 80, 54, 14, 77, 78, 226, 57, 47,\n 122, 166, 165, 57, 144\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_x_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_x_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n 219, 233, 248, 89\n ]\n }\n }\n },\n {\n \"name\": \"receiver_token_y\",\n \"writable\": true,\n \"pda\": {\n \"seeds\": [\n {\n \"kind\": \"const\",\n \"value\": [\n 8, 234, 192, 109, 87, 125, 190, 55, 129, 173, 227, 8, 104,\n 201, 104, 13, 31, 178, 74, 80, 54, 14, 77, 78, 226, 57, 47,\n 122, 166, 165, 57, 144\n ]\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_y_program\"\n },\n {\n \"kind\": \"account\",\n \"path\": \"token_y_mint\"\n }\n ],\n \"program\": {\n \"kind\": \"const\",\n \"value\": [\n 140, 151, 37, 143, 78, 36, 137, 241, 187, 61, 16, 41, 20, 142,\n 13, 131, 11, 90, 19, 153, 218, 255, 16, 132, 4, 142, 123, 216,\n 219, 233, 248, 89\n ]\n }\n }\n },\n {\n \"name\": \"claim_fee_operator\"\n },\n {\n \"name\": \"operator\",\n \"docs\": [\"operator\"],\n \"signer\": true,\n \"relations\": [\"claim_fee_operator\"]\n },\n {\n \"name\": \"token_x_program\"\n },\n {\n \"name\": \"token_y_program\"\n },\n {\n \"name\": \"memo_program\",\n \"address\": \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n }\n ],\n \"args\": [\n {\n \"name\": \"max_amount_x\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount_y\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"remaining_accounts_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"RemainingAccountsInfo\"\n }\n }\n }\n ]\n }\n ],\n \"accounts\": [\n {\n \"name\": \"BinArray\",\n \"discriminator\": [92, 142, 92, 220, 5, 148, 70, 181]\n },\n {\n \"name\": \"BinArrayBitmapExtension\",\n \"discriminator\": [80, 111, 124, 113, 55, 237, 18, 5]\n },\n {\n \"name\": \"ClaimFeeOperator\",\n \"discriminator\": [166, 48, 134, 86, 34, 200, 188, 150]\n },\n {\n \"name\": \"DummyZcAccount\",\n \"discriminator\": [94, 107, 238, 80, 208, 48, 180, 8]\n },\n {\n \"name\": \"LbPair\",\n \"discriminator\": [33, 11, 49, 98, 181, 101, 177, 13]\n },\n {\n \"name\": \"Oracle\",\n \"discriminator\": [139, 194, 131, 179, 140, 179, 229, 244]\n },\n {\n \"name\": \"Position\",\n \"discriminator\": [170, 188, 143, 228, 122, 64, 247, 208]\n },\n {\n \"name\": \"PositionV2\",\n \"discriminator\": [117, 176, 212, 199, 245, 180, 133, 182]\n },\n {\n \"name\": \"PresetParameter\",\n \"discriminator\": [242, 62, 244, 34, 181, 112, 58, 170]\n },\n {\n \"name\": \"PresetParameter2\",\n \"discriminator\": [171, 236, 148, 115, 162, 113, 222, 174]\n },\n {\n \"name\": \"TokenBadge\",\n \"discriminator\": [116, 219, 204, 229, 249, 116, 255, 150]\n }\n ],\n \"events\": [\n {\n \"name\": \"AddLiquidity\",\n \"discriminator\": [31, 94, 125, 90, 227, 52, 61, 186]\n },\n {\n \"name\": \"ClaimFee\",\n \"discriminator\": [75, 122, 154, 48, 140, 74, 123, 163]\n },\n {\n \"name\": \"ClaimFee2\",\n \"discriminator\": [232, 171, 242, 97, 58, 77, 35, 45]\n },\n {\n \"name\": \"ClaimReward\",\n \"discriminator\": [148, 116, 134, 204, 22, 171, 85, 95]\n },\n {\n \"name\": \"ClaimReward2\",\n \"discriminator\": [27, 143, 244, 33, 80, 43, 110, 146]\n },\n {\n \"name\": \"CompositionFee\",\n \"discriminator\": [128, 151, 123, 106, 17, 102, 113, 142]\n },\n {\n \"name\": \"DecreasePositionLength\",\n \"discriminator\": [52, 118, 235, 85, 172, 169, 15, 128]\n },\n {\n \"name\": \"DynamicFeeParameterUpdate\",\n \"discriminator\": [88, 88, 178, 135, 194, 146, 91, 243]\n },\n {\n \"name\": \"FeeParameterUpdate\",\n \"discriminator\": [48, 76, 241, 117, 144, 215, 242, 44]\n },\n {\n \"name\": \"FundReward\",\n \"discriminator\": [246, 228, 58, 130, 145, 170, 79, 204]\n },\n {\n \"name\": \"GoToABin\",\n \"discriminator\": [59, 138, 76, 68, 138, 131, 176, 67]\n },\n {\n \"name\": \"IncreaseObservation\",\n \"discriminator\": [99, 249, 17, 121, 166, 156, 207, 215]\n },\n {\n \"name\": \"IncreasePositionLength\",\n \"discriminator\": [157, 239, 42, 204, 30, 56, 223, 46]\n },\n {\n \"name\": \"InitializeReward\",\n \"discriminator\": [211, 153, 88, 62, 149, 60, 177, 70]\n },\n {\n \"name\": \"LbPairCreate\",\n \"discriminator\": [185, 74, 252, 125, 27, 215, 188, 111]\n },\n {\n \"name\": \"PositionClose\",\n \"discriminator\": [255, 196, 16, 107, 28, 202, 53, 128]\n },\n {\n \"name\": \"PositionCreate\",\n \"discriminator\": [144, 142, 252, 84, 157, 53, 37, 121]\n },\n {\n \"name\": \"Rebalancing\",\n \"discriminator\": [0, 109, 117, 179, 61, 91, 199, 200]\n },\n {\n \"name\": \"RemoveLiquidity\",\n \"discriminator\": [116, 244, 97, 232, 103, 31, 152, 58]\n },\n {\n \"name\": \"Swap\",\n \"discriminator\": [81, 108, 227, 190, 205, 208, 10, 196]\n },\n {\n \"name\": \"UpdatePositionLockReleasePoint\",\n \"discriminator\": [133, 214, 66, 224, 64, 12, 7, 191]\n },\n {\n \"name\": \"UpdatePositionOperator\",\n \"discriminator\": [39, 115, 48, 204, 246, 47, 66, 57]\n },\n {\n \"name\": \"UpdateRewardDuration\",\n \"discriminator\": [223, 245, 224, 153, 49, 29, 163, 172]\n },\n {\n \"name\": \"UpdateRewardFunder\",\n \"discriminator\": [224, 178, 174, 74, 252, 165, 85, 180]\n },\n {\n \"name\": \"WithdrawIneligibleReward\",\n \"discriminator\": [231, 189, 65, 149, 102, 215, 154, 244]\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\": \"UnauthorizedAccess\",\n \"msg\": \"Unauthorized 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 \"code\": 6048,\n \"name\": \"UnauthorizedAddress\",\n \"msg\": \"Unauthorized address\"\n },\n {\n \"code\": 6049,\n \"name\": \"OperatorsAreTheSame\",\n \"msg\": \"Cannot update because operators are the same\"\n },\n {\n \"code\": 6050,\n \"name\": \"WithdrawToWrongTokenAccount\",\n \"msg\": \"Withdraw to wrong token account\"\n },\n {\n \"code\": 6051,\n \"name\": \"WrongRentReceiver\",\n \"msg\": \"Wrong rent receiver\"\n },\n {\n \"code\": 6052,\n \"name\": \"AlreadyPassActivationPoint\",\n \"msg\": \"Already activated\"\n },\n {\n \"code\": 6053,\n \"name\": \"ExceedMaxSwappedAmount\",\n \"msg\": \"Swapped amount is exceeded max swapped amount\"\n },\n {\n \"code\": 6054,\n \"name\": \"InvalidStrategyParameters\",\n \"msg\": \"Invalid strategy parameters\"\n },\n {\n \"code\": 6055,\n \"name\": \"LiquidityLocked\",\n \"msg\": \"Liquidity locked\"\n },\n {\n \"code\": 6056,\n \"name\": \"BinRangeIsNotEmpty\",\n \"msg\": \"Bin range is not empty\"\n },\n {\n \"code\": 6057,\n \"name\": \"NotExactAmountOut\",\n \"msg\": \"Amount out is not matched with exact amount out\"\n },\n {\n \"code\": 6058,\n \"name\": \"InvalidActivationType\",\n \"msg\": \"Invalid activation type\"\n },\n {\n \"code\": 6059,\n \"name\": \"InvalidActivationDuration\",\n \"msg\": \"Invalid activation duration\"\n },\n {\n \"code\": 6060,\n \"name\": \"MissingTokenAmountAsTokenLaunchProof\",\n \"msg\": \"Missing token amount as token launch owner proof\"\n },\n {\n \"code\": 6061,\n \"name\": \"InvalidQuoteToken\",\n \"msg\": \"Quote token must be SOL or USDC\"\n },\n {\n \"code\": 6062,\n \"name\": \"InvalidBinStep\",\n \"msg\": \"Invalid bin step\"\n },\n {\n \"code\": 6063,\n \"name\": \"InvalidBaseFee\",\n \"msg\": \"Invalid base fee\"\n },\n {\n \"code\": 6064,\n \"name\": \"InvalidPreActivationDuration\",\n \"msg\": \"Invalid pre-activation duration\"\n },\n {\n \"code\": 6065,\n \"name\": \"AlreadyPassPreActivationSwapPoint\",\n \"msg\": \"Already pass pre-activation swap point\"\n },\n {\n \"code\": 6066,\n \"name\": \"InvalidStatus\",\n \"msg\": \"Invalid status\"\n },\n {\n \"code\": 6067,\n \"name\": \"ExceededMaxOracleLength\",\n \"msg\": \"Exceed max oracle length\"\n },\n {\n \"code\": 6068,\n \"name\": \"InvalidMinimumLiquidity\",\n \"msg\": \"Invalid minimum liquidity\"\n },\n {\n \"code\": 6069,\n \"name\": \"NotSupportMint\",\n \"msg\": \"Not support token_2022 mint extension\"\n },\n {\n \"code\": 6070,\n \"name\": \"UnsupportedMintExtension\",\n \"msg\": \"Unsupported mint extension\"\n },\n {\n \"code\": 6071,\n \"name\": \"UnsupportNativeMintToken2022\",\n \"msg\": \"Unsupported native mint token2022\"\n },\n {\n \"code\": 6072,\n \"name\": \"UnmatchTokenMint\",\n \"msg\": \"Unmatch token mint\"\n },\n {\n \"code\": 6073,\n \"name\": \"UnsupportedTokenMint\",\n \"msg\": \"Unsupported token mint\"\n },\n {\n \"code\": 6074,\n \"name\": \"InsufficientRemainingAccounts\",\n \"msg\": \"Insufficient remaining accounts\"\n },\n {\n \"code\": 6075,\n \"name\": \"InvalidRemainingAccountSlice\",\n \"msg\": \"Invalid remaining account slice\"\n },\n {\n \"code\": 6076,\n \"name\": \"DuplicatedRemainingAccountTypes\",\n \"msg\": \"Duplicated remaining account types\"\n },\n {\n \"code\": 6077,\n \"name\": \"MissingRemainingAccountForTransferHook\",\n \"msg\": \"Missing remaining account for transfer hook\"\n },\n {\n \"code\": 6078,\n \"name\": \"NoTransferHookProgram\",\n \"msg\": \"Remaining account was passed for transfer hook but there's no hook program\"\n },\n {\n \"code\": 6079,\n \"name\": \"ZeroFundedAmount\",\n \"msg\": \"Zero funded amount\"\n },\n {\n \"code\": 6080,\n \"name\": \"InvalidSide\",\n \"msg\": \"Invalid side\"\n },\n {\n \"code\": 6081,\n \"name\": \"InvalidResizeLength\",\n \"msg\": \"Invalid resize length\"\n },\n {\n \"code\": 6082,\n \"name\": \"NotSupportAtTheMoment\",\n \"msg\": \"Not support at the moment\"\n },\n {\n \"code\": 6083,\n \"name\": \"InvalidRebalanceParameters\",\n \"msg\": \"Invalid rebalance parameters\"\n },\n {\n \"code\": 6084,\n \"name\": \"InvalidRewardAccounts\",\n \"msg\": \"Invalid reward accounts\"\n },\n {\n \"code\": 6085,\n \"name\": \"UndeterminedError\",\n \"msg\": \"Undetermined error\"\n },\n {\n \"code\": 6086,\n \"name\": \"ReallocExceedMaxLengthPerInstruction\",\n \"msg\": \"Realloc exceed max length per instruction\"\n },\n {\n \"code\": 6087,\n \"name\": \"InvalidBaseFeeMantissa\",\n \"msg\": \"Mantissa cannot more than two significant digits\"\n },\n {\n \"code\": 6088,\n \"name\": \"InvalidPositionOwner\",\n \"msg\": \"Invalid position owner\"\n },\n {\n \"code\": 6089,\n \"name\": \"InvalidPoolAddress\",\n \"msg\": \"Invalid pool address\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AccountsType\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"TransferHookX\"\n },\n {\n \"name\": \"TransferHookY\"\n },\n {\n \"name\": \"TransferHookReward\"\n },\n {\n \"name\": \"TransferHookMultiReward\",\n \"fields\": [\"u8\"]\n }\n ]\n }\n },\n {\n \"name\": \"ActivationType\",\n \"docs\": [\"Type of the activation\"],\n \"repr\": {\n \"kind\": \"rust\"\n },\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Slot\"\n },\n {\n \"name\": \"Timestamp\"\n }\n ]\n }\n },\n {\n \"name\": \"AddLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"from\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amounts\",\n \"type\": {\n \"array\": [\"u64\", 2]\n }\n },\n {\n \"name\": \"active_bin_id\",\n \"type\": \"i32\"\n }\n ]\n }\n },\n {\n \"name\": \"AddLiquidityParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"min_delta_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_delta_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"x0\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"y0\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"delta_x\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"delta_y\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"bit_flag\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"favor_x_in_active_id\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n }\n ]\n }\n },\n {\n \"name\": \"AddLiquiditySingleSidePreciseParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bins\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"CompressedBinDepositAmount\"\n }\n }\n }\n },\n {\n \"name\": \"decompress_multiplier\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"AddLiquiditySingleSidePreciseParameter2\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bins\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"CompressedBinDepositAmount\"\n }\n }\n }\n },\n {\n \"name\": \"decompress_multiplier\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"BaseFeeParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"protocol_share\",\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\": \"base_factor\",\n \"docs\": [\"Base factor for base fee rate\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_fee_power_factor\",\n \"docs\": [\"Base fee power factor\"],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"Bin\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_x\",\n \"docs\": [\n \"Amount of token X in the bin. This already excluded protocol fees.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_y\",\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\": [\"Bin price\"],\n \"type\": \"u128\"\n },\n {\n \"name\": \"liquidity_supply\",\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\": \"reward_per_token_stored\",\n \"docs\": [\"reward_a_per_token_stored\"],\n \"type\": {\n \"array\": [\"u128\", 2]\n }\n },\n {\n \"name\": \"fee_amount_x_per_token_stored\",\n \"docs\": [\"Swap fee amount of token X per liquidity deposited.\"],\n \"type\": \"u128\"\n },\n {\n \"name\": \"fee_amount_y_per_token_stored\",\n \"docs\": [\"Swap fee amount of token Y per liquidity deposited.\"],\n \"type\": \"u128\"\n },\n {\n \"name\": \"amount_x_in\",\n \"docs\": [\n \"Total token X swap into the bin. Only used for tracking purpose.\"\n ],\n \"type\": \"u128\"\n },\n {\n \"name\": \"amount_y_in\",\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\": \"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 \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"index\",\n \"type\": \"i64\"\n },\n {\n \"name\": \"version\",\n \"docs\": [\"Version of binArray\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding\",\n \"type\": {\n \"array\": [\"u8\", 7]\n }\n },\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bins\",\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"Bin\"\n }\n },\n 70\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"BinArrayBitmapExtension\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"positive_bin_array_bitmap\",\n \"docs\": [\n \"Packed initialized bin array state for start_bin_index is positive\"\n ],\n \"type\": {\n \"array\": [\n {\n \"array\": [\"u64\", 8]\n },\n 12\n ]\n }\n },\n {\n \"name\": \"negative_bin_array_bitmap\",\n \"docs\": [\n \"Packed initialized bin array state for start_bin_index is negative\"\n ],\n \"type\": {\n \"array\": [\n {\n \"array\": [\"u64\", 8]\n },\n 12\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"BinLiquidityDistribution\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_id\",\n \"docs\": [\"Define the bin ID wish to deposit to.\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"distribution_x\",\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\": \"distribution_y\",\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\": \"BinLiquidityDistributionByWeight\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_id\",\n \"docs\": [\"Define the bin ID wish to deposit to.\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"weight\",\n \"docs\": [\"weight of liquidity distributed for this bin id\"],\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"BinLiquidityReduction\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"bps_to_remove\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"ClaimFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_x\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_y\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"ClaimFee2\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_x\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_y\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"active_bin_id\",\n \"type\": \"i32\"\n }\n ]\n }\n },\n {\n \"name\": \"ClaimFeeOperator\",\n \"docs\": [\"Parameter that set by the protocol\"],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"operator\",\n \"docs\": [\"operator\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\"Reserve\"],\n \"type\": {\n \"array\": [\"u8\", 128]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ClaimReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_reward\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"ClaimReward2\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_reward\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"active_bin_id\",\n \"type\": \"i32\"\n }\n ]\n }\n },\n {\n \"name\": \"CompositionFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"from\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bin_id\",\n \"type\": \"i16\"\n },\n {\n \"name\": \"token_x_fee_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"token_y_fee_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_token_x_fee_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_token_y_fee_amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CompressedBinDepositAmount\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"CustomizableParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"active_id\",\n \"docs\": [\"Pool price\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"bin_step\",\n \"docs\": [\"Bin step\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_factor\",\n \"docs\": [\"Base factor\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\n \"Activation type. 0 = Slot, 1 = Time. Check ActivationType enum\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"has_alpha_vault\",\n \"docs\": [\"Whether the pool has an alpha vault\"],\n \"type\": \"bool\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\"Decide when does the pool start trade. None = Now\"],\n \"type\": {\n \"option\": \"u64\"\n }\n },\n {\n \"name\": \"creator_pool_on_off_control\",\n \"docs\": [\n \"Pool creator have permission to enable/disable pool with restricted program validation. Only applicable for customizable permissionless pool.\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"base_fee_power_factor\",\n \"docs\": [\"Base fee power factor\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\"Padding, for future use\"],\n \"type\": {\n \"array\": [\"u8\", 62]\n }\n }\n ]\n }\n },\n {\n \"name\": \"DecreasePositionLength\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"length_to_remove\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"side\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"DummyIx\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"_pair_status\",\n \"type\": {\n \"defined\": {\n \"name\": \"PairStatus\"\n }\n }\n },\n {\n \"name\": \"_pair_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"PairType\"\n }\n }\n },\n {\n \"name\": \"_activation_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"ActivationType\"\n }\n }\n },\n {\n \"name\": \"_token_program_flag\",\n \"type\": {\n \"defined\": {\n \"name\": \"TokenProgramFlags\"\n }\n }\n },\n {\n \"name\": \"_resize_side\",\n \"type\": {\n \"defined\": {\n \"name\": \"ResizeSide\"\n }\n }\n },\n {\n \"name\": \"_rounding\",\n \"type\": {\n \"defined\": {\n \"name\": \"Rounding\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"DummyZcAccount\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"position_bin_data\",\n \"type\": {\n \"defined\": {\n \"name\": \"PositionBinData\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"DynamicFeeParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"filter_period\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variable_fee_control\",\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\": \"max_volatility_accumulator\",\n \"docs\": [\n \"Maximum number of bin crossed can be accumulated. Used to cap volatile fee rate.\"\n ],\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"DynamicFeeParameterUpdate\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"filter_period\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variable_fee_control\",\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\": \"max_volatility_accumulator\",\n \"docs\": [\n \"Maximum number of bin crossed can be accumulated. Used to cap volatile fee rate.\"\n ],\n \"type\": \"u32\"\n }\n ]\n }\n },\n {\n \"name\": \"FeeInfo\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_x_per_token_complete\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"fee_y_per_token_complete\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"fee_x_pending\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_y_pending\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"FeeParameterUpdate\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"protocol_share\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_factor\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"FundReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"GoToABin\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"from_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"to_bin_id\",\n \"type\": \"i32\"\n }\n ]\n }\n },\n {\n \"name\": \"IncreaseObservation\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"oracle\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_observation_length\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"IncreasePositionLength\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"length_to_add\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"side\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"InitPermissionPairIx\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"active_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_factor\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_fee_power_factor\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"activation_type\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"protocol_share\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"InitPresetParameters2Ix\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"index\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"bin_step\",\n \"docs\": [\"Bin step. Represent the price increment / decrement.\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_factor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step * 10 * 10^base_fee_power_factor\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variable_fee_control\",\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\": \"max_volatility_accumulator\",\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\": \"protocol_share\",\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\": \"base_fee_power_factor\",\n \"docs\": [\"Base fee power factor\"],\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"InitPresetParametersIx\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_step\",\n \"docs\": [\"Bin step. Represent the price increment / decrement.\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_factor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step * 10 * 10^base_fee_power_factor\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variable_fee_control\",\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\": \"max_volatility_accumulator\",\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\": \"protocol_share\",\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\": \"InitializeLbPair2Params\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"active_id\",\n \"docs\": [\"Pool price\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\"Padding, for future use\"],\n \"type\": {\n \"array\": [\"u8\", 96]\n }\n }\n ]\n }\n },\n {\n \"name\": \"InitializeReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_duration\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LbPair\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"parameters\",\n \"type\": {\n \"defined\": {\n \"name\": \"StaticParameters\"\n }\n }\n },\n {\n \"name\": \"v_parameters\",\n \"type\": {\n \"defined\": {\n \"name\": \"VariableParameters\"\n }\n }\n },\n {\n \"name\": \"bump_seed\",\n \"type\": {\n \"array\": [\"u8\", 1]\n }\n },\n {\n \"name\": \"bin_step_seed\",\n \"docs\": [\"Bin step signer seed\"],\n \"type\": {\n \"array\": [\"u8\", 2]\n }\n },\n {\n \"name\": \"pair_type\",\n \"docs\": [\"Type of the pair\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"active_id\",\n \"docs\": [\"Active bin id\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"bin_step\",\n \"docs\": [\"Bin step. Represent the price increment / decrement.\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"status\",\n \"docs\": [\"Status of the pair. Check PairStatus enum.\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"require_base_factor_seed\",\n \"docs\": [\"Require base factor seed\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"base_factor_seed\",\n \"docs\": [\"Base factor seed\"],\n \"type\": {\n \"array\": [\"u8\", 2]\n }\n },\n {\n \"name\": \"activation_type\",\n \"docs\": [\"Activation type\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"creator_pool_on_off_control\",\n \"docs\": [\n \"Allow pool creator to enable/disable pool with restricted validation. Only applicable for customizable permissionless pair type.\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_x_mint\",\n \"docs\": [\"Token X mint\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_y_mint\",\n \"docs\": [\"Token Y mint\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve_x\",\n \"docs\": [\"LB token X vault\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reserve_y\",\n \"docs\": [\"LB token Y vault\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"protocol_fee\",\n \"docs\": [\"Uncollected protocol fee\"],\n \"type\": {\n \"defined\": {\n \"name\": \"ProtocolFee\"\n }\n }\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\n \"_padding_1, previous Fee owner, BE CAREFUL FOR TOMBSTONE WHEN REUSE !!\"\n ],\n \"type\": {\n \"array\": [\"u8\", 32]\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\"Farming reward information\"],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"RewardInfo\"\n }\n },\n 2\n ]\n }\n },\n {\n \"name\": \"oracle\",\n \"docs\": [\"Oracle pubkey\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bin_array_bitmap\",\n \"docs\": [\"Packed initialized bin array state\"],\n \"type\": {\n \"array\": [\"u64\", 16]\n }\n },\n {\n \"name\": \"last_updated_at\",\n \"docs\": [\"Last time the pool fee parameter was updated\"],\n \"type\": \"i64\"\n },\n {\n \"name\": \"_padding_2\",\n \"docs\": [\n \"_padding_2, previous whitelisted_wallet, BE CAREFUL FOR TOMBSTONE WHEN REUSE !!\"\n ],\n \"type\": {\n \"array\": [\"u8\", 32]\n }\n },\n {\n \"name\": \"pre_activation_swap_address\",\n \"docs\": [\n \"Address allowed to swap when the current point is greater than or equal to the pre-activation point. The pre-activation point is calculated as `activation_point - pre_activation_duration`.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"base_key\",\n \"docs\": [\"Base keypair. Only required for permission pair\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"activation_point\",\n \"docs\": [\n \"Time point to enable the pair. Only applicable for permission pair.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"pre_activation_duration\",\n \"docs\": [\n \"Duration before activation activation_point. Used to calculate pre-activation time point for pre_activation_swap_address\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"_padding_3\",\n \"docs\": [\n \"_padding 3 is reclaimed free space from swap_cap_deactivate_point and swap_cap_amount before, BE CAREFUL FOR TOMBSTONE WHEN REUSE !!\"\n ],\n \"type\": {\n \"array\": [\"u8\", 8]\n }\n },\n {\n \"name\": \"_padding_4\",\n \"docs\": [\n \"_padding_4, previous lock_duration, BE CAREFUL FOR TOMBSTONE WHEN REUSE !!\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"creator\",\n \"docs\": [\"Pool creator\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_mint_x_program_flag\",\n \"docs\": [\"token_mint_x_program_flag\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"token_mint_y_program_flag\",\n \"docs\": [\"token_mint_y_program_flag\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_reserved\",\n \"docs\": [\"Reserved space for future use\"],\n \"type\": {\n \"array\": [\"u8\", 22]\n }\n }\n ]\n }\n },\n {\n \"name\": \"LbPairCreate\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bin_step\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"token_x\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_y\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityOneSideParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount\",\n \"docs\": [\"Amount of X token or Y token to deposit\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"active_id\",\n \"docs\": [\"Active bin that integrator observe off-chain\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_active_bin_slippage\",\n \"docs\": [\"max active bin slippage allowed\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"bin_liquidity_dist\",\n \"docs\": [\"Liquidity distribution to each bins\"],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"BinLiquidityDistributionByWeight\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_x\",\n \"docs\": [\"Amount of X token to deposit\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_y\",\n \"docs\": [\"Amount of Y token to deposit\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"bin_liquidity_dist\",\n \"docs\": [\"Liquidity distribution to each bins\"],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"BinLiquidityDistribution\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityParameterByStrategy\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_x\",\n \"docs\": [\"Amount of X token to deposit\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_y\",\n \"docs\": [\"Amount of Y token to deposit\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"active_id\",\n \"docs\": [\"Active bin that integrator observe off-chain\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_active_bin_slippage\",\n \"docs\": [\"max active bin slippage allowed\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"strategy_parameters\",\n \"docs\": [\"strategy parameters\"],\n \"type\": {\n \"defined\": {\n \"name\": \"StrategyParameters\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityParameterByStrategyOneSide\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount\",\n \"docs\": [\"Amount of X token or Y token to deposit\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"active_id\",\n \"docs\": [\"Active bin that integrator observe off-chain\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_active_bin_slippage\",\n \"docs\": [\"max active bin slippage allowed\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"strategy_parameters\",\n \"docs\": [\"strategy parameters\"],\n \"type\": {\n \"defined\": {\n \"name\": \"StrategyParameters\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"LiquidityParameterByWeight\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_x\",\n \"docs\": [\"Amount of X token to deposit\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_y\",\n \"docs\": [\"Amount of Y token to deposit\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"active_id\",\n \"docs\": [\"Active bin that integrator observe off-chain\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_active_bin_slippage\",\n \"docs\": [\"max active bin slippage allowed\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"bin_liquidity_dist\",\n \"docs\": [\"Liquidity distribution to each bins\"],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"BinLiquidityDistributionByWeight\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"Oracle\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"idx\",\n \"docs\": [\"Index of latest observation\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"active_size\",\n \"docs\": [\n \"Size of active sample. Active sample is initialized observation.\"\n ],\n \"type\": \"u64\"\n },\n {\n \"name\": \"length\",\n \"docs\": [\"Number of observations\"],\n \"type\": \"u64\"\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 \"repr\": {\n \"kind\": \"rust\"\n },\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Enabled\"\n },\n {\n \"name\": \"Disabled\"\n }\n ]\n }\n },\n {\n \"name\": \"PairType\",\n \"docs\": [\n \"Type of the Pair. 0 = Permissionless, 1 = Permission, 2 = CustomizablePermissionless. Putting 0 as permissionless for backward compatibility.\"\n ],\n \"repr\": {\n \"kind\": \"rust\"\n },\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Permissionless\"\n },\n {\n \"name\": \"Permission\"\n },\n {\n \"name\": \"CustomizablePermissionless\"\n },\n {\n \"name\": \"PermissionlessV2\"\n }\n ]\n }\n },\n {\n \"name\": \"Position\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"docs\": [\"The LB pair of this position\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of the position. Client rely on this to to fetch their positions.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidity_shares\",\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\": [\"u64\", 70]\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\"Farming reward information\"],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"UserRewardInfo\"\n }\n },\n 70\n ]\n }\n },\n {\n \"name\": \"fee_infos\",\n \"docs\": [\"Swap fee to claim information\"],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"FeeInfo\"\n }\n },\n 70\n ]\n }\n },\n {\n \"name\": \"lower_bin_id\",\n \"docs\": [\"Lower bin ID\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"upper_bin_id\",\n \"docs\": [\"Upper bin ID\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"last_updated_at\",\n \"docs\": [\"Last updated timestamp\"],\n \"type\": \"i64\"\n },\n {\n \"name\": \"total_claimed_fee_x_amount\",\n \"docs\": [\"Total claimed token fee X\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_fee_y_amount\",\n \"docs\": [\"Total claimed token fee Y\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_rewards\",\n \"docs\": [\"Total claimed rewards\"],\n \"type\": {\n \"array\": [\"u64\", 2]\n }\n },\n {\n \"name\": \"_reserved\",\n \"docs\": [\"Reserved space for future use\"],\n \"type\": {\n \"array\": [\"u8\", 160]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PositionBinData\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"liquidity_share\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"reward_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"UserRewardInfo\"\n }\n }\n },\n {\n \"name\": \"fee_info\",\n \"type\": {\n \"defined\": {\n \"name\": \"FeeInfo\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"PositionClose\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionCreate\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"PositionV2\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"docs\": [\"The LB pair of this position\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"docs\": [\n \"Owner of the position. Client rely on this to to fetch their positions.\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"liquidity_shares\",\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\": [\"u128\", 70]\n }\n },\n {\n \"name\": \"reward_infos\",\n \"docs\": [\"Farming reward information\"],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"UserRewardInfo\"\n }\n },\n 70\n ]\n }\n },\n {\n \"name\": \"fee_infos\",\n \"docs\": [\"Swap fee to claim information\"],\n \"type\": {\n \"array\": [\n {\n \"defined\": {\n \"name\": \"FeeInfo\"\n }\n },\n 70\n ]\n }\n },\n {\n \"name\": \"lower_bin_id\",\n \"docs\": [\"Lower bin ID\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"upper_bin_id\",\n \"docs\": [\"Upper bin ID\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"last_updated_at\",\n \"docs\": [\"Last updated timestamp\"],\n \"type\": \"i64\"\n },\n {\n \"name\": \"total_claimed_fee_x_amount\",\n \"docs\": [\"Total claimed token fee X\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_fee_y_amount\",\n \"docs\": [\"Total claimed token fee Y\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"total_claimed_rewards\",\n \"docs\": [\"Total claimed rewards\"],\n \"type\": {\n \"array\": [\"u64\", 2]\n }\n },\n {\n \"name\": \"operator\",\n \"docs\": [\"Operator of position\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lock_release_point\",\n \"docs\": [\"Time point which the locked liquidity can be withdraw\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"_padding_0\",\n \"docs\": [\n \"_padding_0, previous subjected_to_bootstrap_liquidity_locking, BE CAREFUL FOR TOMBSTONE WHEN REUSE !!\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"fee_owner\",\n \"docs\": [\n \"Address is able to claim fee in this position, only valid for bootstrap_liquidity_position\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_reserved\",\n \"docs\": [\"Reserved space for future use\"],\n \"type\": {\n \"array\": [\"u8\", 87]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PresetParameter\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_step\",\n \"docs\": [\"Bin step. Represent the price increment / decrement.\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_factor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step * 10 * 10^base_fee_power_factor\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variable_fee_control\",\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\": \"max_volatility_accumulator\",\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\": \"min_bin_id\",\n \"docs\": [\n \"Min bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_bin_id\",\n \"docs\": [\n \"Max bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"protocol_share\",\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\": \"PresetParameter2\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bin_step\",\n \"docs\": [\"Bin step. Represent the price increment / decrement.\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_factor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step * 10 * 10^base_fee_power_factor\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variable_fee_control\",\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\": \"max_volatility_accumulator\",\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\": \"reduction_factor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"protocol_share\",\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\": \"index\",\n \"docs\": [\"index\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"base_fee_power_factor\",\n \"docs\": [\"Base fee power factor\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_0\",\n \"docs\": [\"Padding 0 for future use\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding_1\",\n \"docs\": [\"Padding 1 for future use\"],\n \"type\": {\n \"array\": [\"u64\", 20]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ProtocolFee\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_x\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_y\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RebalanceLiquidityParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"active_id\",\n \"docs\": [\"active id\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_active_bin_slippage\",\n \"docs\": [\"max active bin slippage allowed\"],\n \"type\": \"u16\"\n },\n {\n \"name\": \"should_claim_fee\",\n \"docs\": [\"a flag to indicate that whether fee should be harvested\"],\n \"type\": \"bool\"\n },\n {\n \"name\": \"should_claim_reward\",\n \"docs\": [\n \"a flag to indicate that whether rewards should be harvested\"\n ],\n \"type\": \"bool\"\n },\n {\n \"name\": \"min_withdraw_x_amount\",\n \"docs\": [\"threshold for withdraw token x\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_deposit_x_amount\",\n \"docs\": [\"threshold for deposit token x\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_withdraw_y_amount\",\n \"docs\": [\"threshold for withdraw token y\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_deposit_y_amount\",\n \"docs\": [\"threshold for deposit token y\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"shrink_mode\",\n \"docs\": [\"shrink mode\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"padding\",\n \"docs\": [\"padding 32 bytes for future usage\"],\n \"type\": {\n \"array\": [\"u8\", 31]\n }\n },\n {\n \"name\": \"removes\",\n \"docs\": [\"removes\"],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"RemoveLiquidityParams\"\n }\n }\n }\n },\n {\n \"name\": \"adds\",\n \"docs\": [\"adds\"],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"AddLiquidityParams\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"Rebalancing\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"active_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"x_withdrawn_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"x_added_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"y_withdrawn_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"y_added_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"x_fee_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"y_fee_amount\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"old_min_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"old_max_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"new_min_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"new_max_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"rewards\",\n \"type\": {\n \"array\": [\"u64\", 2]\n }\n }\n ]\n }\n },\n {\n \"name\": \"RemainingAccountsInfo\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"slices\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"RemainingAccountsSlice\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"RemainingAccountsSlice\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"accounts_type\",\n \"type\": {\n \"defined\": {\n \"name\": \"AccountsType\"\n }\n }\n },\n {\n \"name\": \"length\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoveLiquidity\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"from\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amounts\",\n \"type\": {\n \"array\": [\"u64\", 2]\n }\n },\n {\n \"name\": \"active_bin_id\",\n \"type\": \"i32\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoveLiquidityParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"min_bin_id\",\n \"type\": {\n \"option\": \"i32\"\n }\n },\n {\n \"name\": \"max_bin_id\",\n \"type\": {\n \"option\": \"i32\"\n }\n },\n {\n \"name\": \"bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"padding\",\n \"type\": {\n \"array\": [\"u8\", 16]\n }\n }\n ]\n }\n },\n {\n \"name\": \"ResizeSide\",\n \"docs\": [\"Side of resize, 0 for lower and 1 for upper\"],\n \"repr\": {\n \"kind\": \"rust\"\n },\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Lower\"\n },\n {\n \"name\": \"Upper\"\n }\n ]\n }\n },\n {\n \"name\": \"RewardInfo\",\n \"docs\": [\n \"Stores the state relevant for tracking liquidity mining rewards\"\n ],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"mint\",\n \"docs\": [\"Reward token mint.\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"vault\",\n \"docs\": [\"Reward vault token account.\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"funder\",\n \"docs\": [\"Authority account that allows to fund rewards\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_duration\",\n \"docs\": [\"LM reward duration in seconds.\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_duration_end\",\n \"docs\": [\"LM reward duration end time.\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"reward_rate\",\n \"docs\": [\"LM reward rate\"],\n \"type\": \"u128\"\n },\n {\n \"name\": \"last_update_time\",\n \"docs\": [\"The last time reward states were updated.\"],\n \"type\": \"u64\"\n },\n {\n \"name\": \"cumulative_seconds_with_empty_liquidity_reward\",\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\": \"Rounding\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Up\"\n },\n {\n \"name\": \"Down\"\n }\n ]\n }\n },\n {\n \"name\": \"StaticParameters\",\n \"docs\": [\"Parameter that set by the protocol\"],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"base_factor\",\n \"docs\": [\n \"Used for base fee calculation. base_fee_rate = base_factor * bin_step * 10 * 10^base_fee_power_factor\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"filter_period\",\n \"docs\": [\n \"Filter period determine high frequency trading time window.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"decay_period\",\n \"docs\": [\n \"Decay period determine when the volatile fee start decay / decrease.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"reduction_factor\",\n \"docs\": [\n \"Reduction factor controls the volatile fee rate decrement rate.\"\n ],\n \"type\": \"u16\"\n },\n {\n \"name\": \"variable_fee_control\",\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\": \"max_volatility_accumulator\",\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\": \"min_bin_id\",\n \"docs\": [\n \"Min bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_bin_id\",\n \"docs\": [\n \"Max bin id supported by the pool based on the configured bin step.\"\n ],\n \"type\": \"i32\"\n },\n {\n \"name\": \"protocol_share\",\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\": \"base_fee_power_factor\",\n \"docs\": [\"Base fee power factor\"],\n \"type\": \"u8\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\"Padding for bytemuck safe alignment\"],\n \"type\": {\n \"array\": [\"u8\", 5]\n }\n }\n ]\n }\n },\n {\n \"name\": \"StrategyParameters\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"min_bin_id\",\n \"docs\": [\"min bin id\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"max_bin_id\",\n \"docs\": [\"max bin id\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"strategy_type\",\n \"docs\": [\"strategy type\"],\n \"type\": {\n \"defined\": {\n \"name\": \"StrategyType\"\n }\n }\n },\n {\n \"name\": \"parameteres\",\n \"docs\": [\"parameters\"],\n \"type\": {\n \"array\": [\"u8\", 64]\n }\n }\n ]\n }\n },\n {\n \"name\": \"StrategyType\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"SpotOneSide\"\n },\n {\n \"name\": \"CurveOneSide\"\n },\n {\n \"name\": \"BidAskOneSide\"\n },\n {\n \"name\": \"SpotBalanced\"\n },\n {\n \"name\": \"CurveBalanced\"\n },\n {\n \"name\": \"BidAskBalanced\"\n },\n {\n \"name\": \"SpotImBalanced\"\n },\n {\n \"name\": \"CurveImBalanced\"\n },\n {\n \"name\": \"BidAskImBalanced\"\n }\n ]\n }\n },\n {\n \"name\": \"Swap\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"from\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"start_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"end_bin_id\",\n \"type\": \"i32\"\n },\n {\n \"name\": \"amount_in\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_out\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"swap_for_y\",\n \"type\": \"bool\"\n },\n {\n \"name\": \"fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"protocol_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee_bps\",\n \"type\": \"u128\"\n },\n {\n \"name\": \"host_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"TokenBadge\",\n \"docs\": [\"Parameter that set by the protocol\"],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"docs\": [\"token mint\"],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\"Reserve\"],\n \"type\": {\n \"array\": [\"u8\", 128]\n }\n }\n ]\n }\n },\n {\n \"name\": \"TokenProgramFlags\",\n \"repr\": {\n \"kind\": \"rust\"\n },\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"TokenProgram\"\n },\n {\n \"name\": \"TokenProgram2022\"\n }\n ]\n }\n },\n {\n \"name\": \"UpdatePositionLockReleasePoint\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"current_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_lock_release_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"old_lock_release_point\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"sender\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"UpdatePositionOperator\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"position\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"old_operator\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_operator\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"UpdateRewardDuration\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"old_reward_duration\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"new_reward_duration\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"UpdateRewardFunder\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_index\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"old_funder\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"new_funder\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"UserRewardInfo\",\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"reward_per_token_completes\",\n \"type\": {\n \"array\": [\"u128\", 2]\n }\n },\n {\n \"name\": \"reward_pendings\",\n \"type\": {\n \"array\": [\"u64\", 2]\n }\n }\n ]\n }\n },\n {\n \"name\": \"VariableParameters\",\n \"docs\": [\"Parameters that changes based on dynamic of the market\"],\n \"serialization\": \"bytemuck\",\n \"repr\": {\n \"kind\": \"c\"\n },\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"volatility_accumulator\",\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\": \"volatility_reference\",\n \"docs\": [\n \"Volatility reference is decayed volatility accumulator. It is always <= volatility_accumulator\"\n ],\n \"type\": \"u32\"\n },\n {\n \"name\": \"index_reference\",\n \"docs\": [\"Active bin id of last swap.\"],\n \"type\": \"i32\"\n },\n {\n \"name\": \"_padding\",\n \"docs\": [\"Padding for bytemuck safe alignment\"],\n \"type\": {\n \"array\": [\"u8\", 4]\n }\n },\n {\n \"name\": \"last_update_timestamp\",\n \"docs\": [\"Last timestamp the variable parameters was updated\"],\n \"type\": \"i64\"\n },\n {\n \"name\": \"_padding_1\",\n \"docs\": [\"Padding for bytemuck safe alignment\"],\n \"type\": {\n \"array\": [\"u8\", 8]\n }\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawIneligibleReward\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"lb_pair\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"reward_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n }\n ],\n \"constants\": [\n {\n \"name\": \"BASIS_POINT_MAX\",\n \"type\": \"i32\",\n \"value\": \"10000\"\n },\n {\n \"name\": \"BIN_ARRAY\",\n \"type\": \"bytes\",\n \"value\": \"[98, 105, 110, 95, 97, 114, 114, 97, 121]\"\n },\n {\n \"name\": \"BIN_ARRAY_BITMAP_SEED\",\n \"type\": \"bytes\",\n \"value\": \"[98, 105, 116, 109, 97, 112]\"\n },\n {\n \"name\": \"BIN_ARRAY_BITMAP_SIZE\",\n \"type\": \"i32\",\n \"value\": \"512\"\n },\n {\n \"name\": \"CLAIM_PROTOCOL_FEE_OPERATOR\",\n \"type\": \"bytes\",\n \"value\": \"[99, 102, 95, 111, 112, 101, 114, 97, 116, 111, 114]\"\n },\n {\n \"name\": \"DEFAULT_BIN_PER_POSITION\",\n \"type\": \"u64\",\n \"value\": \"70\"\n },\n {\n \"name\": \"EXTENSION_BINARRAY_BITMAP_SIZE\",\n \"type\": \"u64\",\n \"value\": \"12\"\n },\n {\n \"name\": \"FEE_PRECISION\",\n \"type\": \"u64\",\n \"value\": \"1000000000\"\n },\n {\n \"name\": \"HOST_FEE_BPS\",\n \"docs\": [\"Host fee. 20%\"],\n \"type\": \"u16\",\n \"value\": \"2000\"\n },\n {\n \"name\": \"ILM_PROTOCOL_SHARE\",\n \"type\": \"u16\",\n \"value\": \"2000\"\n },\n {\n \"name\": \"MAX_BASE_FEE\",\n \"docs\": [\"Maximum base fee, base_fee / 10^9 = fee_in_percentage\"],\n \"type\": \"u128\",\n \"value\": \"100000000\"\n },\n {\n \"name\": \"MAX_BIN_ID\",\n \"docs\": [\"Maximum bin ID supported. Computed based on 1 bps.\"],\n \"type\": \"i32\",\n \"value\": \"443636\"\n },\n {\n \"name\": \"MAX_BIN_PER_ARRAY\",\n \"type\": \"u64\",\n \"value\": \"70\"\n },\n {\n \"name\": \"MAX_BIN_STEP\",\n \"docs\": [\"Maximum bin step\"],\n \"type\": \"u16\",\n \"value\": \"400\"\n },\n {\n \"name\": \"MAX_FEE_RATE\",\n \"docs\": [\"Maximum fee rate. 10%\"],\n \"type\": \"u64\",\n \"value\": \"100000000\"\n },\n {\n \"name\": \"MAX_PROTOCOL_SHARE\",\n \"docs\": [\"Maximum protocol share of the fee. 25%\"],\n \"type\": \"u16\",\n \"value\": \"2500\"\n },\n {\n \"name\": \"MAX_RESIZE_LENGTH\",\n \"type\": \"u64\",\n \"value\": \"91\"\n },\n {\n \"name\": \"MAX_REWARD_BIN_SPLIT\",\n \"type\": \"u64\",\n \"value\": \"15\"\n },\n {\n \"name\": \"MAX_REWARD_DURATION\",\n \"type\": \"u64\",\n \"value\": \"31536000\"\n },\n {\n \"name\": \"MINIMUM_LIQUIDITY\",\n \"type\": \"u128\",\n \"value\": \"1000000\"\n },\n {\n \"name\": \"MIN_BASE_FEE\",\n \"docs\": [\"Minimum base fee\"],\n \"type\": \"u128\",\n \"value\": \"100000\"\n },\n {\n \"name\": \"MIN_BIN_ID\",\n \"docs\": [\"Minimum bin ID supported. Computed based on 1 bps.\"],\n \"type\": \"i32\",\n \"value\": \"-443636\"\n },\n {\n \"name\": \"MIN_REWARD_DURATION\",\n \"type\": \"u64\",\n \"value\": \"1\"\n },\n {\n \"name\": \"NUM_REWARDS\",\n \"type\": \"u64\",\n \"value\": \"2\"\n },\n {\n \"name\": \"ORACLE\",\n \"type\": \"bytes\",\n \"value\": \"[111, 114, 97, 99, 108, 101]\"\n },\n {\n \"name\": \"POSITION\",\n \"type\": \"bytes\",\n \"value\": \"[112, 111, 115, 105, 116, 105, 111, 110]\"\n },\n {\n \"name\": \"POSITION_MAX_LENGTH\",\n \"type\": \"u64\",\n \"value\": \"1400\"\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\": \"PRESET_PARAMETER2\",\n \"type\": \"bytes\",\n \"value\": \"[112, 114, 101, 115, 101, 116, 95, 112, 97, 114, 97, 109, 101, 116, 101, 114, 50]\"\n },\n {\n \"name\": \"PROTOCOL_SHARE\",\n \"type\": \"u16\",\n \"value\": \"500\"\n }\n ]\n}\n","import IDL from \"./dlmm.json\";\nimport { AnchorError } from \"@coral-xyz/anchor\";\nimport { LBCLMM_PROGRAM_IDS } from \"./constants\";\n\ntype Codes = (typeof IDL.errors)[number][\"code\"];\n\n// ProgramError error parser\nexport class 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(\n JSON.parse(JSON.stringify(error)).logs as string[]\n );\n\n if (\n anchorError?.program.toBase58() === LBCLMM_PROGRAM_IDS[\"mainnet-beta\"]\n ) {\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\n// SDK error\ntype ErrorName =\n | \"SWAP_QUOTE_INSUFFICIENT_LIQUIDITY\"\n | \"INVALID_MAX_EXTRA_BIN_ARRAYS\";\n\nexport class DlmmSdkError extends Error {\n name: ErrorName;\n message: string;\n\n constructor(name: ErrorName, message: string) {\n super();\n this.name = name;\n this.message = message;\n }\n}\n","import { AnchorProvider, BN, EventParser, Program } from \"@coral-xyz/anchor\";\nimport { IdlDiscriminator } from \"@coral-xyz/anchor/dist/cjs/idl\";\nimport {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n TokenAccountNotFoundError,\n TokenInvalidAccountOwnerError,\n createAssociatedTokenAccountIdempotentInstruction,\n createCloseAccountInstruction,\n getAccount,\n getAssociatedTokenAddressSync,\n getMint,\n} from \"@solana/spl-token\";\nimport {\n Cluster,\n ComputeBudgetProgram,\n Connection,\n PublicKey,\n SystemProgram,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport { DLMM } from \"..\";\nimport {\n LBCLMM_PROGRAM_IDS,\n MAX_BINS_PER_POSITION,\n SCALE_OFFSET,\n U64_MAX,\n} from \"../constants\";\nimport IDL from \"../dlmm.json\";\nimport { LbClmm } from \"../idl\";\nimport {\n AccountName,\n ActionType,\n Bin,\n BinArray,\n BinArrayBitmapExtension,\n ClmmProgram,\n GetOrCreateATAResponse,\n LbPair,\n Position,\n PositionV2,\n PresetParameter,\n PresetParameter2,\n REBALANCE_POSITION_PADDING,\n RebalanceAddLiquidityParam,\n ShrinkMode,\n StrategyParameters,\n} from \"../types\";\nimport {\n deriveBinArrayBitmapExtension,\n isOverflowDefaultBinArrayBitmap,\n} from \"./binArray\";\nimport {\n DEFAULT_ADD_LIQUIDITY_CU,\n DEFAULT_INIT_BIN_ARRAY_CU,\n MAX_CU,\n MAX_CU_BUFFER,\n MIN_CU_BUFFER,\n getSimulationComputeUnits,\n} from \"./computeUnit\";\nimport { deriveBinArray, derivePlaceHolderAccountMeta } from \"./derive\";\nimport { Rounding, mulShr, shlDiv } from \"./math\";\nimport { chunkBinRange, getBinArrayIndexesCoverage } from \"./positions\";\nimport {\n LiquidityStrategyParameters,\n buildBitFlagAndNegateStrategyParameters,\n toAmountIntoBins,\n} from \"./rebalance\";\nimport { calculateTransferFeeIncludedAmount } from \"./token_2022\";\nimport Decimal from \"decimal.js\";\n\nexport * from \"./binArray\";\nexport * from \"./derive\";\nexport * from \"./fee\";\nexport * from \"./lbPair\";\nexport * from \"./positions\";\nexport * from \"./rebalance\";\nexport * from \"./strategy\";\nexport * from \"./weight\";\nexport * from \"./weightToAmounts\";\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 function range<T>(min: number, max: number, mapfn: (i: number) => T) {\n const length = max - min + 1;\n return Array.from({ length }, (_, i) => mapfn(min + i));\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 programId?: PublicKey,\n payer: PublicKey = owner,\n allowOwnerOffCurve = true\n): Promise<GetOrCreateATAResponse> => {\n programId = programId ?? TOKEN_PROGRAM_ID;\n const toAccount = getAssociatedTokenAddressSync(\n tokenMint,\n owner,\n allowOwnerOffCurve,\n programId,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n try {\n await getAccount(connection, toAccount, connection.commitment, programId);\n\n return { ataPubKey: toAccount, ix: undefined };\n } catch (e) {\n if (\n e instanceof TokenAccountNotFoundError ||\n e instanceof TokenInvalidAccountOwnerError\n ) {\n const ix = createAssociatedTokenAccountIdempotentInstruction(\n payer,\n toAccount,\n owner,\n tokenMint,\n programId,\n ASSOCIATED_TOKEN_PROGRAM_ID\n );\n\n return { ataPubKey: toAccount, ix };\n } else {\n /* handle error */\n console.error(\"Error::getOrCreateATAInstruction\", e);\n throw e;\n }\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 (\n owner: PublicKey,\n allowOwnerOffCurve = true\n) => {\n const wSolATAAccount = getAssociatedTokenAddressSync(\n NATIVE_MINT,\n owner,\n allowOwnerOffCurve\n );\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\n/**\n * Gets the estimated compute unit usage with a buffer.\n * @param connection A Solana connection object.\n * @param instructions The instructions of the transaction to simulate.\n * @param feePayer The public key of the fee payer.\n * @param buffer The buffer to add to the estimated compute unit usage. Max value is 1. Default value is 0.1 if not provided, and will be capped between 50k - 200k.\n * @returns The estimated compute unit usage with the buffer.\n */\nexport const getEstimatedComputeUnitUsageWithBuffer = async (\n connection: Connection,\n instructions: TransactionInstruction[],\n feePayer: PublicKey,\n buffer?: number,\n altAddress?: PublicKey\n) => {\n if (!buffer) {\n buffer = 0.1;\n }\n // Avoid negative value\n buffer = Math.max(0, buffer);\n // Limit buffer to 1\n buffer = Math.min(1, buffer);\n\n const altAccounts = [];\n\n if (altAddress) {\n const altAccountInfo = await connection.getAddressLookupTable(altAddress);\n altAccounts.push(altAccountInfo.value);\n }\n\n const estimatedComputeUnitUsage = await getSimulationComputeUnits(\n connection,\n instructions,\n feePayer,\n altAccounts\n );\n\n let extraComputeUnitBuffer = estimatedComputeUnitUsage * buffer;\n if (extraComputeUnitBuffer > MAX_CU_BUFFER) {\n extraComputeUnitBuffer = MAX_CU_BUFFER;\n } else if (extraComputeUnitBuffer < MIN_CU_BUFFER) {\n extraComputeUnitBuffer = MIN_CU_BUFFER;\n }\n\n return estimatedComputeUnitUsage + extraComputeUnitBuffer;\n};\n\n/**\n * Gets the estimated compute unit usage with a buffer and converts it to a SetComputeUnitLimit instruction.\n * If the estimated compute unit usage cannot be retrieved, returns a SetComputeUnitLimit instruction with the fallback unit.\n * @param connection A Solana connection object.\n * @param instructions The instructions of the transaction to simulate.\n * @param feePayer The public key of the fee payer.\n * @param buffer The buffer to add to the estimated compute unit usage. Max value is 1. Default value is 0.1 if not provided, and will be capped between 50k - 200k.\n * @returns A SetComputeUnitLimit instruction with the estimated compute unit usage.\n */\nexport const getEstimatedComputeUnitIxWithBuffer = async (\n connection: Connection,\n instructions: TransactionInstruction[],\n feePayer: PublicKey,\n buffer?: number,\n altAddress?: PublicKey\n) => {\n const units = await getEstimatedComputeUnitUsageWithBuffer(\n connection,\n instructions,\n feePayer,\n buffer,\n altAddress\n ).catch((error) => {\n console.error(\"Error::getEstimatedComputeUnitUsageWithBuffer\", error);\n return 1_400_000;\n });\n\n return ComputeBudgetProgram.setComputeUnitLimit({ units });\n};\n\nexport type Opt = {\n cluster?: Cluster | \"localhost\";\n programId?: PublicKey;\n skipSolWrappingOperation?: boolean;\n};\n\nexport function createProgram(connection: Connection, opt?: Opt) {\n const cluster = opt?.cluster || \"mainnet-beta\";\n const provider = new AnchorProvider(\n connection,\n {} as any,\n AnchorProvider.defaultOptions()\n );\n\n return new Program<LbClmm>(\n { ...IDL, address: opt?.programId ?? LBCLMM_PROGRAM_IDS[cluster] },\n provider\n );\n}\n\nexport function decodeAccount<\n T extends\n | LbPair\n | BinArrayBitmapExtension\n | BinArray\n | PositionV2\n | Position\n | PresetParameter\n | PresetParameter2\n>(program: Program<LbClmm>, accountName: AccountName, buffer: Buffer): T {\n return program.coder.accounts.decode(accountName, buffer);\n}\n\nexport function getAccountDiscriminator(\n accountName: AccountName\n): IdlDiscriminator {\n return IDL.accounts.find(\n (acc) => acc.name.toLowerCase() === accountName.toLowerCase()\n )?.discriminator;\n}\n\n/**\n * Caps a slippage percentage to be between 0 and 100.\n * @param slippage The slippage percentage to be capped.\n * @returns The capped slippage percentage.\n */\nexport function capSlippagePercentage(slippage: number) {\n if (slippage > 100) {\n slippage = 100;\n }\n\n if (slippage < 0) {\n slippage = 0;\n }\n\n return slippage;\n}\n/**\n * Given a slippage percentage and a bin step, calculate the maximum number of bins\n * that the user is willing to allow the active bin to drift from the target price.\n * If the slippage percentage is 0 or null, return the maxActiveBinSlippage instead.\n *\n * @param slippagePercentage The slippage percentage in basis points.\n * @param binStep The bin step of the pair.\n * @param maxActiveBinSlippage The maximum number of bins that the active bin can drift.\n * @returns The maximum number of bins that the user is willing to allow the active bin to drift.\n */\nexport function getAndCapMaxActiveBinSlippage(\n slippagePercentage: number,\n binStep: number,\n maxActiveBinSlippage: number\n) {\n return slippagePercentage\n ? Math.ceil(slippagePercentage / (binStep / 100))\n : maxActiveBinSlippage;\n}\n\n/**\n * Calculates the number of bins in a given range.\n *\n * @param minBinId The minimum bin id of the range.\n * @param maxBinId The maximum bin id of the range.\n * @returns The number of bins in the range.\n */\nexport function getBinCount(minBinId: number, maxBinId: number) {\n return maxBinId - minBinId + 1;\n}\n\n/**\n * Calculates the maximum amount of tokens after applying slippage to the given amount.\n *\n * @param amount The amount of tokens before slippage.\n * @param slippage The percentage of slippage to apply.\n * @returns The maximum amount of tokens after applying slippage. If the slippage is 100%, the maximum amount is U64_MAX.\n *\n **/\nexport function getSlippageMaxAmount(amount: BN, slippage: number) {\n if (slippage == 100) {\n return U64_MAX;\n }\n\n const amountDecimal = new Decimal(amount.toString());\n\n const slippageAppliedAmount = new BN(\n amountDecimal\n .mul(new Decimal(100 + slippage))\n .div(new Decimal(100))\n .floor()\n .toString()\n );\n\n return slippageAppliedAmount;\n}\n\n/**\n * Calculates the minimum amount of tokens after applying slippage to the given amount.\n *\n * @param amount The amount of tokens before slippage.\n * @param slippage The percentage of slippage to apply.\n * @returns The minimum amount of tokens after applying slippage.\n */\nexport function getSlippageMinAmount(amount: BN, slippage: number) {\n const amountDecimal = new Decimal(amount.toString());\n return new BN(\n amountDecimal\n .mul(new Decimal(100 - slippage))\n .div(new Decimal(100))\n .ceil()\n .toString()\n );\n}\n\n/**\n * Calculates the number of positions required to cover a range of bins.\n *\n * @param binCount The number of bins in the range.\n * @returns The number of positions required to cover the range of bins.\n */\nexport function getPositionCountByBinCount(binCount: number) {\n return Math.ceil(binCount / MAX_BINS_PER_POSITION.toNumber());\n}\n\n/**\n * Adjusts the liquidity parameters to reset uninvolved liquidity based on delta IDs.\n *\n * This function modifies the provided liquidity strategy parameters by resetting\n * the x0, y0, deltaX, and deltaY values when certain conditions regarding the\n * minDeltaId and maxDeltaId are met. If the maxDeltaId is less than or equal\n * to the end of the bid side delta ID, x0 and deltaX are set to zero. If the\n * minDeltaId is greater than or equal to the start of the ask side delta ID,\n * y0 and deltaY are set to zero.\n *\n * @param minDeltaId - The minimum delta ID.\n * @param maxDeltaId - The maximum delta ID.\n * @param favorXInActiveId - A boolean indicating if X is favored in the active bin.\n * @param params - The liquidity strategy parameters containing x0, y0, deltaX, and deltaY.\n * @returns An object containing the adjusted x0, y0, deltaX, and deltaY values.\n */\n\nexport function resetUninvolvedLiquidityParams(\n minDeltaId: BN,\n maxDeltaId: BN,\n favorXInActiveId: boolean,\n params: LiquidityStrategyParameters\n) {\n const endBidSideDeltaId = favorXInActiveId ? new BN(-1) : new BN(0);\n const startAskSideDeltaId = endBidSideDeltaId.addn(1);\n\n let x0 = params.x0;\n let y0 = params.y0;\n let deltaX = params.deltaX;\n let deltaY = params.deltaY;\n\n if (maxDeltaId.lte(endBidSideDeltaId)) {\n deltaX = new BN(0);\n x0 = new BN(0);\n }\n\n if (minDeltaId.gte(startAskSideDeltaId)) {\n deltaY = new BN(0);\n y0 = new BN(0);\n }\n\n return {\n x0,\n y0,\n deltaX,\n deltaY,\n };\n}\n\nexport async function chunkDepositWithRebalanceEndpoint(\n dlmm: DLMM,\n strategy: StrategyParameters,\n slippagePercentage: number,\n maxActiveBinSlippage: number,\n position: PublicKey,\n positionMinBinId: number,\n positionMaxBinId: number,\n liquidityStrategyParameters: LiquidityStrategyParameters,\n owner: PublicKey,\n payer: PublicKey,\n // When isParallel = false, instructions must be executed sequentially\n isParallel: boolean,\n skipSolWrappingOperation: boolean = false\n) {\n const { slices, accounts: transferHookAccounts } =\n dlmm.getPotentialToken2022IxDataAndAccounts(ActionType.Liquidity);\n\n const userTokenX = getAssociatedTokenAddressSync(\n dlmm.lbPair.tokenXMint,\n owner,\n true,\n dlmm.tokenX.owner\n );\n\n const userTokenY = getAssociatedTokenAddressSync(\n dlmm.lbPair.tokenYMint,\n owner,\n true,\n dlmm.tokenY.owner\n );\n\n const createUserTokenXIx = createAssociatedTokenAccountIdempotentInstruction(\n payer,\n userTokenX,\n owner,\n dlmm.lbPair.tokenXMint,\n dlmm.tokenX.owner\n );\n\n const createUserTokenYIx = createAssociatedTokenAccountIdempotentInstruction(\n payer,\n userTokenY,\n owner,\n dlmm.lbPair.tokenYMint,\n dlmm.tokenY.owner\n );\n\n const bitmapPubkey = deriveBinArrayBitmapExtension(\n dlmm.pubkey,\n dlmm.program.programId\n )[0];\n\n let calculatedAddLiquidityCU = 0;\n\n const chunkedAddLiquidityIx: TransactionInstruction[][] = [];\n const chunkedBinRange = chunkBinRange(positionMinBinId, positionMaxBinId);\n\n const binArrayOrBitmapInitTracking = new Set<String>();\n\n for (let i = 0; i < chunkedBinRange.length; i++) {\n const chunkMinBinId = chunkedBinRange[i].lowerBinId;\n const chunkMaxBinId = chunkedBinRange[i].upperBinId;\n\n const initBinArrayIxs: TransactionInstruction[] = [];\n const initBitmapIxs: TransactionInstruction[] = [];\n\n const binArrayIndexes = getBinArrayIndexesCoverage(\n new BN(chunkMinBinId),\n new BN(chunkMaxBinId)\n );\n\n const overflowDefaultBinArrayBitmap = binArrayIndexes.reduce(\n (acc, binArrayIndex) =>\n acc || isOverflowDefaultBinArrayBitmap(binArrayIndex),\n false\n );\n\n if (overflowDefaultBinArrayBitmap) {\n const initBitmapIx = await dlmm.program.methods\n .initializeBinArrayBitmapExtension()\n .accountsPartial({\n binArrayBitmapExtension: bitmapPubkey,\n lbPair: dlmm.pubkey,\n funder: payer,\n })\n .instruction();\n\n initBitmapIxs.push(initBitmapIx);\n binArrayOrBitmapInitTracking.add(bitmapPubkey.toBase58());\n }\n\n const binArrayPubkeys = binArrayIndexes.map(\n (index) => deriveBinArray(dlmm.pubkey, index, dlmm.program.programId)[0]\n );\n\n for (const [idx, binArrayPubkey] of binArrayPubkeys.entries()) {\n const initBinArrayIx = await dlmm.program.methods\n .initializeBinArray(binArrayIndexes[idx])\n .accountsPartial({\n binArray: binArrayPubkey,\n funder: payer,\n lbPair: dlmm.pubkey,\n })\n .instruction();\n\n if (isParallel) {\n initBinArrayIxs.push(initBinArrayIx);\n } else if (!binArrayOrBitmapInitTracking.has(binArrayPubkey.toBase58())) {\n binArrayOrBitmapInitTracking.add(binArrayPubkey.toBase58());\n initBinArrayIxs.push(initBinArrayIx);\n calculatedAddLiquidityCU += DEFAULT_INIT_BIN_ARRAY_CU;\n }\n }\n\n const minDeltaId = new BN(chunkMinBinId - dlmm.lbPair.activeId);\n const maxDeltaId = new BN(chunkMaxBinId - dlmm.lbPair.activeId);\n\n const { deltaX, deltaY, x0, y0 } = resetUninvolvedLiquidityParams(\n minDeltaId,\n maxDeltaId,\n strategy.singleSidedX,\n {\n ...liquidityStrategyParameters,\n }\n );\n\n const { bitFlag, ...baseAndDelta } =\n buildBitFlagAndNegateStrategyParameters(x0, y0, deltaX, deltaY);\n\n const addParam: RebalanceAddLiquidityParam = {\n minDeltaId: minDeltaId.toNumber(),\n maxDeltaId: maxDeltaId.toNumber(),\n x0: baseAndDelta.x0,\n y0: baseAndDelta.y0,\n deltaX: baseAndDelta.deltaX,\n deltaY: baseAndDelta.deltaY,\n bitFlag,\n favorXInActiveId: strategy.singleSidedX,\n padding: Array(36).fill(0),\n };\n\n const { totalXAmount, totalYAmount } = toAmountIntoBins(\n new BN(dlmm.lbPair.activeId),\n minDeltaId,\n maxDeltaId,\n deltaX,\n deltaY,\n x0,\n y0,\n new BN(dlmm.lbPair.binStep),\n strategy.singleSidedX\n ).reduce(\n (acc, bin) => {\n return {\n totalXAmount: acc.totalXAmount.add(bin.amountX),\n totalYAmount: acc.totalYAmount.add(bin.amountY),\n };\n },\n {\n totalXAmount: new BN(0),\n totalYAmount: new BN(0),\n }\n );\n\n const totalXAmountIncludeTransferFee = calculateTransferFeeIncludedAmount(\n totalXAmount,\n dlmm.tokenX.mint,\n dlmm.clock.epoch.toNumber()\n ).amount;\n\n const totalYAmountIncludeTransferFee = calculateTransferFeeIncludedAmount(\n totalYAmount,\n dlmm.tokenY.mint,\n dlmm.clock.epoch.toNumber()\n ).amount;\n\n const maxDepositXAmount = getSlippageMaxAmount(\n totalXAmountIncludeTransferFee,\n slippagePercentage\n );\n\n const maxDepositYAmount = getSlippageMaxAmount(\n totalYAmountIncludeTransferFee,\n slippagePercentage\n );\n\n let shrinkMode: ShrinkMode;\n\n if (isParallel) {\n if (i == 0) {\n shrinkMode = ShrinkMode.NoShrinkRight;\n } else if (i == chunkBinRange.length - 1) {\n shrinkMode = ShrinkMode.NoShrinkLeft;\n } else {\n shrinkMode = ShrinkMode.NoShrinkBoth;\n }\n } else {\n shrinkMode = ShrinkMode.ShrinkBoth;\n }\n\n const rebalanceIx = await dlmm.program.methods\n .rebalanceLiquidity(\n {\n activeId: dlmm.lbPair.activeId,\n maxActiveBinSlippage,\n shouldClaimFee: false,\n shouldClaimReward: false,\n minWithdrawXAmount: new BN(0),\n minWithdrawYAmount: new BN(0),\n maxDepositXAmount,\n maxDepositYAmount,\n removes: [],\n adds: [addParam],\n shrinkMode,\n padding: REBALANCE_POSITION_PADDING,\n },\n {\n slices,\n }\n )\n .accountsPartial({\n binArrayBitmapExtension:\n initBitmapIxs.length > 0 ? bitmapPubkey : dlmm.program.programId,\n lbPair: dlmm.pubkey,\n position,\n owner,\n tokenXMint: dlmm.lbPair.tokenXMint,\n tokenYMint: dlmm.lbPair.tokenYMint,\n userTokenX,\n userTokenY,\n tokenXProgram: dlmm.tokenX.owner,\n tokenYProgram: dlmm.tokenY.owner,\n rentPayer: payer,\n })\n .remainingAccounts([\n ...transferHookAccounts,\n ...binArrayPubkeys.map((baPubkey) => ({\n pubkey: baPubkey,\n isWritable: true,\n isSigner: false,\n })),\n derivePlaceHolderAccountMeta(dlmm.program.programId),\n ])\n .instruction();\n\n calculatedAddLiquidityCU += DEFAULT_ADD_LIQUIDITY_CU;\n\n const addLiquidityIxs: TransactionInstruction[] = [];\n\n addLiquidityIxs.push(...initBitmapIxs, ...initBinArrayIxs);\n\n if (isParallel) {\n addLiquidityIxs.push(createUserTokenXIx);\n addLiquidityIxs.push(createUserTokenYIx);\n }\n\n if (\n dlmm.tokenX.publicKey.equals(NATIVE_MINT) &&\n !skipSolWrappingOperation\n ) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n userTokenX,\n BigInt(totalXAmount.toString())\n );\n\n if (!isParallel) {\n addLiquidityIxs.push(createUserTokenXIx);\n }\n addLiquidityIxs.push(...wrapSOLIx);\n }\n\n if (\n dlmm.tokenY.publicKey.equals(NATIVE_MINT) &&\n !skipSolWrappingOperation\n ) {\n const wrapSOLIx = wrapSOLInstruction(\n owner,\n userTokenY,\n BigInt(totalYAmount.toString())\n );\n\n if (!isParallel) {\n addLiquidityIxs.push(createUserTokenYIx);\n }\n addLiquidityIxs.push(...wrapSOLIx);\n }\n\n addLiquidityIxs.push(rebalanceIx);\n\n if (\n dlmm.tokenX.publicKey.equals(NATIVE_MINT) &&\n !totalXAmount.isZero() &&\n !skipSolWrappingOperation\n ) {\n addLiquidityIxs.push(\n createCloseAccountInstruction(\n userTokenX,\n owner,\n owner,\n [],\n TOKEN_PROGRAM_ID\n )\n );\n }\n\n if (\n dlmm.tokenY.publicKey.equals(NATIVE_MINT) &&\n !totalYAmount.isZero() &&\n !skipSolWrappingOperation\n ) {\n addLiquidityIxs.push(\n createCloseAccountInstruction(\n userTokenY,\n owner,\n owner,\n [],\n TOKEN_PROGRAM_ID\n )\n );\n }\n\n if (!isParallel) {\n addLiquidityIxs.unshift(\n ComputeBudgetProgram.setComputeUnitLimit({\n units: Math.min(calculatedAddLiquidityCU, MAX_CU),\n })\n );\n }\n\n chunkedAddLiquidityIx.push(addLiquidityIxs);\n }\n\n return chunkedAddLiquidityIx;\n}\n","import {\n BN,\n BorshAccountsCoder,\n IdlAccounts,\n IdlTypes,\n Program,\n ProgramAccount,\n} from \"@coral-xyz/anchor\";\nimport { LbClmm } from \"../idl\";\nimport { getPriceOfBinByBinId } from \"../helpers\";\nimport {\n AccountMeta,\n Keypair,\n PublicKey,\n TransactionInstruction,\n} from \"@solana/web3.js\";\nimport Decimal from \"decimal.js\";\nimport { u64, i64, struct, rustEnum } from \"@coral-xyz/borsh\";\nimport { Mint } from \"@solana/spl-token\";\nimport { AllAccountsMap } from \"@coral-xyz/anchor/dist/cjs/program/namespace/types\";\nimport { RebalancePosition, SimulateRebalanceResp } from \"../helpers/rebalance\";\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 mint: Mint;\n amount: bigint;\n owner: PublicKey;\n transferHookAccountMetas: AccountMeta[];\n}\n\nexport type ClmmProgram = Program<LbClmm>;\n\nexport type LbPair = IdlAccounts<LbClmm>[\"lbPair\"];\nexport type LbPairAccount = ProgramAccount<IdlAccounts<LbClmm>[\"lbPair\"]>;\n\nexport type AccountName = keyof AllAccountsMap<LbClmm>;\n\nexport type Bin = IdlTypes<LbClmm>[\"bin\"];\nexport type BinArray = IdlAccounts<LbClmm>[\"binArray\"];\nexport type BinArrayAccount = ProgramAccount<IdlAccounts<LbClmm>[\"binArray\"]>;\n\nexport type Position = IdlAccounts<LbClmm>[\"position\"];\nexport type PositionV2 = IdlAccounts<LbClmm>[\"positionV2\"];\n\nexport type PresetParameter = IdlAccounts<LbClmm>[\"presetParameter\"];\nexport type PresetParameter2 = IdlAccounts<LbClmm>[\"presetParameter2\"];\n\nexport type vParameters = IdlAccounts<LbClmm>[\"lbPair\"][\"vParameters\"];\nexport type sParameters = IdlAccounts<LbClmm>[\"lbPair\"][\"parameters\"];\nexport type RewardInfos = IdlAccounts<LbClmm>[\"lbPair\"][\"rewardInfos\"];\nexport type RewardInfo = IdlTypes<LbClmm>[\"rewardInfo\"];\n\nexport type UserRewardInfo = IdlTypes<LbClmm>[\"userRewardInfo\"];\nexport type UserFeeInfo = IdlTypes<LbClmm>[\"feeInfo\"];\nexport type RebalanceAddLiquidityParam = IdlTypes<LbClmm>[\"addLiquidityParams\"];\nexport type RebalanceRemoveLiquidityParam =\n IdlTypes<LbClmm>[\"removeLiquidityParams\"];\n\nexport type InitPermissionPairIx = IdlTypes<LbClmm>[\"initPermissionPairIx\"];\nexport type InitCustomizablePermissionlessPairIx =\n IdlTypes<LbClmm>[\"customizableParams\"];\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 type LiquidityParameterByStrategy =\n IdlTypes<LbClmm>[\"liquidityParameterByStrategy\"];\nexport type LiquidityParameterByStrategyOneSide =\n IdlTypes<LbClmm>[\"liquidityParameterByStrategyOneSide\"];\nexport type LiquidityParameter = IdlTypes<LbClmm>[\"liquidityParameter\"];\n\nexport type ProgramStrategyParameter = IdlTypes<LbClmm>[\"strategyParameters\"];\nexport type ProgramStrategyType = IdlTypes<LbClmm>[\"strategyType\"];\n\nexport type RemainingAccountInfo = IdlTypes<LbClmm>[\"remainingAccountsInfo\"];\nexport type RemainingAccountsInfoSlice =\n IdlTypes<LbClmm>[\"remainingAccountsSlice\"];\n\nexport type CompressedBinDepositAmount =\n IdlTypes<LbClmm>[\"compressedBinDepositAmount\"];\nexport type CompressedBinDepositAmounts = CompressedBinDepositAmount[];\n\nexport type ResizeSideEnum = IdlTypes<LbClmm>[\"resizeSide\"];\nexport type ExtendedPositionBinData = IdlTypes<LbClmm>[\"positionBinData\"];\n\nexport interface LbPosition {\n publicKey: PublicKey;\n positionData: PositionData;\n version: PositionVersion;\n}\n\nexport interface PositionInfo {\n publicKey: PublicKey;\n lbPair: LbPair;\n tokenX: TokenReserve;\n tokenY: TokenReserve;\n lbPairPositionsData: Array<LbPosition>;\n}\n\nexport interface FeeInfo {\n baseFeeRatePercentage: Decimal;\n maxFeeRatePercentage: Decimal;\n protocolFeePercentage: Decimal;\n}\n\nexport interface EmissionRate {\n rewardOne: Decimal | undefined;\n rewardTwo: Decimal | undefined;\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 PairType {\n Permissionless,\n Permissioned,\n}\n\nexport enum ShrinkMode {\n ShrinkBoth,\n NoShrinkLeft,\n NoShrinkRight,\n NoShrinkBoth,\n}\n\nexport const Strategy = {\n SpotBalanced: { spotBalanced: {} },\n CurveBalanced: { curveBalanced: {} },\n BidAskBalanced: { bidAskBalanced: {} },\n SpotImBalanced: { spotImBalanced: {} },\n CurveImBalanced: { curveImBalanced: {} },\n BidAskImBalanced: { bidAskImBalanced: {} },\n};\n\nexport enum StrategyType {\n Spot,\n Curve,\n BidAsk,\n}\n\nexport enum ActivationType {\n Slot,\n Timestamp,\n}\n\n// This is position struct size, it doesn't include the discriminator bytes\nexport const POSITION_MIN_SIZE = 8112;\nexport const POSITION_BIN_DATA_SIZE = 112;\n\nexport interface StrategyParameters {\n maxBinId: number;\n minBinId: number;\n strategyType: StrategyType;\n singleSidedX?: boolean;\n}\n\nexport interface TQuoteCreatePositionParams {\n strategy: StrategyParameters;\n}\n\nexport interface TInitializePositionAndAddLiquidityParams {\n positionPubKey: PublicKey;\n totalXAmount: BN;\n totalYAmount: BN;\n xYAmountDistribution: BinAndAmount[];\n user: PublicKey;\n slippage?: number;\n}\n\nexport interface TInitializePositionAndAddLiquidityParamsByStrategy {\n positionPubKey: PublicKey;\n totalXAmount: BN;\n totalYAmount: BN;\n strategy: StrategyParameters;\n user: PublicKey;\n slippage?: number;\n}\n\nexport interface InitializeMultiplePositionAndAddLiquidityByStrategyResponse {\n instructionsByPositions: {\n positionKeypair: Keypair;\n initializePositionIx: TransactionInstruction;\n initializeAtaIxs: TransactionInstruction[];\n addLiquidityIxs: TransactionInstruction[][];\n }[];\n}\n\nexport interface InitializeMultiplePositionAndAddLiquidityByStrategyResponse2 {\n instructionsByPositions: {\n positionKeypair: Keypair;\n transactionInstructions: TransactionInstruction[][];\n }[];\n lookupTableAddress?: PublicKey;\n}\n\nexport interface TInitializeMultiplePositionAndAddLiquidityParamsByStrategy {\n totalXAmount: BN;\n totalYAmount: BN;\n strategy: StrategyParameters;\n user: PublicKey;\n slippage?: number;\n customKeyPairGenerator?: () => Promise<Keypair>;\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 feeAmountXPerTokenStored: BN;\n feeAmountYPerTokenStored: BN;\n rewardPerTokenStored: BN[];\n}\n\nexport module BinLiquidity {\n export function fromBin(\n bin: Bin,\n binId: number,\n binStep: number,\n baseTokenDecimal: number,\n quoteTokenDecimal: number,\n version: number\n ): BinLiquidity {\n const pricePerLamport = getPriceOfBinByBinId(binId, binStep).toString();\n return {\n binId,\n xAmount: bin.amountX,\n yAmount: bin.amountY,\n supply: bin.liquiditySupply,\n price: pricePerLamport,\n version,\n pricePerToken: new Decimal(pricePerLamport)\n .mul(new Decimal(10 ** (baseTokenDecimal - quoteTokenDecimal)))\n .toString(),\n feeAmountXPerTokenStored: bin.feeAmountXPerTokenStored,\n feeAmountYPerTokenStored: bin.feeAmountYPerTokenStored,\n rewardPerTokenStored: bin.rewardPerTokenStored,\n };\n }\n\n export function empty(\n binId: number,\n binStep: number,\n baseTokenDecimal: number,\n quoteTokenDecimal: number,\n version: number\n ): BinLiquidity {\n const pricePerLamport = getPriceOfBinByBinId(binId, binStep).toString();\n return {\n binId,\n xAmount: new BN(0),\n yAmount: new BN(0),\n supply: new BN(0),\n price: pricePerLamport,\n version,\n pricePerToken: new Decimal(pricePerLamport)\n .mul(new Decimal(10 ** (baseTokenDecimal - quoteTokenDecimal)))\n .toString(),\n feeAmountXPerTokenStored: new BN(0),\n feeAmountYPerTokenStored: new BN(0),\n rewardPerTokenStored: [new BN(0), new BN(0)],\n };\n }\n}\n\nexport interface SwapQuote {\n consumedInAmount: BN;\n outAmount: BN;\n fee: BN;\n protocolFee: BN;\n minOutAmount: BN;\n priceImpact: Decimal;\n binArraysPubkey: any[];\n endPrice: Decimal;\n}\n\nexport interface SwapQuoteExactOut {\n inAmount: BN;\n outAmount: BN;\n fee: BN;\n priceImpact: Decimal;\n protocolFee: BN;\n maxInAmount: BN;\n binArraysPubkey: any[];\n}\n\nexport interface IAccountsCache {\n binArrays: Map<String, BinArray>;\n lbPair: LbPair;\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 positionFeeXAmount: string;\n positionFeeYAmount: string;\n positionRewardAmount: 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 feeOwner: PublicKey;\n totalClaimedFeeXAmount: BN;\n totalClaimedFeeYAmount: BN;\n feeXExcludeTransferFee: BN;\n feeYExcludeTransferFee: BN;\n rewardOneExcludeTransferFee: BN;\n rewardTwoExcludeTransferFee: BN;\n totalXAmountExcludeTransferFee: BN;\n totalYAmountExcludeTransferFee: BN;\n owner: PublicKey;\n}\n\nexport interface SwapWithPriceImpactParams {\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 * price impact in bps\n */\n priceImpact: 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 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 SwapExactOutParams {\n /**\n * mint of in token\n */\n inToken: PublicKey;\n /**\n * mint of out token\n */\n outToken: PublicKey;\n /**\n * out token amount\n */\n outAmount: BN;\n /**\n * maximum in amount, also known as slippage\n */\n maxInAmount: 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\nexport interface SeedLiquidityResponse {\n sendPositionOwnerTokenProveIxs: TransactionInstruction[];\n initializeBinArraysAndPositionIxs: TransactionInstruction[][];\n addLiquidityIxs: TransactionInstruction[][];\n costBreakdown: SeedLiquidityCostBreakdown;\n}\n\nexport interface SeedLiquiditySingleBinResponse {\n instructions: TransactionInstruction[];\n costBreakdown: SeedLiquidityCostBreakdown;\n}\n\nexport interface SeedLiquidityCostBreakdown {\n tokenOwnerProveAssociatedTokenAccountLamports: BN;\n totalPositionLamports: BN;\n totalBinArraysLamports: BN;\n totalPositionCount: BN;\n totalBinArraysCount: BN;\n binArrayBitmapLamports: BN;\n}\n\nexport interface Clock {\n slot: BN;\n epochStartTimestamp: BN;\n epoch: BN;\n leaderScheduleEpoch: BN;\n unixTimestamp: BN;\n}\n\nexport const ClockLayout = struct([\n u64(\"slot\"),\n i64(\"epochStartTimestamp\"),\n u64(\"epoch\"),\n u64(\"leaderScheduleEpoch\"),\n i64(\"unixTimestamp\"),\n]);\n\nexport enum PairStatus {\n Enabled,\n Disabled,\n}\n\nexport interface PairLockInfo {\n positions: Array<PositionLockInfo>;\n}\n\nexport interface PositionLockInfo {\n positionAddress: PublicKey;\n owner: PublicKey;\n tokenXAmount: string;\n tokenYAmount: string;\n lockReleasePoint: number;\n}\n\nexport enum ActionType {\n Liquidity,\n Reward,\n}\n\nexport enum ResizeSide {\n Lower,\n Upper,\n}\n\nexport const MEMO_PROGRAM_ID = new PublicKey(\n \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\"\n);\n\nexport interface RebalancePositionResponse {\n rebalancePosition: RebalancePosition;\n simulationResult: SimulateRebalanceResp;\n}\n\nexport interface RebalancePositionBinArrayRentalCostQuote {\n binArrayExistence: Set<string>;\n binArrayCount: number;\n binArrayCost: number;\n bitmapExtensionCost: number;\n}\n\nexport const REBALANCE_POSITION_PADDING = Array(31).fill(0);\n","import { BN } from \"@coral-xyz/anchor\";\nimport { PublicKey } from \"@solana/web3.js\";\nimport {\n MAX_BIN_ARRAY_SIZE,\n DEFAULT_BIN_PER_POSITION,\n SCALE_OFFSET,\n} from \"../constants\";\nimport {\n Bin,\n BinArray,\n BinArrayAccount,\n BinArrayBitmapExtension,\n BinLiquidity,\n BitmapType,\n Clock,\n LbPair,\n RewardInfo,\n RewardInfos,\n} from \"../types\";\nimport {\n EXTENSION_BINARRAY_BITMAP_SIZE,\n BIN_ARRAY_BITMAP_SIZE,\n} from \"../constants\";\nimport { getPositionCount } from \"./math\";\nimport { deriveBinArray } from \"./derive\";\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.toArrayLike(Buffer, \"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: BN) => {\n return binArrayIndex.gt(new BN(0))\n ? binArrayIndex.mod(BIN_ARRAY_BITMAP_SIZE)\n : binArrayIndex.add(new BN(1)).neg().mod(BIN_ARRAY_BITMAP_SIZE);\n };\n\n const getBitmapOffset = (binArrayIndex: BN) => {\n return binArrayIndex.gt(new BN(0))\n ? binArrayIndex.div(BIN_ARRAY_BITMAP_SIZE).sub(new BN(1))\n : binArrayIndex\n .add(new BN(1))\n .neg()\n .div(BIN_ARRAY_BITMAP_SIZE)\n .sub(new BN(1));\n };\n\n if (startIndex <= endIndex) {\n for (let i = startIndex; i <= endIndex; i++) {\n const binArrayOffset = getBinArrayOffset(new BN(i)).toNumber();\n const bitmapOffset = getBitmapOffset(new BN(i)).toNumber();\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(new BN(i)).toNumber();\n const bitmapOffset = getBitmapOffset(new BN(i)).toNumber();\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: LbPair,\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.sub(new BN(1));\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: LbPair,\n binArrayBitmapExtension: BinArrayBitmapExtension | null,\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 // Cached bin array couldn't cover more bins, partial quoted.\n return null;\n }\n\n return binArrayAccount;\n}\n\n/**\n * Retrieves the bin arrays required to initialize multiple positions in continuous range.\n *\n * @param {PublicKey} pair - The public key of the pair.\n * @param {BN} fromBinId - The starting bin ID.\n * @param {BN} toBinId - The ending bin ID.\n * @return {[{key: PublicKey, index: BN }]} An array of bin arrays required for the given position range.\n */\nexport function getBinArraysRequiredByPositionRange(\n pair: PublicKey,\n fromBinId: BN,\n toBinId: BN,\n programId: PublicKey\n): { key: PublicKey; index: BN }[] {\n const [minBinId, maxBinId] = fromBinId.lt(toBinId)\n ? [fromBinId, toBinId]\n : [toBinId, fromBinId];\n\n const positionCount = getPositionCount(minBinId, maxBinId);\n const binArrays = new Map<String, BN>();\n\n for (let i = 0; i < positionCount.toNumber(); i++) {\n const lowerBinId = minBinId.add(DEFAULT_BIN_PER_POSITION.mul(new BN(i)));\n\n const lowerBinArrayIndex = binIdToBinArrayIndex(lowerBinId);\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n\n const [lowerBinArray] = deriveBinArray(pair, lowerBinArrayIndex, programId);\n const [upperBinArray] = deriveBinArray(pair, upperBinArrayIndex, programId);\n\n binArrays.set(lowerBinArray.toBase58(), lowerBinArrayIndex);\n binArrays.set(upperBinArray.toBase58(), upperBinArrayIndex);\n }\n\n return Array.from(binArrays, ([key, index]) => ({\n key: new PublicKey(key),\n index,\n }));\n}\n\nexport function* enumerateBins(\n binsById: Map<number, Bin>,\n lowerBinId: number,\n upperBinId: number,\n binStep: number,\n baseTokenDecimal: number,\n quoteTokenDecimal: number,\n version: number\n) {\n for (\n let currentBinId = lowerBinId;\n currentBinId <= upperBinId;\n currentBinId++\n ) {\n const bin = binsById.get(currentBinId);\n if (bin != null) {\n yield BinLiquidity.fromBin(\n bin,\n currentBinId,\n binStep,\n baseTokenDecimal,\n quoteTokenDecimal,\n version\n );\n } else {\n yield BinLiquidity.empty(\n currentBinId,\n binStep,\n baseTokenDecimal,\n quoteTokenDecimal,\n version\n );\n }\n }\n}\n\nfunction isRewardInitialized(reward: RewardInfo) {\n return !reward.mint.equals(PublicKey.default);\n}\n\nexport function getBinIdIndexInBinArray(\n binId: BN,\n lowerBinId: BN,\n upperBinId: BN\n) {\n if (binId.lt(lowerBinId) || binId.gt(upperBinId)) {\n return null;\n }\n return binId.sub(lowerBinId);\n}\n\n/// Update bin array LM rewards\nexport function updateBinArray(\n activeId: BN,\n clock: Clock,\n allRewardInfos: RewardInfos,\n binArray: BinArray\n) {\n const [lowerBinId, upperBinId] = getBinArrayLowerUpperBinId(binArray.index);\n const binIdx = getBinIdIndexInBinArray(activeId, lowerBinId, upperBinId);\n\n if (binIdx == null) {\n return binArray;\n }\n\n const binArrayClone = Object.assign({}, binArray);\n const activeBin = binArrayClone.bins[binIdx.toNumber()];\n\n if (activeBin.liquiditySupply.isZero()) {\n return binArrayClone;\n }\n\n for (const [rewardIdx, reward] of allRewardInfos.entries()) {\n if (!isRewardInitialized(reward)) {\n continue;\n }\n\n const currentTime = new BN(\n Math.min(\n clock.unixTimestamp.toNumber(),\n reward.rewardDurationEnd.toNumber()\n )\n );\n\n const delta = currentTime.sub(reward.lastUpdateTime);\n const liquiditySupply = activeBin.liquiditySupply.shrn(SCALE_OFFSET);\n\n const rewardPerTokenStoredDelta = reward.rewardRate\n .mul(delta)\n .div(new BN(15))\n .div(liquiditySupply);\n\n activeBin.rewardPerTokenStored[rewardIdx] = activeBin.rewardPerTokenStored[\n rewardIdx\n ].add(rewardPerTokenStoredDelta);\n }\n\n return binArrayClone;\n}\n\nexport function binDeltaToMinMaxBinId(binDelta: number, activeBinId: number) {\n const minBinId = activeBinId - binDelta;\n const maxBinId = minBinId + binDelta * 2;\n return {\n minBinId,\n maxBinId,\n };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport {\n BASIS_POINT_MAX,\n DEFAULT_BIN_PER_POSITION,\n SCALE_OFFSET,\n} from \"../constants\";\nimport Decimal from \"decimal.js\";\nimport { ONE, pow } from \"./u64xu64_math\";\nimport { DLMM } from \"..\";\nimport { getPriceOfBinByBinId } from \"./weight\";\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\nexport function computeBaseFactorFromFeeBps(binStep: BN, feeBps: BN) {\n const U16_MAX = 65535;\n const computedBaseFactor =\n (feeBps.toNumber() * BASIS_POINT_MAX) / binStep.toNumber();\n\n if (computedBaseFactor > U16_MAX) {\n let truncatedBaseFactor = computedBaseFactor;\n let base_power_factor = 0;\n while (truncatedBaseFactor > U16_MAX) {\n const remainder = truncatedBaseFactor % 10;\n if (remainder == 0) {\n base_power_factor += 1;\n truncatedBaseFactor /= 10;\n } else {\n throw \"have decimals\";\n }\n }\n\n return [new BN(truncatedBaseFactor), new BN(base_power_factor)];\n } else {\n // Sanity check\n const computedBaseFactorFloor = Math.floor(computedBaseFactor);\n if (computedBaseFactor != computedBaseFactorFloor) {\n if (computedBaseFactorFloor >= U16_MAX) {\n throw \"base factor for the give fee bps overflow u16\";\n }\n\n if (computedBaseFactorFloor == 0) {\n throw \"base factor for the give fee bps underflow\";\n }\n\n if (computedBaseFactor % 1 != 0) {\n throw \"couldn't compute base factor for the exact fee bps\";\n }\n }\n\n return [new BN(computedBaseFactor), new BN(0)];\n }\n}\n\nexport function getQPriceFromId(binId: BN, binStep: BN): BN {\n return pow(getQPriceBaseFactor(binStep), binId);\n}\n\nexport function getQPriceBaseFactor(binStep: BN): BN {\n const bps = binStep.shln(SCALE_OFFSET).div(new BN(BASIS_POINT_MAX));\n const base = ONE.add(bps);\n return base;\n}\n\nexport function getC(\n amount: BN,\n binStep: number,\n binId: BN,\n baseTokenDecimal: number,\n quoteTokenDecimal: number,\n minPrice: Decimal,\n maxPrice: Decimal,\n k: number\n) {\n const currentPricePerLamport = new Decimal(1 + binStep / 10000).pow(\n binId.toNumber()\n );\n const currentPricePerToken = currentPricePerLamport.mul(\n new Decimal(10 ** (baseTokenDecimal - quoteTokenDecimal))\n );\n const priceRange = maxPrice.sub(minPrice);\n const currentPriceDeltaFromMin = currentPricePerToken.sub(\n new Decimal(minPrice)\n );\n\n const c = new Decimal(amount.toString()).mul(\n currentPriceDeltaFromMin.div(priceRange).pow(k)\n );\n\n return c.floor();\n}\n\nexport function distributeAmountToCompressedBinsByRatio(\n compressedBinAmount: Map<number, BN>,\n uncompressedAmount: BN,\n multiplier: BN,\n binCapAmount: BN\n) {\n const newCompressedBinAmount = new Map<number, BN>();\n let totalCompressedAmount = new BN(0);\n\n for (const compressedAmount of compressedBinAmount.values()) {\n totalCompressedAmount = totalCompressedAmount.add(compressedAmount);\n }\n\n let totalDepositedAmount = new BN(0);\n\n for (const [binId, compressedAmount] of compressedBinAmount.entries()) {\n const depositAmount = compressedAmount\n .mul(uncompressedAmount)\n .div(totalCompressedAmount);\n\n let compressedDepositAmount = depositAmount.div(multiplier);\n\n let newCompressedAmount = compressedAmount.add(compressedDepositAmount);\n if (newCompressedAmount.gt(binCapAmount)) {\n compressedDepositAmount = compressedDepositAmount.sub(\n newCompressedAmount.sub(binCapAmount)\n );\n newCompressedAmount = binCapAmount;\n }\n newCompressedBinAmount.set(binId, newCompressedAmount);\n\n totalDepositedAmount = totalDepositedAmount.add(\n compressedDepositAmount.mul(multiplier)\n );\n }\n\n const loss = uncompressedAmount.sub(totalDepositedAmount);\n\n return {\n newCompressedBinAmount,\n loss,\n };\n}\n\nexport function getPositionCount(minBinId: BN, maxBinId: BN) {\n const binDelta = maxBinId.sub(minBinId);\n const positionCount = binDelta.div(DEFAULT_BIN_PER_POSITION);\n return positionCount.add(new BN(1));\n}\n\nexport function findOptimumDecompressMultiplier(\n binAmount: Map<number, BN>,\n tokenDecimal: BN\n) {\n let multiplier = new BN(10).pow(tokenDecimal);\n\n while (!multiplier.isZero()) {\n let found = true;\n\n for (const [_binId, amount] of binAmount) {\n const compressedAmount = amount.div(multiplier);\n if (compressedAmount.isZero()) {\n multiplier = multiplier.div(new BN(10));\n found = false;\n break;\n }\n }\n\n if (found) {\n return multiplier;\n }\n }\n\n throw \"Couldn't find optimum multiplier\";\n}\n\nexport function compressBinAmount(binAmount: Map<number, BN>, multiplier: BN) {\n const compressedBinAmount = new Map<number, BN>();\n\n let totalAmount = new BN(0);\n let compressionLoss = new BN(0);\n\n for (const [binId, amount] of binAmount) {\n totalAmount = totalAmount.add(amount);\n const compressedAmount = amount.div(multiplier);\n\n compressedBinAmount.set(binId, compressedAmount);\n let loss = amount.sub(compressedAmount.mul(multiplier));\n compressionLoss = compressionLoss.add(loss);\n }\n\n return {\n compressedBinAmount,\n compressionLoss,\n };\n}\n\nexport function generateAmountForBinRange(\n amount: BN,\n binStep: number,\n tokenXDecimal: number,\n tokenYDecimal: number,\n minBinId: BN,\n maxBinId: BN,\n k: number\n) {\n const toTokenMultiplier = new Decimal(10 ** (tokenXDecimal - tokenYDecimal));\n const minPrice = getPriceOfBinByBinId(minBinId.toNumber(), binStep).mul(\n toTokenMultiplier\n );\n const maxPrice = getPriceOfBinByBinId(maxBinId.toNumber(), binStep).mul(\n toTokenMultiplier\n );\n const binAmounts = new Map<number, BN>();\n\n for (let i = minBinId.toNumber(); i < maxBinId.toNumber(); i++) {\n const binAmount = generateBinAmount(\n amount,\n binStep,\n new BN(i),\n tokenXDecimal,\n tokenYDecimal,\n minPrice,\n maxPrice,\n k\n );\n\n if (binAmount.isZero()) {\n throw \"bin amount is zero\";\n }\n\n binAmounts.set(i, binAmount);\n }\n\n return binAmounts;\n}\n\nexport function generateBinAmount(\n amount: BN,\n binStep: number,\n binId: BN,\n tokenXDecimal: number,\n tokenYDecimal: number,\n minPrice: Decimal,\n maxPrice: Decimal,\n k: number\n) {\n const c1 = getC(\n amount,\n binStep,\n binId.add(new BN(1)),\n tokenXDecimal,\n tokenYDecimal,\n minPrice,\n maxPrice,\n k\n );\n\n const c0 = getC(\n amount,\n binStep,\n binId,\n tokenXDecimal,\n tokenYDecimal,\n minPrice,\n maxPrice,\n k\n );\n\n return new BN(c1.sub(c0).floor().toString());\n}\n","import BN from \"bn.js\";\nimport { SCALE_OFFSET } from \"../constants\";\n\nconst MAX_EXPONENTIAL = new BN(0x80000);\n\nexport const ONE = new BN(1).shln(SCALE_OFFSET);\nconst MAX = new BN(2).pow(new BN(128)).sub(new BN(1));\n\nexport function pow(base: BN, exp: BN): BN {\n let invert = exp.isNeg();\n\n if (exp.isZero()) {\n return ONE;\n }\n\n exp = invert ? exp.abs() : exp;\n\n if (exp.gt(MAX_EXPONENTIAL)) {\n return new BN(0);\n }\n\n let squaredBase = base;\n let result = ONE;\n\n if (squaredBase.gte(result)) {\n squaredBase = MAX.div(squaredBase);\n invert = !invert;\n }\n\n if (!exp.and(new BN(0x1)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x2)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x4)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x8)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x10)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x20)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x40)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x80)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x100)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x200)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x400)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x800)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x1000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x2000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x4000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x8000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x10000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x20000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n squaredBase = squaredBase.mul(squaredBase).shrn(SCALE_OFFSET);\n\n if (!exp.and(new BN(0x40000)).isZero()) {\n result = result.mul(squaredBase).shrn(SCALE_OFFSET);\n }\n\n if (result.isZero()) {\n return new BN(0);\n }\n\n if (invert) {\n result = MAX.div(result);\n }\n\n return result;\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport gaussian, { Gaussian } from \"gaussian\";\nimport { BASIS_POINT_MAX } from \"../constants\";\nimport Decimal from \"decimal.js\";\nimport {\n toAmountAskSide,\n toAmountBidSide,\n toAmountBothSide,\n} from \"./weightToAmounts\";\nimport { Mint } from \"@solana/spl-token\";\nimport { Clock } from \"../types\";\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\n/**\n * Converts a weight distribution into token amounts for one side (either bid or ask).\n *\n * @param amount - The total amount of liquidity to distribute.\n * @param distributions - The array of weight distributions for each bin.\n * @param binStep - The step interval between bin ids.\n * @param activeId - The id of the active bin.\n * @param depositForY - Flag indicating if the deposit is for token Y (bid side).\n * @param mint - Mint information for the token. Mint Y if depositForY is true, else Mint X. Get from DLMM instance.\n * @param clock - Clock instance for the current epoch. Get from DLMM instance.\n * @returns An array of objects containing binId and amount for each bin.\n */\n\nexport function fromWeightDistributionToAmountOneSide(\n amount: BN,\n distributions: { binId: number; weight: number }[],\n binStep: number,\n activeId: number,\n depositForY: boolean,\n mint: Mint,\n clock: Clock\n): { binId: number; amount: BN }[] {\n if (depositForY) {\n return toAmountBidSide(activeId, amount, distributions, mint, clock);\n } else {\n return toAmountAskSide(\n activeId,\n binStep,\n amount,\n distributions,\n mint,\n clock\n );\n }\n}\n\n/**\n * Converts a weight distribution into token amounts for both bid and ask sides.\n *\n * @param amountX - The total amount of token X to distribute.\n * @param amountY - The total amount of token Y to distribute.\n * @param distributions - The array of weight distributions for each bin.\n * @param binStep - The step interval between bin ids.\n * @param activeId - The id of the active bin.\n * @param amountXInActiveBin - The amount of token X in the active bin.\n * @param amountYInActiveBin - The amount of token Y in the active bin.\n * @param mintX - Mint information for token X. Get from DLMM instance.\n * @param mintY - Mint information for token Y. Get from DLMM instance.\n * @param clock - Clock instance for the current epoch. Get from DLMM instance.\n * @returns An array of objects containing binId, amountX, and amountY for each bin.\n */\nexport function fromWeightDistributionToAmount(\n amountX: BN,\n amountY: BN,\n distributions: { binId: number; weight: number }[],\n binStep: number,\n activeId: number,\n amountXInActiveBin: BN,\n amountYInActiveBin: BN,\n mintX: Mint,\n mintY: Mint,\n clock: Clock\n): { binId: number; amountX: BN; amountY: BN }[] {\n // sort distribution\n var distributions = distributions.sort((n1, n2) => {\n return n1.binId - n2.binId;\n });\n\n if (distributions.length == 0) {\n return [];\n }\n\n // only bid side\n if (activeId > distributions[distributions.length - 1].binId) {\n let amounts = toAmountBidSide(\n activeId,\n amountY,\n distributions,\n mintY,\n clock\n );\n return amounts.map((bin) => {\n return {\n binId: bin.binId,\n amountX: new BN(0),\n amountY: new BN(bin.amount.toString()),\n };\n });\n }\n\n // only ask side\n if (activeId < distributions[0].binId) {\n let amounts = toAmountAskSide(\n activeId,\n binStep,\n amountX,\n distributions,\n mintX,\n clock\n );\n return amounts.map((bin) => {\n return {\n binId: bin.binId,\n amountX: new BN(bin.amount.toString()),\n amountY: new BN(0),\n };\n });\n }\n return toAmountBothSide(\n activeId,\n binStep,\n amountX,\n amountY,\n amountXInActiveBin,\n amountYInActiveBin,\n distributions,\n mintX,\n mintY,\n clock\n );\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { Mint } from \"@solana/spl-token\";\nimport Decimal from \"decimal.js\";\nimport { Clock } from \"../types\";\nimport {\n calculateTransferFeeExcludedAmount,\n calculateTransferFeeIncludedAmount,\n} from \"./token_2022\";\nimport { getPriceOfBinByBinId } from \"./weight\";\n\n/**\n * Distribute totalAmount to all bid side bins according to given distributions.\n * @param activeId active bin id\n * @param totalAmount total amount of token Y to be distributed\n * @param distributions weight distribution of each bin\n * @param mintY mint of token Y, get from DLMM instance\n * @param clock clock of the program, for calculating transfer fee, get from DLMM instance\n * @returns array of {binId, amount} where amount is the amount of token Y in each bin\n */\nexport function toAmountBidSide(\n activeId: number,\n totalAmount: BN,\n distributions: { binId: number; weight: number }[],\n mintY: Mint,\n clock: Clock\n): {\n binId: number;\n amount: BN;\n}[] {\n totalAmount = calculateTransferFeeExcludedAmount(\n totalAmount,\n mintY,\n clock.epoch.toNumber()\n ).amount;\n\n // get sum of weight\n const totalWeight = distributions.reduce(function (sum, el) {\n return el.binId > activeId ? sum : sum.add(el.weight); // skip all ask side\n }, new Decimal(0));\n\n if (totalWeight.cmp(new Decimal(0)) != 1) {\n throw Error(\"Invalid parameteres\");\n }\n return distributions.map((bin) => {\n if (bin.binId > activeId) {\n return {\n binId: bin.binId,\n amount: new BN(0),\n };\n } else {\n return {\n binId: bin.binId,\n amount: new BN(\n new Decimal(totalAmount.toString())\n .mul(new Decimal(bin.weight).div(totalWeight))\n .floor()\n .toString()\n ),\n };\n }\n });\n}\n\n/**\n * Distribute totalAmount to all ask side bins according to given distributions.\n * @param activeId active bin id\n * @param totalAmount total amount of token Y to be distributed\n * @param distributions weight distribution of each bin\n * @param mintX mint of token X, get from DLMM instance\n * @param clock clock of the program, for calculating transfer fee, get from DLMM instance\n * @returns array of {binId, amount} where amount is the amount of token X in each bin\n */\nexport function toAmountAskSide(\n activeId: number,\n binStep: number,\n totalAmount: BN,\n distributions: { binId: number; weight: number }[],\n mintX: Mint,\n clock: Clock\n): {\n binId: number;\n amount: BN;\n}[] {\n totalAmount = calculateTransferFeeExcludedAmount(\n totalAmount,\n mintX,\n clock.epoch.toNumber()\n ).amount;\n\n // get sum of weight\n const totalWeight: Decimal = distributions.reduce(function (sum, el) {\n if (el.binId < activeId) {\n return sum;\n } else {\n const price = getPriceOfBinByBinId(el.binId, binStep);\n const weightPerPrice = new Decimal(el.weight).div(price);\n return sum.add(weightPerPrice);\n }\n }, new Decimal(0));\n\n if (totalWeight.cmp(new Decimal(0)) != 1) {\n throw Error(\"Invalid parameteres\");\n }\n\n return distributions.map((bin) => {\n if (bin.binId < activeId) {\n return {\n binId: bin.binId,\n amount: new BN(0),\n };\n } else {\n const price = getPriceOfBinByBinId(bin.binId, binStep);\n const weightPerPrice = new Decimal(bin.weight).div(price);\n return {\n binId: bin.binId,\n amount: new BN(\n new Decimal(totalAmount.toString())\n .mul(weightPerPrice)\n .div(totalWeight)\n .floor()\n .toString()\n ),\n };\n }\n });\n}\n\n/**\n * Distributes the given amounts of tokens X and Y to both bid and ask side bins\n * based on the provided weight distributions.\n *\n * @param activeId - The id of the active bin.\n * @param binStep - The step interval between bin ids.\n * @param amountX - Total amount of token X to distribute.\n * @param amountY - Total amount of token Y to distribute.\n * @param amountXInActiveBin - Amount of token X already in the active bin.\n * @param amountYInActiveBin - Amount of token Y already in the active bin.\n * @param distributions - Array of bins with their respective weight distributions.\n * @param mintX - Mint information for token X. Get from DLMM instance.\n * @param mintY - Mint information for token Y. Get from DLMM instance.\n * @param clock - Clock instance. Get from DLMM instance.\n * @returns An array of objects containing binId, amountX, and amountY for each bin.\n */\n\nexport function toAmountBothSide(\n activeId: number,\n binStep: number,\n amountX: BN,\n amountY: BN,\n amountXInActiveBin: BN,\n amountYInActiveBin: BN,\n distributions: { binId: number; weight: number }[],\n mintX: Mint,\n mintY: Mint,\n clock: Clock\n): {\n binId: number;\n amountX: BN;\n amountY: BN;\n}[] {\n // only bid side\n if (activeId > distributions[distributions.length - 1].binId) {\n let amounts = toAmountBidSide(\n activeId,\n amountY,\n distributions,\n mintY,\n clock\n );\n return amounts.map((bin) => {\n return {\n binId: bin.binId,\n amountX: new BN(0),\n amountY: bin.amount,\n };\n });\n }\n // only ask side\n if (activeId < distributions[0].binId) {\n let amounts = toAmountAskSide(\n activeId,\n binStep,\n amountX,\n distributions,\n mintX,\n clock\n );\n return amounts.map((bin) => {\n return {\n binId: bin.binId,\n amountX: bin.amount,\n amountY: new BN(0),\n };\n });\n }\n\n amountX = calculateTransferFeeIncludedAmount(\n amountX,\n mintX,\n clock.epoch.toNumber()\n ).amount;\n\n amountY = calculateTransferFeeIncludedAmount(\n amountY,\n mintY,\n clock.epoch.toNumber()\n ).amount;\n\n const activeBins = distributions.filter((element) => {\n return element.binId === activeId;\n });\n\n if (activeBins.length === 1) {\n const p0 = getPriceOfBinByBinId(activeId, binStep);\n let wx0 = new Decimal(0);\n let wy0 = new Decimal(0);\n const activeBin = activeBins[0];\n if (amountXInActiveBin.isZero() && amountYInActiveBin.isZero()) {\n wx0 = new Decimal(activeBin.weight).div(p0.mul(new Decimal(2)));\n wy0 = new Decimal(activeBin.weight).div(new Decimal(2));\n } else {\n let amountXInActiveBinDec = new Decimal(amountXInActiveBin.toString());\n let amountYInActiveBinDec = new Decimal(amountYInActiveBin.toString());\n\n if (!amountXInActiveBin.isZero()) {\n wx0 = new Decimal(activeBin.weight).div(\n p0.add(amountYInActiveBinDec.div(amountXInActiveBinDec))\n );\n }\n if (!amountYInActiveBin.isZero()) {\n wy0 = new Decimal(activeBin.weight).div(\n new Decimal(1).add(\n p0.mul(amountXInActiveBinDec).div(amountYInActiveBinDec)\n )\n );\n }\n }\n\n let totalWeightX = wx0;\n let totalWeightY = wy0;\n distributions.forEach((element) => {\n if (element.binId < activeId) {\n totalWeightY = totalWeightY.add(new Decimal(element.weight));\n }\n if (element.binId > activeId) {\n let price = getPriceOfBinByBinId(element.binId, binStep);\n let weighPerPrice = new Decimal(element.weight).div(price);\n totalWeightX = totalWeightX.add(weighPerPrice);\n }\n });\n const kx = new Decimal(amountX.toString()).div(totalWeightX);\n const ky = new Decimal(amountY.toString()).div(totalWeightY);\n let k = kx.lessThan(ky) ? kx : ky;\n return distributions.map((bin) => {\n if (bin.binId < activeId) {\n const amount = k.mul(new Decimal(bin.weight));\n return {\n binId: bin.binId,\n amountX: new BN(0),\n amountY: new BN(amount.floor().toString()),\n };\n }\n if (bin.binId > activeId) {\n const price = getPriceOfBinByBinId(bin.binId, binStep);\n const weighPerPrice = new Decimal(bin.weight).div(price);\n const amount = k.mul(weighPerPrice);\n return {\n binId: bin.binId,\n amountX: new BN(amount.floor().toString()),\n amountY: new BN(0),\n };\n }\n\n const amountXActiveBin = k.mul(wx0);\n const amountYActiveBin = k.mul(wy0);\n return {\n binId: bin.binId,\n amountX: new BN(amountXActiveBin.floor().toString()),\n amountY: new BN(amountYActiveBin.floor().toString()),\n };\n });\n } else {\n let totalWeightX = new Decimal(0);\n let totalWeightY = new Decimal(0);\n distributions.forEach((element) => {\n if (element.binId < activeId) {\n totalWeightY = totalWeightY.add(new Decimal(element.weight));\n } else {\n let price = getPriceOfBinByBinId(element.binId, binStep);\n let weighPerPrice = new Decimal(element.weight).div(price);\n totalWeightX = totalWeightX.add(weighPerPrice);\n }\n });\n\n let kx = new Decimal(amountX.toString()).div(totalWeightX);\n let ky = new Decimal(amountY.toString()).div(totalWeightY);\n let k = kx.lessThan(ky) ? kx : ky;\n\n return distributions.map((bin) => {\n if (bin.binId < activeId) {\n const amount = k.mul(new Decimal(bin.weight));\n return {\n binId: bin.binId,\n amountX: new BN(0),\n amountY: new BN(amount.floor().toString()),\n };\n } else {\n let price = getPriceOfBinByBinId(bin.binId, binStep);\n let weighPerPrice = new Decimal(bin.weight).div(price);\n const amount = k.mul(weighPerPrice);\n return {\n binId: bin.binId,\n amountX: new BN(amount.floor().toString()),\n amountY: new BN(0),\n };\n }\n });\n }\n}\n\nexport function autoFillYByWeight(\n activeId: number,\n binStep: number,\n amountX: BN,\n amountXInActiveBin: BN,\n amountYInActiveBin: BN,\n distributions: { binId: number; weight: number }[]\n): BN {\n const activeBins = distributions.filter((element) => {\n return element.binId === activeId;\n });\n\n if (activeBins.length === 1) {\n const p0 = getPriceOfBinByBinId(activeId, binStep);\n let wx0 = new Decimal(0);\n let wy0 = new Decimal(0);\n const activeBin = activeBins[0];\n if (amountXInActiveBin.isZero() && amountYInActiveBin.isZero()) {\n wx0 = new Decimal(activeBin.weight).div(p0.mul(new Decimal(2)));\n wy0 = new Decimal(activeBin.weight).div(new Decimal(2));\n } else {\n let amountXInActiveBinDec = new Decimal(amountXInActiveBin.toString());\n let amountYInActiveBinDec = new Decimal(amountYInActiveBin.toString());\n\n if (!amountXInActiveBin.isZero()) {\n wx0 = new Decimal(activeBin.weight).div(\n p0.add(amountYInActiveBinDec.div(amountXInActiveBinDec))\n );\n }\n if (!amountYInActiveBin.isZero()) {\n wy0 = new Decimal(activeBin.weight).div(\n new Decimal(1).add(\n p0.mul(amountXInActiveBinDec).div(amountYInActiveBinDec)\n )\n );\n }\n }\n\n let totalWeightX = wx0;\n let totalWeightY = wy0;\n distributions.forEach((element) => {\n if (element.binId < activeId) {\n totalWeightY = totalWeightY.add(new Decimal(element.weight));\n }\n if (element.binId > activeId) {\n const price = getPriceOfBinByBinId(element.binId, binStep);\n const weighPerPrice = new Decimal(element.weight).div(price);\n totalWeightX = totalWeightX.add(weighPerPrice);\n }\n });\n const kx = totalWeightX.isZero()\n ? new Decimal(1)\n : new Decimal(amountX.toString()).div(totalWeightX);\n const amountY = kx.mul(totalWeightY);\n return new BN(amountY.floor().toString());\n } else {\n let totalWeightX = new Decimal(0);\n let totalWeightY = new Decimal(0);\n distributions.forEach((element) => {\n if (element.binId < activeId) {\n totalWeightY = totalWeightY.add(new Decimal(element.weight));\n } else {\n const price = getPriceOfBinByBinId(element.binId, binStep);\n const weighPerPrice = new Decimal(element.weight).div(price);\n totalWeightX = totalWeightX.add(weighPerPrice);\n }\n });\n const kx = totalWeightX.isZero()\n ? new Decimal(1)\n : new Decimal(amountX.toString()).div(totalWeightX);\n const amountY = kx.mul(totalWeightY);\n return new BN(amountY.floor().toString());\n }\n}\n\nexport function autoFillXByWeight(\n activeId: number,\n binStep: number,\n amountY: BN,\n amountXInActiveBin: BN,\n amountYInActiveBin: BN,\n distributions: { binId: number; weight: number }[]\n): BN {\n const activeBins = distributions.filter((element) => {\n return element.binId === activeId;\n });\n\n if (activeBins.length === 1) {\n const p0 = getPriceOfBinByBinId(activeId, binStep);\n let wx0 = new Decimal(0);\n let wy0 = new Decimal(0);\n const activeBin = activeBins[0];\n if (amountXInActiveBin.isZero() && amountYInActiveBin.isZero()) {\n wx0 = new Decimal(activeBin.weight).div(p0.mul(new Decimal(2)));\n wy0 = new Decimal(activeBin.weight).div(new Decimal(2));\n } else {\n let amountXInActiveBinDec = new Decimal(amountXInActiveBin.toString());\n let amountYInActiveBinDec = new Decimal(amountYInActiveBin.toString());\n\n if (!amountXInActiveBin.isZero()) {\n wx0 = new Decimal(activeBin.weight).div(\n p0.add(amountYInActiveBinDec.div(amountXInActiveBinDec))\n );\n }\n if (!amountYInActiveBin.isZero()) {\n wy0 = new Decimal(activeBin.weight).div(\n new Decimal(1).add(\n p0.mul(amountXInActiveBinDec).div(amountYInActiveBinDec)\n )\n );\n }\n }\n\n let totalWeightX = wx0;\n let totalWeightY = wy0;\n distributions.forEach((element) => {\n if (element.binId < activeId) {\n totalWeightY = totalWeightY.add(new Decimal(element.weight));\n }\n if (element.binId > activeId) {\n const price = getPriceOfBinByBinId(element.binId, binStep);\n const weighPerPrice = new Decimal(element.weight).div(price);\n totalWeightX = totalWeightX.add(weighPerPrice);\n }\n });\n const ky = totalWeightY.isZero()\n ? new Decimal(1)\n : new Decimal(amountY.toString()).div(totalWeightY);\n const amountX = ky.mul(totalWeightX);\n return new BN(amountX.floor().toString());\n } else {\n let totalWeightX = new Decimal(0);\n let totalWeightY = new Decimal(0);\n distributions.forEach((element) => {\n if (element.binId < activeId) {\n totalWeightY = totalWeightY.add(new Decimal(element.weight));\n } else {\n const price = getPriceOfBinByBinId(element.binId, binStep);\n const weighPerPrice = new Decimal(element.weight).div(price);\n totalWeightX = totalWeightX.add(weighPerPrice);\n }\n });\n const ky = totalWeightY.isZero()\n ? new Decimal(1)\n : new Decimal(amountY.toString()).div(totalWeightY);\n const amountX = ky.mul(totalWeightX);\n return new BN(amountX.floor().toString());\n }\n}\n","import {\n addExtraAccountMetasForExecute,\n calculateFee,\n createTransferCheckedInstruction,\n getEpochFee,\n getTransferFeeConfig,\n getTransferHook,\n MAX_FEE_BASIS_POINTS,\n Mint,\n TOKEN_2022_PROGRAM_ID,\n TOKEN_PROGRAM_ID,\n TransferFee,\n unpackMint,\n} from \"@solana/spl-token\";\nimport {\n AccountInfo,\n AccountMeta,\n Connection,\n PublicKey,\n} from \"@solana/web3.js\";\nimport BN from \"bn.js\";\n\nexport async function getMultipleMintsExtraAccountMetasForTransferHook(\n connection: Connection,\n mintAddressesWithAccountInfo: {\n mintAddress: PublicKey;\n mintAccountInfo: AccountInfo<Buffer>;\n }[]\n): Promise<Map<String, AccountMeta[]>> {\n const extraAccountMetas = await Promise.all(\n mintAddressesWithAccountInfo.map(({ mintAddress, mintAccountInfo }) =>\n getExtraAccountMetasForTransferHook(\n connection,\n mintAddress,\n mintAccountInfo\n )\n )\n );\n\n const mintsWithHookAccountMap = new Map<String, AccountMeta[]>();\n\n for (let i = 0; i < extraAccountMetas.length; i++) {\n const { mintAddress } = mintAddressesWithAccountInfo[i];\n const transferHooks = extraAccountMetas[i];\n\n mintsWithHookAccountMap.set(mintAddress.toBase58(), transferHooks);\n }\n\n return mintsWithHookAccountMap;\n}\n\nexport async function getExtraAccountMetasForTransferHook(\n connection: Connection,\n mintAddress: PublicKey,\n mintAccountInfo: AccountInfo<Buffer>\n) {\n if (\n ![TOKEN_PROGRAM_ID.toBase58(), TOKEN_2022_PROGRAM_ID.toBase58()].includes(\n mintAccountInfo.owner.toBase58()\n )\n ) {\n return [];\n }\n\n const mintState = unpackMint(\n mintAddress,\n mintAccountInfo,\n mintAccountInfo.owner\n );\n\n if (mintAccountInfo.owner.equals(TOKEN_PROGRAM_ID)) {\n return [];\n }\n\n const transferHook = getTransferHook(mintState);\n\n if (!transferHook || transferHook.programId.equals(PublicKey.default)) {\n return [];\n } else {\n // We just need the instruction, therefore we do not need source and destination key\n const instruction = createTransferCheckedInstruction(\n PublicKey.default,\n mintAddress,\n PublicKey.default,\n PublicKey.default,\n BigInt(0),\n mintState.decimals,\n [],\n mintAccountInfo.owner\n );\n\n await addExtraAccountMetasForExecute(\n connection,\n instruction,\n transferHook.programId,\n PublicKey.default,\n mintAddress,\n PublicKey.default,\n PublicKey.default,\n BigInt(0)\n );\n\n // Only 4 keys needed if it's single signer. https://github.com/solana-labs/solana-program-library/blob/d72289c79a04411c69a8bf1054f7156b6196f9b3/token/js/src/extensions/transferFee/instructions.ts#L251\n const transferHookAccounts = instruction.keys.slice(4);\n\n // Token 2022 program allow transfer hook program to be invoked without any accounts. https://github.com/solana-program/transfer-hook/blob/e00f3b5c591fd55b4aed6a1e9b1ccc502cb6da05/interface/src/onchain.rs#L37\n if (transferHookAccounts.length == 0) {\n transferHookAccounts.push({\n pubkey: transferHook.programId,\n isSigner: false,\n isWritable: false,\n });\n }\n\n return transferHookAccounts;\n }\n}\n\nfunction calculatePreFeeAmount(transferFee: TransferFee, postFeeAmount: BN) {\n if (postFeeAmount.isZero()) {\n return new BN(0);\n }\n\n if (transferFee.transferFeeBasisPoints === 0) {\n return postFeeAmount;\n }\n\n const maximumFee = new BN(transferFee.maximumFee.toString());\n\n if (transferFee.transferFeeBasisPoints === MAX_FEE_BASIS_POINTS) {\n return postFeeAmount.add(maximumFee);\n }\n\n const ONE_IN_BASIS_POINTS = new BN(MAX_FEE_BASIS_POINTS);\n const numerator = postFeeAmount.mul(ONE_IN_BASIS_POINTS);\n const denominator = ONE_IN_BASIS_POINTS.sub(\n new BN(transferFee.transferFeeBasisPoints)\n );\n\n const rawPreFeeAmount = numerator\n .add(denominator)\n .sub(new BN(1))\n .div(denominator);\n\n if (rawPreFeeAmount.sub(postFeeAmount).gte(maximumFee)) {\n return postFeeAmount.add(maximumFee);\n }\n\n return rawPreFeeAmount;\n}\n\nfunction calculateInverseFee(transferFee: TransferFee, postFeeAmount: BN) {\n const preFeeAmount = calculatePreFeeAmount(transferFee, postFeeAmount);\n return new BN(\n calculateFee(transferFee, BigInt(preFeeAmount.toString())).toString()\n );\n}\n\ninterface TransferFeeIncludedAmount {\n amount: BN;\n transferFee: BN;\n}\n\nexport function calculateTransferFeeIncludedAmount(\n transferFeeExcludedAmount: BN,\n mint: Mint,\n currentEpoch: number\n): TransferFeeIncludedAmount {\n if (transferFeeExcludedAmount.isZero()) {\n return {\n amount: new BN(0),\n transferFee: new BN(0),\n };\n }\n\n const transferFeeConfig = getTransferFeeConfig(mint);\n\n if (transferFeeConfig === null) {\n return {\n amount: transferFeeExcludedAmount,\n transferFee: new BN(0),\n };\n }\n\n const epochFee = getEpochFee(transferFeeConfig, BigInt(currentEpoch));\n\n const transferFee =\n epochFee.transferFeeBasisPoints == MAX_FEE_BASIS_POINTS\n ? new BN(epochFee.maximumFee.toString())\n : calculateInverseFee(epochFee, transferFeeExcludedAmount);\n\n const transferFeeIncludedAmount = transferFeeExcludedAmount.add(transferFee);\n\n return {\n amount: transferFeeIncludedAmount,\n transferFee,\n };\n}\n\ninterface TransferFeeExcludedAmount {\n amount: BN;\n transferFee: BN;\n}\n\nexport function calculateTransferFeeExcludedAmount(\n transferFeeIncludedAmount: BN,\n mint: Mint,\n currentEpoch: number\n): TransferFeeExcludedAmount {\n const transferFeeConfig = getTransferFeeConfig(mint);\n if (transferFeeConfig === null) {\n return {\n amount: transferFeeIncludedAmount,\n transferFee: new BN(0),\n };\n }\n\n const transferFeeIncludedAmountN = BigInt(\n transferFeeIncludedAmount.toString()\n );\n\n const transferFee = calculateFee(\n getEpochFee(transferFeeConfig, BigInt(currentEpoch)),\n transferFeeIncludedAmountN\n );\n\n const transferFeeExcludedAmount = new BN(\n (transferFeeIncludedAmountN - transferFee).toString()\n );\n\n return {\n amount: transferFeeExcludedAmount,\n transferFee: new BN(transferFee.toString()),\n };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { AccountMeta, Connection, PublicKey } from \"@solana/web3.js\";\nimport { DLMM } from \"..\";\nimport { ILM_BASE } from \"../constants\";\n\n/** private */\nfunction sortTokenMints(tokenX: PublicKey, tokenY: PublicKey) {\n const [minKey, maxKey] =\n tokenX.toBuffer().compare(tokenY.toBuffer()) == 1\n ? [tokenY, tokenX]\n : [tokenX, tokenY];\n return [minKey, maxKey];\n}\n/** private */\n\nexport function derivePresetParameterWithIndex(\n index: BN,\n programId: PublicKey\n) {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"preset_parameter2\"),\n new Uint8Array(index.toArrayLike(Buffer, \"le\", 2)),\n ],\n programId\n );\n}\n\nexport function deriveLbPairWithPresetParamWithIndexKey(\n presetParameterKey: PublicKey,\n tokenX: PublicKey,\n tokenY: PublicKey,\n programId: PublicKey\n) {\n const [minKey, maxKey] = sortTokenMints(tokenX, tokenY);\n return PublicKey.findProgramAddressSync(\n [presetParameterKey.toBuffer(), minKey.toBuffer(), maxKey.toBuffer()],\n programId\n );\n}\n\n/**\n *\n * @deprecated Use derivePresetParameter2\n */\nexport function derivePresetParameter(binStep: BN, programId: PublicKey) {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"preset_parameter\"),\n new Uint8Array(binStep.toArrayLike(Buffer, \"le\", 2)),\n ],\n programId\n );\n}\n\nexport function derivePresetParameter2(\n binStep: BN,\n baseFactor: BN,\n programId: PublicKey\n) {\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"preset_parameter\"),\n new Uint8Array(binStep.toArrayLike(Buffer, \"le\", 2)),\n new Uint8Array(baseFactor.toArrayLike(Buffer, \"le\", 2)),\n ],\n programId\n );\n}\n\nexport function deriveLbPair2(\n tokenX: PublicKey,\n tokenY: PublicKey,\n binStep: BN,\n baseFactor: BN,\n programId: PublicKey\n) {\n const [minKey, maxKey] = sortTokenMints(tokenX, tokenY);\n return PublicKey.findProgramAddressSync(\n [\n minKey.toBuffer(),\n maxKey.toBuffer(),\n new Uint8Array(binStep.toArrayLike(Buffer, \"le\", 2)),\n new Uint8Array(baseFactor.toArrayLike(Buffer, \"le\", 2)),\n ],\n programId\n );\n}\n\n/**\n *\n * @deprecated Use deriveLbPair2\n */\n\nexport function deriveLbPair(\n tokenX: PublicKey,\n tokenY: PublicKey,\n binStep: BN,\n programId: PublicKey\n) {\n const [minKey, maxKey] = sortTokenMints(tokenX, tokenY);\n return PublicKey.findProgramAddressSync(\n [\n minKey.toBuffer(),\n maxKey.toBuffer(),\n new Uint8Array(binStep.toArrayLike(Buffer, \"le\", 2)),\n ],\n programId\n );\n}\n\nexport function deriveCustomizablePermissionlessLbPair(\n tokenX: PublicKey,\n tokenY: PublicKey,\n programId: PublicKey\n) {\n const [minKey, maxKey] = sortTokenMints(tokenX, tokenY);\n return PublicKey.findProgramAddressSync(\n [ILM_BASE.toBuffer(), minKey.toBuffer(), maxKey.toBuffer()],\n programId\n );\n}\n\nexport function derivePermissionLbPair(\n baseKey: PublicKey,\n tokenX: PublicKey,\n tokenY: PublicKey,\n binStep: BN,\n programId: PublicKey\n) {\n const [minKey, maxKey] = sortTokenMints(tokenX, tokenY);\n return PublicKey.findProgramAddressSync(\n [\n baseKey.toBuffer(),\n minKey.toBuffer(),\n maxKey.toBuffer(),\n new Uint8Array(binStep.toArrayLike(Buffer, \"le\", 2)),\n ],\n programId\n );\n}\n\nexport function deriveOracle(lbPair: PublicKey, programId: PublicKey) {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"oracle\"), lbPair.toBytes()],\n programId\n );\n}\n\nexport function derivePosition(\n lbPair: PublicKey,\n base: PublicKey,\n lowerBinId: BN,\n width: BN,\n programId: PublicKey\n) {\n let lowerBinIdBytes: Uint8Array;\n if (lowerBinId.isNeg()) {\n lowerBinIdBytes = new Uint8Array(\n lowerBinId.toTwos(32).toArrayLike(Buffer, \"le\", 4)\n );\n } else {\n lowerBinIdBytes = new Uint8Array(lowerBinId.toArrayLike(Buffer, \"le\", 4));\n }\n return PublicKey.findProgramAddressSync(\n [\n Buffer.from(\"position\"),\n lbPair.toBuffer(),\n base.toBuffer(),\n lowerBinIdBytes,\n new Uint8Array(width.toArrayLike(Buffer, \"le\", 4)),\n ],\n programId\n );\n}\n\nexport function deriveBinArray(\n lbPair: PublicKey,\n index: BN,\n programId: PublicKey\n) {\n let binArrayBytes: Uint8Array;\n if (index.isNeg()) {\n binArrayBytes = new Uint8Array(\n index.toTwos(64).toArrayLike(Buffer, \"le\", 8)\n );\n } else {\n binArrayBytes = new Uint8Array(index.toArrayLike(Buffer, \"le\", 8));\n }\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"bin_array\"), lbPair.toBytes(), binArrayBytes],\n programId\n );\n}\n\nexport function deriveReserve(\n token: PublicKey,\n lbPair: PublicKey,\n programId: PublicKey\n) {\n return PublicKey.findProgramAddressSync(\n [lbPair.toBuffer(), token.toBuffer()],\n programId\n );\n}\n\nexport function deriveTokenBadge(mint: PublicKey, programId: PublicKey) {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"token_badge\"), mint.toBuffer()],\n programId\n );\n}\n\nexport function deriveEventAuthority(programId: PublicKey) {\n return PublicKey.findProgramAddressSync(\n [Buffer.from(\"__event_authority\")],\n programId\n );\n}\n\nexport function deriveRewardVault(\n lbPair: PublicKey,\n rewardIndex: BN,\n programId: PublicKey\n) {\n return PublicKey.findProgramAddressSync(\n [lbPair.toBuffer(), rewardIndex.toArrayLike(Buffer, \"le\", 8)],\n programId\n );\n}\n\nexport function derivePlaceHolderAccountMeta(\n programId: PublicKey\n): AccountMeta {\n return {\n pubkey: programId,\n isWritable: false,\n isSigner: false,\n };\n}\n","import {\n AddressLookupTableAccount,\n Commitment,\n ComputeBudgetProgram,\n Connection,\n PublicKey,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { ResizeSide } from \"../types\";\n\n// https://solscan.io/tx/4ryJKTB1vYmGU6YnUWwbLps18FaJjiTwgRozcgdP8RFcwp7zUZi85vgWE7rARNx2NvzDJiM9CUWArqzY7LHv38WL\nexport const DEFAULT_ADD_LIQUIDITY_CU = 1_000_000;\nexport const DEFAULT_EXTEND_POSITION_HIGH_CU = 1_000_000;\nexport const DEFAULT_EXTEND_POSITION_LOW_CU = 30_000;\nexport const DEFAULT_INIT_POSITION_CU = 30_000;\nexport const DEFAULT_INIT_BIN_ARRAY_CU = 350_000;\n\nexport const MIN_CU_BUFFER = 50_000;\nexport const MAX_CU_BUFFER = 200_000;\nexport const MAX_CU = 1_400_000;\n\n// CU estimate is difficult due to the CU estimated is based on current position state. We use hardcoded value ...\nexport const getDefaultExtendPositionCU = (side: ResizeSide) => {\n switch (side) {\n case ResizeSide.Lower:\n return DEFAULT_EXTEND_POSITION_HIGH_CU;\n case ResizeSide.Upper:\n return DEFAULT_EXTEND_POSITION_LOW_CU;\n }\n};\n\nexport const getSimulationComputeUnits = async (\n connection: Connection,\n instructions: Array<TransactionInstruction>,\n payer: PublicKey,\n lookupTables: Array<AddressLookupTableAccount> | [],\n commitment: Commitment = \"confirmed\"\n): Promise<number | null> => {\n const testInstructions = [\n // Set an arbitrarily high number in simulation\n // so we can be sure the transaction will succeed\n // and get the real compute units used\n ComputeBudgetProgram.setComputeUnitLimit({ units: 1_400_000 }),\n ...instructions,\n ];\n\n const testTransaction = new VersionedTransaction(\n new TransactionMessage({\n instructions: testInstructions,\n payerKey: payer,\n // RecentBlockhash can by any public key during simulation\n // since 'replaceRecentBlockhash' is set to 'true' below\n recentBlockhash: PublicKey.default.toString(),\n }).compileToV0Message(lookupTables)\n );\n\n const rpcResponse = await connection.simulateTransaction(testTransaction, {\n replaceRecentBlockhash: true,\n sigVerify: false,\n commitment,\n });\n\n if (rpcResponse?.value?.err) {\n const logs = rpcResponse.value.logs?.join(\"\\n • \") || \"No logs available\";\n throw new Error(\n `Transaction simulation failed:\\n •${logs}` +\n JSON.stringify(rpcResponse?.value?.err)\n );\n }\n\n return rpcResponse.value.unitsConsumed || null;\n};\n","import { AccountMeta, Connection, PublicKey } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport { binIdToBinArrayIndex } from \"../binArray\";\nimport { deriveBinArray } from \"../derive\";\nimport {\n ExtendedPositionBinData,\n LbPosition,\n POSITION_BIN_DATA_SIZE,\n POSITION_MIN_SIZE,\n PositionData,\n PositionV2,\n} from \"../../types\";\nimport { DEFAULT_BIN_PER_POSITION, POSITION_MAX_LENGTH } from \"../../constants\";\nimport { Program } from \"@coral-xyz/anchor\";\nimport { LbClmm } from \"../../idl\";\n\nexport * from \"./wrapper\";\n\nexport function getBinArrayIndexesCoverage(lowerBinId: BN, upperBinId: BN) {\n const lowerBinArrayIndex = binIdToBinArrayIndex(lowerBinId);\n const upperBinArrayIndex = binIdToBinArrayIndex(upperBinId);\n\n const binArrayIndexes: BN[] = [];\n\n for (\n let i = lowerBinArrayIndex.toNumber();\n i <= upperBinArrayIndex.toNumber();\n i++\n ) {\n binArrayIndexes.push(new BN(i));\n }\n\n return binArrayIndexes;\n}\n\nexport function getBinArrayKeysCoverage(\n lowerBinId: BN,\n upperBinId: BN,\n lbPair: PublicKey,\n programId: PublicKey\n) {\n const binArrayIndexes = getBinArrayIndexesCoverage(lowerBinId, upperBinId);\n\n return binArrayIndexes.map((index) => {\n return deriveBinArray(lbPair, index, programId)[0];\n });\n}\n\nexport function getBinArrayAccountMetasCoverage(\n lowerBinId: BN,\n upperBinId: BN,\n lbPair: PublicKey,\n programId: PublicKey\n): AccountMeta[] {\n return getBinArrayKeysCoverage(lowerBinId, upperBinId, lbPair, programId).map(\n (key) => {\n return {\n pubkey: key,\n isSigner: false,\n isWritable: true,\n };\n }\n );\n}\n\nexport function getPositionLowerUpperBinIdWithLiquidity(\n position: PositionData\n): { lowerBinId: BN; upperBinId: BN } | null {\n const binWithLiquidity = position.positionBinData.filter(\n (b) =>\n !new BN(b.binLiquidity).isZero() ||\n !new BN(b.positionFeeXAmount.toString()).isZero() ||\n !new BN(b.positionFeeYAmount.toString()).isZero() ||\n !new BN(b.positionRewardAmount[0].toString()).isZero() ||\n !new BN(b.positionRewardAmount[1].toString()).isZero()\n );\n\n return binWithLiquidity.length > 0\n ? {\n lowerBinId: new BN(binWithLiquidity[0].binId),\n upperBinId: new BN(binWithLiquidity[binWithLiquidity.length - 1].binId),\n }\n : null;\n}\n\nexport function isPositionNoFee(position: PositionData): boolean {\n return position.feeX.isZero() && position.feeY.isZero();\n}\n\nexport function isPositionNoReward(position: PositionData): boolean {\n return position.rewardOne.isZero() && position.rewardTwo.isZero();\n}\n\n/**\n * Divides a range of bin IDs into chunks, each with a maximum length defined by POSITION_MAX_LENGTH,\n * and returns an array of objects representing the lower and upper bin IDs for each chunk.\n *\n * @param {number} minBinId - The starting bin ID of the range.\n * @param {number} maxBinId - The ending bin ID of the range.\n * @returns {{ lowerBinId: number; upperBinId: number }[]} An array of objects, each containing a\n * 'lowerBinId' and 'upperBinId', representing the range of bin IDs in each chunk.\n */\n\nexport function chunkBinRangeIntoExtendedPositions(\n minBinId: number,\n maxBinId: number\n): { lowerBinId: number; upperBinId: number }[] {\n const chunkedBinRange = [];\n\n for (\n let currentMinBinId = minBinId;\n currentMinBinId <= maxBinId;\n currentMinBinId += POSITION_MAX_LENGTH.toNumber()\n ) {\n const currentMaxBinId = Math.min(\n currentMinBinId + POSITION_MAX_LENGTH.toNumber() - 1,\n maxBinId\n );\n\n chunkedBinRange.push({\n lowerBinId: currentMinBinId,\n upperBinId: currentMaxBinId,\n });\n }\n\n return chunkedBinRange;\n}\n\n/**\n * Divides a range of bin IDs into chunks, each with a length defined by DEFAULT_BIN_PER_POSITION,\n * and returns an array of objects representing the lower and upper bin IDs for each chunk.\n * Mainly used for chunking bin range to execute multiple add/remove liquidity, claim fee/reward\n *\n * @param {number} minBinId - The starting bin ID of the range.\n * @param {number} maxBinId - The ending bin ID of the range.\n * @returns {{ lowerBinId: number; upperBinId: number }[]} An array of objects, each containing a\n * 'lowerBinId' and 'upperBinId', representing the range of bin IDs in each chunk.\n */\nexport function chunkBinRange(\n minBinId: number,\n maxBinId: number\n): { lowerBinId: number; upperBinId: number }[] {\n const chunkedBinRange = [];\n let startBinId = minBinId;\n\n while (startBinId <= maxBinId) {\n const endBinId = Math.min(\n startBinId + DEFAULT_BIN_PER_POSITION.toNumber() - 1,\n maxBinId\n );\n\n chunkedBinRange.push({\n lowerBinId: startBinId,\n upperBinId: endBinId,\n });\n\n startBinId += DEFAULT_BIN_PER_POSITION.toNumber();\n }\n\n return chunkedBinRange;\n}\n\nexport function chunkPositionBinRange(\n position: LbPosition,\n minBinId: number,\n maxBinId: number\n) {\n const chunkedFeesAndRewards: {\n minBinId: number;\n maxBinId: number;\n amountX: BN;\n amountY: BN;\n feeXAmount: BN;\n feeYAmount: BN;\n rewardAmounts: BN[];\n }[] = [];\n\n let totalAmountX = new BN(0);\n let totalAmountY = new BN(0);\n let totalFeeXAmount = new BN(0);\n let totalFeeYAmount = new BN(0);\n let totalRewardAmounts = [new BN(0), new BN(0)];\n let count = 0;\n\n for (let i = 0; i < position.positionData.positionBinData.length; i++) {\n const positionBinData = position.positionData.positionBinData[i];\n\n if (\n positionBinData.binId >= minBinId &&\n positionBinData.binId <= maxBinId\n ) {\n totalFeeXAmount = totalFeeXAmount.add(\n new BN(positionBinData.positionFeeXAmount)\n );\n totalFeeYAmount = totalFeeYAmount.add(\n new BN(positionBinData.positionFeeYAmount)\n );\n totalAmountX = totalAmountX.add(new BN(positionBinData.positionXAmount));\n totalAmountY = totalAmountY.add(new BN(positionBinData.positionYAmount));\n\n for (const [\n index,\n reward,\n ] of positionBinData.positionRewardAmount.entries()) {\n totalRewardAmounts[index] = totalRewardAmounts[index].add(\n new BN(reward)\n );\n }\n\n count++;\n }\n\n if (\n count === DEFAULT_BIN_PER_POSITION.toNumber() ||\n positionBinData.binId == maxBinId\n ) {\n chunkedFeesAndRewards.push({\n minBinId: positionBinData.binId - count + 1,\n maxBinId: positionBinData.binId,\n feeXAmount: totalFeeXAmount,\n feeYAmount: totalFeeYAmount,\n rewardAmounts: totalRewardAmounts,\n amountX: totalAmountX,\n amountY: totalAmountY,\n });\n\n totalFeeXAmount = new BN(0);\n totalFeeYAmount = new BN(0);\n totalAmountX = new BN(0);\n totalAmountY = new BN(0);\n totalRewardAmounts = [new BN(0), new BN(0)];\n\n count = 0;\n }\n }\n\n return chunkedFeesAndRewards;\n}\n\nexport function calculatePositionSize(binCount: BN) {\n const extraBinCount = binCount.gt(DEFAULT_BIN_PER_POSITION)\n ? binCount.sub(DEFAULT_BIN_PER_POSITION)\n : new BN(0);\n return new BN(POSITION_MIN_SIZE).add(\n extraBinCount.mul(new BN(POSITION_BIN_DATA_SIZE))\n );\n}\n\n/**\n * Get the minimum balance required to pay for the rent exemption of a\n * position with the given bin count.\n *\n * @param connection The connection to the Solana RPC node.\n * @param binCount The number of bins in the position.\n * @returns The minimum balance required to pay for the rent exemption.\n */\nexport function getPositionRentExemption(connection: Connection, binCount: BN) {\n const size = calculatePositionSize(binCount);\n return connection.getMinimumBalanceForRentExemption(size.toNumber());\n}\n\n/**\n * Calculate the minimum lamports required to expand a position to a given\n * width.\n *\n * The function takes into account the current width of the position and the\n * width to expand to. If the expanded width is less than or equal to the\n * default bin count per position, the function returns 0.\n *\n * @param currentMinBinId The current minimum bin ID of the position.\n * @param currentMaxBinId The current maximum bin ID of the position.\n * @param connection The connection to the Solana RPC node.\n * @param binCountToExpand The number of bins to expand the position by.\n * @returns The minimum lamports required to expand the position to the given\n * width.\n */\nexport async function getPositionExpandRentExemption(\n currentMinBinId: BN,\n currentMaxBinId: BN,\n connection: Connection,\n binCountToExpand: BN\n) {\n const currentPositionWidth = currentMaxBinId.sub(currentMinBinId).addn(1);\n const positionWidthAfterExpand = currentPositionWidth.add(binCountToExpand);\n if (positionWidthAfterExpand.lte(DEFAULT_BIN_PER_POSITION)) {\n return 0;\n } else {\n const binCountInExpandedBytes = positionWidthAfterExpand.sub(\n DEFAULT_BIN_PER_POSITION\n );\n const expandSize =\n binCountInExpandedBytes.toNumber() * POSITION_BIN_DATA_SIZE;\n const [minimumLamports, rentExemptionLamports] = await Promise.all([\n connection.getMinimumBalanceForRentExemption(0),\n connection.getMinimumBalanceForRentExemption(expandSize),\n ]);\n\n return rentExemptionLamports - minimumLamports;\n }\n}\n\n/**\n * Calculate the number of extended bins in a position.\n *\n * @param minBinId The minimum bin ID of the position.\n * @param maxBinId The maximum bin ID of the position.\n * @returns The number of extended bins in the position. If the position width is\n * less than or equal to the default bin count per position, returns 0.\n */\nexport function getExtendedPositionBinCount(minBinId: BN, maxBinId: BN) {\n const width = maxBinId.sub(minBinId).addn(1);\n const extended = width.sub(DEFAULT_BIN_PER_POSITION);\n\n return extended.lte(new BN(0)) ? new BN(0) : extended;\n}\n\n/**\n * Decode the extended position data.\n *\n * @param base The base position with the base data.\n * @param program The program that the position is associated with.\n * @param bytes The buffer of bytes to decode.\n * @returns The decoded extended position data.\n */\nexport function decodeExtendedPosition(\n base: PositionV2,\n program: Program<LbClmm>,\n bytes: Buffer\n): ExtendedPositionBinData[] {\n const width = base.upperBinId - base.lowerBinId + 1;\n const extendedWidth = width - DEFAULT_BIN_PER_POSITION.toNumber();\n\n const extendedPosition: ExtendedPositionBinData[] = [];\n\n for (let i = 0; i < extendedWidth; i++) {\n const offset = i * POSITION_BIN_DATA_SIZE;\n const data = bytes.subarray(offset, offset + POSITION_BIN_DATA_SIZE);\n const decodedPositionBinData = program.coder.types.decode(\n // TODO: Find a type safe way\n \"positionBinData\",\n data\n ) as ExtendedPositionBinData;\n extendedPosition.push(decodedPositionBinData);\n }\n\n return extendedPosition;\n}\n","import BN from \"bn.js\";\nimport {\n ExtendedPositionBinData,\n POSITION_BIN_DATA_SIZE,\n POSITION_MIN_SIZE,\n PositionV2,\n PositionVersion,\n UserFeeInfo,\n UserRewardInfo,\n} from \"../../types\";\nimport { AccountInfo, PublicKey } from \"@solana/web3.js\";\nimport { Program } from \"@coral-xyz/anchor\";\nimport { LbClmm } from \"../../idl\";\nimport {\n decodeExtendedPosition,\n getBinArrayIndexesCoverage,\n getBinArrayKeysCoverage,\n} from \".\";\nimport { binIdToBinArrayIndex } from \"../binArray\";\nimport { deriveBinArray } from \"../derive\";\nimport { decodeAccount, getAccountDiscriminator } from \"..\";\n\nexport interface IPosition {\n address(): PublicKey;\n lowerBinId(): BN;\n upperBinId(): BN;\n liquidityShares(): BN[];\n rewardInfos(): UserRewardInfo[];\n feeInfos(): UserFeeInfo[];\n lastUpdatedAt(): BN;\n lbPair(): PublicKey;\n totalClaimedFeeXAmount(): BN;\n totalClaimedFeeYAmount(): BN;\n totalClaimedRewards(): BN[];\n operator(): PublicKey;\n lockReleasePoint(): BN;\n feeOwner(): PublicKey;\n owner(): PublicKey;\n getBinArrayIndexesCoverage(): BN[];\n getBinArrayKeysCoverage(programId: PublicKey): PublicKey[];\n version(): PositionVersion;\n width(): BN;\n}\n\ninterface CombinedPositionBinData {\n liquidityShares: BN[];\n rewardInfos: UserRewardInfo[];\n feeInfos: UserFeeInfo[];\n}\n\nfunction combineBaseAndExtendedPositionBinData(\n base: PositionV2,\n extended: ExtendedPositionBinData[]\n): CombinedPositionBinData {\n const combinedLiquidityShares = base.liquidityShares;\n const combinedRewardInfos = base.rewardInfos;\n const combinedFeeInfos = base.feeInfos;\n\n for (const binData of extended) {\n combinedLiquidityShares.push(binData.liquidityShare);\n combinedRewardInfos.push(binData.rewardInfo);\n combinedFeeInfos.push(binData.feeInfo);\n }\n\n return {\n liquidityShares: combinedLiquidityShares,\n rewardInfos: combinedRewardInfos,\n feeInfos: combinedFeeInfos,\n };\n}\n\nexport function wrapPosition(\n program: Program<LbClmm>,\n key: PublicKey,\n account: AccountInfo<Buffer>\n): IPosition {\n const disc = account.data.subarray(0, 8);\n if (disc.equals(Buffer.from(getAccountDiscriminator(\"positionV2\")))) {\n const state = decodeAccount<PositionV2>(\n program,\n \"positionV2\",\n account.data\n );\n\n const extended = decodeExtendedPosition(\n state,\n program,\n account.data.subarray(8 + POSITION_MIN_SIZE)\n );\n\n const combinedPositionBinData = combineBaseAndExtendedPositionBinData(\n state,\n extended\n );\n\n return new PositionV2Wrapper(key, state, extended, combinedPositionBinData);\n } else {\n throw new Error(\"Unknown position account\");\n }\n}\n\nexport class PositionV2Wrapper implements IPosition {\n constructor(\n public positionAddress: PublicKey,\n public inner: PositionV2,\n public extended: ExtendedPositionBinData[],\n public combinedPositionBinData: CombinedPositionBinData\n ) {}\n\n address(): PublicKey {\n return this.positionAddress;\n }\n\n totalClaimedRewards(): BN[] {\n return this.inner.totalClaimedRewards;\n }\n\n feeOwner(): PublicKey {\n return this.inner.feeOwner;\n }\n\n lockReleasePoint(): BN {\n return this.inner.lockReleasePoint;\n }\n\n operator(): PublicKey {\n return this.inner.operator;\n }\n\n totalClaimedFeeYAmount(): BN {\n return this.inner.totalClaimedFeeYAmount;\n }\n\n totalClaimedFeeXAmount(): BN {\n return this.inner.totalClaimedFeeXAmount;\n }\n\n lbPair(): PublicKey {\n return this.inner.lbPair;\n }\n\n lowerBinId(): BN {\n return new BN(this.inner.lowerBinId);\n }\n\n upperBinId(): BN {\n return new BN(this.inner.upperBinId);\n }\n\n liquidityShares(): BN[] {\n return this.combinedPositionBinData.liquidityShares;\n }\n\n rewardInfos(): UserRewardInfo[] {\n return this.combinedPositionBinData.rewardInfos;\n }\n\n feeInfos(): UserFeeInfo[] {\n return this.combinedPositionBinData.feeInfos;\n }\n\n lastUpdatedAt(): BN {\n return this.inner.lastUpdatedAt;\n }\n\n getBinArrayIndexesCoverage(): BN[] {\n const isExtended = this.extended.length > 0;\n if (isExtended) {\n return getBinArrayIndexesCoverage(this.lowerBinId(), this.upperBinId());\n } else {\n const lowerBinArrayIndex = binIdToBinArrayIndex(this.lowerBinId());\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n return [lowerBinArrayIndex, upperBinArrayIndex];\n }\n }\n\n getBinArrayKeysCoverage(programId: PublicKey): PublicKey[] {\n return this.getBinArrayIndexesCoverage().map(\n (index) => deriveBinArray(this.lbPair(), index, programId)[0]\n );\n }\n\n version(): PositionVersion {\n return PositionVersion.V2;\n }\n\n owner(): PublicKey {\n return this.inner.owner;\n }\n\n width(): BN {\n return this.upperBinId().sub(this.lowerBinId()).add(new BN(1));\n }\n}\n","import { Program } from \"@coral-xyz/anchor\";\nimport { Connection, PublicKey, SYSVAR_CLOCK_PUBKEY } from \"@solana/web3.js\";\nimport BN from \"bn.js\";\nimport Decimal from \"decimal.js\";\nimport { decodeAccount, deriveBinArray } from \"..\";\nimport { DLMM } from \"../..\";\nimport {\n BASIS_POINT_MAX,\n DEFAULT_BIN_PER_POSITION,\n FEE_PRECISION,\n SCALE_OFFSET,\n} from \"../../constants\";\nimport { LbClmm } from \"../../idl\";\nimport {\n Bin,\n BinArray,\n Clock,\n ClockLayout,\n LbPair,\n POSITION_BIN_DATA_SIZE,\n PositionData,\n RebalanceAddLiquidityParam,\n RebalanceRemoveLiquidityParam,\n sParameters,\n vParameters,\n} from \"../../types\";\nimport {\n binIdToBinArrayIndex,\n deriveBinArrayBitmapExtension,\n getBinArrayLowerUpperBinId,\n getBinIdIndexInBinArray,\n isOverflowDefaultBinArrayBitmap,\n} from \"../binArray\";\nimport { getTotalFee } from \"../fee\";\nimport { getQPriceBaseFactor, getQPriceFromId } from \"../math\";\nimport { pow } from \"../u64xu64_math\";\nimport { getPriceOfBinByBinId } from \"../weight\";\n\nexport function buildBitFlagAndNegateStrategyParameters(\n x0: BN,\n y0: BN,\n deltaX: BN,\n deltaY: BN\n): {\n bitFlag: number;\n x0: BN;\n y0: BN;\n deltaX: BN;\n deltaY: BN;\n} {\n let bitFlag = 0;\n\n if (x0.isNeg()) {\n bitFlag |= 0b1;\n x0 = x0.neg();\n }\n\n if (y0.isNeg()) {\n bitFlag |= 0b10;\n y0 = y0.neg();\n }\n\n if (deltaX.isNeg()) {\n bitFlag |= 0b100;\n deltaX = deltaX.neg();\n }\n\n if (deltaY.isNeg()) {\n bitFlag |= 0b1000;\n deltaY = deltaY.neg();\n }\n\n return {\n bitFlag,\n x0,\n y0,\n deltaX,\n deltaY,\n };\n}\n\nexport interface AmountIntoBin {\n binId: BN;\n amountX: BN;\n amountY: BN;\n}\n\nfunction toRebalancePositionBinData(\n positionData: PositionData\n): RebalancePositionBinData[] {\n return positionData.positionBinData.map(\n ({\n binId,\n price,\n pricePerToken,\n positionXAmount,\n positionYAmount,\n positionFeeXAmount,\n positionFeeYAmount,\n positionRewardAmount,\n }) => {\n return {\n binId,\n price,\n pricePerToken: pricePerToken,\n amountX: new BN(positionXAmount),\n amountY: new BN(positionYAmount),\n claimableRewardAmount: positionRewardAmount.map(\n (amount) => new BN(amount)\n ),\n claimableFeeXAmount: new BN(positionFeeXAmount),\n claimableFeeYAmount: new BN(positionFeeYAmount),\n };\n }\n );\n}\n\nfunction getDepositBinIds(activeId: BN, deposits: RebalanceWithDeposit[]) {\n const uniqueBinId = new Set<number>();\n\n for (const { minDeltaId, maxDeltaId } of deposits) {\n const minBinId = activeId.add(minDeltaId);\n const maxBinId = activeId.add(maxDeltaId);\n\n for (\n let binId = minBinId.toNumber();\n binId <= maxBinId.toNumber();\n binId++\n ) {\n uniqueBinId.add(binId);\n }\n }\n\n const binIds = Array.from(uniqueBinId);\n binIds.sort((a, b) => a - b);\n\n return binIds;\n}\n\nfunction findMinMaxBinIdWithLiquidity(\n rebalancePositionBinData: RebalancePositionBinData[]\n) {\n let minBinId = null;\n let maxBinId = null;\n\n for (const binData of rebalancePositionBinData) {\n if (\n binData.amountX.isZero() &&\n binData.amountY.isZero() &&\n binData.claimableFeeXAmount.isZero() &&\n binData.claimableFeeYAmount.isZero() &&\n binData.claimableRewardAmount.every((amount) => amount.isZero())\n ) {\n continue;\n }\n\n if (minBinId == null || binData.binId < minBinId) {\n minBinId = binData.binId;\n }\n\n if (maxBinId == null || binData.binId > maxBinId) {\n maxBinId = binData.binId;\n }\n }\n\n return [minBinId, maxBinId];\n}\n\nfunction onlyDepositToBidSide(maxDeltaId: BN, favorXInActiveBin: boolean) {\n if (favorXInActiveBin) {\n return maxDeltaId.lt(new BN(0));\n }\n return maxDeltaId.lte(new BN(0));\n}\n\nfunction onlyDepositToAskSide(minDeltaId: BN, favorXInActiveBin: boolean) {\n if (favorXInActiveBin) {\n return minDeltaId.gte(new BN(0));\n }\n return minDeltaId.gt(new BN(0));\n}\n\nexport function getAmountInBinsBidSide(\n activeId: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n deltaY: BN,\n y0: BN\n) {\n const amountInBins: AmountIntoBin[] = [];\n\n const minBinId = activeId.add(minDeltaId);\n const maxBinId = activeId.add(maxDeltaId);\n\n for (let binId = minBinId.toNumber(); binId <= maxBinId.toNumber(); binId++) {\n const deltaBin = activeId.toNumber() - binId;\n const totalDeltaY = deltaY.mul(new BN(deltaBin));\n const amountY = y0.add(totalDeltaY);\n amountInBins.push({\n binId: new BN(binId),\n amountX: new BN(0),\n amountY,\n });\n }\n\n return amountInBins;\n}\n\nexport function getAmountInBinsAskSide(\n activeId: BN,\n binStep: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n deltaX: BN,\n x0: BN\n) {\n const binCount = maxDeltaId.sub(minDeltaId).add(new BN(1));\n\n const minBinId = activeId.add(minDeltaId);\n const maxBinId = activeId.add(maxDeltaId);\n\n const amountInBins: AmountIntoBin[] = new Array(binCount.toNumber());\n\n const base = getQPriceBaseFactor(binStep);\n let inverseBasePrice = pow(base, maxBinId.neg());\n\n for (let binId = maxBinId.toNumber(); binId >= minBinId.toNumber(); binId--) {\n const delta = binId - activeId.toNumber();\n const totalDeltaX = deltaX.mul(new BN(delta));\n const amountX = x0\n .add(totalDeltaX)\n .mul(inverseBasePrice)\n .shrn(SCALE_OFFSET);\n const idx = binId - minBinId.toNumber();\n amountInBins[idx] = {\n binId: new BN(binId),\n amountX,\n amountY: new BN(0),\n };\n inverseBasePrice = inverseBasePrice.mul(base).shrn(SCALE_OFFSET);\n }\n\n return amountInBins;\n}\n\nexport function toAmountIntoBins(\n activeId: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n deltaX: BN,\n deltaY: BN,\n x0: BN,\n y0: BN,\n binStep: BN,\n favorXInActiveBin: boolean\n): AmountIntoBin[] {\n if (onlyDepositToBidSide(maxDeltaId, favorXInActiveBin)) {\n return getAmountInBinsBidSide(activeId, minDeltaId, maxDeltaId, deltaY, y0);\n }\n\n if (onlyDepositToAskSide(minDeltaId, favorXInActiveBin)) {\n return getAmountInBinsAskSide(\n activeId,\n binStep,\n minDeltaId,\n maxDeltaId,\n deltaX,\n x0\n );\n }\n\n const [bidSideEndDeltaId, askSideStartDeltaId] = favorXInActiveBin\n ? [-1, 0]\n : [0, 1];\n\n const amountInBinsBidSide = getAmountInBinsBidSide(\n activeId,\n minDeltaId,\n new BN(bidSideEndDeltaId),\n deltaY,\n y0\n );\n\n const amountInBinsAskSide = getAmountInBinsAskSide(\n activeId,\n binStep,\n new BN(askSideStartDeltaId),\n maxDeltaId,\n deltaX,\n x0\n );\n\n return amountInBinsBidSide.concat(amountInBinsAskSide);\n}\n\nfunction getLiquidity(x: BN, y: BN, price: BN) {\n const px = price.mul(x);\n const shly = y.shln(SCALE_OFFSET);\n return px.add(shly);\n}\n\nfunction computeCompositionFee(\n binStep: BN,\n sParameters: sParameters,\n vParameters: vParameters,\n outAmountX: BN,\n inAmountX: BN,\n outAmountY: BN,\n inAmountY: BN\n) {\n if (outAmountX.gt(inAmountX)) {\n const delta = inAmountY.sub(outAmountY);\n const totalFeeRate = getTotalFee(\n binStep.toNumber(),\n sParameters,\n vParameters\n );\n const feeAmount = delta.mul(totalFeeRate);\n return feeAmount\n .mul(FEE_PRECISION.add(totalFeeRate))\n .div(FEE_PRECISION.pow(new BN(2)));\n }\n return new BN(0);\n}\n\nfunction simulateDepositBin(\n binId: BN,\n binStep: BN,\n amountX: BN,\n amountY: BN,\n bin: Bin | null\n) {\n if (!bin) {\n return {\n amountXIntoBin: amountX,\n amountYIntoBin: amountY,\n };\n }\n\n const price = getQPriceFromId(binId, binStep);\n const inLiquidity = getLiquidity(amountX, amountY, price);\n const binLiquidity = getLiquidity(bin.amountX, bin.amountY, price);\n\n if (bin.liquiditySupply.isZero()) {\n return {\n amountXIntoBin: amountX,\n amountYIntoBin: amountY,\n };\n }\n\n const liquidityShare = inLiquidity.mul(bin.liquiditySupply).div(binLiquidity);\n const updatedBinXAmount = bin.amountX.add(amountX);\n const updatedBinYAmount = bin.amountY.add(amountY);\n const updatedBinSupply = bin.liquiditySupply.add(liquidityShare);\n\n let amountXIntoBin = liquidityShare.mul(\n updatedBinXAmount.div(updatedBinSupply)\n );\n let amountYIntoBin = liquidityShare.mul(\n updatedBinYAmount.div(updatedBinSupply)\n );\n\n if (amountXIntoBin.gt(amountX)) {\n }\n\n return {\n amountXIntoBin,\n amountYIntoBin,\n };\n}\n\ninterface SimulateWithdrawResult {\n liquidityAndFeeXWithdrawn: BN;\n liquidityAndFeeYWithdrawn: BN;\n rewardsAmountClaimed: BN[];\n}\n\ninterface SimulateDepositResult {\n totalAmountXDeposited: BN;\n totalAmountYDeposited: BN;\n actualTotalAmountXDeposited: BN;\n actualTotalAmountYDeposited: BN;\n actualLiquidityAndFeeXWithdrawn: BN;\n actualLiquidityAndFeeYWithdrawn: BN;\n}\n\nexport interface CreateRebalancePositionParams {\n program: Program<LbClmm>;\n pairAddress: PublicKey;\n positionAddress: PublicKey;\n positionData: PositionData;\n shouldClaimFee: boolean;\n shouldClaimReward: boolean;\n}\n\nexport class RebalancePosition {\n public address: PublicKey;\n public lowerBinId: BN;\n public upperBinId: BN;\n public lbPair: LbPair;\n public owner: PublicKey;\n public shouldClaimFee: boolean;\n public shouldClaimReward: boolean;\n public rebalancePositionBinData: RebalancePositionBinData[];\n public activeBin: Bin | null;\n public currentTimestamp: BN;\n\n constructor(\n positionAddress: PublicKey,\n positionData: PositionData,\n lbPair: LbPair,\n activeBin: Bin | null,\n shouldClaimFee: boolean,\n shouldClaimReward: boolean,\n currentTimestamp: BN\n ) {\n this.address = positionAddress;\n this.rebalancePositionBinData = toRebalancePositionBinData(positionData);\n this.lowerBinId = new BN(positionData.lowerBinId);\n this.upperBinId = new BN(positionData.upperBinId);\n this.lbPair = lbPair;\n this.shouldClaimFee = shouldClaimFee;\n this.shouldClaimReward = shouldClaimReward;\n this.owner = positionData.owner;\n this.activeBin = activeBin;\n this.currentTimestamp = currentTimestamp;\n }\n\n static async create(\n params: CreateRebalancePositionParams\n ): Promise<RebalancePosition> {\n const {\n program,\n positionAddress,\n pairAddress,\n positionData,\n shouldClaimFee,\n shouldClaimReward,\n } = params;\n const [lbPairAccount, clockAccount] =\n await program.provider.connection.getMultipleAccountsInfo([\n pairAddress,\n SYSVAR_CLOCK_PUBKEY,\n ]);\n\n const lbPair = decodeAccount<LbPair>(program, \"lbPair\", lbPairAccount.data);\n const clock = ClockLayout.decode(clockAccount.data) as Clock;\n\n const activeBinArrayIdx = binIdToBinArrayIndex(new BN(lbPair.activeId));\n const [activeBinArrayPubkey] = deriveBinArray(\n pairAddress,\n activeBinArrayIdx,\n program.programId\n );\n\n const [lowerBinId, upperBinId] =\n getBinArrayLowerUpperBinId(activeBinArrayIdx);\n const idx = getBinIdIndexInBinArray(\n new BN(lbPair.activeId),\n lowerBinId,\n upperBinId\n );\n\n let activeBin: Bin | null = null;\n try {\n const activeBinArrayState = await program.account.binArray.fetch(\n activeBinArrayPubkey\n );\n activeBin = activeBinArrayState[idx.toNumber()];\n } catch (error) {\n // error happens when the active bin array is not initialized\n }\n\n return new RebalancePosition(\n positionAddress,\n positionData,\n lbPair,\n activeBin,\n shouldClaimFee,\n shouldClaimReward,\n clock.unixTimestamp\n );\n }\n\n _simulateDeposit(\n binStep: BN,\n tokenXDecimal: BN,\n tokenYDecimal: BN,\n deposits: RebalanceWithDeposit[],\n simulatedWithdrawResult: SimulateWithdrawResult\n ): {\n result: SimulateDepositResult;\n depositParams: RebalanceAddLiquidityParam[];\n } {\n const { liquidityAndFeeXWithdrawn, liquidityAndFeeYWithdrawn } =\n simulatedWithdrawResult;\n\n const activeId = new BN(this.lbPair.activeId);\n const depositBinIds = getDepositBinIds(activeId, deposits);\n\n if (depositBinIds.length > 0) {\n const depositMinBinId = depositBinIds[0];\n const depositMaxBinId = depositBinIds[depositBinIds.length - 1];\n\n this._simulateResize(\n new BN(depositMinBinId),\n new BN(depositMaxBinId),\n binStep,\n tokenXDecimal,\n tokenYDecimal\n );\n }\n\n let totalAmountXDeposited = new BN(0);\n let totalAmountYDeposited = new BN(0);\n\n const addLiquidityParam: RebalanceAddLiquidityParam[] = [];\n\n for (const {\n x0,\n y0,\n favorXInActiveBin,\n deltaX,\n deltaY,\n minDeltaId,\n maxDeltaId,\n } of deposits) {\n const params = buildBitFlagAndNegateStrategyParameters(\n x0,\n y0,\n deltaX,\n deltaY\n );\n\n addLiquidityParam.push({\n minDeltaId: minDeltaId.toNumber(),\n maxDeltaId: maxDeltaId.toNumber(),\n x0: params.x0,\n y0: params.y0,\n deltaX: params.deltaX,\n deltaY: params.deltaY,\n bitFlag: params.bitFlag,\n padding: Array(16).fill(0),\n favorXInActiveId: favorXInActiveBin,\n });\n\n const amountIntoBins = toAmountIntoBins(\n activeId,\n minDeltaId,\n maxDeltaId,\n deltaX,\n deltaY,\n x0,\n y0,\n binStep,\n favorXInActiveBin\n );\n\n for (const { binId, amountX, amountY } of amountIntoBins) {\n totalAmountXDeposited = totalAmountXDeposited.add(amountX);\n totalAmountYDeposited = totalAmountYDeposited.add(amountY);\n\n const idx = this.rebalancePositionBinData.findIndex(\n (data) => data.binId == binId.toNumber()\n );\n\n if (binId.eq(activeId)) {\n const vParameters = Object.assign({}, this.lbPair.vParameters);\n const sParameters = Object.assign({}, this.lbPair.parameters);\n DLMM.updateReference(\n activeId.toNumber(),\n vParameters,\n sParameters,\n this.currentTimestamp.toNumber()\n );\n DLMM.updateVolatilityAccumulator(\n vParameters,\n sParameters,\n activeId.toNumber()\n );\n const { amountXIntoBin, amountYIntoBin } = simulateDepositBin(\n binId,\n binStep,\n amountX,\n amountY,\n this.activeBin\n );\n const feeY = computeCompositionFee(\n binStep,\n sParameters,\n vParameters,\n amountXIntoBin,\n amountX,\n amountYIntoBin,\n amountY\n );\n const feeX = computeCompositionFee(\n binStep,\n sParameters,\n vParameters,\n amountYIntoBin,\n amountY,\n amountXIntoBin,\n amountX\n );\n const amountXIntoBinExcludeFee = amountXIntoBin.sub(feeX);\n const amountYIntoBinExcludeFee = amountYIntoBin.sub(feeY);\n this.rebalancePositionBinData[idx].amountX =\n this.rebalancePositionBinData[idx].amountX.add(\n amountXIntoBinExcludeFee\n );\n this.rebalancePositionBinData[idx].amountY =\n this.rebalancePositionBinData[idx].amountY.add(\n amountYIntoBinExcludeFee\n );\n } else {\n this.rebalancePositionBinData[idx].amountX =\n this.rebalancePositionBinData[idx].amountX.add(amountX);\n this.rebalancePositionBinData[idx].amountY =\n this.rebalancePositionBinData[idx].amountY.add(amountY);\n }\n }\n }\n\n let actualTotalAmountXDeposited = totalAmountXDeposited;\n let actualTotalAmountYDeposited = totalAmountYDeposited;\n let actualLiquidityAndFeeXWithdrawn = liquidityAndFeeXWithdrawn;\n let actualLiquidityAndFeeYWithdrawn = liquidityAndFeeYWithdrawn;\n\n if (actualTotalAmountXDeposited.gt(actualLiquidityAndFeeXWithdrawn)) {\n actualTotalAmountXDeposited = actualTotalAmountXDeposited.sub(\n actualLiquidityAndFeeXWithdrawn\n );\n actualLiquidityAndFeeXWithdrawn = new BN(0);\n } else {\n actualLiquidityAndFeeXWithdrawn = actualLiquidityAndFeeXWithdrawn.sub(\n actualTotalAmountXDeposited\n );\n actualTotalAmountXDeposited = new BN(0);\n }\n\n if (actualTotalAmountYDeposited.gt(actualLiquidityAndFeeYWithdrawn)) {\n actualTotalAmountYDeposited = actualTotalAmountYDeposited.sub(\n actualLiquidityAndFeeYWithdrawn\n );\n actualLiquidityAndFeeYWithdrawn = new BN(0);\n } else {\n actualLiquidityAndFeeYWithdrawn = actualLiquidityAndFeeYWithdrawn.sub(\n actualTotalAmountYDeposited\n );\n actualTotalAmountYDeposited = new BN(0);\n }\n\n return {\n result: {\n totalAmountXDeposited,\n totalAmountYDeposited,\n actualLiquidityAndFeeXWithdrawn,\n actualLiquidityAndFeeYWithdrawn,\n actualTotalAmountXDeposited,\n actualTotalAmountYDeposited,\n },\n depositParams: addLiquidityParam,\n };\n }\n\n _simulateResize(\n depositMinBinId: BN,\n depositMaxBinId: BN,\n binStep: BN,\n tokenXDecimal: BN,\n tokenYDecimal: BN\n ) {\n const tokenXMultiplier = new Decimal(10 ** tokenXDecimal.toNumber());\n const tokenYMultiplier = new Decimal(10 ** tokenYDecimal.toNumber());\n\n const [minBinId, maxBinId] = findMinMaxBinIdWithLiquidity(\n this.rebalancePositionBinData\n );\n\n const newMinBinId = new BN(\n Math.min(depositMinBinId.toNumber(), minBinId ?? Number.MAX_SAFE_INTEGER)\n );\n const newMaxBinId = new BN(\n Math.max(depositMaxBinId.toNumber(), maxBinId ?? Number.MIN_SAFE_INTEGER)\n );\n\n if (newMinBinId.lt(this.lowerBinId)) {\n const binCountToExpand = this.lowerBinId.sub(depositMinBinId);\n for (let i = 1; i <= binCountToExpand.toNumber(); i++) {\n const binId = this.lowerBinId.subn(i);\n const price = getPriceOfBinByBinId(\n binId.toNumber(),\n binStep.toNumber()\n );\n const adjustedPrice = price.mul(tokenXMultiplier).div(tokenYMultiplier);\n\n this.rebalancePositionBinData.unshift({\n binId: binId.toNumber(),\n price: adjustedPrice.toString(),\n pricePerToken: adjustedPrice.toString(),\n amountX: new BN(0),\n amountY: new BN(0),\n claimableRewardAmount: [new BN(0), new BN(0)],\n claimableFeeXAmount: new BN(0),\n claimableFeeYAmount: new BN(0),\n });\n }\n } else {\n const binCountToShrink = newMinBinId.sub(this.lowerBinId);\n for (let i = 1; i <= binCountToShrink.toNumber(); i++) {\n this.rebalancePositionBinData.shift();\n }\n }\n\n if (newMaxBinId.gt(this.upperBinId)) {\n const binCountToExpand = newMaxBinId.sub(this.upperBinId);\n for (let i = 1; i <= binCountToExpand.toNumber(); i++) {\n const binId = this.upperBinId.addn(i);\n const price = getPriceOfBinByBinId(\n binId.toNumber(),\n binStep.toNumber()\n );\n const adjustedPrice = price.mul(tokenXMultiplier).div(tokenYMultiplier);\n\n this.rebalancePositionBinData.push({\n binId: binId.toNumber(),\n price: adjustedPrice.toString(),\n pricePerToken: adjustedPrice.toString(),\n amountX: new BN(0),\n amountY: new BN(0),\n claimableRewardAmount: [new BN(0), new BN(0)],\n claimableFeeXAmount: new BN(0),\n claimableFeeYAmount: new BN(0),\n });\n }\n } else {\n const binCountToShrink = this.upperBinId.sub(newMaxBinId);\n for (let i = 1; i <= binCountToShrink.toNumber(); i++) {\n this.rebalancePositionBinData.pop();\n }\n }\n\n this.lowerBinId = newMinBinId;\n this.upperBinId = newMaxBinId;\n }\n\n _simulateWithdraw(withdraws: RebalanceWithWithdraw[]): {\n result: SimulateWithdrawResult;\n withdrawParams: RebalanceRemoveLiquidityParam[];\n } {\n let liquidityAndFeeXWithdrawn = new BN(0);\n let liquidityAndFeeYWithdrawn = new BN(0);\n let rewardsAmountClaimed = [new BN(0), new BN(0)];\n\n const activeId = new BN(this.lbPair.activeId);\n\n for (const { minBinId, maxBinId, bps } of withdraws) {\n const fromBinId = minBinId ?? activeId;\n const toBinId = maxBinId ?? activeId;\n\n const binIds = binRangeToBinIdArray(fromBinId, toBinId).filter(\n (binId) => binId.gte(this.lowerBinId) && binId.lte(this.upperBinId)\n );\n\n for (const binId of binIds) {\n const idx = this.rebalancePositionBinData.findIndex(\n (b) => b.binId === binId.toNumber()\n );\n\n const binData = this.rebalancePositionBinData[idx];\n\n // 1. Withdraw\n const amountXWithdrawn = binData.amountX.mul(bps).divn(BASIS_POINT_MAX);\n const amountYWithdrawn = binData.amountY.mul(bps).divn(BASIS_POINT_MAX);\n\n liquidityAndFeeXWithdrawn =\n liquidityAndFeeXWithdrawn.add(amountXWithdrawn);\n liquidityAndFeeYWithdrawn =\n liquidityAndFeeYWithdrawn.add(amountYWithdrawn);\n\n binData.amountX = binData.amountX.sub(amountXWithdrawn);\n binData.amountY = binData.amountY.sub(amountYWithdrawn);\n\n // 2. Claim fee\n if (this.shouldClaimFee) {\n liquidityAndFeeXWithdrawn = liquidityAndFeeXWithdrawn.add(\n binData.claimableFeeXAmount\n );\n liquidityAndFeeYWithdrawn = liquidityAndFeeYWithdrawn.add(\n binData.claimableFeeYAmount\n );\n\n binData.claimableFeeXAmount = new BN(0);\n binData.claimableFeeYAmount = new BN(0);\n }\n\n // 3. Claim reward\n if (this.shouldClaimReward) {\n for (const [idx, amount] of binData.claimableRewardAmount.entries()) {\n rewardsAmountClaimed[idx] = rewardsAmountClaimed[idx].add(amount);\n binData.claimableRewardAmount[idx] = new BN(0);\n }\n }\n\n // Update state\n this.rebalancePositionBinData[idx] = binData;\n }\n }\n\n const withdrawParams: RebalanceRemoveLiquidityParam[] = withdraws.map(\n ({ minBinId, maxBinId, bps }) => {\n return {\n minBinId: minBinId ? minBinId.toNumber() : null,\n maxBinId: maxBinId ? maxBinId.toNumber() : null,\n bps: bps.toNumber(),\n padding: Array(16).fill(0),\n };\n }\n );\n\n return {\n result: {\n liquidityAndFeeXWithdrawn,\n liquidityAndFeeYWithdrawn,\n rewardsAmountClaimed,\n },\n withdrawParams,\n };\n }\n\n async simulateRebalance(\n connection: Connection,\n binStep: BN,\n tokenXDecimal: BN,\n tokenYDecimal: BN,\n withdraws: RebalanceWithWithdraw[],\n deposits: RebalanceWithDeposit[]\n ): Promise<SimulateRebalanceResp> {\n if (withdraws.length == 0 && deposits.length == 0) {\n throw \"No rebalance action\";\n }\n\n const activeId = new BN(this.lbPair.activeId);\n\n withdraws = validateAndSortRebalanceWithdraw(withdraws, activeId);\n deposits = validateAndSortRebalanceDeposit(deposits);\n\n const beforeWidth = getPositionWidthWithMinWidth(\n this.lowerBinId.toNumber(),\n this.upperBinId.toNumber()\n );\n\n const { withdrawParams, result: withdrawResult } =\n this._simulateWithdraw(withdraws);\n\n const { depositParams, result: depositResult } = this._simulateDeposit(\n binStep,\n tokenXDecimal,\n tokenYDecimal,\n deposits,\n withdrawResult\n );\n\n const afterWidth = getPositionWidthWithMinWidth(\n this.lowerBinId.toNumber(),\n this.upperBinId.toNumber()\n );\n\n const widthDelta = afterWidth - beforeWidth;\n\n let rentalCostLamports = new BN(0);\n\n if (widthDelta != 0) {\n const sizeChanges = Math.abs(widthDelta) * POSITION_BIN_DATA_SIZE;\n const [minimumLamports, rentExemptionLamports] = await Promise.all([\n connection.getMinimumBalanceForRentExemption(0),\n connection.getMinimumBalanceForRentExemption(sizeChanges),\n ]);\n\n const lamportChanges = new BN(rentExemptionLamports).sub(\n new BN(minimumLamports)\n );\n\n if (widthDelta > 0) {\n rentalCostLamports = rentalCostLamports.add(lamportChanges);\n } else {\n rentalCostLamports = rentalCostLamports.sub(lamportChanges);\n }\n }\n\n return {\n amountXDeposited: depositResult.totalAmountXDeposited,\n amountYDeposited: depositResult.totalAmountYDeposited,\n actualAmountXDeposited: depositResult.actualTotalAmountXDeposited,\n actualAmountYDeposited: depositResult.actualTotalAmountYDeposited,\n actualAmountXWithdrawn: depositResult.actualLiquidityAndFeeXWithdrawn,\n actualAmountYWithdrawn: depositResult.actualLiquidityAndFeeYWithdrawn,\n rewardAmountsClaimed: withdrawResult.rewardsAmountClaimed,\n withdrawParams,\n depositParams,\n rentalCostLamports,\n };\n }\n\n totalAmounts(): BN[] {\n let totalAmountX = new BN(0);\n let totalAmountY = new BN(0);\n\n for (const binData of this.rebalancePositionBinData) {\n totalAmountX = totalAmountX.add(binData.amountX);\n totalAmountY = totalAmountY.add(binData.amountY);\n }\n\n return [totalAmountX, totalAmountY];\n }\n\n totalFeeAmounts(): BN[] {\n let totalFeeXAmount = new BN(0);\n let totalFeeYAmount = new BN(0);\n\n for (const binData of this.rebalancePositionBinData) {\n totalFeeXAmount = totalFeeXAmount.add(binData.claimableFeeXAmount);\n totalFeeYAmount = totalFeeYAmount.add(binData.claimableFeeYAmount);\n }\n\n return [totalFeeXAmount, totalFeeYAmount];\n }\n\n totalRewardAmounts(): BN[] {\n let totalRewardAmounts = [new BN(0), new BN(0)];\n\n for (const binData of this.rebalancePositionBinData) {\n totalRewardAmounts[0] = totalRewardAmounts[0].add(\n binData.claimableRewardAmount[0]\n );\n totalRewardAmounts[1] = totalRewardAmounts[1].add(\n binData.claimableRewardAmount[1]\n );\n }\n\n return totalRewardAmounts;\n }\n}\n\nfunction getPositionWidthWithMinWidth(lowerBinId: number, upperBinId: number) {\n const width = upperBinId - lowerBinId + 1;\n return Math.max(width, DEFAULT_BIN_PER_POSITION.toNumber());\n}\n\nfunction validateAndSortRebalanceDeposit(deposits: RebalanceWithDeposit[]) {\n const sortedDeposits = deposits.sort((a, b) =>\n a.minDeltaId.sub(b.minDeltaId).toNumber()\n );\n\n for (const deposit of deposits) {\n if (deposit.minDeltaId.gte(deposit.maxDeltaId)) {\n throw \"Invalid minDeltaId or maxDeltaId\";\n }\n }\n\n for (let i = 1; i < sortedDeposits.length; i++) {\n const prevDeposit = sortedDeposits[i - 1];\n const currDeposit = sortedDeposits[i];\n\n if (prevDeposit.maxDeltaId.gte(currDeposit.minDeltaId)) {\n throw \"Overlap deposit bin range\";\n }\n }\n\n return sortedDeposits;\n}\n\nfunction validateAndSortRebalanceWithdraw(\n withdraws: RebalanceWithWithdraw[],\n activeId: BN\n) {\n const filledWithdraws: RebalanceWithWithdraw[] = [];\n\n for (const { minBinId, maxBinId, bps } of withdraws) {\n if (bps.toNumber() < 0 || bps.toNumber() > BASIS_POINT_MAX) {\n throw \"Invalid bps\";\n }\n\n const filledMinBinId = minBinId ?? activeId;\n const filledMaxBinId = maxBinId ?? activeId;\n\n if (filledMinBinId.gt(filledMaxBinId)) {\n throw \"Invalid minBinId or maxBinId\";\n }\n\n filledWithdraws.push({\n minBinId: filledMinBinId,\n maxBinId: filledMaxBinId,\n bps,\n });\n }\n\n filledWithdraws.sort((a, b) => {\n return a.minBinId.sub(b.minBinId).toNumber();\n });\n\n for (let i = 1; i < filledWithdraws.length; i++) {\n const prev = filledWithdraws[i - 1];\n const curr = filledWithdraws[i];\n if (curr.minBinId.lte(prev.maxBinId)) {\n throw \"Overlap withdraw bin range\";\n }\n }\n\n return filledWithdraws;\n}\n\ninterface RebalancePositionBinData {\n /// Bin ID\n binId: number;\n /// Price of the bin\n price: string;\n /// Price per token of the bin\n pricePerToken: string;\n /// Amount X in the bin\n amountX: BN;\n /// Amount Y in the bin\n amountY: BN;\n /// Claimable reward amount in the bin\n claimableRewardAmount: BN[];\n /// Claimable fee X amount in the bin\n claimableFeeXAmount: BN;\n /// Claimable fee Y amount in the bin\n claimableFeeYAmount: BN;\n}\n\nexport interface RebalanceWithDeposit {\n /// minBinId = activeId + minDeltaId\n minDeltaId: BN;\n /// maxBinId = activeId + maxDeltaId\n maxDeltaId: BN;\n /// X0\n x0: BN;\n /// Y0\n y0: BN;\n /// Delta X\n deltaX: BN;\n /// Delta Y\n deltaY: BN;\n /// Deposit token X or Y in active bin\n favorXInActiveBin: boolean;\n}\n\nexport interface RebalanceWithWithdraw {\n /// Withdraw start from minBinId. When it's `null`, it will start from activeId.\n minBinId: BN | null;\n /// Withdraw end at maxBinId. When it's `null`, it will end at activeId.\n maxBinId: BN | null;\n /// BPS of liquidity to be withdrawn from minBinId to maxBinId\n bps: BN;\n}\n\nexport interface SimulateRebalanceResp {\n amountXDeposited: BN;\n amountYDeposited: BN;\n actualAmountXDeposited: BN;\n actualAmountYDeposited: BN;\n actualAmountXWithdrawn: BN;\n actualAmountYWithdrawn: BN;\n rewardAmountsClaimed: BN[];\n depositParams: RebalanceAddLiquidityParam[];\n withdrawParams: RebalanceRemoveLiquidityParam[];\n rentalCostLamports: BN;\n}\n\nfunction binRangeToBinIdArray(minBinId: BN, maxBinId: BN): BN[] {\n const binIdArray = [];\n\n const fromBinId = minBinId.toNumber();\n const toBinId = maxBinId.toNumber();\n\n for (let binId = fromBinId; binId <= toBinId; binId++) {\n binIdArray.push(new BN(binId));\n }\n\n return binIdArray;\n}\n\nexport function getRebalanceBinArrayIndexesAndBitmapCoverage(\n adds: RebalanceAddLiquidityParam[],\n removes: RebalanceRemoveLiquidityParam[],\n activeId: number,\n pairAddress: PublicKey,\n programId: PublicKey\n): {\n binArrayIndexes: BN[];\n binArrayBitmap: PublicKey;\n} {\n let indexMap: Map<number, boolean> = new Map();\n removes.forEach((value) => {\n let minBinId = value.minBinId;\n if (minBinId == null) {\n minBinId = activeId;\n }\n let maxBinId = value.maxBinId;\n if (maxBinId == null) {\n maxBinId = activeId;\n }\n let binArrayIndex = binIdToBinArrayIndex(new BN(minBinId));\n const upperBinId = new BN(maxBinId);\n while (true) {\n indexMap.set(binArrayIndex.toNumber(), true);\n const [binArrayLowerBinId, binArrayUpperBinId] =\n getBinArrayLowerUpperBinId(binArrayIndex);\n\n if (\n upperBinId.gte(binArrayLowerBinId) &&\n upperBinId.lte(binArrayUpperBinId)\n ) {\n break;\n } else {\n binArrayIndex = binArrayIndex.add(new BN(1));\n }\n }\n });\n\n adds.forEach((value) => {\n const minBinId = activeId + value.minDeltaId;\n const maxBinId = activeId + value.maxDeltaId;\n let binArrayIndex = binIdToBinArrayIndex(new BN(minBinId));\n const upperBinId = new BN(maxBinId);\n while (true) {\n indexMap.set(binArrayIndex.toNumber(), true);\n const [binArrayLowerBinId, binArrayUpperBinId] =\n getBinArrayLowerUpperBinId(binArrayIndex);\n\n if (\n upperBinId.gte(binArrayLowerBinId) &&\n upperBinId.lte(binArrayUpperBinId)\n ) {\n break;\n } else {\n binArrayIndex = binArrayIndex.add(new BN(1));\n }\n }\n });\n const binArrayIndexes = Array.from(indexMap.keys()).map((idx) => new BN(idx));\n\n const requireBitmapExtension = binArrayIndexes.some((index) =>\n isOverflowDefaultBinArrayBitmap(new BN(index))\n );\n\n return {\n binArrayIndexes,\n binArrayBitmap: requireBitmapExtension\n ? deriveBinArrayBitmapExtension(pairAddress, programId)[0]\n : programId,\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)\n .mul(new BN(binStep))\n .mul(new BN(10))\n .mul(new BN(10).pow(new BN(sParameter.baseFeePowerFactor)));\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 swapExactOutQuoteAtBin(\n bin: Bin,\n binStep: number,\n sParameter: sParameters,\n vParameter: vParameters,\n outAmount: 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 if (outAmount.gte(maxAmountOut)) {\n const maxFee = computeFee(binStep, sParameter, vParameter, maxAmountIn);\n const protocolFee = computeProtocolFee(maxFee, sParameter);\n return {\n amountIn: maxAmountIn,\n amountOut: maxAmountOut,\n fee: maxFee,\n protocolFee,\n };\n } else {\n const amountIn = getAmountIn(outAmount, bin.price, swapForY);\n const fee = computeFee(binStep, sParameter, vParameter, amountIn);\n const protocolFee = computeProtocolFee(fee, sParameter);\n return {\n amountIn,\n amountOut: outAmount,\n fee,\n protocolFee,\n };\n }\n}\n\nexport function swapExactInQuoteAtBin(\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\nfunction getAmountIn(amountOut: BN, price: BN, swapForY: Boolean): BN {\n if (swapForY) {\n return shlDiv(amountOut, price, SCALE_OFFSET, Rounding.Up);\n } else {\n return mulShr(amountOut, price, SCALE_OFFSET, Rounding.Up);\n }\n}\n","import BN from \"bn.js\";\nimport { StrategyType } from \"../../../types\";\nimport { BidAskStrategyParameterBuilder } from \"./bidAsk\";\nimport { CurveStrategyParameterBuilder } from \"./curve\";\nimport { SpotStrategyParameterBuilder } from \"./spot\";\nimport { RebalancePosition, toAmountIntoBins } from \"../rebalancePosition\";\nimport { getPriceOfBinByBinId } from \"../../weight\";\nimport Decimal from \"decimal.js\";\n\nexport interface LiquidityStrategyParameters {\n x0: BN;\n y0: BN;\n deltaX: BN;\n deltaY: BN;\n}\n\nexport interface BidAskParameters {\n base: BN;\n delta: BN;\n}\n\nexport interface LiquidityStrategyParameterBuilder {\n findXParameters(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n activeId: BN\n ): BidAskParameters;\n findYParameters(\n amountY: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n activeId: BN\n ): BidAskParameters;\n suggestBalancedXParametersFromY(\n activeId: BN,\n binStep: BN,\n favorXInActiveBin: boolean,\n minDeltaId: BN,\n maxDeltaId: BN,\n amountY: BN\n ): BidAskParameters & { amountX: BN };\n suggestBalancedYParametersFromX(\n activeId: BN,\n binStep: BN,\n favorXInActiveBin: boolean,\n minDeltaId: BN,\n maxDeltaId: BN,\n amountXInQuoteValue: BN\n ): BidAskParameters & { amountY: BN };\n}\n\nexport function getLiquidityStrategyParameterBuilder(\n strategyType: StrategyType\n): LiquidityStrategyParameterBuilder {\n switch (strategyType) {\n case StrategyType.Spot:\n return new SpotStrategyParameterBuilder();\n case StrategyType.Curve:\n return new CurveStrategyParameterBuilder();\n case StrategyType.BidAsk:\n return new BidAskStrategyParameterBuilder();\n default:\n throw new Error(\"Strategy not supported\");\n }\n}\n\nexport function suggestBalancedXParametersFromY(\n y0: BN,\n deltaY: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n activeId: BN,\n binStep: BN,\n favorXInActiveBin: boolean,\n builder: LiquidityStrategyParameterBuilder\n) {\n const endDeltaIdBidSide = favorXInActiveBin ? new BN(-1) : new BN(0);\n\n if (maxDeltaId.lte(endDeltaIdBidSide)) {\n return {\n base: new BN(0),\n delta: new BN(0),\n amountX: new BN(0),\n };\n }\n\n const minYDeltaId = minDeltaId;\n const maxYDeltaId = endDeltaIdBidSide;\n\n const totalAmountY = toAmountIntoBins(\n activeId,\n minYDeltaId,\n maxYDeltaId,\n new BN(0),\n deltaY,\n new BN(0),\n y0,\n binStep,\n favorXInActiveBin\n ).reduce((acc, bin) => {\n return acc.add(bin.amountY);\n }, new BN(0));\n\n const minXDeltaId = maxYDeltaId.addn(1);\n const maxXDeltaId = maxDeltaId;\n\n return builder.suggestBalancedXParametersFromY(\n activeId,\n binStep,\n favorXInActiveBin,\n minXDeltaId,\n maxXDeltaId,\n totalAmountY\n );\n}\n\nexport function getAutoFillAmountByRebalancedPosition(\n rebalancePosition: RebalancePosition,\n strategyType: StrategyType\n): {\n amount: BN;\n isBidSide: boolean;\n} {\n let liquidityInBidSide = new BN(0);\n let liquidityInAskSide = new BN(0);\n\n const builder = getLiquidityStrategyParameterBuilder(strategyType);\n const { lbPair } = rebalancePosition;\n let favorXInActiveBin = false;\n\n let activeIdIndex = -1;\n\n for (const [\n idx,\n binData,\n ] of rebalancePosition.rebalancePositionBinData.entries()) {\n const liquidityBid = binData.amountY;\n const liquidityAsk = new Decimal(binData.price)\n .mul(new Decimal(binData.amountX.toString()))\n .floor()\n .toString();\n\n liquidityInBidSide = liquidityInBidSide.add(liquidityBid);\n liquidityInAskSide = liquidityInAskSide.add(new BN(liquidityAsk));\n\n if (binData.binId == lbPair.activeId) {\n favorXInActiveBin = binData.amountX.gt(binData.amountY);\n activeIdIndex = idx;\n }\n }\n\n if (liquidityInAskSide.gt(liquidityInBidSide)) {\n const minBinId = rebalancePosition.rebalancePositionBinData[0].binId;\n let maxBinId: number;\n\n if (activeIdIndex == -1) {\n maxBinId =\n rebalancePosition.rebalancePositionBinData[\n rebalancePosition.rebalancePositionBinData.length - 1\n ].binId;\n } else {\n maxBinId =\n rebalancePosition.rebalancePositionBinData[\n favorXInActiveBin ? activeIdIndex - 1 : activeIdIndex\n ].binId;\n }\n\n const minDeltaId = minBinId - lbPair.activeId;\n const maxDeltaId = maxBinId - lbPair.activeId;\n\n const { amountY } = builder.suggestBalancedYParametersFromX(\n new BN(lbPair.activeId),\n new BN(lbPair.binStep),\n favorXInActiveBin,\n new BN(minDeltaId),\n new BN(maxDeltaId),\n liquidityInAskSide\n );\n\n const [_, positionAmountY] = rebalancePosition.totalAmounts();\n\n return {\n amount: BN.max(amountY.sub(positionAmountY), new BN(0)),\n isBidSide: true,\n };\n } else if (liquidityInAskSide.lt(liquidityInBidSide)) {\n const maxBinId =\n rebalancePosition.rebalancePositionBinData[\n rebalancePosition.rebalancePositionBinData.length - 1\n ].binId;\n\n let minBinId: number;\n if (activeIdIndex == -1) {\n minBinId = rebalancePosition.rebalancePositionBinData[0].binId;\n } else {\n minBinId =\n rebalancePosition.rebalancePositionBinData[\n favorXInActiveBin ? activeIdIndex - 1 : activeIdIndex\n ].binId;\n }\n\n const minDeltaId = minBinId - lbPair.activeId;\n const maxDeltaId = maxBinId - lbPair.activeId;\n\n const { amountX } = builder.suggestBalancedXParametersFromY(\n new BN(lbPair.activeId),\n new BN(lbPair.binStep),\n favorXInActiveBin,\n new BN(minDeltaId),\n new BN(maxDeltaId),\n liquidityInBidSide\n );\n\n const [positionAmountX] = rebalancePosition.totalAmounts();\n\n return {\n amount: BN.max(amountX.sub(positionAmountX), new BN(0)),\n isBidSide: false,\n };\n } else {\n return {\n amount: new BN(0),\n isBidSide: false,\n };\n }\n}\n\nexport function suggestBalancedYParametersFromX(\n x0: BN,\n deltaX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n activeId: BN,\n binStep: BN,\n favorXInActiveBin: boolean,\n builder: LiquidityStrategyParameterBuilder\n) {\n const startDeltaIdAskSide = favorXInActiveBin ? new BN(0) : new BN(1);\n\n if (minDeltaId.gte(startDeltaIdAskSide)) {\n return {\n base: new BN(0),\n delta: new BN(0),\n amountY: new BN(0),\n };\n }\n\n const minXDeltaId = startDeltaIdAskSide;\n const maxXDeltaId = maxDeltaId;\n\n const amountXInBins = toAmountIntoBins(\n activeId,\n minXDeltaId,\n maxXDeltaId,\n deltaX,\n new BN(0),\n x0,\n new BN(0),\n binStep,\n favorXInActiveBin\n );\n\n const totalAmountXInQuote = amountXInBins.reduce((acc, bin) => {\n const price = getPriceOfBinByBinId(\n bin.binId.toNumber(),\n binStep.toNumber()\n );\n return acc.add(price.mul(new Decimal(bin.amountX.toString())));\n }, new Decimal(0));\n\n const totalAmountXInQuoteBN = new BN(totalAmountXInQuote.floor().toString());\n\n const minYDeltaId = minDeltaId;\n const maxYDeltaId = startDeltaIdAskSide.subn(1);\n\n return builder.suggestBalancedYParametersFromX(\n activeId,\n binStep,\n favorXInActiveBin,\n minYDeltaId,\n maxYDeltaId,\n totalAmountXInQuoteBN\n );\n}\n\nexport function buildLiquidityStrategyParameters(\n amountX: BN,\n amountY: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n favorXInActiveId: boolean,\n activeId: BN,\n strategyParameterBuilder: LiquidityStrategyParameterBuilder\n): LiquidityStrategyParameters {\n if (minDeltaId.gt(maxDeltaId)) {\n return {\n x0: new BN(0),\n y0: new BN(0),\n deltaX: new BN(0),\n deltaY: new BN(0),\n };\n }\n\n const depositOnlyY =\n maxDeltaId.lt(new BN(0)) || (maxDeltaId.isZero() && !favorXInActiveId);\n\n const depositOnlyX =\n minDeltaId.gt(new BN(0)) || (minDeltaId.isZero() && favorXInActiveId);\n\n if (depositOnlyY) {\n const { base, delta } = strategyParameterBuilder.findYParameters(\n amountY,\n minDeltaId,\n maxDeltaId,\n activeId\n );\n return {\n x0: new BN(0),\n deltaX: new BN(0),\n y0: base,\n deltaY: delta,\n };\n }\n\n if (depositOnlyX) {\n const { base, delta } = strategyParameterBuilder.findXParameters(\n amountX,\n minDeltaId,\n maxDeltaId,\n binStep,\n activeId\n );\n return {\n x0: base,\n deltaX: delta,\n y0: new BN(0),\n deltaY: new BN(0),\n };\n }\n\n const maxDeltaIdBidSide = favorXInActiveId ? new BN(-1) : new BN(0);\n const minDeltaIdAskSide = favorXInActiveId ? new BN(0) : new BN(1);\n\n const { base: y0, delta: deltaY } = strategyParameterBuilder.findYParameters(\n amountY,\n minDeltaId,\n maxDeltaIdBidSide,\n activeId\n );\n\n const { base: x0, delta: deltaX } = strategyParameterBuilder.findXParameters(\n amountX,\n minDeltaIdAskSide,\n maxDeltaId,\n binStep,\n activeId\n );\n\n return {\n x0,\n deltaX,\n y0,\n deltaY,\n };\n}\n","import BN from \"bn.js\";\nimport { BidAskParameters, LiquidityStrategyParameterBuilder } from \".\";\nimport { SCALE_OFFSET } from \"../../../constants\";\nimport { getQPriceFromId } from \"../../math\";\nimport {\n getAmountInBinsAskSide,\n getAmountInBinsBidSide,\n toAmountIntoBins,\n} from \"../rebalancePosition\";\n\nfunction findMinY0(amountY: BN, minDeltaId: BN, maxDeltaId: BN) {\n const binCount = maxDeltaId.sub(minDeltaId).addn(1);\n const totalWeight = binCount.mul(binCount.addn(1)).divn(2);\n return amountY.div(totalWeight);\n}\n\nfunction findBaseDeltaY(amountY: BN, minDeltaId: BN, maxDeltaId: BN) {\n // min_delta_id = -m1, max_delta_id = -m2\n //\n // active_id - m2 = y0 + delta_y * m2\n // active_id - (m2 + 1) = y0 + delta_y * (m2-1)\n // ...\n // active_id - m1 = y0 + delta_y * m1\n //\n // sum(amounts) = y0 * (m1-m2+1) + delta_y * (m1 * (m1+1)/2 - m2 * (m2-1)/2)\n // ** default formula is, set y0 = -delta_y * m2, but we don't want last bin amount is 0\n // set y0 = -delta_y * (m2 - 1)\n // sum(amounts) = -delta_y * (m2 - 1) * (m1-m2+1) + delta_y * (m1 * (m1+1)/2 - m2 * (m2-1)/2)\n // A = (-m2 + 1) * (m1-m2+1) + (m1 * (m1+1)/2 - m2 * (m2-1)/2)\n // delta_y = sum(amounts) / A\n if (minDeltaId.gt(maxDeltaId) || amountY.lte(new BN(0))) {\n return new BN(0);\n }\n if (minDeltaId.eq(maxDeltaId)) {\n return amountY;\n }\n const m1 = minDeltaId.neg();\n const m2 = maxDeltaId.neg();\n // A = b + (c - d)\n // b = (-m2 + 1) * (m1-m2+1)\n // c = m1 * (m1+1)/2\n // d = m2 * (m2-1)/2\n const b = m2.neg().addn(1).mul(m1.sub(m2).addn(1));\n const c = m1.mul(m1.addn(1)).divn(2);\n const d = m2.mul(m2.subn(1)).divn(2);\n const a = b.add(c.sub(d));\n return amountY.div(a);\n}\n\nfunction findY0AndDeltaY(\n amountY: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n activeId: BN\n): BidAskParameters {\n if (minDeltaId.gt(maxDeltaId) || amountY.isZero()) {\n return {\n base: new BN(0),\n delta: new BN(0),\n };\n }\n\n let baseDeltaY = findBaseDeltaY(amountY, minDeltaId, maxDeltaId);\n const y0 = baseDeltaY.neg().mul(maxDeltaId.neg().subn(1));\n\n while (true) {\n const amountInBins = getAmountInBinsBidSide(\n activeId,\n minDeltaId,\n maxDeltaId,\n baseDeltaY,\n y0\n );\n\n const totalAmountY = amountInBins.reduce((acc, { amountY }) => {\n return acc.add(amountY);\n }, new BN(0));\n\n if (totalAmountY.gt(amountY)) {\n baseDeltaY = baseDeltaY.sub(new BN(1));\n } else {\n return {\n base: y0,\n delta: baseDeltaY,\n };\n }\n }\n}\n\nfunction findMinX0(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n activeId: BN,\n binStep: BN\n) {\n const minBinId = activeId.add(minDeltaId);\n const maxBinId = activeId.add(maxDeltaId);\n\n let totalWeight = new BN(0);\n\n for (let binId = minBinId.toNumber(); binId <= maxBinId.toNumber(); binId++) {\n const binDelta = binId - minBinId.toNumber() + 1;\n const binPrice = getQPriceFromId(new BN(binId), binStep);\n const weight = new BN(binDelta).mul(binPrice);\n totalWeight = totalWeight.add(weight);\n }\n\n return amountX.shln(SCALE_OFFSET).div(totalWeight);\n}\n\nfunction findBaseDeltaX(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n activeId: BN\n) {\n if (minDeltaId.gt(maxDeltaId) || amountX.lte(new BN(0))) {\n return new BN(0);\n }\n\n // min_delta_id = m1, max_delta_id = m2\n // pm = (1+b)^-(active_id + m)\n //\n // active_id + m1 = (x0 + m1 * delta_x) * p(m1)\n // active_id + m1 + 1 = (x0 + (m1 + 1) * delta_x) * p(m1+1)\n // ...\n // active_id + m2 = (x0 + m2 * delta_x) * p(m2)\n //\n // sum(amounts) = x0 * (p(m1)+..+p(m2)) + delta_x * (m1 * p(m1) + ... + m2 * p(m2))\n // set x0 = -m1 * delta_x\n\n // sum(amounts) = -m1 * delta_x * (p(m1)+..+p(m2)) + delta_x * (m1 * p(m1) + ... + m2 * p(m2))\n // A = -m1 * (p(m1)+..+p(m2)) + (m1 * p(m1) + ... + m2 * p(m2))\n // B = m1 * (p(m1)+..+p(m2))\n // C = (m1 * p(m1) + ... + m2 * p(m2))\n // delta_x = sum(amounts) / (C-B)\n let b = new BN(0);\n let c = new BN(0);\n let m1 = minDeltaId;\n // +1 ensure no 0 amount in active id\n let m2 = maxDeltaId.addn(1);\n\n for (let m = m1.toNumber(); m <= m2.toNumber(); m++) {\n const binId = activeId.addn(m);\n const pm = getQPriceFromId(binId.neg(), binStep);\n\n const bDelta = m1.mul(pm);\n b = b.add(bDelta);\n\n const cDelta = new BN(m).mul(pm);\n c = c.add(cDelta);\n }\n\n return amountX.shln(SCALE_OFFSET).div(c.sub(b));\n}\n\nfunction findX0AndDeltaX(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n activeId: BN\n) {\n if (minDeltaId.gt(maxDeltaId) || amountX.lte(new BN(0)) || amountX.isZero()) {\n return {\n base: new BN(0),\n delta: new BN(0),\n };\n }\n\n let baseDeltaX = findBaseDeltaX(\n amountX,\n minDeltaId,\n maxDeltaId,\n binStep,\n activeId\n );\n\n const x0 = minDeltaId.neg().mul(baseDeltaX).add(baseDeltaX);\n\n while (true) {\n const amountInBins = getAmountInBinsAskSide(\n activeId,\n binStep,\n minDeltaId,\n maxDeltaId,\n baseDeltaX,\n x0\n );\n\n const totalAmountX = amountInBins.reduce((acc, { amountX }) => {\n return acc.add(amountX);\n }, new BN(0));\n\n if (totalAmountX.gt(amountX)) {\n baseDeltaX = baseDeltaX.sub(new BN(1));\n } else {\n return {\n base: x0,\n delta: baseDeltaX,\n };\n }\n }\n}\n\nexport class BidAskStrategyParameterBuilder\n implements LiquidityStrategyParameterBuilder\n{\n findXParameters(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n activeId: BN\n ): BidAskParameters {\n return findX0AndDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId);\n }\n\n findYParameters(\n amountY: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n activeId: BN\n ): BidAskParameters {\n return findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId);\n }\n\n suggestBalancedXParametersFromY(\n activeId: BN,\n binStep: BN,\n favorXInActiveBin: boolean,\n minDeltaId: BN,\n maxDeltaId: BN,\n amountY: BN\n ): BidAskParameters & { amountX: BN } {\n // sum(amounts) = x0 * (p(m1)+..+p(m2)) + delta_x * (m1 * p(m1) + ... + m2 * p(m2))\n // default formula is, set x0 = -m1 * delta_x\n // set x0 = -m1 * delta_x + e where e = delta_x\n // Total quote = delta_x * (1 + 2 + ... + max_delta_id)\n // delta_x = total_quote / (1 + 2 + ... + max_delta_id)\n\n const deltaX = amountY.div(\n maxDeltaId.addn(1).mul(maxDeltaId.addn(2)).divn(2)\n );\n\n const x0 = minDeltaId.neg().mul(deltaX).add(deltaX);\n\n const totalAmountX = toAmountIntoBins(\n activeId,\n minDeltaId,\n maxDeltaId,\n deltaX,\n new BN(0),\n x0,\n new BN(0),\n binStep,\n favorXInActiveBin\n ).reduce((acc, bin) => {\n return acc.add(bin.amountX);\n }, new BN(0));\n\n return {\n base: x0,\n delta: deltaX,\n amountX: totalAmountX,\n };\n }\n\n suggestBalancedYParametersFromX(\n activeId: BN,\n binStep: BN,\n favorXInActiveBin: boolean,\n minDeltaId: BN,\n maxDeltaId: BN,\n amountXInQuoteValue: BN\n ): BidAskParameters & { amountY: BN } {\n // set y0 = -delta_y * m2\n // sum(amounts) = -delta_y * m2 * (m1-m2+1) + delta_y * (m1 * (m1+1)/2 - m2 * (m2-1)/2)\n // A = -m2 * (m1-m2+1) + (m1 * (m1+1)/2 - m2 * (m2-1)/2)\n // delta_y = sum(amounts) / A\n\n // Total quote = sum(amounts) = x0 * (p(m1)+..+p(m2)) + delta_x * (m1 * p(m1) + ... + m2 * p(m2))\n // delta_y = sum(amounts) / A\n\n // extra sub 1 to ensure no zero amount\n const m1 = minDeltaId.neg().subn(1);\n const m2 = maxDeltaId.neg();\n\n const a1 = m2.neg().mul(m1.sub(m2).addn(1));\n const a2 = m1.mul(m1.addn(1)).divn(2);\n const a3 = m2.mul(m2.subn(1)).divn(2);\n\n const a = a1.add(a2.sub(a3));\n\n const deltaY = amountXInQuoteValue.div(a);\n const y0 = deltaY.neg().mul(m2).add(deltaY); // add the subtracted deltaY back to y0\n\n const amountY = toAmountIntoBins(\n activeId,\n minDeltaId,\n maxDeltaId,\n new BN(0),\n deltaY,\n new BN(0),\n y0,\n binStep,\n favorXInActiveBin\n ).reduce((acc, bin) => {\n return acc.add(bin.amountY);\n }, new BN(0));\n\n return {\n base: y0,\n delta: deltaY,\n amountY,\n };\n }\n}\n","import BN from \"bn.js\";\nimport { BidAskParameters, LiquidityStrategyParameterBuilder } from \".\";\nimport { SCALE_OFFSET } from \"../../../constants\";\nimport { getQPriceBaseFactor, getQPriceFromId } from \"../../math\";\nimport {\n getAmountInBinsAskSide,\n getAmountInBinsBidSide,\n toAmountIntoBins,\n} from \"../rebalancePosition\";\nimport { getPriceOfBinByBinId } from \"../../weight\";\nimport Decimal from \"decimal.js\";\n\nfunction findBaseY0(amountY: BN, minDeltaId: BN, maxDeltaId: BN) {\n // min_delta_id = -m1, max_delta_id = -m2\n //\n // active_id - m2 = y0 + delta_y * m2\n // active_id - (m2 + 1) = y0 + delta_y * (m2-1)\n // ...\n // active_id - m1 = y0 + delta_y * m1\n //\n // sum(amounts) = y0 * (m1-m2+1) + delta_y * (m1 * (m1+1)/2 - m2 * (m2-1)/2)\n // set delta_y = -y0 / m1\n // sum(amounts) = y0 * (m1-m2+1) - y0 * (m1 * (m1+1)/2 - m2 * (m2-1)/2) / m1\n // A = (m1-m2+1) - (m1 * (m1+1)/2 - m2 * (m2-1)/2) / m1\n // y0 = sum(amounts) / A\n if (minDeltaId.gt(maxDeltaId) || amountY.lte(new BN(0))) {\n return new BN(0);\n }\n\n if (minDeltaId.eq(maxDeltaId)) {\n return amountY;\n }\n\n const m1 = minDeltaId.neg();\n const m2 = maxDeltaId.neg();\n\n // A = b - (c - d) / m1\n // b = (m1-m2+1)\n // c = m1 * (m1+1)/2\n // d = m2 * (m2-1)/2\n\n // seems like if we set delta_y = -y0 / (m1 + 1) the amount will be closer to desired amount\n const b = m1.sub(m2).addn(1);\n const c = m1.mul(m1.addn(1)).divn(2);\n const d = m2.mul(m2.subn(1)).divn(2);\n\n const a = b.sub(c.sub(d).div(m1.addn(1)));\n return amountY.div(a);\n}\n\nfunction findY0AndDeltaY(\n amountY: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n activeId: BN\n): BidAskParameters {\n if (minDeltaId.gt(maxDeltaId) || amountY.isZero()) {\n return {\n base: new BN(0),\n delta: new BN(0),\n };\n }\n\n let baseY0 = findBaseY0(amountY, minDeltaId, maxDeltaId);\n\n while (true) {\n const deltaY = baseY0.neg().div(minDeltaId.neg().addn(1));\n\n const amountInBins = getAmountInBinsBidSide(\n activeId,\n minDeltaId,\n maxDeltaId,\n deltaY,\n baseY0\n );\n\n const totalAmountY = amountInBins.reduce((acc, { amountY }) => {\n return acc.add(amountY);\n }, new BN(0));\n\n if (totalAmountY.gt(amountY)) {\n baseY0 = baseY0.sub(new BN(1));\n } else {\n return {\n base: baseY0,\n delta: deltaY,\n };\n }\n }\n}\n\nfunction findBaseX0(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n activeId: BN\n) {\n if (minDeltaId.gt(maxDeltaId) || amountX.lte(new BN(0))) {\n return new BN(0);\n }\n\n // min_delta_id = m1, max_delta_id = m2\n // pm = (1+b)^-(active_id + m)\n //\n // active_id + m1 = (x0 + m1 * delta_x) * p(m1)\n // active_id + m1 + 1 = (x0 + (m1 + 1) * delta_x) * p(m1+1)\n // ...\n // active_id + m2 = (x0 + m2 * delta_x) * p(m2)\n //\n // sum(amounts) = x0 * (p(m1)+..+p(m2)) + delta_x * (m1 * p(m1) + ... + m2 * p(m2))\n // set delta_x = -x0 / m2\n\n // sum(amounts) = x0 * (p(m1)+..+p(m2)) - x0 * (m1 * p(m1) + ... + m2 * p(m2)) / m2\n // A = (p(m1)+..+p(m2)) - (m1 * p(m1) + ... + m2 * p(m2)) / m2\n // B = (p(m1)+..+p(m2))\n // C = (m1 * p(m1) + ... + m2 * p(m2)) / m2\n // x0 = sum(amounts) / (B-C)\n\n let b = new BN(0);\n let c = new BN(0);\n let m1 = minDeltaId;\n let m2 = maxDeltaId;\n\n for (let m = m1.toNumber(); m <= m2.toNumber(); m++) {\n const binId = activeId.addn(m);\n\n const pm = getQPriceFromId(binId.neg(), binStep);\n b = b.add(pm);\n\n const cDelta = new BN(m).mul(pm).div(m2);\n c = c.add(cDelta);\n }\n\n return amountX.shln(SCALE_OFFSET).div(b.sub(c));\n}\n\nfunction findX0AndDeltaX(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n activeId: BN\n) {\n if (minDeltaId.gt(maxDeltaId) || amountX.lte(new BN(0)) || amountX.isZero()) {\n return {\n base: new BN(0),\n delta: new BN(0),\n };\n }\n\n let baseX0 = findBaseX0(amountX, minDeltaId, maxDeltaId, binStep, activeId);\n const deltaX = baseX0.neg().div(maxDeltaId);\n\n while (true) {\n const amountInBins = getAmountInBinsAskSide(\n activeId,\n binStep,\n minDeltaId,\n maxDeltaId,\n deltaX,\n baseX0\n );\n\n const totalAmountX = amountInBins.reduce((acc, { amountX }) => {\n return acc.add(amountX);\n }, new BN(0));\n\n if (totalAmountX.gt(amountX)) {\n baseX0 = baseX0.sub(new BN(1));\n } else {\n return {\n base: baseX0,\n delta: deltaX,\n };\n }\n }\n}\n\nexport class CurveStrategyParameterBuilder\n implements LiquidityStrategyParameterBuilder\n{\n findXParameters(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n activeId: BN\n ): BidAskParameters {\n return findX0AndDeltaX(amountX, minDeltaId, maxDeltaId, binStep, activeId);\n }\n\n findYParameters(\n amountY: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n activeId: BN\n ): BidAskParameters {\n return findY0AndDeltaY(amountY, minDeltaId, maxDeltaId, activeId);\n }\n\n suggestBalancedXParametersFromY(\n activeId: BN,\n binStep: BN,\n favorXInActiveBin: boolean,\n minDeltaId: BN,\n maxDeltaId: BN,\n amountY: BN\n ): BidAskParameters & { amountX: BN } {\n // p(m) = (1+b)^-(active_id + m)\n // active_id = x0 * p(0)\n // active_id + 1= (x0 + delta_x) * p(1)\n // ...\n // active_id + max_delta_id = (x0 + max_delta_id * delta_x) * p(max_delta_id)\n // Total quote = x0 + (x0 + delta_x) + ... + (x0 + max_delta_id * delta_x)\n // = x0 * (max_delta_id + 1) + delta_x * (1+2+...+max_delta_id)\n //\n // set delta_x = -x0 / max_delta_id\n // Total quote = x0 * (max_delta_id + 1) - x0 * (1+2+...+max_delta_id) / max_delta_id = x0 * (max_delta_id + 1) / 2\n // x0 = total_amount_y * 2 / (max_delta_id + 1)\n\n const x0 = amountY.muln(2).div(maxDeltaId.addn(1));\n const deltaX = x0.neg().div(maxDeltaId);\n\n const totalAmountX = toAmountIntoBins(\n activeId,\n minDeltaId,\n maxDeltaId,\n deltaX,\n new BN(0),\n x0,\n new BN(0),\n binStep,\n favorXInActiveBin\n ).reduce((acc, bin) => {\n return acc.add(bin.amountX);\n }, new BN(0));\n\n return {\n base: x0,\n delta: deltaX,\n amountX: totalAmountX,\n };\n }\n\n suggestBalancedYParametersFromX(\n activeId: BN,\n binStep: BN,\n favorXInActiveBin: boolean,\n minDeltaId: BN,\n maxDeltaId: BN,\n amountXInQuoteValue: BN\n ): BidAskParameters & { amountY: BN } {\n // sum(amounts) = y0 * (m1-m2+1) + delta_y * (m1 * (m1+1)/2 - m2 * (m2-1)/2)\n // set delta_y = -y0 / m1\n // sum(amounts) = y0 * (m1-m2+1) - y0 * (m1 * (m1+1)/2 - m2 * (m2-1)/2) / m1\n // A = (m1-m2+1) - (m1 * (m1+1)/2 - m2 * (m2-1)/2) / m1\n // y0 = sum(amounts) / A\n //\n // pm = (1+b)(active_id + m)\n //\n // Total quote = sum(amounts) = x0 * (p(m1)+..+p(m2)) + delta_x * (m1 * p(m1) + ... + m2 * p(m2))\n // y0 = x0 * (p(m1)+..+p(m2)) + delta_x * (m1 * p(m1) + ... + m2 * p(m2)) / A\n\n const m1 = minDeltaId.neg();\n const m2 = maxDeltaId.neg();\n\n const a1 = m1.sub(m2).addn(1);\n const a2 = m1.mul(m1.addn(1)).divn(2);\n const a3 = m2.mul(m2.subn(1)).divn(2);\n\n const a = m1.sub(a3.sub(a2)).div(m1);\n\n const y0 = amountXInQuoteValue.div(a);\n const deltaY = y0.neg().div(m1);\n\n const amountY = toAmountIntoBins(\n activeId,\n minDeltaId,\n maxDeltaId,\n new BN(0),\n deltaY,\n new BN(0),\n y0,\n binStep,\n favorXInActiveBin\n ).reduce((acc, bin) => {\n return acc.add(bin.amountY);\n }, new BN(0));\n\n return {\n base: y0,\n delta: deltaY,\n amountY,\n };\n }\n}\n","import BN from \"bn.js\";\nimport Decimal from \"decimal.js\";\nimport { BidAskParameters, LiquidityStrategyParameterBuilder } from \".\";\nimport { SCALE_OFFSET } from \"../../../constants\";\nimport { getQPriceBaseFactor, getQPriceFromId } from \"../../math\";\nimport { getPriceOfBinByBinId } from \"../../weight\";\nimport { getAmountInBinsAskSide, toAmountIntoBins } from \"../rebalancePosition\";\n\nfunction findY0(amountY: BN, minDeltaId: BN, maxDeltaId: BN) {\n if (minDeltaId.gt(maxDeltaId) || amountY.lte(new BN(0)) || amountY.isZero()) {\n return new BN(0);\n }\n\n // min_delta_id = -m1, max_delta_id = -m2\n //\n // active_id - m2 = y0 + delta_y * m2\n // active_id - (m2 + 1) = y0 + delta_y * (m2-1)\n // ...\n // active_id - m1 = y0 + delta_y * m1\n //\n // sum(amounts) = y0 * (m1-m2+1) + delta_y * (m1 * (m1+1)/2 - m2 * (m2-1)/2)\n // set delta_y = 0\n // sum(amounts) = y0 * (m1-m2+1)\n // A = (m1-m2+1)\n // y0 = sum(amounts) / A\n\n const m1 = minDeltaId.neg();\n const m2 = maxDeltaId.neg();\n\n const delta = m1.sub(m2).addn(1);\n return amountY.div(delta);\n}\n\nfunction findBaseX0(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n activeId: BN\n) {\n // min_delta_id = m1, max_delta_id = m2\n // pm = (1+b)^-(active_id + m)\n //\n // active_id + m1 = (x0 + m1 * delta_x) * p(m1)\n // active_id + m1 + 1 = (x0 + (m1 + 1) * delta_x) * p(m1+1)\n // ...\n // active_id + m2 = (x0 + m2 * delta_x) * p(m2)\n //\n // sum(amounts) = x0 * (p(m1)+..+p(m2)) + delta_x * (m1 * p(m1) + ... + m2 * p(m2))\n // set delta_x = 0\n\n // sum(amounts) = x0 * (p(m1)+..+p(m2))\n // B = p(m1)+..+p(m2)\n // x0 = sum(amounts) / B\n\n let totalWeight = new BN(0);\n\n const minBinId = activeId.add(minDeltaId);\n const maxBinId = activeId.add(maxDeltaId);\n\n let baseFactor = getQPriceBaseFactor(binStep);\n let basePrice = getQPriceFromId(maxBinId.neg(), binStep);\n\n for (let binId = minBinId.toNumber(); binId <= maxBinId.toNumber(); binId++) {\n totalWeight = totalWeight.add(basePrice);\n basePrice = basePrice.mul(baseFactor).shrn(SCALE_OFFSET);\n }\n\n return amountX.shln(SCALE_OFFSET).div(totalWeight);\n}\n\nfunction findX0(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n activeId: BN\n) {\n if (minDeltaId.gt(maxDeltaId) || amountX.lte(new BN(0)) || amountX.isZero()) {\n return new BN(0);\n }\n let x0 = findBaseX0(amountX, minDeltaId, maxDeltaId, binStep, activeId);\n\n while (true) {\n const amountInBins = getAmountInBinsAskSide(\n activeId,\n binStep,\n minDeltaId,\n maxDeltaId,\n new BN(0),\n x0\n );\n\n const totalAmountX = amountInBins.reduce((acc, bin) => {\n return acc.add(bin.amountX);\n }, new BN(0));\n\n if (totalAmountX.lt(amountX)) {\n x0 = x0.add(new BN(1));\n } else {\n x0 = x0.sub(new BN(1));\n return x0;\n }\n }\n}\n\nexport class SpotStrategyParameterBuilder\n implements LiquidityStrategyParameterBuilder\n{\n findXParameters(\n amountX: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n binStep: BN,\n activeId: BN\n ): BidAskParameters {\n return {\n base: findX0(amountX, minDeltaId, maxDeltaId, binStep, activeId),\n delta: new BN(0),\n };\n }\n\n findYParameters(\n amountY: BN,\n minDeltaId: BN,\n maxDeltaId: BN,\n _activeId: BN\n ): BidAskParameters {\n return {\n base: findY0(amountY, minDeltaId, maxDeltaId),\n delta: new BN(0),\n };\n }\n\n suggestBalancedXParametersFromY(\n activeId: BN,\n binStep: BN,\n favorXInActiveBin: boolean,\n minDeltaId: BN,\n maxDeltaId: BN,\n amountY: BN\n ): BidAskParameters & { amountX: BN } {\n // pm = (1+b)^-(active_id + m)\n //\n // sum(amounts) = x0 * (p(m1)+..+p(m2)) + delta_x * (m1 * p(m1) + ... + m2 * p(m2))\n // set delta_x = 0\n // Total quote = x0 * (max_delta_id + 1) = total_amount_y\n // x0 = total_amount_y / (max_delta_id + 1)\n\n const x0 = amountY.div(maxDeltaId.addn(1));\n\n const totalAmountX = toAmountIntoBins(\n activeId,\n minDeltaId,\n maxDeltaId,\n new BN(0),\n new BN(0),\n x0,\n new BN(0),\n binStep,\n favorXInActiveBin\n ).reduce((acc, bin) => {\n return acc.add(bin.amountX);\n }, new BN(0));\n\n return {\n base: new BN(x0.toString()),\n delta: new BN(0),\n amountX: totalAmountX,\n };\n }\n\n suggestBalancedYParametersFromX(\n activeId: BN,\n binStep: BN,\n favorXInActiveBin: boolean,\n minDeltaId: BN,\n maxDeltaId: BN,\n amountXInQuoteValue: BN\n ): BidAskParameters & { amountY: BN } {\n // sum(amounts) = y0 * (m1-m2+1) + delta_y * (m1 * (m1+1)/2 - m2 * (m2-1)/2)\n // set delta_y = 0\n // sum(amounts) = y0 * (m1-m2+1)\n //\n // pm = (1+b)^(active_id + m)\n //\n // Total quote = sum(amounts) = x0 * (p(m1)+..+p(m2)) + delta_x * (m1 * p(m1) + ... + m2 * p(m2))\n // y0 = sum(amounts) / (m1-m2+1)\n\n const y0 = amountXInQuoteValue.div(maxDeltaId.sub(minDeltaId).addn(1));\n\n const amountY = toAmountIntoBins(\n activeId,\n minDeltaId,\n maxDeltaId,\n new BN(0),\n new BN(0),\n new BN(0),\n y0,\n binStep,\n favorXInActiveBin\n ).reduce((acc, bin) => {\n return acc.add(bin.amountY);\n }, new BN(0));\n\n return {\n base: y0,\n delta: new BN(0),\n amountY,\n };\n }\n}\n","import { AnchorProvider, Program } from \"@coral-xyz/anchor\";\nimport { Cluster, Connection, PublicKey } from \"@solana/web3.js\";\nimport { LBCLMM_PROGRAM_IDS } from \"../constants\";\nimport { LbPair } from \"../types\";\nimport { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from \"@solana/spl-token\";\nimport { createProgram } from \".\";\n\n/**\n * It fetches the pool account from the AMM program, and returns the mint addresses for the two tokens\n * @param {Connection} connection - Connection - The connection to the Solana cluster\n * @param {string} poolAddress - The address of the pool account.\n * @returns The tokenAMint and tokenBMint addresses for the pool.\n */\nexport async function getTokensMintFromPoolAddress(\n connection: Connection,\n poolAddress: string,\n opt?: {\n cluster?: Cluster;\n programId?: PublicKey;\n }\n) {\n const program = createProgram(connection, opt);\n\n const poolAccount = await program.account.lbPair.fetchNullable(\n new PublicKey(poolAddress)\n );\n\n if (!poolAccount) throw new Error(\"Pool account not found\");\n\n return {\n tokenXMint: poolAccount.tokenXMint,\n tokenYMint: poolAccount.tokenYMint,\n };\n}\n\nexport function getTokenProgramId(lbPairState: LbPair) {\n const getTokenProgramIdByFlag = (flag: number) => {\n return flag == 0 ? TOKEN_PROGRAM_ID : TOKEN_2022_PROGRAM_ID;\n };\n return {\n tokenXProgram: getTokenProgramIdByFlag(lbPairState.tokenMintXProgramFlag),\n tokenYProgram: getTokenProgramIdByFlag(lbPairState.tokenMintYProgramFlag),\n };\n}\n","import { BN } from \"@coral-xyz/anchor\";\nimport { Mint } from \"@solana/spl-token\";\nimport {\n Clock,\n ProgramStrategyParameter,\n StrategyParameters,\n StrategyType,\n} from \"../types\";\nimport {\n autoFillXByWeight,\n autoFillYByWeight,\n toAmountAskSide,\n toAmountBidSide,\n toAmountBothSide,\n} from \"./weightToAmounts\";\n\nconst DEFAULT_MAX_WEIGHT = 2000;\nconst DEFAULT_MIN_WEIGHT = 200;\n\nfunction toWeightSpotBalanced(\n minBinId: number,\n maxBinId: number\n): {\n binId: number;\n weight: number;\n}[] {\n let distributions = [];\n for (let i = minBinId; i <= maxBinId; i++) {\n distributions.push({\n binId: i,\n weight: 1,\n });\n }\n return distributions;\n}\n\nfunction toWeightDescendingOrder(\n minBinId: number,\n maxBinId: number\n): {\n binId: number;\n weight: number;\n}[] {\n let distributions = [];\n for (let i = minBinId; i <= maxBinId; i++) {\n distributions.push({\n binId: i,\n weight: maxBinId - i + 1,\n });\n }\n return distributions;\n}\n\nfunction toWeightAscendingOrder(\n minBinId: number,\n maxBinId: number\n): {\n binId: number;\n weight: number;\n}[] {\n let distributions = [];\n for (let i = minBinId; i <= maxBinId; i++) {\n distributions.push({\n binId: i,\n weight: i - minBinId + 1,\n });\n }\n return distributions;\n}\n\nfunction toWeightCurve(\n minBinId: number,\n maxBinId: number,\n activeId: number\n): {\n binId: number;\n weight: number;\n}[] {\n if (activeId < minBinId || activeId > maxBinId) {\n throw \"Invalid strategy params\";\n }\n let maxWeight = DEFAULT_MAX_WEIGHT;\n let minWeight = DEFAULT_MIN_WEIGHT;\n\n let diffWeight = maxWeight - minWeight;\n let diffMinWeight =\n activeId > minBinId ? Math.floor(diffWeight / (activeId - minBinId)) : 0;\n let diffMaxWeight =\n maxBinId > activeId ? Math.floor(diffWeight / (maxBinId - activeId)) : 0;\n\n let distributions = [];\n for (let i = minBinId; i <= maxBinId; i++) {\n if (i < activeId) {\n distributions.push({\n binId: i,\n weight: maxWeight - (activeId - i) * diffMinWeight,\n });\n } else if (i > activeId) {\n distributions.push({\n binId: i,\n weight: maxWeight - (i - activeId) * diffMaxWeight,\n });\n } else {\n distributions.push({\n binId: i,\n weight: maxWeight,\n });\n }\n }\n return distributions;\n}\n\nfunction toWeightBidAsk(\n minBinId: number,\n maxBinId: number,\n activeId: number\n): {\n binId: number;\n weight: number;\n}[] {\n if (activeId < minBinId || activeId > maxBinId) {\n throw \"Invalid strategy params\";\n }\n let maxWeight = DEFAULT_MAX_WEIGHT;\n let minWeight = DEFAULT_MIN_WEIGHT;\n\n let diffWeight = maxWeight - minWeight;\n let diffMinWeight =\n activeId > minBinId ? Math.floor(diffWeight / (activeId - minBinId)) : 0;\n let diffMaxWeight =\n maxBinId > activeId ? Math.floor(diffWeight / (maxBinId - activeId)) : 0;\n\n let distributions = [];\n for (let i = minBinId; i <= maxBinId; i++) {\n if (i < activeId) {\n distributions.push({\n binId: i,\n weight: minWeight + (activeId - i) * diffMinWeight,\n });\n } else if (i > activeId) {\n distributions.push({\n binId: i,\n weight: minWeight + (i - activeId) * diffMaxWeight,\n });\n } else {\n distributions.push({\n binId: i,\n weight: minWeight,\n });\n }\n }\n return distributions;\n}\n\n/**\n * Given a strategy type and amounts of X and Y, returns the distribution of liquidity.\n * @param activeId The bin id of the active bin.\n * @param binStep The step size of each bin.\n * @param minBinId The min bin id.\n * @param maxBinId The max bin id.\n * @param amountX The amount of X token to deposit.\n * @param amountY The amount of Y token to deposit.\n * @param amountXInActiveBin The amount of X token in the active bin.\n * @param amountYInActiveBin The amount of Y token in the active bin.\n * @param strategyType The strategy type.\n * @param mintX The mint info of X token. Get from DLMM instance.\n * @param mintY The mint info of Y token. Get from DLMM instance.\n * @param clock The clock info. Get from DLMM instance.\n * @returns The distribution of liquidity.\n */\nexport function toAmountsBothSideByStrategy(\n activeId: number,\n binStep: number,\n minBinId: number,\n maxBinId: number,\n amountX: BN,\n amountY: BN,\n amountXInActiveBin: BN,\n amountYInActiveBin: BN,\n strategyType: StrategyType,\n mintX: Mint,\n mintY: Mint,\n clock: Clock\n): {\n binId: number;\n amountX: BN;\n amountY: BN;\n}[] {\n const isSingleSideX = amountY.isZero();\n switch (strategyType) {\n case StrategyType.Spot: {\n if (activeId < minBinId || activeId > maxBinId) {\n const weights = toWeightSpotBalanced(minBinId, maxBinId);\n return toAmountBothSide(\n activeId,\n binStep,\n amountX,\n amountY,\n amountXInActiveBin,\n amountYInActiveBin,\n weights,\n mintX,\n mintY,\n clock\n );\n }\n const amountsInBin = [];\n if (!isSingleSideX) {\n if (minBinId <= activeId) {\n const weights = toWeightSpotBalanced(minBinId, activeId);\n const amounts = toAmountBidSide(\n activeId,\n amountY,\n weights,\n mintY,\n clock\n );\n\n for (let bin of amounts) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: new BN(0),\n amountY: bin.amount,\n });\n }\n }\n if (activeId < maxBinId) {\n const weights = toWeightSpotBalanced(activeId + 1, maxBinId);\n const amounts = toAmountAskSide(\n activeId,\n binStep,\n amountX,\n weights,\n mintX,\n clock\n );\n for (let bin of amounts) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: bin.amount,\n amountY: new BN(0),\n });\n }\n }\n } else {\n if (minBinId < activeId) {\n const weights = toWeightSpotBalanced(minBinId, activeId - 1);\n const amountsIntoBidSide = toAmountBidSide(\n activeId,\n amountY,\n weights,\n mintY,\n clock\n );\n for (let bin of amountsIntoBidSide) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: new BN(0),\n amountY: bin.amount,\n });\n }\n }\n if (activeId <= maxBinId) {\n const weights = toWeightSpotBalanced(activeId, maxBinId);\n const amountsIntoAskSide = toAmountAskSide(\n activeId,\n binStep,\n amountX,\n weights,\n mintX,\n clock\n );\n for (let bin of amountsIntoAskSide) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: bin.amount,\n amountY: new BN(0),\n });\n }\n }\n }\n return amountsInBin;\n }\n case StrategyType.Curve: {\n // ask side\n if (activeId < minBinId) {\n let weights = toWeightDescendingOrder(minBinId, maxBinId);\n return toAmountBothSide(\n activeId,\n binStep,\n amountX,\n amountY,\n amountXInActiveBin,\n amountYInActiveBin,\n weights,\n mintX,\n mintY,\n clock\n );\n }\n // bid side\n if (activeId > maxBinId) {\n const weights = toWeightAscendingOrder(minBinId, maxBinId);\n return toAmountBothSide(\n activeId,\n binStep,\n amountX,\n amountY,\n amountXInActiveBin,\n amountYInActiveBin,\n weights,\n mintX,\n mintY,\n clock\n );\n }\n const amountsInBin = [];\n if (!isSingleSideX) {\n if (minBinId <= activeId) {\n const weights = toWeightAscendingOrder(minBinId, activeId);\n const amounts = toAmountBidSide(\n activeId,\n amountY,\n weights,\n mintY,\n clock\n );\n\n for (let bin of amounts) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: new BN(0),\n amountY: bin.amount,\n });\n }\n }\n if (activeId < maxBinId) {\n const weights = toWeightDescendingOrder(activeId + 1, maxBinId);\n const amounts = toAmountAskSide(\n activeId,\n binStep,\n amountX,\n weights,\n mintX,\n clock\n );\n for (let bin of amounts) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: bin.amount,\n amountY: new BN(0),\n });\n }\n }\n } else {\n if (minBinId < activeId) {\n const weights = toWeightAscendingOrder(minBinId, activeId - 1);\n const amountsIntoBidSide = toAmountBidSide(\n activeId,\n amountY,\n weights,\n mintY,\n clock\n );\n for (let bin of amountsIntoBidSide) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: new BN(0),\n amountY: bin.amount,\n });\n }\n }\n if (activeId <= maxBinId) {\n const weights = toWeightDescendingOrder(activeId, maxBinId);\n const amountsIntoAskSide = toAmountAskSide(\n activeId,\n binStep,\n amountX,\n weights,\n mintX,\n clock\n );\n for (let bin of amountsIntoAskSide) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: bin.amount,\n amountY: new BN(0),\n });\n }\n }\n }\n return amountsInBin;\n }\n case StrategyType.BidAsk: {\n // ask side\n if (activeId < minBinId) {\n const weights = toWeightAscendingOrder(minBinId, maxBinId);\n return toAmountBothSide(\n activeId,\n binStep,\n amountX,\n amountY,\n amountXInActiveBin,\n amountYInActiveBin,\n weights,\n mintX,\n mintY,\n clock\n );\n }\n // bid side\n if (activeId > maxBinId) {\n const weights = toWeightDescendingOrder(minBinId, maxBinId);\n return toAmountBothSide(\n activeId,\n binStep,\n amountX,\n amountY,\n amountXInActiveBin,\n amountYInActiveBin,\n weights,\n mintX,\n mintY,\n clock\n );\n }\n const amountsInBin = [];\n if (!isSingleSideX) {\n if (minBinId <= activeId) {\n const weights = toWeightDescendingOrder(minBinId, activeId);\n const amounts = toAmountBidSide(\n activeId,\n amountY,\n weights,\n mintY,\n clock\n );\n\n for (let bin of amounts) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: new BN(0),\n amountY: bin.amount,\n });\n }\n }\n if (activeId < maxBinId) {\n const weights = toWeightAscendingOrder(activeId + 1, maxBinId);\n const amounts = toAmountAskSide(\n activeId,\n binStep,\n amountX,\n weights,\n mintX,\n clock\n );\n for (let bin of amounts) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: bin.amount,\n amountY: new BN(0),\n });\n }\n }\n } else {\n if (minBinId < activeId) {\n const weights = toWeightDescendingOrder(minBinId, activeId - 1);\n const amountsIntoBidSide = toAmountBidSide(\n activeId,\n amountY,\n weights,\n mintY,\n clock\n );\n for (let bin of amountsIntoBidSide) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: new BN(0),\n amountY: bin.amount,\n });\n }\n }\n if (activeId <= maxBinId) {\n const weights = toWeightAscendingOrder(activeId, maxBinId);\n const amountsIntoAskSide = toAmountAskSide(\n activeId,\n binStep,\n amountX,\n weights,\n mintX,\n clock\n );\n for (let bin of amountsIntoAskSide) {\n amountsInBin.push({\n binId: bin.binId,\n amountX: bin.amount,\n amountY: new BN(0),\n });\n }\n }\n }\n return amountsInBin;\n }\n }\n}\n\n// only apply for\nexport function autoFillYByStrategy(\n activeId: number,\n binStep: number,\n amountX: BN,\n amountXInActiveBin: BN,\n amountYInActiveBin: BN,\n minBinId: number,\n maxBinId: number,\n strategyType: StrategyType\n): BN {\n switch (strategyType) {\n case StrategyType.Spot: {\n let weights = toWeightSpotBalanced(minBinId, maxBinId);\n return autoFillYByWeight(\n activeId,\n binStep,\n amountX,\n amountXInActiveBin,\n amountYInActiveBin,\n weights\n );\n }\n case StrategyType.Curve: {\n let weights = toWeightCurve(minBinId, maxBinId, activeId);\n return autoFillYByWeight(\n activeId,\n binStep,\n amountX,\n amountXInActiveBin,\n amountYInActiveBin,\n weights\n );\n }\n case StrategyType.BidAsk: {\n let weights = toWeightBidAsk(minBinId, maxBinId, activeId);\n return autoFillYByWeight(\n activeId,\n binStep,\n amountX,\n amountXInActiveBin,\n amountYInActiveBin,\n weights\n );\n }\n }\n}\n\n// only apply for balanced deposit\nexport function autoFillXByStrategy(\n activeId: number,\n binStep: number,\n amountY: BN,\n amountXInActiveBin: BN,\n amountYInActiveBin: BN,\n minBinId: number,\n maxBinId: number,\n strategyType: StrategyType\n): BN {\n switch (strategyType) {\n case StrategyType.Spot: {\n let weights = toWeightSpotBalanced(minBinId, maxBinId);\n return autoFillXByWeight(\n activeId,\n binStep,\n amountY,\n amountXInActiveBin,\n amountYInActiveBin,\n weights\n );\n }\n case StrategyType.Curve: {\n let weights = toWeightCurve(minBinId, maxBinId, activeId);\n return autoFillXByWeight(\n activeId,\n binStep,\n amountY,\n amountXInActiveBin,\n amountYInActiveBin,\n weights\n );\n }\n case StrategyType.BidAsk: {\n let weights = toWeightBidAsk(minBinId, maxBinId, activeId);\n return autoFillXByWeight(\n activeId,\n binStep,\n amountY,\n amountXInActiveBin,\n amountYInActiveBin,\n weights\n );\n }\n }\n}\n\nexport function toStrategyParameters({\n maxBinId,\n minBinId,\n strategyType,\n singleSidedX,\n}: StrategyParameters): ProgramStrategyParameter {\n // Favor ask = 1\n const parameteres = new Array<number>(64).fill(0);\n const favorSide = singleSidedX ? 1 : 0;\n parameteres[0] = favorSide;\n\n switch (strategyType) {\n case StrategyType.Spot: {\n return {\n minBinId,\n maxBinId,\n strategyType: { spotImBalanced: {} },\n parameteres,\n };\n }\n case StrategyType.Curve: {\n return {\n minBinId,\n maxBinId,\n strategyType: { curveImBalanced: {} },\n parameteres,\n };\n }\n case StrategyType.BidAsk: {\n return {\n minBinId,\n maxBinId,\n strategyType: { bidAskImBalanced: {} },\n parameteres,\n };\n }\n }\n}\n","import { GetProgramAccountsFilter, PublicKey } from \"@solana/web3.js\";\nimport { bs58 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\nimport BN from \"bn.js\";\nimport { getAccountDiscriminator } from \".\";\n\nexport const presetParameter2BinStepFilter = (\n binStep: BN\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: bs58.encode(binStep.toArrayLike(Buffer, \"le\", 2)),\n offset: 8,\n },\n };\n};\n\nexport const presetParameter2BaseFactorFilter = (\n baseFactor: BN\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: bs58.encode(baseFactor.toArrayLike(Buffer, \"le\", 2)),\n offset: 8 + 2,\n },\n };\n};\n\nexport const presetParameter2BaseFeePowerFactor = (\n baseFeePowerFactor: BN\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: bs58.encode(baseFeePowerFactor.toArrayLike(Buffer, \"le\", 1)),\n offset: 8 + 22,\n },\n };\n};\n\nexport const binArrayLbPairFilter = (\n lbPair: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: lbPair.toBase58(),\n offset: 8 + 16,\n },\n };\n};\n\nexport const positionOwnerFilter = (\n owner: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: owner.toBase58(),\n offset: 8 + 32,\n },\n };\n};\n\nexport const positionLbPairFilter = (\n lbPair: PublicKey\n): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: bs58.encode(lbPair.toBuffer()),\n offset: 8,\n },\n };\n};\n\nexport const positionV2Filter = (): GetProgramAccountsFilter => {\n return {\n memcmp: {\n bytes: bs58.encode(Buffer.from(getAccountDiscriminator(\"positionV2\"))),\n offset: 0,\n },\n };\n};\n","import BN from \"bn.js\";\nimport {\n capBps,\n MAX_BPS,\n RebalanceDepositWithdrawParameters,\n RebalanceStrategyBuilder,\n} from \".\";\nimport { PositionData, StrategyType } from \"../../../types\";\nimport {\n buildLiquidityStrategyParameters,\n getLiquidityStrategyParameterBuilder,\n} from \"../liquidity_strategy\";\nimport {\n RebalanceWithDeposit,\n RebalanceWithWithdraw,\n} from \"../rebalancePosition\";\n\nexport class BalancedStrategyBuilder implements RebalanceStrategyBuilder {\n constructor(\n public activeId: BN,\n public binStep: BN,\n public positionData: PositionData,\n public topUpAmountX: BN,\n public topUpAmountY: BN,\n public xWithdrawBps: BN,\n public yWithdrawBps: BN,\n public strategy: StrategyType,\n public favorXIfImbalance: boolean = false,\n public favorXInActiveBin: boolean = false\n ) {}\n\n // Rebalance to active bin by withdrawing all liquidities and redeposit portion of withdrawn liquidity, together with topup amount\n buildRebalanceStrategyParameters(): RebalanceDepositWithdrawParameters {\n const xWithdrawBps = capBps(this.xWithdrawBps);\n const yWithdrawBps = capBps(this.yWithdrawBps);\n\n let totalXAmountOut = new BN(this.positionData.totalXAmount);\n let totalYAmountOut = new BN(this.positionData.totalYAmount);\n\n totalXAmountOut = totalXAmountOut.add(new BN(this.positionData.feeX));\n totalYAmountOut = totalYAmountOut.add(new BN(this.positionData.feeY));\n\n const redepositAmountX = totalXAmountOut\n .mul(MAX_BPS.sub(xWithdrawBps))\n .div(MAX_BPS);\n const redepositAmountY = totalYAmountOut\n .mul(MAX_BPS.sub(yWithdrawBps))\n .div(MAX_BPS);\n\n const depositAmountX = this.topUpAmountX.add(redepositAmountX);\n const depositAmountY = this.topUpAmountY.add(redepositAmountY);\n\n const width =\n this.positionData.upperBinId - this.positionData.lowerBinId + 1;\n const binPerSide = Math.floor(width / 2);\n const rem = width % 2;\n\n let binPerAsk = binPerSide;\n let binPerBid = binPerSide;\n\n if (rem == 0) {\n if (this.favorXIfImbalance) {\n binPerAsk += 1;\n binPerBid -= 1;\n } else {\n binPerAsk -= 1;\n binPerBid += 1;\n }\n }\n\n const minDeltaId = new BN(binPerBid).neg();\n const maxDeltaId = new BN(binPerAsk);\n\n const strategyParameters = buildLiquidityStrategyParameters(\n depositAmountX,\n depositAmountY,\n minDeltaId,\n maxDeltaId,\n this.binStep,\n this.favorXInActiveBin,\n this.activeId,\n getLiquidityStrategyParameterBuilder(this.strategy)\n );\n\n const depositParam: RebalanceWithDeposit = {\n minDeltaId,\n maxDeltaId,\n x0: strategyParameters.x0,\n y0: strategyParameters.y0,\n deltaX: strategyParameters.deltaX,\n deltaY: strategyParameters.deltaY,\n favorXInActiveBin: this.favorXInActiveBin,\n };\n\n const withdrawParam: RebalanceWithWithdraw = {\n minBinId: new BN(this.positionData.lowerBinId),\n maxBinId: new BN(this.positionData.upperBinId),\n bps: MAX_BPS,\n };\n\n return {\n shouldClaimFee: true,\n shouldClaimReward: true,\n deposits: [depositParam],\n withdraws: [withdrawParam],\n };\n }\n}\n","import BN from \"bn.js\";\nimport { BASIS_POINT_MAX } from \"../../../constants\";\nimport {\n RebalanceWithDeposit,\n RebalanceWithWithdraw,\n} from \"../rebalancePosition\";\n\nexport interface RebalanceDepositWithdrawParameters {\n shouldClaimFee: boolean;\n shouldClaimReward: boolean;\n deposits: RebalanceWithDeposit[];\n withdraws: RebalanceWithWithdraw[];\n}\n\nexport interface RebalanceStrategyBuilder {\n buildRebalanceStrategyParameters(): RebalanceDepositWithdrawParameters;\n}\n\nexport const MAX_BPS = new BN(BASIS_POINT_MAX);\n\nexport function capBps(bps: BN) {\n return bps.lt(new BN(0))\n ? new BN(0)\n : bps.gt(MAX_BPS)\n ? new BN(MAX_BPS)\n : bps;\n}\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\";\nexport * from \"./dlmm/idl\";\nexport { default as IDL } from \"./dlmm/dlmm.json\";\nexport * from \"./dlmm/helpers/accountFilters\";\n"],"mappings":"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AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,KAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,MAAQ;AAAA,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","names":["BN","NATIVE_MINT","TOKEN_PROGRAM_ID","createAssociatedTokenAccountIdempotentInstruction","createTransferCheckedInstruction","getAssociatedTokenAddressSync","unpackMint","ComputeBudgetProgram","LAMPORTS_PER_SOL","PublicKey","SYSVAR_CLOCK_PUBKEY","SystemProgram","Decimal","Network","BN","Program","TOKEN_PROGRAM_ID","ComputeBudgetProgram","TransactionInstruction","BN","PublicKey","Decimal","PositionVersion","PairType","ShrinkMode","StrategyType","ActivationType","BinLiquidity","BN","BitmapType","PairStatus","ActionType","ResizeSide","BN","PublicKey","BN","Decimal","BN","BN","BN","Decimal","BN","Decimal","PublicKey","BN","Decimal","BN","Decimal","gaussian","BN","idx","BN","Decimal","PublicKey","PublicKey","BN","PublicKey","PublicKey","PublicKey","BN","BN","BN","BN","getBinArrayKeysCoverage","BN","Decimal","BN","BN","BN","sParameters","vParameters","Decimal","idx","BN","BN","BN","amountY","BN","amountX","BN","BN","findY0AndDeltaY","amountY","findX0AndDeltaX","amountX","BN","BN","findBaseX0","Decimal","BN","Decimal","PublicKey","TOKEN_2022_PROGRAM_ID","TOKEN_PROGRAM_ID","PublicKey","TOKEN_PROGRAM_ID","TOKEN_2022_PROGRAM_ID","BN","BN","TOKEN_PROGRAM_ID","TransactionInstruction","ComputeBudgetProgram","Program","Decimal","BN","BN","BN","BN","BN","account","SYSVAR_CLOCK_PUBKEY","unpackMint","PublicKey","offsetToTokenMint","Decimal","BN","getAssociatedTokenAddressSync","SystemProgram","TOKEN_PROGRAM_ID","sParameters","LAMPORTS_PER_SOL","NATIVE_MINT","createAssociatedTokenAccountIdempotentInstruction","binCount","addLiqIx","setCUIx","blockhash","lastValidBlockHeight","slices","transferHookAccounts","ComputeBudgetProgram","createTransferCheckedInstruction","i","toBinArrayPubkey","delta","lowerBinId"]}
|