@kamino-finance/kliquidity-sdk 6.2.0 → 6.2.2
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/Kamino.js +1 -1
- package/dist/Kamino.js.map +1 -1
- package/dist/kamino-client/accounts/WhirlpoolStrategy.d.ts +3 -0
- package/dist/kamino-client/accounts/WhirlpoolStrategy.js +6 -1
- package/dist/kamino-client/accounts/WhirlpoolStrategy.js.map +1 -1
- package/dist/kamino-client/idl.json +24 -1
- package/dist/kamino-client/instructions/index.d.ts +2 -0
- package/dist/kamino-client/instructions/index.js +3 -1
- package/dist/kamino-client/instructions/index.js.map +1 -1
- package/dist/kamino-client/instructions/updateStrategyAdmin.d.ts +6 -0
- package/dist/kamino-client/instructions/updateStrategyAdmin.js +16 -0
- package/dist/kamino-client/instructions/updateStrategyAdmin.js.map +1 -0
- package/dist/kamino-client/types/StrategyConfigOption.d.ts +13 -0
- package/dist/kamino-client/types/StrategyConfigOption.js +27 -1
- package/dist/kamino-client/types/StrategyConfigOption.js.map +1 -1
- package/dist/kamino-client/types/index.d.ts +2 -2
- package/dist/kamino-client/types/index.js.map +1 -1
- package/package.json +1 -1
package/dist/Kamino.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Kamino.js","sourceRoot":"","sources":["../src/Kamino.ts"],"names":[],"mappings":"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","sourcesContent":["import { getConfigByCluster, HubbleConfig, SolanaCluster } from '@hubbleprotocol/hubble-config';\nimport {\n AccountInfo,\n Connection,\n GetProgramAccountsFilter,\n PublicKey,\n SystemProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n TransactionInstruction,\n AddressLookupTableAccount,\n MessageV0,\n TransactionMessage,\n Keypair,\n AddressLookupTableProgram,\n Transaction,\n ParsedAccountData,\n} from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { setKaminoProgramId } from './kamino-client/programId';\nimport { GlobalConfig, TermsSignature, WhirlpoolStrategy, CollateralInfos } from './kamino-client/accounts';\nimport Decimal from 'decimal.js';\nimport {\n initializeTickArray,\n InitializeTickArrayAccounts,\n InitializeTickArrayArgs,\n Position,\n TickArray,\n Whirlpool,\n} from './whirlpools-client';\nimport {\n AddLiquidityQuote,\n AddLiquidityQuoteParam,\n defaultSlippagePercentage,\n getNearestValidTickIndexFromTickIndex,\n getNextValidTickIndex,\n getStartTickIndex,\n OrcaNetwork,\n OrcaWhirlpoolClient,\n Percentage,\n priceToTickIndex,\n sqrtPriceX64ToPrice,\n tickIndexToPrice,\n} from '@orca-so/whirlpool-sdk';\nimport { OrcaDAL } from '@orca-so/whirlpool-sdk/dist/dal/orca-dal';\nimport { OrcaPosition } from '@orca-so/whirlpool-sdk/dist/position/orca-position';\nimport {\n Data,\n getEmptyShareData,\n Holdings,\n KaminoPosition,\n KaminoStrategyWithShareMint,\n MintToPriceMap,\n ShareData,\n ShareDataWithAddress,\n StrategyBalances,\n StrategyBalanceWithAddress,\n StrategyHolder,\n StrategyProgramAddress,\n StrategyVaultTokens,\n StrategyWithPendingFees,\n TokenAmounts,\n TokenHoldings,\n TotalStrategyVaultTokens,\n TreasuryFeeVault,\n} from './models';\nimport { PROGRAM_ID_CLI as WHIRLPOOL_PROGRAM_ID, setWhirlpoolsProgramId } from './whirlpools-client/programId';\nimport { OraclePrices, Scope } from '@hubbleprotocol/scope-sdk';\nimport {\n batchFetch,\n collToLamportsDecimal,\n createAssociatedTokenAccountInstruction,\n DepositAmountsForSwap,\n Dex,\n dexToNumber,\n GenericPoolInfo,\n GenericPositionRangeInfo,\n getAssociatedTokenAddress,\n getAssociatedTokenAddressAndData,\n getDexProgramId,\n getReadOnlyWallet,\n buildStrategyRebalanceParams,\n getUpdateStrategyConfigIx,\n LiquidityDistribution,\n numberToRebalanceType,\n RebalanceFieldInfo,\n sendTransactionWithLogs,\n StrategiesFilters,\n strategyCreationStatusToBase58,\n strategyTypeToBase58,\n VaultParameters,\n ZERO,\n PositionRange,\n numberToDex,\n TokensBalances,\n isSOLMint,\n SwapperIxBuilder,\n lamportsToNumberDecimal,\n DECIMALS_SOL,\n InstructionsWithLookupTables,\n ProfiledFunctionExecution,\n noopProfiledFunctionExecution,\n MaybeTokensBalances,\n PerformanceFees,\n PriceReferenceType,\n InputRebalanceFieldInfo,\n getTickArray,\n rebalanceFieldsDictToInfo,\n InitStrategyIxs,\n WithdrawShares,\n MetadataProgramAddressesOrca,\n MetadataProgramAddressesRaydium,\n LowerAndUpperTickPubkeys,\n isVaultInitialized,\n WithdrawAllAndCloseIxns,\n InitPoolTickIfNeeded,\n numberToReferencePriceType,\n stripTwapZeros,\n getTokenNameFromCollateralInfo,\n keyOrDefault,\n getMintDecimals,\n} from './utils';\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, MintInfo, MintLayout, u64, Token } from '@solana/spl-token';\nimport {\n checkExpectedVaultsBalances,\n CheckExpectedVaultsBalancesAccounts,\n CheckExpectedVaultsBalancesArgs,\n closeStrategy,\n CloseStrategyAccounts,\n collectFeesAndRewards,\n CollectFeesAndRewardsAccounts,\n deposit,\n DepositAccounts,\n DepositArgs,\n executiveWithdraw,\n ExecutiveWithdrawAccounts,\n ExecutiveWithdrawArgs,\n initializeStrategy,\n InitializeStrategyAccounts,\n InitializeStrategyArgs,\n invest,\n InvestAccounts,\n openLiquidityPosition,\n OpenLiquidityPositionAccounts,\n OpenLiquidityPositionArgs,\n singleTokenDepositWithMin,\n SingleTokenDepositWithMinAccounts,\n SingleTokenDepositWithMinArgs,\n updateRewardMapping,\n UpdateRewardMappingAccounts,\n UpdateRewardMappingArgs,\n updateStrategyConfig,\n UpdateStrategyConfigAccounts,\n UpdateStrategyConfigArgs,\n withdraw,\n WithdrawAccounts,\n WithdrawArgs,\n withdrawFromTopup,\n WithdrawFromTopupAccounts,\n WithdrawFromTopupArgs,\n} from './kamino-client/instructions';\nimport BN from 'bn.js';\nimport StrategyWithAddress from './models/StrategyWithAddress';\nimport { Idl, Program, AnchorProvider } from '@coral-xyz/anchor';\nimport { Rebalancing, Uninitialized } from './kamino-client/types/StrategyStatus';\nimport { FRONTEND_KAMINO_STRATEGY_URL, METADATA_PROGRAM_ID, U64_MAX } from './constants';\nimport {\n CollateralInfo,\n ExecutiveWithdrawActionKind,\n RebalanceType,\n RebalanceTypeKind,\n ReferencePriceTypeKind,\n StrategyConfigOption,\n StrategyStatusKind,\n} from './kamino-client/types';\nimport { AmmConfig, PersonalPositionState, PoolState } from './raydium_client';\nimport { PROGRAM_ID as RAYDIUM_PROGRAM_ID, setRaydiumProgramId } from './raydium_client/programId';\nimport {\n getPdaProtocolPositionAddress,\n i32ToBytes,\n LiquidityMath,\n SqrtPriceMath,\n TickMath,\n TickUtils,\n} from '@raydium-io/raydium-sdk';\n\nimport KaminoIdl from './kamino-client/idl.json';\nimport { OrcaService, RaydiumService, Whirlpool as OrcaPool, WhirlpoolAprApy } from './services';\nimport {\n getAddLiquidityQuote,\n InternalAddLiquidityQuote,\n InternalAddLiquidityQuoteParam,\n} from '@orca-so/whirlpool-sdk/dist/position/quotes/add-liquidity';\nimport { signTerms, SignTermsAccounts, SignTermsArgs } from './kamino-client/instructions';\nimport { Pool } from './services/RaydiumPoolsResponse';\nimport {\n UpdateWithdrawFee,\n UpdateReward0Fee,\n UpdateReward1Fee,\n UpdateReward2Fee,\n UpdateCollectFeesFee,\n UpdateRebalanceType,\n UpdateLookupTable,\n UpdateReferencePriceType,\n} from './kamino-client/types/StrategyConfigOption';\nimport { DefaultPerformanceFeeBps } from './constants/DefaultStrategyConfig';\nimport {\n ADDRESS_LUT_PROGRAM_ID,\n CONSENSUS_ID,\n LUT_OWNER_KEY,\n STAGING_GLOBAL_CONFIG,\n STAGING_KAMINO_PROGRAM_ID,\n MEMO_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n} from './constants/pubkeys';\nimport {\n AutodriftMethod,\n DefaultDex,\n DefaultFeeTierOrca,\n DefaultMintTokenA,\n DefaultMintTokenB,\n DefaultTickSpacing,\n DriftRebalanceMethod,\n ExpanderMethod,\n FullBPS,\n FullPercentage,\n ManualRebalanceMethod,\n PeriodicRebalanceMethod,\n PricePercentageRebalanceMethod,\n PricePercentageWithResetRangeRebalanceMethod,\n RebalanceMethod,\n TakeProfitMethod,\n} from './utils/CreationParameters';\nimport { DOLAR_BASED, PROPORTION_BASED } from './constants/deposit_method';\nimport { JupService } from './services/JupService';\nimport {\n simulateManualPool,\n simulatePercentagePool,\n SimulationPercentagePoolParameters,\n} from './services/PoolSimulationService';\nimport {\n Expander,\n Manual,\n PricePercentage,\n PricePercentageWithReset,\n Drift,\n TakeProfit,\n PeriodicRebalance,\n Autodrift,\n} from './kamino-client/types/RebalanceType';\nimport {\n checkIfAccountExists,\n createWsolAtaIfMissing,\n getAtasWithCreateIxnsIfMissing,\n MAX_ACCOUNTS_PER_TRANSACTION,\n removeBudgetAndAtaIxns,\n} from './utils/transactions';\nimport { SwapResponse } from '@jup-ag/api';\nimport { StrategyPrices } from './models';\nimport { getDefaultManualRebalanceFieldInfos, getManualRebalanceFieldInfos } from './rebalance_methods';\nimport {\n deserializePricePercentageRebalanceFromOnchainParams,\n deserializePricePercentageRebalanceWithStateOverride,\n getDefaultPricePercentageRebalanceFieldInfos,\n getPositionRangeFromPercentageRebalanceParams,\n getPricePercentageRebalanceFieldInfos,\n readPricePercentageRebalanceParamsFromStrategy,\n readRawPricePercentageRebalanceStateFromStrategy,\n} from './rebalance_methods';\nimport {\n deserializePricePercentageWithResetRebalanceFromOnchainParams,\n deserializePricePercentageWithResetRebalanceWithStateOverride,\n getDefaultPricePercentageWithResetRebalanceFieldInfos,\n getPositionRangeFromPricePercentageWithResetParams,\n getPricePercentageWithResetRebalanceFieldInfos,\n readPricePercentageWithResetRebalanceParamsFromStrategy,\n readRawPricePercentageWithResetRebalanceStateFromStrategy,\n} from './rebalance_methods';\nimport {\n deserializeDriftRebalanceFromOnchainParams,\n deserializeDriftRebalanceWithStateOverride,\n getDefaultDriftRebalanceFieldInfos,\n getDriftRebalanceFieldInfos,\n getPositionRangeFromDriftParams,\n readDriftRebalanceParamsFromStrategy,\n readRawDriftRebalanceStateFromStrategy,\n} from './rebalance_methods';\nimport {\n deserializeExpanderRebalanceWithStateOverride,\n deserializePeriodicRebalanceFromOnchainParams,\n deserializeTakeProfitRebalanceFromOnchainParams,\n getDefaultExpanderRebalanceFieldInfos,\n getDefaultPeriodicRebalanceFieldInfos,\n getDefaultTakeProfitRebalanceFieldsInfos,\n getExpanderRebalanceFieldInfos,\n getPeriodicRebalanceRebalanceFieldInfos,\n getPositionRangeFromExpanderParams,\n getPositionRangeFromPeriodicRebalanceParams,\n getTakeProfitRebalanceFieldsInfos,\n readExpanderRebalanceFieldInfosFromStrategy,\n readExpanderRebalanceParamsFromStrategy,\n readPeriodicRebalanceRebalanceParamsFromStrategy,\n readPeriodicRebalanceRebalanceStateFromStrategy,\n readRawExpanderRebalanceStateFromStrategy,\n readTakeProfitRebalanceParamsFromStrategy,\n readTakeProfitRebalanceStateFromStrategy,\n} from './rebalance_methods';\nimport { PoolPriceReferenceType, TwapPriceReferenceType } from './utils/priceReferenceTypes';\nimport {\n extractPricesFromDeserializedState,\n getRebalanceMethodFromRebalanceFields,\n getRebalanceTypeFromRebalanceFields,\n} from './rebalance_methods/utils';\nimport { RebalanceTypeLabelName } from './rebalance_methods/consts';\nimport WhirlpoolWithAddress from './models/WhirlpoolWithAddress';\nimport { PoolSimulationResponse } from './models/PoolSimulationResponseData';\nimport {\n deserializeAutodriftRebalanceWithStateOverride,\n deserializeAutodriftRebalanceFromOnchainParams,\n readAutodriftRebalanceParamsFromStrategy,\n readRawAutodriftRebalanceStateFromStrategy,\n getAutodriftRebalanceFieldInfos,\n getDefaultAutodriftRebalanceFieldInfos,\n getPositionRangeFromAutodriftParams,\n} from './rebalance_methods/autodriftRebalance';\nimport { KaminoPrices, OraclePricesAndCollateralInfos } from './models';\nimport { getRemoveLiquidityQuote } from './whirlpools-client/shim/remove-liquidity';\nimport { METEORA_PROGRAM_ID, setMeteoraProgramId } from './meteora_client/programId';\nimport { computeMeteoraFee, MeteoraPool, MeteoraService } from './services/MeteoraService';\nimport {\n binIdToBinArrayIndex,\n deriveBinArray,\n getBinFromBinArray,\n getBinFromBinArrays,\n getBinIdFromPriceWithDecimals,\n getPriceOfBinByBinIdWithDecimals,\n MeteoraPosition,\n} from './utils/meteora';\nimport { BinArray, LbPair, PositionV2 } from './meteora_client/accounts';\nimport LbPairWithAddress from './models/LbPairWithAddress';\nimport { initializeBinArray, InitializeBinArrayAccounts, InitializeBinArrayArgs } from './meteora_client/instructions';\nimport { PubkeyHashMap } from './utils/pubkey';\nexport const KAMINO_IDL = KaminoIdl;\n\nexport class Kamino {\n private readonly _cluster: SolanaCluster;\n private readonly _connection: Connection;\n readonly _config: HubbleConfig;\n private _globalConfig: PublicKey;\n private readonly _scope: Scope;\n private readonly _provider: AnchorProvider;\n private readonly _kaminoProgram: Program;\n private readonly _kaminoProgramId: PublicKey;\n private readonly _orcaService: OrcaService;\n private readonly _raydiumService: RaydiumService;\n private readonly _meteoraService: MeteoraService;\n\n /**\n * Create a new instance of the Kamino SDK class.\n * @param cluster Name of the Solana cluster\n * @param connection Connection to the Solana cluster\n * @param globalConfig override kamino global config\n * @param programId override kamino program id\n * @param whirlpoolProgramId override whirlpool program id\n * @param raydiumProgramId override raydium program id\n */\n constructor(\n cluster: SolanaCluster,\n connection: Connection,\n globalConfig?: PublicKey,\n programId?: PublicKey,\n whirlpoolProgramId?: PublicKey,\n raydiumProgramId?: PublicKey,\n meteoraProgramId?: PublicKey\n ) {\n this._cluster = cluster;\n this._connection = connection;\n this._config = getConfigByCluster(cluster);\n\n this._provider = new AnchorProvider(connection, getReadOnlyWallet(), {\n commitment: connection.commitment,\n });\n if (programId && programId.equals(STAGING_KAMINO_PROGRAM_ID)) {\n this._kaminoProgramId = programId;\n this._globalConfig = STAGING_GLOBAL_CONFIG;\n } else {\n this._kaminoProgramId = programId ? programId : this._config.kamino.programId;\n this._globalConfig = globalConfig ? globalConfig : new PublicKey(this._config.kamino.globalConfig);\n }\n this._kaminoProgram = new Program(KAMINO_IDL as Idl, this._kaminoProgramId, this._provider);\n\n this._scope = new Scope(cluster, connection);\n setKaminoProgramId(this._kaminoProgramId);\n\n if (whirlpoolProgramId) {\n setWhirlpoolsProgramId(whirlpoolProgramId);\n }\n\n if (cluster === 'localnet') {\n if (raydiumProgramId) {\n setRaydiumProgramId(raydiumProgramId);\n }\n }\n\n if (meteoraProgramId) {\n setMeteoraProgramId(meteoraProgramId);\n }\n\n this._orcaService = new OrcaService(connection, cluster, this._globalConfig, this._kaminoProgramId);\n this._raydiumService = new RaydiumService(connection, cluster);\n this._meteoraService = new MeteoraService(connection, this._globalConfig);\n }\n\n getConnection = () => this._connection;\n\n getProgramID = () => this._kaminoProgramId;\n\n getProgram = () => this._kaminoProgram;\n\n setGlobalConfig = (globalConfig: PublicKey) => {\n this._globalConfig = globalConfig;\n };\n\n getGlobalConfig = () => this._globalConfig;\n\n getDepositableTokens = async (): Promise<CollateralInfo[]> => {\n const collateralInfos = await this.getCollateralInfos();\n return collateralInfos.filter((x) => !x.mint.equals(SystemProgram.programId));\n };\n\n getCollateralInfos = async () => {\n const config = await this.getGlobalConfigState(this._globalConfig);\n if (!config) {\n throw Error(`Could not fetch globalConfig with pubkey ${this.getGlobalConfig().toString()}`);\n }\n return this.getCollateralInfo(config.tokenInfos);\n };\n\n getSupportedDexes = (): Dex[] => ['ORCA', 'RAYDIUM', 'METEORA'];\n\n // todo: see if we can read this dynamically\n getFeeTiersForDex = (dex: Dex): Decimal[] => {\n if (dex == 'ORCA') {\n return [new Decimal(0.0001), new Decimal(0.0005), new Decimal(0.003), new Decimal(0.01)];\n } else if (dex == 'RAYDIUM') {\n return [new Decimal(0.0001), new Decimal(0.0005), new Decimal(0.0025), new Decimal(0.01)];\n } else if (dex == 'METEORA') {\n return [new Decimal(0.0001), new Decimal(0.0005), new Decimal(0.0025), new Decimal(0.01)];\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n };\n\n getRebalanceMethods = (): RebalanceMethod[] => {\n return [\n ManualRebalanceMethod,\n PricePercentageRebalanceMethod,\n PricePercentageWithResetRangeRebalanceMethod,\n DriftRebalanceMethod,\n TakeProfitMethod,\n PeriodicRebalanceMethod,\n ExpanderMethod,\n AutodriftMethod,\n ];\n };\n\n getEnabledRebalanceMethods = (): RebalanceMethod[] => {\n return this.getRebalanceMethods().filter((x) => x.enabled);\n };\n\n getPriceReferenceTypes = (): PriceReferenceType[] => {\n return [PoolPriceReferenceType, TwapPriceReferenceType];\n };\n\n getDefaultRebalanceMethod = (): RebalanceMethod => PricePercentageRebalanceMethod;\n\n getDefaultParametersForNewVault = async (): Promise<VaultParameters> => {\n const dex = DefaultDex;\n const tokenMintA = DefaultMintTokenA;\n const tokenMintB = DefaultMintTokenB;\n const rebalanceMethod = this.getDefaultRebalanceMethod();\n const feeTier = DefaultFeeTierOrca;\n const tickSpacing = DefaultTickSpacing;\n const rebalancingParameters = await this.getDefaultRebalanceFields(\n dex,\n tokenMintA,\n tokenMintB,\n tickSpacing,\n rebalanceMethod\n );\n const defaultParameters: VaultParameters = {\n dex,\n tokenMintA,\n tokenMintB,\n feeTier,\n rebalancingParameters,\n };\n return defaultParameters;\n };\n\n /**\n * Retunrs what type of rebalance method the fields represent\n */\n getRebalanceTypeFromRebalanceFields = (rebalanceFields: RebalanceFieldInfo[]): RebalanceTypeKind => {\n return getRebalanceTypeFromRebalanceFields(rebalanceFields);\n };\n\n /**\n * Retunrs the rebalance method the fields represent with more details (description, enabled, etc)\n */\n getRebalanceMethodFromRebalanceFields = (rebalanceFields: RebalanceFieldInfo[]): RebalanceMethod => {\n return getRebalanceMethodFromRebalanceFields(rebalanceFields);\n };\n\n getReferencePriceTypeForStrategy = async (strategy: PublicKey | StrategyWithAddress): Promise<PriceReferenceType> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n return numberToReferencePriceType(strategyWithAddress.strategy.rebalanceRaw.referencePriceType);\n };\n\n getFieldsForRebalanceMethod = (\n rebalanceMethod: RebalanceMethod,\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tickSpacing: number,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n switch (rebalanceMethod) {\n case ManualRebalanceMethod:\n return this.getFieldsForManualRebalanceMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case PricePercentageRebalanceMethod:\n return this.getFieldsForPricePercentageMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case PricePercentageWithResetRangeRebalanceMethod:\n return this.getFieldsForPricePercentageWithResetMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case DriftRebalanceMethod:\n return this.getFieldsForDriftRebalanceMethod(\n dex,\n fieldOverrides,\n tickSpacing,\n tokenAMint,\n tokenBMint,\n poolPrice\n );\n case TakeProfitMethod:\n return this.getFieldsForTakeProfitRebalanceMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case PeriodicRebalanceMethod:\n return this.getFieldsForPeriodicRebalanceMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case ExpanderMethod:\n return this.getFieldsForExpanderRebalanceMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case AutodriftMethod:\n return this.getFieldsForAutodriftRebalanceMethod(\n dex,\n fieldOverrides,\n tokenAMint,\n tokenBMint,\n tickSpacing,\n poolPrice\n );\n default:\n throw new Error(`Rebalance method ${rebalanceMethod} is not supported`);\n }\n };\n\n getFieldsForManualRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n\n const defaultFields = getDefaultManualRebalanceFieldInfos(price);\n\n let lowerPrice = defaultFields.find((x) => x.label == 'rangePriceLower')!.value;\n const lowerPriceInput = fieldOverrides.find((x) => x.label == 'rangePriceLower');\n if (lowerPriceInput) {\n lowerPrice = lowerPriceInput.value;\n }\n\n let upperPrice = defaultFields.find((x) => x.label == 'rangePriceUpper')!.value;\n const upperPriceInput = fieldOverrides.find((x) => x.label == 'rangePriceUpper');\n if (upperPriceInput) {\n upperPrice = upperPriceInput.value;\n }\n\n return getManualRebalanceFieldInfos(new Decimal(lowerPrice), new Decimal(upperPrice));\n };\n\n getFieldsForPricePercentageMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n\n const defaultFields = getDefaultPricePercentageRebalanceFieldInfos(price);\n let lowerPriceDifferenceBPS = defaultFields.find((x) => x.label == 'lowerRangeBps')!.value;\n const lowerPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'lowerRangeBps');\n if (lowerPriceDifferenceBPSInput) {\n lowerPriceDifferenceBPS = lowerPriceDifferenceBPSInput.value;\n }\n\n let upperPriceDifferenceBPS = defaultFields.find((x) => x.label == 'upperRangeBps')!.value;\n const upperPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'upperRangeBps');\n if (upperPriceDifferenceBPSInput) {\n upperPriceDifferenceBPS = upperPriceDifferenceBPSInput.value;\n }\n\n return getPricePercentageRebalanceFieldInfos(\n price,\n new Decimal(lowerPriceDifferenceBPS),\n new Decimal(upperPriceDifferenceBPS)\n );\n };\n\n getFieldsForPricePercentageWithResetMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n\n const defaultFields = getDefaultPricePercentageWithResetRebalanceFieldInfos(price);\n\n let lowerPriceDifferenceBPS = defaultFields.find((x) => x.label == 'lowerRangeBps')!.value;\n const lowerPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'lowerRangeBps');\n if (lowerPriceDifferenceBPSInput) {\n lowerPriceDifferenceBPS = lowerPriceDifferenceBPSInput.value;\n }\n\n let upperPriceDifferenceBPS = defaultFields.find((x) => x.label == 'upperRangeBps')!.value;\n const upperPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'upperRangeBps');\n if (upperPriceDifferenceBPSInput) {\n upperPriceDifferenceBPS = upperPriceDifferenceBPSInput.value;\n }\n\n let lowerResetPriceDifferenceBPS = defaultFields.find((x) => x.label == 'resetLowerRangeBps')!.value;\n const lowerResetPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'resetLowerRangeBps');\n if (lowerResetPriceDifferenceBPSInput) {\n lowerResetPriceDifferenceBPS = lowerResetPriceDifferenceBPSInput.value;\n }\n\n let upperResetPriceDifferenceBPS = defaultFields.find((x) => x.label == 'resetUpperRangeBps')!.value;\n const upperResetPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'resetUpperRangeBps');\n if (upperResetPriceDifferenceBPSInput) {\n upperResetPriceDifferenceBPS = upperResetPriceDifferenceBPSInput.value;\n }\n\n return getPricePercentageWithResetRebalanceFieldInfos(\n price,\n new Decimal(lowerPriceDifferenceBPS),\n new Decimal(upperPriceDifferenceBPS),\n new Decimal(lowerResetPriceDifferenceBPS),\n new Decimal(upperResetPriceDifferenceBPS)\n );\n };\n\n getFieldsForDriftRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tickSpacing: number,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const tokenADecimals = await getMintDecimals(this._connection, tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, tokenBMint);\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n\n const defaultFields = getDefaultDriftRebalanceFieldInfos(dex, tickSpacing, price, tokenADecimals, tokenBDecimals);\n\n let startMidTick = defaultFields.find((x) => x.label == 'startMidTick')!.value;\n const startMidTickInput = fieldOverrides.find((x) => x.label == 'startMidTick');\n if (startMidTickInput) {\n startMidTick = startMidTickInput.value;\n }\n\n let ticksBelowMid = defaultFields.find((x) => x.label == 'ticksBelowMid')!.value;\n const ticksBelowMidInput = fieldOverrides.find((x) => x.label == 'ticksBelowMid');\n if (ticksBelowMidInput) {\n ticksBelowMid = ticksBelowMidInput.value;\n }\n\n let ticksAboveMid = defaultFields.find((x) => x.label == 'ticksAboveMid')!.value;\n const ticksAboveMidInput = fieldOverrides.find((x) => x.label == 'ticksAboveMid');\n if (ticksAboveMidInput) {\n ticksAboveMid = ticksAboveMidInput.value;\n }\n\n let secondsPerTick = defaultFields.find((x) => x.label == 'secondsPerTick')!.value;\n const secondsPerTickInput = fieldOverrides.find((x) => x.label == 'secondsPerTick');\n if (secondsPerTickInput) {\n secondsPerTick = secondsPerTickInput.value;\n }\n\n let direction = defaultFields.find((x) => x.label == 'direction')!.value;\n const directionInput = fieldOverrides.find((x) => x.label == 'direction');\n if (directionInput) {\n direction = directionInput.value;\n }\n\n const fieldInfos = getDriftRebalanceFieldInfos(\n dex,\n tokenADecimals,\n tokenBDecimals,\n tickSpacing,\n new Decimal(startMidTick),\n new Decimal(ticksBelowMid),\n new Decimal(ticksAboveMid),\n new Decimal(secondsPerTick),\n new Decimal(direction)\n );\n\n return fieldInfos;\n };\n\n getFieldsForTakeProfitRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n const defaultFields = getDefaultTakeProfitRebalanceFieldsInfos(price);\n\n let lowerRangePrice = defaultFields.find((x) => x.label == 'rangePriceLower')!.value;\n const lowerRangePriceInput = fieldOverrides.find((x) => x.label == 'rangePriceLower');\n if (lowerRangePriceInput) {\n lowerRangePrice = lowerRangePriceInput.value;\n }\n\n let upperRangePrice = defaultFields.find((x) => x.label == 'rangePriceUpper')!.value;\n const upperRangePriceInput = fieldOverrides.find((x) => x.label == 'rangePriceUpper');\n if (upperRangePriceInput) {\n upperRangePrice = upperRangePriceInput.value;\n }\n\n let destinationToken = defaultFields.find((x) => x.label == 'destinationToken')!.value;\n const destinationTokenInput = fieldOverrides.find((x) => x.label == 'destinationToken');\n if (destinationTokenInput) {\n destinationToken = destinationTokenInput.value;\n }\n\n return getTakeProfitRebalanceFieldsInfos(\n new Decimal(lowerRangePrice),\n new Decimal(upperRangePrice),\n new Decimal(destinationToken),\n true\n );\n };\n\n getFieldsForPeriodicRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n const defaultFields = getDefaultPeriodicRebalanceFieldInfos(price);\n\n let period: Decimal = new Decimal(defaultFields.find((x) => x.label == 'period')!.value);\n const periodInput = fieldOverrides.find((x) => x.label == 'period');\n if (periodInput) {\n period = new Decimal(periodInput.value);\n }\n\n let lowerPriceDifferenceBPS = defaultFields.find((x) => x.label == 'lowerRangeBps')!.value;\n const lowerPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'lowerRangeBps');\n if (lowerPriceDifferenceBPSInput) {\n lowerPriceDifferenceBPS = lowerPriceDifferenceBPSInput.value;\n }\n\n let upperPriceDifferenceBPS = defaultFields.find((x) => x.label == 'upperRangeBps')!.value;\n const upperPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'upperRangeBps');\n if (upperPriceDifferenceBPSInput) {\n upperPriceDifferenceBPS = upperPriceDifferenceBPSInput.value;\n }\n\n return getPeriodicRebalanceRebalanceFieldInfos(\n price,\n period,\n new Decimal(lowerPriceDifferenceBPS),\n new Decimal(upperPriceDifferenceBPS)\n );\n };\n\n getFieldsForExpanderRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n const defaultFields = getDefaultExpanderRebalanceFieldInfos(price);\n\n let lowerPriceDifferenceBPS = defaultFields.find((x) => x.label == 'lowerRangeBps')!.value;\n const lowerPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'lowerRangeBps');\n if (lowerPriceDifferenceBPSInput) {\n lowerPriceDifferenceBPS = lowerPriceDifferenceBPSInput.value;\n }\n\n let upperPriceDifferenceBPS = defaultFields.find((x) => x.label == 'upperRangeBps')!.value;\n const upperPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'upperRangeBps');\n if (upperPriceDifferenceBPSInput) {\n upperPriceDifferenceBPS = upperPriceDifferenceBPSInput.value;\n }\n\n let lowerResetPriceDifferenceBPS = defaultFields.find((x) => x.label == 'resetLowerRangeBps')!.value;\n const lowerResetPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'resetLowerRangeBps');\n if (lowerResetPriceDifferenceBPSInput) {\n lowerResetPriceDifferenceBPS = lowerResetPriceDifferenceBPSInput.value;\n }\n\n let upperResetPriceDifferenceBPS = defaultFields.find((x) => x.label == 'resetUpperRangeBps')!.value;\n const upperResetPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'resetUpperRangeBps');\n if (upperResetPriceDifferenceBPSInput) {\n upperResetPriceDifferenceBPS = upperResetPriceDifferenceBPSInput.value;\n }\n\n let expansionBPS = defaultFields.find((x) => x.label == 'expansionBps')!.value;\n const expansionBPSInput = fieldOverrides.find((x) => x.label == 'expansionBps');\n if (expansionBPSInput) {\n expansionBPS = expansionBPSInput.value;\n }\n\n let maxNumberOfExpansions = defaultFields.find((x) => x.label == 'maxNumberOfExpansions')!.value;\n const maxNumberOfExpansionsInput = fieldOverrides.find((x) => x.label == 'maxNumberOfExpansions');\n if (maxNumberOfExpansionsInput) {\n maxNumberOfExpansions = maxNumberOfExpansionsInput.value;\n }\n\n let swapUnevenAllowed = defaultFields.find((x) => x.label == 'swapUnevenAllowed')!.value;\n const swapUnevenAllowedInput = fieldOverrides.find((x) => x.label == 'swapUnevenAllowed');\n if (swapUnevenAllowedInput) {\n swapUnevenAllowed = swapUnevenAllowedInput.value;\n }\n\n return getExpanderRebalanceFieldInfos(\n price,\n new Decimal(lowerPriceDifferenceBPS),\n new Decimal(upperPriceDifferenceBPS),\n new Decimal(lowerResetPriceDifferenceBPS),\n new Decimal(upperResetPriceDifferenceBPS),\n new Decimal(expansionBPS),\n new Decimal(maxNumberOfExpansions),\n new Decimal(swapUnevenAllowed)\n );\n };\n\n getFieldsForAutodriftRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tickSpacing: number,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const tokenADecimals = await getMintDecimals(this._connection, tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, tokenBMint);\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n\n // TODO: maybe we will need to get real staking price instead of pool price for this to be accurate.\n const defaultFields = getDefaultAutodriftRebalanceFieldInfos(\n dex,\n price,\n tokenADecimals,\n tokenBDecimals,\n tickSpacing\n );\n\n const lastMidTick = defaultFields.find((x) => x.label == 'lastMidTick')!.value;\n\n let initDriftTicksPerEpoch = defaultFields.find((x) => x.label == 'initDriftTicksPerEpoch')!.value;\n const initDriftTicksPerEpochInput = fieldOverrides.find((x) => x.label == 'initDriftTicksPerEpoch');\n if (initDriftTicksPerEpochInput) {\n initDriftTicksPerEpoch = initDriftTicksPerEpochInput.value;\n }\n\n let ticksBelowMid = defaultFields.find((x) => x.label == 'ticksBelowMid')!.value;\n const ticksBelowMidInput = fieldOverrides.find((x) => x.label == 'ticksBelowMid');\n if (ticksBelowMidInput) {\n ticksBelowMid = ticksBelowMidInput.value;\n }\n\n let ticksAboveMid = defaultFields.find((x) => x.label == 'ticksAboveMid')!.value;\n const ticksAboveMidInput = fieldOverrides.find((x) => x.label == 'ticksAboveMid');\n if (ticksAboveMidInput) {\n ticksAboveMid = ticksAboveMidInput.value;\n }\n\n let frontrunMultiplierBps = defaultFields.find((x) => x.label == 'frontrunMultiplierBps')!.value;\n const frontrunMultiplierBpsInput = fieldOverrides.find((x) => x.label == 'frontrunMultiplierBps');\n if (frontrunMultiplierBpsInput) {\n frontrunMultiplierBps = frontrunMultiplierBpsInput.value;\n }\n let stakingRateASource = defaultFields.find((x) => x.label == 'stakingRateASource')!.value;\n const stakingRateASourceInput = fieldOverrides.find((x) => x.label == 'stakingRateASource');\n if (stakingRateASourceInput) {\n stakingRateASource = stakingRateASourceInput.value;\n }\n\n let stakingRateBSource = defaultFields.find((x) => x.label == 'stakingRateBSource')!.value;\n const stakingRateBSourceInput = fieldOverrides.find((x) => x.label == 'stakingRateBSource');\n if (stakingRateBSourceInput) {\n stakingRateBSource = stakingRateBSourceInput.value;\n }\n\n let initialDriftDirection = defaultFields.find((x) => x.label == 'initialDriftDirection')!.value;\n const initialDriftDirectionInput = fieldOverrides.find((x) => x.label == 'initialDriftDirection');\n if (initialDriftDirectionInput) {\n initialDriftDirection = initialDriftDirectionInput.value;\n }\n\n const fieldInfos = getAutodriftRebalanceFieldInfos(\n dex,\n tokenADecimals,\n tokenBDecimals,\n tickSpacing,\n new Decimal(lastMidTick),\n new Decimal(initDriftTicksPerEpoch),\n new Decimal(ticksBelowMid),\n new Decimal(ticksAboveMid),\n new Decimal(frontrunMultiplierBps),\n new Decimal(stakingRateASource),\n new Decimal(stakingRateBSource),\n new Decimal(initialDriftDirection)\n );\n\n return fieldInfos;\n };\n\n /**\n * Get the price for a given pair of tokens in a given dex; The price comes from any pool having those tokens, not a specific one, so the price may not be exactly the same between different pools with the same tokens. For a specific pool price use getPoolPrice\n * @param strategy\n * @param amountA\n */\n getPriceForPair = async (dex: Dex, poolTokenA: PublicKey, poolTokenB: PublicKey): Promise<number> => {\n if (dex == 'ORCA') {\n const pools = await this.getOrcaPoolsForTokens(poolTokenA, poolTokenB);\n if (pools.length == 0) {\n throw new Error(`No pool found for ${poolTokenA.toString()} and ${poolTokenB.toString()}`);\n }\n return pools[0].price;\n } else if (dex == 'RAYDIUM') {\n const pools = await this.getRaydiumPoolsForTokens(poolTokenA, poolTokenB);\n if (pools.length == 0) {\n throw new Error(`No pool found for ${poolTokenA.toString()} and ${poolTokenB.toString()}`);\n }\n return pools[0].price;\n } else if (dex == 'METEORA') {\n const pools = await this.getMeteoraPoolsForTokens(poolTokenA, poolTokenB);\n if (pools.length == 0) {\n throw new Error(`No pool found for ${poolTokenA.toString()} and ${poolTokenB.toString()}`);\n }\n const decimalsX = await getMintDecimals(this._connection, poolTokenA);\n const decimalsY = await getMintDecimals(this._connection, poolTokenB);\n return getPriceOfBinByBinIdWithDecimals(\n pools[0].pool.activeId,\n pools[0].pool.binStep,\n decimalsX,\n decimalsY\n ).toNumber();\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n };\n\n getDefaultRebalanceFields = async (\n dex: Dex,\n poolTokenA: PublicKey,\n poolTokenB: PublicKey,\n tickSpacing: number,\n rebalanceMethod: RebalanceMethod\n ): Promise<RebalanceFieldInfo[]> => {\n const price = new Decimal(await this.getPriceForPair(dex, poolTokenA, poolTokenB));\n const tokenADecimals = await getMintDecimals(this._connection, poolTokenA);\n const tokenBDecimals = await getMintDecimals(this._connection, poolTokenB);\n\n switch (rebalanceMethod) {\n case ManualRebalanceMethod:\n return getDefaultManualRebalanceFieldInfos(price);\n case PricePercentageRebalanceMethod:\n return getDefaultPricePercentageRebalanceFieldInfos(price);\n case PricePercentageWithResetRangeRebalanceMethod:\n return getDefaultPricePercentageWithResetRebalanceFieldInfos(price);\n case DriftRebalanceMethod:\n return getDefaultDriftRebalanceFieldInfos(dex, tickSpacing, price, tokenADecimals, tokenBDecimals);\n case TakeProfitMethod:\n return getDefaultTakeProfitRebalanceFieldsInfos(price);\n case PeriodicRebalanceMethod:\n return getDefaultPeriodicRebalanceFieldInfos(price);\n case ExpanderMethod:\n return getDefaultExpanderRebalanceFieldInfos(price);\n case AutodriftMethod:\n return getDefaultAutodriftRebalanceFieldInfos(dex, price, tokenADecimals, tokenBDecimals, tickSpacing);\n default:\n throw new Error(`Rebalance method ${rebalanceMethod} is not supported`);\n }\n };\n\n /**\n * Return a the pubkey of the pool in a given dex, for given mints and fee tier; if that pool doesn't exist, return default pubkey\n */\n getPoolInitializedForDexPairTier = async (\n dex: Dex,\n poolTokenA: PublicKey,\n poolTokenB: PublicKey,\n feeBPS: Decimal\n ): Promise<PublicKey> => {\n if (dex == 'ORCA') {\n let pool = PublicKey.default;\n const orcaPools = await this.getOrcaPoolsForTokens(poolTokenA, poolTokenB);\n orcaPools.forEach((element) => {\n if (element.lpFeeRate * FullBPS == feeBPS.toNumber()) {\n pool = new PublicKey(element.address);\n }\n });\n return pool;\n } else if (dex == 'RAYDIUM') {\n const pools: Pool[] = [];\n const raydiumPools = await this.getRaydiumPoolsForTokens(poolTokenA, poolTokenB);\n raydiumPools.forEach((element) => {\n if (new Decimal(element.ammConfig.tradeFeeRate).div(FullBPS).div(FullPercentage).equals(feeBPS.div(FullBPS))) {\n pools.push(element);\n }\n });\n if (pools.length == 0) {\n return PublicKey.default;\n }\n let pool = PublicKey.default;\n let tickSpacing = Number.MAX_VALUE;\n pools.forEach((element) => {\n if (element.ammConfig.tickSpacing < tickSpacing) {\n pool = new PublicKey(element.id);\n tickSpacing = element.ammConfig.tickSpacing;\n }\n });\n return pool;\n } else if (dex == 'METEORA') {\n let pool = PublicKey.default;\n const pools = await this.getMeteoraPoolsForTokens(poolTokenA, poolTokenB);\n pools.forEach((element) => {\n const feeRateBps = element.pool.parameters.baseFactor * element.pool.binStep;\n if (feeRateBps == feeBPS.toNumber()) {\n pool = new PublicKey(element.key);\n }\n });\n return pool;\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n };\n\n /**\n * Return generic information for all pools in a given dex, for given mints and fee tier\n */\n async getExistentPoolsForPair(dex: Dex, tokenMintA: PublicKey, tokenMintB: PublicKey): Promise<GenericPoolInfo[]> {\n if (dex == 'ORCA') {\n const pools = await this.getOrcaPoolsForTokens(tokenMintA, tokenMintB);\n const genericPoolInfos: GenericPoolInfo[] = await Promise.all(\n pools.map(async (pool: OrcaPool) => {\n const positionsCount = new Decimal(await this.getPositionsCountForPool(dex, new PublicKey(pool.address)));\n // read price from pool\n const poolData = await this._orcaService.getPool(new PublicKey(pool.address));\n if (!poolData) {\n throw new Error(`Pool ${pool.address} not found`);\n }\n const poolInfo: GenericPoolInfo = {\n dex,\n address: new PublicKey(pool.address),\n price: poolData.price,\n tokenMintA: new PublicKey(pool.tokenA.mint),\n tokenMintB: new PublicKey(pool.tokenB.mint),\n tvl: pool.tvl ? new Decimal(pool.tvl) : undefined,\n feeRate: new Decimal(pool.lpFeeRate).mul(FullBPS),\n volumeOnLast7d: pool.volume ? new Decimal(pool.volume.week) : undefined,\n tickSpacing: new Decimal(pool.tickSpacing),\n positions: positionsCount,\n };\n return poolInfo;\n })\n );\n return genericPoolInfos;\n } else if (dex == 'RAYDIUM') {\n const pools = await this.getRaydiumPoolsForTokens(tokenMintA, tokenMintB);\n const genericPoolInfos: GenericPoolInfo[] = await Promise.all(\n pools.map(async (pool: Pool) => {\n const positionsCount = new Decimal(await this.getPositionsCountForPool(dex, new PublicKey(pool.id)));\n\n const poolInfo: GenericPoolInfo = {\n dex,\n address: new PublicKey(pool.id),\n price: new Decimal(pool.price),\n tokenMintA: new PublicKey(pool.mintA),\n tokenMintB: new PublicKey(pool.mintB),\n tvl: new Decimal(pool.tvl),\n feeRate: new Decimal(pool.ammConfig.tradeFeeRate).div(new Decimal(FullPercentage)),\n volumeOnLast7d: new Decimal(pool.week.volume),\n tickSpacing: new Decimal(pool.ammConfig.tickSpacing),\n positions: positionsCount,\n };\n return poolInfo;\n })\n );\n\n return genericPoolInfos;\n } else if (dex == 'METEORA') {\n const pools = await this.getMeteoraPoolsForTokens(tokenMintA, tokenMintB);\n const genericPoolInfos: GenericPoolInfo[] = await Promise.all(\n pools.map(async (pool: MeteoraPool) => {\n const positionsCount = new Decimal(await this.getPositionsCountForPool(dex, pool.key));\n const decimalsX = await getMintDecimals(this._connection, pool.pool.tokenXMint);\n const decimalsY = await getMintDecimals(this._connection, pool.pool.tokenYMint);\n const price = getPriceOfBinByBinIdWithDecimals(pool.pool.activeId, pool.pool.binStep, decimalsX, decimalsY);\n\n const poolInfo: GenericPoolInfo = {\n dex,\n address: pool.key,\n price,\n tokenMintA: pool.pool.tokenXMint,\n tokenMintB: pool.pool.tokenYMint,\n tvl: new Decimal(0),\n feeRate: computeMeteoraFee(pool.pool).div(1e2), // Transform it to rate\n volumeOnLast7d: new Decimal(0),\n tickSpacing: new Decimal(pool.pool.binStep),\n positions: positionsCount,\n };\n return poolInfo;\n })\n );\n\n return genericPoolInfos;\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n }\n\n getOrcaPoolsForTokens = async (poolTokenA: PublicKey, poolTokenB: PublicKey): Promise<OrcaPool[]> => {\n const pools: OrcaPool[] = [];\n const poolTokenAString = poolTokenA.toString();\n const poolTokenBString = poolTokenB.toString();\n const whirlpools = await this._orcaService.getOrcaWhirlpools();\n whirlpools.whirlpools.forEach((element) => {\n if (\n (element.tokenA.mint == poolTokenAString && element.tokenB.mint == poolTokenBString) ||\n (element.tokenA.mint == poolTokenBString && element.tokenB.mint == poolTokenAString)\n )\n pools.push(element);\n });\n\n return pools;\n };\n\n getRaydiumPoolsForTokens = async (poolTokenA: PublicKey, poolTokenB: PublicKey): Promise<Pool[]> => {\n const pools: Pool[] = [];\n const poolTokenAString = poolTokenA.toString();\n const poolTokenBString = poolTokenB.toString();\n const raydiumPools = await this._raydiumService.getRaydiumWhirlpools();\n raydiumPools.data.forEach((element) => {\n if (\n (element.mintA == poolTokenAString && element.mintB == poolTokenBString) ||\n (element.mintA == poolTokenBString && element.mintB == poolTokenAString)\n ) {\n pools.push(element);\n }\n });\n\n return pools;\n };\n\n getMeteoraPoolsForTokens = async (poolTokenA: PublicKey, poolTokenB: PublicKey): Promise<MeteoraPool[]> => {\n const pools: MeteoraPool[] = [];\n const meteoraPools = await this._meteoraService.getMeteoraPools();\n meteoraPools.forEach((element) => {\n if (\n (element.pool.tokenXMint.equals(poolTokenA) && element.pool.tokenYMint.equals(poolTokenB)) ||\n (element.pool.tokenXMint.equals(poolTokenB) && element.pool.tokenYMint.equals(poolTokenA))\n ) {\n pools.push(element);\n }\n });\n\n return pools;\n };\n\n /**\n * Return a list of all Kamino whirlpool strategies\n * @param strategies Limit results to these strategy addresses\n */\n getStrategies = async (strategies?: Array<PublicKey>): Promise<Array<WhirlpoolStrategy | null>> => {\n if (!strategies) {\n strategies = (await this.getAllStrategiesWithFilters({})).map((x) => x.address);\n }\n return await batchFetch(strategies, (chunk) => this.getWhirlpoolStrategies(chunk));\n };\n\n /**\n * Return a list of all Kamino whirlpool strategies with their addresses\n * @param strategies Limit results to these strategy addresses\n */\n getStrategiesWithAddresses = async (strategies?: Array<PublicKey>): Promise<Array<StrategyWithAddress>> => {\n if (!strategies) {\n return this.getAllStrategiesWithFilters({});\n }\n const result: StrategyWithAddress[] = [];\n const states = await batchFetch(strategies, (chunk) => this.getWhirlpoolStrategies(chunk));\n for (let i = 0; i < strategies.length; i++) {\n if (states[i]) {\n result.push({ address: strategies[i], strategy: states[i]! });\n } else {\n throw Error(`Could not fetch strategy state for ${strategies[i].toString()}`);\n }\n }\n return result;\n };\n\n getAllStrategiesWithFilters = async (strategyFilters: StrategiesFilters): Promise<Array<StrategyWithAddress>> => {\n const filters: GetProgramAccountsFilter[] = [];\n filters.push({\n dataSize: WhirlpoolStrategy.layout.span + 8,\n });\n filters.push({\n memcmp: {\n offset: 0,\n bytes: bs58.encode(WhirlpoolStrategy.discriminator),\n },\n });\n\n if (strategyFilters.owner) {\n filters.push({\n memcmp: {\n bytes: strategyFilters.owner.toBase58(),\n offset: 8,\n },\n });\n }\n\n if (strategyFilters.strategyCreationStatus) {\n filters.push({\n memcmp: {\n bytes: strategyCreationStatusToBase58(strategyFilters.strategyCreationStatus),\n offset: 1625,\n },\n });\n }\n if (strategyFilters.strategyType) {\n filters.push({\n memcmp: {\n bytes: strategyTypeToBase58(strategyFilters.strategyType).toString(),\n offset: 1120,\n },\n });\n }\n\n if (strategyFilters.isCommunity !== undefined && strategyFilters.isCommunity !== null) {\n const value = !strategyFilters.isCommunity ? '1' : '2';\n filters.push({\n memcmp: {\n bytes: value,\n offset: 1664,\n },\n });\n }\n\n return (\n await this._connection.getProgramAccounts(this._kaminoProgramId, {\n filters,\n })\n ).map((x) => {\n const res: StrategyWithAddress = {\n strategy: WhirlpoolStrategy.decode(x.account.data),\n address: x.pubkey,\n };\n return res;\n });\n };\n\n /**\n * Get a Kamino whirlpool strategy by its public key address\n * @param address\n */\n getStrategyByAddress = (address: PublicKey) => this.getWhirlpoolStrategy(address);\n\n /**\n * Get a Kamino whirlpool strategy by its kToken mint address\n * @param kTokenMint - mint address of the kToken\n */\n getStrategyByKTokenMint = async (kTokenMint: PublicKey): Promise<StrategyWithAddress | null> => {\n const matchingStrategies = await this._connection.getProgramAccounts(this._kaminoProgram.programId, {\n filters: [\n {\n dataSize: WhirlpoolStrategy.layout.span + 8,\n },\n {\n memcmp: {\n offset: 0,\n bytes: bs58.encode(WhirlpoolStrategy.discriminator),\n },\n },\n {\n memcmp: {\n bytes: kTokenMint.toBase58(),\n offset: 720,\n },\n },\n ],\n });\n\n if (matchingStrategies.length === 0) {\n return null;\n }\n if (matchingStrategies.length > 1) {\n throw new Error(\n `Multiple strategies found for kToken mint: ${kTokenMint.toBase58()}. Strategies found: ${matchingStrategies.map(\n (x) => x.pubkey.toBase58()\n )}`\n );\n }\n const decodedStrategy = WhirlpoolStrategy.decode(matchingStrategies[0].account.data);\n return {\n address: matchingStrategies[0].pubkey,\n strategy: decodedStrategy,\n };\n };\n\n /**\n * Get the strategy share data (price + balances) of the specified Kamino whirlpool strategy\n * @param strategy\n * @param scopePrices\n */\n getStrategyShareData = async (\n strategy: PublicKey | StrategyWithAddress,\n scopePrices?: OraclePrices\n ): Promise<ShareData> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n const sharesFactor = Decimal.pow(10, strategyState.strategy.sharesMintDecimals.toString());\n const sharesIssued = new Decimal(strategyState.strategy.sharesIssued.toString());\n const balances = await this.getStrategyBalances(strategyState.strategy, scopePrices);\n if (sharesIssued.isZero()) {\n return { price: new Decimal(1), balance: balances };\n } else {\n return { price: balances.computedHoldings.totalSum.div(sharesIssued).mul(sharesFactor), balance: balances };\n }\n };\n\n /**\n * Batch fetch share data for all or a filtered list of strategies\n * @param strategyFilters strategy filters or a list of strategy public keys\n */\n getStrategiesShareData = async (\n strategyFilters: StrategiesFilters | PublicKey[],\n stratsWithAddresses?: StrategyWithAddress[],\n collateralInfos?: CollateralInfo[]\n ): Promise<Array<ShareDataWithAddress>> => {\n const result: Array<ShareDataWithAddress> = [];\n const strategiesWithAddresses = stratsWithAddresses\n ? stratsWithAddresses\n : Array.isArray(strategyFilters)\n ? await this.getStrategiesWithAddresses(strategyFilters)\n : await this.getAllStrategiesWithFilters(strategyFilters);\n const fetchBalances: Promise<StrategyBalanceWithAddress>[] = [];\n const allScopePrices = strategiesWithAddresses.map((x) => x.strategy.scopePrices);\n const scopePrices = await this._scope.getMultipleOraclePrices(allScopePrices);\n const scopePricesMap: Record<string, OraclePrices> = scopePrices.reduce((map, [address, price]) => {\n map[address.toBase58()] = price;\n return map;\n }, {});\n\n const raydiumStrategies = strategiesWithAddresses.filter(\n (x) =>\n x.strategy.strategyDex.toNumber() === dexToNumber('RAYDIUM') && !x.strategy.position.equals(PublicKey.default)\n );\n const raydiumPoolsPromise = this.getRaydiumPools(raydiumStrategies.map((x) => x.strategy.pool));\n const raydiumPositionsPromise = this.getRaydiumPositions(raydiumStrategies.map((x) => x.strategy.position));\n const orcaStrategies = strategiesWithAddresses.filter(\n (x) => x.strategy.strategyDex.toNumber() === dexToNumber('ORCA') && !x.strategy.position.equals(PublicKey.default)\n );\n const orcaPoolsPromise = this.getWhirlpools(orcaStrategies.map((x) => x.strategy.pool));\n const orcaPositionsPromise = this.getOrcaPositions(orcaStrategies.map((x) => x.strategy.position));\n const meteoraStrategies = strategiesWithAddresses.filter(\n (x) =>\n x.strategy.strategyDex.toNumber() === dexToNumber('METEORA') && !x.strategy.position.equals(PublicKey.default)\n );\n const meteoraPoolsPromise = this.getMeteoraPools(meteoraStrategies.map((x) => x.strategy.pool));\n const meteoraPositionsPromise = this.getMeteoraPositions(meteoraStrategies.map((x) => x.strategy.position));\n\n const [raydiumPools, raydiumPositions, orcaPools, orcaPositions, meteoraPools, meteoraPositions] =\n await Promise.all([\n raydiumPoolsPromise,\n raydiumPositionsPromise,\n orcaPoolsPromise,\n orcaPositionsPromise,\n meteoraPoolsPromise,\n meteoraPositionsPromise,\n ]);\n\n const inactiveStrategies = strategiesWithAddresses.filter((x) => x.strategy.position.equals(PublicKey.default));\n const collInfos = collateralInfos ? collateralInfos : await this.getCollateralInfos();\n for (const { strategy, address } of inactiveStrategies) {\n const strategyPrices = await this.getStrategyPrices(\n strategy,\n collInfos,\n scopePricesMap[strategy.scopePrices.toBase58()]\n );\n result.push({\n address,\n strategy,\n shareData: getEmptyShareData({\n ...strategyPrices,\n poolPrice: ZERO,\n upperPrice: ZERO,\n lowerPrice: ZERO,\n twapPrice: ZERO,\n lowerResetPrice: ZERO,\n upperResetPrice: ZERO,\n }),\n });\n }\n\n fetchBalances.push(\n ...this.getBalance<PoolState, PersonalPositionState>(\n raydiumStrategies,\n raydiumPools,\n raydiumPositions,\n this.getRaydiumBalances,\n collInfos,\n scopePricesMap\n )\n );\n\n fetchBalances.push(\n ...this.getBalance<Whirlpool, Position>(\n orcaStrategies,\n orcaPools,\n orcaPositions,\n this.getOrcaBalances,\n collInfos,\n scopePricesMap\n )\n );\n\n fetchBalances.push(\n ...this.getBalance<LbPair, PositionV2>(\n meteoraStrategies,\n meteoraPools,\n meteoraPositions,\n this.getMeteoraBalances,\n collInfos,\n scopePricesMap\n )\n );\n\n const strategyBalances = await Promise.all(fetchBalances);\n\n for (const { balance, strategyWithAddress } of strategyBalances) {\n const sharesFactor = Decimal.pow(10, strategyWithAddress.strategy.sharesMintDecimals.toString());\n const sharesIssued = new Decimal(strategyWithAddress.strategy.sharesIssued.toString());\n if (sharesIssued.isZero()) {\n result.push({\n address: strategyWithAddress.address,\n strategy: strategyWithAddress.strategy,\n shareData: { price: new Decimal(1), balance },\n });\n } else {\n result.push({\n address: strategyWithAddress.address,\n strategy: strategyWithAddress.strategy,\n shareData: { price: balance.computedHoldings.totalSum.div(sharesIssued).mul(sharesFactor), balance },\n });\n }\n }\n\n return result;\n };\n\n private getBalance = <PoolT, PositionT>(\n strategies: StrategyWithAddress[],\n pools: PubkeyHashMap<PublicKey, PoolT | null>,\n positions: (PositionT | null)[],\n fetchBalance: (\n strategy: WhirlpoolStrategy,\n pool: PoolT,\n position: PositionT,\n collateralInfos: CollateralInfo[],\n prices?: OraclePrices\n ) => Promise<StrategyBalances>,\n collateralInfos: CollateralInfo[],\n prices?: Record<string, OraclePrices>\n ): Promise<StrategyBalanceWithAddress>[] => {\n const fetchBalances: Promise<StrategyBalanceWithAddress>[] = [];\n\n for (let i = 0; i < strategies.length; i++) {\n const { strategy, address } = strategies[i];\n\n const retrievedPool = { ...pools.get(strategy.pool) };\n const pool = { ...retrievedPool };\n const position = positions[i];\n if (!pool) {\n throw new Error(`Pool ${strategy.pool.toString()} could not be found.`);\n }\n if (!position) {\n throw new Error(`Position ${strategy.position.toString()} could not be found.`);\n }\n fetchBalances.push(\n fetchBalance(\n strategy,\n pool as PoolT,\n position as PositionT,\n collateralInfos,\n prices ? prices[strategy.scopePrices.toBase58()] : undefined\n ).then((balance) => {\n return { balance, strategyWithAddress: { strategy, address } };\n })\n );\n }\n return fetchBalances;\n };\n\n private getRaydiumBalances = async (\n strategy: WhirlpoolStrategy,\n pool: PoolState,\n position: PersonalPositionState,\n collateralInfos: CollateralInfo[],\n prices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const strategyPrices = await this.getStrategyPrices(strategy, collateralInfos, prices);\n const rebalanceKind = numberToRebalanceType(strategy.rebalanceType);\n const tokenHoldings = this.getRaydiumTokensBalances(strategy, pool, position);\n\n const computedHoldings: Holdings = this.getStrategyHoldingsUsd(\n tokenHoldings.available.a,\n tokenHoldings.available.b,\n tokenHoldings.invested.a,\n tokenHoldings.invested.b,\n new Decimal(strategy.tokenAMintDecimals.toString()),\n new Decimal(strategy.tokenBMintDecimals.toString()),\n strategyPrices.aPrice,\n strategyPrices.bPrice\n );\n\n const decimalsA = strategy.tokenAMintDecimals.toNumber();\n const decimalsB = strategy.tokenBMintDecimals.toNumber();\n\n const poolPrice = SqrtPriceMath.sqrtPriceX64ToPrice(pool.sqrtPriceX64, decimalsA, decimalsB);\n const twapPrice =\n strategyPrices.aTwapPrice !== null && strategyPrices.bTwapPrice !== null\n ? strategyPrices.aTwapPrice.div(strategyPrices.bTwapPrice)\n : null;\n const upperPrice = SqrtPriceMath.sqrtPriceX64ToPrice(\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex),\n decimalsA,\n decimalsB\n );\n const lowerPrice = SqrtPriceMath.sqrtPriceX64ToPrice(\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex),\n decimalsA,\n decimalsB\n );\n let lowerResetPrice: Decimal | null = null;\n let upperResetPrice: Decimal | null = null;\n const dex = numberToDex(strategy.strategyDex.toNumber());\n if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n const state = deserializePricePercentageWithResetRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n } else if (rebalanceKind.kind === Expander.kind) {\n const state = deserializeExpanderRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n }\n\n const balance: StrategyBalances = {\n computedHoldings,\n prices: { ...strategyPrices, poolPrice, lowerPrice, upperPrice, twapPrice, lowerResetPrice, upperResetPrice },\n tokenAAmounts: tokenHoldings.available.a.plus(tokenHoldings.invested.a),\n tokenBAmounts: tokenHoldings.available.b.plus(tokenHoldings.invested.b),\n };\n return balance;\n };\n\n private getMeteoraBalances = async (\n strategy: WhirlpoolStrategy,\n pool: LbPair,\n position: PositionV2 | undefined, // the undefined is for scenarios where the position is not initialised yet\n collateralInfos: CollateralInfo[],\n prices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const strategyPricesPromise = this.getStrategyPrices(strategy, collateralInfos, prices);\n const rebalanceKind = numberToRebalanceType(strategy.rebalanceType);\n const tokenHoldingsPromise = this.getMeteoraTokensBalances(strategy);\n const [strategyPrices, tokenHoldings] = await Promise.all([strategyPricesPromise, tokenHoldingsPromise]);\n\n const computedHoldings: Holdings = this.getStrategyHoldingsUsd(\n tokenHoldings.available.a,\n tokenHoldings.available.b,\n tokenHoldings.invested.a,\n tokenHoldings.invested.b,\n new Decimal(strategy.tokenAMintDecimals.toString()),\n new Decimal(strategy.tokenBMintDecimals.toString()),\n strategyPrices.aPrice,\n strategyPrices.bPrice\n );\n\n const decimalsA = strategy.tokenAMintDecimals.toNumber();\n const decimalsB = strategy.tokenBMintDecimals.toNumber();\n\n const twapPrice =\n strategyPrices.aTwapPrice !== null && strategyPrices.bTwapPrice !== null\n ? strategyPrices.aTwapPrice.div(strategyPrices.bTwapPrice)\n : null;\n const poolPrice = getPriceOfBinByBinIdWithDecimals(pool.activeId, pool.binStep, decimalsA, decimalsB);\n let lowerPrice = ZERO;\n let upperPrice = ZERO;\n if (position && position.lowerBinId && position.upperBinId) {\n lowerPrice = getPriceOfBinByBinIdWithDecimals(position.lowerBinId, pool.binStep, decimalsA, decimalsB);\n upperPrice = getPriceOfBinByBinIdWithDecimals(position.upperBinId, pool.binStep, decimalsA, decimalsB);\n }\n\n let lowerResetPrice: Decimal | null = null;\n let upperResetPrice: Decimal | null = null;\n const dex = numberToDex(strategy.strategyDex.toNumber());\n if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n const state = deserializePricePercentageWithResetRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n } else if (rebalanceKind.kind === Expander.kind) {\n const state = deserializeExpanderRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n }\n\n const balance: StrategyBalances = {\n computedHoldings,\n prices: { ...strategyPrices, poolPrice, lowerPrice, upperPrice, twapPrice, lowerResetPrice, upperResetPrice },\n tokenAAmounts: tokenHoldings.available.a.plus(tokenHoldings.invested.a),\n tokenBAmounts: tokenHoldings.available.b.plus(tokenHoldings.invested.b),\n };\n return balance;\n };\n\n private getRaydiumTokensBalances = (\n strategy: WhirlpoolStrategy,\n pool: PoolState,\n position: PersonalPositionState,\n mode: 'DEPOSIT' | 'WITHDRAW' = 'WITHDRAW'\n ): TokenHoldings => {\n const lowerSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex);\n const upperSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex);\n\n const { amountA, amountB } = LiquidityMath.getAmountsFromLiquidity(\n pool.sqrtPriceX64,\n new BN(lowerSqrtPriceX64),\n new BN(upperSqrtPriceX64),\n position.liquidity,\n mode === 'DEPOSIT'\n );\n\n const aAvailable = new Decimal(strategy.tokenAAmounts.toString());\n const bAvailable = new Decimal(strategy.tokenBAmounts.toString());\n const aInvested = new Decimal(amountA.toString());\n const bInvested = new Decimal(amountB.toString());\n\n const holdings: TokenHoldings = {\n available: {\n a: aAvailable,\n b: bAvailable,\n },\n invested: {\n a: aInvested,\n b: bInvested,\n },\n };\n\n return holdings;\n };\n\n private getMeteoraTokensBalances = async (strategy: WhirlpoolStrategy): Promise<TokenHoldings> => {\n let aInvested = ZERO;\n let bInvested = ZERO;\n try {\n const userPosition = await this.readMeteoraPosition(strategy.pool, strategy.position);\n\n if (!userPosition?.amountX.isNaN() && !userPosition?.amountY.isNaN()) {\n aInvested = userPosition.amountX;\n bInvested = userPosition.amountY;\n }\n } catch (e) {\n // @tslint:disable-next-line no-empty\n }\n\n const aAvailable = new Decimal(strategy.tokenAAmounts.toString());\n const bAvailable = new Decimal(strategy.tokenBAmounts.toString());\n\n const holdings: TokenHoldings = {\n available: {\n a: aAvailable,\n b: bAvailable,\n },\n invested: {\n a: new Decimal(aInvested),\n b: new Decimal(bInvested),\n },\n };\n\n return holdings;\n };\n\n private getOrcaBalances = async (\n strategy: WhirlpoolStrategy,\n pool: Whirlpool,\n position: Position,\n collateralInfos: CollateralInfo[],\n prices?: OraclePrices,\n mode: 'DEPOSIT' | 'WITHDRAW' = 'WITHDRAW'\n ): Promise<StrategyBalances> => {\n const strategyPrices = await this.getStrategyPrices(strategy, collateralInfos, prices);\n const rebalanceKind = numberToRebalanceType(strategy.rebalanceType);\n\n const tokenHoldings = this.getOrcaTokensBalances(strategy, pool, position, mode);\n const computedHoldings: Holdings = this.getStrategyHoldingsUsd(\n tokenHoldings.available.a,\n tokenHoldings.available.b,\n tokenHoldings.invested.a,\n tokenHoldings.invested.b,\n new Decimal(strategy.tokenAMintDecimals.toString()),\n new Decimal(strategy.tokenBMintDecimals.toString()),\n strategyPrices.aPrice,\n strategyPrices.bPrice\n );\n\n const decimalsA = strategy.tokenAMintDecimals.toNumber();\n const decimalsB = strategy.tokenBMintDecimals.toNumber();\n\n const poolPrice = sqrtPriceX64ToPrice(pool.sqrtPrice, decimalsA, decimalsB);\n const twapPrice =\n strategyPrices.aTwapPrice !== null && strategyPrices.bTwapPrice !== null\n ? strategyPrices.aTwapPrice.div(strategyPrices.bTwapPrice)\n : null;\n const upperPrice = tickIndexToPrice(position.tickUpperIndex, decimalsA, decimalsB);\n const lowerPrice = tickIndexToPrice(position.tickLowerIndex, decimalsA, decimalsB);\n let lowerResetPrice: Decimal | null = null;\n let upperResetPrice: Decimal | null = null;\n const dex = numberToDex(strategy.strategyDex.toNumber());\n if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n const state = deserializePricePercentageWithResetRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n } else if (rebalanceKind.kind === Expander.kind) {\n const state = deserializeExpanderRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n }\n\n const balance: StrategyBalances = {\n computedHoldings,\n prices: { ...strategyPrices, poolPrice, lowerPrice, upperPrice, twapPrice, lowerResetPrice, upperResetPrice },\n tokenAAmounts: tokenHoldings.available.a.plus(tokenHoldings.invested.a),\n tokenBAmounts: tokenHoldings.available.b.plus(tokenHoldings.invested.b),\n };\n return balance;\n };\n\n private getOrcaTokensBalances = (\n strategy: WhirlpoolStrategy,\n pool: Whirlpool,\n position: Position,\n mode: 'DEPOSIT' | 'WITHDRAW' = 'WITHDRAW'\n ): TokenHoldings => {\n const quote = getRemoveLiquidityQuote(\n {\n positionAddress: strategy.position,\n liquidity: position.liquidity,\n slippageTolerance: Percentage.fromFraction(0, 1000),\n sqrtPrice: pool.sqrtPrice,\n tickLowerIndex: position.tickLowerIndex,\n tickUpperIndex: position.tickUpperIndex,\n tickCurrentIndex: pool.tickCurrentIndex,\n },\n mode === 'DEPOSIT'\n );\n const aAvailable = new Decimal(strategy.tokenAAmounts.toString());\n const bAvailable = new Decimal(strategy.tokenBAmounts.toString());\n const aInvested = new Decimal(quote.estTokenA.toString());\n const bInvested = new Decimal(quote.estTokenB.toString());\n\n const holdings: TokenHoldings = {\n available: {\n a: aAvailable,\n b: bAvailable,\n },\n invested: {\n a: aInvested,\n b: bInvested,\n },\n };\n\n return holdings;\n };\n\n /**\n * Get the strategies share data (price + balances) of the Kamino whirlpool strategies that match the filters\n * @param strategyFilters\n */\n getStrategyShareDataForStrategies = async (\n strategyFilters: StrategiesFilters\n ): Promise<Array<ShareDataWithAddress>> => {\n // weird name of method, but want to keep this method backwards compatible and not rename it\n return this.getStrategiesShareData(strategyFilters);\n };\n\n /**\n * Get the strategy share price of the specified Kamino whirlpool strategy\n * @param strategy\n */\n getStrategySharePrice = async (strategy: PublicKey | StrategyWithAddress): Promise<Decimal> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n const sharesFactor = Decimal.pow(10, strategyState.strategy.sharesMintDecimals.toString());\n const sharesIssued = new Decimal(strategyState.strategy.sharesIssued.toString());\n const balances = await this.getStrategyBalances(strategyState.strategy);\n if (sharesIssued.isZero()) {\n return new Decimal(1);\n } else {\n return balances.computedHoldings.totalSum.div(sharesIssued).mul(sharesFactor);\n }\n };\n\n private getTokenAccountBalance = async (tokenAccount: PublicKey): Promise<Decimal> => {\n const tokenAccountBalance = await this._connection.getTokenAccountBalance(tokenAccount);\n if (!tokenAccountBalance.value) {\n throw new Error(`Could not get token account balance for ${tokenAccount.toString()}.`);\n }\n return new Decimal(tokenAccountBalance.value.uiAmountString!);\n };\n\n /**\n * Get the balance of a token account or 0 if it doesn't exist\n * @param tokenAccount\n */\n private getTokenAccountBalanceOrZero = async (tokenAccount: PublicKey): Promise<Decimal> => {\n const tokenAccountExists = await checkIfAccountExists(this._connection, tokenAccount);\n if (tokenAccountExists) {\n return await this.getTokenAccountBalance(tokenAccount);\n } else {\n return new Decimal(0);\n }\n };\n\n private getStrategyBalances = async (\n strategy: WhirlpoolStrategy,\n scopePrices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const collateralInfos = await this.getCollateralInfos();\n if (strategy.strategyDex.toNumber() == dexToNumber('ORCA')) {\n return this.getStrategyBalancesOrca(strategy, collateralInfos, scopePrices);\n } else if (strategy.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n return this.getStrategyBalancesRaydium(strategy, collateralInfos, scopePrices);\n } else if (strategy.strategyDex.toNumber() == dexToNumber('METEORA')) {\n return this.getStrategyBalancesMeteora(strategy, collateralInfos, scopePrices);\n } else {\n throw new Error(`Invalid dex ${strategy.strategyDex.toString()}`);\n }\n };\n\n private getStrategyTokensBalances = async (\n strategy: WhirlpoolStrategy,\n mode: 'DEPOSIT' | 'WITHDRAW' = 'WITHDRAW'\n ): Promise<TokenHoldings> => {\n if (strategy.strategyDex.toNumber() == dexToNumber('ORCA')) {\n const [whirlpoolAcc, positionAcc] = await this.getConnection().getMultipleAccountsInfo([\n strategy.pool,\n strategy.position,\n ]);\n if (!whirlpoolAcc) {\n throw Error(`Could not fetch Orca whirlpool state with pubkey ${strategy.pool.toString()}`);\n }\n if (!positionAcc) {\n throw Error(`Could not fetch Orca whirlpool position state with pubkey ${strategy.position.toString()}`);\n }\n const [whirlpool, position] = await Promise.all([\n Whirlpool.decode(whirlpoolAcc.data),\n Position.decode(positionAcc.data),\n ]);\n return this.getOrcaTokensBalances(strategy, whirlpool, position, mode);\n } else if (strategy.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n const [poolStateAcc, positionAcc] = await this.getConnection().getMultipleAccountsInfo([\n strategy.pool,\n strategy.position,\n ]);\n if (!poolStateAcc) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${strategy.pool.toString()}`);\n }\n if (!positionAcc) {\n throw Error(`Could not fetch Raydium position state with pubkey ${strategy.position.toString()}`);\n }\n const [poolState, position] = await Promise.all([\n PoolState.decode(poolStateAcc.data),\n PersonalPositionState.decode(positionAcc.data),\n ]);\n return this.getRaydiumTokensBalances(strategy, poolState, position, mode);\n } else if (strategy.strategyDex.toNumber() == dexToNumber('METEORA')) {\n return this.getMeteoraTokensBalances(strategy);\n } else {\n throw new Error(`Invalid dex ${strategy.strategyDex.toString()}`);\n }\n };\n\n /**\n * Get amount of specified token in all Kamino live strategies\n * @param tokenMint token mint pubkey\n */\n getTotalTokensInStrategies = async (tokenMint: PublicKey | string): Promise<TotalStrategyVaultTokens> => {\n const strategies = await this.getStrategiesShareData({ strategyCreationStatus: 'LIVE' });\n let totalTokenAmount = new Decimal(0);\n const vaults: StrategyVaultTokens[] = [];\n for (const { strategy, address, shareData } of strategies) {\n const aTotal = shareData.balance.computedHoldings.invested.a.plus(shareData.balance.computedHoldings.available.a);\n const bTotal = shareData.balance.computedHoldings.invested.b.plus(shareData.balance.computedHoldings.available.b);\n let amount = new Decimal(0);\n if (strategy.tokenAMint.equals(new PublicKey(tokenMint)) && aTotal.greaterThan(0)) {\n amount = aTotal;\n } else if (strategy.tokenBMint.equals(new PublicKey(tokenMint)) && bTotal.greaterThan(0)) {\n amount = bTotal;\n }\n if (amount.greaterThan(0)) {\n totalTokenAmount = totalTokenAmount.plus(amount);\n vaults.push({\n address: address,\n frontendUrl: `${FRONTEND_KAMINO_STRATEGY_URL}/${address}`,\n amount,\n });\n }\n }\n return { totalTokenAmount, vaults, timestamp: new Date() };\n };\n\n getAccountOwner = async (pk: PublicKey): Promise<PublicKey> => {\n const acc = await this.getConnection().getAccountInfo(pk);\n if (acc == null) {\n throw Error(`Could not fetch mint ${pk.toString()}`);\n }\n return acc.owner;\n };\n\n private getStrategyBalancesOrca = async (\n strategy: WhirlpoolStrategy,\n collateralInfos: CollateralInfo[],\n scopePrices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const [whirlpoolAcc, positionAcc] = await this.getConnection().getMultipleAccountsInfo([\n strategy.pool,\n strategy.position,\n ]);\n if (!whirlpoolAcc) {\n throw Error(`Could not fetch Orca whirlpool state with pubkey ${strategy.pool.toString()}`);\n }\n if (!positionAcc) {\n throw Error(`Could not fetch Orca whirlpool position state with pubkey ${strategy.position.toString()}`);\n }\n const [whirlpool, position] = await Promise.all([\n Whirlpool.decode(whirlpoolAcc.data),\n Position.decode(positionAcc.data),\n ]);\n\n return this.getOrcaBalances(strategy, whirlpool, position, collateralInfos, scopePrices);\n };\n\n private getStrategyBalancesRaydium = async (\n strategy: WhirlpoolStrategy,\n collateralInfos: CollateralInfo[],\n scopePrices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const [poolStateAcc, positionAcc] = await this.getConnection().getMultipleAccountsInfo([\n strategy.pool,\n strategy.position,\n ]);\n if (!poolStateAcc) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${strategy.pool.toString()}`);\n }\n if (!positionAcc) {\n throw Error(`Could not fetch Raydium position state with pubkey ${strategy.position.toString()}`);\n }\n const [poolState, position] = await Promise.all([\n PoolState.decode(poolStateAcc.data),\n PersonalPositionState.decode(positionAcc.data),\n ]);\n\n return this.getRaydiumBalances(strategy, poolState, position, collateralInfos, scopePrices);\n };\n\n private getStrategyBalancesMeteora = async (\n strategy: WhirlpoolStrategy,\n collateralInfos: CollateralInfo[],\n scopePrices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const [poolStateAcc, positionAcc] = await this.getConnection().getMultipleAccountsInfo([\n strategy.pool,\n strategy.position,\n ]);\n if (!poolStateAcc) {\n throw Error(`Could not fetch Meteora pool state with pubkey ${strategy.pool.toString()}`);\n }\n if (!positionAcc) {\n throw Error(`Could not fetch Meteora position state with pubkey ${strategy.position.toString()}`);\n }\n\n try {\n const [poolState, position] = await Promise.all([\n LbPair.decode(poolStateAcc.data),\n PositionV2.decode(positionAcc.data),\n ]);\n\n return this.getMeteoraBalances(strategy, poolState, position, collateralInfos, scopePrices);\n } catch (e) {\n const poolState = LbPair.decode(poolStateAcc.data);\n return this.getMeteoraBalances(strategy, poolState, undefined, collateralInfos, scopePrices);\n }\n };\n\n private getStrategyHoldingsUsd = (\n aAvailable: Decimal,\n bAvailable: Decimal,\n aInvested: Decimal,\n bInvested: Decimal,\n decimalsA: Decimal,\n decimalsB: Decimal,\n aPrice: Decimal,\n bPrice: Decimal\n ): Holdings => {\n const aAvailableScaled = aAvailable.div(Decimal.pow(10, decimalsA));\n const bAvailableScaled = bAvailable.div(Decimal.pow(10, decimalsB));\n\n const aInvestedScaled = aInvested.div(Decimal.pow(10, decimalsA));\n const bInvestedScaled = bInvested.div(Decimal.pow(10, decimalsB));\n\n const availableUsd = aAvailableScaled.mul(aPrice).add(bAvailableScaled.mul(bPrice));\n const investedUsd = aInvestedScaled.mul(aPrice).add(bInvestedScaled.mul(bPrice));\n\n return {\n available: {\n a: aAvailableScaled,\n b: bAvailableScaled,\n },\n availableUsd: availableUsd,\n invested: {\n a: aInvestedScaled,\n b: bInvestedScaled,\n },\n investedUsd: investedUsd,\n totalSum: availableUsd.add(investedUsd),\n };\n };\n\n getAllOraclePrices = (): Promise<OraclePrices> => this._scope.getOraclePrices();\n\n /**\n * Get all Kamino token spot and twap prices\n * @param oraclePrices (optional) Scope Oracle prices\n * @param collateralInfos (optional) Kamino Collateral Infos\n */\n getAllPrices = async (oraclePrices?: OraclePrices, collateralInfos?: CollateralInfo[]): Promise<KaminoPrices> => {\n // todo: make MintToPriceMap have Pubkey as key\n const spotPrices: MintToPriceMap = {};\n const twaps: MintToPriceMap = {};\n ({ oraclePrices, collateralInfos } = await this.getOraclePricesAndCollateralInfos(oraclePrices, collateralInfos));\n for (const collateralInfo of collateralInfos) {\n if (collateralInfo.scopePriceChain && Scope.isScopeChainValid(collateralInfo.scopePriceChain)) {\n const collInfoMintString = collateralInfo.mint.toString();\n const spotPrice = await this._scope.getPriceFromChain(collateralInfo.scopePriceChain, oraclePrices);\n spotPrices[collInfoMintString] = {\n price: spotPrice.price,\n name: getTokenNameFromCollateralInfo(collateralInfo),\n };\n\n const filteredTwapChain = collateralInfo?.scopeTwapPriceChain?.filter((x) => x > 0);\n if (filteredTwapChain && Scope.isScopeChainValid(filteredTwapChain)) {\n const twap = await this._scope.getPriceFromChain(filteredTwapChain, oraclePrices);\n twaps[collInfoMintString] = {\n price: twap.price,\n name: getTokenNameFromCollateralInfo(collateralInfo),\n };\n }\n }\n }\n return { spot: spotPrices, twap: twaps };\n };\n\n private async getOraclePricesAndCollateralInfos(\n oraclePrices?: OraclePrices,\n collateralInfos?: CollateralInfo[]\n ): Promise<OraclePricesAndCollateralInfos> {\n if (!oraclePrices) {\n oraclePrices = await this.getAllOraclePrices();\n }\n if (!collateralInfos) {\n collateralInfos = await this.getCollateralInfos();\n }\n return { oraclePrices, collateralInfos };\n }\n\n /**\n * Get the prices of all tokens in the specified strategy, or null if the reward token does not exist\n * @param strategy\n * @param collateralInfos\n * @param scopePrices\n */\n getStrategyPrices = async (\n strategy: WhirlpoolStrategy,\n collateralInfos: CollateralInfo[],\n scopePrices?: OraclePrices\n ): Promise<StrategyPrices> => {\n const tokenA = collateralInfos[strategy.tokenACollateralId.toNumber()];\n const tokenB = collateralInfos[strategy.tokenBCollateralId.toNumber()];\n const rewardToken0 = collateralInfos[strategy.reward0CollateralId.toNumber()];\n const rewardToken1 = collateralInfos[strategy.reward1CollateralId.toNumber()];\n const rewardToken2 = collateralInfos[strategy.reward2CollateralId.toNumber()];\n\n let prices: OraclePrices;\n if (scopePrices) {\n prices = scopePrices;\n } else {\n prices = await this._scope.getOraclePrices({ prices: strategy.scopePrices });\n }\n const aPrice = await this._scope.getPriceFromChain(tokenA.scopePriceChain, prices);\n const bPrice = await this._scope.getPriceFromChain(tokenB.scopePriceChain, prices);\n const tokenATwap = stripTwapZeros(tokenA.scopeTwapPriceChain);\n const tokenBTwap = stripTwapZeros(tokenB.scopeTwapPriceChain);\n const aTwapPrice = Scope.isScopeChainValid(tokenATwap)\n ? await this._scope.getPriceFromChain(tokenATwap, prices)\n : null;\n const bTwapPrice = Scope.isScopeChainValid(tokenBTwap)\n ? await this._scope.getPriceFromChain(tokenBTwap, prices)\n : null;\n\n const reward0Price =\n strategy.reward0Decimals.toNumber() !== 0 && Scope.isScopeChainValid(rewardToken0.scopePriceChain)\n ? await this._scope.getPriceFromChain(rewardToken0.scopePriceChain, prices)\n : null;\n const reward1Price =\n strategy.reward1Decimals.toNumber() !== 0 && Scope.isScopeChainValid(rewardToken1.scopePriceChain)\n ? await this._scope.getPriceFromChain(rewardToken1.scopePriceChain, prices)\n : null;\n const reward2Price =\n strategy.reward2Decimals.toNumber() !== 0 && Scope.isScopeChainValid(rewardToken2.scopePriceChain)\n ? await this._scope.getPriceFromChain(rewardToken2.scopePriceChain, prices)\n : null;\n\n return {\n aPrice: aPrice.price,\n bPrice: bPrice.price,\n aTwapPrice: aTwapPrice?.price ?? null,\n bTwapPrice: bTwapPrice?.price ?? null,\n reward0Price: reward0Price?.price ?? null,\n reward1Price: reward1Price?.price ?? null,\n reward2Price: reward2Price?.price ?? null,\n };\n };\n\n /**\n * Get all token accounts for the specified share mint\n */\n getShareTokenAccounts = (shareMint: PublicKey) => {\n //how to get all token accounts for specific mint: https://spl.solana.com/token#finding-all-token-accounts-for-a-specific-mint\n //get it from the hardcoded token program and create a filter with the actual mint address\n //datasize:165 filter selects all token accounts, memcmp filter selects based on the mint address withing each token account\n return this._connection.getParsedProgramAccounts(TOKEN_PROGRAM_ID, {\n filters: [{ dataSize: 165 }, { memcmp: { offset: 0, bytes: shareMint.toBase58() } }],\n });\n };\n\n /**\n * Get all token accounts for the specified wallet\n */\n getAllTokenAccounts = (wallet: PublicKey) => {\n //how to get all token accounts for specific wallet: https://spl.solana.com/token#finding-all-token-accounts-for-a-wallet\n return this._connection.getParsedProgramAccounts(TOKEN_PROGRAM_ID, {\n filters: [{ dataSize: 165 }, { memcmp: { offset: 32, bytes: wallet.toString() } }],\n });\n };\n\n /**\n * Get all token accounts that are holding a specific Kamino whirlpool strategy\n */\n getStrategyTokenAccounts = async (strategy: PublicKey | StrategyWithAddress) => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n return this.getShareTokenAccounts(strategyState.strategy.sharesMint);\n };\n\n /**\n * Get strategy range in which liquidity is deposited\n */\n getStrategyRange = async (strategy: PublicKey | StrategyWithAddress): Promise<PositionRange> => {\n const stratWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n\n if (stratWithAddress.strategy.strategyDex.toNumber() == dexToNumber('ORCA')) {\n return this.getStrategyRangeOrca(strategy);\n } else if (stratWithAddress.strategy.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n return this.getStrategyRangeRaydium(strategy);\n } else if (stratWithAddress.strategy.strategyDex.toNumber() == dexToNumber('METEORA')) {\n return this.getStrategyRangeMeteora(strategy);\n } else {\n throw Error(`Dex {stratWithAddress.strategy.strategyDex.toNumber()} not supported`);\n }\n };\n\n getStrategyRangeOrca = async (strategy: PublicKey | StrategyWithAddress): Promise<PositionRange> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n if (strategyState.position == PublicKey.default) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n } else {\n return this.getPositionRangeOrca(\n strategyState.position,\n strategyState.tokenAMintDecimals.toNumber(),\n strategyState.tokenBMintDecimals.toNumber()\n );\n }\n };\n\n getStrategyRangeRaydium = async (strategy: PublicKey | StrategyWithAddress): Promise<PositionRange> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n if (strategyState.position == PublicKey.default) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n } else {\n return this.getPositionRangeRaydium(\n strategyState.position,\n strategyState.tokenAMintDecimals.toNumber(),\n strategyState.tokenBMintDecimals.toNumber()\n );\n }\n };\n\n getStrategyRangeMeteora = async (strategy: PublicKey | StrategyWithAddress): Promise<PositionRange> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n if (strategyState.position == PublicKey.default) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n } else {\n return this.getPositionRangeMeteora(\n strategyState.position,\n strategyState.tokenAMintDecimals.toNumber(),\n strategyState.tokenBMintDecimals.toNumber()\n );\n }\n };\n\n getPositionRange = async (\n dex: Dex,\n position: PublicKey,\n decimalsA: number,\n decimalsB: number\n ): Promise<PositionRange> => {\n if (dex == 'ORCA') {\n return this.getPositionRangeOrca(position, decimalsA, decimalsB);\n } else if (dex == 'RAYDIUM') {\n return this.getPositionRangeRaydium(position, decimalsA, decimalsB);\n } else if (dex == 'METEORA') {\n return this.getPositionRangeMeteora(position, decimalsA, decimalsB);\n } else {\n throw Error(`Unsupported dex ${dex}`);\n }\n };\n\n getPositionRangeOrca = async (\n positionPk: PublicKey,\n decimalsA: number,\n decimalsB: number\n ): Promise<PositionRange> => {\n if (positionPk.equals(PublicKey.default)) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const position = await Position.fetch(this._connection, positionPk);\n if (!position) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const lowerPrice = tickIndexToPrice(position.tickLowerIndex, decimalsA, decimalsB);\n const upperPrice = tickIndexToPrice(position.tickUpperIndex, decimalsA, decimalsB);\n\n const positionRange: PositionRange = { lowerPrice, upperPrice };\n\n return positionRange;\n };\n\n getPositionRangeRaydium = async (\n positionPk: PublicKey,\n decimalsA: number,\n decimalsB: number\n ): Promise<PositionRange> => {\n if (positionPk.equals(PublicKey.default)) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const position = await PersonalPositionState.fetch(this._connection, positionPk);\n if (!position) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const lowerPrice = sqrtPriceX64ToPrice(\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex),\n decimalsA,\n decimalsB\n );\n\n const upperPrice = sqrtPriceX64ToPrice(\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex),\n decimalsA,\n decimalsB\n );\n\n const positionRange: PositionRange = { lowerPrice, upperPrice };\n\n return positionRange;\n };\n\n getPositionRangeMeteora = async (\n positionPk: PublicKey,\n decimalsA: number,\n decimalsB: number\n ): Promise<PositionRange> => {\n if (positionPk.equals(PublicKey.default)) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const position = await PositionV2.fetch(this._connection, positionPk);\n if (!position) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const pool = await LbPair.fetch(this._connection, position.lbPair);\n if (!pool) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const lowerPrice = getPriceOfBinByBinIdWithDecimals(position.lowerBinId, pool.binStep, decimalsA, decimalsB);\n\n const upperPrice = getPriceOfBinByBinIdWithDecimals(position.upperBinId, pool.binStep, decimalsA, decimalsB);\n\n const positionRange: PositionRange = { lowerPrice, upperPrice };\n\n return positionRange;\n };\n\n /**\n * Get all strategy token holders\n * @param strategy\n */\n getStrategyHolders = async (strategy: PublicKey | StrategyWithAddress): Promise<StrategyHolder[]> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n const tokenAccounts = await this.getStrategyTokenAccounts(strategyState);\n const result: StrategyHolder[] = [];\n for (const tokenAccount of tokenAccounts) {\n const accountData = tokenAccount.account.data as Data;\n result.push({\n holderPubkey: new PublicKey(accountData.parsed.info.owner),\n amount: new Decimal(accountData.parsed.info.tokenAmount.uiAmountString),\n });\n }\n return result;\n };\n\n /**\n * Get a list of Orca whirlpools from public keys\n * @param whirlpools\n */\n getWhirlpools = async (whirlpools: PublicKey[]): Promise<PubkeyHashMap<PublicKey, Whirlpool | null>> => {\n // todo: make this map have Pubkey as key\n const whirlpoolMap = new PubkeyHashMap<PublicKey, Whirlpool | null>();\n\n const whirlpoolStrings = whirlpools.map((whirlpool) => whirlpool.toBase58());\n const uniqueWhirlpools = [...new Set(whirlpoolStrings)].map((value) => new PublicKey(value));\n if (uniqueWhirlpools.length === 1) {\n const whirlpool = await this.getWhirlpoolByAddress(whirlpools[0]);\n whirlpoolMap.set(whirlpools[0], whirlpool);\n return whirlpoolMap;\n }\n const fetched = await batchFetch(uniqueWhirlpools, (chunk) => Whirlpool.fetchMultiple(this._connection, chunk));\n fetched.reduce((map, whirlpool, i) => {\n whirlpoolMap.set(uniqueWhirlpools[i], whirlpool);\n map[uniqueWhirlpools[i].toBase58()] = whirlpool;\n return map;\n }, {});\n return whirlpoolMap;\n };\n\n /**\n * Get a list of Orca positions from public keys\n * @param positions\n */\n getOrcaPositions = async (positions: PublicKey[]): Promise<(Position | null)[]> => {\n const nonDefaults = positions.filter((value) => value.toBase58() !== PublicKey.default.toBase58());\n const fetched = await batchFetch(nonDefaults, (chunk) => Position.fetchMultiple(this._connection, chunk));\n const fetchedMap: Record<string, Position | null> = fetched.reduce((map, position, i) => {\n map[nonDefaults[i].toBase58()] = position;\n return map;\n }, {});\n return positions.map((position) => fetchedMap[position.toBase58()] || null);\n };\n\n /**\n * Get a list of Raydium positions from public keys\n * @param positions\n */\n getRaydiumPositions = async (positions: PublicKey[]): Promise<(PersonalPositionState | null)[]> => {\n const nonDefaults = positions.filter((value) => value.toBase58() !== PublicKey.default.toBase58());\n const fetched = await batchFetch(nonDefaults, (chunk) =>\n PersonalPositionState.fetchMultiple(this._connection, chunk)\n );\n const fetchedMap: Record<string, PersonalPositionState | null> = fetched.reduce((map, position, i) => {\n map[nonDefaults[i].toBase58()] = position;\n return map;\n }, {});\n return positions.map((position) => fetchedMap[position.toBase58()] || null);\n };\n\n getMeteoraPositions = async (positions: PublicKey[]): Promise<(PositionV2 | null)[]> => {\n const nonDefaults = positions.filter((value) => !value.equals(PublicKey.default));\n const fetched = await batchFetch(nonDefaults, (chunk) => PositionV2.fetchMultiple(this._connection, chunk));\n const fetchedMap: Record<string, PositionV2 | null> = fetched.reduce((map, position, i) => {\n map[nonDefaults[i].toBase58()] = position;\n return map;\n }, {});\n return positions.map((position) => fetchedMap[position.toBase58()] || null);\n };\n\n /**\n * Get whirlpool from public key\n * @param whirlpool pubkey of the orca whirlpool\n */\n getWhirlpoolByAddress = (whirlpool: PublicKey) => Whirlpool.fetch(this._connection, whirlpool);\n\n /**\n * Get a list of Raydium pools from public keys\n * @param pools\n */\n getRaydiumPools = async (pools: PublicKey[]): Promise<PubkeyHashMap<PublicKey, PoolState | null>> => {\n // todo: make this map have Pubkey as key\n const poolsMap = new PubkeyHashMap<PublicKey, PoolState | null>();\n\n const poolStrings = pools.map((pool) => pool.toBase58());\n const uniquePools = [...new Set(poolStrings)].map((value) => new PublicKey(value));\n if (uniquePools.length === 1) {\n const pool = await this.getRaydiumPoolByAddress(pools[0]);\n poolsMap.set(pools[0], pool);\n }\n const fetched = await batchFetch(uniquePools, (chunk) => PoolState.fetchMultiple(this._connection, chunk));\n fetched.reduce((map, whirlpool, i) => {\n poolsMap.set(uniquePools[i], whirlpool);\n return map;\n }, {});\n return poolsMap;\n };\n\n getMeteoraPools = async (pools: PublicKey[]): Promise<PubkeyHashMap<PublicKey, LbPair | null>> => {\n // todo: make this map have Pubkey as key\n const poolsMap = new PubkeyHashMap<PublicKey, LbPair | null>();\n\n const poolStrings = pools.map((pool) => pool.toBase58());\n const uniquePools = [...new Set(poolStrings)].map((value) => new PublicKey(value));\n if (uniquePools.length === 1) {\n const pool = await this.getMeteoraPoolByAddress(pools[0]);\n poolsMap.set(pools[0], pool);\n }\n const fetched = await batchFetch(uniquePools, (chunk) => LbPair.fetchMultiple(this._connection, chunk));\n fetched.reduce((map, whirlpool, i) => {\n poolsMap.set(uniquePools[i], whirlpool);\n return map;\n }, {});\n return poolsMap;\n };\n\n getRaydiumAmmConfig = (config: PublicKey) => AmmConfig.fetch(this._connection, config);\n\n /**\n * Get Raydium pool from public key\n * @param pool pubkey of the orca whirlpool\n */\n getRaydiumPoolByAddress = (pool: PublicKey) => PoolState.fetch(this._connection, pool);\n\n getMeteoraPoolByAddress = (pool: PublicKey) => LbPair.fetch(this._connection, pool);\n\n getEventAuthorityPDA = (dex: BN): PublicKey => {\n if (dex.toNumber() == dexToNumber('ORCA') || dex.toNumber() == dexToNumber('RAYDIUM')) {\n return this._kaminoProgramId;\n }\n\n if (dex.toNumber() == dexToNumber('METEORA')) {\n const [key, _] = PublicKey.findProgramAddressSync([Buffer.from('__event_authority')], METEORA_PROGRAM_ID);\n return key;\n }\n throw new Error('Invalid dex');\n };\n\n /**\n * Return transaction instruction to withdraw shares from a strategy owner (wallet) and get back token A and token B\n * @param strategy strategy public key\n * @param sharesAmount amount of shares (decimal representation), NOT in lamports\n * @param owner shares owner (wallet with shares)\n * @returns transaction instruction\n */\n withdrawShares = async (\n strategy: PublicKey | StrategyWithAddress,\n sharesAmount: Decimal,\n owner: PublicKey,\n sharesAtaBalance?: Decimal\n ): Promise<WithdrawShares> => {\n if (sharesAmount.lessThanOrEqualTo(0)) {\n throw Error('Shares amount cant be lower than or equal to 0.');\n }\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategy.strategyDex);\n const { treasuryFeeTokenAVault, treasuryFeeTokenBVault } = this.getTreasuryFeeVaultPDAs(\n strategyState.strategy.tokenAMint,\n strategyState.strategy.tokenBMint\n );\n\n const sharesAta = getAssociatedTokenAddress(strategyState.strategy.sharesMint, owner);\n const tokenAAta = getAssociatedTokenAddress(\n strategyState.strategy.tokenAMint,\n owner,\n true,\n keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n const tokenBAta = getAssociatedTokenAddress(\n strategyState.strategy.tokenBMint,\n owner,\n true,\n keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n\n const sharesAmountInLamports = sharesAmount.mul(\n new Decimal(10).pow(strategyState.strategy.sharesMintDecimals.toString())\n );\n\n const programId = getDexProgramId(strategyState.strategy);\n\n const args: WithdrawArgs = { sharesAmount: new BN(sharesAmountInLamports.floor().toString()) };\n const accounts: WithdrawAccounts = {\n user: owner,\n strategy: strategyState.address,\n globalConfig: strategyState.strategy.globalConfig,\n pool: strategyState.strategy.pool,\n position: strategyState.strategy.position,\n tickArrayLower: strategyState.strategy.tickArrayLower,\n tickArrayUpper: strategyState.strategy.tickArrayUpper,\n tokenAVault: strategyState.strategy.tokenAVault,\n tokenBVault: strategyState.strategy.tokenBVault,\n baseVaultAuthority: strategyState.strategy.baseVaultAuthority,\n poolTokenVaultA: strategyState.strategy.poolTokenVaultA,\n poolTokenVaultB: strategyState.strategy.poolTokenVaultB,\n tokenAAta: tokenAAta,\n tokenBAta: tokenBAta,\n userSharesAta: sharesAta,\n sharesMint: strategyState.strategy.sharesMint,\n treasuryFeeTokenAVault,\n treasuryFeeTokenBVault,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n positionTokenAccount: strategyState.strategy.positionTokenAccount,\n poolProgram: programId,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n tokenAMint: strategyState.strategy.tokenAMint,\n tokenBMint: strategyState.strategy.tokenBMint,\n eventAuthority,\n tokenATokenProgram: keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n };\n\n const withdrawIx = withdraw(args, accounts);\n let collectFeesAndRewardsIxns: TransactionInstruction[] = [];\n\n // for Raydium strats we need to collect fees and rewards before withdrawal\n // add rewards vaults accounts to withdraw\n const isRaydium = strategyState.strategy.strategyDex.toNumber() == dexToNumber('RAYDIUM');\n if (isRaydium) {\n const raydiumPosition = await PersonalPositionState.fetch(this._connection, strategyState.strategy.position);\n if (!raydiumPosition) {\n throw new Error('Position is not found');\n }\n\n collectFeesAndRewardsIxns = new Decimal(raydiumPosition.liquidity.toString()).gt(ZERO)\n ? [await this.collectFeesAndRewards(strategy, owner)]\n : [];\n\n const poolState = await this.getRaydiumPoolByAddress(strategyState.strategy.pool);\n if (!poolState) {\n throw new Error('Pool is not found');\n }\n\n withdrawIx.keys.push({\n pubkey: strategyState.strategy.raydiumProtocolPositionOrBaseVaultAuthority,\n isSigner: false,\n isWritable: true,\n });\n if (strategyState.strategy.reward0Decimals.toNumber() > 0) {\n withdrawIx.keys = withdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[0].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.strategy.reward0Vault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[0].tokenMint, isSigner: false, isWritable: true },\n ]);\n }\n if (strategyState.strategy.reward1Decimals.toNumber() > 0) {\n withdrawIx.keys = withdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[1].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.strategy.reward1Vault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[1].tokenMint, isSigner: false, isWritable: true },\n ]);\n }\n if (strategyState.strategy.reward2Decimals.toNumber() > 0) {\n withdrawIx.keys = withdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[2].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.strategy.reward2Vault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[2].tokenMint, isSigner: false, isWritable: true },\n ]);\n }\n }\n\n const res: WithdrawShares = { prerequisiteIxs: collectFeesAndRewardsIxns, withdrawIx };\n // if we withdraw everything also close the shares ATA\n if (sharesAtaBalance && sharesAtaBalance.lte(sharesAmount)) {\n res.closeSharesAtaIx = Token.createCloseAccountInstruction(TOKEN_PROGRAM_ID, sharesAta, owner, owner, []);\n }\n\n return res;\n };\n\n /**\n * Get transaction instructions that create associated token accounts if they don't exist (token A, B and share)\n * @param owner wallet owner (shareholder)\n * @param strategyState kamino strategy state\n * @param tokenAData token A data of the owner's wallet\n * @param tokenAAta associated token account for token B\n * @param tokenBData token B data of the owner's wallet\n * @param tokenBAta associated token account for token B\n * @param sharesMintData shares data of the owner's wallet\n * @param sharesAta associated token account for shares\n * @returns list of transaction instructions (empty if all accounts already exist)\n */\n getCreateAssociatedTokenAccountInstructionsIfNotExist = async (\n owner: PublicKey,\n strategyState: StrategyWithAddress,\n tokenAData: AccountInfo<Buffer> | null,\n tokenAAta: PublicKey,\n tokenBData: AccountInfo<Buffer> | null,\n tokenBAta: PublicKey,\n sharesMintData: AccountInfo<Buffer> | null,\n sharesAta: PublicKey\n ): Promise<TransactionInstruction[]> => {\n const instructions: TransactionInstruction[] = [];\n if (!tokenAData) {\n instructions.push(\n createAssociatedTokenAccountInstruction(\n owner,\n tokenAAta,\n owner,\n strategyState.strategy.tokenAMint,\n tokenAData!.owner\n )\n );\n }\n if (!tokenBData) {\n instructions.push(\n createAssociatedTokenAccountInstruction(\n owner,\n tokenBAta,\n owner,\n strategyState.strategy.tokenBMint,\n tokenBData!.owner\n )\n );\n }\n if (!sharesMintData) {\n instructions.push(\n createAssociatedTokenAccountInstruction(owner, sharesAta, owner, strategyState.strategy.sharesMint)\n );\n }\n return instructions;\n };\n\n /**\n * Check if strategy has already been fetched (is StrategyWithAddress type) and return that,\n * otherwise fetch it first from PublicKey and return it\n * @param strategy\n * @private\n */\n private getStrategyStateIfNotFetched = async (\n strategy: PublicKey | StrategyWithAddress\n ): Promise<StrategyWithAddress> => {\n const hasStrategyBeenFetched = (object: PublicKey | StrategyWithAddress): object is StrategyWithAddress => {\n return 'strategy' in object;\n };\n\n if (hasStrategyBeenFetched(strategy)) {\n return strategy;\n } else {\n const strategyState = await this.getStrategyByAddress(strategy);\n if (!strategyState) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n return { strategy: strategyState, address: strategy };\n }\n };\n\n private getWhirlpoolStateIfNotFetched = async (\n whirlpool: PublicKey | WhirlpoolWithAddress\n ): Promise<WhirlpoolWithAddress> => {\n const hasWhirlpoolBeenFetched = (object: PublicKey | WhirlpoolWithAddress): object is WhirlpoolWithAddress => {\n return 'whirlpool' in object;\n };\n\n if (hasWhirlpoolBeenFetched(whirlpool)) {\n return whirlpool;\n } else {\n const whirlpoolState = await this.getWhirlpoolByAddress(whirlpool);\n if (!whirlpoolState) {\n throw Error(`Could not fetch whirlpool state with pubkey ${whirlpool.toString()}`);\n }\n return { whirlpool: whirlpoolState, address: whirlpool };\n }\n };\n\n private getMeteoraStateIfNotFetched = async (lbPair: PublicKey | LbPairWithAddress): Promise<LbPairWithAddress> => {\n const hasLbPairBeenFetched = (object: PublicKey | LbPairWithAddress): object is LbPairWithAddress => {\n return 'lbPair' in object;\n };\n\n if (hasLbPairBeenFetched(lbPair)) {\n return lbPair;\n } else {\n const lbPairState = await this.getMeteoraPoolByAddress(lbPair);\n if (!lbPairState) {\n throw Error(`Could not fetch meteora lb pair state with pubkey ${lbPair.toString()}`);\n }\n return { pool: lbPairState, address: lbPair };\n }\n };\n\n /**\n * Get treasury fee vault program addresses from for token A and B mints\n * @param tokenAMint\n * @param tokenBMint\n * @private\n */\n private getTreasuryFeeVaultPDAs = (tokenAMint: PublicKey, tokenBMint: PublicKey): TreasuryFeeVault => {\n const [treasuryFeeTokenAVault, _treasuryFeeTokenAVaultBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('treasury_fee_vault'), tokenAMint.toBuffer()],\n this.getProgramID()\n );\n const [treasuryFeeTokenBVault, _treasuryFeeTokenBVaultBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('treasury_fee_vault'), tokenBMint.toBuffer()],\n this.getProgramID()\n );\n const [treasuryFeeVaultAuthority, _treasuryFeeVaultAuthorityBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('treasury_fee_vault_authority')],\n this.getProgramID()\n );\n return { treasuryFeeTokenAVault, treasuryFeeTokenBVault, treasuryFeeVaultAuthority };\n };\n\n /**\n * Get a transaction instruction to withdraw all strategy shares from a specific wallet into token A and B\n * @param strategy public key of the strategy\n * @param owner public key of the owner (shareholder)\n * @returns transaction instruction or null if no shares or no sharesMint ATA present in the wallet\n */\n withdrawAllShares = async (\n strategy: PublicKey | StrategyWithAddress,\n owner: PublicKey\n ): Promise<WithdrawShares | null> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n const [sharesAta, sharesData] = await getAssociatedTokenAddressAndData(\n this._connection,\n strategyState.strategy.sharesMint,\n owner\n );\n if (!sharesData) {\n return null;\n }\n const balance = await this.getTokenAccountBalance(sharesAta);\n if (balance.isZero()) {\n return null;\n }\n return this.withdrawShares(strategyState, balance, owner);\n };\n\n /**\n * Get all the accounts needed by the deposit tx, without the swap.\n * @param strategy Kamino strategy public key or on-chain object\n * @param owner Owner (wallet, shareholder) public key\n * @returns list of pubkeys needed for the deposit transaction\n */\n getAllDepositAccounts = async (strategy: PublicKey | StrategyWithAddress, owner: PublicKey): Promise<PublicKey[]> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n\n const globalConfig = await GlobalConfig.fetch(this._connection, strategyState.strategy.globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${strategyState.strategy.globalConfig.toString()}`);\n }\n\n const sharesAta = getAssociatedTokenAddress(strategyState.strategy.sharesMint, owner);\n const tokenAAta = getAssociatedTokenAddress(\n strategyState.strategy.tokenAMint,\n owner,\n true,\n keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n const tokenBAta = getAssociatedTokenAddress(\n strategyState.strategy.tokenBMint,\n owner,\n true,\n keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n\n const accounts = [\n owner,\n strategyState.address,\n strategyState.strategy.globalConfig,\n strategyState.strategy.pool,\n strategyState.strategy.position,\n strategyState.strategy.tokenAVault,\n strategyState.strategy.tokenBVault,\n strategyState.strategy.baseVaultAuthority,\n strategyState.strategy.tokenAMint,\n strategyState.strategy.tokenBMint,\n sharesAta,\n tokenAAta,\n tokenBAta,\n strategyState.strategy.sharesMint,\n strategyState.strategy.sharesMintAuthority,\n strategyState.strategy.scopePrices,\n globalConfig.tokenInfos,\n TOKEN_PROGRAM_ID,\n keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID),\n keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n SYSVAR_INSTRUCTIONS_PUBKEY,\n strategyState.strategy.tickArrayLower,\n strategyState.strategy.tickArrayUpper,\n ];\n\n return accounts;\n };\n\n /**\n * Get transaction instruction to deposit token A and B into a strategy.\n * @param strategy Kamino strategy public key or on-chain object\n * @param amountA Amount of token A to deposit into strategy\n * @param amountB Amount of token B to deposit into strategy\n * @param owner Owner (wallet, shareholder) public key\n * @returns transaction instruction for depositing tokens into a strategy\n */\n deposit = async (\n strategy: PublicKey | StrategyWithAddress,\n amountA: Decimal,\n amountB: Decimal,\n owner: PublicKey\n ): Promise<TransactionInstruction> => {\n if (amountA.lessThanOrEqualTo(0) && amountB.lessThanOrEqualTo(0)) {\n throw Error('Token A and B amount cant be lower than or equal to 0.');\n }\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n\n const globalConfig = await this.getGlobalConfigState(strategyState.strategy.globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${strategyState.strategy.globalConfig.toString()}`);\n }\n\n const [sharesAta] = await getAssociatedTokenAddressAndData(\n this._connection,\n strategyState.strategy.sharesMint,\n owner\n );\n const [tokenAAta] = await getAssociatedTokenAddressAndData(\n this._connection,\n strategyState.strategy.tokenAMint,\n owner,\n keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n const [tokenBAta] = await getAssociatedTokenAddressAndData(\n this._connection,\n strategyState.strategy.tokenBMint,\n owner,\n keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n\n const lamportsA = amountA.mul(new Decimal(10).pow(strategyState.strategy.tokenAMintDecimals.toString()));\n const lamportsB = amountB.mul(new Decimal(10).pow(strategyState.strategy.tokenBMintDecimals.toString()));\n\n const depositArgs: DepositArgs = {\n tokenMaxA: new BN(lamportsA.floor().toString()),\n tokenMaxB: new BN(lamportsB.floor().toString()),\n };\n\n const depositAccounts: DepositAccounts = {\n user: owner,\n strategy: strategyState.address,\n globalConfig: strategyState.strategy.globalConfig,\n pool: strategyState.strategy.pool,\n position: strategyState.strategy.position,\n tokenAVault: strategyState.strategy.tokenAVault,\n tokenBVault: strategyState.strategy.tokenBVault,\n baseVaultAuthority: strategyState.strategy.baseVaultAuthority,\n tokenAAta,\n tokenBAta,\n tokenAMint: strategyState.strategy.tokenAMint,\n tokenBMint: strategyState.strategy.tokenBMint,\n userSharesAta: sharesAta,\n sharesMint: strategyState.strategy.sharesMint,\n sharesMintAuthority: strategyState.strategy.sharesMintAuthority,\n scopePrices: strategyState.strategy.scopePrices,\n tokenInfos: globalConfig.tokenInfos,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n tickArrayLower: strategyState.strategy.tickArrayLower,\n tickArrayUpper: strategyState.strategy.tickArrayUpper,\n tokenATokenProgram: keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n };\n\n return deposit(depositArgs, depositAccounts);\n };\n\n singleSidedDepositTokenA = async (\n strategy: PublicKey | StrategyWithAddress,\n amountToDeposit: Decimal,\n owner: PublicKey,\n slippageBps: Decimal,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution,\n swapIxsBuilder?: SwapperIxBuilder,\n initialUserTokenAtaBalances?: TokensBalances,\n priceAInB?: Decimal,\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas,\n onlyDirectRoutes?: boolean\n ): Promise<InstructionsWithLookupTables> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n\n const userTokenBalances = await profiler(\n this.getInitialUserTokenBalances(\n owner,\n strategyWithAddress.strategy.tokenAMint,\n strategyWithAddress.strategy.tokenBMint,\n initialUserTokenAtaBalances\n ),\n 'A-getInitialUserTokenBalances',\n []\n );\n\n const userTokenBalancesWithoutSolBalanace = {\n a: userTokenBalances.a,\n b: userTokenBalances.b,\n };\n\n // if any of the tokens is SOL, we need to read how much SOL the user has, not how much wSOL which is what getInitialUserTokenBalances returns\n if (isSOLMint(strategyWithAddress.strategy.tokenAMint)) {\n userTokenBalances.a = userTokenBalances.a?.add(\n lamportsToNumberDecimal(new Decimal(await this._connection.getBalance(owner)), DECIMALS_SOL)\n );\n }\n\n if (isSOLMint(strategyWithAddress.strategy.tokenBMint)) {\n userTokenBalances.b = userTokenBalances.b?.add(\n lamportsToNumberDecimal(new Decimal(await this._connection.getBalance(owner)), DECIMALS_SOL)\n );\n }\n\n if (!userTokenBalances.a || !userTokenBalances.b) {\n throw Error('Error reading user token balances');\n }\n\n const tokenAMinPostDepositBalance = userTokenBalances.a?.sub(amountToDeposit);\n const swapper: SwapperIxBuilder = swapIxsBuilder\n ? swapIxsBuilder\n : (\n input: DepositAmountsForSwap,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n user: PublicKey,\n slippageBps: Decimal,\n allAccounts: PublicKey[]\n ) =>\n this.getJupSwapIxsV6(\n input,\n tokenAMint,\n tokenBMint,\n user,\n slippageBps,\n false,\n allAccounts,\n profiler,\n onlyDirectRoutes\n );\n\n console.log('single sided deposit tokenA tokenAMinPostDepositBalance', tokenAMinPostDepositBalance);\n console.log('single sided deposit tokenA userTokenBalances.b', userTokenBalances.b);\n return await profiler(\n this.getSingleSidedDepositIxs(\n strategyWithAddress,\n collToLamportsDecimal(tokenAMinPostDepositBalance, strategyWithAddress.strategy.tokenAMintDecimals.toNumber()),\n collToLamportsDecimal(userTokenBalances.b, strategyWithAddress.strategy.tokenBMintDecimals.toNumber()),\n owner,\n slippageBps,\n swapper,\n profiler,\n userTokenBalancesWithoutSolBalanace,\n priceAInB,\n includeAtaIxns\n ),\n 'A-getSingleSidedDepositIxs',\n []\n );\n };\n\n singleSidedDepositTokenB = async (\n strategy: PublicKey | StrategyWithAddress,\n amountToDeposit: Decimal,\n owner: PublicKey,\n slippageBps: Decimal,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution,\n swapIxsBuilder?: SwapperIxBuilder,\n initialUserTokenAtaBalances?: TokensBalances,\n priceAInB?: Decimal,\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas,\n onlyDirectRoutes?: boolean\n ): Promise<InstructionsWithLookupTables> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n\n const userTokenBalances = await profiler(\n this.getInitialUserTokenBalances(\n owner,\n strategyWithAddress.strategy.tokenAMint,\n strategyWithAddress.strategy.tokenBMint,\n initialUserTokenAtaBalances\n ),\n 'A-getInitialUserTokenBalances',\n []\n );\n\n const userTokenBalancesWithoutSolBalanace = {\n a: userTokenBalances.a,\n b: userTokenBalances.b,\n };\n\n // if any of the tokens is SOL, we need to read how much SOL the user has, not how much wSOL which is what getInitialUserTokenBalances returns\n if (isSOLMint(strategyWithAddress.strategy.tokenAMint)) {\n userTokenBalances.a = userTokenBalances.a?.add(\n lamportsToNumberDecimal(new Decimal(await this._connection.getBalance(owner)), DECIMALS_SOL)\n );\n }\n\n if (isSOLMint(strategyWithAddress.strategy.tokenBMint)) {\n userTokenBalances.b = userTokenBalances.b?.add(\n lamportsToNumberDecimal(new Decimal(await this._connection.getBalance(owner)), DECIMALS_SOL)\n );\n }\n\n if (!userTokenBalances.a || !userTokenBalances.b) {\n throw Error('Error reading user token balances');\n }\n const tokenBMinPostDepositBalance = userTokenBalances.b.sub(amountToDeposit);\n const swapper: SwapperIxBuilder = swapIxsBuilder\n ? swapIxsBuilder\n : (\n input: DepositAmountsForSwap,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n user: PublicKey,\n slippageBps: Decimal,\n allAccounts: PublicKey[]\n ) =>\n this.getJupSwapIxsV6(\n input,\n tokenAMint,\n tokenBMint,\n user,\n slippageBps,\n false,\n allAccounts,\n profiler,\n onlyDirectRoutes\n );\n\n return await profiler(\n this.getSingleSidedDepositIxs(\n strategyWithAddress,\n collToLamportsDecimal(userTokenBalances.a, strategyWithAddress.strategy.tokenAMintDecimals.toNumber()),\n collToLamportsDecimal(tokenBMinPostDepositBalance, strategyWithAddress.strategy.tokenBMintDecimals.toNumber()),\n owner,\n slippageBps,\n swapper,\n profiler,\n userTokenBalancesWithoutSolBalanace,\n priceAInB,\n includeAtaIxns\n ),\n 'A-getSingleSidedDepositIxs',\n []\n );\n };\n\n getInitialUserTokenBalances = async (\n owner: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n initialUserTokenBalances?: MaybeTokensBalances\n ): Promise<TokensBalances> => {\n let initialUserTokenABalance = new Decimal(0);\n let initialUserTokenBBalance = new Decimal(0);\n\n if (initialUserTokenBalances?.a) {\n initialUserTokenABalance = initialUserTokenBalances.a;\n } else {\n const tokenATokenProgram = await this.getAccountOwner(tokenAMint);\n const [tokenAAta] = await getAssociatedTokenAddressAndData(\n this._connection,\n tokenAMint,\n owner,\n keyOrDefault(tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n\n const ataExists = await checkIfAccountExists(this._connection, tokenAAta);\n if (!ataExists) {\n initialUserTokenABalance = new Decimal(0);\n } else {\n initialUserTokenABalance = await this.getTokenAccountBalance(tokenAAta);\n }\n }\n\n if (initialUserTokenBalances?.b) {\n initialUserTokenBBalance = initialUserTokenBalances.b;\n } else {\n const tokenBTokenProgram = await this.getAccountOwner(tokenBMint);\n const [tokenBAta] = await getAssociatedTokenAddressAndData(\n this._connection,\n tokenBMint,\n owner,\n keyOrDefault(tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n\n const ataExists = await checkIfAccountExists(this._connection, tokenBAta);\n if (!ataExists) {\n initialUserTokenBBalance = new Decimal(0);\n } else {\n initialUserTokenBBalance = await this.getTokenAccountBalance(tokenBAta);\n }\n }\n\n return { a: initialUserTokenABalance, b: initialUserTokenBBalance };\n };\n\n private getSingleSidedDepositIxs = async (\n strategy: PublicKey | StrategyWithAddress,\n tokenAMinPostDepositBalanceLamports: Decimal,\n tokenBMinPostDepositBalanceLamports: Decimal,\n owner: PublicKey,\n swapSlippageBps: Decimal,\n swapIxsBuilder: SwapperIxBuilder,\n profiler: ProfiledFunctionExecution,\n initialUserTokenAtaBalances: TokensBalances,\n priceAInB?: Decimal, // not mandatory as it will be fetched from Jupyter\n includeAtaIxns: boolean = true // if true it includes create and close wsol and token atas,\n ): Promise<InstructionsWithLookupTables> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const strategyState = strategyWithAddress.strategy;\n\n let realTokenAMinPostDepositBalanceLamports = tokenAMinPostDepositBalanceLamports;\n let realTokenBMinPostDepositBalanceLamports = tokenBMinPostDepositBalanceLamports;\n if (\n (tokenAMinPostDepositBalanceLamports.lessThan(0) && !isSOLMint(strategyState.tokenAMint)) ||\n (tokenBMinPostDepositBalanceLamports.lessThan(0) && !isSOLMint(strategyState.tokenBMint))\n ) {\n throw Error('Token A or B post deposit amount cant be lower than 0.');\n }\n\n const sharesAta = getAssociatedTokenAddress(strategyState.sharesMint, owner);\n const tokenAAta = getAssociatedTokenAddress(\n strategyState.tokenAMint,\n owner,\n true,\n keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n const tokenBAta = getAssociatedTokenAddress(\n strategyState.tokenBMint,\n owner,\n true,\n keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n\n let tokenAAtaBalance = initialUserTokenAtaBalances.a;\n let tokenBAtaBalance = initialUserTokenAtaBalances.b;\n\n let aToDeposit = collToLamportsDecimal(tokenAAtaBalance, strategyState.tokenAMintDecimals.toNumber()).sub(\n tokenAMinPostDepositBalanceLamports\n );\n let bToDeposit = collToLamportsDecimal(tokenBAtaBalance, strategyState.tokenBMintDecimals.toNumber()).sub(\n tokenBMinPostDepositBalanceLamports\n );\n\n const cleanupIxs: TransactionInstruction[] = [];\n const createWsolAtasIxns: TransactionInstruction[] = [];\n\n if (isSOLMint(strategyState.tokenAMint)) {\n // read how much SOL the user has and calculate the amount to deposit and balance based on it\n const solBalance = new Decimal(await this._connection.getBalance(owner));\n const tokenAAtaBalanceLamports = collToLamportsDecimal(\n tokenAAtaBalance,\n strategyState.tokenAMintDecimals.toNumber()\n );\n const availableSol = solBalance.add(tokenAAtaBalanceLamports);\n const solToDeposit = availableSol.sub(tokenAMinPostDepositBalanceLamports);\n\n aToDeposit = solToDeposit;\n if (!aToDeposit.eq(ZERO)) {\n if (tokenAAtaBalanceLamports.lessThan(aToDeposit)) {\n tokenAAtaBalance = lamportsToNumberDecimal(aToDeposit, DECIMALS_SOL);\n }\n }\n\n const createWSolAtaIxns = await createWsolAtaIfMissing(\n this._connection,\n new Decimal(lamportsToNumberDecimal(solToDeposit, DECIMALS_SOL)),\n owner\n );\n\n // if the wSOL ata is not created, expect to have 0 remaining after the deposit\n const wSolAtaExists = await checkIfAccountExists(this._connection, createWSolAtaIxns.ata);\n if (!wSolAtaExists) {\n realTokenAMinPostDepositBalanceLamports = new Decimal(0);\n } else {\n if (solToDeposit.greaterThanOrEqualTo(tokenAAtaBalanceLamports)) {\n realTokenAMinPostDepositBalanceLamports = ZERO;\n } else {\n realTokenAMinPostDepositBalanceLamports = tokenAAtaBalanceLamports.sub(solToDeposit);\n }\n }\n\n if (includeAtaIxns) {\n createWsolAtasIxns.push(...createWSolAtaIxns.createIxns);\n cleanupIxs.push(...createWSolAtaIxns.closeIxns);\n }\n }\n\n if (isSOLMint(strategyState.tokenBMint)) {\n const solBalance = new Decimal(await this._connection.getBalance(owner));\n const tokenBAtaBalanceLamports = collToLamportsDecimal(\n tokenBAtaBalance,\n strategyState.tokenBMintDecimals.toNumber()\n );\n const availableSol = solBalance.add(tokenBAtaBalanceLamports);\n const solToDeposit = availableSol.sub(tokenBMinPostDepositBalanceLamports);\n availableSol;\n\n bToDeposit = solToDeposit;\n\n if (!bToDeposit.eq(ZERO)) {\n if (tokenBAtaBalanceLamports.lessThan(bToDeposit)) {\n tokenBAtaBalance = lamportsToNumberDecimal(bToDeposit, DECIMALS_SOL);\n }\n }\n\n const createWSolAtaIxns = await createWsolAtaIfMissing(\n this._connection,\n new Decimal(lamportsToNumberDecimal(solToDeposit, DECIMALS_SOL)),\n owner\n );\n\n const wSolAtaExists = await checkIfAccountExists(this._connection, createWSolAtaIxns.ata);\n if (!wSolAtaExists) {\n realTokenBMinPostDepositBalanceLamports = new Decimal(0);\n } else {\n if (solToDeposit.greaterThanOrEqualTo(tokenBAtaBalanceLamports)) {\n realTokenBMinPostDepositBalanceLamports = ZERO;\n } else {\n realTokenBMinPostDepositBalanceLamports = tokenBAtaBalanceLamports.sub(solToDeposit);\n }\n }\n\n if (includeAtaIxns) {\n createWsolAtasIxns.push(...createWSolAtaIxns.createIxns);\n cleanupIxs.push(...createWSolAtaIxns.closeIxns);\n }\n }\n\n const amountsToDepositWithSwapPromise = this.calculateAmountsToBeDepositedWithSwap(\n strategyWithAddress,\n aToDeposit,\n bToDeposit,\n profiler,\n priceAInB\n );\n\n if (aToDeposit.lessThan(0) || bToDeposit.lessThan(0)) {\n throw Error(\n `Token A or B to deposit amount cannot be lower than 0; aToDeposit=${aToDeposit.toString()} bToDeposit=${bToDeposit.toString()}`\n );\n }\n\n const createAtaList: [PublicKey, PublicKey][] = [[strategyState.sharesMint, TOKEN_PROGRAM_ID]];\n if (!tokenAAtaBalance.greaterThan(0)) {\n createAtaList.push([strategyState.tokenAMint, keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID)]);\n }\n\n if (!tokenBAtaBalance.greaterThan(0)) {\n createAtaList.push([strategyState.tokenBMint, keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID)]);\n }\n\n const createAtasIxnsPromise = getAtasWithCreateIxnsIfMissing(\n this._connection,\n createAtaList.filter(([mint, _tokenProgram]) => !isSOLMint(mint)),\n owner\n );\n\n const getGlobalConfigPromise = this.getGlobalConfigState(strategyState.globalConfig);\n const [createAtasIxns, amountsToDepositWithSwap, globalConfig] = await Promise.all([\n createAtasIxnsPromise,\n amountsToDepositWithSwapPromise,\n getGlobalConfigPromise,\n ]);\n\n const checkExpectedVaultsBalancesIx = await profiler(\n this.getCheckExpectedVaultsBalancesIx(strategyWithAddress, owner, tokenAAta, tokenBAta, {\n a: tokenAAtaBalance,\n b: tokenBAtaBalance,\n }),\n 'B-getCheckExpectedVaultsBalancesIx',\n []\n );\n\n const args: SingleTokenDepositWithMinArgs = {\n tokenAMinPostDepositBalance: new BN(realTokenAMinPostDepositBalanceLamports.floor().toString()),\n tokenBMinPostDepositBalance: new BN(realTokenBMinPostDepositBalanceLamports.floor().toString()),\n };\n\n const accounts: SingleTokenDepositWithMinAccounts = {\n user: owner,\n strategy: strategyWithAddress.address,\n globalConfig: strategyState.globalConfig,\n pool: strategyState.pool,\n position: strategyState.position,\n tokenAVault: strategyState.tokenAVault,\n tokenBVault: strategyState.tokenBVault,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n tokenAAta,\n tokenBAta,\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n userSharesAta: sharesAta,\n sharesMint: strategyState.sharesMint,\n sharesMintAuthority: strategyState.sharesMintAuthority,\n scopePrices: strategyState.scopePrices,\n tokenInfos: globalConfig!.tokenInfos,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n tickArrayLower: strategyWithAddress.strategy.tickArrayLower,\n tickArrayUpper: strategyWithAddress.strategy.tickArrayUpper,\n tokenATokenProgram: keyOrDefault(strategyWithAddress.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyWithAddress.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n };\n\n const singleSidedDepositIx = singleTokenDepositWithMin(args, accounts);\n\n let result: TransactionInstruction[] = [];\n if (includeAtaIxns) {\n result.push(...createAtasIxns, ...createWsolAtasIxns);\n }\n\n // get all unique accounts in the tx so we can use the remaining space (MAX_ACCOUNTS_PER_TRANSACTION - accounts_used) for the swap\n const extractKeys = (ixs: any[]) => ixs.flatMap((ix) => ix.keys?.map((key) => key.pubkey) || []);\n\n const allKeys = [\n ...extractKeys(result),\n ...extractKeys([checkExpectedVaultsBalancesIx]),\n ...extractKeys([singleSidedDepositIx]),\n ...extractKeys(cleanupIxs),\n ];\n\n // if we have no tokens to sell skip the jup tx\n if (\n amountsToDepositWithSwap.tokenAToSwapAmount.gte(ZERO) &&\n amountsToDepositWithSwap.tokenBToSwapAmount.gte(ZERO)\n ) {\n result = result.concat([checkExpectedVaultsBalancesIx, singleSidedDepositIx, ...cleanupIxs]);\n return { instructions: result, lookupTablesAddresses: [] };\n }\n\n const [jupSwapIxs, lookupTablesAddresses] = await profiler(\n Kamino.retryAsync(async () =>\n profiler(\n swapIxsBuilder(\n amountsToDepositWithSwap,\n strategyState.tokenAMint,\n strategyState.tokenBMint,\n owner,\n swapSlippageBps,\n allKeys\n ),\n 'B-swapIxsBuilder',\n [\n // todo: not sure if we need to include these logs\n ['tokenAMint', strategyState.tokenAMint.toString()],\n ['tokenBMint', strategyState.tokenBMint.toString()],\n ]\n )\n ),\n 'B-retryAsync',\n []\n );\n\n result = result.concat([checkExpectedVaultsBalancesIx, ...jupSwapIxs, singleSidedDepositIx, ...cleanupIxs]);\n return { instructions: result, lookupTablesAddresses };\n };\n\n static async retryAsync(fn: () => Promise<any>, retriesLeft = 5, interval = 2000): Promise<any> {\n try {\n return await fn();\n } catch (error) {\n if (retriesLeft) {\n await new Promise((resolve) => setTimeout(resolve, interval));\n return await Kamino.retryAsync(fn, retriesLeft - 1, interval);\n }\n throw error;\n }\n }\n\n /**\n * Get transaction instruction to deposit SOL into topup vault.\n * @param owner Owner (wallet, shareholder) public key\n * @param amountLamports Amount of SOL to deposit into topup vault\n * @returns transaction instruction for adding SOL to topup vault\n */\n upkeepTopupVault = (owner: PublicKey, amountLamports: Decimal): TransactionInstruction => {\n if (amountLamports.lessThanOrEqualTo(0)) {\n throw Error('Must deposit a positive amount of SOL.');\n }\n const topupVault = this.getUserTopupVault(owner);\n const ix = SystemProgram.transfer({\n fromPubkey: owner,\n toPubkey: topupVault,\n lamports: BigInt(amountLamports.floor().toString()),\n });\n return ix;\n };\n\n /**\n * Get the topup vault balance in SOL.\n * @param owner Owner (wallet, shareholder) public key\n * @returns SOL amount in topup vault\n */\n topupVaultBalance = async (owner: PublicKey): Promise<Decimal> => {\n const topupVault = this.getUserTopupVault(owner);\n return lamportsToNumberDecimal(new Decimal(await this._connection.getBalance(topupVault)), DECIMALS_SOL);\n };\n\n /**\n * Get transaction instruction to withdraw SOL from the topup vault.\n * @param owner Owner (wallet, shareholder) public key\n * @param amount Amount of SOL to withdraw from the topup vault\n * @returns transaction instruction for removing SOL from the topup vault\n */\n withdrawTopupVault = async (owner: PublicKey, amount: Decimal): Promise<TransactionInstruction> => {\n if (amount.lessThanOrEqualTo(0)) {\n throw Error('Must withdraw a positive amount of SOL.');\n }\n const topupVault = this.getUserTopupVault(owner);\n\n let solToWithdraw: Decimal;\n if (amount.eq(new Decimal(U64_MAX))) {\n solToWithdraw = new Decimal(await this._connection.getBalance(topupVault));\n } else {\n solToWithdraw = collToLamportsDecimal(amount, DECIMALS_SOL);\n }\n\n const args: WithdrawFromTopupArgs = {\n amount: new BN(solToWithdraw.toString()),\n };\n\n const accounts: WithdrawFromTopupAccounts = {\n adminAuthority: owner,\n topupVault,\n system: SystemProgram.programId,\n };\n\n const withdrawIxn = withdrawFromTopup(args, accounts);\n return withdrawIxn;\n };\n\n getJupSwapIxsWithMaxAccounts = async (\n input: DepositAmountsForSwap,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n owner: PublicKey,\n slippageBps: Decimal,\n useOnlyLegacyTransaction: boolean,\n existingAccounts: PublicKey[],\n maxAccounts: number,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution,\n onlyDirectRoutes?: boolean\n ): Promise<[TransactionInstruction[], PublicKey[]]> => {\n const jupiterQuote: SwapResponse = input.tokenAToSwapAmount.lt(ZERO)\n ? await profiler(\n JupService.getBestRouteV6(\n owner,\n input.tokenAToSwapAmount.abs(),\n tokenAMint,\n tokenBMint,\n slippageBps.toNumber(),\n useOnlyLegacyTransaction,\n maxAccounts,\n onlyDirectRoutes\n ),\n 'C-getBestRouteV6',\n []\n )\n : await profiler(\n JupService.getBestRouteV6(\n owner,\n input.tokenBToSwapAmount.abs(),\n tokenBMint,\n tokenAMint,\n slippageBps.toNumber(),\n useOnlyLegacyTransaction,\n maxAccounts,\n onlyDirectRoutes\n ),\n 'C-getBestRouteV6',\n []\n );\n\n const { txMessage, lookupTablesAddresses } = await profiler(\n JupService.deserealizeVersionedTransactions(this._connection, [jupiterQuote.swapTransaction]),\n 'C-deserealizeVersionedTransactions',\n []\n );\n\n const allJupIxs = [...removeBudgetAndAtaIxns(txMessage[0].instructions, [tokenAMint, tokenBMint])];\n\n const allJupAccounts = allJupIxs.flatMap((ix) => ix.keys?.map((key) => key.pubkey) || []);\n const allAccounts = new Set<PublicKey>([...existingAccounts, ...allJupAccounts]);\n\n const prefix = 'getSingleSidedJupRoute:';\n console.log(`${prefix} All distinct existing accounts number ${new Set<PublicKey>(existingAccounts).size}`);\n console.log(`${prefix} All distinct Jup accounts number ${new Set<PublicKey>(allJupAccounts).size}`);\n console.log(`${prefix} All accounts number ${allAccounts.size}`);\n\n if (allAccounts.size < MAX_ACCOUNTS_PER_TRANSACTION) {\n return [allJupIxs, lookupTablesAddresses];\n }\n\n // if none of the swap TXs returned by Jup have less than max allowed accounts throw error as the tx will fail because we lock too many accounts\n throw new Error('All Jupiter swap routes have too many accounts in the instructions');\n };\n\n getJupSwapIxsV6 = async (\n input: DepositAmountsForSwap,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n owner: PublicKey,\n slippageBps: Decimal,\n useOnlyLegacyTransaction: boolean,\n existingAccounts: PublicKey[],\n profiledFunctionExecution: ProfiledFunctionExecution = noopProfiledFunctionExecution,\n onlyDirectRoutes?: boolean\n ): Promise<[TransactionInstruction[], PublicKey[]]> => {\n console.log('getJupSwapIxsV6', JSON.stringify(input));\n\n let extraAccountsBuffer = 5;\n\n const currentAccounts = new Set<PublicKey>(existingAccounts).size;\n const duplicatedAccounts =\n 1 + // tokenProgram\n 1 + // systemProgram\n 1 + // tokenAMint\n 1 + // tokenBMint\n 1 + // tokenAAta\n 1; // tokenBAta\n\n while (extraAccountsBuffer < 30) {\n const maxAccounts = MAX_ACCOUNTS_PER_TRANSACTION - (currentAccounts - duplicatedAccounts) - extraAccountsBuffer;\n try {\n const result = await this.getJupSwapIxsWithMaxAccounts(\n input,\n tokenAMint,\n tokenBMint,\n owner,\n slippageBps,\n useOnlyLegacyTransaction,\n existingAccounts,\n maxAccounts,\n profiledFunctionExecution,\n onlyDirectRoutes\n );\n\n return result;\n } catch (error) {\n extraAccountsBuffer += 2;\n console.log(`getJupSwapIxs: ${error}`);\n }\n }\n\n console.log('getJupSwapIxs: Could not find a route with less than 64 total accounts');\n throw new Error(`Oops. Failed to find a route. Try again or unselect single-sided deposit.`);\n };\n\n getCheckExpectedVaultsBalancesIx = async (\n strategy: StrategyWithAddress,\n user: PublicKey,\n tokenAAta: PublicKey,\n tokenBAta: PublicKey,\n expectedTokensBalances?: MaybeTokensBalances\n ): Promise<TransactionInstruction> => {\n const { strategy: strategyState, address: _ } = strategy;\n\n let expectedABalance: Decimal;\n if (expectedTokensBalances && expectedTokensBalances.a) {\n expectedABalance = expectedTokensBalances.a;\n } else {\n expectedABalance = await this.getTokenAccountBalanceOrZero(tokenAAta);\n }\n\n let expectedBBalance: Decimal;\n if (expectedTokensBalances && expectedTokensBalances.b) {\n expectedBBalance = expectedTokensBalances.b;\n } else {\n expectedBBalance = await this.getTokenAccountBalanceOrZero(tokenBAta);\n }\n\n const expectedALamportsDecimal = collToLamportsDecimal(\n expectedABalance,\n strategyState.tokenAMintDecimals.toNumber()\n );\n const expectedBLamportsDecimal = collToLamportsDecimal(\n expectedBBalance,\n strategyState.tokenBMintDecimals.toNumber()\n );\n console.log('expectedALamportsDecimal ', expectedALamportsDecimal.toString());\n console.log('expectedBLamportsDecimal ', expectedBLamportsDecimal.toString());\n const expectedALamports = expectedALamportsDecimal.floor();\n const expectedBLamports = expectedBLamportsDecimal.floor();\n\n const args: CheckExpectedVaultsBalancesArgs = {\n tokenAAtaBalance: new BN(expectedALamports.toString()),\n tokenBAtaBalance: new BN(expectedBLamports.toString()),\n };\n\n const accounts: CheckExpectedVaultsBalancesAccounts = {\n user,\n tokenAAta,\n tokenBAta,\n };\n\n return checkExpectedVaultsBalances(args, accounts);\n };\n\n /**\n * Get transaction instruction to create a new Kamino strategy.\n * Current limitations:\n * - strategy can only be created by the owner (admin) of the global config, we will need to allow non-admins to bypass this check\n * - after the strategy is created, only the owner (admin) can update the treasury fee vault with token A/B, we need to allow non-admins to be able to do (and require) this as well\n * @param strategy public key of the new strategy to create\n * @param pool public key of the CLMM pool (either Orca or Raydium)\n * @param owner public key of the strategy owner (admin authority)\n * @param dex decentralized exchange specifier\n * @returns transaction instruction for Kamino strategy creation\n */\n createStrategy = async (\n strategy: PublicKey,\n pool: PublicKey,\n owner: PublicKey,\n dex: Dex\n ): Promise<TransactionInstruction> => {\n let tokenAMint = PublicKey.default;\n let tokenBMint = PublicKey.default;\n if (dex == 'ORCA') {\n const whirlpoolState = await Whirlpool.fetch(this._connection, pool);\n if (!whirlpoolState) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n tokenAMint = whirlpoolState.tokenMintA;\n tokenBMint = whirlpoolState.tokenMintB;\n } else if (dex == 'RAYDIUM') {\n const raydiumPoolState = await PoolState.fetch(this._connection, pool);\n if (!raydiumPoolState) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${pool.toString()}`);\n }\n tokenAMint = raydiumPoolState.tokenMint0;\n tokenBMint = raydiumPoolState.tokenMint1;\n } else if (dex == 'METEORA') {\n const meteoraPoolState = await LbPair.fetch(this._connection, pool);\n if (!meteoraPoolState) {\n throw Error(`Could not fetch Meteora pool state with pubkey ${pool.toString()}`);\n }\n tokenAMint = meteoraPoolState.tokenXMint;\n tokenBMint = meteoraPoolState.tokenYMint;\n }\n const tokenATokenProgram = await this.getAccountOwner(tokenAMint);\n const tokenBTokenProgram = await this.getAccountOwner(tokenBMint);\n\n const config = await this.getGlobalConfigState(this._globalConfig);\n if (!config) {\n throw Error(`Could not fetch globalConfig with pubkey ${this.getGlobalConfig().toString()}`);\n }\n const collateralInfos = await this.getCollateralInfo(config.tokenInfos);\n const tokenACollateralId = collateralInfos.findIndex((x) => x.mint.equals(tokenAMint));\n if (tokenACollateralId === -1) {\n throw Error(`Could not find token A (mint ${tokenAMint}) in collateral infos`);\n }\n const tokenBCollateralId = collateralInfos.findIndex((x) => x.mint.equals(tokenBMint));\n if (tokenBCollateralId === -1) {\n throw Error(`Could not find token A (mint ${tokenBMint}) in collateral infos`);\n }\n\n const programAddresses = await this.getStrategyProgramAddresses(strategy, tokenAMint, tokenBMint);\n\n const strategyArgs: InitializeStrategyArgs = {\n tokenACollateralId: new BN(tokenACollateralId),\n tokenBCollateralId: new BN(tokenBCollateralId),\n strategyType: new BN(dexToNumber(dex)),\n };\n\n const strategyAccounts: InitializeStrategyAccounts = {\n adminAuthority: owner,\n strategy,\n globalConfig: this._globalConfig,\n pool,\n tokenAMint,\n tokenBMint,\n tokenAVault: programAddresses.tokenAVault,\n tokenBVault: programAddresses.tokenBVault,\n baseVaultAuthority: programAddresses.baseVaultAuthority,\n sharesMint: programAddresses.sharesMint,\n sharesMintAuthority: programAddresses.sharesMintAuthority,\n tokenInfos: config.tokenInfos,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenATokenProgram,\n tokenBTokenProgram,\n };\n\n const ix = initializeStrategy(strategyArgs, strategyAccounts);\n ix.keys.push({ pubkey: config.scopePriceId, isSigner: false, isWritable: false });\n ix.keys.push({ pubkey: config.scopeProgramId, isSigner: false, isWritable: false });\n return ix;\n };\n\n /**\n * Get transaction instruction to close Kamino strategy, including its position if there is any\n * and strategy token accounts.\n * @param strategy public key of the strategy\n * @returns instruction to close the strategy\n */\n withdrawAllAndCloseStrategy = async (\n strategy: PublicKey | StrategyWithAddress\n ): Promise<WithdrawAllAndCloseIxns | null> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const withdrawIxns = await this.withdrawAllShares(strategyWithAddress, strategyWithAddress.strategy.adminAuthority);\n if (withdrawIxns == null) {\n return null;\n }\n const closeIxn = await this.closeStrategy(strategyWithAddress);\n return {\n withdrawIxns: [...withdrawIxns.prerequisiteIxs, withdrawIxns.withdrawIx],\n closeIxn,\n };\n };\n\n /**\n * Get transaction instruction to close Kamino strategy, including its position if there is any\n * and strategy token accounts.\n * @param strategy public key of the strategy\n * @returns instruction to close the strategy\n */\n closeStrategy = async (strategy: PublicKey | StrategyWithAddress) => {\n const { address: strategyPubkey, strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const collInfos = await this.getCollateralInfos();\n\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategyDex);\n const poolProgram = getDexProgramId(strategyState);\n let oldPositionOrBaseVaultAuthority = strategyState.baseVaultAuthority;\n let oldPositionMintOrBaseVaultAuthority = strategyState.baseVaultAuthority;\n let oldPositionTokenAccountOrBaseVaultAuthority = strategyState.baseVaultAuthority;\n let oldTickArrayLowerOrBaseVaultAuthority = strategyState.baseVaultAuthority;\n let oldTickArrayUpperOrBaseVaultAuthority = strategyState.baseVaultAuthority;\n if (!strategyState.position.equals(PublicKey.default)) {\n oldPositionOrBaseVaultAuthority = strategyState.position;\n oldPositionMintOrBaseVaultAuthority = strategyState.positionMint;\n oldPositionTokenAccountOrBaseVaultAuthority = strategyState.positionTokenAccount;\n oldTickArrayLowerOrBaseVaultAuthority = strategyState.tickArrayLower;\n oldTickArrayUpperOrBaseVaultAuthority = strategyState.tickArrayUpper;\n }\n const userTokenAAta = getAssociatedTokenAddress(\n strategyState.tokenAMint,\n strategyState.adminAuthority,\n true,\n keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n const userTokenBAta = getAssociatedTokenAddress(\n strategyState.tokenBMint,\n strategyState.adminAuthority,\n true,\n keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n const rewardMints = Array(6).fill(strategyState.pool);\n const rewardTokenPrograms = Array(6).fill(TOKEN_PROGRAM_ID);\n let reward0Vault = strategyState.baseVaultAuthority;\n let userReward0Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.reward0Vault, strategyState.reward0Decimals)) {\n reward0Vault = strategyState.reward0Vault;\n rewardMints[0] = collInfos[strategyState.reward0CollateralId.toNumber()].mint;\n rewardTokenPrograms[0] = await this.getAccountOwner(rewardMints[0]);\n userReward0Ata = getAssociatedTokenAddress(\n rewardMints[0],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[0]\n );\n }\n let reward1Vault = strategyState.baseVaultAuthority;\n let userReward1Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.reward1Vault, strategyState.reward1Decimals)) {\n reward1Vault = strategyState.reward1Vault;\n rewardMints[1] = collInfos[strategyState.reward1CollateralId.toNumber()].mint;\n rewardTokenPrograms[1] = await this.getAccountOwner(rewardMints[1]);\n userReward1Ata = getAssociatedTokenAddress(\n rewardMints[1],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[1]\n );\n }\n let reward2Vault = strategyState.baseVaultAuthority;\n let userReward2Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.reward2Vault, strategyState.reward2Decimals)) {\n reward2Vault = strategyState.reward2Vault;\n rewardMints[2] = collInfos[strategyState.reward2CollateralId.toNumber()].mint;\n rewardTokenPrograms[2] = await this.getAccountOwner(rewardMints[2]);\n userReward2Ata = getAssociatedTokenAddress(\n rewardMints[2],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[2]\n );\n }\n let kaminoReward0Vault = strategyState.baseVaultAuthority;\n const userKaminoReward0Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.kaminoRewards[0].rewardVault, strategyState.kaminoRewards[0].decimals)) {\n kaminoReward0Vault = strategyState.kaminoRewards[0].rewardVault;\n rewardMints[3] = strategyState.kaminoRewards[0].rewardVault;\n rewardTokenPrograms[3] = await this.getAccountOwner(rewardMints[3]);\n userReward0Ata = getAssociatedTokenAddress(\n rewardMints[3],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[3]\n );\n }\n let kaminoReward1Vault = strategyState.baseVaultAuthority;\n const userKaminoReward1Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.kaminoRewards[1].rewardVault, strategyState.kaminoRewards[1].decimals)) {\n kaminoReward1Vault = strategyState.kaminoRewards[1].rewardVault;\n rewardMints[4] = strategyState.kaminoRewards[1].rewardVault;\n rewardTokenPrograms[4] = await this.getAccountOwner(rewardMints[4]);\n userReward1Ata = getAssociatedTokenAddress(\n rewardMints[4],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[4]\n );\n }\n let kaminoReward2Vault = strategyState.baseVaultAuthority;\n const userKaminoReward2Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.kaminoRewards[2].rewardVault, strategyState.kaminoRewards[2].decimals)) {\n kaminoReward2Vault = strategyState.kaminoRewards[2].rewardVault;\n rewardMints[5] = strategyState.kaminoRewards[2].rewardVault;\n rewardTokenPrograms[5] = await this.getAccountOwner(rewardMints[5]);\n userReward2Ata = getAssociatedTokenAddress(\n rewardMints[5],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[5]\n );\n }\n\n const strategyAccounts: CloseStrategyAccounts = {\n adminAuthority: strategyState.adminAuthority,\n strategy: strategyPubkey,\n oldPositionOrBaseVaultAuthority,\n oldPositionMintOrBaseVaultAuthority,\n oldPositionTokenAccountOrBaseVaultAuthority,\n tokenAVault: strategyState.tokenAVault,\n tokenBVault: strategyState.tokenBVault,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n system: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n poolProgram: poolProgram,\n userTokenAAta,\n userTokenBAta,\n reward0Vault,\n reward1Vault,\n reward2Vault,\n kaminoReward0Vault,\n kaminoReward1Vault,\n kaminoReward2Vault,\n userReward0Ata,\n userReward1Ata,\n userReward2Ata,\n userKaminoReward0Ata,\n userKaminoReward1Ata,\n userKaminoReward2Ata,\n oldTickArrayLowerOrBaseVaultAuthority,\n oldTickArrayUpperOrBaseVaultAuthority,\n pool: strategyState.pool,\n eventAuthority,\n tokenATokenProgram: keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n };\n\n const ix = closeStrategy(strategyAccounts);\n\n for (let i = 0; i < 6; i++) {\n ix.keys.push({ pubkey: rewardMints[i], isSigner: false, isWritable: false });\n ix.keys.push({ pubkey: rewardTokenPrograms[i], isSigner: false, isWritable: false });\n }\n\n return ix;\n };\n\n getUserTopupVault = (user: PublicKey): PublicKey => {\n const [topupVault, _topupVaultBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('topup_vault'), user.toBuffer()],\n this.getProgramID()\n );\n return topupVault;\n };\n\n /**\n * Find program adresses required for kamino strategy creation\n * @param strategy\n * @param tokenMintA\n * @param tokenMintB\n * @private\n * @returns object with program addresses for kamino strategy creation\n */\n private getStrategyProgramAddresses = async (\n strategy: PublicKey,\n tokenMintA: PublicKey,\n tokenMintB: PublicKey\n ): Promise<StrategyProgramAddress> => {\n const [tokenAVault, tokenABump] = PublicKey.findProgramAddressSync(\n [Buffer.from('svault_a'), strategy.toBuffer()],\n this.getProgramID()\n );\n const [tokenBVault, tokenBBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('svault_b'), strategy.toBuffer()],\n this.getProgramID()\n );\n const [baseVaultAuthority, baseVaultAuthorityBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('authority'), tokenAVault.toBuffer(), tokenBVault.toBuffer()],\n this.getProgramID()\n );\n const [sharesMint, sharesMintBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('shares'), strategy.toBuffer(), tokenMintA.toBuffer(), tokenMintB.toBuffer()],\n this.getProgramID()\n );\n const [sharesMintAuthority, sharesMintAuthorityBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('authority'), sharesMint.toBuffer()],\n this.getProgramID()\n );\n\n return {\n sharesMintAuthority,\n tokenAVault,\n tokenBVault,\n baseVaultAuthority,\n baseVaultAuthorityBump,\n sharesMintAuthorityBump,\n sharesMintBump,\n tokenBBump,\n sharesMint,\n tokenABump,\n };\n };\n\n /**\n * Get transaction instruction to create a new rent exempt strategy account\n * @param payer transaction payer (signer) public key\n * @param newStrategy public key of the new strategy\n * @returns transaction instruction to create the account\n */\n createStrategyAccount = async (payer: PublicKey, newStrategy: PublicKey): Promise<TransactionInstruction> => {\n const accountSize = this._kaminoProgram.account.whirlpoolStrategy.size;\n return this.createAccountRentExempt(payer, newStrategy, accountSize);\n };\n\n createAccountRentExempt = async (\n payer: PublicKey,\n newAccountPubkey: PublicKey,\n size: number\n ): Promise<TransactionInstruction> => {\n const lamports = await this._connection.getMinimumBalanceForRentExemption(size);\n return SystemProgram.createAccount({\n programId: this.getProgramID(),\n fromPubkey: payer,\n newAccountPubkey,\n space: size,\n lamports,\n });\n };\n\n /**\n * Get transaction instruction to collect strategy fees from the treasury fee\n * vaults and rewards from the reward vaults.\n * @param strategy strategy public key or already fetched object\n * @param owner signer of the tx\n * @returns transaction instruction to collect strategy fees and rewards\n */\n collectFeesAndRewards = async (\n strategy: PublicKey | StrategyWithAddress,\n owner?: PublicKey\n ): Promise<TransactionInstruction> => {\n const { address: strategyPubkey, strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategyDex);\n const { treasuryFeeTokenAVault, treasuryFeeTokenBVault, treasuryFeeVaultAuthority } = this.getTreasuryFeeVaultPDAs(\n strategyState.tokenAMint,\n strategyState.tokenBMint\n );\n\n let programId = WHIRLPOOL_PROGRAM_ID;\n\n let poolRewardVault0 = PublicKey.default;\n let poolRewardVault1 = PublicKey.default;\n let poolRewardVault2 = PublicKey.default;\n let rewardMint0 = PublicKey.default;\n let rewardMint1 = PublicKey.default;\n let rewardMint2 = PublicKey.default;\n if (strategyState.strategyDex.toNumber() == dexToNumber('ORCA')) {\n const whirlpool = await Whirlpool.fetch(this._connection, strategyState.pool);\n if (!whirlpool) {\n throw Error(`Could not fetch whirlpool state with pubkey ${strategyState.pool.toString()}`);\n }\n\n poolRewardVault0 = whirlpool.rewardInfos[0].vault;\n poolRewardVault1 = whirlpool.rewardInfos[1].vault;\n poolRewardVault2 = whirlpool.rewardInfos[2].vault;\n rewardMint0 = whirlpool.rewardInfos[0].mint;\n rewardMint1 = whirlpool.rewardInfos[1].mint;\n rewardMint2 = whirlpool.rewardInfos[2].mint;\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n programId = RAYDIUM_PROGRAM_ID;\n\n const poolState = await PoolState.fetch(this._connection, strategyState.pool);\n if (!poolState) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${strategyState.pool.toString()}`);\n }\n poolRewardVault0 = poolState.rewardInfos[0].tokenVault;\n poolRewardVault1 = poolState.rewardInfos[1].tokenVault;\n poolRewardVault2 = poolState.rewardInfos[2].tokenVault;\n rewardMint0 = poolState.rewardInfos[0].tokenMint;\n rewardMint1 = poolState.rewardInfos[1].tokenMint;\n rewardMint2 = poolState.rewardInfos[2].tokenMint;\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('METEORA')) {\n programId = METEORA_PROGRAM_ID;\n\n const poolState = await LbPair.fetch(this._connection, strategyState.pool);\n if (!poolState) {\n throw Error(`Could not fetch Meteora pool state with pubkey ${strategyState.pool.toString()}`);\n }\n poolRewardVault0 = poolState.rewardInfos[0].vault;\n poolRewardVault1 = poolState.rewardInfos[1].vault;\n poolRewardVault2 = strategyPubkey;\n rewardMint0 = poolState.rewardInfos[0].mint;\n rewardMint1 = poolState.rewardInfos[1].mint;\n rewardMint2 = this._kaminoProgramId;\n }\n\n const accounts: CollectFeesAndRewardsAccounts = {\n user: owner || strategyState.adminAuthority,\n strategy: strategyPubkey,\n globalConfig: strategyState.globalConfig,\n pool: strategyState.pool,\n position: strategyState.position,\n positionTokenAccount: strategyState.positionTokenAccount,\n treasuryFeeTokenAVault,\n treasuryFeeTokenBVault,\n treasuryFeeVaultAuthority,\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n tokenAVault: strategyState.tokenAVault,\n tokenBVault: strategyState.tokenBVault,\n poolTokenVaultA: strategyState.poolTokenVaultA,\n poolTokenVaultB: strategyState.poolTokenVaultB,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n reward0Vault: strategyState.reward0Vault,\n reward1Vault: strategyState.reward1Vault,\n reward2Vault: strategyState.baseVaultAuthority,\n poolRewardVault0:\n strategyState.reward0Decimals.toNumber() > 0 ? poolRewardVault0 : strategyState.baseVaultAuthority,\n poolRewardVault1:\n strategyState.reward1Decimals.toNumber() > 0 ? poolRewardVault1 : strategyState.baseVaultAuthority,\n poolRewardVault2:\n strategyState.reward2Decimals.toNumber() > 0 ? poolRewardVault2 : strategyState.baseVaultAuthority,\n tickArrayLower: strategyState.tickArrayLower,\n tickArrayUpper: strategyState.tickArrayUpper,\n raydiumProtocolPositionOrBaseVaultAuthority: strategyState.raydiumProtocolPositionOrBaseVaultAuthority,\n poolProgram: programId,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n eventAuthority,\n tokenATokenProgram: keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n };\n\n const ixn = collectFeesAndRewards(accounts);\n const pairs: [number, PublicKey][] = [\n [strategyState.reward0Decimals.toNumber(), rewardMint0],\n [strategyState.reward1Decimals.toNumber(), rewardMint1],\n [strategyState.reward2Decimals.toNumber(), rewardMint2],\n ];\n for (const [decimals, mint] of pairs) {\n if (decimals > 0) {\n ixn.keys.push({ pubkey: mint, isSigner: false, isWritable: false });\n const tokenProgram = await this.getAccountOwner(mint);\n ixn.keys.push({ pubkey: tokenProgram, isSigner: false, isWritable: false });\n }\n }\n return ixn;\n };\n\n /**\n * Get orca position metadata program addresses\n * @param positionMint mint account of the position\n */\n getMetadataProgramAddressesOrca = (positionMint: PublicKey): MetadataProgramAddressesOrca => {\n const [position, positionBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('position'), positionMint.toBuffer()],\n WHIRLPOOL_PROGRAM_ID\n );\n\n const [positionMetadata, positionMetadataBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('metadata'), METADATA_PROGRAM_ID.toBuffer(), positionMint.toBuffer()],\n METADATA_PROGRAM_ID\n );\n\n return {\n position,\n positionBump,\n positionMetadata,\n positionMetadataBump,\n };\n };\n\n getMetadataProgramAddressesRaydium = (\n positionMint: PublicKey,\n pool: PublicKey,\n tickLowerIndex: number,\n tickUpperIndex: number\n ): MetadataProgramAddressesRaydium => {\n const { publicKey: protocolPosition, nonce: protocolPositionBump } = getPdaProtocolPositionAddress(\n RAYDIUM_PROGRAM_ID,\n pool,\n tickLowerIndex,\n tickUpperIndex\n );\n\n const [position, positionBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('position'), positionMint.toBuffer()],\n RAYDIUM_PROGRAM_ID\n );\n\n const [positionMetadata, positionMetadataBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('metadata'), METADATA_PROGRAM_ID.toBuffer(), positionMint.toBuffer()],\n METADATA_PROGRAM_ID\n );\n\n return {\n position,\n positionBump,\n protocolPosition,\n protocolPositionBump,\n positionMetadata,\n positionMetadataBump,\n };\n };\n\n private getStartEndTicketIndexProgramAddressesOrca = (\n whirlpool: PublicKey,\n whirlpoolState: Whirlpool,\n tickLowerIndex: number,\n tickUpperIndex: number\n ): LowerAndUpperTickPubkeys => {\n const startTickIndex = getStartTickIndex(tickLowerIndex, whirlpoolState.tickSpacing, 0);\n const endTickIndex = getStartTickIndex(tickUpperIndex, whirlpoolState.tickSpacing, 0);\n\n const [lowerTickPubkey, lowerTickBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('tick_array'), whirlpool.toBuffer(), Buffer.from(startTickIndex.toString())],\n WHIRLPOOL_PROGRAM_ID\n );\n const [upperTickPubkey, upperTickBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('tick_array'), whirlpool.toBuffer(), Buffer.from(endTickIndex.toString())],\n WHIRLPOOL_PROGRAM_ID\n );\n return {\n lowerTick: lowerTickPubkey,\n lowerTickBump,\n upperTick: upperTickPubkey,\n upperTickBump,\n };\n };\n\n private getStartEndTicketIndexProgramAddressesRaydium = (\n pool: PublicKey,\n poolState: PoolState,\n tickLowerIndex: number,\n tickUpperIndex: number\n ): LowerAndUpperTickPubkeys => {\n const startTickIndex = TickUtils.getTickArrayStartIndexByTick(tickLowerIndex, poolState.tickSpacing);\n const endTickIndex = TickUtils.getTickArrayStartIndexByTick(tickUpperIndex, poolState.tickSpacing);\n\n const [lowerTickPubkey, lowerTickBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('tick_array'), pool.toBuffer(), i32ToBytes(startTickIndex)],\n RAYDIUM_PROGRAM_ID\n );\n const [upperTickPubkey, upperTickBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('tick_array'), pool.toBuffer(), i32ToBytes(endTickIndex)],\n RAYDIUM_PROGRAM_ID\n );\n return {\n lowerTick: lowerTickPubkey,\n lowerTickBump,\n upperTick: upperTickPubkey,\n upperTickBump,\n };\n };\n\n private readMeteoraPosition = async (poolPk: PublicKey, positionPk: PublicKey): Promise<MeteoraPosition> => {\n const pool = await LbPair.fetch(this._connection, poolPk);\n const position = await PositionV2.fetch(this._connection, positionPk);\n if (!pool || !position) {\n return {\n publicKey: positionPk,\n amountX: new Decimal(0),\n amountY: new Decimal(0),\n };\n }\n\n const { lowerTick: lowerTickPk, upperTick: upperTickPk } = this.getStartEndTicketIndexProgramAddressesMeteora(\n poolPk,\n position.lowerBinId\n );\n const lowerBinArray = await BinArray.fetch(this._connection, lowerTickPk);\n const upperBinArray = await BinArray.fetch(this._connection, upperTickPk);\n if (!lowerBinArray || !upperBinArray) {\n return {\n publicKey: positionPk,\n amountX: new Decimal(0),\n amountY: new Decimal(0),\n };\n }\n const binArrays = [lowerBinArray, upperBinArray];\n let totalAmountX = new Decimal(0);\n let totalAmountY = new Decimal(0);\n for (let idx = position.lowerBinId; idx <= position.upperBinId; idx++) {\n const bin = getBinFromBinArrays(idx, binArrays);\n if (bin) {\n const binX = new Decimal(bin.amountX.toString());\n const binY = new Decimal(bin.amountY.toString());\n const binLiq = new Decimal(bin.liquiditySupply.toString());\n if (!binX.isNaN() && !binY.isNaN() && !binLiq.isNaN() && binLiq.gt(ZERO)) {\n const positionLiqNumber = position.liquidityShares[idx - position.lowerBinId];\n if (positionLiqNumber && !positionLiqNumber.isZero()) {\n const positionLiq = new Decimal(positionLiqNumber.toString());\n totalAmountX = totalAmountX.add(binX.mul(positionLiq).div(binLiq));\n totalAmountY = totalAmountY.add(binY.mul(positionLiq).div(binLiq));\n }\n }\n }\n }\n\n return {\n publicKey: positionPk,\n amountX: totalAmountX,\n amountY: totalAmountY,\n };\n };\n\n private getStartEndTicketIndexProgramAddressesMeteora = (\n pool: PublicKey,\n tickLowerIndex: number\n ): LowerAndUpperTickPubkeys => {\n const meteoraProgramId = METEORA_PROGRAM_ID;\n\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(tickLowerIndex));\n const [lowerTick, lowerTickBump] = deriveBinArray(pool, lowerBinArrayIndex, meteoraProgramId);\n\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n\n const [upperTick, upperTickBump] = deriveBinArray(pool, upperBinArrayIndex, meteoraProgramId);\n\n return {\n lowerTick,\n lowerTickBump,\n upperTick,\n upperTickBump,\n };\n };\n /**\n * Get a transaction to open liquidity position for a Kamino strategy\n * @param strategy strategy you want to open liquidity position for\n * @param positionMint position mint pubkey\n * @param priceLower new position's lower price of the range\n * @param priceUpper new position's upper price of the range\n * @param status strategy status\n */\n openPosition = async (\n strategy: PublicKey | StrategyWithAddress,\n positionMint: PublicKey,\n priceLower: Decimal,\n priceUpper: Decimal,\n status: StrategyStatusKind = new Uninitialized()\n ): Promise<TransactionInstruction> => {\n const { strategy: strategyState, address: strategyAddress } = await this.getStrategyStateIfNotFetched(strategy);\n if (!strategyState) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategyDex);\n\n if (strategyState.strategyDex.toNumber() == dexToNumber('ORCA')) {\n return this.openPositionOrca(\n strategyState.adminAuthority,\n strategyAddress,\n strategyState.baseVaultAuthority,\n strategyState.pool,\n positionMint,\n priceLower,\n priceUpper,\n strategyState.tokenAVault,\n strategyState.tokenBVault,\n strategyState.tokenAMint,\n strategyState.tokenBMint,\n strategyState.tokenATokenProgram,\n strategyState.tokenBTokenProgram,\n strategyState.position,\n strategyState.positionMint,\n strategyState.positionTokenAccount,\n strategyState.tickArrayLower,\n strategyState.tickArrayUpper,\n eventAuthority,\n status\n );\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n let reward0Vault: PublicKey | undefined = undefined;\n let reward1Vault: PublicKey | undefined = undefined;\n let reward2Vault: PublicKey | undefined = undefined;\n if (strategyState.reward0Decimals.toNumber() > 0) {\n reward0Vault = strategyState.reward0Vault;\n }\n if (strategyState.reward1Decimals.toNumber() > 0) {\n reward1Vault = strategyState.reward1Vault;\n }\n if (strategyState.reward2Decimals.toNumber() > 0) {\n reward2Vault = strategyState.reward2Vault;\n }\n\n return this.openPositionRaydium(\n strategyState.adminAuthority,\n strategyAddress,\n strategyState.baseVaultAuthority,\n strategyState.pool,\n positionMint,\n priceLower,\n priceUpper,\n strategyState.tokenAVault,\n strategyState.tokenBVault,\n strategyState.tokenAMint,\n strategyState.tokenBMint,\n strategyState.tokenATokenProgram,\n strategyState.tokenBTokenProgram,\n strategyState.tickArrayLower,\n strategyState.tickArrayUpper,\n strategyState.position,\n strategyState.positionMint,\n strategyState.positionTokenAccount,\n strategyState.raydiumProtocolPositionOrBaseVaultAuthority,\n eventAuthority,\n status,\n reward0Vault,\n reward1Vault,\n reward2Vault\n );\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('METEORA')) {\n return this.openPositionMeteora(\n strategyState.adminAuthority,\n strategyAddress,\n strategyState.baseVaultAuthority,\n strategyState.pool,\n positionMint,\n priceLower,\n priceUpper,\n strategyState.tokenAVault,\n strategyState.tokenBVault,\n strategyState.tokenAMint,\n strategyState.tokenBMint,\n strategyState.tokenATokenProgram,\n strategyState.tokenBTokenProgram,\n strategyState.position,\n strategyState.positionMint,\n strategyState.positionTokenAccount,\n strategyState.tickArrayLower,\n strategyState.tickArrayUpper,\n eventAuthority,\n status\n );\n } else {\n throw new Error(`Invalid dex ${strategyState.strategyDex.toString()}`);\n }\n };\n\n /**\n * Get a transaction to open liquidity position for a Kamino strategy\n * @param strategy strategy you want to open liquidity position for\n * @param positionMint new liquidity position account pubkey\n * @param priceLower new position's lower price of the range\n * @param priceUpper new position's upper price of the range\n * @param status strategy status\n */\n openPositionOrca = async (\n adminAuthority: PublicKey,\n strategy: PublicKey,\n baseVaultAuthority: PublicKey,\n pool: PublicKey,\n positionMint: PublicKey,\n priceLower: Decimal,\n priceUpper: Decimal,\n tokenAVault: PublicKey,\n tokenBVault: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tokenATokenProgram: PublicKey,\n tokenBTokenProgram: PublicKey,\n oldPositionOrBaseVaultAuthority: PublicKey,\n oldPositionMintOrBaseVaultAuthority: PublicKey,\n oldPositionTokenAccountOrBaseVaultAuthority: PublicKey,\n oldTickArrayLowerOrBaseVaultAuthority: PublicKey,\n oldTickArrayUpperOrBaseVaultAuthority: PublicKey,\n eventAuthority: PublicKey,\n status: StrategyStatusKind = new Uninitialized()\n ): Promise<TransactionInstruction> => {\n const whirlpool = await Whirlpool.fetch(this._connection, pool);\n if (!whirlpool) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n\n const isRebalancing = status.discriminator === Rebalancing.discriminator;\n const decimalsA = await getMintDecimals(this._connection, whirlpool.tokenMintA);\n const decimalsB = await getMintDecimals(this._connection, whirlpool.tokenMintB);\n\n const tickLowerIndex = getNextValidTickIndex(\n priceToTickIndex(priceLower, decimalsA, decimalsB),\n whirlpool.tickSpacing\n );\n const tickUpperIndex = getNextValidTickIndex(\n priceToTickIndex(priceUpper, decimalsA, decimalsB),\n whirlpool.tickSpacing\n );\n\n const { position, positionBump, positionMetadata } = this.getMetadataProgramAddressesOrca(positionMint);\n\n const positionTokenAccount = getAssociatedTokenAddress(positionMint, baseVaultAuthority);\n\n const args: OpenLiquidityPositionArgs = {\n tickLowerIndex: new BN(tickLowerIndex),\n tickUpperIndex: new BN(tickUpperIndex),\n bump: positionBump,\n };\n\n const { lowerTick: startTickIndex, upperTick: endTickIndex } = this.getStartEndTicketIndexProgramAddressesOrca(\n pool,\n whirlpool,\n tickLowerIndex,\n tickUpperIndex\n );\n\n const globalConfig = await this.getGlobalConfigState(this._globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${this._globalConfig.toString()}`);\n }\n\n const accounts: OpenLiquidityPositionAccounts = {\n adminAuthority: adminAuthority,\n strategy,\n pool: pool,\n tickArrayLower: startTickIndex,\n tickArrayUpper: endTickIndex,\n baseVaultAuthority: baseVaultAuthority,\n position,\n positionMint,\n positionMetadataAccount: positionMetadata,\n positionTokenAccount,\n rent: SYSVAR_RENT_PUBKEY,\n system: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n poolProgram: WHIRLPOOL_PROGRAM_ID,\n oldPositionOrBaseVaultAuthority: isRebalancing ? oldPositionOrBaseVaultAuthority : baseVaultAuthority,\n oldPositionMintOrBaseVaultAuthority: isRebalancing ? oldPositionMintOrBaseVaultAuthority : positionMint,\n oldPositionTokenAccountOrBaseVaultAuthority: isRebalancing\n ? oldPositionTokenAccountOrBaseVaultAuthority\n : positionTokenAccount,\n globalConfig: this._globalConfig,\n oldTickArrayLowerOrBaseVaultAuthority: isRebalancing ? oldTickArrayLowerOrBaseVaultAuthority : baseVaultAuthority,\n oldTickArrayUpperOrBaseVaultAuthority: isRebalancing ? oldTickArrayUpperOrBaseVaultAuthority : baseVaultAuthority,\n tokenAVault,\n tokenBVault,\n poolTokenVaultA: whirlpool.tokenVaultA,\n poolTokenVaultB: whirlpool.tokenVaultB,\n scopePrices: globalConfig.scopePriceId,\n tokenInfos: globalConfig.tokenInfos,\n tokenAMint,\n tokenBMint,\n eventAuthority,\n consensusAccount: CONSENSUS_ID,\n tokenATokenProgram: keyOrDefault(tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n };\n\n const ixn = openLiquidityPosition(args, accounts);\n const accountIndex = ixn.keys.findIndex((accs) => accs.pubkey.equals(positionMint));\n ixn.keys[accountIndex].isSigner = true;\n return ixn;\n };\n\n /**\n * Get a transaction to open liquidity position for a Kamino strategy\n * @param strategy strategy you want to open liquidity position for\n * @param positionMint new liquidity position account pubkey\n * @param priceLower new position's lower price of the range\n * @param priceUpper new position's upper price of the range\n * @param status strategy status\n */\n openPositionRaydium = async (\n adminAuthority: PublicKey,\n strategy: PublicKey,\n baseVaultAuthority: PublicKey,\n pool: PublicKey,\n positionMint: PublicKey,\n priceLower: Decimal,\n priceUpper: Decimal,\n tokenAVault: PublicKey,\n tokenBVault: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tokenATokenProgram: PublicKey,\n tokenBTokenProgram: PublicKey,\n oldTickArrayLowerOrBaseVaultAuthority: PublicKey,\n oldTickArrayUpperOrBaseVaultAuthority: PublicKey,\n oldPositionOrBaseVaultAuthority: PublicKey,\n oldPositionMintOrBaseVaultAuthority: PublicKey,\n oldPositionTokenAccountOrBaseVaultAuthority: PublicKey,\n oldProtocolPositionOrBaseVaultAuthority: PublicKey,\n eventAuthority: PublicKey,\n status: StrategyStatusKind = new Uninitialized(),\n strategyRewardOVault?: PublicKey,\n strategyReward1Vault?: PublicKey,\n strategyReward2Vault?: PublicKey\n ): Promise<TransactionInstruction> => {\n const poolState = await PoolState.fetch(this._connection, pool);\n if (!poolState) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${pool.toString()}`);\n }\n\n const isRebalancing = status.discriminator === Rebalancing.discriminator;\n\n const decimalsA = await getMintDecimals(this._connection, poolState.tokenMint0);\n const decimalsB = await getMintDecimals(this._connection, poolState.tokenMint1);\n\n const tickLowerIndex = TickMath.getTickWithPriceAndTickspacing(\n TickMath.roundPriceWithTickspacing(priceLower, poolState.tickSpacing, decimalsA, decimalsB),\n poolState.tickSpacing,\n decimalsA,\n decimalsB\n );\n\n const tickUpperIndex = TickMath.getTickWithPriceAndTickspacing(\n TickMath.roundPriceWithTickspacing(priceUpper, poolState.tickSpacing, decimalsA, decimalsB),\n poolState.tickSpacing,\n decimalsA,\n decimalsB\n );\n\n const { position, positionBump, protocolPosition, positionMetadata } = this.getMetadataProgramAddressesRaydium(\n positionMint,\n pool,\n tickLowerIndex,\n tickUpperIndex\n );\n\n const positionTokenAccount = getAssociatedTokenAddress(positionMint, baseVaultAuthority);\n\n const args: OpenLiquidityPositionArgs = {\n tickLowerIndex: new BN(tickLowerIndex),\n tickUpperIndex: new BN(tickUpperIndex),\n bump: positionBump,\n };\n\n const { lowerTick: startTickIndex, upperTick: endTickIndex } = this.getStartEndTicketIndexProgramAddressesRaydium(\n pool,\n poolState,\n tickLowerIndex,\n tickUpperIndex\n );\n\n const globalConfig = await this.getGlobalConfigState(this._globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${this._globalConfig.toString()}`);\n }\n const accounts: OpenLiquidityPositionAccounts = {\n adminAuthority: adminAuthority,\n strategy,\n pool: pool,\n tickArrayLower: startTickIndex,\n tickArrayUpper: endTickIndex,\n baseVaultAuthority: baseVaultAuthority,\n position,\n positionMint,\n positionMetadataAccount: positionMetadata,\n positionTokenAccount,\n rent: SYSVAR_RENT_PUBKEY,\n system: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n poolProgram: RAYDIUM_PROGRAM_ID,\n oldPositionOrBaseVaultAuthority: isRebalancing ? oldPositionOrBaseVaultAuthority : baseVaultAuthority,\n oldPositionMintOrBaseVaultAuthority: isRebalancing ? oldPositionMintOrBaseVaultAuthority : positionMint,\n oldPositionTokenAccountOrBaseVaultAuthority: isRebalancing\n ? oldPositionTokenAccountOrBaseVaultAuthority\n : positionTokenAccount,\n globalConfig: this._globalConfig,\n oldTickArrayLowerOrBaseVaultAuthority: isRebalancing ? oldTickArrayLowerOrBaseVaultAuthority : baseVaultAuthority,\n oldTickArrayUpperOrBaseVaultAuthority: isRebalancing ? oldTickArrayUpperOrBaseVaultAuthority : baseVaultAuthority,\n tokenAVault: tokenAVault,\n tokenBVault: tokenBVault,\n poolTokenVaultA: poolState.tokenVault0,\n poolTokenVaultB: poolState.tokenVault1,\n scopePrices: globalConfig.scopePriceId,\n tokenInfos: globalConfig.tokenInfos,\n tokenAMint,\n tokenBMint,\n eventAuthority,\n consensusAccount: CONSENSUS_ID,\n tokenATokenProgram: keyOrDefault(tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n };\n const [poolTickArrayBitmap, _poolTickArrayBitmapBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('pool_tick_array_bitmap_extension'), pool.toBuffer()],\n RAYDIUM_PROGRAM_ID\n );\n\n const ix = openLiquidityPosition(args, accounts);\n\n ix.keys = ix.keys.concat([\n { pubkey: protocolPosition, isSigner: false, isWritable: true },\n { pubkey: oldProtocolPositionOrBaseVaultAuthority, isSigner: false, isWritable: true },\n { pubkey: METADATA_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: poolTickArrayBitmap, isSigner: false, isWritable: true },\n ]);\n if (strategyRewardOVault) {\n ix.keys = ix.keys.concat([\n { pubkey: poolState.rewardInfos[0].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyRewardOVault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[0].tokenMint, isSigner: false, isWritable: false },\n ]);\n }\n if (strategyReward1Vault) {\n ix.keys = ix.keys.concat([\n { pubkey: poolState.rewardInfos[1].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyReward1Vault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[1].tokenMint, isSigner: false, isWritable: false },\n ]);\n }\n if (strategyReward2Vault) {\n ix.keys = ix.keys.concat([\n { pubkey: poolState.rewardInfos[2].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyReward2Vault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[2].tokenMint, isSigner: false, isWritable: false },\n ]);\n }\n const accountIndex = ix.keys.findIndex((accs) => accs.pubkey.equals(positionMint));\n ix.keys[accountIndex].isSigner = true;\n return ix;\n };\n\n /**\n * Get a transaction to open liquidity position for a Kamino strategy\n * @param strategy strategy you want to open liquidity position for\n * @param positionMint new liquidity position account pubkey\n * @param priceLower new position's lower price of the range\n * @param priceUpper new position's upper price of the range\n * @param status strategy status\n */\n openPositionMeteora = async (\n adminAuthority: PublicKey,\n strategy: PublicKey,\n baseVaultAuthority: PublicKey,\n pool: PublicKey,\n position: PublicKey,\n priceLower: Decimal,\n priceUpper: Decimal,\n tokenAVault: PublicKey,\n tokenBVault: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tokenATokenProgram: PublicKey,\n tokenBTokenProgram: PublicKey,\n oldPositionOrBaseVaultAuthority: PublicKey,\n oldPositionMintOrBaseVaultAuthority: PublicKey,\n oldPositionTokenAccountOrBaseVaultAuthority: PublicKey,\n oldTickArrayLowerOrBaseVaultAuthority: PublicKey,\n oldTickArrayUpperOrBaseVaultAuthority: PublicKey,\n eventAuthority: PublicKey,\n status: StrategyStatusKind = new Uninitialized()\n ): Promise<TransactionInstruction> => {\n const lbPair = await LbPair.fetch(this._connection, pool);\n if (!lbPair) {\n throw Error(`Could not fetch meteora lbpair state with pubkey ${pool.toString()}`);\n }\n\n const isRebalancing = status.discriminator === Rebalancing.discriminator;\n const decimalsA = await getMintDecimals(this._connection, lbPair.tokenXMint);\n const decimalsB = await getMintDecimals(this._connection, lbPair.tokenYMint);\n\n const tickLowerIndex = getBinIdFromPriceWithDecimals(priceLower, lbPair.binStep, true, decimalsA, decimalsB);\n const tickUpperIndex = getBinIdFromPriceWithDecimals(priceUpper, lbPair.binStep, true, decimalsA, decimalsB);\n\n const { position: positionMint, positionBump, positionMetadata } = this.getMetadataProgramAddressesOrca(position);\n\n const positionTokenAccount = getAssociatedTokenAddress(position, baseVaultAuthority);\n\n const args: OpenLiquidityPositionArgs = {\n tickLowerIndex: new BN(tickLowerIndex),\n tickUpperIndex: new BN(tickUpperIndex),\n bump: positionBump,\n };\n\n const { lowerTick: startTickIndex, upperTick: endTickIndex } = this.getStartEndTicketIndexProgramAddressesMeteora(\n pool,\n tickLowerIndex\n );\n\n const globalConfig = await this.getGlobalConfigState(this._globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${this._globalConfig.toString()}`);\n }\n\n const accounts: OpenLiquidityPositionAccounts = {\n adminAuthority: adminAuthority,\n strategy,\n pool: pool,\n tickArrayLower: startTickIndex,\n tickArrayUpper: endTickIndex,\n baseVaultAuthority: baseVaultAuthority,\n position,\n positionMint,\n positionMetadataAccount: positionMetadata,\n positionTokenAccount,\n rent: SYSVAR_RENT_PUBKEY,\n system: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n poolProgram: WHIRLPOOL_PROGRAM_ID,\n oldPositionOrBaseVaultAuthority: isRebalancing ? oldPositionOrBaseVaultAuthority : baseVaultAuthority,\n oldPositionMintOrBaseVaultAuthority: isRebalancing ? oldPositionMintOrBaseVaultAuthority : positionMint,\n oldPositionTokenAccountOrBaseVaultAuthority: isRebalancing\n ? oldPositionTokenAccountOrBaseVaultAuthority\n : positionTokenAccount,\n globalConfig: this._globalConfig,\n oldTickArrayLowerOrBaseVaultAuthority: isRebalancing ? oldTickArrayLowerOrBaseVaultAuthority : baseVaultAuthority,\n oldTickArrayUpperOrBaseVaultAuthority: isRebalancing ? oldTickArrayUpperOrBaseVaultAuthority : baseVaultAuthority,\n tokenAVault,\n tokenBVault,\n poolTokenVaultA: lbPair.reserveX,\n poolTokenVaultB: lbPair.reserveY,\n scopePrices: globalConfig.scopePriceId,\n tokenInfos: globalConfig.tokenInfos,\n tokenAMint,\n tokenBMint,\n eventAuthority,\n consensusAccount: CONSENSUS_ID,\n tokenATokenProgram: keyOrDefault(tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n };\n\n const ixn = openLiquidityPosition(args, accounts);\n const accountIndex = ixn.keys.findIndex((accs) => accs.pubkey.equals(position));\n ixn.keys[accountIndex].isSigner = true;\n return ixn;\n };\n\n /**\n * Get a transaction for executive withdrawal from a Kamino strategy.\n * @param strategy strategy pubkey or object\n * @param action withdrawal action\n * @returns transaction for executive withdrawal\n */\n executiveWithdraw = async (\n strategy: PublicKey | StrategyWithAddress,\n action: ExecutiveWithdrawActionKind\n ): Promise<TransactionInstruction> => {\n const { address: strategyPubkey, strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategyDex);\n\n const globalConfig = await this.getGlobalConfigState(strategyState.globalConfig);\n if (globalConfig == null) {\n throw new Error(`Unable to fetch GlobalConfig with Pubkey ${strategyState.globalConfig}`);\n }\n const args: ExecutiveWithdrawArgs = {\n action: action.discriminator,\n };\n\n const programId = getDexProgramId(strategyState);\n\n const accounts: ExecutiveWithdrawAccounts = {\n adminAuthority: strategyState.adminAuthority,\n strategy: strategyPubkey,\n globalConfig: strategyState.globalConfig,\n pool: strategyState.pool,\n position: strategyState.position,\n positionTokenAccount: strategyState.positionTokenAccount,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n tickArrayLower: strategyState.tickArrayLower,\n tickArrayUpper: strategyState.tickArrayUpper,\n tokenAVault: strategyState.tokenAVault,\n tokenBVault: strategyState.tokenBVault,\n poolTokenVaultA: strategyState.poolTokenVaultA,\n poolTokenVaultB: strategyState.poolTokenVaultB,\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n scopePrices: strategyState.scopePrices,\n raydiumProtocolPositionOrBaseVaultAuthority: strategyState.raydiumProtocolPositionOrBaseVaultAuthority,\n poolProgram: programId,\n tokenInfos: globalConfig.tokenInfos,\n eventAuthority,\n tokenATokenProgram: keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n };\n\n const executiveWithdrawIx = executiveWithdraw(args, accounts);\n\n // for Raydium strats we need to collect fees and rewards before withdrawal\n // add rewards vaults accounts to withdraw\n const isRaydium = strategyState.strategyDex.toNumber() == dexToNumber('RAYDIUM');\n if (isRaydium) {\n const poolState = await this.getRaydiumPoolByAddress(strategyState.pool);\n if (!poolState) {\n throw new Error('Pool is not found');\n }\n\n if (strategyState.reward0Decimals.toNumber() > 0) {\n executiveWithdrawIx.keys = executiveWithdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[0].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.reward0Vault, isSigner: false, isWritable: true },\n ]);\n }\n if (strategyState.reward1Decimals.toNumber() > 0) {\n executiveWithdrawIx.keys = executiveWithdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[1].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.reward1Vault, isSigner: false, isWritable: true },\n ]);\n }\n if (strategyState.reward2Decimals.toNumber() > 0) {\n executiveWithdrawIx.keys = executiveWithdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[2].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.reward2Vault, isSigner: false, isWritable: true },\n ]);\n }\n }\n\n return executiveWithdrawIx;\n };\n\n /**\n * Get a an instruction to update the reference price type of a strategy\n * @param strategy strategy pubkey or object\n * @param referencePriceType new reference price type\n */\n getUpdateReferencePriceTypeIx = async (\n strategy: PublicKey | StrategyWithAddress,\n referencePriceType: ReferencePriceTypeKind\n ): Promise<TransactionInstruction> => {\n const { address, strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n return getUpdateStrategyConfigIx(\n strategyState.adminAuthority,\n this._globalConfig,\n address,\n new UpdateReferencePriceType(),\n new Decimal(referencePriceType.discriminator)\n );\n };\n\n /**\n * Get a transaction to invest funds from the Kamino vaults and put them into the DEX pool as liquidity.\n * @param strategy strategy pubkey or object\n * @param payer transaction payer\n */\n invest = async (strategy: PublicKey | StrategyWithAddress, payer: PublicKey): Promise<TransactionInstruction> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n if (!strategyWithAddress || !strategyWithAddress.strategy) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n\n const strategyState = strategyWithAddress.strategy;\n const globalConfig = await this.getGlobalConfigState(strategyState.globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${strategyState.globalConfig.toString()}`);\n }\n\n const programId = getDexProgramId(strategyState);\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategyDex);\n\n const accounts: InvestAccounts = {\n position: strategyState.position,\n positionTokenAccount: strategyState.positionTokenAccount,\n pool: strategyState.pool,\n tokenAVault: strategyState.tokenAVault,\n tokenBVault: strategyState.tokenBVault,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n payer,\n strategy: strategyWithAddress.address,\n globalConfig: strategyState.globalConfig,\n poolTokenVaultA: strategyState.poolTokenVaultA,\n poolTokenVaultB: strategyState.poolTokenVaultB,\n tickArrayLower: strategyState.tickArrayLower,\n tickArrayUpper: strategyState.tickArrayUpper,\n scopePrices: globalConfig.scopePriceId,\n raydiumProtocolPositionOrBaseVaultAuthority: strategyState.raydiumProtocolPositionOrBaseVaultAuthority,\n tokenInfos: globalConfig.tokenInfos,\n poolProgram: programId,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n eventAuthority,\n tokenATokenProgram: keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n };\n\n return invest(accounts);\n };\n\n /**\n * Get a list of instructions to collect the pending fees and invest them into the Kamino strategy's position.\n * @param strategy strategy pubkey or object\n * @param payer transaction payer\n */\n compound = async (strategy: PublicKey | StrategyWithAddress, payer: PublicKey): Promise<TransactionInstruction[]> => {\n // fetch here so the underlying instructions won't need to fetch\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n if (!strategyWithAddress) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n\n const collectFeesAndRewardsIx = this.collectFeesAndRewards(strategyWithAddress, payer);\n const investIx = this.invest(strategy, payer);\n\n return Promise.all([collectFeesAndRewardsIx, investIx]);\n };\n\n /**\n * Get a the pending fees in lamports of a strategy.\n * @param strategy strategy pubkey or object\n */\n getPendingFees = async (strategies: PublicKey[]): Promise<StrategyWithPendingFees[]> => {\n const strategiesWithAddresses = await this.getStrategiesWithAddresses(strategies);\n const raydiumStrategies = strategiesWithAddresses.filter(\n (x) =>\n x.strategy.strategyDex.toNumber() === dexToNumber('RAYDIUM') && !x.strategy.position.equals(PublicKey.default)\n );\n const raydiumPositionsPromise = this.getRaydiumPositions(raydiumStrategies.map((x) => x.strategy.position));\n const orcaStrategies = strategiesWithAddresses.filter(\n (x) => x.strategy.strategyDex.toNumber() === dexToNumber('ORCA') && !x.strategy.position.equals(PublicKey.default)\n );\n const orcaPositionsPromise = this.getOrcaPositions(orcaStrategies.map((x) => x.strategy.position));\n const meteoraStrategies = strategiesWithAddresses.filter(\n (x) =>\n x.strategy.strategyDex.toNumber() === dexToNumber('METEORA') && !x.strategy.position.equals(PublicKey.default)\n );\n const meteoraPositionsPromise = this.getMeteoraPositions(meteoraStrategies.map((x) => x.strategy.position));\n const [raydiumPositions, orcaPositions, meteoraPositions] = await Promise.all([\n raydiumPositionsPromise,\n orcaPositionsPromise,\n meteoraPositionsPromise,\n ]);\n\n const result: StrategyWithPendingFees[] = [];\n for (let index = 0; index < orcaStrategies.length; index++) {\n const orcaPosition = orcaPositions[index];\n if (!orcaPosition) {\n throw Error(\n `Could not fetch Orca position state with pubkey ${orcaStrategies[index].strategy.position.toString()}`\n );\n }\n const pendingFees = {\n a: new Decimal(orcaPosition.feeOwedA.toString()),\n b: new Decimal(orcaPosition.feeOwedB.toString()),\n };\n result.push({\n strategy: orcaStrategies[index],\n pendingFees,\n });\n }\n\n for (let index = 0; index < raydiumStrategies.length; index++) {\n const raydiumPosition = raydiumPositions[index];\n if (!raydiumPosition) {\n throw Error(\n `Could not fetch Raydium position state with pubkey ${raydiumStrategies[index].strategy.position.toString()}`\n );\n }\n const pendingFees = {\n a: new Decimal(raydiumPosition.tokenFeesOwed0.toString()),\n b: new Decimal(raydiumPosition.tokenFeesOwed1.toString()),\n };\n result.push({\n strategy: raydiumStrategies[index],\n pendingFees,\n });\n }\n\n for (let index = 0; index < meteoraStrategies.length; index++) {\n const meteoraPosition = meteoraPositions[index];\n if (!meteoraPosition) {\n throw Error(\n `Could not fetch Meteora position state with pubkey ${meteoraStrategies[index].strategy.position.toString()}`\n );\n }\n const pendingFees: TokenAmounts = {\n a: ZERO,\n b: ZERO,\n };\n for (const feeInfo of meteoraPosition.feeInfos) {\n pendingFees.a = pendingFees.a.add(feeInfo.feeXPending.toString());\n pendingFees.b = pendingFees.b.add(feeInfo.feeYPending.toString());\n }\n result.push({\n strategy: meteoraStrategies[index],\n pendingFees,\n });\n }\n\n return result;\n };\n\n getUpdateRebalancingParamsFromRebalanceFieldsIx = async (\n strategyAdmin: PublicKey,\n strategy: PublicKey | StrategyWithAddress,\n rebalanceFieldInfos: RebalanceFieldInfo[]\n ): Promise<TransactionInstruction> => {\n const rebalanceType = getRebalanceTypeFromRebalanceFields(rebalanceFieldInfos);\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n if (!strategyWithAddress || !strategyWithAddress.strategy) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n\n const rebalanceParams = rebalanceFieldInfos\n .filter((x) => x.label != RebalanceTypeLabelName && x.enabled)\n .map((f) => new Decimal(f.value));\n return this.getUpdateRebalancingParmsIxns(\n strategyAdmin,\n strategyWithAddress.address,\n rebalanceParams,\n rebalanceType,\n strategyWithAddress.strategy.tokenAMintDecimals.toNumber(),\n strategyWithAddress.strategy.tokenBMintDecimals.toNumber()\n );\n };\n\n processRebalanceParams = async (\n dex: Dex,\n pool: PublicKey | WhirlpoolWithAddress,\n rebalanceType: Decimal,\n rebalanceParams: Decimal[]\n ): Promise<Decimal[]> => {\n const processedRebalanceParams = [...rebalanceParams];\n const rebalanceTypeKind = numberToRebalanceType(rebalanceType.toNumber());\n if (dex == 'ORCA') {\n const { whirlpool: whilrpoolState } = await this.getWhirlpoolStateIfNotFetched(pool);\n if (rebalanceTypeKind.kind == RebalanceType.Drift.kind) {\n processedRebalanceParams[0] = new Decimal(\n getNearestValidTickIndexFromTickIndex(rebalanceParams[0].toNumber(), whilrpoolState.tickSpacing)\n );\n }\n }\n\n return processedRebalanceParams;\n };\n\n getUpdateRebalancingParmsIxns = async (\n strategyAdmin: PublicKey,\n strategy: PublicKey | StrategyWithAddress,\n rebalanceParams: Decimal[],\n rebalanceType?: RebalanceTypeKind,\n tokenADecimals?: number,\n tokenBDecimals?: number\n ): Promise<TransactionInstruction> => {\n const { address: strategyAddress, strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n if (!rebalanceType) {\n rebalanceType = numberToRebalanceType(strategyState.rebalanceType);\n }\n tokenADecimals = strategyState.tokenAMintDecimals.toNumber();\n tokenBDecimals = strategyState.tokenBMintDecimals.toNumber();\n\n const processedRebalanceParams = await this.processRebalanceParams(\n numberToDex(strategyState.strategyDex.toNumber()),\n strategyState.pool,\n new Decimal(rebalanceType.discriminator),\n rebalanceParams\n );\n\n const value = buildStrategyRebalanceParams(processedRebalanceParams, rebalanceType, tokenADecimals, tokenBDecimals);\n const args: UpdateStrategyConfigArgs = {\n mode: StrategyConfigOption.UpdateRebalanceParams.discriminator,\n value,\n };\n\n const accounts: UpdateStrategyConfigAccounts = {\n adminAuthority: strategyAdmin,\n newAccount: PublicKey.default, // not used\n globalConfig: this._globalConfig,\n strategy: strategyAddress,\n systemProgram: SystemProgram.programId,\n };\n return updateStrategyConfig(args, accounts);\n };\n\n getUpdateRebalancingParamsForUninitializedStratIx = async (\n strategyAdmin: PublicKey,\n strategy: PublicKey,\n rebalanceParams: Decimal[],\n rebalanceType: RebalanceTypeKind,\n tokenADecimals: number,\n tokenBDecimals: number\n ): Promise<TransactionInstruction> => {\n const value = buildStrategyRebalanceParams(rebalanceParams, rebalanceType, tokenADecimals, tokenBDecimals);\n const args: UpdateStrategyConfigArgs = {\n mode: StrategyConfigOption.UpdateRebalanceParams.discriminator,\n value,\n };\n\n const accounts: UpdateStrategyConfigAccounts = {\n adminAuthority: strategyAdmin,\n newAccount: PublicKey.default, // not used\n globalConfig: this._globalConfig,\n strategy,\n systemProgram: SystemProgram.programId,\n };\n return updateStrategyConfig(args, accounts);\n };\n\n buildStrategyRebalanceParams = async (strategy: PublicKey | StrategyWithAddress): Promise<number[]> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n\n const params = strategyState.strategy.rebalanceRaw.params.map((p) => new Decimal(p.toString()));\n return buildStrategyRebalanceParams(params, numberToRebalanceType(strategyState.strategy.rebalanceType));\n };\n\n /**\n * Get a list of instructions to initialize and set up a strategy\n * @param dex the dex to use (Orca or Raydium)\n * @param feeTierBps which fee tier for that specific pair should be used (in BPS)\n * @param tokenAMint the mint of TokenA in the pool\n * @param tokenBMint the mint of TokenB in the pool\n * @param depositCap the maximum amount in USD in lamports (6 decimals) that can be deposited into the strategy\n * @param depositCapPerIx the maximum amount in USD in lamports (6 decimals) that can be deposited into the strategy per instruction\n */\n getBuildStrategyIxns = async (\n dex: Dex,\n feeTierBps: Decimal,\n strategy: PublicKey,\n positionMint: PublicKey,\n strategyAdmin: PublicKey,\n rebalanceType: Decimal,\n rebalanceParams: Decimal[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n depositCap?: Decimal,\n depositCapPerIx?: Decimal,\n withdrawFeeBps?: Decimal,\n depositFeeBps?: Decimal,\n performanceFeeBps?: Decimal\n ): Promise<InitStrategyIxs> => {\n const feeTier: Decimal = feeTierBps.div(FullBPS);\n // check both tokens exist in collateralInfo\n const config = await this.getGlobalConfigState(this._globalConfig);\n if (!config) {\n throw Error(`Could not fetch globalConfig with pubkey ${this.getGlobalConfig().toString()}`);\n }\n const collateralInfos = await this.getCollateralInfo(config.tokenInfos);\n if (!this.mintIsSupported(collateralInfos, tokenAMint) || !this.mintIsSupported(collateralInfos, tokenBMint)) {\n throw Error(`Token mint ${tokenAMint.toString()} is not supported`);\n }\n\n const pool = await this.getPoolInitializedForDexPairTier(dex, tokenAMint, tokenBMint, feeTier.mul(FullBPS));\n if (pool == PublicKey.default) {\n throw Error(\n `Pool for tokens ${tokenAMint.toString()} and ${tokenBMint.toString()} for feeTier ${feeTier.toString()} does not exist`\n );\n }\n\n const processedRebalanceParams = await this.processRebalanceParams(dex, pool, rebalanceType, rebalanceParams);\n\n const price = await this.getCurrentPriceFromPool(dex, pool);\n\n let tokenMintA: PublicKey;\n let tokenMintB: PublicKey;\n let tickSpacing: number;\n if (dex == 'ORCA') {\n const whirlpoolState = await Whirlpool.fetch(this._connection, pool);\n if (!whirlpoolState) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n tokenMintA = whirlpoolState.tokenMintA;\n tokenMintB = whirlpoolState.tokenMintB;\n tickSpacing = whirlpoolState.tickSpacing;\n } else if (dex == 'RAYDIUM') {\n const raydiumPoolState = await PoolState.fetch(this._connection, pool);\n if (!raydiumPoolState) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${pool.toString()}`);\n }\n tokenMintA = raydiumPoolState.tokenMint0;\n tokenMintB = raydiumPoolState.tokenMint1;\n tickSpacing = raydiumPoolState.tickSpacing;\n } else if (dex == 'METEORA') {\n const meteoraPoolState = await LbPair.fetch(this._connection, pool);\n if (!meteoraPoolState) {\n throw Error(`Could not fetch Meteora pool state with pubkey ${pool.toString()}`);\n }\n tokenMintA = meteoraPoolState.tokenXMint;\n tokenMintB = meteoraPoolState.tokenYMint;\n tickSpacing = meteoraPoolState.binStep;\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n const tokenATokenProgram = await this.getAccountOwner(tokenAMint);\n const tokenBTokenProgram = await this.getAccountOwner(tokenBMint);\n\n const initStrategyIx: TransactionInstruction = await this.createStrategy(strategy, pool, strategyAdmin, dex);\n\n const tokenADecimals = await getMintDecimals(this._connection, tokenMintA);\n const tokenBDecimals = await getMintDecimals(this._connection, tokenMintB);\n const rebalanceKind = numberToRebalanceType(rebalanceType.toNumber());\n\n const updateRebalanceParamsIx = await this.getUpdateRebalancingParamsForUninitializedStratIx(\n strategyAdmin,\n strategy,\n processedRebalanceParams,\n rebalanceKind,\n tokenADecimals,\n tokenBDecimals\n );\n\n const updateStrategyParamsIxs = await this.getUpdateStrategyParamsIxs(\n strategyAdmin,\n strategy,\n rebalanceType,\n withdrawFeeBps,\n performanceFeeBps\n );\n\n const programAddresses = await this.getStrategyProgramAddresses(strategy, tokenMintA, tokenMintB);\n const baseVaultAuthority = programAddresses.baseVaultAuthority;\n const tokenAVault = programAddresses.tokenAVault;\n const tokenBVault = programAddresses.tokenBVault;\n\n const { lowerPrice, upperPrice } = await this.getRebalancePositionRange(\n dex,\n price,\n tokenAMint,\n tokenBMint,\n tickSpacing,\n rebalanceKind,\n rebalanceParams\n );\n\n const openPositionIxs: TransactionInstruction[] = [];\n const eventAuthority = this.getEventAuthorityPDA(new BN(dexToNumber(dex)));\n if (dex == 'ORCA') {\n const whirlpoolWithAddress = await this.getWhirlpoolStateIfNotFetched(pool);\n if (!whirlpoolWithAddress) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n const initLowerTickIfNeeded = await this.initializeTickForOrcaPool(strategyAdmin, pool, lowerPrice);\n const initUpperTickIfNeeded = await this.initializeTickForOrcaPool(strategyAdmin, pool, upperPrice);\n\n const openPositionIx = await this.openPositionOrca(\n strategyAdmin,\n strategy,\n baseVaultAuthority,\n pool,\n positionMint,\n lowerPrice,\n upperPrice,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenATokenProgram,\n tokenBTokenProgram,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n eventAuthority\n );\n if (initLowerTickIfNeeded.initTickIx) {\n openPositionIxs.push(initLowerTickIfNeeded.initTickIx);\n }\n if (initUpperTickIfNeeded.initTickIx) {\n openPositionIxs.push(initUpperTickIfNeeded.initTickIx);\n }\n openPositionIxs.push(openPositionIx);\n } else if (dex == 'RAYDIUM') {\n const openPositionIx = await this.openPositionRaydium(\n strategyAdmin,\n strategy,\n baseVaultAuthority,\n pool,\n positionMint,\n lowerPrice,\n upperPrice,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenATokenProgram,\n tokenBTokenProgram,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n eventAuthority\n );\n\n openPositionIxs.push(openPositionIx);\n } else if (dex == 'METEORA') {\n const lbPair = await this.getMeteoraStateIfNotFetched(pool);\n if (!lbPair) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n const initLowerTickIfNeeded = await this.initializeTickForMeteoraPool(strategyAdmin, pool, lowerPrice);\n const initUpperTickIfNeeded = await this.initializeTickForMeteoraPool(strategyAdmin, pool, upperPrice);\n\n const openPositionIx = await this.openPositionMeteora(\n strategyAdmin,\n strategy,\n baseVaultAuthority,\n pool,\n positionMint,\n lowerPrice,\n upperPrice,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenATokenProgram,\n tokenBTokenProgram,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n eventAuthority\n );\n if (initLowerTickIfNeeded.initTickIx) {\n openPositionIxs.push(initLowerTickIfNeeded.initTickIx);\n }\n if (initUpperTickIfNeeded.initTickIx) {\n openPositionIxs.push(initUpperTickIfNeeded.initTickIx);\n }\n openPositionIxs.push(openPositionIx);\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n\n return {\n initStrategyIx,\n updateStrategyParamsIxs,\n updateRebalanceParamsIx,\n openPositionIxs,\n };\n };\n\n async getNewPositionRange(\n strategy: PublicKey | StrategyWithAddress,\n rebalanceKind: RebalanceTypeKind,\n rebalanceParams: Decimal[]\n ): Promise<PositionRange> {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n const dex = numberToDex(strategyState.strategy.strategyDex.toNumber());\n const tokenAMint = strategyState.strategy.tokenAMint;\n const tokenBMint = strategyState.strategy.tokenBMint;\n const price = await this.getCurrentPriceFromPool(dex, strategyState.strategy.pool);\n const tickSpacing = await this.getPoolTickSpacing(dex, strategyState.strategy.pool);\n\n return this.getRebalancePositionRange(\n dex,\n price,\n tokenAMint,\n tokenBMint,\n tickSpacing,\n rebalanceKind,\n rebalanceParams\n );\n }\n\n private async getRebalancePositionRange(\n dex: Dex,\n price: Decimal,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tickSpacing: number,\n rebalanceKind: RebalanceTypeKind,\n rebalanceParams: Decimal[]\n ): Promise<PositionRange> {\n const tokenADecimals = await getMintDecimals(this._connection, tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, tokenBMint);\n switch (rebalanceKind.kind) {\n case RebalanceType.Manual.kind:\n return { lowerPrice: rebalanceParams[0], upperPrice: rebalanceParams[1] };\n case RebalanceType.TakeProfit.kind:\n return { lowerPrice: rebalanceParams[0], upperPrice: rebalanceParams[1] };\n\n case RebalanceType.PricePercentage.kind:\n return getPositionRangeFromPercentageRebalanceParams(price, rebalanceParams[0], rebalanceParams[1]);\n\n case RebalanceType.PricePercentageWithReset.kind:\n return getPositionRangeFromPricePercentageWithResetParams(price, rebalanceParams[0], rebalanceParams[1]);\n\n case RebalanceType.Drift.kind:\n return getPositionRangeFromDriftParams(\n dex,\n tickSpacing,\n tokenADecimals,\n tokenBDecimals,\n rebalanceParams[0],\n rebalanceParams[1],\n rebalanceParams[2]\n );\n\n case RebalanceType.PeriodicRebalance.kind:\n return getPositionRangeFromPeriodicRebalanceParams(price, rebalanceParams[1], rebalanceParams[2]);\n\n case RebalanceType.Expander.kind:\n return getPositionRangeFromExpanderParams(price, rebalanceParams[0], rebalanceParams[1]);\n\n case RebalanceType.Autodrift.kind:\n const currentTickIndex = priceToTickIndex(price, tokenADecimals, tokenBDecimals);\n const startMidTick = new Decimal(currentTickIndex);\n return getPositionRangeFromAutodriftParams(\n dex,\n tokenADecimals,\n tokenBDecimals,\n startMidTick,\n rebalanceParams[1],\n rebalanceParams[2],\n tickSpacing\n );\n\n default:\n throw new Error(`Rebalance type ${rebalanceKind} is not supported`);\n }\n }\n\n async getCurrentPrice(strategy: PublicKey | StrategyWithAddress): Promise<Decimal> {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const pool = strategyWithAddress.strategy.pool;\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n\n return this.getCurrentPriceFromPool(dex, pool);\n }\n\n async getCurrentPriceFromPool(dex: Dex, pool: PublicKey): Promise<Decimal> {\n if (dex == 'ORCA') {\n return this.getOrcaPoolPrice(pool);\n } else if (dex == 'RAYDIUM') {\n return this.getRaydiumPoolPrice(pool);\n } else if (dex == 'METEORA') {\n return this.getMeteoraPoolPrice(pool);\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n }\n\n async getPoolTickSpacing(dex: Dex, pool: PublicKey): Promise<number> {\n if (dex == 'ORCA') {\n const whirlpoolState = await Whirlpool.fetch(this._connection, pool);\n if (!whirlpoolState) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n return whirlpoolState.tickSpacing;\n } else if (dex == 'RAYDIUM') {\n const raydiumPoolState = await PoolState.fetch(this._connection, pool);\n if (!raydiumPoolState) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${pool.toString()}`);\n }\n return raydiumPoolState.tickSpacing;\n } else if (dex == 'METEORA') {\n const meteoraPoolState = await LbPair.fetch(this._connection, pool);\n if (!meteoraPoolState) {\n throw Error(`Could not fetch Meteora pool state with pubkey ${pool.toString()}`);\n }\n return meteoraPoolState.binStep;\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n }\n\n async getPriceRangePercentageBasedFromPool(\n dex: Dex,\n pool: PublicKey,\n lowerPriceBpsDifference: Decimal,\n upperPriceBpsDifference: Decimal\n ): Promise<[Decimal, Decimal]> {\n let poolPrice: Decimal;\n if (dex == 'ORCA') {\n poolPrice = await this.getOrcaPoolPrice(pool);\n } else if (dex == 'RAYDIUM') {\n poolPrice = await this.getRaydiumPoolPrice(pool);\n } else if (dex == 'METEORA') {\n poolPrice = await this.getMeteoraPoolPrice(pool);\n } else {\n throw new Error(`Invalid dex ${dex}`);\n }\n\n return this.getPriceRangePercentageBasedFromPrice(poolPrice, lowerPriceBpsDifference, upperPriceBpsDifference);\n }\n\n /**\n * Get the raw rebalancing params given the strategy type\n */\n async readRebalancingParamsFromChain(strategy: PublicKey | StrategyWithAddress): Promise<RebalanceFieldInfo[]> {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const rebalanceKind = numberToRebalanceType(strategyWithAddress.strategy.rebalanceType);\n\n let rebalanceFields: RebalanceFieldInfo[];\n if (rebalanceKind.kind === Manual.kind) {\n rebalanceFields = [];\n } else if (rebalanceKind.kind === PricePercentage.kind) {\n rebalanceFields = readPricePercentageRebalanceParamsFromStrategy(strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n rebalanceFields = readPricePercentageWithResetRebalanceParamsFromStrategy(\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === Drift.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readDriftRebalanceParamsFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === TakeProfit.kind) {\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n rebalanceFields = rebalanceFieldsDictToInfo(\n readTakeProfitRebalanceParamsFromStrategy(\n tokenADecimals,\n tokenBDecimals,\n strategyWithAddress.strategy.rebalanceRaw\n )\n );\n } else if (rebalanceKind.kind === PeriodicRebalance.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readPeriodicRebalanceRebalanceParamsFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === Expander.kind) {\n rebalanceFields = readExpanderRebalanceParamsFromStrategy(strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === Autodrift.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readAutodriftRebalanceParamsFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else {\n throw new Error(`Rebalance type ${rebalanceKind} is not supported`);\n }\n return rebalanceFields;\n }\n\n /**\n * Get the raw rebalancing params given the strategy type\n */\n async readRebalancingStateFromChain(strategy: PublicKey | StrategyWithAddress): Promise<RebalanceFieldInfo[]> {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const rebalanceKind = numberToRebalanceType(strategyWithAddress.strategy.rebalanceType);\n\n let rebalanceFields: RebalanceFieldInfo[];\n if (rebalanceKind.kind === Manual.kind) {\n rebalanceFields = [];\n } else if (rebalanceKind.kind === PricePercentage.kind) {\n rebalanceFields = readRawPricePercentageRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n rebalanceFields = readRawPricePercentageWithResetRebalanceStateFromStrategy(\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === Drift.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readRawDriftRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === TakeProfit.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readTakeProfitRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === PeriodicRebalance.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readPeriodicRebalanceRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === Expander.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readRawExpanderRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === Autodrift.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readRawAutodriftRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else {\n throw new Error(`Rebalance type ${rebalanceKind} is not supported`);\n }\n return rebalanceFields;\n }\n\n /**\n * Get the prices for rebalancing params (range and reset range, if strategy involves a reset range)\n */\n async readRebalancingParams(strategy: PublicKey | StrategyWithAddress): Promise<RebalanceFieldInfo[]> {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const rebalanceKind = numberToRebalanceType(strategyWithAddress.strategy.rebalanceType);\n\n if (rebalanceKind.kind === Manual.kind) {\n const positionRange = await this.getStrategyRange(strategyWithAddress);\n return getManualRebalanceFieldInfos(positionRange.lowerPrice, positionRange.upperPrice);\n } else if (rebalanceKind.kind === PricePercentage.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePricePercentageRebalanceFromOnchainParams(price, strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePricePercentageWithResetRebalanceFromOnchainParams(\n price,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === Drift.kind) {\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n const tickSpacing = await this.getPoolTickSpacing(dex, strategyWithAddress.strategy.pool);\n return deserializeDriftRebalanceFromOnchainParams(\n dex,\n tickSpacing,\n tokenADecimals,\n tokenBDecimals,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === TakeProfit.kind) {\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n return deserializeTakeProfitRebalanceFromOnchainParams(\n tokenADecimals,\n tokenBDecimals,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === PeriodicRebalance.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePeriodicRebalanceFromOnchainParams(price, strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === Expander.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return readExpanderRebalanceFieldInfosFromStrategy(price, strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === Autodrift.kind) {\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n const tickSpacing = await this.getPoolTickSpacing(dex, strategyWithAddress.strategy.pool);\n return deserializeAutodriftRebalanceFromOnchainParams(\n dex,\n tokenADecimals,\n tokenBDecimals,\n tickSpacing,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else {\n throw new Error(`Rebalance type ${rebalanceKind} is not supported`);\n }\n }\n\n /**\n * Get the rebalancing params from chain, alongside the current details of the position, reset range, etc\n */\n async readRebalancingParamsWithState(strategy: PublicKey | StrategyWithAddress): Promise<RebalanceFieldInfo[]> {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const rebalanceKind = numberToRebalanceType(strategyWithAddress.strategy.rebalanceType);\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n const tokenADecimals = strategyWithAddress.strategy.tokenAMintDecimals.toNumber();\n const tokenBDecimals = strategyWithAddress.strategy.tokenBMintDecimals.toNumber();\n\n if (rebalanceKind.kind === Manual.kind) {\n const positionRange = await this.getStrategyRange(strategyWithAddress);\n return getManualRebalanceFieldInfos(positionRange.lowerPrice, positionRange.upperPrice);\n } else if (rebalanceKind.kind === PricePercentage.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePricePercentageRebalanceWithStateOverride(\n dex,\n tokenADecimals,\n tokenBDecimals,\n price,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePricePercentageWithResetRebalanceWithStateOverride(\n dex,\n tokenADecimals,\n tokenBDecimals,\n price,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === Drift.kind) {\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n const tickSpacing = await this.getPoolTickSpacing(dex, strategyWithAddress.strategy.pool);\n return deserializeDriftRebalanceWithStateOverride(\n dex,\n tickSpacing,\n tokenADecimals,\n tokenBDecimals,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === TakeProfit.kind) {\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n return deserializeTakeProfitRebalanceFromOnchainParams(\n tokenADecimals,\n tokenBDecimals,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === PeriodicRebalance.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePeriodicRebalanceFromOnchainParams(price, strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === Expander.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializeExpanderRebalanceWithStateOverride(\n dex,\n tokenADecimals,\n tokenBDecimals,\n price,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === Autodrift.kind) {\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n const tickSpacing = await this.getPoolTickSpacing(dex, strategyWithAddress.strategy.pool);\n return deserializeAutodriftRebalanceWithStateOverride(\n dex,\n tokenADecimals,\n tokenBDecimals,\n tickSpacing,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else {\n throw new Error(`Rebalance type ${rebalanceKind} is not supported`);\n }\n }\n\n /**\n * Get a list of updated rebalance field infos.\n * @param initialRebalanceFieldInfos the initial list of rebalance field infos\n * @param updatedFields the fields to be updated, with label and value\n * @returns list of RebalanceFieldInfo with updated values\n */\n getUpdatedRebalanceFieldInfos(\n initialRebalanceFieldInfos: RebalanceFieldInfo[],\n updatedFields: InputRebalanceFieldInfo[]\n ): RebalanceFieldInfo[] {\n const newRebalanceFieldInfos = initialRebalanceFieldInfos.map((f) => {\n const updatedField = updatedFields.find((x) => x.label == f.label);\n if (updatedField) {\n return { ...f, value: updatedField.value };\n } else {\n return f;\n }\n });\n return newRebalanceFieldInfos;\n }\n\n getPriceRangePercentageBasedFromPrice(\n price: Decimal,\n lowerPriceBpsDifference: Decimal,\n upperPriceBpsDifference: Decimal\n ): [Decimal, Decimal] {\n const fullBPSDecimal = new Decimal(FullBPS);\n const lowerPrice = price.mul(fullBPSDecimal.sub(lowerPriceBpsDifference)).div(fullBPSDecimal);\n const upperPrice = price.mul(fullBPSDecimal.add(upperPriceBpsDifference)).div(fullBPSDecimal);\n\n return [lowerPrice, upperPrice];\n }\n\n /**\n * Read the pool price for a specific dex and pool\n */\n async getPoolPrice(dex: Dex, pool: PublicKey): Promise<Decimal> {\n if (dex == 'ORCA') {\n return this.getOrcaPoolPrice(pool);\n } else if (dex == 'RAYDIUM') {\n return this.getRaydiumPoolPrice(pool);\n } else if (dex == 'METEORA') {\n return this.getMeteoraPoolPrice(pool);\n } else {\n throw new Error(`Invalid dex ${dex}`);\n }\n }\n\n async getOrcaPoolPrice(pool: PublicKey): Promise<Decimal> {\n const orca = new OrcaWhirlpoolClient({\n connection: this._connection,\n network: this._cluster === 'mainnet-beta' ? OrcaNetwork.MAINNET : OrcaNetwork.DEVNET,\n });\n\n const poolData = await orca.getPool(pool);\n if (!poolData) {\n throw Error(`Could not fetch Whirlpool data for ${pool.toString()}`);\n }\n\n return poolData.price;\n }\n\n async getRaydiumPoolPrice(pool: PublicKey): Promise<Decimal> {\n const poolState = await PoolState.fetch(this._connection, pool);\n if (!poolState) {\n throw new Error(`Raydium poolState ${pool.toString()} is not found`);\n }\n\n const price = SqrtPriceMath.sqrtPriceX64ToPrice(\n poolState.sqrtPriceX64,\n poolState.mintDecimals0,\n poolState.mintDecimals1\n );\n return price;\n }\n\n async getMeteoraPoolPrice(pool: PublicKey): Promise<Decimal> {\n const poolState = await LbPair.fetch(this._connection, pool);\n if (!poolState) {\n throw new Error(`Meteora poolState ${pool.toString()} is not found`);\n }\n const decimalsX = await getMintDecimals(this._connection, poolState.tokenXMint);\n const decimalsY = await getMintDecimals(this._connection, poolState.tokenYMint);\n return getPriceOfBinByBinIdWithDecimals(poolState.activeId, poolState.binStep, decimalsX, decimalsY);\n }\n\n async getGenericPoolInfo(dex: Dex, pool: PublicKey): Promise<GenericPoolInfo> {\n let poolInfo: GenericPoolInfo;\n if (dex == 'ORCA') {\n poolInfo = await this._orcaService.getGenericPoolInfo(pool);\n } else if (dex == 'RAYDIUM') {\n poolInfo = await this._raydiumService.getGenericPoolInfo(pool);\n } else if (dex == 'METEORA') {\n poolInfo = await this._meteoraService.getGenericPoolInfo(pool);\n } else {\n throw new Error(`Invalid dex ${dex}`);\n }\n\n return poolInfo;\n }\n\n mintIsSupported = (collateralInfos: CollateralInfo[], tokenMint: PublicKey): boolean => {\n let found = false;\n collateralInfos.forEach((element) => {\n if (element.mint.equals(tokenMint)) {\n found = true;\n }\n });\n return found;\n };\n\n getCollateralInfoFromMint = (mint: PublicKey, collateralInfos: CollateralInfo[]): CollateralInfo | undefined => {\n const collInfosForMint = collateralInfos.filter((x) => x.mint.equals(mint));\n if (collInfosForMint.length == 0) {\n return undefined;\n }\n return collInfosForMint[0];\n };\n\n getCollateralIdFromMint = (mint: PublicKey, collateralInfos: CollateralInfo[]): number => {\n for (let i = 0; i < collateralInfos.length; i++) {\n if (collateralInfos[i].mint.equals(mint)) {\n return i;\n }\n }\n\n return -1;\n };\n\n getMainLookupTablePks = async (): Promise<PublicKey[]> => {\n if (\n this._kaminoProgramId.equals(STAGING_KAMINO_PROGRAM_ID) ||\n this._cluster == 'mainnet-beta' ||\n this._cluster == 'devnet'\n ) {\n return await this._connection\n .getProgramAccounts(ADDRESS_LUT_PROGRAM_ID, {\n filters: [{ memcmp: { offset: 22, bytes: new PublicKey(LUT_OWNER_KEY).toString() } }],\n dataSlice: { length: 0, offset: 0 },\n })\n .then((res) => res.map((raw) => raw.pubkey));\n }\n return [];\n };\n\n getMainLookupTable = async (): Promise<AddressLookupTableAccount[] | undefined> => {\n const pks = await this.getMainLookupTablePks();\n if (\n this._kaminoProgramId.equals(STAGING_KAMINO_PROGRAM_ID) ||\n this._cluster == 'mainnet-beta' ||\n this._cluster == 'devnet'\n ) {\n return await this._connection.getMultipleAccountsInfo(pks).then((res) =>\n res.map((raw, i) => {\n return new AddressLookupTableAccount({\n key: pks[i],\n state: AddressLookupTableAccount.deserialize(raw!.data),\n });\n })\n );\n } else {\n return undefined;\n }\n };\n\n getInitLookupTableIx = async (authority: PublicKey, slot?: number): Promise<[TransactionInstruction, PublicKey]> => {\n let recentSlot = slot;\n if (!recentSlot) {\n recentSlot = await this._connection.getSlot();\n }\n const slots = await this._connection.getBlocks(recentSlot - 20, recentSlot, 'confirmed');\n return AddressLookupTableProgram.createLookupTable({\n authority,\n payer: authority,\n recentSlot: slots[0],\n });\n };\n\n getPopulateLookupTableIxs = async (\n authority: PublicKey,\n lookupTable: PublicKey,\n strategy: PublicKey | StrategyWithAddress\n ): Promise<TransactionInstruction[]> => {\n const { strategy: strategyState, address } = await this.getStrategyStateIfNotFetched(strategy);\n if (!strategyState) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n const { treasuryFeeTokenAVault, treasuryFeeTokenBVault, treasuryFeeVaultAuthority } = this.getTreasuryFeeVaultPDAs(\n strategyState.tokenAMint,\n strategyState.tokenBMint\n );\n\n const accountsToBeInserted: PublicKey[] = [\n address,\n strategyState.adminAuthority,\n strategyState.globalConfig,\n strategyState.baseVaultAuthority,\n strategyState.pool,\n strategyState.tokenAMint,\n strategyState.tokenBMint,\n strategyState.tokenAVault,\n strategyState.tokenBVault,\n strategyState.poolTokenVaultA,\n strategyState.poolTokenVaultB,\n strategyState.tokenAMint,\n strategyState.sharesMint,\n strategyState.sharesMintAuthority,\n treasuryFeeTokenAVault,\n treasuryFeeTokenBVault,\n treasuryFeeVaultAuthority,\n ];\n\n return this.getAddLookupTableEntriesIxs(authority, lookupTable, accountsToBeInserted);\n };\n\n getAddLookupTableEntriesIxs = (\n authority: PublicKey,\n lookupTable: PublicKey,\n entries: PublicKey[]\n ): TransactionInstruction[] => {\n const chunkSize = 20;\n const txs: TransactionInstruction[] = [];\n for (let i = 0; i < entries.length; i += chunkSize) {\n const chunk = entries.slice(i, i + chunkSize);\n txs.push(\n AddressLookupTableProgram.extendLookupTable({\n payer: authority,\n authority,\n lookupTable,\n addresses: chunk,\n })\n );\n }\n return txs;\n };\n\n getLookupTable = async (tablePk: PublicKey): Promise<AddressLookupTableAccount> => {\n const lookupTableAccount = await this._connection.getAddressLookupTable(tablePk).then((res) => res.value);\n if (!lookupTableAccount) {\n throw new Error(`Could not get lookup table ${tablePk.toString()}`);\n }\n return lookupTableAccount;\n };\n\n setupStrategyLookupTable = async (\n authority: Keypair,\n strategy: PublicKey | StrategyWithAddress,\n slot?: number\n ): Promise<PublicKey> => {\n const [createLookupTableIx, lookupTable] = await this.getInitLookupTableIx(authority.publicKey, slot);\n const populateLookupTableIx = await this.getPopulateLookupTableIxs(authority.publicKey, lookupTable, strategy);\n\n const strategyPk = strategy instanceof PublicKey ? strategy : strategy.address;\n const getUpdateStrategyLookupTableIx = await getUpdateStrategyConfigIx(\n authority.publicKey,\n this._globalConfig,\n strategyPk,\n new UpdateLookupTable(),\n new Decimal(0),\n lookupTable\n );\n\n const createTableTx = new Transaction().add(createLookupTableIx);\n await sendTransactionWithLogs(this._connection, createTableTx, authority.publicKey, [authority]);\n for (const ix of populateLookupTableIx) {\n const populateLookupTableTx = new Transaction().add(ix);\n await sendTransactionWithLogs(this._connection, populateLookupTableTx, authority.publicKey, [authority]);\n }\n\n const updateStrategyLookupTableTx = new Transaction().add(getUpdateStrategyLookupTableIx);\n const sig = await sendTransactionWithLogs(this._connection, updateStrategyLookupTableTx, authority.publicKey, [\n authority,\n ]);\n console.log('Updated strategy', strategyPk, 'lookup table', sig);\n\n return lookupTable;\n };\n\n // the optional param is a list of pubkeys of lookup tables and they will be read from chain and used in the tx\n getTransactionV2Message = async (\n payer: PublicKey,\n instructions: Array<TransactionInstruction>,\n lookupTables?: Array<PublicKey>\n ): Promise<MessageV0> => {\n const lookupTable = await this.getMainLookupTable();\n\n let allLookupTables: AddressLookupTableAccount[] = [];\n if (lookupTable) {\n allLookupTables = allLookupTables.concat(lookupTable);\n }\n if (lookupTables) {\n for (const table of lookupTables) {\n const lookupTableData = await this.getLookupTable(table);\n allLookupTables.push(lookupTableData);\n }\n }\n return await this.getTransactionV2MessageWithFetchedLookupTables(payer, instructions, allLookupTables);\n };\n\n // the optional param is the lookup table list of the tables that are already feteched from chain\n getTransactionV2MessageWithFetchedLookupTables = async (\n payer: PublicKey,\n instructions: Array<TransactionInstruction>,\n lookupTables?: Array<AddressLookupTableAccount>\n ): Promise<MessageV0> => {\n const lookupTable = await this.getMainLookupTable();\n const blockhash = await this._connection.getLatestBlockhash();\n\n let allLookupTables: AddressLookupTableAccount[] = [];\n if (lookupTables) {\n allLookupTables.push(...lookupTables);\n }\n\n if (lookupTable) {\n allLookupTables = allLookupTables.concat(lookupTable);\n }\n\n const v2Tx = new TransactionMessage({\n payerKey: payer,\n recentBlockhash: blockhash.blockhash,\n instructions: instructions,\n }).compileToV0Message(allLookupTables);\n return v2Tx;\n };\n\n // todo(silviu): implement this\n // getEstimatedApyAndVolumeOnRange = async (\n // dex: Dex,\n // pool: PublicKey,\n // lowerPrice: Decimal,\n // upperPrice: Decimal,\n // _startDate: Date,\n // _endDate: Date\n // ): Promise<GenericPositionRangeInfo> => {\n // if (dex == 'ORCA') {\n // return this.getEstimatedApyAndVolumeOnRangeOrca();\n // } else if (dex == 'RAYDIUM') {\n // return this.getEstimatedApyAndVolumeOnRangeRaydium();\n // } else if (dex == 'METEORA') {\n // return this.getEstimatedApyAndVolumeOnRangeMeteora();\n // } else {\n // throw new Error(`Dex ${dex} is not supported`);\n // }\n // };\n\n getEstimatedApyAndVolumeOnRangeOrca = async () // pool: PublicKey,\n // lowerPrice: Decimal,\n // upperPrice: Decimal\n : Promise<GenericPositionRangeInfo> => {\n // todo\n return {\n estimatedApy: new Decimal(0),\n estimatedVolume: new Decimal(0),\n };\n };\n\n getEstimatedApyAndVolumeOnRangeRaydium = async () // pool: PublicKey,\n // lowerPrice: Decimal,\n // upperPrice: Decimal\n : Promise<GenericPositionRangeInfo> => {\n // todo\n return {\n estimatedApy: new Decimal(0),\n estimatedVolume: new Decimal(0),\n };\n };\n\n getEstimatedApyAndVolumeOnRangeMeteora = async () // pool: PublicKey,\n // lowerPrice: Decimal,\n // upperPrice: Decimal\n : Promise<GenericPositionRangeInfo> => {\n // todo\n return {\n estimatedApy: new Decimal(0),\n estimatedVolume: new Decimal(0),\n };\n };\n\n getManualPoolSimulatedValues = async (params: {\n pool: PublicKey;\n priceLower: Decimal;\n priceUpper: Decimal;\n startDate: string;\n endDate: string;\n }): Promise<PoolSimulationResponse> => {\n const { pool, startDate, endDate, priceLower, priceUpper } = params;\n return simulateManualPool({ poolAddress: pool, priceUpper, priceLower, depositDate: startDate, endDate });\n };\n\n getPercentagePoolSimulatedValues = async (\n params: SimulationPercentagePoolParameters\n ): Promise<PoolSimulationResponse> => {\n const { resetRangeWidthPercLower = 1, resetRangeWidthPercUpper = 1, ...rest } = params;\n return simulatePercentagePool({ resetRangeWidthPercLower, resetRangeWidthPercUpper, ...rest });\n };\n\n /**\n * Get a list of transactions to rebalance a Kamino strategy.\n * @param strategy strategy pubkey or object\n * @param newPosition new liquidity position account pubkey\n * @param priceLower new position's lower price of the range\n * @param priceUpper new position's upper price of the range\n * @returns list of transactions to rebalance (executive withdraw, collect fees/rewards, open new position, invest)\n */\n rebalance = async (\n strategy: PublicKey | StrategyWithAddress,\n newPosition: PublicKey,\n priceLower: Decimal,\n priceUpper: Decimal\n ): Promise<TransactionInstruction[]> => {\n // todo: refactor this to return an object, not a list\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n\n const ixs: TransactionInstruction[] = [];\n\n // if there are no invested tokens we don't need to collect fees and rewards\n const stratTokenBalances = await this.getStrategyTokensBalances(strategyWithAddress.strategy);\n if (\n strategyWithAddress.strategy.strategyDex.toNumber() == dexToNumber('ORCA') ||\n stratTokenBalances.invested.a.greaterThan(ZERO) ||\n stratTokenBalances.invested.b.greaterThan(ZERO)\n ) {\n ixs.push(await this.collectFeesAndRewards(strategyWithAddress));\n }\n\n ixs.push(await this.openPosition(strategyWithAddress, newPosition, priceLower, priceUpper, new Rebalancing()));\n\n return ixs;\n };\n\n /**\n * Deserialize a buffer to MintInfo\n * @param data Buffer\n * @returns\n */\n _deserializeMint(data: Buffer): MintInfo {\n if (data.length !== MintLayout.span) {\n throw new Error('Not a valid Mint');\n }\n\n const mintInfo = MintLayout.decode(data);\n\n if (mintInfo.mintAuthorityOption === 0) {\n mintInfo.mintAuthority = null;\n } else {\n mintInfo.mintAuthority = new PublicKey(mintInfo.mintAuthority);\n }\n\n mintInfo.supply = u64.fromBuffer(mintInfo.supply);\n mintInfo.isInitialized = mintInfo.isInitialized !== 0;\n\n if (mintInfo.freezeAuthorityOption === 0) {\n mintInfo.freezeAuthority = null;\n } else {\n mintInfo.freezeAuthority = new PublicKey(mintInfo.freezeAuthority);\n }\n\n return mintInfo;\n }\n\n /**\n * Get a list of user's Kamino strategy positions\n * @param wallet user wallet address\n * @param strategyFilters\n * @returns list of kamino strategy positions\n */\n getUserPositions = async (\n wallet: PublicKey,\n strategyFilters: StrategiesFilters = { strategyCreationStatus: 'LIVE' }\n ): Promise<KaminoPosition[]> => {\n const userTokenAccounts = await this.getAllTokenAccounts(wallet);\n const liveStrategies = await this.getAllStrategiesWithFilters(strategyFilters);\n const positions: KaminoPosition[] = [];\n for (const tokenAccount of userTokenAccounts) {\n const accountData = tokenAccount.account.data as Data;\n const strategy = liveStrategies.find((x) => x.strategy.sharesMint.toString() === accountData.parsed.info.mint);\n if (strategy) {\n positions.push({\n shareMint: strategy.strategy.sharesMint,\n strategy: strategy.address,\n sharesAmount: new Decimal(accountData.parsed.info.tokenAmount.uiAmountString),\n strategyDex: numberToDex(strategy.strategy.strategyDex.toNumber()),\n });\n }\n }\n return positions;\n };\n\n /**\n * Get a list of user's Kamino strategy positions\n * @param wallet user wallet address\n * @returns list of kamino strategy positions\n */\n getUserPositionsByStrategiesMap = async (\n wallet: PublicKey,\n strategiesWithShareMintsMap: PubkeyHashMap<PublicKey, KaminoStrategyWithShareMint>,\n strategiesWithAddressMap?: PubkeyHashMap<PublicKey, WhirlpoolStrategy>\n ): Promise<KaminoPosition[]> => {\n const tokenAccounts = await this._connection.getParsedTokenAccountsByOwner(wallet, {\n programId: TOKEN_PROGRAM_ID,\n });\n\n const mints = tokenAccounts.value.map((accountInfo) => {\n return new PublicKey(accountInfo.account.data.parsed.info.mint);\n });\n const mintInfos = await batchFetch(mints, (chunk) => this.getConnection().getMultipleAccountsInfo(chunk));\n\n const kaminoStrategyAdresses: PublicKey[] = [];\n const kaminoAccountInfos: Array<AccountInfo<ParsedAccountData>> = [];\n\n for (const index of mints.keys()) {\n const mint = mints[index];\n const mintInfo = mintInfos[index];\n const accountInfo = tokenAccounts.value[index];\n\n if (!mint || !mintInfo || !accountInfo) continue;\n\n const [expectedMintAuthority] = PublicKey.findProgramAddressSync(\n [Buffer.from('authority'), mint.toBuffer()],\n this.getProgramID()\n );\n\n const mintData = this._deserializeMint(mintInfo.data);\n\n if (mintData.mintAuthority !== null && mintData.mintAuthority.equals(expectedMintAuthority)) {\n const shareMintAddress = tokenAccounts.value[index].account.data.parsed.info.mint;\n const address = strategiesWithShareMintsMap.get(new PublicKey(shareMintAddress))?.address;\n\n if (!address) continue;\n\n kaminoStrategyAdresses.push(new PublicKey(address));\n kaminoAccountInfos.push(accountInfo.account);\n }\n }\n\n let strategies: (WhirlpoolStrategy | null)[] = strategiesWithAddressMap\n ? Array.from(strategiesWithAddressMap.values())\n : [];\n const missingStrategies = kaminoStrategyAdresses.filter(\n (x) => !strategiesWithAddressMap || !strategiesWithAddressMap.has(x)\n );\n const missingStrategiesState = await batchFetch(missingStrategies, (chunk) => this.getStrategies(chunk));\n strategies = strategies.concat(missingStrategiesState);\n\n const positions: KaminoPosition[] = [];\n\n for (const index of strategies.keys()) {\n const strategy = strategies[index];\n const accountData = kaminoAccountInfos[index];\n const address = kaminoStrategyAdresses[index];\n\n if (!strategy || !accountData) {\n continue;\n }\n\n positions.push({\n shareMint: strategy.sharesMint,\n strategy: address,\n sharesAmount: new Decimal(accountData.data.parsed.info.tokenAmount.uiAmountString),\n strategyDex: numberToDex(strategy.strategyDex.toNumber()),\n });\n }\n\n return positions;\n };\n\n /**\n * Get Kamino strategy vault APY/APR\n * @param strategy strategy pubkey or onchain state\n * @param orcaPools not required, but you can add orca whirlpools if you're caching them, and we don't refetch every time\n * @param raydiumPools not required, but you can add raydium pools if you're caching them, and we don't refetch every time\n */\n getStrategyAprApy = async (\n strategy: PublicKey | StrategyWithAddress,\n orcaPools?: OrcaPool[],\n raydiumPools?: Pool[]\n ): Promise<WhirlpoolAprApy> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const dex = Number(strategyState.strategyDex);\n const isOrca = dexToNumber('ORCA') === dex;\n const isRaydium = dexToNumber('RAYDIUM') === dex;\n const isMeteora = dexToNumber('METEORA') === dex;\n if (strategyState.position.equals(PublicKey.default)) {\n return {\n totalApr: ZERO,\n feeApr: ZERO,\n totalApy: ZERO,\n feeApy: ZERO,\n priceUpper: ZERO,\n priceLower: ZERO,\n rewardsApr: [],\n rewardsApy: [],\n poolPrice: ZERO,\n strategyOutOfRange: false,\n };\n }\n if (isOrca) {\n const prices = await this.getAllPrices();\n const collateralInfos = await this.getCollateralInfos();\n return this._orcaService.getStrategyWhirlpoolPoolAprApy(strategyState, collateralInfos, prices, orcaPools);\n }\n if (isRaydium) {\n return this._raydiumService.getStrategyWhirlpoolPoolAprApy(strategyState, raydiumPools);\n }\n if (isMeteora) {\n return this._meteoraService.getStrategyMeteoraPoolAprApy(strategyState);\n }\n throw Error(`Strategy dex ${dex} not supported`);\n };\n\n getStrategyPerformanceFees = async (\n strategy: PublicKey | StrategyWithAddress,\n globalConfig?: GlobalConfig\n ): Promise<PerformanceFees> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const globalConfigState = globalConfig || (await this.getGlobalConfigState(strategyState.globalConfig));\n\n if (globalConfigState == null) {\n throw new Error(`Unable to fetch GlobalConfig with Pubkey ${strategyState.globalConfig}`);\n }\n const globalConfigMinPerformanceFee = new Decimal(globalConfigState.minPerformanceFeeBps.toString());\n\n const strategyFeesFee = new Decimal(strategyState.feesFee.toString());\n const strategyReward0Fee = new Decimal(strategyState.reward0Fee.toString());\n const strategyReward1Fee = new Decimal(strategyState.reward1Fee.toString());\n const strategyReward2Fee = new Decimal(strategyState.reward2Fee.toString());\n\n return {\n feesFeeBPS: Decimal.max(strategyFeesFee, globalConfigMinPerformanceFee),\n reward0FeeBPS: Decimal.max(strategyReward0Fee, globalConfigMinPerformanceFee),\n reward1FeeBPS: Decimal.max(strategyReward1Fee, globalConfigMinPerformanceFee),\n reward2FeeBPS: Decimal.max(strategyReward2Fee, globalConfigMinPerformanceFee),\n };\n };\n\n getLiquidityDistributionRaydiumPool = (\n pool: PublicKey,\n keepOrder: boolean = true,\n lowestTick?: number,\n highestTick?: number\n ): Promise<LiquidityDistribution> => {\n return this._raydiumService.getRaydiumPoolLiquidityDistribution(pool, keepOrder, lowestTick, highestTick);\n };\n\n getLiquidityDistributionMeteoraPool = (\n pool: PublicKey,\n keepOrder: boolean = true,\n lowestTick?: number,\n highestTick?: number\n ): Promise<LiquidityDistribution> => {\n return this._meteoraService.getMeteoraLiquidityDistribution(pool, keepOrder, lowestTick, highestTick);\n };\n\n getLiquidityDistributionOrcaWhirlpool = (\n pool: PublicKey,\n keepOrder: boolean = true,\n lowestTick?: number,\n highestTick?: number\n ): Promise<LiquidityDistribution> => {\n return this._orcaService.getWhirlpoolLiquidityDistribution(pool, keepOrder, lowestTick, highestTick);\n };\n\n getLiquidityDistribution = async (\n dex: Dex,\n pool: PublicKey,\n keepOrder: boolean = true,\n lowestTick?: number,\n highestTick?: number\n ): Promise<LiquidityDistribution> => {\n if (dex == 'ORCA') {\n return this.getLiquidityDistributionOrcaWhirlpool(pool, keepOrder, lowestTick, highestTick);\n } else if (dex == 'RAYDIUM') {\n return this.getLiquidityDistributionRaydiumPool(pool, keepOrder, lowestTick, highestTick);\n } else if (dex == 'METEORA') {\n return this.getLiquidityDistributionMeteoraPool(pool, keepOrder, lowestTick, highestTick);\n } else {\n throw Error(`Dex ${dex} not supported`);\n }\n };\n\n getPositionsCountForPool = async (dex: Dex, pool: PublicKey): Promise<number> => {\n if (dex == 'ORCA') {\n return this._orcaService.getPositionsCountByPool(pool);\n } else if (dex == 'RAYDIUM') {\n return this._raydiumService.getPositionsCountByPool(pool);\n } else if (dex == 'METEORA') {\n return this._meteoraService.getPositionsCountByPool(pool);\n } else {\n throw Error(`Dex ${dex} not supported`);\n }\n };\n\n getStrategyTokensHoldings = async (\n strategy: PublicKey | StrategyWithAddress,\n mode: 'DEPOSIT' | 'WITHDRAW' = 'WITHDRAW'\n ): Promise<TokenAmounts> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const holdings = await this.getStrategyTokensBalances(strategyState, mode);\n\n const totalA = holdings.available.a.add(holdings.invested.a);\n const totalB = holdings.available.b.add(holdings.invested.b);\n\n return { a: totalA, b: totalB };\n };\n\n /**\n * Get ratio of total_a_in_strategy/total_b_in_strategy; if the total_b_in_strategy is 0 throws;\n * @param strategy\n * @param amountA\n */\n getStrategyTokensRatio = async (strategy: PublicKey | StrategyWithAddress): Promise<Decimal> => {\n const totalHoldings = await this.getStrategyTokensHoldings(strategy);\n return totalHoldings.a.div(totalHoldings.b);\n };\n\n calculateAmountsToBeDepositedWithSwap = async (\n strategy: PublicKey | StrategyWithAddress,\n tokenAAmountUserDeposit: Decimal,\n tokenBAmountUserDeposit: Decimal,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution,\n priceAInB?: Decimal\n ): Promise<DepositAmountsForSwap> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const strategyState = strategyWithAddress.strategy;\n\n if (!priceAInB) {\n priceAInB = await this.getCurrentPrice(strategyWithAddress);\n }\n const priceBInA = new Decimal(1).div(priceAInB);\n\n const tokenADecimals = strategyState.tokenAMintDecimals.toNumber();\n const tokenBDecimals = strategyState.tokenBMintDecimals.toNumber();\n const tokenADecimalsDiff = tokenADecimals - tokenBDecimals;\n const tokenAAddDecimals = tokenADecimalsDiff > 0 ? 0 : Math.abs(tokenADecimalsDiff);\n const tokenBAddDecimals = tokenADecimalsDiff > 0 ? Math.abs(tokenADecimalsDiff) : 0;\n\n const aAmount = tokenAAmountUserDeposit;\n const bAmount = tokenBAmountUserDeposit;\n\n const [aAmounts, bAmounts] = await profiler(\n this.calculateAmountsRatioToBeDeposited(strategyWithAddress, undefined, profiler),\n 'C-calculateDepositRatio',\n []\n );\n\n const orcaAmountA = aAmounts.div(new Decimal(10).pow(tokenADecimals));\n const orcaAmountB = bAmounts.div(new Decimal(10).pow(tokenBDecimals));\n\n // multiply by tokens delta to make sure that both values uses the same about of decimals\n const totalUserDepositInA = aAmount\n .mul(10 ** tokenAAddDecimals)\n .add(bAmount.mul(10 ** tokenBAddDecimals).mul(priceBInA));\n\n // if the strategy is out of range we will deposit only one token so we will need to swap everything to that token\n if (orcaAmountA.eq(ZERO)) {\n const requiredAAmountToDeposit = ZERO;\n const requiredBAmountToDeposit = totalUserDepositInA.mul(priceAInB);\n\n const tokenAToSwapAmount = requiredAAmountToDeposit.sub(tokenAAmountUserDeposit);\n const tokenBToSwapAmount = requiredBAmountToDeposit.sub(tokenBAmountUserDeposit);\n\n const depositAmountsForSwap: DepositAmountsForSwap = {\n requiredAAmountToDeposit,\n requiredBAmountToDeposit,\n tokenAToSwapAmount,\n tokenBToSwapAmount,\n };\n\n return depositAmountsForSwap;\n }\n\n if (orcaAmountB.eq(ZERO)) {\n const requiredAAmountToDeposit = totalUserDepositInA;\n const requiredBAmountToDeposit = ZERO;\n\n const tokenAToSwapAmount = requiredAAmountToDeposit.sub(tokenAAmountUserDeposit);\n const tokenBToSwapAmount = requiredBAmountToDeposit.sub(tokenBAmountUserDeposit);\n\n const depositAmountsForSwap: DepositAmountsForSwap = {\n requiredAAmountToDeposit,\n requiredBAmountToDeposit,\n tokenAToSwapAmount,\n tokenBToSwapAmount,\n };\n\n return depositAmountsForSwap;\n }\n let ratio = orcaAmountA.div(orcaAmountB);\n ratio = ratio.div(priceBInA);\n\n const requiredAAmountToDeposit = totalUserDepositInA\n .mul(ratio)\n .div(ratio.add(1))\n .div(10 ** tokenAAddDecimals);\n const requiredBAmountToDeposit = totalUserDepositInA\n .sub(requiredAAmountToDeposit.mul(10 ** tokenAAddDecimals))\n .div(10 ** tokenBAddDecimals)\n .mul(priceAInB);\n\n const tokenAToSwapAmount = requiredAAmountToDeposit.sub(tokenAAmountUserDeposit);\n const tokenBToSwapAmount = requiredBAmountToDeposit.sub(tokenBAmountUserDeposit);\n\n const depositAmountsForSwap: DepositAmountsForSwap = {\n requiredAAmountToDeposit,\n requiredBAmountToDeposit,\n tokenAToSwapAmount,\n tokenBToSwapAmount,\n };\n\n return depositAmountsForSwap;\n };\n\n /**\n * @deprecated The method should not be used\n */\n calculateAmountsDistributionWithPriceRange = async (\n dex: Dex,\n pool: PublicKey,\n lowerPrice: Decimal,\n upperPrice: Decimal\n ): Promise<[Decimal, Decimal]> => {\n const tokenAAmountToDeposit = new Decimal(100.0);\n\n if (dex == 'RAYDIUM') {\n const poolState = await PoolState.fetch(this._connection, pool);\n if (!poolState) {\n throw new Error(`Raydium poolState ${pool.toString()} is not found`);\n }\n const decimalsA = poolState.mintDecimals0;\n const decimalsB = poolState.mintDecimals1;\n\n const { amountA, amountB } = LiquidityMath.getAmountsFromLiquidity(\n poolState.sqrtPriceX64,\n SqrtPriceMath.priceToSqrtPriceX64(lowerPrice, decimalsA, decimalsB),\n SqrtPriceMath.priceToSqrtPriceX64(upperPrice, decimalsA, decimalsB),\n new BN(100_000_000),\n true\n );\n\n const amountADecimal = new Decimal(amountA.toString());\n const amountBDecimal = new Decimal(amountB.toString());\n return [lamportsToNumberDecimal(amountADecimal, decimalsA), lamportsToNumberDecimal(amountBDecimal, decimalsB)];\n } else if (dex == 'ORCA') {\n const whirlpoolState = await Whirlpool.fetch(this._connection, pool);\n if (!whirlpoolState) {\n throw new Error(`Raydium poolState ${pool.toString()} is not found`);\n }\n const tokenMintA = whirlpoolState.tokenMintA;\n const tokenMintB = whirlpoolState.tokenMintB;\n const decimalsA = await getMintDecimals(this._connection, tokenMintA);\n const decimalsB = await getMintDecimals(this._connection, tokenMintB);\n\n const tickLowerIndex = getNearestValidTickIndexFromTickIndex(\n priceToTickIndex(lowerPrice, decimalsA, decimalsB),\n whirlpoolState.tickSpacing\n );\n const tickUpperIndex = getNearestValidTickIndexFromTickIndex(\n priceToTickIndex(upperPrice, decimalsA, decimalsB),\n whirlpoolState.tickSpacing\n );\n\n const params: InternalAddLiquidityQuoteParam = {\n tokenMintA,\n tokenMintB,\n tickCurrentIndex: whirlpoolState.tickCurrentIndex,\n sqrtPrice: whirlpoolState.sqrtPrice,\n inputTokenMint: tokenMintA,\n inputTokenAmount: new BN(collToLamportsDecimal(tokenAAmountToDeposit, decimalsA).toString()),\n tickLowerIndex,\n tickUpperIndex,\n slippageTolerance: defaultSlippagePercentage,\n };\n\n const addLiqResult: InternalAddLiquidityQuote = getAddLiquidityQuote(params);\n return [\n lamportsToNumberDecimal(addLiqResult.estTokenA.toNumber(), decimalsA),\n lamportsToNumberDecimal(addLiqResult.estTokenB.toNumber(), decimalsB),\n ];\n } else if (dex == 'METEORA') {\n const poolState = await LbPair.fetch(this._connection, pool);\n if (!poolState) {\n throw new Error(`Meteora poolState ${pool.toString()} is not found`);\n }\n // const tokenMintA = poolState.tokenXMint;\n // const tokenMintB = poolState.tokenYMint;\n // const decimalsA = await getMintDecimals(this._connection, tokenMintA);\n // const decimalsB = await getMintDecimals(this._connection, tokenMintB);\n\n return [new Decimal(0), new Decimal(0)];\n } else {\n throw new Error('Invalid dex, use RAYDIUM or ORCA or METEORA');\n }\n };\n\n calculateAmountsToBeDeposited = async (\n strategy: PublicKey | StrategyWithAddress,\n tokenAAmount?: Decimal,\n tokenBAmount?: Decimal,\n profiledFunctionExecution: ProfiledFunctionExecution = noopProfiledFunctionExecution\n ): Promise<[Decimal, Decimal]> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n if (strategyState.shareCalculationMethod === DOLAR_BASED) {\n return this.calculateDepostAmountsDollarBased(strategy, tokenAAmount, tokenBAmount);\n } else if (strategyState.shareCalculationMethod === PROPORTION_BASED) {\n return this.calculateDepositAmountsProportional(strategy, tokenAAmount, tokenBAmount, profiledFunctionExecution);\n } else {\n throw new Error('Invalid share calculation method');\n }\n };\n\n /// Returns an amount of tokenA and an amount of tokenB that define the ratio of the amounts that can be deposited\n calculateAmountsRatioToBeDeposited = async (\n strategy: PublicKey | StrategyWithAddress,\n holdings?: TokenAmounts,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution\n ): Promise<[Decimal, Decimal]> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n if (strategyState.shareCalculationMethod === DOLAR_BASED) {\n return this.calculateDepostAmountsDollarBased(strategy, new Decimal(100), undefined);\n } else if (strategyState.shareCalculationMethod === PROPORTION_BASED) {\n let tokenHoldings = holdings;\n if (!tokenHoldings) {\n tokenHoldings = await profiler(this.getStrategyTokensHoldings(strategy), 'getStrategyTokensHoldings', []);\n }\n const { a, b } = tokenHoldings;\n return [a, b];\n } else {\n throw new Error('Invalid share calculation method');\n }\n };\n\n calculateDepositAmountsProportional = async (\n strategy: PublicKey | StrategyWithAddress,\n tokenAAmount?: Decimal,\n tokenBAmount?: Decimal,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution\n ): Promise<[Decimal, Decimal]> => {\n if (!tokenAAmount && !tokenBAmount) {\n return [new Decimal(0), new Decimal(0)];\n }\n\n const totalHoldings = await profiler(this.getStrategyTokensHoldings(strategy), 'getStrategyTokensHoldings', []);\n // if we have no holdings, on the initial deposit we use the old method\n if (totalHoldings.a.eq(ZERO) && totalHoldings.b.eq(ZERO)) {\n return await this.calculateDepostAmountsDollarBased(strategy, tokenAAmount, tokenBAmount);\n }\n return await profiler(\n this.calculateDepositAmountsProportionalWithTotalTokens(totalHoldings, tokenAAmount, tokenBAmount),\n 'C-calculateDepositAmountsProportionalWithTotalTokens',\n []\n );\n };\n\n private calculateDepositAmountsProportionalWithTotalTokens = async (\n totalTokens: TokenAmounts,\n tokenAAmount?: Decimal,\n tokenBAmount?: Decimal\n ): Promise<[Decimal, Decimal]> => {\n if (totalTokens.a.eq(ZERO)) {\n return [ZERO, tokenBAmount ? tokenBAmount : new Decimal(Number.MAX_VALUE)];\n }\n if (totalTokens.b.eq(ZERO)) {\n return [tokenAAmount ? tokenAAmount : new Decimal(Number.MAX_VALUE), ZERO];\n }\n const tokensRatio = totalTokens.a.div(totalTokens.b);\n if (tokenAAmount) {\n const requiredBAmount = tokenAAmount.div(tokensRatio);\n if (!tokenBAmount || tokenBAmount.gt(requiredBAmount)) {\n return [tokenAAmount, requiredBAmount];\n } else {\n const requiredAAmount = tokenBAmount.mul(tokensRatio);\n return [requiredAAmount, tokenBAmount];\n }\n } else if (tokenBAmount) {\n const requiredAMount = tokenBAmount.mul(tokensRatio);\n return [requiredAMount, tokenBAmount];\n } else {\n throw new Error('Invalid params, one of tokenAAmount or tokenBAmount must be provided');\n }\n };\n\n calculateDepostAmountsDollarBased = async (\n strategy: PublicKey | StrategyWithAddress,\n tokenAAmount?: Decimal,\n tokenBAmount?: Decimal\n ): Promise<[Decimal, Decimal]> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const dex = Number(strategyState.strategyDex);\n const isOrca = dexToNumber('ORCA') === dex;\n const isRaydium = dexToNumber('RAYDIUM') === dex;\n const isMeteora = dexToNumber('METEORA') === dex;\n if (isOrca) {\n const whirlpool = await Whirlpool.fetch(this._connection, strategyState.pool);\n if (!whirlpool) {\n throw new Error(`Unable to get Orca whirlpool for pubkey ${strategyState.pool}`);\n }\n\n return this.calculateAmountsOrca({\n whirlpoolConfig: whirlpool.whirlpoolsConfig,\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n positionAddress: strategyState.position,\n tokenAAmount,\n tokenBAmount,\n });\n } else if (isRaydium) {\n return this.calculateAmountsRaydium({ strategyState, tokenAAmount, tokenBAmount });\n } else if (isMeteora) {\n return this.calculateAmountsMeteora({ strategyState, tokenAAmount, tokenBAmount });\n } else {\n throw new Error(`The strategy ${strategy.toString()} is not Orca or Raydium`);\n }\n };\n\n calculateAmountsOrca = async ({\n whirlpoolConfig,\n tokenAMint,\n tokenBMint,\n positionAddress,\n tokenAAmount,\n tokenBAmount,\n }: {\n whirlpoolConfig: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n positionAddress: PublicKey;\n tokenAAmount?: Decimal;\n tokenBAmount?: Decimal;\n }): Promise<[Decimal, Decimal]> => {\n if (!tokenAAmount && !tokenBAmount) {\n return [new Decimal(0), new Decimal(0)];\n }\n // Given A in ATA, calc how much A and B\n const accessor = new OrcaDAL(whirlpoolConfig, WHIRLPOOL_PROGRAM_ID, this._connection);\n const orcaPosition = new OrcaPosition(accessor);\n const defaultSlippagePercentage = Percentage.fromFraction(1, 1000); // 0.1%\n\n const primaryTokenAmount = tokenAAmount || tokenBAmount;\n const primaryTokenMint = tokenAAmount ? tokenAMint : tokenBMint;\n const secondaryTokenAmount = tokenAAmount ? tokenBAmount : tokenAAmount;\n const secondaryTokenMint = tokenAAmount ? tokenBMint : tokenAMint;\n\n let params: AddLiquidityQuoteParam = {\n positionAddress,\n tokenMint: primaryTokenMint,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tokenAmount: new BN(primaryTokenAmount!.toString()), // safe to use ! here because we check in the beginning that at least one of the amounts are not undefined;\n refresh: true,\n slippageTolerance: defaultSlippagePercentage,\n };\n const estimatedGivenPrimary: AddLiquidityQuote = await orcaPosition.getAddLiquidityQuote(params);\n\n if (\n secondaryTokenAmount &&\n new Decimal(estimatedGivenPrimary.estTokenB.toString()) > new Decimal(secondaryTokenAmount.toString())\n ) {\n params = {\n positionAddress,\n tokenMint: secondaryTokenMint,\n tokenAmount: new BN(secondaryTokenAmount.toString()),\n refresh: true,\n slippageTolerance: defaultSlippagePercentage,\n };\n const estimatedGivenSecondary: AddLiquidityQuote = await orcaPosition.getAddLiquidityQuote(params);\n return [\n new Decimal(estimatedGivenSecondary.estTokenA.toString()),\n new Decimal(estimatedGivenSecondary.estTokenB.toString()),\n ];\n }\n return [\n new Decimal(estimatedGivenPrimary.estTokenA.toString()),\n new Decimal(estimatedGivenPrimary.estTokenB.toString()),\n ];\n };\n\n calculateAmountsRaydium = async ({\n strategyState,\n tokenAAmount,\n tokenBAmount,\n }: {\n strategyState: WhirlpoolStrategy;\n tokenAAmount?: Decimal;\n tokenBAmount?: Decimal;\n }): Promise<[Decimal, Decimal]> => {\n if (!tokenAAmount && !tokenBAmount) {\n return [new Decimal(0), new Decimal(0)];\n }\n\n const poolState = await PoolState.fetch(this._connection, strategyState.pool);\n const position = await PersonalPositionState.fetch(this._connection, strategyState.position);\n\n if (!position) {\n throw new Error(`position ${strategyState.position.toString()} is not found`);\n }\n\n if (!poolState) {\n throw new Error(`poolState ${strategyState.pool.toString()} is not found`);\n }\n\n if (tokenAAmount && tokenBAmount && tokenAAmount.gt(0) && tokenBAmount.gt(0)) {\n const liquidity = LiquidityMath.getLiquidityFromTokenAmounts(\n poolState.sqrtPriceX64,\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex),\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex),\n new BN(tokenAAmount.toString()),\n new BN(tokenBAmount.toString())\n );\n\n const { amountA, amountB } = LiquidityMath.getAmountsFromLiquidity(\n poolState.sqrtPriceX64,\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex),\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex),\n liquidity,\n true\n );\n\n return [new Decimal(amountA.toString()), new Decimal(amountB.toString())];\n } else {\n const primaryTokenAmount = tokenAAmount || tokenBAmount;\n const secondaryTokenAmount = tokenAAmount ? tokenBAmount : tokenAAmount;\n\n const { amountA, amountB } = LiquidityMath.getAmountsFromLiquidity(\n poolState.sqrtPriceX64,\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex),\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n new BN(primaryTokenAmount!.plus(secondaryTokenAmount || 0)!.toString()), // safe to use ! here because we check in the beginning that at least one of the amounts are not undefined;\n true\n );\n\n const amountADecimal = new Decimal(amountA.toString());\n const amountBDecimal = new Decimal(amountB.toString());\n const ratio = amountADecimal.div(amountBDecimal);\n if (tokenAAmount === undefined || tokenAAmount.eq(ZERO)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return [tokenBAmount!.mul(ratio), tokenBAmount!];\n }\n\n if (tokenBAmount === undefined || tokenBAmount.eq(ZERO)) {\n return [tokenAAmount, tokenAAmount.div(ratio)];\n }\n }\n\n return [new Decimal(0), new Decimal(0)];\n };\n\n calculateAmountsMeteora = async ({\n strategyState,\n tokenAAmount,\n tokenBAmount,\n }: {\n strategyState: WhirlpoolStrategy;\n tokenAAmount?: Decimal;\n tokenBAmount?: Decimal;\n }): Promise<[Decimal, Decimal]> => {\n if (!tokenAAmount && !tokenBAmount) {\n return [new Decimal(0), new Decimal(0)];\n }\n\n const poolState = await LbPair.fetch(this._connection, strategyState.pool);\n if (!poolState) {\n throw new Error(`poolState ${strategyState.pool.toString()} is not found`);\n }\n\n // TODO: this is just a simple approximation, but it's used only for the first deposit.\n if (tokenAAmount && tokenBAmount && tokenAAmount.gt(0) && tokenBAmount.gt(0)) {\n // Use everything that is given in case there are both tokens\n return [tokenAAmount, tokenBAmount];\n } else {\n const binArrayIndex = binIdToBinArrayIndex(new BN(poolState.activeId));\n const [binArrayPk] = deriveBinArray(strategyState.pool, binArrayIndex, METEORA_PROGRAM_ID);\n const binArray = await BinArray.fetch(this._connection, binArrayPk);\n if (!binArray) {\n throw new Error(`bin array ${binArrayPk.toString()} is not found`);\n }\n const bin = getBinFromBinArray(poolState.activeId, binArray);\n let amountADecimal = new Decimal(0);\n let amountBDecimal = new Decimal(0);\n if (bin) {\n if (!bin.amountX.eq(new BN(0))) {\n amountADecimal = new Decimal(bin.amountX.toString());\n }\n if (!bin.amountY.eq(new BN(0))) {\n amountBDecimal = new Decimal(bin.amountY.toString());\n }\n } else {\n throw new Error(`bin ${poolState.activeId.toString()} is not found`);\n }\n\n if (amountADecimal.eq(ZERO) && amountBDecimal.eq(ZERO)) {\n const decimalsA = await getMintDecimals(this._connection, strategyState.tokenAMint);\n const decimalsB = await getMintDecimals(this._connection, strategyState.tokenBMint);\n const poolPrice = getPriceOfBinByBinIdWithDecimals(poolState.activeId, poolState.binStep, decimalsA, decimalsB);\n return [tokenAAmount || tokenBAmount!.div(poolPrice), tokenBAmount || tokenAAmount!.mul(poolPrice)];\n }\n\n if (amountBDecimal.eq(ZERO)) {\n return [tokenAAmount!, ZERO];\n }\n\n if (amountADecimal.eq(ZERO)) {\n return [ZERO, tokenBAmount!];\n }\n\n const ratio = amountADecimal.div(amountBDecimal);\n if (tokenAAmount === undefined || tokenAAmount.eq(ZERO)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const amountA = tokenBAmount!.mul(ratio) || new Decimal(0);\n return [amountA, tokenBAmount!];\n }\n\n if (tokenBAmount === undefined || tokenBAmount.eq(ZERO)) {\n const amountB = tokenAAmount.div(ratio) || new Decimal(0);\n return [tokenAAmount, amountB];\n }\n }\n\n return [new Decimal(0), new Decimal(0)];\n };\n\n /**\n * @deprecated The method should not be used\n */\n getDepositRatioFromTokenA = async (\n strategy: PublicKey | StrategyWithAddress,\n amountA: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const dex = Number(strategyState.strategyDex);\n\n const isOrca = dexToNumber('ORCA') === dex;\n const isRaydium = dexToNumber('RAYDIUM') === dex;\n const isMeteora = dexToNumber('METEORA') === dex;\n\n if (isOrca) {\n return this.getDepositRatioFromAOrca(strategy, amountA);\n }\n if (isRaydium) {\n return this.getDepositRatioFromARaydium(strategy, amountA);\n }\n if (isMeteora) {\n return this.getDepositRatioFromAMeteora(strategy);\n }\n throw Error(`Strategy dex ${dex} not supported`);\n };\n\n /**\n * @deprecated The method should not be used\n */\n getDepositRatioFromTokenB = async (\n strategy: PublicKey | StrategyWithAddress,\n amountB: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const dex = Number(strategyState.strategyDex);\n\n const isOrca = dexToNumber('ORCA') === dex;\n const isRaydium = dexToNumber('RAYDIUM') === dex;\n const isMeteora = dexToNumber('METEORA') === dex;\n\n if (isOrca) {\n return this.getDepositRatioFromBOrca(strategy, amountB);\n }\n if (isRaydium) {\n return this.getDepositRatioFromBRaydium(strategy, amountB);\n }\n if (isMeteora) {\n return this.getDepositRatioFromBMeteora(strategy);\n }\n throw Error(`Strategy dex ${dex} not supported`);\n };\n\n /**\n * Get the on-chain state of the terms&conditions signature for the owner\n * @param owner\n */\n async getUserTermsSignatureState(owner: PublicKey): Promise<TermsSignature | null> {\n const pdaSeed = [Buffer.from('signature'), owner.toBuffer()];\n const [signatureStateKey, _signatureStateBump] = PublicKey.findProgramAddressSync(pdaSeed, this._kaminoProgramId);\n\n return await TermsSignature.fetch(this._connection, signatureStateKey);\n }\n\n /**\n * Get the instruction to store the on chain owner signature of terms&conditions\n * @param owner\n * @param signature\n */\n async getUserTermsSignatureIx(owner: PublicKey, signature: Uint8Array): Promise<TransactionInstruction> {\n const pdaSeed = [Buffer.from('signature'), owner.toBuffer()];\n const [signatureStateKey, _signatureStateBump] = PublicKey.findProgramAddressSync(pdaSeed, this._kaminoProgramId);\n\n const args: SignTermsArgs = {\n signature: Array.from(signature),\n };\n\n const accounts: SignTermsAccounts = {\n owner: owner,\n ownerSignatureState: signatureStateKey,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n };\n\n return signTerms(args, accounts);\n }\n\n private async getDepositRatioFromAOrca(\n strategy: PublicKey | StrategyWithAddress,\n amountA: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const whirlpool = await Whirlpool.fetch(this._connection, strategyState.pool);\n if (!whirlpool) {\n throw Error(`Could not fetch whirlpool state with pubkey ${strategyState.pool.toString()}`);\n }\n\n const position = await Position.fetch(this._connection, strategyState.position);\n if (!position) {\n throw new Error(`Whirlpool position ${strategyState.position} does not exist`);\n }\n\n const params: InternalAddLiquidityQuoteParam = {\n tokenMintA: strategyState.tokenAMint,\n tokenMintB: strategyState.tokenBMint,\n tickCurrentIndex: whirlpool.tickCurrentIndex,\n sqrtPrice: whirlpool.sqrtPrice,\n inputTokenMint: strategyState.tokenAMint,\n inputTokenAmount: amountA,\n tickLowerIndex: position.tickLowerIndex,\n tickUpperIndex: position.tickUpperIndex,\n slippageTolerance: defaultSlippagePercentage,\n };\n\n const quote: InternalAddLiquidityQuote = getAddLiquidityQuote(params);\n\n return { amountSlippageA: quote.estTokenA, amountSlippageB: quote.estTokenB };\n }\n\n private async getDepositRatioFromAMeteora(\n strategy: PublicKey | StrategyWithAddress\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const poolStatePromise = LbPair.fetch(this._connection, strategyState.pool);\n const positionPromise = PositionV2.fetch(this._connection, strategyState.position);\n\n const [poolState, _position] = await Promise.all([poolStatePromise, positionPromise]);\n if (!poolState) {\n throw Error(`Could not fetch lb pair state with pubkey ${strategyState.pool.toString()}`);\n }\n\n return { amountSlippageA: new BN(0), amountSlippageB: new BN(0) };\n }\n\n private async getDepositRatioFromBMeteora(\n strategy: PublicKey | StrategyWithAddress\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const poolStatePromise = await LbPair.fetch(this._connection, strategyState.pool);\n const positionPromise = await PositionV2.fetch(this._connection, strategyState.position);\n const [poolState, _position] = await Promise.all([poolStatePromise, positionPromise]);\n\n if (!poolState) {\n throw Error(`Could not fetch lb pair state with pubkey ${strategyState.pool.toString()}`);\n }\n\n return { amountSlippageA: new BN(0), amountSlippageB: new BN(0) };\n }\n\n private getDepositRatioFromBOrca = async (\n strategy: PublicKey | StrategyWithAddress,\n amountB: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const whirlpool = await Whirlpool.fetch(this._connection, strategyState.pool);\n if (!whirlpool) {\n throw Error(`Could not fetch whirlpool state with pubkey ${strategyState.pool.toString()}`);\n }\n\n const position = await Position.fetch(this._connection, strategyState.position);\n if (!position) {\n throw new Error(`Whirlpool position ${strategyState.position} does not exist`);\n }\n\n const params: InternalAddLiquidityQuoteParam = {\n tokenMintA: strategyState.tokenAMint,\n tokenMintB: strategyState.tokenBMint,\n tickCurrentIndex: whirlpool.tickCurrentIndex,\n sqrtPrice: whirlpool.sqrtPrice,\n inputTokenMint: strategyState.tokenBMint,\n inputTokenAmount: amountB,\n tickLowerIndex: position.tickLowerIndex,\n tickUpperIndex: position.tickUpperIndex,\n slippageTolerance: defaultSlippagePercentage,\n };\n\n const quote: InternalAddLiquidityQuote = getAddLiquidityQuote(params);\n\n return { amountSlippageA: quote.estTokenA, amountSlippageB: quote.estTokenB };\n };\n\n private getDepositRatioFromARaydium = async (\n strategy: PublicKey | StrategyWithAddress,\n amountA: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const poolState = await PoolState.fetch(this._connection, strategyState.pool);\n const positionState = await PersonalPositionState.fetch(this._connection, strategyState.position);\n\n if (!positionState) {\n throw new Error(`Raydium position ${strategyState.position.toString()} could not be found.`);\n }\n if (!poolState) {\n throw new Error(`Raydium pool ${strategyState.pool.toString()} could not be found.`);\n }\n\n const lowerSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(positionState.tickLowerIndex);\n const upperSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(positionState.tickUpperIndex);\n\n const liqudity = LiquidityMath.getLiquidityFromTokenAmountA(lowerSqrtPriceX64, upperSqrtPriceX64, amountA, false);\n const amountsSlippage = LiquidityMath.getAmountsFromLiquidityWithSlippage(\n poolState.sqrtPriceX64,\n lowerSqrtPriceX64,\n upperSqrtPriceX64,\n liqudity,\n true,\n false,\n 1\n );\n\n return amountsSlippage;\n };\n\n private getDepositRatioFromBRaydium = async (\n strategy: PublicKey | StrategyWithAddress,\n amountB: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const poolState = await PoolState.fetch(this._connection, strategyState.pool);\n const positionState = await PersonalPositionState.fetch(this._connection, strategyState.position);\n\n if (!positionState) {\n throw new Error(`Raydium position ${strategyState.position.toString()} could not be found.`);\n }\n if (!poolState) {\n throw new Error(`Raydium pool ${strategyState.pool.toString()} could not be found.`);\n }\n\n const lowerSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(positionState.tickLowerIndex);\n const upperSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(positionState.tickUpperIndex);\n\n const liqudity = LiquidityMath.getLiquidityFromTokenAmountB(lowerSqrtPriceX64, upperSqrtPriceX64, amountB);\n const amountsSlippage = LiquidityMath.getAmountsFromLiquidityWithSlippage(\n poolState.sqrtPriceX64,\n lowerSqrtPriceX64,\n upperSqrtPriceX64,\n liqudity,\n true,\n false,\n 1\n );\n\n return amountsSlippage;\n };\n\n getCollateralInfo = async (address: PublicKey): Promise<CollateralInfo[]> => {\n const collateralInfos = await CollateralInfos.fetch(this._connection, address, this._kaminoProgramId);\n if (collateralInfos === null) {\n throw new Error('Could not fetch CollateralInfos');\n }\n return collateralInfos.infos;\n };\n\n getGlobalConfigState = async (address: PublicKey): Promise<GlobalConfig | null> => {\n return await GlobalConfig.fetch(this._connection, address, this._kaminoProgramId);\n };\n\n getWhirlpoolStrategy = async (address: PublicKey): Promise<WhirlpoolStrategy | null> => {\n return await WhirlpoolStrategy.fetch(this._connection, address, this._kaminoProgramId);\n };\n\n getWhirlpoolStrategies = async (addresses: PublicKey[]): Promise<Array<WhirlpoolStrategy | null>> => {\n return await WhirlpoolStrategy.fetchMultiple(this._connection, addresses, this._kaminoProgramId);\n };\n\n getStrategyVaultBalances = async (strategy: PublicKey | StrategyWithAddress) => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const vaults = await Promise.all([\n this.getTokenAccountBalance(strategyState.tokenAVault),\n this.getTokenAccountBalance(strategyState.tokenBVault),\n ]);\n const aVault = vaults[0];\n const bVault = vaults[1];\n return { aVault, bVault };\n };\n\n getUpdateStrategyParamsIxs = async (\n strategyAdmin: PublicKey,\n strategy: PublicKey,\n rebalanceType: Decimal,\n withdrawFeeBps?: Decimal,\n performanceFeeBps?: Decimal\n ): Promise<TransactionInstruction[]> => {\n const updateRebalanceTypeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateRebalanceType(),\n rebalanceType\n );\n\n let updateWithdrawalFeeIx: TransactionInstruction | null = null;\n if (withdrawFeeBps) {\n updateWithdrawalFeeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateWithdrawFee(),\n withdrawFeeBps\n );\n }\n\n if (!performanceFeeBps) {\n performanceFeeBps = DefaultPerformanceFeeBps;\n }\n const updateFeesFeeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateCollectFeesFee(),\n performanceFeeBps\n );\n const updateRewards0FeeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateReward0Fee(),\n performanceFeeBps\n );\n const updateRewards1FeeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateReward1Fee(),\n performanceFeeBps\n );\n const updateRewards2FeeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateReward2Fee(),\n performanceFeeBps\n );\n\n const ixs = [updateRebalanceTypeIx, updateFeesFeeIx, updateRewards0FeeIx, updateRewards1FeeIx, updateRewards2FeeIx];\n if (updateWithdrawalFeeIx) {\n ixs.push(updateWithdrawalFeeIx);\n }\n return ixs;\n };\n\n getUpdateRewardsIxs = async (\n strategyOwner: PublicKey,\n strategy: PublicKey | StrategyWithAddress\n ): Promise<[TransactionInstruction, Keypair][]> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const strategyState = strategyWithAddress.strategy;\n if (!strategyState) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n const globalConfig = await this.getGlobalConfigState(strategyState.globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${strategyState.globalConfig.toString()}`);\n }\n const collateralInfos = await this.getCollateralInfo(globalConfig.tokenInfos);\n const result: [TransactionInstruction, Keypair][] = [];\n if (strategyState.strategyDex.toNumber() == dexToNumber('ORCA')) {\n const whirlpool = await Whirlpool.fetch(this._connection, strategyState.pool);\n if (!whirlpool) {\n throw Error(`Could not fetch whirlpool state with pubkey ${strategyState.pool.toString()}`);\n }\n for (let i = 0; i < 3; i++) {\n if (!whirlpool.rewardInfos[i].mint.equals(PublicKey.default)) {\n const collateralId = this.getCollateralIdFromMint(whirlpool.rewardInfos[i].mint, collateralInfos);\n if (collateralId == -1) {\n throw Error(`Could not find collateral id for mint ${whirlpool.rewardInfos[i].mint.toString()}`);\n }\n\n const rewardVault = Keypair.generate();\n const args: UpdateRewardMappingArgs = {\n rewardIndex: i,\n collateralToken: collateralId,\n };\n\n const tokenProgram = await this.getAccountOwner(whirlpool.rewardInfos[i].mint);\n const accounts: UpdateRewardMappingAccounts = {\n payer: strategyOwner,\n globalConfig: strategyState.globalConfig,\n strategy: strategyWithAddress.address,\n pool: strategyState.pool,\n rewardMint: whirlpool.rewardInfos[i].mint,\n rewardVault: rewardVault.publicKey,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram,\n tokenInfos: globalConfig.tokenInfos,\n };\n\n const ix = updateRewardMapping(args, accounts);\n result.push([ix, rewardVault]);\n }\n }\n return result;\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n const poolState = await PoolState.fetch(this._connection, strategyState.pool);\n if (!poolState) {\n throw new Error(`Could not fetch whirlpool state with pubkey ${strategyState.pool.toString()}`);\n }\n for (let i = 0; i < 3; i++) {\n if (!poolState.rewardInfos[i].tokenMint.equals(PublicKey.default)) {\n const collateralId = this.getCollateralIdFromMint(poolState.rewardInfos[i].tokenMint, collateralInfos);\n if (collateralId == -1) {\n throw Error(`Could not find collateral id for mint ${poolState.rewardInfos[i].tokenMint.toString()}`);\n }\n\n const rewardVault = Keypair.generate();\n const args: UpdateRewardMappingArgs = {\n rewardIndex: i,\n collateralToken: collateralId,\n };\n\n const tokenProgram = await this.getAccountOwner(poolState.rewardInfos[i].tokenMint);\n const accounts: UpdateRewardMappingAccounts = {\n payer: strategyOwner,\n globalConfig: strategyState.globalConfig,\n strategy: strategyWithAddress.address,\n pool: strategyState.pool,\n rewardMint: poolState.rewardInfos[i].tokenMint,\n rewardVault: rewardVault.publicKey,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram,\n tokenInfos: globalConfig.tokenInfos,\n };\n\n const ix = updateRewardMapping(args, accounts);\n result.push([ix, rewardVault]);\n }\n }\n return result;\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('METEORA')) {\n const poolState = await LbPair.fetch(this._connection, strategyState.pool);\n if (!poolState) {\n throw new Error(`Could not fetch meteora state with pubkey ${strategyState.pool.toString()}`);\n }\n for (let i = 0; i < 2; i++) {\n if (!poolState.rewardInfos[i].mint.equals(PublicKey.default)) {\n const collateralId = this.getCollateralIdFromMint(poolState.rewardInfos[i].mint, collateralInfos);\n if (collateralId == -1) {\n throw Error(`Could not find collateral id for mint ${poolState.rewardInfos[i].mint.toString()}`);\n }\n\n const rewardVault = Keypair.generate();\n const args: UpdateRewardMappingArgs = {\n rewardIndex: i,\n collateralToken: collateralId,\n };\n\n const tokenProgram = await this.getAccountOwner(poolState.rewardInfos[i].mint);\n const accounts: UpdateRewardMappingAccounts = {\n payer: strategyOwner,\n globalConfig: strategyState.globalConfig,\n strategy: strategyWithAddress.address,\n pool: strategyState.pool,\n rewardMint: poolState.rewardInfos[i].mint,\n rewardVault: rewardVault.publicKey,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram,\n tokenInfos: globalConfig.tokenInfos,\n };\n\n const ix = updateRewardMapping(args, accounts);\n result.push([ix, rewardVault]);\n }\n }\n return result;\n } else {\n throw new Error(`Dex ${strategyState.strategyDex} not supported`);\n }\n };\n\n /**\n * Get the instruction to create an Orca Whirlpool tick, if it does not exist\n * @param payer\n * @param pool\n * @param price\n * @return tickPubkey, (tickInstruction | undefined)\n */\n initializeTickForOrcaPool = async (\n payer: PublicKey,\n pool: PublicKey | WhirlpoolWithAddress,\n price: Decimal\n ): Promise<InitPoolTickIfNeeded> => {\n const { address: poolAddress, whirlpool: whilrpoolState } = await this.getWhirlpoolStateIfNotFetched(pool);\n\n const decimalsA = await getMintDecimals(this._connection, whilrpoolState.tokenMintA);\n const decimalsB = await getMintDecimals(this._connection, whilrpoolState.tokenMintB);\n const tickIndex = getNextValidTickIndex(priceToTickIndex(price, decimalsA, decimalsB), whilrpoolState.tickSpacing);\n const startTickIndex = getStartTickIndex(tickIndex, whilrpoolState.tickSpacing);\n\n const [startTickIndexPk, _startTickIndexBump] = getTickArray(WHIRLPOOL_PROGRAM_ID, poolAddress, startTickIndex);\n const tick = await TickArray.fetch(this._connection, startTickIndexPk);\n // initialize tick if it doesn't exist\n if (!tick) {\n const initTickArrayArgs: InitializeTickArrayArgs = {\n startTickIndex,\n };\n const initTickArrayAccounts: InitializeTickArrayAccounts = {\n whirlpool: poolAddress,\n funder: payer,\n tickArray: startTickIndexPk,\n systemProgram: SystemProgram.programId,\n };\n return {\n tick: startTickIndexPk,\n initTickIx: initializeTickArray(initTickArrayArgs, initTickArrayAccounts),\n };\n }\n return {\n tick: startTickIndexPk,\n initTickIx: undefined,\n };\n };\n\n initializeTickForMeteoraPool = async (\n payer: PublicKey,\n pool: PublicKey | LbPairWithAddress,\n price: Decimal\n ): Promise<InitPoolTickIfNeeded> => {\n const { address: poolAddress, pool: poolState } = await this.getMeteoraStateIfNotFetched(pool);\n\n const decimalsA = await getMintDecimals(this._connection, poolState.tokenXMint);\n const decimalsB = await getMintDecimals(this._connection, poolState.tokenYMint);\n const binArray = getBinIdFromPriceWithDecimals(price, poolState.binStep, true, decimalsA, decimalsB);\n const binArrayIndex = binIdToBinArrayIndex(new BN(binArray));\n\n const [startTickIndexPk, _startTickIndexBump] = deriveBinArray(poolAddress, binArrayIndex, METEORA_PROGRAM_ID);\n const tick = await TickArray.fetch(this._connection, startTickIndexPk);\n // initialize tick if it doesn't exist\n if (!tick) {\n const initTickArrayArgs: InitializeBinArrayArgs = {\n index: new BN(binArrayIndex),\n };\n const initTickArrayAccounts: InitializeBinArrayAccounts = {\n funder: payer,\n binArray: startTickIndexPk,\n systemProgram: SystemProgram.programId,\n lbPair: poolAddress,\n };\n return {\n tick: startTickIndexPk,\n initTickIx: initializeBinArray(initTickArrayArgs, initTickArrayAccounts),\n };\n }\n return {\n tick: startTickIndexPk,\n initTickIx: undefined,\n };\n };\n}\n\nexport default Kamino;\n"]}
|
|
1
|
+
{"version":3,"file":"Kamino.js","sourceRoot":"","sources":["../src/Kamino.ts"],"names":[],"mappings":"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","sourcesContent":["import { getConfigByCluster, HubbleConfig, SolanaCluster } from '@hubbleprotocol/hubble-config';\nimport {\n AccountInfo,\n Connection,\n GetProgramAccountsFilter,\n PublicKey,\n SystemProgram,\n SYSVAR_INSTRUCTIONS_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n TransactionInstruction,\n AddressLookupTableAccount,\n MessageV0,\n TransactionMessage,\n Keypair,\n AddressLookupTableProgram,\n Transaction,\n ParsedAccountData,\n} from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { setKaminoProgramId } from './kamino-client/programId';\nimport { GlobalConfig, TermsSignature, WhirlpoolStrategy, CollateralInfos } from './kamino-client/accounts';\nimport Decimal from 'decimal.js';\nimport {\n initializeTickArray,\n InitializeTickArrayAccounts,\n InitializeTickArrayArgs,\n Position,\n TickArray,\n Whirlpool,\n} from './whirlpools-client';\nimport {\n AddLiquidityQuote,\n AddLiquidityQuoteParam,\n defaultSlippagePercentage,\n getNearestValidTickIndexFromTickIndex,\n getNextValidTickIndex,\n getStartTickIndex,\n OrcaNetwork,\n OrcaWhirlpoolClient,\n Percentage,\n priceToTickIndex,\n sqrtPriceX64ToPrice,\n tickIndexToPrice,\n} from '@orca-so/whirlpool-sdk';\nimport { OrcaDAL } from '@orca-so/whirlpool-sdk/dist/dal/orca-dal';\nimport { OrcaPosition } from '@orca-so/whirlpool-sdk/dist/position/orca-position';\nimport {\n Data,\n getEmptyShareData,\n Holdings,\n KaminoPosition,\n KaminoStrategyWithShareMint,\n MintToPriceMap,\n ShareData,\n ShareDataWithAddress,\n StrategyBalances,\n StrategyBalanceWithAddress,\n StrategyHolder,\n StrategyProgramAddress,\n StrategyVaultTokens,\n StrategyWithPendingFees,\n TokenAmounts,\n TokenHoldings,\n TotalStrategyVaultTokens,\n TreasuryFeeVault,\n} from './models';\nimport { PROGRAM_ID_CLI as WHIRLPOOL_PROGRAM_ID, setWhirlpoolsProgramId } from './whirlpools-client/programId';\nimport { OraclePrices, Scope } from '@hubbleprotocol/scope-sdk';\nimport {\n batchFetch,\n collToLamportsDecimal,\n createAssociatedTokenAccountInstruction,\n DepositAmountsForSwap,\n Dex,\n dexToNumber,\n GenericPoolInfo,\n GenericPositionRangeInfo,\n getAssociatedTokenAddress,\n getAssociatedTokenAddressAndData,\n getDexProgramId,\n getReadOnlyWallet,\n buildStrategyRebalanceParams,\n getUpdateStrategyConfigIx,\n LiquidityDistribution,\n numberToRebalanceType,\n RebalanceFieldInfo,\n sendTransactionWithLogs,\n StrategiesFilters,\n strategyCreationStatusToBase58,\n strategyTypeToBase58,\n VaultParameters,\n ZERO,\n PositionRange,\n numberToDex,\n TokensBalances,\n isSOLMint,\n SwapperIxBuilder,\n lamportsToNumberDecimal,\n DECIMALS_SOL,\n InstructionsWithLookupTables,\n ProfiledFunctionExecution,\n noopProfiledFunctionExecution,\n MaybeTokensBalances,\n PerformanceFees,\n PriceReferenceType,\n InputRebalanceFieldInfo,\n getTickArray,\n rebalanceFieldsDictToInfo,\n InitStrategyIxs,\n WithdrawShares,\n MetadataProgramAddressesOrca,\n MetadataProgramAddressesRaydium,\n LowerAndUpperTickPubkeys,\n isVaultInitialized,\n WithdrawAllAndCloseIxns,\n InitPoolTickIfNeeded,\n numberToReferencePriceType,\n stripTwapZeros,\n getTokenNameFromCollateralInfo,\n keyOrDefault,\n getMintDecimals,\n} from './utils';\nimport { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, MintInfo, MintLayout, u64, Token } from '@solana/spl-token';\nimport {\n checkExpectedVaultsBalances,\n CheckExpectedVaultsBalancesAccounts,\n CheckExpectedVaultsBalancesArgs,\n closeStrategy,\n CloseStrategyAccounts,\n collectFeesAndRewards,\n CollectFeesAndRewardsAccounts,\n deposit,\n DepositAccounts,\n DepositArgs,\n executiveWithdraw,\n ExecutiveWithdrawAccounts,\n ExecutiveWithdrawArgs,\n initializeStrategy,\n InitializeStrategyAccounts,\n InitializeStrategyArgs,\n invest,\n InvestAccounts,\n openLiquidityPosition,\n OpenLiquidityPositionAccounts,\n OpenLiquidityPositionArgs,\n singleTokenDepositWithMin,\n SingleTokenDepositWithMinAccounts,\n SingleTokenDepositWithMinArgs,\n updateRewardMapping,\n UpdateRewardMappingAccounts,\n UpdateRewardMappingArgs,\n updateStrategyConfig,\n UpdateStrategyConfigAccounts,\n UpdateStrategyConfigArgs,\n withdraw,\n WithdrawAccounts,\n WithdrawArgs,\n withdrawFromTopup,\n WithdrawFromTopupAccounts,\n WithdrawFromTopupArgs,\n} from './kamino-client/instructions';\nimport BN from 'bn.js';\nimport StrategyWithAddress from './models/StrategyWithAddress';\nimport { Idl, Program, AnchorProvider } from '@coral-xyz/anchor';\nimport { Rebalancing, Uninitialized } from './kamino-client/types/StrategyStatus';\nimport { FRONTEND_KAMINO_STRATEGY_URL, METADATA_PROGRAM_ID, U64_MAX } from './constants';\nimport {\n CollateralInfo,\n ExecutiveWithdrawActionKind,\n RebalanceType,\n RebalanceTypeKind,\n ReferencePriceTypeKind,\n StrategyConfigOption,\n StrategyStatusKind,\n} from './kamino-client/types';\nimport { AmmConfig, PersonalPositionState, PoolState } from './raydium_client';\nimport { PROGRAM_ID as RAYDIUM_PROGRAM_ID, setRaydiumProgramId } from './raydium_client/programId';\nimport {\n getPdaProtocolPositionAddress,\n i32ToBytes,\n LiquidityMath,\n SqrtPriceMath,\n TickMath,\n TickUtils,\n} from '@raydium-io/raydium-sdk';\n\nimport KaminoIdl from './kamino-client/idl.json';\nimport { OrcaService, RaydiumService, Whirlpool as OrcaPool, WhirlpoolAprApy } from './services';\nimport {\n getAddLiquidityQuote,\n InternalAddLiquidityQuote,\n InternalAddLiquidityQuoteParam,\n} from '@orca-so/whirlpool-sdk/dist/position/quotes/add-liquidity';\nimport { signTerms, SignTermsAccounts, SignTermsArgs } from './kamino-client/instructions';\nimport { Pool } from './services/RaydiumPoolsResponse';\nimport {\n UpdateWithdrawFee,\n UpdateReward0Fee,\n UpdateReward1Fee,\n UpdateReward2Fee,\n UpdateCollectFeesFee,\n UpdateRebalanceType,\n UpdateLookupTable,\n UpdateReferencePriceType,\n} from './kamino-client/types/StrategyConfigOption';\nimport { DefaultPerformanceFeeBps } from './constants/DefaultStrategyConfig';\nimport {\n ADDRESS_LUT_PROGRAM_ID,\n CONSENSUS_ID,\n LUT_OWNER_KEY,\n STAGING_GLOBAL_CONFIG,\n STAGING_KAMINO_PROGRAM_ID,\n MEMO_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n} from './constants/pubkeys';\nimport {\n AutodriftMethod,\n DefaultDex,\n DefaultFeeTierOrca,\n DefaultMintTokenA,\n DefaultMintTokenB,\n DefaultTickSpacing,\n DriftRebalanceMethod,\n ExpanderMethod,\n FullBPS,\n FullPercentage,\n ManualRebalanceMethod,\n PeriodicRebalanceMethod,\n PricePercentageRebalanceMethod,\n PricePercentageWithResetRangeRebalanceMethod,\n RebalanceMethod,\n TakeProfitMethod,\n} from './utils/CreationParameters';\nimport { DOLAR_BASED, PROPORTION_BASED } from './constants/deposit_method';\nimport { JupService } from './services/JupService';\nimport {\n simulateManualPool,\n simulatePercentagePool,\n SimulationPercentagePoolParameters,\n} from './services/PoolSimulationService';\nimport {\n Expander,\n Manual,\n PricePercentage,\n PricePercentageWithReset,\n Drift,\n TakeProfit,\n PeriodicRebalance,\n Autodrift,\n} from './kamino-client/types/RebalanceType';\nimport {\n checkIfAccountExists,\n createWsolAtaIfMissing,\n getAtasWithCreateIxnsIfMissing,\n MAX_ACCOUNTS_PER_TRANSACTION,\n removeBudgetAndAtaIxns,\n} from './utils/transactions';\nimport { SwapResponse } from '@jup-ag/api';\nimport { StrategyPrices } from './models';\nimport { getDefaultManualRebalanceFieldInfos, getManualRebalanceFieldInfos } from './rebalance_methods';\nimport {\n deserializePricePercentageRebalanceFromOnchainParams,\n deserializePricePercentageRebalanceWithStateOverride,\n getDefaultPricePercentageRebalanceFieldInfos,\n getPositionRangeFromPercentageRebalanceParams,\n getPricePercentageRebalanceFieldInfos,\n readPricePercentageRebalanceParamsFromStrategy,\n readRawPricePercentageRebalanceStateFromStrategy,\n} from './rebalance_methods';\nimport {\n deserializePricePercentageWithResetRebalanceFromOnchainParams,\n deserializePricePercentageWithResetRebalanceWithStateOverride,\n getDefaultPricePercentageWithResetRebalanceFieldInfos,\n getPositionRangeFromPricePercentageWithResetParams,\n getPricePercentageWithResetRebalanceFieldInfos,\n readPricePercentageWithResetRebalanceParamsFromStrategy,\n readRawPricePercentageWithResetRebalanceStateFromStrategy,\n} from './rebalance_methods';\nimport {\n deserializeDriftRebalanceFromOnchainParams,\n deserializeDriftRebalanceWithStateOverride,\n getDefaultDriftRebalanceFieldInfos,\n getDriftRebalanceFieldInfos,\n getPositionRangeFromDriftParams,\n readDriftRebalanceParamsFromStrategy,\n readRawDriftRebalanceStateFromStrategy,\n} from './rebalance_methods';\nimport {\n deserializeExpanderRebalanceWithStateOverride,\n deserializePeriodicRebalanceFromOnchainParams,\n deserializeTakeProfitRebalanceFromOnchainParams,\n getDefaultExpanderRebalanceFieldInfos,\n getDefaultPeriodicRebalanceFieldInfos,\n getDefaultTakeProfitRebalanceFieldsInfos,\n getExpanderRebalanceFieldInfos,\n getPeriodicRebalanceRebalanceFieldInfos,\n getPositionRangeFromExpanderParams,\n getPositionRangeFromPeriodicRebalanceParams,\n getTakeProfitRebalanceFieldsInfos,\n readExpanderRebalanceFieldInfosFromStrategy,\n readExpanderRebalanceParamsFromStrategy,\n readPeriodicRebalanceRebalanceParamsFromStrategy,\n readPeriodicRebalanceRebalanceStateFromStrategy,\n readRawExpanderRebalanceStateFromStrategy,\n readTakeProfitRebalanceParamsFromStrategy,\n readTakeProfitRebalanceStateFromStrategy,\n} from './rebalance_methods';\nimport { PoolPriceReferenceType, TwapPriceReferenceType } from './utils/priceReferenceTypes';\nimport {\n extractPricesFromDeserializedState,\n getRebalanceMethodFromRebalanceFields,\n getRebalanceTypeFromRebalanceFields,\n} from './rebalance_methods/utils';\nimport { RebalanceTypeLabelName } from './rebalance_methods/consts';\nimport WhirlpoolWithAddress from './models/WhirlpoolWithAddress';\nimport { PoolSimulationResponse } from './models/PoolSimulationResponseData';\nimport {\n deserializeAutodriftRebalanceWithStateOverride,\n deserializeAutodriftRebalanceFromOnchainParams,\n readAutodriftRebalanceParamsFromStrategy,\n readRawAutodriftRebalanceStateFromStrategy,\n getAutodriftRebalanceFieldInfos,\n getDefaultAutodriftRebalanceFieldInfos,\n getPositionRangeFromAutodriftParams,\n} from './rebalance_methods/autodriftRebalance';\nimport { KaminoPrices, OraclePricesAndCollateralInfos } from './models';\nimport { getRemoveLiquidityQuote } from './whirlpools-client/shim/remove-liquidity';\nimport { METEORA_PROGRAM_ID, setMeteoraProgramId } from './meteora_client/programId';\nimport { computeMeteoraFee, MeteoraPool, MeteoraService } from './services/MeteoraService';\nimport {\n binIdToBinArrayIndex,\n deriveBinArray,\n getBinFromBinArray,\n getBinFromBinArrays,\n getBinIdFromPriceWithDecimals,\n getPriceOfBinByBinIdWithDecimals,\n MeteoraPosition,\n} from './utils/meteora';\nimport { BinArray, LbPair, PositionV2 } from './meteora_client/accounts';\nimport LbPairWithAddress from './models/LbPairWithAddress';\nimport { initializeBinArray, InitializeBinArrayAccounts, InitializeBinArrayArgs } from './meteora_client/instructions';\nimport { PubkeyHashMap } from './utils/pubkey';\nexport const KAMINO_IDL = KaminoIdl;\n\nexport class Kamino {\n private readonly _cluster: SolanaCluster;\n private readonly _connection: Connection;\n readonly _config: HubbleConfig;\n private _globalConfig: PublicKey;\n private readonly _scope: Scope;\n private readonly _provider: AnchorProvider;\n private readonly _kaminoProgram: Program;\n private readonly _kaminoProgramId: PublicKey;\n private readonly _orcaService: OrcaService;\n private readonly _raydiumService: RaydiumService;\n private readonly _meteoraService: MeteoraService;\n\n /**\n * Create a new instance of the Kamino SDK class.\n * @param cluster Name of the Solana cluster\n * @param connection Connection to the Solana cluster\n * @param globalConfig override kamino global config\n * @param programId override kamino program id\n * @param whirlpoolProgramId override whirlpool program id\n * @param raydiumProgramId override raydium program id\n */\n constructor(\n cluster: SolanaCluster,\n connection: Connection,\n globalConfig?: PublicKey,\n programId?: PublicKey,\n whirlpoolProgramId?: PublicKey,\n raydiumProgramId?: PublicKey,\n meteoraProgramId?: PublicKey\n ) {\n this._cluster = cluster;\n this._connection = connection;\n this._config = getConfigByCluster(cluster);\n\n this._provider = new AnchorProvider(connection, getReadOnlyWallet(), {\n commitment: connection.commitment,\n });\n if (programId && programId.equals(STAGING_KAMINO_PROGRAM_ID)) {\n this._kaminoProgramId = programId;\n this._globalConfig = STAGING_GLOBAL_CONFIG;\n } else {\n this._kaminoProgramId = programId ? programId : this._config.kamino.programId;\n this._globalConfig = globalConfig ? globalConfig : new PublicKey(this._config.kamino.globalConfig);\n }\n this._kaminoProgram = new Program(KAMINO_IDL as Idl, this._kaminoProgramId, this._provider);\n\n this._scope = new Scope(cluster, connection);\n setKaminoProgramId(this._kaminoProgramId);\n\n if (whirlpoolProgramId) {\n setWhirlpoolsProgramId(whirlpoolProgramId);\n }\n\n if (cluster === 'localnet') {\n if (raydiumProgramId) {\n setRaydiumProgramId(raydiumProgramId);\n }\n }\n\n if (meteoraProgramId) {\n setMeteoraProgramId(meteoraProgramId);\n }\n\n this._orcaService = new OrcaService(connection, cluster, this._globalConfig, this._kaminoProgramId);\n this._raydiumService = new RaydiumService(connection, cluster);\n this._meteoraService = new MeteoraService(connection, this._globalConfig);\n }\n\n getConnection = () => this._connection;\n\n getProgramID = () => this._kaminoProgramId;\n\n getProgram = () => this._kaminoProgram;\n\n setGlobalConfig = (globalConfig: PublicKey) => {\n this._globalConfig = globalConfig;\n };\n\n getGlobalConfig = () => this._globalConfig;\n\n getDepositableTokens = async (): Promise<CollateralInfo[]> => {\n const collateralInfos = await this.getCollateralInfos();\n return collateralInfos.filter((x) => !x.mint.equals(SystemProgram.programId));\n };\n\n getCollateralInfos = async () => {\n const config = await this.getGlobalConfigState(this._globalConfig);\n if (!config) {\n throw Error(`Could not fetch globalConfig with pubkey ${this.getGlobalConfig().toString()}`);\n }\n return this.getCollateralInfo(config.tokenInfos);\n };\n\n getSupportedDexes = (): Dex[] => ['ORCA', 'RAYDIUM', 'METEORA'];\n\n // todo: see if we can read this dynamically\n getFeeTiersForDex = (dex: Dex): Decimal[] => {\n if (dex == 'ORCA') {\n return [new Decimal(0.0001), new Decimal(0.0005), new Decimal(0.003), new Decimal(0.01)];\n } else if (dex == 'RAYDIUM') {\n return [new Decimal(0.0001), new Decimal(0.0005), new Decimal(0.0025), new Decimal(0.01)];\n } else if (dex == 'METEORA') {\n return [new Decimal(0.0001), new Decimal(0.0005), new Decimal(0.0025), new Decimal(0.01)];\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n };\n\n getRebalanceMethods = (): RebalanceMethod[] => {\n return [\n ManualRebalanceMethod,\n PricePercentageRebalanceMethod,\n PricePercentageWithResetRangeRebalanceMethod,\n DriftRebalanceMethod,\n TakeProfitMethod,\n PeriodicRebalanceMethod,\n ExpanderMethod,\n AutodriftMethod,\n ];\n };\n\n getEnabledRebalanceMethods = (): RebalanceMethod[] => {\n return this.getRebalanceMethods().filter((x) => x.enabled);\n };\n\n getPriceReferenceTypes = (): PriceReferenceType[] => {\n return [PoolPriceReferenceType, TwapPriceReferenceType];\n };\n\n getDefaultRebalanceMethod = (): RebalanceMethod => PricePercentageRebalanceMethod;\n\n getDefaultParametersForNewVault = async (): Promise<VaultParameters> => {\n const dex = DefaultDex;\n const tokenMintA = DefaultMintTokenA;\n const tokenMintB = DefaultMintTokenB;\n const rebalanceMethod = this.getDefaultRebalanceMethod();\n const feeTier = DefaultFeeTierOrca;\n const tickSpacing = DefaultTickSpacing;\n const rebalancingParameters = await this.getDefaultRebalanceFields(\n dex,\n tokenMintA,\n tokenMintB,\n tickSpacing,\n rebalanceMethod\n );\n const defaultParameters: VaultParameters = {\n dex,\n tokenMintA,\n tokenMintB,\n feeTier,\n rebalancingParameters,\n };\n return defaultParameters;\n };\n\n /**\n * Retunrs what type of rebalance method the fields represent\n */\n getRebalanceTypeFromRebalanceFields = (rebalanceFields: RebalanceFieldInfo[]): RebalanceTypeKind => {\n return getRebalanceTypeFromRebalanceFields(rebalanceFields);\n };\n\n /**\n * Retunrs the rebalance method the fields represent with more details (description, enabled, etc)\n */\n getRebalanceMethodFromRebalanceFields = (rebalanceFields: RebalanceFieldInfo[]): RebalanceMethod => {\n return getRebalanceMethodFromRebalanceFields(rebalanceFields);\n };\n\n getReferencePriceTypeForStrategy = async (strategy: PublicKey | StrategyWithAddress): Promise<PriceReferenceType> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n return numberToReferencePriceType(strategyWithAddress.strategy.rebalanceRaw.referencePriceType);\n };\n\n getFieldsForRebalanceMethod = (\n rebalanceMethod: RebalanceMethod,\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tickSpacing: number,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n switch (rebalanceMethod) {\n case ManualRebalanceMethod:\n return this.getFieldsForManualRebalanceMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case PricePercentageRebalanceMethod:\n return this.getFieldsForPricePercentageMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case PricePercentageWithResetRangeRebalanceMethod:\n return this.getFieldsForPricePercentageWithResetMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case DriftRebalanceMethod:\n return this.getFieldsForDriftRebalanceMethod(\n dex,\n fieldOverrides,\n tickSpacing,\n tokenAMint,\n tokenBMint,\n poolPrice\n );\n case TakeProfitMethod:\n return this.getFieldsForTakeProfitRebalanceMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case PeriodicRebalanceMethod:\n return this.getFieldsForPeriodicRebalanceMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case ExpanderMethod:\n return this.getFieldsForExpanderRebalanceMethod(dex, fieldOverrides, tokenAMint, tokenBMint, poolPrice);\n case AutodriftMethod:\n return this.getFieldsForAutodriftRebalanceMethod(\n dex,\n fieldOverrides,\n tokenAMint,\n tokenBMint,\n tickSpacing,\n poolPrice\n );\n default:\n throw new Error(`Rebalance method ${rebalanceMethod} is not supported`);\n }\n };\n\n getFieldsForManualRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n\n const defaultFields = getDefaultManualRebalanceFieldInfos(price);\n\n let lowerPrice = defaultFields.find((x) => x.label == 'rangePriceLower')!.value;\n const lowerPriceInput = fieldOverrides.find((x) => x.label == 'rangePriceLower');\n if (lowerPriceInput) {\n lowerPrice = lowerPriceInput.value;\n }\n\n let upperPrice = defaultFields.find((x) => x.label == 'rangePriceUpper')!.value;\n const upperPriceInput = fieldOverrides.find((x) => x.label == 'rangePriceUpper');\n if (upperPriceInput) {\n upperPrice = upperPriceInput.value;\n }\n\n return getManualRebalanceFieldInfos(new Decimal(lowerPrice), new Decimal(upperPrice));\n };\n\n getFieldsForPricePercentageMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n\n const defaultFields = getDefaultPricePercentageRebalanceFieldInfos(price);\n let lowerPriceDifferenceBPS = defaultFields.find((x) => x.label == 'lowerRangeBps')!.value;\n const lowerPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'lowerRangeBps');\n if (lowerPriceDifferenceBPSInput) {\n lowerPriceDifferenceBPS = lowerPriceDifferenceBPSInput.value;\n }\n\n let upperPriceDifferenceBPS = defaultFields.find((x) => x.label == 'upperRangeBps')!.value;\n const upperPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'upperRangeBps');\n if (upperPriceDifferenceBPSInput) {\n upperPriceDifferenceBPS = upperPriceDifferenceBPSInput.value;\n }\n\n return getPricePercentageRebalanceFieldInfos(\n price,\n new Decimal(lowerPriceDifferenceBPS),\n new Decimal(upperPriceDifferenceBPS)\n );\n };\n\n getFieldsForPricePercentageWithResetMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n\n const defaultFields = getDefaultPricePercentageWithResetRebalanceFieldInfos(price);\n\n let lowerPriceDifferenceBPS = defaultFields.find((x) => x.label == 'lowerRangeBps')!.value;\n const lowerPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'lowerRangeBps');\n if (lowerPriceDifferenceBPSInput) {\n lowerPriceDifferenceBPS = lowerPriceDifferenceBPSInput.value;\n }\n\n let upperPriceDifferenceBPS = defaultFields.find((x) => x.label == 'upperRangeBps')!.value;\n const upperPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'upperRangeBps');\n if (upperPriceDifferenceBPSInput) {\n upperPriceDifferenceBPS = upperPriceDifferenceBPSInput.value;\n }\n\n let lowerResetPriceDifferenceBPS = defaultFields.find((x) => x.label == 'resetLowerRangeBps')!.value;\n const lowerResetPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'resetLowerRangeBps');\n if (lowerResetPriceDifferenceBPSInput) {\n lowerResetPriceDifferenceBPS = lowerResetPriceDifferenceBPSInput.value;\n }\n\n let upperResetPriceDifferenceBPS = defaultFields.find((x) => x.label == 'resetUpperRangeBps')!.value;\n const upperResetPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'resetUpperRangeBps');\n if (upperResetPriceDifferenceBPSInput) {\n upperResetPriceDifferenceBPS = upperResetPriceDifferenceBPSInput.value;\n }\n\n return getPricePercentageWithResetRebalanceFieldInfos(\n price,\n new Decimal(lowerPriceDifferenceBPS),\n new Decimal(upperPriceDifferenceBPS),\n new Decimal(lowerResetPriceDifferenceBPS),\n new Decimal(upperResetPriceDifferenceBPS)\n );\n };\n\n getFieldsForDriftRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tickSpacing: number,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const tokenADecimals = await getMintDecimals(this._connection, tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, tokenBMint);\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n\n const defaultFields = getDefaultDriftRebalanceFieldInfos(dex, tickSpacing, price, tokenADecimals, tokenBDecimals);\n\n let startMidTick = defaultFields.find((x) => x.label == 'startMidTick')!.value;\n const startMidTickInput = fieldOverrides.find((x) => x.label == 'startMidTick');\n if (startMidTickInput) {\n startMidTick = startMidTickInput.value;\n }\n\n let ticksBelowMid = defaultFields.find((x) => x.label == 'ticksBelowMid')!.value;\n const ticksBelowMidInput = fieldOverrides.find((x) => x.label == 'ticksBelowMid');\n if (ticksBelowMidInput) {\n ticksBelowMid = ticksBelowMidInput.value;\n }\n\n let ticksAboveMid = defaultFields.find((x) => x.label == 'ticksAboveMid')!.value;\n const ticksAboveMidInput = fieldOverrides.find((x) => x.label == 'ticksAboveMid');\n if (ticksAboveMidInput) {\n ticksAboveMid = ticksAboveMidInput.value;\n }\n\n let secondsPerTick = defaultFields.find((x) => x.label == 'secondsPerTick')!.value;\n const secondsPerTickInput = fieldOverrides.find((x) => x.label == 'secondsPerTick');\n if (secondsPerTickInput) {\n secondsPerTick = secondsPerTickInput.value;\n }\n\n let direction = defaultFields.find((x) => x.label == 'direction')!.value;\n const directionInput = fieldOverrides.find((x) => x.label == 'direction');\n if (directionInput) {\n direction = directionInput.value;\n }\n\n const fieldInfos = getDriftRebalanceFieldInfos(\n dex,\n tokenADecimals,\n tokenBDecimals,\n tickSpacing,\n new Decimal(startMidTick),\n new Decimal(ticksBelowMid),\n new Decimal(ticksAboveMid),\n new Decimal(secondsPerTick),\n new Decimal(direction)\n );\n\n return fieldInfos;\n };\n\n getFieldsForTakeProfitRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n const defaultFields = getDefaultTakeProfitRebalanceFieldsInfos(price);\n\n let lowerRangePrice = defaultFields.find((x) => x.label == 'rangePriceLower')!.value;\n const lowerRangePriceInput = fieldOverrides.find((x) => x.label == 'rangePriceLower');\n if (lowerRangePriceInput) {\n lowerRangePrice = lowerRangePriceInput.value;\n }\n\n let upperRangePrice = defaultFields.find((x) => x.label == 'rangePriceUpper')!.value;\n const upperRangePriceInput = fieldOverrides.find((x) => x.label == 'rangePriceUpper');\n if (upperRangePriceInput) {\n upperRangePrice = upperRangePriceInput.value;\n }\n\n let destinationToken = defaultFields.find((x) => x.label == 'destinationToken')!.value;\n const destinationTokenInput = fieldOverrides.find((x) => x.label == 'destinationToken');\n if (destinationTokenInput) {\n destinationToken = destinationTokenInput.value;\n }\n\n return getTakeProfitRebalanceFieldsInfos(\n new Decimal(lowerRangePrice),\n new Decimal(upperRangePrice),\n new Decimal(destinationToken),\n true\n );\n };\n\n getFieldsForPeriodicRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n const defaultFields = getDefaultPeriodicRebalanceFieldInfos(price);\n\n let period: Decimal = new Decimal(defaultFields.find((x) => x.label == 'period')!.value);\n const periodInput = fieldOverrides.find((x) => x.label == 'period');\n if (periodInput) {\n period = new Decimal(periodInput.value);\n }\n\n let lowerPriceDifferenceBPS = defaultFields.find((x) => x.label == 'lowerRangeBps')!.value;\n const lowerPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'lowerRangeBps');\n if (lowerPriceDifferenceBPSInput) {\n lowerPriceDifferenceBPS = lowerPriceDifferenceBPSInput.value;\n }\n\n let upperPriceDifferenceBPS = defaultFields.find((x) => x.label == 'upperRangeBps')!.value;\n const upperPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'upperRangeBps');\n if (upperPriceDifferenceBPSInput) {\n upperPriceDifferenceBPS = upperPriceDifferenceBPSInput.value;\n }\n\n return getPeriodicRebalanceRebalanceFieldInfos(\n price,\n period,\n new Decimal(lowerPriceDifferenceBPS),\n new Decimal(upperPriceDifferenceBPS)\n );\n };\n\n getFieldsForExpanderRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n const defaultFields = getDefaultExpanderRebalanceFieldInfos(price);\n\n let lowerPriceDifferenceBPS = defaultFields.find((x) => x.label == 'lowerRangeBps')!.value;\n const lowerPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'lowerRangeBps');\n if (lowerPriceDifferenceBPSInput) {\n lowerPriceDifferenceBPS = lowerPriceDifferenceBPSInput.value;\n }\n\n let upperPriceDifferenceBPS = defaultFields.find((x) => x.label == 'upperRangeBps')!.value;\n const upperPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'upperRangeBps');\n if (upperPriceDifferenceBPSInput) {\n upperPriceDifferenceBPS = upperPriceDifferenceBPSInput.value;\n }\n\n let lowerResetPriceDifferenceBPS = defaultFields.find((x) => x.label == 'resetLowerRangeBps')!.value;\n const lowerResetPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'resetLowerRangeBps');\n if (lowerResetPriceDifferenceBPSInput) {\n lowerResetPriceDifferenceBPS = lowerResetPriceDifferenceBPSInput.value;\n }\n\n let upperResetPriceDifferenceBPS = defaultFields.find((x) => x.label == 'resetUpperRangeBps')!.value;\n const upperResetPriceDifferenceBPSInput = fieldOverrides.find((x) => x.label == 'resetUpperRangeBps');\n if (upperResetPriceDifferenceBPSInput) {\n upperResetPriceDifferenceBPS = upperResetPriceDifferenceBPSInput.value;\n }\n\n let expansionBPS = defaultFields.find((x) => x.label == 'expansionBps')!.value;\n const expansionBPSInput = fieldOverrides.find((x) => x.label == 'expansionBps');\n if (expansionBPSInput) {\n expansionBPS = expansionBPSInput.value;\n }\n\n let maxNumberOfExpansions = defaultFields.find((x) => x.label == 'maxNumberOfExpansions')!.value;\n const maxNumberOfExpansionsInput = fieldOverrides.find((x) => x.label == 'maxNumberOfExpansions');\n if (maxNumberOfExpansionsInput) {\n maxNumberOfExpansions = maxNumberOfExpansionsInput.value;\n }\n\n let swapUnevenAllowed = defaultFields.find((x) => x.label == 'swapUnevenAllowed')!.value;\n const swapUnevenAllowedInput = fieldOverrides.find((x) => x.label == 'swapUnevenAllowed');\n if (swapUnevenAllowedInput) {\n swapUnevenAllowed = swapUnevenAllowedInput.value;\n }\n\n return getExpanderRebalanceFieldInfos(\n price,\n new Decimal(lowerPriceDifferenceBPS),\n new Decimal(upperPriceDifferenceBPS),\n new Decimal(lowerResetPriceDifferenceBPS),\n new Decimal(upperResetPriceDifferenceBPS),\n new Decimal(expansionBPS),\n new Decimal(maxNumberOfExpansions),\n new Decimal(swapUnevenAllowed)\n );\n };\n\n getFieldsForAutodriftRebalanceMethod = async (\n dex: Dex,\n fieldOverrides: RebalanceFieldInfo[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tickSpacing: number,\n poolPrice?: Decimal\n ): Promise<RebalanceFieldInfo[]> => {\n const tokenADecimals = await getMintDecimals(this._connection, tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, tokenBMint);\n const price = poolPrice ? poolPrice : new Decimal(await this.getPriceForPair(dex, tokenAMint, tokenBMint));\n\n // TODO: maybe we will need to get real staking price instead of pool price for this to be accurate.\n const defaultFields = getDefaultAutodriftRebalanceFieldInfos(\n dex,\n price,\n tokenADecimals,\n tokenBDecimals,\n tickSpacing\n );\n\n const lastMidTick = defaultFields.find((x) => x.label == 'lastMidTick')!.value;\n\n let initDriftTicksPerEpoch = defaultFields.find((x) => x.label == 'initDriftTicksPerEpoch')!.value;\n const initDriftTicksPerEpochInput = fieldOverrides.find((x) => x.label == 'initDriftTicksPerEpoch');\n if (initDriftTicksPerEpochInput) {\n initDriftTicksPerEpoch = initDriftTicksPerEpochInput.value;\n }\n\n let ticksBelowMid = defaultFields.find((x) => x.label == 'ticksBelowMid')!.value;\n const ticksBelowMidInput = fieldOverrides.find((x) => x.label == 'ticksBelowMid');\n if (ticksBelowMidInput) {\n ticksBelowMid = ticksBelowMidInput.value;\n }\n\n let ticksAboveMid = defaultFields.find((x) => x.label == 'ticksAboveMid')!.value;\n const ticksAboveMidInput = fieldOverrides.find((x) => x.label == 'ticksAboveMid');\n if (ticksAboveMidInput) {\n ticksAboveMid = ticksAboveMidInput.value;\n }\n\n let frontrunMultiplierBps = defaultFields.find((x) => x.label == 'frontrunMultiplierBps')!.value;\n const frontrunMultiplierBpsInput = fieldOverrides.find((x) => x.label == 'frontrunMultiplierBps');\n if (frontrunMultiplierBpsInput) {\n frontrunMultiplierBps = frontrunMultiplierBpsInput.value;\n }\n let stakingRateASource = defaultFields.find((x) => x.label == 'stakingRateASource')!.value;\n const stakingRateASourceInput = fieldOverrides.find((x) => x.label == 'stakingRateASource');\n if (stakingRateASourceInput) {\n stakingRateASource = stakingRateASourceInput.value;\n }\n\n let stakingRateBSource = defaultFields.find((x) => x.label == 'stakingRateBSource')!.value;\n const stakingRateBSourceInput = fieldOverrides.find((x) => x.label == 'stakingRateBSource');\n if (stakingRateBSourceInput) {\n stakingRateBSource = stakingRateBSourceInput.value;\n }\n\n let initialDriftDirection = defaultFields.find((x) => x.label == 'initialDriftDirection')!.value;\n const initialDriftDirectionInput = fieldOverrides.find((x) => x.label == 'initialDriftDirection');\n if (initialDriftDirectionInput) {\n initialDriftDirection = initialDriftDirectionInput.value;\n }\n\n const fieldInfos = getAutodriftRebalanceFieldInfos(\n dex,\n tokenADecimals,\n tokenBDecimals,\n tickSpacing,\n new Decimal(lastMidTick),\n new Decimal(initDriftTicksPerEpoch),\n new Decimal(ticksBelowMid),\n new Decimal(ticksAboveMid),\n new Decimal(frontrunMultiplierBps),\n new Decimal(stakingRateASource),\n new Decimal(stakingRateBSource),\n new Decimal(initialDriftDirection)\n );\n\n return fieldInfos;\n };\n\n /**\n * Get the price for a given pair of tokens in a given dex; The price comes from any pool having those tokens, not a specific one, so the price may not be exactly the same between different pools with the same tokens. For a specific pool price use getPoolPrice\n * @param strategy\n * @param amountA\n */\n getPriceForPair = async (dex: Dex, poolTokenA: PublicKey, poolTokenB: PublicKey): Promise<number> => {\n if (dex == 'ORCA') {\n const pools = await this.getOrcaPoolsForTokens(poolTokenA, poolTokenB);\n if (pools.length == 0) {\n throw new Error(`No pool found for ${poolTokenA.toString()} and ${poolTokenB.toString()}`);\n }\n return pools[0].price;\n } else if (dex == 'RAYDIUM') {\n const pools = await this.getRaydiumPoolsForTokens(poolTokenA, poolTokenB);\n if (pools.length == 0) {\n throw new Error(`No pool found for ${poolTokenA.toString()} and ${poolTokenB.toString()}`);\n }\n return pools[0].price;\n } else if (dex == 'METEORA') {\n const pools = await this.getMeteoraPoolsForTokens(poolTokenA, poolTokenB);\n if (pools.length == 0) {\n throw new Error(`No pool found for ${poolTokenA.toString()} and ${poolTokenB.toString()}`);\n }\n const decimalsX = await getMintDecimals(this._connection, poolTokenA);\n const decimalsY = await getMintDecimals(this._connection, poolTokenB);\n return getPriceOfBinByBinIdWithDecimals(\n pools[0].pool.activeId,\n pools[0].pool.binStep,\n decimalsX,\n decimalsY\n ).toNumber();\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n };\n\n getDefaultRebalanceFields = async (\n dex: Dex,\n poolTokenA: PublicKey,\n poolTokenB: PublicKey,\n tickSpacing: number,\n rebalanceMethod: RebalanceMethod\n ): Promise<RebalanceFieldInfo[]> => {\n const price = new Decimal(await this.getPriceForPair(dex, poolTokenA, poolTokenB));\n const tokenADecimals = await getMintDecimals(this._connection, poolTokenA);\n const tokenBDecimals = await getMintDecimals(this._connection, poolTokenB);\n\n switch (rebalanceMethod) {\n case ManualRebalanceMethod:\n return getDefaultManualRebalanceFieldInfos(price);\n case PricePercentageRebalanceMethod:\n return getDefaultPricePercentageRebalanceFieldInfos(price);\n case PricePercentageWithResetRangeRebalanceMethod:\n return getDefaultPricePercentageWithResetRebalanceFieldInfos(price);\n case DriftRebalanceMethod:\n return getDefaultDriftRebalanceFieldInfos(dex, tickSpacing, price, tokenADecimals, tokenBDecimals);\n case TakeProfitMethod:\n return getDefaultTakeProfitRebalanceFieldsInfos(price);\n case PeriodicRebalanceMethod:\n return getDefaultPeriodicRebalanceFieldInfos(price);\n case ExpanderMethod:\n return getDefaultExpanderRebalanceFieldInfos(price);\n case AutodriftMethod:\n return getDefaultAutodriftRebalanceFieldInfos(dex, price, tokenADecimals, tokenBDecimals, tickSpacing);\n default:\n throw new Error(`Rebalance method ${rebalanceMethod} is not supported`);\n }\n };\n\n /**\n * Return a the pubkey of the pool in a given dex, for given mints and fee tier; if that pool doesn't exist, return default pubkey\n */\n getPoolInitializedForDexPairTier = async (\n dex: Dex,\n poolTokenA: PublicKey,\n poolTokenB: PublicKey,\n feeBPS: Decimal\n ): Promise<PublicKey> => {\n if (dex == 'ORCA') {\n let pool = PublicKey.default;\n const orcaPools = await this.getOrcaPoolsForTokens(poolTokenA, poolTokenB);\n orcaPools.forEach((element) => {\n if (element.lpFeeRate * FullBPS == feeBPS.toNumber()) {\n pool = new PublicKey(element.address);\n }\n });\n return pool;\n } else if (dex == 'RAYDIUM') {\n const pools: Pool[] = [];\n const raydiumPools = await this.getRaydiumPoolsForTokens(poolTokenA, poolTokenB);\n raydiumPools.forEach((element) => {\n if (new Decimal(element.ammConfig.tradeFeeRate).div(FullBPS).div(FullPercentage).equals(feeBPS.div(FullBPS))) {\n pools.push(element);\n }\n });\n if (pools.length == 0) {\n return PublicKey.default;\n }\n let pool = PublicKey.default;\n let tickSpacing = Number.MAX_VALUE;\n pools.forEach((element) => {\n if (element.ammConfig.tickSpacing < tickSpacing) {\n pool = new PublicKey(element.id);\n tickSpacing = element.ammConfig.tickSpacing;\n }\n });\n return pool;\n } else if (dex == 'METEORA') {\n let pool = PublicKey.default;\n const pools = await this.getMeteoraPoolsForTokens(poolTokenA, poolTokenB);\n pools.forEach((element) => {\n const feeRateBps = element.pool.parameters.baseFactor * element.pool.binStep;\n if (feeRateBps == feeBPS.toNumber()) {\n pool = new PublicKey(element.key);\n }\n });\n return pool;\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n };\n\n /**\n * Return generic information for all pools in a given dex, for given mints and fee tier\n */\n async getExistentPoolsForPair(dex: Dex, tokenMintA: PublicKey, tokenMintB: PublicKey): Promise<GenericPoolInfo[]> {\n if (dex == 'ORCA') {\n const pools = await this.getOrcaPoolsForTokens(tokenMintA, tokenMintB);\n const genericPoolInfos: GenericPoolInfo[] = await Promise.all(\n pools.map(async (pool: OrcaPool) => {\n const positionsCount = new Decimal(await this.getPositionsCountForPool(dex, new PublicKey(pool.address)));\n // read price from pool\n const poolData = await this._orcaService.getPool(new PublicKey(pool.address));\n if (!poolData) {\n throw new Error(`Pool ${pool.address} not found`);\n }\n const poolInfo: GenericPoolInfo = {\n dex,\n address: new PublicKey(pool.address),\n price: poolData.price,\n tokenMintA: new PublicKey(pool.tokenA.mint),\n tokenMintB: new PublicKey(pool.tokenB.mint),\n tvl: pool.tvl ? new Decimal(pool.tvl) : undefined,\n feeRate: new Decimal(pool.lpFeeRate).mul(FullBPS),\n volumeOnLast7d: pool.volume ? new Decimal(pool.volume.week) : undefined,\n tickSpacing: new Decimal(pool.tickSpacing),\n positions: positionsCount,\n };\n return poolInfo;\n })\n );\n return genericPoolInfos;\n } else if (dex == 'RAYDIUM') {\n const pools = await this.getRaydiumPoolsForTokens(tokenMintA, tokenMintB);\n const genericPoolInfos: GenericPoolInfo[] = await Promise.all(\n pools.map(async (pool: Pool) => {\n const positionsCount = new Decimal(await this.getPositionsCountForPool(dex, new PublicKey(pool.id)));\n\n const poolInfo: GenericPoolInfo = {\n dex,\n address: new PublicKey(pool.id),\n price: new Decimal(pool.price),\n tokenMintA: new PublicKey(pool.mintA),\n tokenMintB: new PublicKey(pool.mintB),\n tvl: new Decimal(pool.tvl),\n feeRate: new Decimal(pool.ammConfig.tradeFeeRate).div(new Decimal(FullPercentage)),\n volumeOnLast7d: new Decimal(pool.week.volume),\n tickSpacing: new Decimal(pool.ammConfig.tickSpacing),\n positions: positionsCount,\n };\n return poolInfo;\n })\n );\n\n return genericPoolInfos;\n } else if (dex == 'METEORA') {\n const pools = await this.getMeteoraPoolsForTokens(tokenMintA, tokenMintB);\n const genericPoolInfos: GenericPoolInfo[] = await Promise.all(\n pools.map(async (pool: MeteoraPool) => {\n const positionsCount = new Decimal(await this.getPositionsCountForPool(dex, pool.key));\n const decimalsX = await getMintDecimals(this._connection, pool.pool.tokenXMint);\n const decimalsY = await getMintDecimals(this._connection, pool.pool.tokenYMint);\n const price = getPriceOfBinByBinIdWithDecimals(pool.pool.activeId, pool.pool.binStep, decimalsX, decimalsY);\n\n const poolInfo: GenericPoolInfo = {\n dex,\n address: pool.key,\n price,\n tokenMintA: pool.pool.tokenXMint,\n tokenMintB: pool.pool.tokenYMint,\n tvl: new Decimal(0),\n feeRate: computeMeteoraFee(pool.pool).div(1e2), // Transform it to rate\n volumeOnLast7d: new Decimal(0),\n tickSpacing: new Decimal(pool.pool.binStep),\n positions: positionsCount,\n };\n return poolInfo;\n })\n );\n\n return genericPoolInfos;\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n }\n\n getOrcaPoolsForTokens = async (poolTokenA: PublicKey, poolTokenB: PublicKey): Promise<OrcaPool[]> => {\n const pools: OrcaPool[] = [];\n const poolTokenAString = poolTokenA.toString();\n const poolTokenBString = poolTokenB.toString();\n const whirlpools = await this._orcaService.getOrcaWhirlpools();\n whirlpools.whirlpools.forEach((element) => {\n if (\n (element.tokenA.mint == poolTokenAString && element.tokenB.mint == poolTokenBString) ||\n (element.tokenA.mint == poolTokenBString && element.tokenB.mint == poolTokenAString)\n )\n pools.push(element);\n });\n\n return pools;\n };\n\n getRaydiumPoolsForTokens = async (poolTokenA: PublicKey, poolTokenB: PublicKey): Promise<Pool[]> => {\n const pools: Pool[] = [];\n const poolTokenAString = poolTokenA.toString();\n const poolTokenBString = poolTokenB.toString();\n const raydiumPools = await this._raydiumService.getRaydiumWhirlpools();\n raydiumPools.data.forEach((element) => {\n if (\n (element.mintA == poolTokenAString && element.mintB == poolTokenBString) ||\n (element.mintA == poolTokenBString && element.mintB == poolTokenAString)\n ) {\n pools.push(element);\n }\n });\n\n return pools;\n };\n\n getMeteoraPoolsForTokens = async (poolTokenA: PublicKey, poolTokenB: PublicKey): Promise<MeteoraPool[]> => {\n const pools: MeteoraPool[] = [];\n const meteoraPools = await this._meteoraService.getMeteoraPools();\n meteoraPools.forEach((element) => {\n if (\n (element.pool.tokenXMint.equals(poolTokenA) && element.pool.tokenYMint.equals(poolTokenB)) ||\n (element.pool.tokenXMint.equals(poolTokenB) && element.pool.tokenYMint.equals(poolTokenA))\n ) {\n pools.push(element);\n }\n });\n\n return pools;\n };\n\n /**\n * Return a list of all Kamino whirlpool strategies\n * @param strategies Limit results to these strategy addresses\n */\n getStrategies = async (strategies?: Array<PublicKey>): Promise<Array<WhirlpoolStrategy | null>> => {\n if (!strategies) {\n strategies = (await this.getAllStrategiesWithFilters({})).map((x) => x.address);\n }\n return await batchFetch(strategies, (chunk) => this.getWhirlpoolStrategies(chunk));\n };\n\n /**\n * Return a list of all Kamino whirlpool strategies with their addresses\n * @param strategies Limit results to these strategy addresses\n */\n getStrategiesWithAddresses = async (strategies?: Array<PublicKey>): Promise<Array<StrategyWithAddress>> => {\n if (!strategies) {\n return this.getAllStrategiesWithFilters({});\n }\n const result: StrategyWithAddress[] = [];\n const states = await batchFetch(strategies, (chunk) => this.getWhirlpoolStrategies(chunk));\n for (let i = 0; i < strategies.length; i++) {\n if (states[i]) {\n result.push({ address: strategies[i], strategy: states[i]! });\n } else {\n throw Error(`Could not fetch strategy state for ${strategies[i].toString()}`);\n }\n }\n return result;\n };\n\n getAllStrategiesWithFilters = async (strategyFilters: StrategiesFilters): Promise<Array<StrategyWithAddress>> => {\n const filters: GetProgramAccountsFilter[] = [];\n filters.push({\n dataSize: WhirlpoolStrategy.layout.span + 8,\n });\n filters.push({\n memcmp: {\n offset: 0,\n bytes: bs58.encode(WhirlpoolStrategy.discriminator),\n },\n });\n\n if (strategyFilters.owner) {\n filters.push({\n memcmp: {\n bytes: strategyFilters.owner.toBase58(),\n offset: 8,\n },\n });\n }\n\n if (strategyFilters.strategyCreationStatus) {\n filters.push({\n memcmp: {\n bytes: strategyCreationStatusToBase58(strategyFilters.strategyCreationStatus),\n offset: 1625,\n },\n });\n }\n if (strategyFilters.strategyType) {\n filters.push({\n memcmp: {\n bytes: strategyTypeToBase58(strategyFilters.strategyType).toString(),\n offset: 1120,\n },\n });\n }\n\n if (strategyFilters.isCommunity !== undefined && strategyFilters.isCommunity !== null) {\n const value = !strategyFilters.isCommunity ? '1' : '2';\n filters.push({\n memcmp: {\n bytes: value,\n offset: 1664,\n },\n });\n }\n\n return (\n await this._connection.getProgramAccounts(this._kaminoProgramId, {\n filters,\n })\n ).map((x) => {\n const res: StrategyWithAddress = {\n strategy: WhirlpoolStrategy.decode(x.account.data),\n address: x.pubkey,\n };\n return res;\n });\n };\n\n /**\n * Get a Kamino whirlpool strategy by its public key address\n * @param address\n */\n getStrategyByAddress = (address: PublicKey) => this.getWhirlpoolStrategy(address);\n\n /**\n * Get a Kamino whirlpool strategy by its kToken mint address\n * @param kTokenMint - mint address of the kToken\n */\n getStrategyByKTokenMint = async (kTokenMint: PublicKey): Promise<StrategyWithAddress | null> => {\n const matchingStrategies = await this._connection.getProgramAccounts(this._kaminoProgram.programId, {\n filters: [\n {\n dataSize: WhirlpoolStrategy.layout.span + 8,\n },\n {\n memcmp: {\n offset: 0,\n bytes: bs58.encode(WhirlpoolStrategy.discriminator),\n },\n },\n {\n memcmp: {\n bytes: kTokenMint.toBase58(),\n offset: 720,\n },\n },\n ],\n });\n\n if (matchingStrategies.length === 0) {\n return null;\n }\n if (matchingStrategies.length > 1) {\n throw new Error(\n `Multiple strategies found for kToken mint: ${kTokenMint.toBase58()}. Strategies found: ${matchingStrategies.map(\n (x) => x.pubkey.toBase58()\n )}`\n );\n }\n const decodedStrategy = WhirlpoolStrategy.decode(matchingStrategies[0].account.data);\n return {\n address: matchingStrategies[0].pubkey,\n strategy: decodedStrategy,\n };\n };\n\n /**\n * Get the strategy share data (price + balances) of the specified Kamino whirlpool strategy\n * @param strategy\n * @param scopePrices\n */\n getStrategyShareData = async (\n strategy: PublicKey | StrategyWithAddress,\n scopePrices?: OraclePrices\n ): Promise<ShareData> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n const sharesFactor = Decimal.pow(10, strategyState.strategy.sharesMintDecimals.toString());\n const sharesIssued = new Decimal(strategyState.strategy.sharesIssued.toString());\n const balances = await this.getStrategyBalances(strategyState.strategy, scopePrices);\n if (sharesIssued.isZero()) {\n return { price: new Decimal(1), balance: balances };\n } else {\n return { price: balances.computedHoldings.totalSum.div(sharesIssued).mul(sharesFactor), balance: balances };\n }\n };\n\n /**\n * Batch fetch share data for all or a filtered list of strategies\n * @param strategyFilters strategy filters or a list of strategy public keys\n */\n getStrategiesShareData = async (\n strategyFilters: StrategiesFilters | PublicKey[],\n stratsWithAddresses?: StrategyWithAddress[],\n collateralInfos?: CollateralInfo[]\n ): Promise<Array<ShareDataWithAddress>> => {\n const result: Array<ShareDataWithAddress> = [];\n const strategiesWithAddresses = stratsWithAddresses\n ? stratsWithAddresses\n : Array.isArray(strategyFilters)\n ? await this.getStrategiesWithAddresses(strategyFilters)\n : await this.getAllStrategiesWithFilters(strategyFilters);\n const fetchBalances: Promise<StrategyBalanceWithAddress>[] = [];\n const allScopePrices = strategiesWithAddresses.map((x) => x.strategy.scopePrices);\n const scopePrices = await this._scope.getMultipleOraclePrices(allScopePrices);\n const scopePricesMap: Record<string, OraclePrices> = scopePrices.reduce((map, [address, price]) => {\n map[address.toBase58()] = price;\n return map;\n }, {});\n\n const raydiumStrategies = strategiesWithAddresses.filter(\n (x) =>\n x.strategy.strategyDex.toNumber() === dexToNumber('RAYDIUM') && !x.strategy.position.equals(PublicKey.default)\n );\n const raydiumPoolsPromise = this.getRaydiumPools(raydiumStrategies.map((x) => x.strategy.pool));\n const raydiumPositionsPromise = this.getRaydiumPositions(raydiumStrategies.map((x) => x.strategy.position));\n const orcaStrategies = strategiesWithAddresses.filter(\n (x) => x.strategy.strategyDex.toNumber() === dexToNumber('ORCA') && !x.strategy.position.equals(PublicKey.default)\n );\n const orcaPoolsPromise = this.getWhirlpools(orcaStrategies.map((x) => x.strategy.pool));\n const orcaPositionsPromise = this.getOrcaPositions(orcaStrategies.map((x) => x.strategy.position));\n const meteoraStrategies = strategiesWithAddresses.filter(\n (x) =>\n x.strategy.strategyDex.toNumber() === dexToNumber('METEORA') && !x.strategy.position.equals(PublicKey.default)\n );\n const meteoraPoolsPromise = this.getMeteoraPools(meteoraStrategies.map((x) => x.strategy.pool));\n const meteoraPositionsPromise = this.getMeteoraPositions(meteoraStrategies.map((x) => x.strategy.position));\n\n const [raydiumPools, raydiumPositions, orcaPools, orcaPositions, meteoraPools, meteoraPositions] =\n await Promise.all([\n raydiumPoolsPromise,\n raydiumPositionsPromise,\n orcaPoolsPromise,\n orcaPositionsPromise,\n meteoraPoolsPromise,\n meteoraPositionsPromise,\n ]);\n\n const inactiveStrategies = strategiesWithAddresses.filter((x) => x.strategy.position.equals(PublicKey.default));\n const collInfos = collateralInfos ? collateralInfos : await this.getCollateralInfos();\n for (const { strategy, address } of inactiveStrategies) {\n const strategyPrices = await this.getStrategyPrices(\n strategy,\n collInfos,\n scopePricesMap[strategy.scopePrices.toBase58()]\n );\n result.push({\n address,\n strategy,\n shareData: getEmptyShareData({\n ...strategyPrices,\n poolPrice: ZERO,\n upperPrice: ZERO,\n lowerPrice: ZERO,\n twapPrice: ZERO,\n lowerResetPrice: ZERO,\n upperResetPrice: ZERO,\n }),\n });\n }\n\n fetchBalances.push(\n ...this.getBalance<PoolState, PersonalPositionState>(\n raydiumStrategies,\n raydiumPools,\n raydiumPositions,\n this.getRaydiumBalances,\n collInfos,\n scopePricesMap\n )\n );\n\n fetchBalances.push(\n ...this.getBalance<Whirlpool, Position>(\n orcaStrategies,\n orcaPools,\n orcaPositions,\n this.getOrcaBalances,\n collInfos,\n scopePricesMap\n )\n );\n\n fetchBalances.push(\n ...this.getBalance<LbPair, PositionV2>(\n meteoraStrategies,\n meteoraPools,\n meteoraPositions,\n this.getMeteoraBalances,\n collInfos,\n scopePricesMap\n )\n );\n\n const strategyBalances = await Promise.all(fetchBalances);\n\n for (const { balance, strategyWithAddress } of strategyBalances) {\n const sharesFactor = Decimal.pow(10, strategyWithAddress.strategy.sharesMintDecimals.toString());\n const sharesIssued = new Decimal(strategyWithAddress.strategy.sharesIssued.toString());\n if (sharesIssued.isZero()) {\n result.push({\n address: strategyWithAddress.address,\n strategy: strategyWithAddress.strategy,\n shareData: { price: new Decimal(1), balance },\n });\n } else {\n result.push({\n address: strategyWithAddress.address,\n strategy: strategyWithAddress.strategy,\n shareData: { price: balance.computedHoldings.totalSum.div(sharesIssued).mul(sharesFactor), balance },\n });\n }\n }\n\n return result;\n };\n\n private getBalance = <PoolT, PositionT>(\n strategies: StrategyWithAddress[],\n pools: PubkeyHashMap<PublicKey, PoolT | null>,\n positions: (PositionT | null)[],\n fetchBalance: (\n strategy: WhirlpoolStrategy,\n pool: PoolT,\n position: PositionT,\n collateralInfos: CollateralInfo[],\n prices?: OraclePrices\n ) => Promise<StrategyBalances>,\n collateralInfos: CollateralInfo[],\n prices?: Record<string, OraclePrices>\n ): Promise<StrategyBalanceWithAddress>[] => {\n const fetchBalances: Promise<StrategyBalanceWithAddress>[] = [];\n\n for (let i = 0; i < strategies.length; i++) {\n const { strategy, address } = strategies[i];\n\n const retrievedPool = { ...pools.get(strategy.pool) };\n const pool = { ...retrievedPool };\n const position = positions[i];\n if (!pool) {\n throw new Error(`Pool ${strategy.pool.toString()} could not be found.`);\n }\n if (!position) {\n throw new Error(`Position ${strategy.position.toString()} could not be found.`);\n }\n fetchBalances.push(\n fetchBalance(\n strategy,\n pool as PoolT,\n position as PositionT,\n collateralInfos,\n prices ? prices[strategy.scopePrices.toBase58()] : undefined\n ).then((balance) => {\n return { balance, strategyWithAddress: { strategy, address } };\n })\n );\n }\n return fetchBalances;\n };\n\n private getRaydiumBalances = async (\n strategy: WhirlpoolStrategy,\n pool: PoolState,\n position: PersonalPositionState,\n collateralInfos: CollateralInfo[],\n prices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const strategyPrices = await this.getStrategyPrices(strategy, collateralInfos, prices);\n const rebalanceKind = numberToRebalanceType(strategy.rebalanceType);\n const tokenHoldings = this.getRaydiumTokensBalances(strategy, pool, position);\n\n const computedHoldings: Holdings = this.getStrategyHoldingsUsd(\n tokenHoldings.available.a,\n tokenHoldings.available.b,\n tokenHoldings.invested.a,\n tokenHoldings.invested.b,\n new Decimal(strategy.tokenAMintDecimals.toString()),\n new Decimal(strategy.tokenBMintDecimals.toString()),\n strategyPrices.aPrice,\n strategyPrices.bPrice\n );\n\n const decimalsA = strategy.tokenAMintDecimals.toNumber();\n const decimalsB = strategy.tokenBMintDecimals.toNumber();\n\n const poolPrice = SqrtPriceMath.sqrtPriceX64ToPrice(pool.sqrtPriceX64, decimalsA, decimalsB);\n const twapPrice =\n strategyPrices.aTwapPrice !== null && strategyPrices.bTwapPrice !== null\n ? strategyPrices.aTwapPrice.div(strategyPrices.bTwapPrice)\n : null;\n const upperPrice = SqrtPriceMath.sqrtPriceX64ToPrice(\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex),\n decimalsA,\n decimalsB\n );\n const lowerPrice = SqrtPriceMath.sqrtPriceX64ToPrice(\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex),\n decimalsA,\n decimalsB\n );\n let lowerResetPrice: Decimal | null = null;\n let upperResetPrice: Decimal | null = null;\n const dex = numberToDex(strategy.strategyDex.toNumber());\n if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n const state = deserializePricePercentageWithResetRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n } else if (rebalanceKind.kind === Expander.kind) {\n const state = deserializeExpanderRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n }\n\n const balance: StrategyBalances = {\n computedHoldings,\n prices: { ...strategyPrices, poolPrice, lowerPrice, upperPrice, twapPrice, lowerResetPrice, upperResetPrice },\n tokenAAmounts: tokenHoldings.available.a.plus(tokenHoldings.invested.a),\n tokenBAmounts: tokenHoldings.available.b.plus(tokenHoldings.invested.b),\n };\n return balance;\n };\n\n private getMeteoraBalances = async (\n strategy: WhirlpoolStrategy,\n pool: LbPair,\n position: PositionV2 | undefined, // the undefined is for scenarios where the position is not initialised yet\n collateralInfos: CollateralInfo[],\n prices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const strategyPricesPromise = this.getStrategyPrices(strategy, collateralInfos, prices);\n const rebalanceKind = numberToRebalanceType(strategy.rebalanceType);\n const tokenHoldingsPromise = this.getMeteoraTokensBalances(strategy);\n const [strategyPrices, tokenHoldings] = await Promise.all([strategyPricesPromise, tokenHoldingsPromise]);\n\n const computedHoldings: Holdings = this.getStrategyHoldingsUsd(\n tokenHoldings.available.a,\n tokenHoldings.available.b,\n tokenHoldings.invested.a,\n tokenHoldings.invested.b,\n new Decimal(strategy.tokenAMintDecimals.toString()),\n new Decimal(strategy.tokenBMintDecimals.toString()),\n strategyPrices.aPrice,\n strategyPrices.bPrice\n );\n\n const decimalsA = strategy.tokenAMintDecimals.toNumber();\n const decimalsB = strategy.tokenBMintDecimals.toNumber();\n\n const twapPrice =\n strategyPrices.aTwapPrice !== null && strategyPrices.bTwapPrice !== null\n ? strategyPrices.aTwapPrice.div(strategyPrices.bTwapPrice)\n : null;\n const poolPrice = getPriceOfBinByBinIdWithDecimals(pool.activeId, pool.binStep, decimalsA, decimalsB);\n let lowerPrice = ZERO;\n let upperPrice = ZERO;\n if (position && position.lowerBinId && position.upperBinId) {\n lowerPrice = getPriceOfBinByBinIdWithDecimals(position.lowerBinId, pool.binStep, decimalsA, decimalsB);\n upperPrice = getPriceOfBinByBinIdWithDecimals(position.upperBinId, pool.binStep, decimalsA, decimalsB);\n }\n\n let lowerResetPrice: Decimal | null = null;\n let upperResetPrice: Decimal | null = null;\n const dex = numberToDex(strategy.strategyDex.toNumber());\n if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n const state = deserializePricePercentageWithResetRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n } else if (rebalanceKind.kind === Expander.kind) {\n const state = deserializeExpanderRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n }\n\n const balance: StrategyBalances = {\n computedHoldings,\n prices: { ...strategyPrices, poolPrice, lowerPrice, upperPrice, twapPrice, lowerResetPrice, upperResetPrice },\n tokenAAmounts: tokenHoldings.available.a.plus(tokenHoldings.invested.a),\n tokenBAmounts: tokenHoldings.available.b.plus(tokenHoldings.invested.b),\n };\n return balance;\n };\n\n private getRaydiumTokensBalances = (\n strategy: WhirlpoolStrategy,\n pool: PoolState,\n position: PersonalPositionState,\n mode: 'DEPOSIT' | 'WITHDRAW' = 'WITHDRAW'\n ): TokenHoldings => {\n const lowerSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex);\n const upperSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex);\n\n const { amountA, amountB } = LiquidityMath.getAmountsFromLiquidity(\n pool.sqrtPriceX64,\n new BN(lowerSqrtPriceX64),\n new BN(upperSqrtPriceX64),\n position.liquidity,\n mode === 'DEPOSIT'\n );\n\n const aAvailable = new Decimal(strategy.tokenAAmounts.toString());\n const bAvailable = new Decimal(strategy.tokenBAmounts.toString());\n const aInvested = new Decimal(amountA.toString());\n const bInvested = new Decimal(amountB.toString());\n\n const holdings: TokenHoldings = {\n available: {\n a: aAvailable,\n b: bAvailable,\n },\n invested: {\n a: aInvested,\n b: bInvested,\n },\n };\n\n return holdings;\n };\n\n private getMeteoraTokensBalances = async (strategy: WhirlpoolStrategy): Promise<TokenHoldings> => {\n let aInvested = ZERO;\n let bInvested = ZERO;\n try {\n const userPosition = await this.readMeteoraPosition(strategy.pool, strategy.position);\n\n if (!userPosition?.amountX.isNaN() && !userPosition?.amountY.isNaN()) {\n aInvested = userPosition.amountX;\n bInvested = userPosition.amountY;\n }\n } catch (e) {\n // @tslint:disable-next-line no-empty\n }\n\n const aAvailable = new Decimal(strategy.tokenAAmounts.toString());\n const bAvailable = new Decimal(strategy.tokenBAmounts.toString());\n\n const holdings: TokenHoldings = {\n available: {\n a: aAvailable,\n b: bAvailable,\n },\n invested: {\n a: new Decimal(aInvested),\n b: new Decimal(bInvested),\n },\n };\n\n return holdings;\n };\n\n private getOrcaBalances = async (\n strategy: WhirlpoolStrategy,\n pool: Whirlpool,\n position: Position,\n collateralInfos: CollateralInfo[],\n prices?: OraclePrices,\n mode: 'DEPOSIT' | 'WITHDRAW' = 'WITHDRAW'\n ): Promise<StrategyBalances> => {\n const strategyPrices = await this.getStrategyPrices(strategy, collateralInfos, prices);\n const rebalanceKind = numberToRebalanceType(strategy.rebalanceType);\n\n const tokenHoldings = this.getOrcaTokensBalances(strategy, pool, position, mode);\n const computedHoldings: Holdings = this.getStrategyHoldingsUsd(\n tokenHoldings.available.a,\n tokenHoldings.available.b,\n tokenHoldings.invested.a,\n tokenHoldings.invested.b,\n new Decimal(strategy.tokenAMintDecimals.toString()),\n new Decimal(strategy.tokenBMintDecimals.toString()),\n strategyPrices.aPrice,\n strategyPrices.bPrice\n );\n\n const decimalsA = strategy.tokenAMintDecimals.toNumber();\n const decimalsB = strategy.tokenBMintDecimals.toNumber();\n\n const poolPrice = sqrtPriceX64ToPrice(pool.sqrtPrice, decimalsA, decimalsB);\n const twapPrice =\n strategyPrices.aTwapPrice !== null && strategyPrices.bTwapPrice !== null\n ? strategyPrices.aTwapPrice.div(strategyPrices.bTwapPrice)\n : null;\n const upperPrice = tickIndexToPrice(position.tickUpperIndex, decimalsA, decimalsB);\n const lowerPrice = tickIndexToPrice(position.tickLowerIndex, decimalsA, decimalsB);\n let lowerResetPrice: Decimal | null = null;\n let upperResetPrice: Decimal | null = null;\n const dex = numberToDex(strategy.strategyDex.toNumber());\n if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n const state = deserializePricePercentageWithResetRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n } else if (rebalanceKind.kind === Expander.kind) {\n const state = deserializeExpanderRebalanceWithStateOverride(\n dex,\n decimalsA,\n decimalsB,\n poolPrice,\n strategy.rebalanceRaw\n );\n [lowerResetPrice, upperResetPrice] = extractPricesFromDeserializedState(state);\n }\n\n const balance: StrategyBalances = {\n computedHoldings,\n prices: { ...strategyPrices, poolPrice, lowerPrice, upperPrice, twapPrice, lowerResetPrice, upperResetPrice },\n tokenAAmounts: tokenHoldings.available.a.plus(tokenHoldings.invested.a),\n tokenBAmounts: tokenHoldings.available.b.plus(tokenHoldings.invested.b),\n };\n return balance;\n };\n\n private getOrcaTokensBalances = (\n strategy: WhirlpoolStrategy,\n pool: Whirlpool,\n position: Position,\n mode: 'DEPOSIT' | 'WITHDRAW' = 'WITHDRAW'\n ): TokenHoldings => {\n const quote = getRemoveLiquidityQuote(\n {\n positionAddress: strategy.position,\n liquidity: position.liquidity,\n slippageTolerance: Percentage.fromFraction(0, 1000),\n sqrtPrice: pool.sqrtPrice,\n tickLowerIndex: position.tickLowerIndex,\n tickUpperIndex: position.tickUpperIndex,\n tickCurrentIndex: pool.tickCurrentIndex,\n },\n mode === 'DEPOSIT'\n );\n const aAvailable = new Decimal(strategy.tokenAAmounts.toString());\n const bAvailable = new Decimal(strategy.tokenBAmounts.toString());\n const aInvested = new Decimal(quote.estTokenA.toString());\n const bInvested = new Decimal(quote.estTokenB.toString());\n\n const holdings: TokenHoldings = {\n available: {\n a: aAvailable,\n b: bAvailable,\n },\n invested: {\n a: aInvested,\n b: bInvested,\n },\n };\n\n return holdings;\n };\n\n /**\n * Get the strategies share data (price + balances) of the Kamino whirlpool strategies that match the filters\n * @param strategyFilters\n */\n getStrategyShareDataForStrategies = async (\n strategyFilters: StrategiesFilters\n ): Promise<Array<ShareDataWithAddress>> => {\n // weird name of method, but want to keep this method backwards compatible and not rename it\n return this.getStrategiesShareData(strategyFilters);\n };\n\n /**\n * Get the strategy share price of the specified Kamino whirlpool strategy\n * @param strategy\n */\n getStrategySharePrice = async (strategy: PublicKey | StrategyWithAddress): Promise<Decimal> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n const sharesFactor = Decimal.pow(10, strategyState.strategy.sharesMintDecimals.toString());\n const sharesIssued = new Decimal(strategyState.strategy.sharesIssued.toString());\n const balances = await this.getStrategyBalances(strategyState.strategy);\n if (sharesIssued.isZero()) {\n return new Decimal(1);\n } else {\n return balances.computedHoldings.totalSum.div(sharesIssued).mul(sharesFactor);\n }\n };\n\n private getTokenAccountBalance = async (tokenAccount: PublicKey): Promise<Decimal> => {\n const tokenAccountBalance = await this._connection.getTokenAccountBalance(tokenAccount);\n if (!tokenAccountBalance.value) {\n throw new Error(`Could not get token account balance for ${tokenAccount.toString()}.`);\n }\n return new Decimal(tokenAccountBalance.value.uiAmountString!);\n };\n\n /**\n * Get the balance of a token account or 0 if it doesn't exist\n * @param tokenAccount\n */\n private getTokenAccountBalanceOrZero = async (tokenAccount: PublicKey): Promise<Decimal> => {\n const tokenAccountExists = await checkIfAccountExists(this._connection, tokenAccount);\n if (tokenAccountExists) {\n return await this.getTokenAccountBalance(tokenAccount);\n } else {\n return new Decimal(0);\n }\n };\n\n private getStrategyBalances = async (\n strategy: WhirlpoolStrategy,\n scopePrices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const collateralInfos = await this.getCollateralInfos();\n if (strategy.strategyDex.toNumber() == dexToNumber('ORCA')) {\n return this.getStrategyBalancesOrca(strategy, collateralInfos, scopePrices);\n } else if (strategy.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n return this.getStrategyBalancesRaydium(strategy, collateralInfos, scopePrices);\n } else if (strategy.strategyDex.toNumber() == dexToNumber('METEORA')) {\n return this.getStrategyBalancesMeteora(strategy, collateralInfos, scopePrices);\n } else {\n throw new Error(`Invalid dex ${strategy.strategyDex.toString()}`);\n }\n };\n\n private getStrategyTokensBalances = async (\n strategy: WhirlpoolStrategy,\n mode: 'DEPOSIT' | 'WITHDRAW' = 'WITHDRAW'\n ): Promise<TokenHoldings> => {\n if (strategy.strategyDex.toNumber() == dexToNumber('ORCA')) {\n const [whirlpoolAcc, positionAcc] = await this.getConnection().getMultipleAccountsInfo([\n strategy.pool,\n strategy.position,\n ]);\n if (!whirlpoolAcc) {\n throw Error(`Could not fetch Orca whirlpool state with pubkey ${strategy.pool.toString()}`);\n }\n if (!positionAcc) {\n throw Error(`Could not fetch Orca whirlpool position state with pubkey ${strategy.position.toString()}`);\n }\n const [whirlpool, position] = await Promise.all([\n Whirlpool.decode(whirlpoolAcc.data),\n Position.decode(positionAcc.data),\n ]);\n return this.getOrcaTokensBalances(strategy, whirlpool, position, mode);\n } else if (strategy.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n const [poolStateAcc, positionAcc] = await this.getConnection().getMultipleAccountsInfo([\n strategy.pool,\n strategy.position,\n ]);\n if (!poolStateAcc) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${strategy.pool.toString()}`);\n }\n if (!positionAcc) {\n throw Error(`Could not fetch Raydium position state with pubkey ${strategy.position.toString()}`);\n }\n const [poolState, position] = await Promise.all([\n PoolState.decode(poolStateAcc.data),\n PersonalPositionState.decode(positionAcc.data),\n ]);\n return this.getRaydiumTokensBalances(strategy, poolState, position, mode);\n } else if (strategy.strategyDex.toNumber() == dexToNumber('METEORA')) {\n return this.getMeteoraTokensBalances(strategy);\n } else {\n throw new Error(`Invalid dex ${strategy.strategyDex.toString()}`);\n }\n };\n\n /**\n * Get amount of specified token in all Kamino live strategies\n * @param tokenMint token mint pubkey\n */\n getTotalTokensInStrategies = async (tokenMint: PublicKey | string): Promise<TotalStrategyVaultTokens> => {\n const strategies = await this.getStrategiesShareData({ strategyCreationStatus: 'LIVE' });\n let totalTokenAmount = new Decimal(0);\n const vaults: StrategyVaultTokens[] = [];\n for (const { strategy, address, shareData } of strategies) {\n const aTotal = shareData.balance.computedHoldings.invested.a.plus(shareData.balance.computedHoldings.available.a);\n const bTotal = shareData.balance.computedHoldings.invested.b.plus(shareData.balance.computedHoldings.available.b);\n let amount = new Decimal(0);\n if (strategy.tokenAMint.equals(new PublicKey(tokenMint)) && aTotal.greaterThan(0)) {\n amount = aTotal;\n } else if (strategy.tokenBMint.equals(new PublicKey(tokenMint)) && bTotal.greaterThan(0)) {\n amount = bTotal;\n }\n if (amount.greaterThan(0)) {\n totalTokenAmount = totalTokenAmount.plus(amount);\n vaults.push({\n address: address,\n frontendUrl: `${FRONTEND_KAMINO_STRATEGY_URL}/${address}`,\n amount,\n });\n }\n }\n return { totalTokenAmount, vaults, timestamp: new Date() };\n };\n\n getAccountOwner = async (pk: PublicKey): Promise<PublicKey> => {\n const acc = await this.getConnection().getAccountInfo(pk);\n if (acc == null) {\n throw Error(`Could not fetch mint ${pk.toString()}`);\n }\n return acc.owner;\n };\n\n private getStrategyBalancesOrca = async (\n strategy: WhirlpoolStrategy,\n collateralInfos: CollateralInfo[],\n scopePrices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const [whirlpoolAcc, positionAcc] = await this.getConnection().getMultipleAccountsInfo([\n strategy.pool,\n strategy.position,\n ]);\n if (!whirlpoolAcc) {\n throw Error(`Could not fetch Orca whirlpool state with pubkey ${strategy.pool.toString()}`);\n }\n if (!positionAcc) {\n throw Error(`Could not fetch Orca whirlpool position state with pubkey ${strategy.position.toString()}`);\n }\n const [whirlpool, position] = await Promise.all([\n Whirlpool.decode(whirlpoolAcc.data),\n Position.decode(positionAcc.data),\n ]);\n\n return this.getOrcaBalances(strategy, whirlpool, position, collateralInfos, scopePrices);\n };\n\n private getStrategyBalancesRaydium = async (\n strategy: WhirlpoolStrategy,\n collateralInfos: CollateralInfo[],\n scopePrices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const [poolStateAcc, positionAcc] = await this.getConnection().getMultipleAccountsInfo([\n strategy.pool,\n strategy.position,\n ]);\n if (!poolStateAcc) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${strategy.pool.toString()}`);\n }\n if (!positionAcc) {\n throw Error(`Could not fetch Raydium position state with pubkey ${strategy.position.toString()}`);\n }\n const [poolState, position] = await Promise.all([\n PoolState.decode(poolStateAcc.data),\n PersonalPositionState.decode(positionAcc.data),\n ]);\n\n return this.getRaydiumBalances(strategy, poolState, position, collateralInfos, scopePrices);\n };\n\n private getStrategyBalancesMeteora = async (\n strategy: WhirlpoolStrategy,\n collateralInfos: CollateralInfo[],\n scopePrices?: OraclePrices\n ): Promise<StrategyBalances> => {\n const [poolStateAcc, positionAcc] = await this.getConnection().getMultipleAccountsInfo([\n strategy.pool,\n strategy.position,\n ]);\n if (!poolStateAcc) {\n throw Error(`Could not fetch Meteora pool state with pubkey ${strategy.pool.toString()}`);\n }\n if (!positionAcc) {\n throw Error(`Could not fetch Meteora position state with pubkey ${strategy.position.toString()}`);\n }\n\n try {\n const [poolState, position] = await Promise.all([\n LbPair.decode(poolStateAcc.data),\n PositionV2.decode(positionAcc.data),\n ]);\n\n return this.getMeteoraBalances(strategy, poolState, position, collateralInfos, scopePrices);\n } catch (e) {\n const poolState = LbPair.decode(poolStateAcc.data);\n return this.getMeteoraBalances(strategy, poolState, undefined, collateralInfos, scopePrices);\n }\n };\n\n private getStrategyHoldingsUsd = (\n aAvailable: Decimal,\n bAvailable: Decimal,\n aInvested: Decimal,\n bInvested: Decimal,\n decimalsA: Decimal,\n decimalsB: Decimal,\n aPrice: Decimal,\n bPrice: Decimal\n ): Holdings => {\n const aAvailableScaled = aAvailable.div(Decimal.pow(10, decimalsA));\n const bAvailableScaled = bAvailable.div(Decimal.pow(10, decimalsB));\n\n const aInvestedScaled = aInvested.div(Decimal.pow(10, decimalsA));\n const bInvestedScaled = bInvested.div(Decimal.pow(10, decimalsB));\n\n const availableUsd = aAvailableScaled.mul(aPrice).add(bAvailableScaled.mul(bPrice));\n const investedUsd = aInvestedScaled.mul(aPrice).add(bInvestedScaled.mul(bPrice));\n\n return {\n available: {\n a: aAvailableScaled,\n b: bAvailableScaled,\n },\n availableUsd: availableUsd,\n invested: {\n a: aInvestedScaled,\n b: bInvestedScaled,\n },\n investedUsd: investedUsd,\n totalSum: availableUsd.add(investedUsd),\n };\n };\n\n getAllOraclePrices = (): Promise<OraclePrices> => this._scope.getOraclePrices();\n\n /**\n * Get all Kamino token spot and twap prices\n * @param oraclePrices (optional) Scope Oracle prices\n * @param collateralInfos (optional) Kamino Collateral Infos\n */\n getAllPrices = async (oraclePrices?: OraclePrices, collateralInfos?: CollateralInfo[]): Promise<KaminoPrices> => {\n // todo: make MintToPriceMap have Pubkey as key\n const spotPrices: MintToPriceMap = {};\n const twaps: MintToPriceMap = {};\n ({ oraclePrices, collateralInfos } = await this.getOraclePricesAndCollateralInfos(oraclePrices, collateralInfos));\n for (const collateralInfo of collateralInfos) {\n if (collateralInfo.scopePriceChain && Scope.isScopeChainValid(collateralInfo.scopePriceChain) && collateralInfo.disabled === 0) {\n const collInfoMintString = collateralInfo.mint.toString();\n const spotPrice = await this._scope.getPriceFromChain(collateralInfo.scopePriceChain, oraclePrices);\n spotPrices[collInfoMintString] = {\n price: spotPrice.price,\n name: getTokenNameFromCollateralInfo(collateralInfo),\n };\n\n const filteredTwapChain = collateralInfo?.scopeTwapPriceChain?.filter((x) => x > 0);\n if (filteredTwapChain && Scope.isScopeChainValid(filteredTwapChain)) {\n const twap = await this._scope.getPriceFromChain(filteredTwapChain, oraclePrices);\n twaps[collInfoMintString] = {\n price: twap.price,\n name: getTokenNameFromCollateralInfo(collateralInfo),\n };\n }\n }\n }\n return { spot: spotPrices, twap: twaps };\n };\n\n private async getOraclePricesAndCollateralInfos(\n oraclePrices?: OraclePrices,\n collateralInfos?: CollateralInfo[]\n ): Promise<OraclePricesAndCollateralInfos> {\n if (!oraclePrices) {\n oraclePrices = await this.getAllOraclePrices();\n }\n if (!collateralInfos) {\n collateralInfos = await this.getCollateralInfos();\n }\n return { oraclePrices, collateralInfos };\n }\n\n /**\n * Get the prices of all tokens in the specified strategy, or null if the reward token does not exist\n * @param strategy\n * @param collateralInfos\n * @param scopePrices\n */\n getStrategyPrices = async (\n strategy: WhirlpoolStrategy,\n collateralInfos: CollateralInfo[],\n scopePrices?: OraclePrices\n ): Promise<StrategyPrices> => {\n const tokenA = collateralInfos[strategy.tokenACollateralId.toNumber()];\n const tokenB = collateralInfos[strategy.tokenBCollateralId.toNumber()];\n const rewardToken0 = collateralInfos[strategy.reward0CollateralId.toNumber()];\n const rewardToken1 = collateralInfos[strategy.reward1CollateralId.toNumber()];\n const rewardToken2 = collateralInfos[strategy.reward2CollateralId.toNumber()];\n\n let prices: OraclePrices;\n if (scopePrices) {\n prices = scopePrices;\n } else {\n prices = await this._scope.getOraclePrices({ prices: strategy.scopePrices });\n }\n const aPrice = await this._scope.getPriceFromChain(tokenA.scopePriceChain, prices);\n const bPrice = await this._scope.getPriceFromChain(tokenB.scopePriceChain, prices);\n const tokenATwap = stripTwapZeros(tokenA.scopeTwapPriceChain);\n const tokenBTwap = stripTwapZeros(tokenB.scopeTwapPriceChain);\n const aTwapPrice = Scope.isScopeChainValid(tokenATwap)\n ? await this._scope.getPriceFromChain(tokenATwap, prices)\n : null;\n const bTwapPrice = Scope.isScopeChainValid(tokenBTwap)\n ? await this._scope.getPriceFromChain(tokenBTwap, prices)\n : null;\n\n const reward0Price =\n strategy.reward0Decimals.toNumber() !== 0 && Scope.isScopeChainValid(rewardToken0.scopePriceChain)\n ? await this._scope.getPriceFromChain(rewardToken0.scopePriceChain, prices)\n : null;\n const reward1Price =\n strategy.reward1Decimals.toNumber() !== 0 && Scope.isScopeChainValid(rewardToken1.scopePriceChain)\n ? await this._scope.getPriceFromChain(rewardToken1.scopePriceChain, prices)\n : null;\n const reward2Price =\n strategy.reward2Decimals.toNumber() !== 0 && Scope.isScopeChainValid(rewardToken2.scopePriceChain)\n ? await this._scope.getPriceFromChain(rewardToken2.scopePriceChain, prices)\n : null;\n\n return {\n aPrice: aPrice.price,\n bPrice: bPrice.price,\n aTwapPrice: aTwapPrice?.price ?? null,\n bTwapPrice: bTwapPrice?.price ?? null,\n reward0Price: reward0Price?.price ?? null,\n reward1Price: reward1Price?.price ?? null,\n reward2Price: reward2Price?.price ?? null,\n };\n };\n\n /**\n * Get all token accounts for the specified share mint\n */\n getShareTokenAccounts = (shareMint: PublicKey) => {\n //how to get all token accounts for specific mint: https://spl.solana.com/token#finding-all-token-accounts-for-a-specific-mint\n //get it from the hardcoded token program and create a filter with the actual mint address\n //datasize:165 filter selects all token accounts, memcmp filter selects based on the mint address withing each token account\n return this._connection.getParsedProgramAccounts(TOKEN_PROGRAM_ID, {\n filters: [{ dataSize: 165 }, { memcmp: { offset: 0, bytes: shareMint.toBase58() } }],\n });\n };\n\n /**\n * Get all token accounts for the specified wallet\n */\n getAllTokenAccounts = (wallet: PublicKey) => {\n //how to get all token accounts for specific wallet: https://spl.solana.com/token#finding-all-token-accounts-for-a-wallet\n return this._connection.getParsedProgramAccounts(TOKEN_PROGRAM_ID, {\n filters: [{ dataSize: 165 }, { memcmp: { offset: 32, bytes: wallet.toString() } }],\n });\n };\n\n /**\n * Get all token accounts that are holding a specific Kamino whirlpool strategy\n */\n getStrategyTokenAccounts = async (strategy: PublicKey | StrategyWithAddress) => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n return this.getShareTokenAccounts(strategyState.strategy.sharesMint);\n };\n\n /**\n * Get strategy range in which liquidity is deposited\n */\n getStrategyRange = async (strategy: PublicKey | StrategyWithAddress): Promise<PositionRange> => {\n const stratWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n\n if (stratWithAddress.strategy.strategyDex.toNumber() == dexToNumber('ORCA')) {\n return this.getStrategyRangeOrca(strategy);\n } else if (stratWithAddress.strategy.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n return this.getStrategyRangeRaydium(strategy);\n } else if (stratWithAddress.strategy.strategyDex.toNumber() == dexToNumber('METEORA')) {\n return this.getStrategyRangeMeteora(strategy);\n } else {\n throw Error(`Dex {stratWithAddress.strategy.strategyDex.toNumber()} not supported`);\n }\n };\n\n getStrategyRangeOrca = async (strategy: PublicKey | StrategyWithAddress): Promise<PositionRange> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n if (strategyState.position == PublicKey.default) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n } else {\n return this.getPositionRangeOrca(\n strategyState.position,\n strategyState.tokenAMintDecimals.toNumber(),\n strategyState.tokenBMintDecimals.toNumber()\n );\n }\n };\n\n getStrategyRangeRaydium = async (strategy: PublicKey | StrategyWithAddress): Promise<PositionRange> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n if (strategyState.position == PublicKey.default) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n } else {\n return this.getPositionRangeRaydium(\n strategyState.position,\n strategyState.tokenAMintDecimals.toNumber(),\n strategyState.tokenBMintDecimals.toNumber()\n );\n }\n };\n\n getStrategyRangeMeteora = async (strategy: PublicKey | StrategyWithAddress): Promise<PositionRange> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n if (strategyState.position == PublicKey.default) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n } else {\n return this.getPositionRangeMeteora(\n strategyState.position,\n strategyState.tokenAMintDecimals.toNumber(),\n strategyState.tokenBMintDecimals.toNumber()\n );\n }\n };\n\n getPositionRange = async (\n dex: Dex,\n position: PublicKey,\n decimalsA: number,\n decimalsB: number\n ): Promise<PositionRange> => {\n if (dex == 'ORCA') {\n return this.getPositionRangeOrca(position, decimalsA, decimalsB);\n } else if (dex == 'RAYDIUM') {\n return this.getPositionRangeRaydium(position, decimalsA, decimalsB);\n } else if (dex == 'METEORA') {\n return this.getPositionRangeMeteora(position, decimalsA, decimalsB);\n } else {\n throw Error(`Unsupported dex ${dex}`);\n }\n };\n\n getPositionRangeOrca = async (\n positionPk: PublicKey,\n decimalsA: number,\n decimalsB: number\n ): Promise<PositionRange> => {\n if (positionPk.equals(PublicKey.default)) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const position = await Position.fetch(this._connection, positionPk);\n if (!position) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const lowerPrice = tickIndexToPrice(position.tickLowerIndex, decimalsA, decimalsB);\n const upperPrice = tickIndexToPrice(position.tickUpperIndex, decimalsA, decimalsB);\n\n const positionRange: PositionRange = { lowerPrice, upperPrice };\n\n return positionRange;\n };\n\n getPositionRangeRaydium = async (\n positionPk: PublicKey,\n decimalsA: number,\n decimalsB: number\n ): Promise<PositionRange> => {\n if (positionPk.equals(PublicKey.default)) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const position = await PersonalPositionState.fetch(this._connection, positionPk);\n if (!position) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const lowerPrice = sqrtPriceX64ToPrice(\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex),\n decimalsA,\n decimalsB\n );\n\n const upperPrice = sqrtPriceX64ToPrice(\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex),\n decimalsA,\n decimalsB\n );\n\n const positionRange: PositionRange = { lowerPrice, upperPrice };\n\n return positionRange;\n };\n\n getPositionRangeMeteora = async (\n positionPk: PublicKey,\n decimalsA: number,\n decimalsB: number\n ): Promise<PositionRange> => {\n if (positionPk.equals(PublicKey.default)) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const position = await PositionV2.fetch(this._connection, positionPk);\n if (!position) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const pool = await LbPair.fetch(this._connection, position.lbPair);\n if (!pool) {\n return { lowerPrice: ZERO, upperPrice: ZERO };\n }\n const lowerPrice = getPriceOfBinByBinIdWithDecimals(position.lowerBinId, pool.binStep, decimalsA, decimalsB);\n\n const upperPrice = getPriceOfBinByBinIdWithDecimals(position.upperBinId, pool.binStep, decimalsA, decimalsB);\n\n const positionRange: PositionRange = { lowerPrice, upperPrice };\n\n return positionRange;\n };\n\n /**\n * Get all strategy token holders\n * @param strategy\n */\n getStrategyHolders = async (strategy: PublicKey | StrategyWithAddress): Promise<StrategyHolder[]> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n const tokenAccounts = await this.getStrategyTokenAccounts(strategyState);\n const result: StrategyHolder[] = [];\n for (const tokenAccount of tokenAccounts) {\n const accountData = tokenAccount.account.data as Data;\n result.push({\n holderPubkey: new PublicKey(accountData.parsed.info.owner),\n amount: new Decimal(accountData.parsed.info.tokenAmount.uiAmountString),\n });\n }\n return result;\n };\n\n /**\n * Get a list of Orca whirlpools from public keys\n * @param whirlpools\n */\n getWhirlpools = async (whirlpools: PublicKey[]): Promise<PubkeyHashMap<PublicKey, Whirlpool | null>> => {\n // todo: make this map have Pubkey as key\n const whirlpoolMap = new PubkeyHashMap<PublicKey, Whirlpool | null>();\n\n const whirlpoolStrings = whirlpools.map((whirlpool) => whirlpool.toBase58());\n const uniqueWhirlpools = [...new Set(whirlpoolStrings)].map((value) => new PublicKey(value));\n if (uniqueWhirlpools.length === 1) {\n const whirlpool = await this.getWhirlpoolByAddress(whirlpools[0]);\n whirlpoolMap.set(whirlpools[0], whirlpool);\n return whirlpoolMap;\n }\n const fetched = await batchFetch(uniqueWhirlpools, (chunk) => Whirlpool.fetchMultiple(this._connection, chunk));\n fetched.reduce((map, whirlpool, i) => {\n whirlpoolMap.set(uniqueWhirlpools[i], whirlpool);\n map[uniqueWhirlpools[i].toBase58()] = whirlpool;\n return map;\n }, {});\n return whirlpoolMap;\n };\n\n /**\n * Get a list of Orca positions from public keys\n * @param positions\n */\n getOrcaPositions = async (positions: PublicKey[]): Promise<(Position | null)[]> => {\n const nonDefaults = positions.filter((value) => value.toBase58() !== PublicKey.default.toBase58());\n const fetched = await batchFetch(nonDefaults, (chunk) => Position.fetchMultiple(this._connection, chunk));\n const fetchedMap: Record<string, Position | null> = fetched.reduce((map, position, i) => {\n map[nonDefaults[i].toBase58()] = position;\n return map;\n }, {});\n return positions.map((position) => fetchedMap[position.toBase58()] || null);\n };\n\n /**\n * Get a list of Raydium positions from public keys\n * @param positions\n */\n getRaydiumPositions = async (positions: PublicKey[]): Promise<(PersonalPositionState | null)[]> => {\n const nonDefaults = positions.filter((value) => value.toBase58() !== PublicKey.default.toBase58());\n const fetched = await batchFetch(nonDefaults, (chunk) =>\n PersonalPositionState.fetchMultiple(this._connection, chunk)\n );\n const fetchedMap: Record<string, PersonalPositionState | null> = fetched.reduce((map, position, i) => {\n map[nonDefaults[i].toBase58()] = position;\n return map;\n }, {});\n return positions.map((position) => fetchedMap[position.toBase58()] || null);\n };\n\n getMeteoraPositions = async (positions: PublicKey[]): Promise<(PositionV2 | null)[]> => {\n const nonDefaults = positions.filter((value) => !value.equals(PublicKey.default));\n const fetched = await batchFetch(nonDefaults, (chunk) => PositionV2.fetchMultiple(this._connection, chunk));\n const fetchedMap: Record<string, PositionV2 | null> = fetched.reduce((map, position, i) => {\n map[nonDefaults[i].toBase58()] = position;\n return map;\n }, {});\n return positions.map((position) => fetchedMap[position.toBase58()] || null);\n };\n\n /**\n * Get whirlpool from public key\n * @param whirlpool pubkey of the orca whirlpool\n */\n getWhirlpoolByAddress = (whirlpool: PublicKey) => Whirlpool.fetch(this._connection, whirlpool);\n\n /**\n * Get a list of Raydium pools from public keys\n * @param pools\n */\n getRaydiumPools = async (pools: PublicKey[]): Promise<PubkeyHashMap<PublicKey, PoolState | null>> => {\n // todo: make this map have Pubkey as key\n const poolsMap = new PubkeyHashMap<PublicKey, PoolState | null>();\n\n const poolStrings = pools.map((pool) => pool.toBase58());\n const uniquePools = [...new Set(poolStrings)].map((value) => new PublicKey(value));\n if (uniquePools.length === 1) {\n const pool = await this.getRaydiumPoolByAddress(pools[0]);\n poolsMap.set(pools[0], pool);\n }\n const fetched = await batchFetch(uniquePools, (chunk) => PoolState.fetchMultiple(this._connection, chunk));\n fetched.reduce((map, whirlpool, i) => {\n poolsMap.set(uniquePools[i], whirlpool);\n return map;\n }, {});\n return poolsMap;\n };\n\n getMeteoraPools = async (pools: PublicKey[]): Promise<PubkeyHashMap<PublicKey, LbPair | null>> => {\n // todo: make this map have Pubkey as key\n const poolsMap = new PubkeyHashMap<PublicKey, LbPair | null>();\n\n const poolStrings = pools.map((pool) => pool.toBase58());\n const uniquePools = [...new Set(poolStrings)].map((value) => new PublicKey(value));\n if (uniquePools.length === 1) {\n const pool = await this.getMeteoraPoolByAddress(pools[0]);\n poolsMap.set(pools[0], pool);\n }\n const fetched = await batchFetch(uniquePools, (chunk) => LbPair.fetchMultiple(this._connection, chunk));\n fetched.reduce((map, whirlpool, i) => {\n poolsMap.set(uniquePools[i], whirlpool);\n return map;\n }, {});\n return poolsMap;\n };\n\n getRaydiumAmmConfig = (config: PublicKey) => AmmConfig.fetch(this._connection, config);\n\n /**\n * Get Raydium pool from public key\n * @param pool pubkey of the orca whirlpool\n */\n getRaydiumPoolByAddress = (pool: PublicKey) => PoolState.fetch(this._connection, pool);\n\n getMeteoraPoolByAddress = (pool: PublicKey) => LbPair.fetch(this._connection, pool);\n\n getEventAuthorityPDA = (dex: BN): PublicKey => {\n if (dex.toNumber() == dexToNumber('ORCA') || dex.toNumber() == dexToNumber('RAYDIUM')) {\n return this._kaminoProgramId;\n }\n\n if (dex.toNumber() == dexToNumber('METEORA')) {\n const [key, _] = PublicKey.findProgramAddressSync([Buffer.from('__event_authority')], METEORA_PROGRAM_ID);\n return key;\n }\n throw new Error('Invalid dex');\n };\n\n /**\n * Return transaction instruction to withdraw shares from a strategy owner (wallet) and get back token A and token B\n * @param strategy strategy public key\n * @param sharesAmount amount of shares (decimal representation), NOT in lamports\n * @param owner shares owner (wallet with shares)\n * @returns transaction instruction\n */\n withdrawShares = async (\n strategy: PublicKey | StrategyWithAddress,\n sharesAmount: Decimal,\n owner: PublicKey,\n sharesAtaBalance?: Decimal\n ): Promise<WithdrawShares> => {\n if (sharesAmount.lessThanOrEqualTo(0)) {\n throw Error('Shares amount cant be lower than or equal to 0.');\n }\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategy.strategyDex);\n const { treasuryFeeTokenAVault, treasuryFeeTokenBVault } = this.getTreasuryFeeVaultPDAs(\n strategyState.strategy.tokenAMint,\n strategyState.strategy.tokenBMint\n );\n\n const sharesAta = getAssociatedTokenAddress(strategyState.strategy.sharesMint, owner);\n const tokenAAta = getAssociatedTokenAddress(\n strategyState.strategy.tokenAMint,\n owner,\n true,\n keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n const tokenBAta = getAssociatedTokenAddress(\n strategyState.strategy.tokenBMint,\n owner,\n true,\n keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n\n const sharesAmountInLamports = sharesAmount.mul(\n new Decimal(10).pow(strategyState.strategy.sharesMintDecimals.toString())\n );\n\n const programId = getDexProgramId(strategyState.strategy);\n\n const args: WithdrawArgs = { sharesAmount: new BN(sharesAmountInLamports.floor().toString()) };\n const accounts: WithdrawAccounts = {\n user: owner,\n strategy: strategyState.address,\n globalConfig: strategyState.strategy.globalConfig,\n pool: strategyState.strategy.pool,\n position: strategyState.strategy.position,\n tickArrayLower: strategyState.strategy.tickArrayLower,\n tickArrayUpper: strategyState.strategy.tickArrayUpper,\n tokenAVault: strategyState.strategy.tokenAVault,\n tokenBVault: strategyState.strategy.tokenBVault,\n baseVaultAuthority: strategyState.strategy.baseVaultAuthority,\n poolTokenVaultA: strategyState.strategy.poolTokenVaultA,\n poolTokenVaultB: strategyState.strategy.poolTokenVaultB,\n tokenAAta: tokenAAta,\n tokenBAta: tokenBAta,\n userSharesAta: sharesAta,\n sharesMint: strategyState.strategy.sharesMint,\n treasuryFeeTokenAVault,\n treasuryFeeTokenBVault,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n positionTokenAccount: strategyState.strategy.positionTokenAccount,\n poolProgram: programId,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n tokenAMint: strategyState.strategy.tokenAMint,\n tokenBMint: strategyState.strategy.tokenBMint,\n eventAuthority,\n tokenATokenProgram: keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n };\n\n const withdrawIx = withdraw(args, accounts);\n let collectFeesAndRewardsIxns: TransactionInstruction[] = [];\n\n // for Raydium strats we need to collect fees and rewards before withdrawal\n // add rewards vaults accounts to withdraw\n const isRaydium = strategyState.strategy.strategyDex.toNumber() == dexToNumber('RAYDIUM');\n if (isRaydium) {\n const raydiumPosition = await PersonalPositionState.fetch(this._connection, strategyState.strategy.position);\n if (!raydiumPosition) {\n throw new Error('Position is not found');\n }\n\n collectFeesAndRewardsIxns = new Decimal(raydiumPosition.liquidity.toString()).gt(ZERO)\n ? [await this.collectFeesAndRewards(strategy, owner)]\n : [];\n\n const poolState = await this.getRaydiumPoolByAddress(strategyState.strategy.pool);\n if (!poolState) {\n throw new Error('Pool is not found');\n }\n\n withdrawIx.keys.push({\n pubkey: strategyState.strategy.raydiumProtocolPositionOrBaseVaultAuthority,\n isSigner: false,\n isWritable: true,\n });\n if (strategyState.strategy.reward0Decimals.toNumber() > 0) {\n withdrawIx.keys = withdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[0].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.strategy.reward0Vault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[0].tokenMint, isSigner: false, isWritable: true },\n ]);\n }\n if (strategyState.strategy.reward1Decimals.toNumber() > 0) {\n withdrawIx.keys = withdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[1].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.strategy.reward1Vault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[1].tokenMint, isSigner: false, isWritable: true },\n ]);\n }\n if (strategyState.strategy.reward2Decimals.toNumber() > 0) {\n withdrawIx.keys = withdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[2].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.strategy.reward2Vault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[2].tokenMint, isSigner: false, isWritable: true },\n ]);\n }\n }\n\n const res: WithdrawShares = { prerequisiteIxs: collectFeesAndRewardsIxns, withdrawIx };\n // if we withdraw everything also close the shares ATA\n if (sharesAtaBalance && sharesAtaBalance.lte(sharesAmount)) {\n res.closeSharesAtaIx = Token.createCloseAccountInstruction(TOKEN_PROGRAM_ID, sharesAta, owner, owner, []);\n }\n\n return res;\n };\n\n /**\n * Get transaction instructions that create associated token accounts if they don't exist (token A, B and share)\n * @param owner wallet owner (shareholder)\n * @param strategyState kamino strategy state\n * @param tokenAData token A data of the owner's wallet\n * @param tokenAAta associated token account for token B\n * @param tokenBData token B data of the owner's wallet\n * @param tokenBAta associated token account for token B\n * @param sharesMintData shares data of the owner's wallet\n * @param sharesAta associated token account for shares\n * @returns list of transaction instructions (empty if all accounts already exist)\n */\n getCreateAssociatedTokenAccountInstructionsIfNotExist = async (\n owner: PublicKey,\n strategyState: StrategyWithAddress,\n tokenAData: AccountInfo<Buffer> | null,\n tokenAAta: PublicKey,\n tokenBData: AccountInfo<Buffer> | null,\n tokenBAta: PublicKey,\n sharesMintData: AccountInfo<Buffer> | null,\n sharesAta: PublicKey\n ): Promise<TransactionInstruction[]> => {\n const instructions: TransactionInstruction[] = [];\n if (!tokenAData) {\n instructions.push(\n createAssociatedTokenAccountInstruction(\n owner,\n tokenAAta,\n owner,\n strategyState.strategy.tokenAMint,\n tokenAData!.owner\n )\n );\n }\n if (!tokenBData) {\n instructions.push(\n createAssociatedTokenAccountInstruction(\n owner,\n tokenBAta,\n owner,\n strategyState.strategy.tokenBMint,\n tokenBData!.owner\n )\n );\n }\n if (!sharesMintData) {\n instructions.push(\n createAssociatedTokenAccountInstruction(owner, sharesAta, owner, strategyState.strategy.sharesMint)\n );\n }\n return instructions;\n };\n\n /**\n * Check if strategy has already been fetched (is StrategyWithAddress type) and return that,\n * otherwise fetch it first from PublicKey and return it\n * @param strategy\n * @private\n */\n private getStrategyStateIfNotFetched = async (\n strategy: PublicKey | StrategyWithAddress\n ): Promise<StrategyWithAddress> => {\n const hasStrategyBeenFetched = (object: PublicKey | StrategyWithAddress): object is StrategyWithAddress => {\n return 'strategy' in object;\n };\n\n if (hasStrategyBeenFetched(strategy)) {\n return strategy;\n } else {\n const strategyState = await this.getStrategyByAddress(strategy);\n if (!strategyState) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n return { strategy: strategyState, address: strategy };\n }\n };\n\n private getWhirlpoolStateIfNotFetched = async (\n whirlpool: PublicKey | WhirlpoolWithAddress\n ): Promise<WhirlpoolWithAddress> => {\n const hasWhirlpoolBeenFetched = (object: PublicKey | WhirlpoolWithAddress): object is WhirlpoolWithAddress => {\n return 'whirlpool' in object;\n };\n\n if (hasWhirlpoolBeenFetched(whirlpool)) {\n return whirlpool;\n } else {\n const whirlpoolState = await this.getWhirlpoolByAddress(whirlpool);\n if (!whirlpoolState) {\n throw Error(`Could not fetch whirlpool state with pubkey ${whirlpool.toString()}`);\n }\n return { whirlpool: whirlpoolState, address: whirlpool };\n }\n };\n\n private getMeteoraStateIfNotFetched = async (lbPair: PublicKey | LbPairWithAddress): Promise<LbPairWithAddress> => {\n const hasLbPairBeenFetched = (object: PublicKey | LbPairWithAddress): object is LbPairWithAddress => {\n return 'lbPair' in object;\n };\n\n if (hasLbPairBeenFetched(lbPair)) {\n return lbPair;\n } else {\n const lbPairState = await this.getMeteoraPoolByAddress(lbPair);\n if (!lbPairState) {\n throw Error(`Could not fetch meteora lb pair state with pubkey ${lbPair.toString()}`);\n }\n return { pool: lbPairState, address: lbPair };\n }\n };\n\n /**\n * Get treasury fee vault program addresses from for token A and B mints\n * @param tokenAMint\n * @param tokenBMint\n * @private\n */\n private getTreasuryFeeVaultPDAs = (tokenAMint: PublicKey, tokenBMint: PublicKey): TreasuryFeeVault => {\n const [treasuryFeeTokenAVault, _treasuryFeeTokenAVaultBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('treasury_fee_vault'), tokenAMint.toBuffer()],\n this.getProgramID()\n );\n const [treasuryFeeTokenBVault, _treasuryFeeTokenBVaultBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('treasury_fee_vault'), tokenBMint.toBuffer()],\n this.getProgramID()\n );\n const [treasuryFeeVaultAuthority, _treasuryFeeVaultAuthorityBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('treasury_fee_vault_authority')],\n this.getProgramID()\n );\n return { treasuryFeeTokenAVault, treasuryFeeTokenBVault, treasuryFeeVaultAuthority };\n };\n\n /**\n * Get a transaction instruction to withdraw all strategy shares from a specific wallet into token A and B\n * @param strategy public key of the strategy\n * @param owner public key of the owner (shareholder)\n * @returns transaction instruction or null if no shares or no sharesMint ATA present in the wallet\n */\n withdrawAllShares = async (\n strategy: PublicKey | StrategyWithAddress,\n owner: PublicKey\n ): Promise<WithdrawShares | null> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n const [sharesAta, sharesData] = await getAssociatedTokenAddressAndData(\n this._connection,\n strategyState.strategy.sharesMint,\n owner\n );\n if (!sharesData) {\n return null;\n }\n const balance = await this.getTokenAccountBalance(sharesAta);\n if (balance.isZero()) {\n return null;\n }\n return this.withdrawShares(strategyState, balance, owner);\n };\n\n /**\n * Get all the accounts needed by the deposit tx, without the swap.\n * @param strategy Kamino strategy public key or on-chain object\n * @param owner Owner (wallet, shareholder) public key\n * @returns list of pubkeys needed for the deposit transaction\n */\n getAllDepositAccounts = async (strategy: PublicKey | StrategyWithAddress, owner: PublicKey): Promise<PublicKey[]> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n\n const globalConfig = await GlobalConfig.fetch(this._connection, strategyState.strategy.globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${strategyState.strategy.globalConfig.toString()}`);\n }\n\n const sharesAta = getAssociatedTokenAddress(strategyState.strategy.sharesMint, owner);\n const tokenAAta = getAssociatedTokenAddress(\n strategyState.strategy.tokenAMint,\n owner,\n true,\n keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n const tokenBAta = getAssociatedTokenAddress(\n strategyState.strategy.tokenBMint,\n owner,\n true,\n keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n\n const accounts = [\n owner,\n strategyState.address,\n strategyState.strategy.globalConfig,\n strategyState.strategy.pool,\n strategyState.strategy.position,\n strategyState.strategy.tokenAVault,\n strategyState.strategy.tokenBVault,\n strategyState.strategy.baseVaultAuthority,\n strategyState.strategy.tokenAMint,\n strategyState.strategy.tokenBMint,\n sharesAta,\n tokenAAta,\n tokenBAta,\n strategyState.strategy.sharesMint,\n strategyState.strategy.sharesMintAuthority,\n strategyState.strategy.scopePrices,\n globalConfig.tokenInfos,\n TOKEN_PROGRAM_ID,\n keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID),\n keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n SYSVAR_INSTRUCTIONS_PUBKEY,\n strategyState.strategy.tickArrayLower,\n strategyState.strategy.tickArrayUpper,\n ];\n\n return accounts;\n };\n\n /**\n * Get transaction instruction to deposit token A and B into a strategy.\n * @param strategy Kamino strategy public key or on-chain object\n * @param amountA Amount of token A to deposit into strategy\n * @param amountB Amount of token B to deposit into strategy\n * @param owner Owner (wallet, shareholder) public key\n * @returns transaction instruction for depositing tokens into a strategy\n */\n deposit = async (\n strategy: PublicKey | StrategyWithAddress,\n amountA: Decimal,\n amountB: Decimal,\n owner: PublicKey\n ): Promise<TransactionInstruction> => {\n if (amountA.lessThanOrEqualTo(0) && amountB.lessThanOrEqualTo(0)) {\n throw Error('Token A and B amount cant be lower than or equal to 0.');\n }\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n\n const globalConfig = await this.getGlobalConfigState(strategyState.strategy.globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${strategyState.strategy.globalConfig.toString()}`);\n }\n\n const [sharesAta] = await getAssociatedTokenAddressAndData(\n this._connection,\n strategyState.strategy.sharesMint,\n owner\n );\n const [tokenAAta] = await getAssociatedTokenAddressAndData(\n this._connection,\n strategyState.strategy.tokenAMint,\n owner,\n keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n const [tokenBAta] = await getAssociatedTokenAddressAndData(\n this._connection,\n strategyState.strategy.tokenBMint,\n owner,\n keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n\n const lamportsA = amountA.mul(new Decimal(10).pow(strategyState.strategy.tokenAMintDecimals.toString()));\n const lamportsB = amountB.mul(new Decimal(10).pow(strategyState.strategy.tokenBMintDecimals.toString()));\n\n const depositArgs: DepositArgs = {\n tokenMaxA: new BN(lamportsA.floor().toString()),\n tokenMaxB: new BN(lamportsB.floor().toString()),\n };\n\n const depositAccounts: DepositAccounts = {\n user: owner,\n strategy: strategyState.address,\n globalConfig: strategyState.strategy.globalConfig,\n pool: strategyState.strategy.pool,\n position: strategyState.strategy.position,\n tokenAVault: strategyState.strategy.tokenAVault,\n tokenBVault: strategyState.strategy.tokenBVault,\n baseVaultAuthority: strategyState.strategy.baseVaultAuthority,\n tokenAAta,\n tokenBAta,\n tokenAMint: strategyState.strategy.tokenAMint,\n tokenBMint: strategyState.strategy.tokenBMint,\n userSharesAta: sharesAta,\n sharesMint: strategyState.strategy.sharesMint,\n sharesMintAuthority: strategyState.strategy.sharesMintAuthority,\n scopePrices: strategyState.strategy.scopePrices,\n tokenInfos: globalConfig.tokenInfos,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n tickArrayLower: strategyState.strategy.tickArrayLower,\n tickArrayUpper: strategyState.strategy.tickArrayUpper,\n tokenATokenProgram: keyOrDefault(strategyState.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n };\n\n return deposit(depositArgs, depositAccounts);\n };\n\n singleSidedDepositTokenA = async (\n strategy: PublicKey | StrategyWithAddress,\n amountToDeposit: Decimal,\n owner: PublicKey,\n slippageBps: Decimal,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution,\n swapIxsBuilder?: SwapperIxBuilder,\n initialUserTokenAtaBalances?: TokensBalances,\n priceAInB?: Decimal,\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas,\n onlyDirectRoutes?: boolean\n ): Promise<InstructionsWithLookupTables> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n\n const userTokenBalances = await profiler(\n this.getInitialUserTokenBalances(\n owner,\n strategyWithAddress.strategy.tokenAMint,\n strategyWithAddress.strategy.tokenBMint,\n initialUserTokenAtaBalances\n ),\n 'A-getInitialUserTokenBalances',\n []\n );\n\n const userTokenBalancesWithoutSolBalanace = {\n a: userTokenBalances.a,\n b: userTokenBalances.b,\n };\n\n // if any of the tokens is SOL, we need to read how much SOL the user has, not how much wSOL which is what getInitialUserTokenBalances returns\n if (isSOLMint(strategyWithAddress.strategy.tokenAMint)) {\n userTokenBalances.a = userTokenBalances.a?.add(\n lamportsToNumberDecimal(new Decimal(await this._connection.getBalance(owner)), DECIMALS_SOL)\n );\n }\n\n if (isSOLMint(strategyWithAddress.strategy.tokenBMint)) {\n userTokenBalances.b = userTokenBalances.b?.add(\n lamportsToNumberDecimal(new Decimal(await this._connection.getBalance(owner)), DECIMALS_SOL)\n );\n }\n\n if (!userTokenBalances.a || !userTokenBalances.b) {\n throw Error('Error reading user token balances');\n }\n\n const tokenAMinPostDepositBalance = userTokenBalances.a?.sub(amountToDeposit);\n const swapper: SwapperIxBuilder = swapIxsBuilder\n ? swapIxsBuilder\n : (\n input: DepositAmountsForSwap,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n user: PublicKey,\n slippageBps: Decimal,\n allAccounts: PublicKey[]\n ) =>\n this.getJupSwapIxsV6(\n input,\n tokenAMint,\n tokenBMint,\n user,\n slippageBps,\n false,\n allAccounts,\n profiler,\n onlyDirectRoutes\n );\n\n console.log('single sided deposit tokenA tokenAMinPostDepositBalance', tokenAMinPostDepositBalance);\n console.log('single sided deposit tokenA userTokenBalances.b', userTokenBalances.b);\n return await profiler(\n this.getSingleSidedDepositIxs(\n strategyWithAddress,\n collToLamportsDecimal(tokenAMinPostDepositBalance, strategyWithAddress.strategy.tokenAMintDecimals.toNumber()),\n collToLamportsDecimal(userTokenBalances.b, strategyWithAddress.strategy.tokenBMintDecimals.toNumber()),\n owner,\n slippageBps,\n swapper,\n profiler,\n userTokenBalancesWithoutSolBalanace,\n priceAInB,\n includeAtaIxns\n ),\n 'A-getSingleSidedDepositIxs',\n []\n );\n };\n\n singleSidedDepositTokenB = async (\n strategy: PublicKey | StrategyWithAddress,\n amountToDeposit: Decimal,\n owner: PublicKey,\n slippageBps: Decimal,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution,\n swapIxsBuilder?: SwapperIxBuilder,\n initialUserTokenAtaBalances?: TokensBalances,\n priceAInB?: Decimal,\n includeAtaIxns: boolean = true, // if true it includes create and close wsol and token atas,\n onlyDirectRoutes?: boolean\n ): Promise<InstructionsWithLookupTables> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n\n const userTokenBalances = await profiler(\n this.getInitialUserTokenBalances(\n owner,\n strategyWithAddress.strategy.tokenAMint,\n strategyWithAddress.strategy.tokenBMint,\n initialUserTokenAtaBalances\n ),\n 'A-getInitialUserTokenBalances',\n []\n );\n\n const userTokenBalancesWithoutSolBalanace = {\n a: userTokenBalances.a,\n b: userTokenBalances.b,\n };\n\n // if any of the tokens is SOL, we need to read how much SOL the user has, not how much wSOL which is what getInitialUserTokenBalances returns\n if (isSOLMint(strategyWithAddress.strategy.tokenAMint)) {\n userTokenBalances.a = userTokenBalances.a?.add(\n lamportsToNumberDecimal(new Decimal(await this._connection.getBalance(owner)), DECIMALS_SOL)\n );\n }\n\n if (isSOLMint(strategyWithAddress.strategy.tokenBMint)) {\n userTokenBalances.b = userTokenBalances.b?.add(\n lamportsToNumberDecimal(new Decimal(await this._connection.getBalance(owner)), DECIMALS_SOL)\n );\n }\n\n if (!userTokenBalances.a || !userTokenBalances.b) {\n throw Error('Error reading user token balances');\n }\n const tokenBMinPostDepositBalance = userTokenBalances.b.sub(amountToDeposit);\n const swapper: SwapperIxBuilder = swapIxsBuilder\n ? swapIxsBuilder\n : (\n input: DepositAmountsForSwap,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n user: PublicKey,\n slippageBps: Decimal,\n allAccounts: PublicKey[]\n ) =>\n this.getJupSwapIxsV6(\n input,\n tokenAMint,\n tokenBMint,\n user,\n slippageBps,\n false,\n allAccounts,\n profiler,\n onlyDirectRoutes\n );\n\n return await profiler(\n this.getSingleSidedDepositIxs(\n strategyWithAddress,\n collToLamportsDecimal(userTokenBalances.a, strategyWithAddress.strategy.tokenAMintDecimals.toNumber()),\n collToLamportsDecimal(tokenBMinPostDepositBalance, strategyWithAddress.strategy.tokenBMintDecimals.toNumber()),\n owner,\n slippageBps,\n swapper,\n profiler,\n userTokenBalancesWithoutSolBalanace,\n priceAInB,\n includeAtaIxns\n ),\n 'A-getSingleSidedDepositIxs',\n []\n );\n };\n\n getInitialUserTokenBalances = async (\n owner: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n initialUserTokenBalances?: MaybeTokensBalances\n ): Promise<TokensBalances> => {\n let initialUserTokenABalance = new Decimal(0);\n let initialUserTokenBBalance = new Decimal(0);\n\n if (initialUserTokenBalances?.a) {\n initialUserTokenABalance = initialUserTokenBalances.a;\n } else {\n const tokenATokenProgram = await this.getAccountOwner(tokenAMint);\n const [tokenAAta] = await getAssociatedTokenAddressAndData(\n this._connection,\n tokenAMint,\n owner,\n keyOrDefault(tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n\n const ataExists = await checkIfAccountExists(this._connection, tokenAAta);\n if (!ataExists) {\n initialUserTokenABalance = new Decimal(0);\n } else {\n initialUserTokenABalance = await this.getTokenAccountBalance(tokenAAta);\n }\n }\n\n if (initialUserTokenBalances?.b) {\n initialUserTokenBBalance = initialUserTokenBalances.b;\n } else {\n const tokenBTokenProgram = await this.getAccountOwner(tokenBMint);\n const [tokenBAta] = await getAssociatedTokenAddressAndData(\n this._connection,\n tokenBMint,\n owner,\n keyOrDefault(tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n\n const ataExists = await checkIfAccountExists(this._connection, tokenBAta);\n if (!ataExists) {\n initialUserTokenBBalance = new Decimal(0);\n } else {\n initialUserTokenBBalance = await this.getTokenAccountBalance(tokenBAta);\n }\n }\n\n return { a: initialUserTokenABalance, b: initialUserTokenBBalance };\n };\n\n private getSingleSidedDepositIxs = async (\n strategy: PublicKey | StrategyWithAddress,\n tokenAMinPostDepositBalanceLamports: Decimal,\n tokenBMinPostDepositBalanceLamports: Decimal,\n owner: PublicKey,\n swapSlippageBps: Decimal,\n swapIxsBuilder: SwapperIxBuilder,\n profiler: ProfiledFunctionExecution,\n initialUserTokenAtaBalances: TokensBalances,\n priceAInB?: Decimal, // not mandatory as it will be fetched from Jupyter\n includeAtaIxns: boolean = true // if true it includes create and close wsol and token atas,\n ): Promise<InstructionsWithLookupTables> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const strategyState = strategyWithAddress.strategy;\n\n let realTokenAMinPostDepositBalanceLamports = tokenAMinPostDepositBalanceLamports;\n let realTokenBMinPostDepositBalanceLamports = tokenBMinPostDepositBalanceLamports;\n if (\n (tokenAMinPostDepositBalanceLamports.lessThan(0) && !isSOLMint(strategyState.tokenAMint)) ||\n (tokenBMinPostDepositBalanceLamports.lessThan(0) && !isSOLMint(strategyState.tokenBMint))\n ) {\n throw Error('Token A or B post deposit amount cant be lower than 0.');\n }\n\n const sharesAta = getAssociatedTokenAddress(strategyState.sharesMint, owner);\n const tokenAAta = getAssociatedTokenAddress(\n strategyState.tokenAMint,\n owner,\n true,\n keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n const tokenBAta = getAssociatedTokenAddress(\n strategyState.tokenBMint,\n owner,\n true,\n keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n\n let tokenAAtaBalance = initialUserTokenAtaBalances.a;\n let tokenBAtaBalance = initialUserTokenAtaBalances.b;\n\n let aToDeposit = collToLamportsDecimal(tokenAAtaBalance, strategyState.tokenAMintDecimals.toNumber()).sub(\n tokenAMinPostDepositBalanceLamports\n );\n let bToDeposit = collToLamportsDecimal(tokenBAtaBalance, strategyState.tokenBMintDecimals.toNumber()).sub(\n tokenBMinPostDepositBalanceLamports\n );\n\n const cleanupIxs: TransactionInstruction[] = [];\n const createWsolAtasIxns: TransactionInstruction[] = [];\n\n if (isSOLMint(strategyState.tokenAMint)) {\n // read how much SOL the user has and calculate the amount to deposit and balance based on it\n const solBalance = new Decimal(await this._connection.getBalance(owner));\n const tokenAAtaBalanceLamports = collToLamportsDecimal(\n tokenAAtaBalance,\n strategyState.tokenAMintDecimals.toNumber()\n );\n const availableSol = solBalance.add(tokenAAtaBalanceLamports);\n const solToDeposit = availableSol.sub(tokenAMinPostDepositBalanceLamports);\n\n aToDeposit = solToDeposit;\n if (!aToDeposit.eq(ZERO)) {\n if (tokenAAtaBalanceLamports.lessThan(aToDeposit)) {\n tokenAAtaBalance = lamportsToNumberDecimal(aToDeposit, DECIMALS_SOL);\n }\n }\n\n const createWSolAtaIxns = await createWsolAtaIfMissing(\n this._connection,\n new Decimal(lamportsToNumberDecimal(solToDeposit, DECIMALS_SOL)),\n owner\n );\n\n // if the wSOL ata is not created, expect to have 0 remaining after the deposit\n const wSolAtaExists = await checkIfAccountExists(this._connection, createWSolAtaIxns.ata);\n if (!wSolAtaExists) {\n realTokenAMinPostDepositBalanceLamports = new Decimal(0);\n } else {\n if (solToDeposit.greaterThanOrEqualTo(tokenAAtaBalanceLamports)) {\n realTokenAMinPostDepositBalanceLamports = ZERO;\n } else {\n realTokenAMinPostDepositBalanceLamports = tokenAAtaBalanceLamports.sub(solToDeposit);\n }\n }\n\n if (includeAtaIxns) {\n createWsolAtasIxns.push(...createWSolAtaIxns.createIxns);\n cleanupIxs.push(...createWSolAtaIxns.closeIxns);\n }\n }\n\n if (isSOLMint(strategyState.tokenBMint)) {\n const solBalance = new Decimal(await this._connection.getBalance(owner));\n const tokenBAtaBalanceLamports = collToLamportsDecimal(\n tokenBAtaBalance,\n strategyState.tokenBMintDecimals.toNumber()\n );\n const availableSol = solBalance.add(tokenBAtaBalanceLamports);\n const solToDeposit = availableSol.sub(tokenBMinPostDepositBalanceLamports);\n availableSol;\n\n bToDeposit = solToDeposit;\n\n if (!bToDeposit.eq(ZERO)) {\n if (tokenBAtaBalanceLamports.lessThan(bToDeposit)) {\n tokenBAtaBalance = lamportsToNumberDecimal(bToDeposit, DECIMALS_SOL);\n }\n }\n\n const createWSolAtaIxns = await createWsolAtaIfMissing(\n this._connection,\n new Decimal(lamportsToNumberDecimal(solToDeposit, DECIMALS_SOL)),\n owner\n );\n\n const wSolAtaExists = await checkIfAccountExists(this._connection, createWSolAtaIxns.ata);\n if (!wSolAtaExists) {\n realTokenBMinPostDepositBalanceLamports = new Decimal(0);\n } else {\n if (solToDeposit.greaterThanOrEqualTo(tokenBAtaBalanceLamports)) {\n realTokenBMinPostDepositBalanceLamports = ZERO;\n } else {\n realTokenBMinPostDepositBalanceLamports = tokenBAtaBalanceLamports.sub(solToDeposit);\n }\n }\n\n if (includeAtaIxns) {\n createWsolAtasIxns.push(...createWSolAtaIxns.createIxns);\n cleanupIxs.push(...createWSolAtaIxns.closeIxns);\n }\n }\n\n const amountsToDepositWithSwapPromise = this.calculateAmountsToBeDepositedWithSwap(\n strategyWithAddress,\n aToDeposit,\n bToDeposit,\n profiler,\n priceAInB\n );\n\n if (aToDeposit.lessThan(0) || bToDeposit.lessThan(0)) {\n throw Error(\n `Token A or B to deposit amount cannot be lower than 0; aToDeposit=${aToDeposit.toString()} bToDeposit=${bToDeposit.toString()}`\n );\n }\n\n const createAtaList: [PublicKey, PublicKey][] = [[strategyState.sharesMint, TOKEN_PROGRAM_ID]];\n if (!tokenAAtaBalance.greaterThan(0)) {\n createAtaList.push([strategyState.tokenAMint, keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID)]);\n }\n\n if (!tokenBAtaBalance.greaterThan(0)) {\n createAtaList.push([strategyState.tokenBMint, keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID)]);\n }\n\n const createAtasIxnsPromise = getAtasWithCreateIxnsIfMissing(\n this._connection,\n createAtaList.filter(([mint, _tokenProgram]) => !isSOLMint(mint)),\n owner\n );\n\n const getGlobalConfigPromise = this.getGlobalConfigState(strategyState.globalConfig);\n const [createAtasIxns, amountsToDepositWithSwap, globalConfig] = await Promise.all([\n createAtasIxnsPromise,\n amountsToDepositWithSwapPromise,\n getGlobalConfigPromise,\n ]);\n\n const checkExpectedVaultsBalancesIx = await profiler(\n this.getCheckExpectedVaultsBalancesIx(strategyWithAddress, owner, tokenAAta, tokenBAta, {\n a: tokenAAtaBalance,\n b: tokenBAtaBalance,\n }),\n 'B-getCheckExpectedVaultsBalancesIx',\n []\n );\n\n const args: SingleTokenDepositWithMinArgs = {\n tokenAMinPostDepositBalance: new BN(realTokenAMinPostDepositBalanceLamports.floor().toString()),\n tokenBMinPostDepositBalance: new BN(realTokenBMinPostDepositBalanceLamports.floor().toString()),\n };\n\n const accounts: SingleTokenDepositWithMinAccounts = {\n user: owner,\n strategy: strategyWithAddress.address,\n globalConfig: strategyState.globalConfig,\n pool: strategyState.pool,\n position: strategyState.position,\n tokenAVault: strategyState.tokenAVault,\n tokenBVault: strategyState.tokenBVault,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n tokenAAta,\n tokenBAta,\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n userSharesAta: sharesAta,\n sharesMint: strategyState.sharesMint,\n sharesMintAuthority: strategyState.sharesMintAuthority,\n scopePrices: strategyState.scopePrices,\n tokenInfos: globalConfig!.tokenInfos,\n tokenProgram: TOKEN_PROGRAM_ID,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n tickArrayLower: strategyWithAddress.strategy.tickArrayLower,\n tickArrayUpper: strategyWithAddress.strategy.tickArrayUpper,\n tokenATokenProgram: keyOrDefault(strategyWithAddress.strategy.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyWithAddress.strategy.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n };\n\n const singleSidedDepositIx = singleTokenDepositWithMin(args, accounts);\n\n let result: TransactionInstruction[] = [];\n if (includeAtaIxns) {\n result.push(...createAtasIxns, ...createWsolAtasIxns);\n }\n\n // get all unique accounts in the tx so we can use the remaining space (MAX_ACCOUNTS_PER_TRANSACTION - accounts_used) for the swap\n const extractKeys = (ixs: any[]) => ixs.flatMap((ix) => ix.keys?.map((key) => key.pubkey) || []);\n\n const allKeys = [\n ...extractKeys(result),\n ...extractKeys([checkExpectedVaultsBalancesIx]),\n ...extractKeys([singleSidedDepositIx]),\n ...extractKeys(cleanupIxs),\n ];\n\n // if we have no tokens to sell skip the jup tx\n if (\n amountsToDepositWithSwap.tokenAToSwapAmount.gte(ZERO) &&\n amountsToDepositWithSwap.tokenBToSwapAmount.gte(ZERO)\n ) {\n result = result.concat([checkExpectedVaultsBalancesIx, singleSidedDepositIx, ...cleanupIxs]);\n return { instructions: result, lookupTablesAddresses: [] };\n }\n\n const [jupSwapIxs, lookupTablesAddresses] = await profiler(\n Kamino.retryAsync(async () =>\n profiler(\n swapIxsBuilder(\n amountsToDepositWithSwap,\n strategyState.tokenAMint,\n strategyState.tokenBMint,\n owner,\n swapSlippageBps,\n allKeys\n ),\n 'B-swapIxsBuilder',\n [\n // todo: not sure if we need to include these logs\n ['tokenAMint', strategyState.tokenAMint.toString()],\n ['tokenBMint', strategyState.tokenBMint.toString()],\n ]\n )\n ),\n 'B-retryAsync',\n []\n );\n\n result = result.concat([checkExpectedVaultsBalancesIx, ...jupSwapIxs, singleSidedDepositIx, ...cleanupIxs]);\n return { instructions: result, lookupTablesAddresses };\n };\n\n static async retryAsync(fn: () => Promise<any>, retriesLeft = 5, interval = 2000): Promise<any> {\n try {\n return await fn();\n } catch (error) {\n if (retriesLeft) {\n await new Promise((resolve) => setTimeout(resolve, interval));\n return await Kamino.retryAsync(fn, retriesLeft - 1, interval);\n }\n throw error;\n }\n }\n\n /**\n * Get transaction instruction to deposit SOL into topup vault.\n * @param owner Owner (wallet, shareholder) public key\n * @param amountLamports Amount of SOL to deposit into topup vault\n * @returns transaction instruction for adding SOL to topup vault\n */\n upkeepTopupVault = (owner: PublicKey, amountLamports: Decimal): TransactionInstruction => {\n if (amountLamports.lessThanOrEqualTo(0)) {\n throw Error('Must deposit a positive amount of SOL.');\n }\n const topupVault = this.getUserTopupVault(owner);\n const ix = SystemProgram.transfer({\n fromPubkey: owner,\n toPubkey: topupVault,\n lamports: BigInt(amountLamports.floor().toString()),\n });\n return ix;\n };\n\n /**\n * Get the topup vault balance in SOL.\n * @param owner Owner (wallet, shareholder) public key\n * @returns SOL amount in topup vault\n */\n topupVaultBalance = async (owner: PublicKey): Promise<Decimal> => {\n const topupVault = this.getUserTopupVault(owner);\n return lamportsToNumberDecimal(new Decimal(await this._connection.getBalance(topupVault)), DECIMALS_SOL);\n };\n\n /**\n * Get transaction instruction to withdraw SOL from the topup vault.\n * @param owner Owner (wallet, shareholder) public key\n * @param amount Amount of SOL to withdraw from the topup vault\n * @returns transaction instruction for removing SOL from the topup vault\n */\n withdrawTopupVault = async (owner: PublicKey, amount: Decimal): Promise<TransactionInstruction> => {\n if (amount.lessThanOrEqualTo(0)) {\n throw Error('Must withdraw a positive amount of SOL.');\n }\n const topupVault = this.getUserTopupVault(owner);\n\n let solToWithdraw: Decimal;\n if (amount.eq(new Decimal(U64_MAX))) {\n solToWithdraw = new Decimal(await this._connection.getBalance(topupVault));\n } else {\n solToWithdraw = collToLamportsDecimal(amount, DECIMALS_SOL);\n }\n\n const args: WithdrawFromTopupArgs = {\n amount: new BN(solToWithdraw.toString()),\n };\n\n const accounts: WithdrawFromTopupAccounts = {\n adminAuthority: owner,\n topupVault,\n system: SystemProgram.programId,\n };\n\n const withdrawIxn = withdrawFromTopup(args, accounts);\n return withdrawIxn;\n };\n\n getJupSwapIxsWithMaxAccounts = async (\n input: DepositAmountsForSwap,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n owner: PublicKey,\n slippageBps: Decimal,\n useOnlyLegacyTransaction: boolean,\n existingAccounts: PublicKey[],\n maxAccounts: number,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution,\n onlyDirectRoutes?: boolean\n ): Promise<[TransactionInstruction[], PublicKey[]]> => {\n const jupiterQuote: SwapResponse = input.tokenAToSwapAmount.lt(ZERO)\n ? await profiler(\n JupService.getBestRouteV6(\n owner,\n input.tokenAToSwapAmount.abs(),\n tokenAMint,\n tokenBMint,\n slippageBps.toNumber(),\n useOnlyLegacyTransaction,\n maxAccounts,\n onlyDirectRoutes\n ),\n 'C-getBestRouteV6',\n []\n )\n : await profiler(\n JupService.getBestRouteV6(\n owner,\n input.tokenBToSwapAmount.abs(),\n tokenBMint,\n tokenAMint,\n slippageBps.toNumber(),\n useOnlyLegacyTransaction,\n maxAccounts,\n onlyDirectRoutes\n ),\n 'C-getBestRouteV6',\n []\n );\n\n const { txMessage, lookupTablesAddresses } = await profiler(\n JupService.deserealizeVersionedTransactions(this._connection, [jupiterQuote.swapTransaction]),\n 'C-deserealizeVersionedTransactions',\n []\n );\n\n const allJupIxs = [...removeBudgetAndAtaIxns(txMessage[0].instructions, [tokenAMint, tokenBMint])];\n\n const allJupAccounts = allJupIxs.flatMap((ix) => ix.keys?.map((key) => key.pubkey) || []);\n const allAccounts = new Set<PublicKey>([...existingAccounts, ...allJupAccounts]);\n\n const prefix = 'getSingleSidedJupRoute:';\n console.log(`${prefix} All distinct existing accounts number ${new Set<PublicKey>(existingAccounts).size}`);\n console.log(`${prefix} All distinct Jup accounts number ${new Set<PublicKey>(allJupAccounts).size}`);\n console.log(`${prefix} All accounts number ${allAccounts.size}`);\n\n if (allAccounts.size < MAX_ACCOUNTS_PER_TRANSACTION) {\n return [allJupIxs, lookupTablesAddresses];\n }\n\n // if none of the swap TXs returned by Jup have less than max allowed accounts throw error as the tx will fail because we lock too many accounts\n throw new Error('All Jupiter swap routes have too many accounts in the instructions');\n };\n\n getJupSwapIxsV6 = async (\n input: DepositAmountsForSwap,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n owner: PublicKey,\n slippageBps: Decimal,\n useOnlyLegacyTransaction: boolean,\n existingAccounts: PublicKey[],\n profiledFunctionExecution: ProfiledFunctionExecution = noopProfiledFunctionExecution,\n onlyDirectRoutes?: boolean\n ): Promise<[TransactionInstruction[], PublicKey[]]> => {\n console.log('getJupSwapIxsV6', JSON.stringify(input));\n\n let extraAccountsBuffer = 5;\n\n const currentAccounts = new Set<PublicKey>(existingAccounts).size;\n const duplicatedAccounts =\n 1 + // tokenProgram\n 1 + // systemProgram\n 1 + // tokenAMint\n 1 + // tokenBMint\n 1 + // tokenAAta\n 1; // tokenBAta\n\n while (extraAccountsBuffer < 30) {\n const maxAccounts = MAX_ACCOUNTS_PER_TRANSACTION - (currentAccounts - duplicatedAccounts) - extraAccountsBuffer;\n try {\n const result = await this.getJupSwapIxsWithMaxAccounts(\n input,\n tokenAMint,\n tokenBMint,\n owner,\n slippageBps,\n useOnlyLegacyTransaction,\n existingAccounts,\n maxAccounts,\n profiledFunctionExecution,\n onlyDirectRoutes\n );\n\n return result;\n } catch (error) {\n extraAccountsBuffer += 2;\n console.log(`getJupSwapIxs: ${error}`);\n }\n }\n\n console.log('getJupSwapIxs: Could not find a route with less than 64 total accounts');\n throw new Error(`Oops. Failed to find a route. Try again or unselect single-sided deposit.`);\n };\n\n getCheckExpectedVaultsBalancesIx = async (\n strategy: StrategyWithAddress,\n user: PublicKey,\n tokenAAta: PublicKey,\n tokenBAta: PublicKey,\n expectedTokensBalances?: MaybeTokensBalances\n ): Promise<TransactionInstruction> => {\n const { strategy: strategyState, address: _ } = strategy;\n\n let expectedABalance: Decimal;\n if (expectedTokensBalances && expectedTokensBalances.a) {\n expectedABalance = expectedTokensBalances.a;\n } else {\n expectedABalance = await this.getTokenAccountBalanceOrZero(tokenAAta);\n }\n\n let expectedBBalance: Decimal;\n if (expectedTokensBalances && expectedTokensBalances.b) {\n expectedBBalance = expectedTokensBalances.b;\n } else {\n expectedBBalance = await this.getTokenAccountBalanceOrZero(tokenBAta);\n }\n\n const expectedALamportsDecimal = collToLamportsDecimal(\n expectedABalance,\n strategyState.tokenAMintDecimals.toNumber()\n );\n const expectedBLamportsDecimal = collToLamportsDecimal(\n expectedBBalance,\n strategyState.tokenBMintDecimals.toNumber()\n );\n console.log('expectedALamportsDecimal ', expectedALamportsDecimal.toString());\n console.log('expectedBLamportsDecimal ', expectedBLamportsDecimal.toString());\n const expectedALamports = expectedALamportsDecimal.floor();\n const expectedBLamports = expectedBLamportsDecimal.floor();\n\n const args: CheckExpectedVaultsBalancesArgs = {\n tokenAAtaBalance: new BN(expectedALamports.toString()),\n tokenBAtaBalance: new BN(expectedBLamports.toString()),\n };\n\n const accounts: CheckExpectedVaultsBalancesAccounts = {\n user,\n tokenAAta,\n tokenBAta,\n };\n\n return checkExpectedVaultsBalances(args, accounts);\n };\n\n /**\n * Get transaction instruction to create a new Kamino strategy.\n * Current limitations:\n * - strategy can only be created by the owner (admin) of the global config, we will need to allow non-admins to bypass this check\n * - after the strategy is created, only the owner (admin) can update the treasury fee vault with token A/B, we need to allow non-admins to be able to do (and require) this as well\n * @param strategy public key of the new strategy to create\n * @param pool public key of the CLMM pool (either Orca or Raydium)\n * @param owner public key of the strategy owner (admin authority)\n * @param dex decentralized exchange specifier\n * @returns transaction instruction for Kamino strategy creation\n */\n createStrategy = async (\n strategy: PublicKey,\n pool: PublicKey,\n owner: PublicKey,\n dex: Dex\n ): Promise<TransactionInstruction> => {\n let tokenAMint = PublicKey.default;\n let tokenBMint = PublicKey.default;\n if (dex == 'ORCA') {\n const whirlpoolState = await Whirlpool.fetch(this._connection, pool);\n if (!whirlpoolState) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n tokenAMint = whirlpoolState.tokenMintA;\n tokenBMint = whirlpoolState.tokenMintB;\n } else if (dex == 'RAYDIUM') {\n const raydiumPoolState = await PoolState.fetch(this._connection, pool);\n if (!raydiumPoolState) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${pool.toString()}`);\n }\n tokenAMint = raydiumPoolState.tokenMint0;\n tokenBMint = raydiumPoolState.tokenMint1;\n } else if (dex == 'METEORA') {\n const meteoraPoolState = await LbPair.fetch(this._connection, pool);\n if (!meteoraPoolState) {\n throw Error(`Could not fetch Meteora pool state with pubkey ${pool.toString()}`);\n }\n tokenAMint = meteoraPoolState.tokenXMint;\n tokenBMint = meteoraPoolState.tokenYMint;\n }\n const tokenATokenProgram = await this.getAccountOwner(tokenAMint);\n const tokenBTokenProgram = await this.getAccountOwner(tokenBMint);\n\n const config = await this.getGlobalConfigState(this._globalConfig);\n if (!config) {\n throw Error(`Could not fetch globalConfig with pubkey ${this.getGlobalConfig().toString()}`);\n }\n const collateralInfos = await this.getCollateralInfo(config.tokenInfos);\n const tokenACollateralId = collateralInfos.findIndex((x) => x.mint.equals(tokenAMint));\n if (tokenACollateralId === -1) {\n throw Error(`Could not find token A (mint ${tokenAMint}) in collateral infos`);\n }\n const tokenBCollateralId = collateralInfos.findIndex((x) => x.mint.equals(tokenBMint));\n if (tokenBCollateralId === -1) {\n throw Error(`Could not find token A (mint ${tokenBMint}) in collateral infos`);\n }\n\n const programAddresses = await this.getStrategyProgramAddresses(strategy, tokenAMint, tokenBMint);\n\n const strategyArgs: InitializeStrategyArgs = {\n tokenACollateralId: new BN(tokenACollateralId),\n tokenBCollateralId: new BN(tokenBCollateralId),\n strategyType: new BN(dexToNumber(dex)),\n };\n\n const strategyAccounts: InitializeStrategyAccounts = {\n adminAuthority: owner,\n strategy,\n globalConfig: this._globalConfig,\n pool,\n tokenAMint,\n tokenBMint,\n tokenAVault: programAddresses.tokenAVault,\n tokenBVault: programAddresses.tokenBVault,\n baseVaultAuthority: programAddresses.baseVaultAuthority,\n sharesMint: programAddresses.sharesMint,\n sharesMintAuthority: programAddresses.sharesMintAuthority,\n tokenInfos: config.tokenInfos,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenATokenProgram,\n tokenBTokenProgram,\n };\n\n const ix = initializeStrategy(strategyArgs, strategyAccounts);\n ix.keys.push({ pubkey: config.scopePriceId, isSigner: false, isWritable: false });\n ix.keys.push({ pubkey: config.scopeProgramId, isSigner: false, isWritable: false });\n return ix;\n };\n\n /**\n * Get transaction instruction to close Kamino strategy, including its position if there is any\n * and strategy token accounts.\n * @param strategy public key of the strategy\n * @returns instruction to close the strategy\n */\n withdrawAllAndCloseStrategy = async (\n strategy: PublicKey | StrategyWithAddress\n ): Promise<WithdrawAllAndCloseIxns | null> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const withdrawIxns = await this.withdrawAllShares(strategyWithAddress, strategyWithAddress.strategy.adminAuthority);\n if (withdrawIxns == null) {\n return null;\n }\n const closeIxn = await this.closeStrategy(strategyWithAddress);\n return {\n withdrawIxns: [...withdrawIxns.prerequisiteIxs, withdrawIxns.withdrawIx],\n closeIxn,\n };\n };\n\n /**\n * Get transaction instruction to close Kamino strategy, including its position if there is any\n * and strategy token accounts.\n * @param strategy public key of the strategy\n * @returns instruction to close the strategy\n */\n closeStrategy = async (strategy: PublicKey | StrategyWithAddress) => {\n const { address: strategyPubkey, strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const collInfos = await this.getCollateralInfos();\n\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategyDex);\n const poolProgram = getDexProgramId(strategyState);\n let oldPositionOrBaseVaultAuthority = strategyState.baseVaultAuthority;\n let oldPositionMintOrBaseVaultAuthority = strategyState.baseVaultAuthority;\n let oldPositionTokenAccountOrBaseVaultAuthority = strategyState.baseVaultAuthority;\n let oldTickArrayLowerOrBaseVaultAuthority = strategyState.baseVaultAuthority;\n let oldTickArrayUpperOrBaseVaultAuthority = strategyState.baseVaultAuthority;\n if (!strategyState.position.equals(PublicKey.default)) {\n oldPositionOrBaseVaultAuthority = strategyState.position;\n oldPositionMintOrBaseVaultAuthority = strategyState.positionMint;\n oldPositionTokenAccountOrBaseVaultAuthority = strategyState.positionTokenAccount;\n oldTickArrayLowerOrBaseVaultAuthority = strategyState.tickArrayLower;\n oldTickArrayUpperOrBaseVaultAuthority = strategyState.tickArrayUpper;\n }\n const userTokenAAta = getAssociatedTokenAddress(\n strategyState.tokenAMint,\n strategyState.adminAuthority,\n true,\n keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID)\n );\n const userTokenBAta = getAssociatedTokenAddress(\n strategyState.tokenBMint,\n strategyState.adminAuthority,\n true,\n keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID)\n );\n const rewardMints = Array(6).fill(strategyState.pool);\n const rewardTokenPrograms = Array(6).fill(TOKEN_PROGRAM_ID);\n let reward0Vault = strategyState.baseVaultAuthority;\n let userReward0Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.reward0Vault, strategyState.reward0Decimals)) {\n reward0Vault = strategyState.reward0Vault;\n rewardMints[0] = collInfos[strategyState.reward0CollateralId.toNumber()].mint;\n rewardTokenPrograms[0] = await this.getAccountOwner(rewardMints[0]);\n userReward0Ata = getAssociatedTokenAddress(\n rewardMints[0],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[0]\n );\n }\n let reward1Vault = strategyState.baseVaultAuthority;\n let userReward1Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.reward1Vault, strategyState.reward1Decimals)) {\n reward1Vault = strategyState.reward1Vault;\n rewardMints[1] = collInfos[strategyState.reward1CollateralId.toNumber()].mint;\n rewardTokenPrograms[1] = await this.getAccountOwner(rewardMints[1]);\n userReward1Ata = getAssociatedTokenAddress(\n rewardMints[1],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[1]\n );\n }\n let reward2Vault = strategyState.baseVaultAuthority;\n let userReward2Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.reward2Vault, strategyState.reward2Decimals)) {\n reward2Vault = strategyState.reward2Vault;\n rewardMints[2] = collInfos[strategyState.reward2CollateralId.toNumber()].mint;\n rewardTokenPrograms[2] = await this.getAccountOwner(rewardMints[2]);\n userReward2Ata = getAssociatedTokenAddress(\n rewardMints[2],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[2]\n );\n }\n let kaminoReward0Vault = strategyState.baseVaultAuthority;\n const userKaminoReward0Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.kaminoRewards[0].rewardVault, strategyState.kaminoRewards[0].decimals)) {\n kaminoReward0Vault = strategyState.kaminoRewards[0].rewardVault;\n rewardMints[3] = strategyState.kaminoRewards[0].rewardVault;\n rewardTokenPrograms[3] = await this.getAccountOwner(rewardMints[3]);\n userReward0Ata = getAssociatedTokenAddress(\n rewardMints[3],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[3]\n );\n }\n let kaminoReward1Vault = strategyState.baseVaultAuthority;\n const userKaminoReward1Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.kaminoRewards[1].rewardVault, strategyState.kaminoRewards[1].decimals)) {\n kaminoReward1Vault = strategyState.kaminoRewards[1].rewardVault;\n rewardMints[4] = strategyState.kaminoRewards[1].rewardVault;\n rewardTokenPrograms[4] = await this.getAccountOwner(rewardMints[4]);\n userReward1Ata = getAssociatedTokenAddress(\n rewardMints[4],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[4]\n );\n }\n let kaminoReward2Vault = strategyState.baseVaultAuthority;\n const userKaminoReward2Ata = strategyState.baseVaultAuthority;\n if (isVaultInitialized(strategyState.kaminoRewards[2].rewardVault, strategyState.kaminoRewards[2].decimals)) {\n kaminoReward2Vault = strategyState.kaminoRewards[2].rewardVault;\n rewardMints[5] = strategyState.kaminoRewards[2].rewardVault;\n rewardTokenPrograms[5] = await this.getAccountOwner(rewardMints[5]);\n userReward2Ata = getAssociatedTokenAddress(\n rewardMints[5],\n strategyState.adminAuthority,\n true,\n rewardTokenPrograms[5]\n );\n }\n\n const strategyAccounts: CloseStrategyAccounts = {\n adminAuthority: strategyState.adminAuthority,\n strategy: strategyPubkey,\n oldPositionOrBaseVaultAuthority,\n oldPositionMintOrBaseVaultAuthority,\n oldPositionTokenAccountOrBaseVaultAuthority,\n tokenAVault: strategyState.tokenAVault,\n tokenBVault: strategyState.tokenBVault,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n system: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n poolProgram: poolProgram,\n userTokenAAta,\n userTokenBAta,\n reward0Vault,\n reward1Vault,\n reward2Vault,\n kaminoReward0Vault,\n kaminoReward1Vault,\n kaminoReward2Vault,\n userReward0Ata,\n userReward1Ata,\n userReward2Ata,\n userKaminoReward0Ata,\n userKaminoReward1Ata,\n userKaminoReward2Ata,\n oldTickArrayLowerOrBaseVaultAuthority,\n oldTickArrayUpperOrBaseVaultAuthority,\n pool: strategyState.pool,\n eventAuthority,\n tokenATokenProgram: keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n };\n\n const ix = closeStrategy(strategyAccounts);\n\n for (let i = 0; i < 6; i++) {\n ix.keys.push({ pubkey: rewardMints[i], isSigner: false, isWritable: false });\n ix.keys.push({ pubkey: rewardTokenPrograms[i], isSigner: false, isWritable: false });\n }\n\n return ix;\n };\n\n getUserTopupVault = (user: PublicKey): PublicKey => {\n const [topupVault, _topupVaultBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('topup_vault'), user.toBuffer()],\n this.getProgramID()\n );\n return topupVault;\n };\n\n /**\n * Find program adresses required for kamino strategy creation\n * @param strategy\n * @param tokenMintA\n * @param tokenMintB\n * @private\n * @returns object with program addresses for kamino strategy creation\n */\n private getStrategyProgramAddresses = async (\n strategy: PublicKey,\n tokenMintA: PublicKey,\n tokenMintB: PublicKey\n ): Promise<StrategyProgramAddress> => {\n const [tokenAVault, tokenABump] = PublicKey.findProgramAddressSync(\n [Buffer.from('svault_a'), strategy.toBuffer()],\n this.getProgramID()\n );\n const [tokenBVault, tokenBBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('svault_b'), strategy.toBuffer()],\n this.getProgramID()\n );\n const [baseVaultAuthority, baseVaultAuthorityBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('authority'), tokenAVault.toBuffer(), tokenBVault.toBuffer()],\n this.getProgramID()\n );\n const [sharesMint, sharesMintBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('shares'), strategy.toBuffer(), tokenMintA.toBuffer(), tokenMintB.toBuffer()],\n this.getProgramID()\n );\n const [sharesMintAuthority, sharesMintAuthorityBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('authority'), sharesMint.toBuffer()],\n this.getProgramID()\n );\n\n return {\n sharesMintAuthority,\n tokenAVault,\n tokenBVault,\n baseVaultAuthority,\n baseVaultAuthorityBump,\n sharesMintAuthorityBump,\n sharesMintBump,\n tokenBBump,\n sharesMint,\n tokenABump,\n };\n };\n\n /**\n * Get transaction instruction to create a new rent exempt strategy account\n * @param payer transaction payer (signer) public key\n * @param newStrategy public key of the new strategy\n * @returns transaction instruction to create the account\n */\n createStrategyAccount = async (payer: PublicKey, newStrategy: PublicKey): Promise<TransactionInstruction> => {\n const accountSize = this._kaminoProgram.account.whirlpoolStrategy.size;\n return this.createAccountRentExempt(payer, newStrategy, accountSize);\n };\n\n createAccountRentExempt = async (\n payer: PublicKey,\n newAccountPubkey: PublicKey,\n size: number\n ): Promise<TransactionInstruction> => {\n const lamports = await this._connection.getMinimumBalanceForRentExemption(size);\n return SystemProgram.createAccount({\n programId: this.getProgramID(),\n fromPubkey: payer,\n newAccountPubkey,\n space: size,\n lamports,\n });\n };\n\n /**\n * Get transaction instruction to collect strategy fees from the treasury fee\n * vaults and rewards from the reward vaults.\n * @param strategy strategy public key or already fetched object\n * @param owner signer of the tx\n * @returns transaction instruction to collect strategy fees and rewards\n */\n collectFeesAndRewards = async (\n strategy: PublicKey | StrategyWithAddress,\n owner?: PublicKey\n ): Promise<TransactionInstruction> => {\n const { address: strategyPubkey, strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategyDex);\n const { treasuryFeeTokenAVault, treasuryFeeTokenBVault, treasuryFeeVaultAuthority } = this.getTreasuryFeeVaultPDAs(\n strategyState.tokenAMint,\n strategyState.tokenBMint\n );\n\n let programId = WHIRLPOOL_PROGRAM_ID;\n\n let poolRewardVault0 = PublicKey.default;\n let poolRewardVault1 = PublicKey.default;\n let poolRewardVault2 = PublicKey.default;\n let rewardMint0 = PublicKey.default;\n let rewardMint1 = PublicKey.default;\n let rewardMint2 = PublicKey.default;\n if (strategyState.strategyDex.toNumber() == dexToNumber('ORCA')) {\n const whirlpool = await Whirlpool.fetch(this._connection, strategyState.pool);\n if (!whirlpool) {\n throw Error(`Could not fetch whirlpool state with pubkey ${strategyState.pool.toString()}`);\n }\n\n poolRewardVault0 = whirlpool.rewardInfos[0].vault;\n poolRewardVault1 = whirlpool.rewardInfos[1].vault;\n poolRewardVault2 = whirlpool.rewardInfos[2].vault;\n rewardMint0 = whirlpool.rewardInfos[0].mint;\n rewardMint1 = whirlpool.rewardInfos[1].mint;\n rewardMint2 = whirlpool.rewardInfos[2].mint;\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n programId = RAYDIUM_PROGRAM_ID;\n\n const poolState = await PoolState.fetch(this._connection, strategyState.pool);\n if (!poolState) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${strategyState.pool.toString()}`);\n }\n poolRewardVault0 = poolState.rewardInfos[0].tokenVault;\n poolRewardVault1 = poolState.rewardInfos[1].tokenVault;\n poolRewardVault2 = poolState.rewardInfos[2].tokenVault;\n rewardMint0 = poolState.rewardInfos[0].tokenMint;\n rewardMint1 = poolState.rewardInfos[1].tokenMint;\n rewardMint2 = poolState.rewardInfos[2].tokenMint;\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('METEORA')) {\n programId = METEORA_PROGRAM_ID;\n\n const poolState = await LbPair.fetch(this._connection, strategyState.pool);\n if (!poolState) {\n throw Error(`Could not fetch Meteora pool state with pubkey ${strategyState.pool.toString()}`);\n }\n poolRewardVault0 = poolState.rewardInfos[0].vault;\n poolRewardVault1 = poolState.rewardInfos[1].vault;\n poolRewardVault2 = strategyPubkey;\n rewardMint0 = poolState.rewardInfos[0].mint;\n rewardMint1 = poolState.rewardInfos[1].mint;\n rewardMint2 = this._kaminoProgramId;\n }\n\n const accounts: CollectFeesAndRewardsAccounts = {\n user: owner || strategyState.adminAuthority,\n strategy: strategyPubkey,\n globalConfig: strategyState.globalConfig,\n pool: strategyState.pool,\n position: strategyState.position,\n positionTokenAccount: strategyState.positionTokenAccount,\n treasuryFeeTokenAVault,\n treasuryFeeTokenBVault,\n treasuryFeeVaultAuthority,\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n tokenAVault: strategyState.tokenAVault,\n tokenBVault: strategyState.tokenBVault,\n poolTokenVaultA: strategyState.poolTokenVaultA,\n poolTokenVaultB: strategyState.poolTokenVaultB,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n reward0Vault: strategyState.reward0Vault,\n reward1Vault: strategyState.reward1Vault,\n reward2Vault: strategyState.baseVaultAuthority,\n poolRewardVault0:\n strategyState.reward0Decimals.toNumber() > 0 ? poolRewardVault0 : strategyState.baseVaultAuthority,\n poolRewardVault1:\n strategyState.reward1Decimals.toNumber() > 0 ? poolRewardVault1 : strategyState.baseVaultAuthority,\n poolRewardVault2:\n strategyState.reward2Decimals.toNumber() > 0 ? poolRewardVault2 : strategyState.baseVaultAuthority,\n tickArrayLower: strategyState.tickArrayLower,\n tickArrayUpper: strategyState.tickArrayUpper,\n raydiumProtocolPositionOrBaseVaultAuthority: strategyState.raydiumProtocolPositionOrBaseVaultAuthority,\n poolProgram: programId,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n eventAuthority,\n tokenATokenProgram: keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n };\n\n const ixn = collectFeesAndRewards(accounts);\n const pairs: [number, PublicKey][] = [\n [strategyState.reward0Decimals.toNumber(), rewardMint0],\n [strategyState.reward1Decimals.toNumber(), rewardMint1],\n [strategyState.reward2Decimals.toNumber(), rewardMint2],\n ];\n for (const [decimals, mint] of pairs) {\n if (decimals > 0) {\n ixn.keys.push({ pubkey: mint, isSigner: false, isWritable: false });\n const tokenProgram = await this.getAccountOwner(mint);\n ixn.keys.push({ pubkey: tokenProgram, isSigner: false, isWritable: false });\n }\n }\n return ixn;\n };\n\n /**\n * Get orca position metadata program addresses\n * @param positionMint mint account of the position\n */\n getMetadataProgramAddressesOrca = (positionMint: PublicKey): MetadataProgramAddressesOrca => {\n const [position, positionBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('position'), positionMint.toBuffer()],\n WHIRLPOOL_PROGRAM_ID\n );\n\n const [positionMetadata, positionMetadataBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('metadata'), METADATA_PROGRAM_ID.toBuffer(), positionMint.toBuffer()],\n METADATA_PROGRAM_ID\n );\n\n return {\n position,\n positionBump,\n positionMetadata,\n positionMetadataBump,\n };\n };\n\n getMetadataProgramAddressesRaydium = (\n positionMint: PublicKey,\n pool: PublicKey,\n tickLowerIndex: number,\n tickUpperIndex: number\n ): MetadataProgramAddressesRaydium => {\n const { publicKey: protocolPosition, nonce: protocolPositionBump } = getPdaProtocolPositionAddress(\n RAYDIUM_PROGRAM_ID,\n pool,\n tickLowerIndex,\n tickUpperIndex\n );\n\n const [position, positionBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('position'), positionMint.toBuffer()],\n RAYDIUM_PROGRAM_ID\n );\n\n const [positionMetadata, positionMetadataBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('metadata'), METADATA_PROGRAM_ID.toBuffer(), positionMint.toBuffer()],\n METADATA_PROGRAM_ID\n );\n\n return {\n position,\n positionBump,\n protocolPosition,\n protocolPositionBump,\n positionMetadata,\n positionMetadataBump,\n };\n };\n\n private getStartEndTicketIndexProgramAddressesOrca = (\n whirlpool: PublicKey,\n whirlpoolState: Whirlpool,\n tickLowerIndex: number,\n tickUpperIndex: number\n ): LowerAndUpperTickPubkeys => {\n const startTickIndex = getStartTickIndex(tickLowerIndex, whirlpoolState.tickSpacing, 0);\n const endTickIndex = getStartTickIndex(tickUpperIndex, whirlpoolState.tickSpacing, 0);\n\n const [lowerTickPubkey, lowerTickBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('tick_array'), whirlpool.toBuffer(), Buffer.from(startTickIndex.toString())],\n WHIRLPOOL_PROGRAM_ID\n );\n const [upperTickPubkey, upperTickBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('tick_array'), whirlpool.toBuffer(), Buffer.from(endTickIndex.toString())],\n WHIRLPOOL_PROGRAM_ID\n );\n return {\n lowerTick: lowerTickPubkey,\n lowerTickBump,\n upperTick: upperTickPubkey,\n upperTickBump,\n };\n };\n\n private getStartEndTicketIndexProgramAddressesRaydium = (\n pool: PublicKey,\n poolState: PoolState,\n tickLowerIndex: number,\n tickUpperIndex: number\n ): LowerAndUpperTickPubkeys => {\n const startTickIndex = TickUtils.getTickArrayStartIndexByTick(tickLowerIndex, poolState.tickSpacing);\n const endTickIndex = TickUtils.getTickArrayStartIndexByTick(tickUpperIndex, poolState.tickSpacing);\n\n const [lowerTickPubkey, lowerTickBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('tick_array'), pool.toBuffer(), i32ToBytes(startTickIndex)],\n RAYDIUM_PROGRAM_ID\n );\n const [upperTickPubkey, upperTickBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('tick_array'), pool.toBuffer(), i32ToBytes(endTickIndex)],\n RAYDIUM_PROGRAM_ID\n );\n return {\n lowerTick: lowerTickPubkey,\n lowerTickBump,\n upperTick: upperTickPubkey,\n upperTickBump,\n };\n };\n\n private readMeteoraPosition = async (poolPk: PublicKey, positionPk: PublicKey): Promise<MeteoraPosition> => {\n const pool = await LbPair.fetch(this._connection, poolPk);\n const position = await PositionV2.fetch(this._connection, positionPk);\n if (!pool || !position) {\n return {\n publicKey: positionPk,\n amountX: new Decimal(0),\n amountY: new Decimal(0),\n };\n }\n\n const { lowerTick: lowerTickPk, upperTick: upperTickPk } = this.getStartEndTicketIndexProgramAddressesMeteora(\n poolPk,\n position.lowerBinId\n );\n const lowerBinArray = await BinArray.fetch(this._connection, lowerTickPk);\n const upperBinArray = await BinArray.fetch(this._connection, upperTickPk);\n if (!lowerBinArray || !upperBinArray) {\n return {\n publicKey: positionPk,\n amountX: new Decimal(0),\n amountY: new Decimal(0),\n };\n }\n const binArrays = [lowerBinArray, upperBinArray];\n let totalAmountX = new Decimal(0);\n let totalAmountY = new Decimal(0);\n for (let idx = position.lowerBinId; idx <= position.upperBinId; idx++) {\n const bin = getBinFromBinArrays(idx, binArrays);\n if (bin) {\n const binX = new Decimal(bin.amountX.toString());\n const binY = new Decimal(bin.amountY.toString());\n const binLiq = new Decimal(bin.liquiditySupply.toString());\n if (!binX.isNaN() && !binY.isNaN() && !binLiq.isNaN() && binLiq.gt(ZERO)) {\n const positionLiqNumber = position.liquidityShares[idx - position.lowerBinId];\n if (positionLiqNumber && !positionLiqNumber.isZero()) {\n const positionLiq = new Decimal(positionLiqNumber.toString());\n totalAmountX = totalAmountX.add(binX.mul(positionLiq).div(binLiq));\n totalAmountY = totalAmountY.add(binY.mul(positionLiq).div(binLiq));\n }\n }\n }\n }\n\n return {\n publicKey: positionPk,\n amountX: totalAmountX,\n amountY: totalAmountY,\n };\n };\n\n private getStartEndTicketIndexProgramAddressesMeteora = (\n pool: PublicKey,\n tickLowerIndex: number\n ): LowerAndUpperTickPubkeys => {\n const meteoraProgramId = METEORA_PROGRAM_ID;\n\n const lowerBinArrayIndex = binIdToBinArrayIndex(new BN(tickLowerIndex));\n const [lowerTick, lowerTickBump] = deriveBinArray(pool, lowerBinArrayIndex, meteoraProgramId);\n\n const upperBinArrayIndex = lowerBinArrayIndex.add(new BN(1));\n\n const [upperTick, upperTickBump] = deriveBinArray(pool, upperBinArrayIndex, meteoraProgramId);\n\n return {\n lowerTick,\n lowerTickBump,\n upperTick,\n upperTickBump,\n };\n };\n /**\n * Get a transaction to open liquidity position for a Kamino strategy\n * @param strategy strategy you want to open liquidity position for\n * @param positionMint position mint pubkey\n * @param priceLower new position's lower price of the range\n * @param priceUpper new position's upper price of the range\n * @param status strategy status\n */\n openPosition = async (\n strategy: PublicKey | StrategyWithAddress,\n positionMint: PublicKey,\n priceLower: Decimal,\n priceUpper: Decimal,\n status: StrategyStatusKind = new Uninitialized()\n ): Promise<TransactionInstruction> => {\n const { strategy: strategyState, address: strategyAddress } = await this.getStrategyStateIfNotFetched(strategy);\n if (!strategyState) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategyDex);\n\n if (strategyState.strategyDex.toNumber() == dexToNumber('ORCA')) {\n return this.openPositionOrca(\n strategyState.adminAuthority,\n strategyAddress,\n strategyState.baseVaultAuthority,\n strategyState.pool,\n positionMint,\n priceLower,\n priceUpper,\n strategyState.tokenAVault,\n strategyState.tokenBVault,\n strategyState.tokenAMint,\n strategyState.tokenBMint,\n strategyState.tokenATokenProgram,\n strategyState.tokenBTokenProgram,\n strategyState.position,\n strategyState.positionMint,\n strategyState.positionTokenAccount,\n strategyState.tickArrayLower,\n strategyState.tickArrayUpper,\n eventAuthority,\n status\n );\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n let reward0Vault: PublicKey | undefined = undefined;\n let reward1Vault: PublicKey | undefined = undefined;\n let reward2Vault: PublicKey | undefined = undefined;\n if (strategyState.reward0Decimals.toNumber() > 0) {\n reward0Vault = strategyState.reward0Vault;\n }\n if (strategyState.reward1Decimals.toNumber() > 0) {\n reward1Vault = strategyState.reward1Vault;\n }\n if (strategyState.reward2Decimals.toNumber() > 0) {\n reward2Vault = strategyState.reward2Vault;\n }\n\n return this.openPositionRaydium(\n strategyState.adminAuthority,\n strategyAddress,\n strategyState.baseVaultAuthority,\n strategyState.pool,\n positionMint,\n priceLower,\n priceUpper,\n strategyState.tokenAVault,\n strategyState.tokenBVault,\n strategyState.tokenAMint,\n strategyState.tokenBMint,\n strategyState.tokenATokenProgram,\n strategyState.tokenBTokenProgram,\n strategyState.tickArrayLower,\n strategyState.tickArrayUpper,\n strategyState.position,\n strategyState.positionMint,\n strategyState.positionTokenAccount,\n strategyState.raydiumProtocolPositionOrBaseVaultAuthority,\n eventAuthority,\n status,\n reward0Vault,\n reward1Vault,\n reward2Vault\n );\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('METEORA')) {\n return this.openPositionMeteora(\n strategyState.adminAuthority,\n strategyAddress,\n strategyState.baseVaultAuthority,\n strategyState.pool,\n positionMint,\n priceLower,\n priceUpper,\n strategyState.tokenAVault,\n strategyState.tokenBVault,\n strategyState.tokenAMint,\n strategyState.tokenBMint,\n strategyState.tokenATokenProgram,\n strategyState.tokenBTokenProgram,\n strategyState.position,\n strategyState.positionMint,\n strategyState.positionTokenAccount,\n strategyState.tickArrayLower,\n strategyState.tickArrayUpper,\n eventAuthority,\n status\n );\n } else {\n throw new Error(`Invalid dex ${strategyState.strategyDex.toString()}`);\n }\n };\n\n /**\n * Get a transaction to open liquidity position for a Kamino strategy\n * @param strategy strategy you want to open liquidity position for\n * @param positionMint new liquidity position account pubkey\n * @param priceLower new position's lower price of the range\n * @param priceUpper new position's upper price of the range\n * @param status strategy status\n */\n openPositionOrca = async (\n adminAuthority: PublicKey,\n strategy: PublicKey,\n baseVaultAuthority: PublicKey,\n pool: PublicKey,\n positionMint: PublicKey,\n priceLower: Decimal,\n priceUpper: Decimal,\n tokenAVault: PublicKey,\n tokenBVault: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tokenATokenProgram: PublicKey,\n tokenBTokenProgram: PublicKey,\n oldPositionOrBaseVaultAuthority: PublicKey,\n oldPositionMintOrBaseVaultAuthority: PublicKey,\n oldPositionTokenAccountOrBaseVaultAuthority: PublicKey,\n oldTickArrayLowerOrBaseVaultAuthority: PublicKey,\n oldTickArrayUpperOrBaseVaultAuthority: PublicKey,\n eventAuthority: PublicKey,\n status: StrategyStatusKind = new Uninitialized()\n ): Promise<TransactionInstruction> => {\n const whirlpool = await Whirlpool.fetch(this._connection, pool);\n if (!whirlpool) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n\n const isRebalancing = status.discriminator === Rebalancing.discriminator;\n const decimalsA = await getMintDecimals(this._connection, whirlpool.tokenMintA);\n const decimalsB = await getMintDecimals(this._connection, whirlpool.tokenMintB);\n\n const tickLowerIndex = getNextValidTickIndex(\n priceToTickIndex(priceLower, decimalsA, decimalsB),\n whirlpool.tickSpacing\n );\n const tickUpperIndex = getNextValidTickIndex(\n priceToTickIndex(priceUpper, decimalsA, decimalsB),\n whirlpool.tickSpacing\n );\n\n const { position, positionBump, positionMetadata } = this.getMetadataProgramAddressesOrca(positionMint);\n\n const positionTokenAccount = getAssociatedTokenAddress(positionMint, baseVaultAuthority);\n\n const args: OpenLiquidityPositionArgs = {\n tickLowerIndex: new BN(tickLowerIndex),\n tickUpperIndex: new BN(tickUpperIndex),\n bump: positionBump,\n };\n\n const { lowerTick: startTickIndex, upperTick: endTickIndex } = this.getStartEndTicketIndexProgramAddressesOrca(\n pool,\n whirlpool,\n tickLowerIndex,\n tickUpperIndex\n );\n\n const globalConfig = await this.getGlobalConfigState(this._globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${this._globalConfig.toString()}`);\n }\n\n const accounts: OpenLiquidityPositionAccounts = {\n adminAuthority: adminAuthority,\n strategy,\n pool: pool,\n tickArrayLower: startTickIndex,\n tickArrayUpper: endTickIndex,\n baseVaultAuthority: baseVaultAuthority,\n position,\n positionMint,\n positionMetadataAccount: positionMetadata,\n positionTokenAccount,\n rent: SYSVAR_RENT_PUBKEY,\n system: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n poolProgram: WHIRLPOOL_PROGRAM_ID,\n oldPositionOrBaseVaultAuthority: isRebalancing ? oldPositionOrBaseVaultAuthority : baseVaultAuthority,\n oldPositionMintOrBaseVaultAuthority: isRebalancing ? oldPositionMintOrBaseVaultAuthority : positionMint,\n oldPositionTokenAccountOrBaseVaultAuthority: isRebalancing\n ? oldPositionTokenAccountOrBaseVaultAuthority\n : positionTokenAccount,\n globalConfig: this._globalConfig,\n oldTickArrayLowerOrBaseVaultAuthority: isRebalancing ? oldTickArrayLowerOrBaseVaultAuthority : baseVaultAuthority,\n oldTickArrayUpperOrBaseVaultAuthority: isRebalancing ? oldTickArrayUpperOrBaseVaultAuthority : baseVaultAuthority,\n tokenAVault,\n tokenBVault,\n poolTokenVaultA: whirlpool.tokenVaultA,\n poolTokenVaultB: whirlpool.tokenVaultB,\n scopePrices: globalConfig.scopePriceId,\n tokenInfos: globalConfig.tokenInfos,\n tokenAMint,\n tokenBMint,\n eventAuthority,\n consensusAccount: CONSENSUS_ID,\n tokenATokenProgram: keyOrDefault(tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n };\n\n const ixn = openLiquidityPosition(args, accounts);\n const accountIndex = ixn.keys.findIndex((accs) => accs.pubkey.equals(positionMint));\n ixn.keys[accountIndex].isSigner = true;\n return ixn;\n };\n\n /**\n * Get a transaction to open liquidity position for a Kamino strategy\n * @param strategy strategy you want to open liquidity position for\n * @param positionMint new liquidity position account pubkey\n * @param priceLower new position's lower price of the range\n * @param priceUpper new position's upper price of the range\n * @param status strategy status\n */\n openPositionRaydium = async (\n adminAuthority: PublicKey,\n strategy: PublicKey,\n baseVaultAuthority: PublicKey,\n pool: PublicKey,\n positionMint: PublicKey,\n priceLower: Decimal,\n priceUpper: Decimal,\n tokenAVault: PublicKey,\n tokenBVault: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tokenATokenProgram: PublicKey,\n tokenBTokenProgram: PublicKey,\n oldTickArrayLowerOrBaseVaultAuthority: PublicKey,\n oldTickArrayUpperOrBaseVaultAuthority: PublicKey,\n oldPositionOrBaseVaultAuthority: PublicKey,\n oldPositionMintOrBaseVaultAuthority: PublicKey,\n oldPositionTokenAccountOrBaseVaultAuthority: PublicKey,\n oldProtocolPositionOrBaseVaultAuthority: PublicKey,\n eventAuthority: PublicKey,\n status: StrategyStatusKind = new Uninitialized(),\n strategyRewardOVault?: PublicKey,\n strategyReward1Vault?: PublicKey,\n strategyReward2Vault?: PublicKey\n ): Promise<TransactionInstruction> => {\n const poolState = await PoolState.fetch(this._connection, pool);\n if (!poolState) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${pool.toString()}`);\n }\n\n const isRebalancing = status.discriminator === Rebalancing.discriminator;\n\n const decimalsA = await getMintDecimals(this._connection, poolState.tokenMint0);\n const decimalsB = await getMintDecimals(this._connection, poolState.tokenMint1);\n\n const tickLowerIndex = TickMath.getTickWithPriceAndTickspacing(\n TickMath.roundPriceWithTickspacing(priceLower, poolState.tickSpacing, decimalsA, decimalsB),\n poolState.tickSpacing,\n decimalsA,\n decimalsB\n );\n\n const tickUpperIndex = TickMath.getTickWithPriceAndTickspacing(\n TickMath.roundPriceWithTickspacing(priceUpper, poolState.tickSpacing, decimalsA, decimalsB),\n poolState.tickSpacing,\n decimalsA,\n decimalsB\n );\n\n const { position, positionBump, protocolPosition, positionMetadata } = this.getMetadataProgramAddressesRaydium(\n positionMint,\n pool,\n tickLowerIndex,\n tickUpperIndex\n );\n\n const positionTokenAccount = getAssociatedTokenAddress(positionMint, baseVaultAuthority);\n\n const args: OpenLiquidityPositionArgs = {\n tickLowerIndex: new BN(tickLowerIndex),\n tickUpperIndex: new BN(tickUpperIndex),\n bump: positionBump,\n };\n\n const { lowerTick: startTickIndex, upperTick: endTickIndex } = this.getStartEndTicketIndexProgramAddressesRaydium(\n pool,\n poolState,\n tickLowerIndex,\n tickUpperIndex\n );\n\n const globalConfig = await this.getGlobalConfigState(this._globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${this._globalConfig.toString()}`);\n }\n const accounts: OpenLiquidityPositionAccounts = {\n adminAuthority: adminAuthority,\n strategy,\n pool: pool,\n tickArrayLower: startTickIndex,\n tickArrayUpper: endTickIndex,\n baseVaultAuthority: baseVaultAuthority,\n position,\n positionMint,\n positionMetadataAccount: positionMetadata,\n positionTokenAccount,\n rent: SYSVAR_RENT_PUBKEY,\n system: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n poolProgram: RAYDIUM_PROGRAM_ID,\n oldPositionOrBaseVaultAuthority: isRebalancing ? oldPositionOrBaseVaultAuthority : baseVaultAuthority,\n oldPositionMintOrBaseVaultAuthority: isRebalancing ? oldPositionMintOrBaseVaultAuthority : positionMint,\n oldPositionTokenAccountOrBaseVaultAuthority: isRebalancing\n ? oldPositionTokenAccountOrBaseVaultAuthority\n : positionTokenAccount,\n globalConfig: this._globalConfig,\n oldTickArrayLowerOrBaseVaultAuthority: isRebalancing ? oldTickArrayLowerOrBaseVaultAuthority : baseVaultAuthority,\n oldTickArrayUpperOrBaseVaultAuthority: isRebalancing ? oldTickArrayUpperOrBaseVaultAuthority : baseVaultAuthority,\n tokenAVault: tokenAVault,\n tokenBVault: tokenBVault,\n poolTokenVaultA: poolState.tokenVault0,\n poolTokenVaultB: poolState.tokenVault1,\n scopePrices: globalConfig.scopePriceId,\n tokenInfos: globalConfig.tokenInfos,\n tokenAMint,\n tokenBMint,\n eventAuthority,\n consensusAccount: CONSENSUS_ID,\n tokenATokenProgram: keyOrDefault(tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n };\n const [poolTickArrayBitmap, _poolTickArrayBitmapBump] = PublicKey.findProgramAddressSync(\n [Buffer.from('pool_tick_array_bitmap_extension'), pool.toBuffer()],\n RAYDIUM_PROGRAM_ID\n );\n\n const ix = openLiquidityPosition(args, accounts);\n\n ix.keys = ix.keys.concat([\n { pubkey: protocolPosition, isSigner: false, isWritable: true },\n { pubkey: oldProtocolPositionOrBaseVaultAuthority, isSigner: false, isWritable: true },\n { pubkey: METADATA_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: poolTickArrayBitmap, isSigner: false, isWritable: true },\n ]);\n if (strategyRewardOVault) {\n ix.keys = ix.keys.concat([\n { pubkey: poolState.rewardInfos[0].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyRewardOVault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[0].tokenMint, isSigner: false, isWritable: false },\n ]);\n }\n if (strategyReward1Vault) {\n ix.keys = ix.keys.concat([\n { pubkey: poolState.rewardInfos[1].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyReward1Vault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[1].tokenMint, isSigner: false, isWritable: false },\n ]);\n }\n if (strategyReward2Vault) {\n ix.keys = ix.keys.concat([\n { pubkey: poolState.rewardInfos[2].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyReward2Vault, isSigner: false, isWritable: true },\n { pubkey: poolState.rewardInfos[2].tokenMint, isSigner: false, isWritable: false },\n ]);\n }\n const accountIndex = ix.keys.findIndex((accs) => accs.pubkey.equals(positionMint));\n ix.keys[accountIndex].isSigner = true;\n return ix;\n };\n\n /**\n * Get a transaction to open liquidity position for a Kamino strategy\n * @param strategy strategy you want to open liquidity position for\n * @param positionMint new liquidity position account pubkey\n * @param priceLower new position's lower price of the range\n * @param priceUpper new position's upper price of the range\n * @param status strategy status\n */\n openPositionMeteora = async (\n adminAuthority: PublicKey,\n strategy: PublicKey,\n baseVaultAuthority: PublicKey,\n pool: PublicKey,\n position: PublicKey,\n priceLower: Decimal,\n priceUpper: Decimal,\n tokenAVault: PublicKey,\n tokenBVault: PublicKey,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tokenATokenProgram: PublicKey,\n tokenBTokenProgram: PublicKey,\n oldPositionOrBaseVaultAuthority: PublicKey,\n oldPositionMintOrBaseVaultAuthority: PublicKey,\n oldPositionTokenAccountOrBaseVaultAuthority: PublicKey,\n oldTickArrayLowerOrBaseVaultAuthority: PublicKey,\n oldTickArrayUpperOrBaseVaultAuthority: PublicKey,\n eventAuthority: PublicKey,\n status: StrategyStatusKind = new Uninitialized()\n ): Promise<TransactionInstruction> => {\n const lbPair = await LbPair.fetch(this._connection, pool);\n if (!lbPair) {\n throw Error(`Could not fetch meteora lbpair state with pubkey ${pool.toString()}`);\n }\n\n const isRebalancing = status.discriminator === Rebalancing.discriminator;\n const decimalsA = await getMintDecimals(this._connection, lbPair.tokenXMint);\n const decimalsB = await getMintDecimals(this._connection, lbPair.tokenYMint);\n\n const tickLowerIndex = getBinIdFromPriceWithDecimals(priceLower, lbPair.binStep, true, decimalsA, decimalsB);\n const tickUpperIndex = getBinIdFromPriceWithDecimals(priceUpper, lbPair.binStep, true, decimalsA, decimalsB);\n\n const { position: positionMint, positionBump, positionMetadata } = this.getMetadataProgramAddressesOrca(position);\n\n const positionTokenAccount = getAssociatedTokenAddress(position, baseVaultAuthority);\n\n const args: OpenLiquidityPositionArgs = {\n tickLowerIndex: new BN(tickLowerIndex),\n tickUpperIndex: new BN(tickUpperIndex),\n bump: positionBump,\n };\n\n const { lowerTick: startTickIndex, upperTick: endTickIndex } = this.getStartEndTicketIndexProgramAddressesMeteora(\n pool,\n tickLowerIndex\n );\n\n const globalConfig = await this.getGlobalConfigState(this._globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${this._globalConfig.toString()}`);\n }\n\n const accounts: OpenLiquidityPositionAccounts = {\n adminAuthority: adminAuthority,\n strategy,\n pool: pool,\n tickArrayLower: startTickIndex,\n tickArrayUpper: endTickIndex,\n baseVaultAuthority: baseVaultAuthority,\n position,\n positionMint,\n positionMetadataAccount: positionMetadata,\n positionTokenAccount,\n rent: SYSVAR_RENT_PUBKEY,\n system: SystemProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,\n poolProgram: WHIRLPOOL_PROGRAM_ID,\n oldPositionOrBaseVaultAuthority: isRebalancing ? oldPositionOrBaseVaultAuthority : baseVaultAuthority,\n oldPositionMintOrBaseVaultAuthority: isRebalancing ? oldPositionMintOrBaseVaultAuthority : positionMint,\n oldPositionTokenAccountOrBaseVaultAuthority: isRebalancing\n ? oldPositionTokenAccountOrBaseVaultAuthority\n : positionTokenAccount,\n globalConfig: this._globalConfig,\n oldTickArrayLowerOrBaseVaultAuthority: isRebalancing ? oldTickArrayLowerOrBaseVaultAuthority : baseVaultAuthority,\n oldTickArrayUpperOrBaseVaultAuthority: isRebalancing ? oldTickArrayUpperOrBaseVaultAuthority : baseVaultAuthority,\n tokenAVault,\n tokenBVault,\n poolTokenVaultA: lbPair.reserveX,\n poolTokenVaultB: lbPair.reserveY,\n scopePrices: globalConfig.scopePriceId,\n tokenInfos: globalConfig.tokenInfos,\n tokenAMint,\n tokenBMint,\n eventAuthority,\n consensusAccount: CONSENSUS_ID,\n tokenATokenProgram: keyOrDefault(tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n };\n\n const ixn = openLiquidityPosition(args, accounts);\n const accountIndex = ixn.keys.findIndex((accs) => accs.pubkey.equals(position));\n ixn.keys[accountIndex].isSigner = true;\n return ixn;\n };\n\n /**\n * Get a transaction for executive withdrawal from a Kamino strategy.\n * @param strategy strategy pubkey or object\n * @param action withdrawal action\n * @returns transaction for executive withdrawal\n */\n executiveWithdraw = async (\n strategy: PublicKey | StrategyWithAddress,\n action: ExecutiveWithdrawActionKind\n ): Promise<TransactionInstruction> => {\n const { address: strategyPubkey, strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategyDex);\n\n const globalConfig = await this.getGlobalConfigState(strategyState.globalConfig);\n if (globalConfig == null) {\n throw new Error(`Unable to fetch GlobalConfig with Pubkey ${strategyState.globalConfig}`);\n }\n const args: ExecutiveWithdrawArgs = {\n action: action.discriminator,\n };\n\n const programId = getDexProgramId(strategyState);\n\n const accounts: ExecutiveWithdrawAccounts = {\n adminAuthority: strategyState.adminAuthority,\n strategy: strategyPubkey,\n globalConfig: strategyState.globalConfig,\n pool: strategyState.pool,\n position: strategyState.position,\n positionTokenAccount: strategyState.positionTokenAccount,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n tickArrayLower: strategyState.tickArrayLower,\n tickArrayUpper: strategyState.tickArrayUpper,\n tokenAVault: strategyState.tokenAVault,\n tokenBVault: strategyState.tokenBVault,\n poolTokenVaultA: strategyState.poolTokenVaultA,\n poolTokenVaultB: strategyState.poolTokenVaultB,\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n scopePrices: strategyState.scopePrices,\n raydiumProtocolPositionOrBaseVaultAuthority: strategyState.raydiumProtocolPositionOrBaseVaultAuthority,\n poolProgram: programId,\n tokenInfos: globalConfig.tokenInfos,\n eventAuthority,\n tokenATokenProgram: keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n };\n\n const executiveWithdrawIx = executiveWithdraw(args, accounts);\n\n // for Raydium strats we need to collect fees and rewards before withdrawal\n // add rewards vaults accounts to withdraw\n const isRaydium = strategyState.strategyDex.toNumber() == dexToNumber('RAYDIUM');\n if (isRaydium) {\n const poolState = await this.getRaydiumPoolByAddress(strategyState.pool);\n if (!poolState) {\n throw new Error('Pool is not found');\n }\n\n if (strategyState.reward0Decimals.toNumber() > 0) {\n executiveWithdrawIx.keys = executiveWithdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[0].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.reward0Vault, isSigner: false, isWritable: true },\n ]);\n }\n if (strategyState.reward1Decimals.toNumber() > 0) {\n executiveWithdrawIx.keys = executiveWithdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[1].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.reward1Vault, isSigner: false, isWritable: true },\n ]);\n }\n if (strategyState.reward2Decimals.toNumber() > 0) {\n executiveWithdrawIx.keys = executiveWithdrawIx.keys.concat([\n { pubkey: poolState.rewardInfos[2].tokenVault, isSigner: false, isWritable: true },\n { pubkey: strategyState.reward2Vault, isSigner: false, isWritable: true },\n ]);\n }\n }\n\n return executiveWithdrawIx;\n };\n\n /**\n * Get a an instruction to update the reference price type of a strategy\n * @param strategy strategy pubkey or object\n * @param referencePriceType new reference price type\n */\n getUpdateReferencePriceTypeIx = async (\n strategy: PublicKey | StrategyWithAddress,\n referencePriceType: ReferencePriceTypeKind\n ): Promise<TransactionInstruction> => {\n const { address, strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n return getUpdateStrategyConfigIx(\n strategyState.adminAuthority,\n this._globalConfig,\n address,\n new UpdateReferencePriceType(),\n new Decimal(referencePriceType.discriminator)\n );\n };\n\n /**\n * Get a transaction to invest funds from the Kamino vaults and put them into the DEX pool as liquidity.\n * @param strategy strategy pubkey or object\n * @param payer transaction payer\n */\n invest = async (strategy: PublicKey | StrategyWithAddress, payer: PublicKey): Promise<TransactionInstruction> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n if (!strategyWithAddress || !strategyWithAddress.strategy) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n\n const strategyState = strategyWithAddress.strategy;\n const globalConfig = await this.getGlobalConfigState(strategyState.globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${strategyState.globalConfig.toString()}`);\n }\n\n const programId = getDexProgramId(strategyState);\n const eventAuthority = this.getEventAuthorityPDA(strategyState.strategyDex);\n\n const accounts: InvestAccounts = {\n position: strategyState.position,\n positionTokenAccount: strategyState.positionTokenAccount,\n pool: strategyState.pool,\n tokenAVault: strategyState.tokenAVault,\n tokenBVault: strategyState.tokenBVault,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n payer,\n strategy: strategyWithAddress.address,\n globalConfig: strategyState.globalConfig,\n poolTokenVaultA: strategyState.poolTokenVaultA,\n poolTokenVaultB: strategyState.poolTokenVaultB,\n tickArrayLower: strategyState.tickArrayLower,\n tickArrayUpper: strategyState.tickArrayUpper,\n scopePrices: globalConfig.scopePriceId,\n raydiumProtocolPositionOrBaseVaultAuthority: strategyState.raydiumProtocolPositionOrBaseVaultAuthority,\n tokenInfos: globalConfig.tokenInfos,\n poolProgram: programId,\n instructionSysvarAccount: SYSVAR_INSTRUCTIONS_PUBKEY,\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n eventAuthority,\n tokenATokenProgram: keyOrDefault(strategyState.tokenATokenProgram, TOKEN_PROGRAM_ID),\n tokenBTokenProgram: keyOrDefault(strategyState.tokenBTokenProgram, TOKEN_PROGRAM_ID),\n memoProgram: MEMO_PROGRAM_ID,\n tokenProgram: TOKEN_PROGRAM_ID,\n tokenProgram2022: TOKEN_2022_PROGRAM_ID,\n };\n\n return invest(accounts);\n };\n\n /**\n * Get a list of instructions to collect the pending fees and invest them into the Kamino strategy's position.\n * @param strategy strategy pubkey or object\n * @param payer transaction payer\n */\n compound = async (strategy: PublicKey | StrategyWithAddress, payer: PublicKey): Promise<TransactionInstruction[]> => {\n // fetch here so the underlying instructions won't need to fetch\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n if (!strategyWithAddress) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n\n const collectFeesAndRewardsIx = this.collectFeesAndRewards(strategyWithAddress, payer);\n const investIx = this.invest(strategy, payer);\n\n return Promise.all([collectFeesAndRewardsIx, investIx]);\n };\n\n /**\n * Get a the pending fees in lamports of a strategy.\n * @param strategy strategy pubkey or object\n */\n getPendingFees = async (strategies: PublicKey[]): Promise<StrategyWithPendingFees[]> => {\n const strategiesWithAddresses = await this.getStrategiesWithAddresses(strategies);\n const raydiumStrategies = strategiesWithAddresses.filter(\n (x) =>\n x.strategy.strategyDex.toNumber() === dexToNumber('RAYDIUM') && !x.strategy.position.equals(PublicKey.default)\n );\n const raydiumPositionsPromise = this.getRaydiumPositions(raydiumStrategies.map((x) => x.strategy.position));\n const orcaStrategies = strategiesWithAddresses.filter(\n (x) => x.strategy.strategyDex.toNumber() === dexToNumber('ORCA') && !x.strategy.position.equals(PublicKey.default)\n );\n const orcaPositionsPromise = this.getOrcaPositions(orcaStrategies.map((x) => x.strategy.position));\n const meteoraStrategies = strategiesWithAddresses.filter(\n (x) =>\n x.strategy.strategyDex.toNumber() === dexToNumber('METEORA') && !x.strategy.position.equals(PublicKey.default)\n );\n const meteoraPositionsPromise = this.getMeteoraPositions(meteoraStrategies.map((x) => x.strategy.position));\n const [raydiumPositions, orcaPositions, meteoraPositions] = await Promise.all([\n raydiumPositionsPromise,\n orcaPositionsPromise,\n meteoraPositionsPromise,\n ]);\n\n const result: StrategyWithPendingFees[] = [];\n for (let index = 0; index < orcaStrategies.length; index++) {\n const orcaPosition = orcaPositions[index];\n if (!orcaPosition) {\n throw Error(\n `Could not fetch Orca position state with pubkey ${orcaStrategies[index].strategy.position.toString()}`\n );\n }\n const pendingFees = {\n a: new Decimal(orcaPosition.feeOwedA.toString()),\n b: new Decimal(orcaPosition.feeOwedB.toString()),\n };\n result.push({\n strategy: orcaStrategies[index],\n pendingFees,\n });\n }\n\n for (let index = 0; index < raydiumStrategies.length; index++) {\n const raydiumPosition = raydiumPositions[index];\n if (!raydiumPosition) {\n throw Error(\n `Could not fetch Raydium position state with pubkey ${raydiumStrategies[index].strategy.position.toString()}`\n );\n }\n const pendingFees = {\n a: new Decimal(raydiumPosition.tokenFeesOwed0.toString()),\n b: new Decimal(raydiumPosition.tokenFeesOwed1.toString()),\n };\n result.push({\n strategy: raydiumStrategies[index],\n pendingFees,\n });\n }\n\n for (let index = 0; index < meteoraStrategies.length; index++) {\n const meteoraPosition = meteoraPositions[index];\n if (!meteoraPosition) {\n throw Error(\n `Could not fetch Meteora position state with pubkey ${meteoraStrategies[index].strategy.position.toString()}`\n );\n }\n const pendingFees: TokenAmounts = {\n a: ZERO,\n b: ZERO,\n };\n for (const feeInfo of meteoraPosition.feeInfos) {\n pendingFees.a = pendingFees.a.add(feeInfo.feeXPending.toString());\n pendingFees.b = pendingFees.b.add(feeInfo.feeYPending.toString());\n }\n result.push({\n strategy: meteoraStrategies[index],\n pendingFees,\n });\n }\n\n return result;\n };\n\n getUpdateRebalancingParamsFromRebalanceFieldsIx = async (\n strategyAdmin: PublicKey,\n strategy: PublicKey | StrategyWithAddress,\n rebalanceFieldInfos: RebalanceFieldInfo[]\n ): Promise<TransactionInstruction> => {\n const rebalanceType = getRebalanceTypeFromRebalanceFields(rebalanceFieldInfos);\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n if (!strategyWithAddress || !strategyWithAddress.strategy) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n\n const rebalanceParams = rebalanceFieldInfos\n .filter((x) => x.label != RebalanceTypeLabelName && x.enabled)\n .map((f) => new Decimal(f.value));\n return this.getUpdateRebalancingParmsIxns(\n strategyAdmin,\n strategyWithAddress.address,\n rebalanceParams,\n rebalanceType,\n strategyWithAddress.strategy.tokenAMintDecimals.toNumber(),\n strategyWithAddress.strategy.tokenBMintDecimals.toNumber()\n );\n };\n\n processRebalanceParams = async (\n dex: Dex,\n pool: PublicKey | WhirlpoolWithAddress,\n rebalanceType: Decimal,\n rebalanceParams: Decimal[]\n ): Promise<Decimal[]> => {\n const processedRebalanceParams = [...rebalanceParams];\n const rebalanceTypeKind = numberToRebalanceType(rebalanceType.toNumber());\n if (dex == 'ORCA') {\n const { whirlpool: whilrpoolState } = await this.getWhirlpoolStateIfNotFetched(pool);\n if (rebalanceTypeKind.kind == RebalanceType.Drift.kind) {\n processedRebalanceParams[0] = new Decimal(\n getNearestValidTickIndexFromTickIndex(rebalanceParams[0].toNumber(), whilrpoolState.tickSpacing)\n );\n }\n }\n\n return processedRebalanceParams;\n };\n\n getUpdateRebalancingParmsIxns = async (\n strategyAdmin: PublicKey,\n strategy: PublicKey | StrategyWithAddress,\n rebalanceParams: Decimal[],\n rebalanceType?: RebalanceTypeKind,\n tokenADecimals?: number,\n tokenBDecimals?: number\n ): Promise<TransactionInstruction> => {\n const { address: strategyAddress, strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n if (!rebalanceType) {\n rebalanceType = numberToRebalanceType(strategyState.rebalanceType);\n }\n tokenADecimals = strategyState.tokenAMintDecimals.toNumber();\n tokenBDecimals = strategyState.tokenBMintDecimals.toNumber();\n\n const processedRebalanceParams = await this.processRebalanceParams(\n numberToDex(strategyState.strategyDex.toNumber()),\n strategyState.pool,\n new Decimal(rebalanceType.discriminator),\n rebalanceParams\n );\n\n const value = buildStrategyRebalanceParams(processedRebalanceParams, rebalanceType, tokenADecimals, tokenBDecimals);\n const args: UpdateStrategyConfigArgs = {\n mode: StrategyConfigOption.UpdateRebalanceParams.discriminator,\n value,\n };\n\n const accounts: UpdateStrategyConfigAccounts = {\n adminAuthority: strategyAdmin,\n newAccount: PublicKey.default, // not used\n globalConfig: this._globalConfig,\n strategy: strategyAddress,\n systemProgram: SystemProgram.programId,\n };\n return updateStrategyConfig(args, accounts);\n };\n\n getUpdateRebalancingParamsForUninitializedStratIx = async (\n strategyAdmin: PublicKey,\n strategy: PublicKey,\n rebalanceParams: Decimal[],\n rebalanceType: RebalanceTypeKind,\n tokenADecimals: number,\n tokenBDecimals: number\n ): Promise<TransactionInstruction> => {\n const value = buildStrategyRebalanceParams(rebalanceParams, rebalanceType, tokenADecimals, tokenBDecimals);\n const args: UpdateStrategyConfigArgs = {\n mode: StrategyConfigOption.UpdateRebalanceParams.discriminator,\n value,\n };\n\n const accounts: UpdateStrategyConfigAccounts = {\n adminAuthority: strategyAdmin,\n newAccount: PublicKey.default, // not used\n globalConfig: this._globalConfig,\n strategy,\n systemProgram: SystemProgram.programId,\n };\n return updateStrategyConfig(args, accounts);\n };\n\n buildStrategyRebalanceParams = async (strategy: PublicKey | StrategyWithAddress): Promise<number[]> => {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n\n const params = strategyState.strategy.rebalanceRaw.params.map((p) => new Decimal(p.toString()));\n return buildStrategyRebalanceParams(params, numberToRebalanceType(strategyState.strategy.rebalanceType));\n };\n\n /**\n * Get a list of instructions to initialize and set up a strategy\n * @param dex the dex to use (Orca or Raydium)\n * @param feeTierBps which fee tier for that specific pair should be used (in BPS)\n * @param tokenAMint the mint of TokenA in the pool\n * @param tokenBMint the mint of TokenB in the pool\n * @param depositCap the maximum amount in USD in lamports (6 decimals) that can be deposited into the strategy\n * @param depositCapPerIx the maximum amount in USD in lamports (6 decimals) that can be deposited into the strategy per instruction\n */\n getBuildStrategyIxns = async (\n dex: Dex,\n feeTierBps: Decimal,\n strategy: PublicKey,\n positionMint: PublicKey,\n strategyAdmin: PublicKey,\n rebalanceType: Decimal,\n rebalanceParams: Decimal[],\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n depositCap?: Decimal,\n depositCapPerIx?: Decimal,\n withdrawFeeBps?: Decimal,\n depositFeeBps?: Decimal,\n performanceFeeBps?: Decimal\n ): Promise<InitStrategyIxs> => {\n const feeTier: Decimal = feeTierBps.div(FullBPS);\n // check both tokens exist in collateralInfo\n const config = await this.getGlobalConfigState(this._globalConfig);\n if (!config) {\n throw Error(`Could not fetch globalConfig with pubkey ${this.getGlobalConfig().toString()}`);\n }\n const collateralInfos = await this.getCollateralInfo(config.tokenInfos);\n if (!this.mintIsSupported(collateralInfos, tokenAMint) || !this.mintIsSupported(collateralInfos, tokenBMint)) {\n throw Error(`Token mint ${tokenAMint.toString()} is not supported`);\n }\n\n const pool = await this.getPoolInitializedForDexPairTier(dex, tokenAMint, tokenBMint, feeTier.mul(FullBPS));\n if (pool == PublicKey.default) {\n throw Error(\n `Pool for tokens ${tokenAMint.toString()} and ${tokenBMint.toString()} for feeTier ${feeTier.toString()} does not exist`\n );\n }\n\n const processedRebalanceParams = await this.processRebalanceParams(dex, pool, rebalanceType, rebalanceParams);\n\n const price = await this.getCurrentPriceFromPool(dex, pool);\n\n let tokenMintA: PublicKey;\n let tokenMintB: PublicKey;\n let tickSpacing: number;\n if (dex == 'ORCA') {\n const whirlpoolState = await Whirlpool.fetch(this._connection, pool);\n if (!whirlpoolState) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n tokenMintA = whirlpoolState.tokenMintA;\n tokenMintB = whirlpoolState.tokenMintB;\n tickSpacing = whirlpoolState.tickSpacing;\n } else if (dex == 'RAYDIUM') {\n const raydiumPoolState = await PoolState.fetch(this._connection, pool);\n if (!raydiumPoolState) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${pool.toString()}`);\n }\n tokenMintA = raydiumPoolState.tokenMint0;\n tokenMintB = raydiumPoolState.tokenMint1;\n tickSpacing = raydiumPoolState.tickSpacing;\n } else if (dex == 'METEORA') {\n const meteoraPoolState = await LbPair.fetch(this._connection, pool);\n if (!meteoraPoolState) {\n throw Error(`Could not fetch Meteora pool state with pubkey ${pool.toString()}`);\n }\n tokenMintA = meteoraPoolState.tokenXMint;\n tokenMintB = meteoraPoolState.tokenYMint;\n tickSpacing = meteoraPoolState.binStep;\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n const tokenATokenProgram = await this.getAccountOwner(tokenAMint);\n const tokenBTokenProgram = await this.getAccountOwner(tokenBMint);\n\n const initStrategyIx: TransactionInstruction = await this.createStrategy(strategy, pool, strategyAdmin, dex);\n\n const tokenADecimals = await getMintDecimals(this._connection, tokenMintA);\n const tokenBDecimals = await getMintDecimals(this._connection, tokenMintB);\n const rebalanceKind = numberToRebalanceType(rebalanceType.toNumber());\n\n const updateRebalanceParamsIx = await this.getUpdateRebalancingParamsForUninitializedStratIx(\n strategyAdmin,\n strategy,\n processedRebalanceParams,\n rebalanceKind,\n tokenADecimals,\n tokenBDecimals\n );\n\n const updateStrategyParamsIxs = await this.getUpdateStrategyParamsIxs(\n strategyAdmin,\n strategy,\n rebalanceType,\n withdrawFeeBps,\n performanceFeeBps\n );\n\n const programAddresses = await this.getStrategyProgramAddresses(strategy, tokenMintA, tokenMintB);\n const baseVaultAuthority = programAddresses.baseVaultAuthority;\n const tokenAVault = programAddresses.tokenAVault;\n const tokenBVault = programAddresses.tokenBVault;\n\n const { lowerPrice, upperPrice } = await this.getRebalancePositionRange(\n dex,\n price,\n tokenAMint,\n tokenBMint,\n tickSpacing,\n rebalanceKind,\n rebalanceParams\n );\n\n const openPositionIxs: TransactionInstruction[] = [];\n const eventAuthority = this.getEventAuthorityPDA(new BN(dexToNumber(dex)));\n if (dex == 'ORCA') {\n const whirlpoolWithAddress = await this.getWhirlpoolStateIfNotFetched(pool);\n if (!whirlpoolWithAddress) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n const initLowerTickIfNeeded = await this.initializeTickForOrcaPool(strategyAdmin, pool, lowerPrice);\n const initUpperTickIfNeeded = await this.initializeTickForOrcaPool(strategyAdmin, pool, upperPrice);\n\n const openPositionIx = await this.openPositionOrca(\n strategyAdmin,\n strategy,\n baseVaultAuthority,\n pool,\n positionMint,\n lowerPrice,\n upperPrice,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenATokenProgram,\n tokenBTokenProgram,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n eventAuthority\n );\n if (initLowerTickIfNeeded.initTickIx) {\n openPositionIxs.push(initLowerTickIfNeeded.initTickIx);\n }\n if (initUpperTickIfNeeded.initTickIx) {\n openPositionIxs.push(initUpperTickIfNeeded.initTickIx);\n }\n openPositionIxs.push(openPositionIx);\n } else if (dex == 'RAYDIUM') {\n const openPositionIx = await this.openPositionRaydium(\n strategyAdmin,\n strategy,\n baseVaultAuthority,\n pool,\n positionMint,\n lowerPrice,\n upperPrice,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenATokenProgram,\n tokenBTokenProgram,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n eventAuthority\n );\n\n openPositionIxs.push(openPositionIx);\n } else if (dex == 'METEORA') {\n const lbPair = await this.getMeteoraStateIfNotFetched(pool);\n if (!lbPair) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n const initLowerTickIfNeeded = await this.initializeTickForMeteoraPool(strategyAdmin, pool, lowerPrice);\n const initUpperTickIfNeeded = await this.initializeTickForMeteoraPool(strategyAdmin, pool, upperPrice);\n\n const openPositionIx = await this.openPositionMeteora(\n strategyAdmin,\n strategy,\n baseVaultAuthority,\n pool,\n positionMint,\n lowerPrice,\n upperPrice,\n tokenAVault,\n tokenBVault,\n tokenAMint,\n tokenBMint,\n tokenATokenProgram,\n tokenBTokenProgram,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n baseVaultAuthority,\n eventAuthority\n );\n if (initLowerTickIfNeeded.initTickIx) {\n openPositionIxs.push(initLowerTickIfNeeded.initTickIx);\n }\n if (initUpperTickIfNeeded.initTickIx) {\n openPositionIxs.push(initUpperTickIfNeeded.initTickIx);\n }\n openPositionIxs.push(openPositionIx);\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n\n return {\n initStrategyIx,\n updateStrategyParamsIxs,\n updateRebalanceParamsIx,\n openPositionIxs,\n };\n };\n\n async getNewPositionRange(\n strategy: PublicKey | StrategyWithAddress,\n rebalanceKind: RebalanceTypeKind,\n rebalanceParams: Decimal[]\n ): Promise<PositionRange> {\n const strategyState = await this.getStrategyStateIfNotFetched(strategy);\n const dex = numberToDex(strategyState.strategy.strategyDex.toNumber());\n const tokenAMint = strategyState.strategy.tokenAMint;\n const tokenBMint = strategyState.strategy.tokenBMint;\n const price = await this.getCurrentPriceFromPool(dex, strategyState.strategy.pool);\n const tickSpacing = await this.getPoolTickSpacing(dex, strategyState.strategy.pool);\n\n return this.getRebalancePositionRange(\n dex,\n price,\n tokenAMint,\n tokenBMint,\n tickSpacing,\n rebalanceKind,\n rebalanceParams\n );\n }\n\n private async getRebalancePositionRange(\n dex: Dex,\n price: Decimal,\n tokenAMint: PublicKey,\n tokenBMint: PublicKey,\n tickSpacing: number,\n rebalanceKind: RebalanceTypeKind,\n rebalanceParams: Decimal[]\n ): Promise<PositionRange> {\n const tokenADecimals = await getMintDecimals(this._connection, tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, tokenBMint);\n switch (rebalanceKind.kind) {\n case RebalanceType.Manual.kind:\n return { lowerPrice: rebalanceParams[0], upperPrice: rebalanceParams[1] };\n case RebalanceType.TakeProfit.kind:\n return { lowerPrice: rebalanceParams[0], upperPrice: rebalanceParams[1] };\n\n case RebalanceType.PricePercentage.kind:\n return getPositionRangeFromPercentageRebalanceParams(price, rebalanceParams[0], rebalanceParams[1]);\n\n case RebalanceType.PricePercentageWithReset.kind:\n return getPositionRangeFromPricePercentageWithResetParams(price, rebalanceParams[0], rebalanceParams[1]);\n\n case RebalanceType.Drift.kind:\n return getPositionRangeFromDriftParams(\n dex,\n tickSpacing,\n tokenADecimals,\n tokenBDecimals,\n rebalanceParams[0],\n rebalanceParams[1],\n rebalanceParams[2]\n );\n\n case RebalanceType.PeriodicRebalance.kind:\n return getPositionRangeFromPeriodicRebalanceParams(price, rebalanceParams[1], rebalanceParams[2]);\n\n case RebalanceType.Expander.kind:\n return getPositionRangeFromExpanderParams(price, rebalanceParams[0], rebalanceParams[1]);\n\n case RebalanceType.Autodrift.kind:\n const currentTickIndex = priceToTickIndex(price, tokenADecimals, tokenBDecimals);\n const startMidTick = new Decimal(currentTickIndex);\n return getPositionRangeFromAutodriftParams(\n dex,\n tokenADecimals,\n tokenBDecimals,\n startMidTick,\n rebalanceParams[1],\n rebalanceParams[2],\n tickSpacing\n );\n\n default:\n throw new Error(`Rebalance type ${rebalanceKind} is not supported`);\n }\n }\n\n async getCurrentPrice(strategy: PublicKey | StrategyWithAddress): Promise<Decimal> {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const pool = strategyWithAddress.strategy.pool;\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n\n return this.getCurrentPriceFromPool(dex, pool);\n }\n\n async getCurrentPriceFromPool(dex: Dex, pool: PublicKey): Promise<Decimal> {\n if (dex == 'ORCA') {\n return this.getOrcaPoolPrice(pool);\n } else if (dex == 'RAYDIUM') {\n return this.getRaydiumPoolPrice(pool);\n } else if (dex == 'METEORA') {\n return this.getMeteoraPoolPrice(pool);\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n }\n\n async getPoolTickSpacing(dex: Dex, pool: PublicKey): Promise<number> {\n if (dex == 'ORCA') {\n const whirlpoolState = await Whirlpool.fetch(this._connection, pool);\n if (!whirlpoolState) {\n throw Error(`Could not fetch whirlpool state with pubkey ${pool.toString()}`);\n }\n return whirlpoolState.tickSpacing;\n } else if (dex == 'RAYDIUM') {\n const raydiumPoolState = await PoolState.fetch(this._connection, pool);\n if (!raydiumPoolState) {\n throw Error(`Could not fetch Raydium pool state with pubkey ${pool.toString()}`);\n }\n return raydiumPoolState.tickSpacing;\n } else if (dex == 'METEORA') {\n const meteoraPoolState = await LbPair.fetch(this._connection, pool);\n if (!meteoraPoolState) {\n throw Error(`Could not fetch Meteora pool state with pubkey ${pool.toString()}`);\n }\n return meteoraPoolState.binStep;\n } else {\n throw new Error(`Dex ${dex} is not supported`);\n }\n }\n\n async getPriceRangePercentageBasedFromPool(\n dex: Dex,\n pool: PublicKey,\n lowerPriceBpsDifference: Decimal,\n upperPriceBpsDifference: Decimal\n ): Promise<[Decimal, Decimal]> {\n let poolPrice: Decimal;\n if (dex == 'ORCA') {\n poolPrice = await this.getOrcaPoolPrice(pool);\n } else if (dex == 'RAYDIUM') {\n poolPrice = await this.getRaydiumPoolPrice(pool);\n } else if (dex == 'METEORA') {\n poolPrice = await this.getMeteoraPoolPrice(pool);\n } else {\n throw new Error(`Invalid dex ${dex}`);\n }\n\n return this.getPriceRangePercentageBasedFromPrice(poolPrice, lowerPriceBpsDifference, upperPriceBpsDifference);\n }\n\n /**\n * Get the raw rebalancing params given the strategy type\n */\n async readRebalancingParamsFromChain(strategy: PublicKey | StrategyWithAddress): Promise<RebalanceFieldInfo[]> {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const rebalanceKind = numberToRebalanceType(strategyWithAddress.strategy.rebalanceType);\n\n let rebalanceFields: RebalanceFieldInfo[];\n if (rebalanceKind.kind === Manual.kind) {\n rebalanceFields = [];\n } else if (rebalanceKind.kind === PricePercentage.kind) {\n rebalanceFields = readPricePercentageRebalanceParamsFromStrategy(strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n rebalanceFields = readPricePercentageWithResetRebalanceParamsFromStrategy(\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === Drift.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readDriftRebalanceParamsFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === TakeProfit.kind) {\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n rebalanceFields = rebalanceFieldsDictToInfo(\n readTakeProfitRebalanceParamsFromStrategy(\n tokenADecimals,\n tokenBDecimals,\n strategyWithAddress.strategy.rebalanceRaw\n )\n );\n } else if (rebalanceKind.kind === PeriodicRebalance.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readPeriodicRebalanceRebalanceParamsFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === Expander.kind) {\n rebalanceFields = readExpanderRebalanceParamsFromStrategy(strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === Autodrift.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readAutodriftRebalanceParamsFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else {\n throw new Error(`Rebalance type ${rebalanceKind} is not supported`);\n }\n return rebalanceFields;\n }\n\n /**\n * Get the raw rebalancing params given the strategy type\n */\n async readRebalancingStateFromChain(strategy: PublicKey | StrategyWithAddress): Promise<RebalanceFieldInfo[]> {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const rebalanceKind = numberToRebalanceType(strategyWithAddress.strategy.rebalanceType);\n\n let rebalanceFields: RebalanceFieldInfo[];\n if (rebalanceKind.kind === Manual.kind) {\n rebalanceFields = [];\n } else if (rebalanceKind.kind === PricePercentage.kind) {\n rebalanceFields = readRawPricePercentageRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n rebalanceFields = readRawPricePercentageWithResetRebalanceStateFromStrategy(\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === Drift.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readRawDriftRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === TakeProfit.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readTakeProfitRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === PeriodicRebalance.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readPeriodicRebalanceRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === Expander.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readRawExpanderRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else if (rebalanceKind.kind === Autodrift.kind) {\n rebalanceFields = rebalanceFieldsDictToInfo(\n readRawAutodriftRebalanceStateFromStrategy(strategyWithAddress.strategy.rebalanceRaw)\n );\n } else {\n throw new Error(`Rebalance type ${rebalanceKind} is not supported`);\n }\n return rebalanceFields;\n }\n\n /**\n * Get the prices for rebalancing params (range and reset range, if strategy involves a reset range)\n */\n async readRebalancingParams(strategy: PublicKey | StrategyWithAddress): Promise<RebalanceFieldInfo[]> {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const rebalanceKind = numberToRebalanceType(strategyWithAddress.strategy.rebalanceType);\n\n if (rebalanceKind.kind === Manual.kind) {\n const positionRange = await this.getStrategyRange(strategyWithAddress);\n return getManualRebalanceFieldInfos(positionRange.lowerPrice, positionRange.upperPrice);\n } else if (rebalanceKind.kind === PricePercentage.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePricePercentageRebalanceFromOnchainParams(price, strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePricePercentageWithResetRebalanceFromOnchainParams(\n price,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === Drift.kind) {\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n const tickSpacing = await this.getPoolTickSpacing(dex, strategyWithAddress.strategy.pool);\n return deserializeDriftRebalanceFromOnchainParams(\n dex,\n tickSpacing,\n tokenADecimals,\n tokenBDecimals,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === TakeProfit.kind) {\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n return deserializeTakeProfitRebalanceFromOnchainParams(\n tokenADecimals,\n tokenBDecimals,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === PeriodicRebalance.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePeriodicRebalanceFromOnchainParams(price, strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === Expander.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return readExpanderRebalanceFieldInfosFromStrategy(price, strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === Autodrift.kind) {\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n const tickSpacing = await this.getPoolTickSpacing(dex, strategyWithAddress.strategy.pool);\n return deserializeAutodriftRebalanceFromOnchainParams(\n dex,\n tokenADecimals,\n tokenBDecimals,\n tickSpacing,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else {\n throw new Error(`Rebalance type ${rebalanceKind} is not supported`);\n }\n }\n\n /**\n * Get the rebalancing params from chain, alongside the current details of the position, reset range, etc\n */\n async readRebalancingParamsWithState(strategy: PublicKey | StrategyWithAddress): Promise<RebalanceFieldInfo[]> {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const rebalanceKind = numberToRebalanceType(strategyWithAddress.strategy.rebalanceType);\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n const tokenADecimals = strategyWithAddress.strategy.tokenAMintDecimals.toNumber();\n const tokenBDecimals = strategyWithAddress.strategy.tokenBMintDecimals.toNumber();\n\n if (rebalanceKind.kind === Manual.kind) {\n const positionRange = await this.getStrategyRange(strategyWithAddress);\n return getManualRebalanceFieldInfos(positionRange.lowerPrice, positionRange.upperPrice);\n } else if (rebalanceKind.kind === PricePercentage.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePricePercentageRebalanceWithStateOverride(\n dex,\n tokenADecimals,\n tokenBDecimals,\n price,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === PricePercentageWithReset.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePricePercentageWithResetRebalanceWithStateOverride(\n dex,\n tokenADecimals,\n tokenBDecimals,\n price,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === Drift.kind) {\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n const tickSpacing = await this.getPoolTickSpacing(dex, strategyWithAddress.strategy.pool);\n return deserializeDriftRebalanceWithStateOverride(\n dex,\n tickSpacing,\n tokenADecimals,\n tokenBDecimals,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === TakeProfit.kind) {\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n return deserializeTakeProfitRebalanceFromOnchainParams(\n tokenADecimals,\n tokenBDecimals,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === PeriodicRebalance.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializePeriodicRebalanceFromOnchainParams(price, strategyWithAddress.strategy.rebalanceRaw);\n } else if (rebalanceKind.kind === Expander.kind) {\n const price = await this.getCurrentPrice(strategyWithAddress);\n return deserializeExpanderRebalanceWithStateOverride(\n dex,\n tokenADecimals,\n tokenBDecimals,\n price,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else if (rebalanceKind.kind === Autodrift.kind) {\n const dex = numberToDex(strategyWithAddress.strategy.strategyDex.toNumber());\n const tokenADecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenAMint);\n const tokenBDecimals = await getMintDecimals(this._connection, strategyWithAddress.strategy.tokenBMint);\n const tickSpacing = await this.getPoolTickSpacing(dex, strategyWithAddress.strategy.pool);\n return deserializeAutodriftRebalanceWithStateOverride(\n dex,\n tokenADecimals,\n tokenBDecimals,\n tickSpacing,\n strategyWithAddress.strategy.rebalanceRaw\n );\n } else {\n throw new Error(`Rebalance type ${rebalanceKind} is not supported`);\n }\n }\n\n /**\n * Get a list of updated rebalance field infos.\n * @param initialRebalanceFieldInfos the initial list of rebalance field infos\n * @param updatedFields the fields to be updated, with label and value\n * @returns list of RebalanceFieldInfo with updated values\n */\n getUpdatedRebalanceFieldInfos(\n initialRebalanceFieldInfos: RebalanceFieldInfo[],\n updatedFields: InputRebalanceFieldInfo[]\n ): RebalanceFieldInfo[] {\n const newRebalanceFieldInfos = initialRebalanceFieldInfos.map((f) => {\n const updatedField = updatedFields.find((x) => x.label == f.label);\n if (updatedField) {\n return { ...f, value: updatedField.value };\n } else {\n return f;\n }\n });\n return newRebalanceFieldInfos;\n }\n\n getPriceRangePercentageBasedFromPrice(\n price: Decimal,\n lowerPriceBpsDifference: Decimal,\n upperPriceBpsDifference: Decimal\n ): [Decimal, Decimal] {\n const fullBPSDecimal = new Decimal(FullBPS);\n const lowerPrice = price.mul(fullBPSDecimal.sub(lowerPriceBpsDifference)).div(fullBPSDecimal);\n const upperPrice = price.mul(fullBPSDecimal.add(upperPriceBpsDifference)).div(fullBPSDecimal);\n\n return [lowerPrice, upperPrice];\n }\n\n /**\n * Read the pool price for a specific dex and pool\n */\n async getPoolPrice(dex: Dex, pool: PublicKey): Promise<Decimal> {\n if (dex == 'ORCA') {\n return this.getOrcaPoolPrice(pool);\n } else if (dex == 'RAYDIUM') {\n return this.getRaydiumPoolPrice(pool);\n } else if (dex == 'METEORA') {\n return this.getMeteoraPoolPrice(pool);\n } else {\n throw new Error(`Invalid dex ${dex}`);\n }\n }\n\n async getOrcaPoolPrice(pool: PublicKey): Promise<Decimal> {\n const orca = new OrcaWhirlpoolClient({\n connection: this._connection,\n network: this._cluster === 'mainnet-beta' ? OrcaNetwork.MAINNET : OrcaNetwork.DEVNET,\n });\n\n const poolData = await orca.getPool(pool);\n if (!poolData) {\n throw Error(`Could not fetch Whirlpool data for ${pool.toString()}`);\n }\n\n return poolData.price;\n }\n\n async getRaydiumPoolPrice(pool: PublicKey): Promise<Decimal> {\n const poolState = await PoolState.fetch(this._connection, pool);\n if (!poolState) {\n throw new Error(`Raydium poolState ${pool.toString()} is not found`);\n }\n\n const price = SqrtPriceMath.sqrtPriceX64ToPrice(\n poolState.sqrtPriceX64,\n poolState.mintDecimals0,\n poolState.mintDecimals1\n );\n return price;\n }\n\n async getMeteoraPoolPrice(pool: PublicKey): Promise<Decimal> {\n const poolState = await LbPair.fetch(this._connection, pool);\n if (!poolState) {\n throw new Error(`Meteora poolState ${pool.toString()} is not found`);\n }\n const decimalsX = await getMintDecimals(this._connection, poolState.tokenXMint);\n const decimalsY = await getMintDecimals(this._connection, poolState.tokenYMint);\n return getPriceOfBinByBinIdWithDecimals(poolState.activeId, poolState.binStep, decimalsX, decimalsY);\n }\n\n async getGenericPoolInfo(dex: Dex, pool: PublicKey): Promise<GenericPoolInfo> {\n let poolInfo: GenericPoolInfo;\n if (dex == 'ORCA') {\n poolInfo = await this._orcaService.getGenericPoolInfo(pool);\n } else if (dex == 'RAYDIUM') {\n poolInfo = await this._raydiumService.getGenericPoolInfo(pool);\n } else if (dex == 'METEORA') {\n poolInfo = await this._meteoraService.getGenericPoolInfo(pool);\n } else {\n throw new Error(`Invalid dex ${dex}`);\n }\n\n return poolInfo;\n }\n\n mintIsSupported = (collateralInfos: CollateralInfo[], tokenMint: PublicKey): boolean => {\n let found = false;\n collateralInfos.forEach((element) => {\n if (element.mint.equals(tokenMint)) {\n found = true;\n }\n });\n return found;\n };\n\n getCollateralInfoFromMint = (mint: PublicKey, collateralInfos: CollateralInfo[]): CollateralInfo | undefined => {\n const collInfosForMint = collateralInfos.filter((x) => x.mint.equals(mint));\n if (collInfosForMint.length == 0) {\n return undefined;\n }\n return collInfosForMint[0];\n };\n\n getCollateralIdFromMint = (mint: PublicKey, collateralInfos: CollateralInfo[]): number => {\n for (let i = 0; i < collateralInfos.length; i++) {\n if (collateralInfos[i].mint.equals(mint)) {\n return i;\n }\n }\n\n return -1;\n };\n\n getMainLookupTablePks = async (): Promise<PublicKey[]> => {\n if (\n this._kaminoProgramId.equals(STAGING_KAMINO_PROGRAM_ID) ||\n this._cluster == 'mainnet-beta' ||\n this._cluster == 'devnet'\n ) {\n return await this._connection\n .getProgramAccounts(ADDRESS_LUT_PROGRAM_ID, {\n filters: [{ memcmp: { offset: 22, bytes: new PublicKey(LUT_OWNER_KEY).toString() } }],\n dataSlice: { length: 0, offset: 0 },\n })\n .then((res) => res.map((raw) => raw.pubkey));\n }\n return [];\n };\n\n getMainLookupTable = async (): Promise<AddressLookupTableAccount[] | undefined> => {\n const pks = await this.getMainLookupTablePks();\n if (\n this._kaminoProgramId.equals(STAGING_KAMINO_PROGRAM_ID) ||\n this._cluster == 'mainnet-beta' ||\n this._cluster == 'devnet'\n ) {\n return await this._connection.getMultipleAccountsInfo(pks).then((res) =>\n res.map((raw, i) => {\n return new AddressLookupTableAccount({\n key: pks[i],\n state: AddressLookupTableAccount.deserialize(raw!.data),\n });\n })\n );\n } else {\n return undefined;\n }\n };\n\n getInitLookupTableIx = async (authority: PublicKey, slot?: number): Promise<[TransactionInstruction, PublicKey]> => {\n let recentSlot = slot;\n if (!recentSlot) {\n recentSlot = await this._connection.getSlot();\n }\n const slots = await this._connection.getBlocks(recentSlot - 20, recentSlot, 'confirmed');\n return AddressLookupTableProgram.createLookupTable({\n authority,\n payer: authority,\n recentSlot: slots[0],\n });\n };\n\n getPopulateLookupTableIxs = async (\n authority: PublicKey,\n lookupTable: PublicKey,\n strategy: PublicKey | StrategyWithAddress\n ): Promise<TransactionInstruction[]> => {\n const { strategy: strategyState, address } = await this.getStrategyStateIfNotFetched(strategy);\n if (!strategyState) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n const { treasuryFeeTokenAVault, treasuryFeeTokenBVault, treasuryFeeVaultAuthority } = this.getTreasuryFeeVaultPDAs(\n strategyState.tokenAMint,\n strategyState.tokenBMint\n );\n\n const accountsToBeInserted: PublicKey[] = [\n address,\n strategyState.adminAuthority,\n strategyState.globalConfig,\n strategyState.baseVaultAuthority,\n strategyState.pool,\n strategyState.tokenAMint,\n strategyState.tokenBMint,\n strategyState.tokenAVault,\n strategyState.tokenBVault,\n strategyState.poolTokenVaultA,\n strategyState.poolTokenVaultB,\n strategyState.tokenAMint,\n strategyState.sharesMint,\n strategyState.sharesMintAuthority,\n treasuryFeeTokenAVault,\n treasuryFeeTokenBVault,\n treasuryFeeVaultAuthority,\n ];\n\n return this.getAddLookupTableEntriesIxs(authority, lookupTable, accountsToBeInserted);\n };\n\n getAddLookupTableEntriesIxs = (\n authority: PublicKey,\n lookupTable: PublicKey,\n entries: PublicKey[]\n ): TransactionInstruction[] => {\n const chunkSize = 20;\n const txs: TransactionInstruction[] = [];\n for (let i = 0; i < entries.length; i += chunkSize) {\n const chunk = entries.slice(i, i + chunkSize);\n txs.push(\n AddressLookupTableProgram.extendLookupTable({\n payer: authority,\n authority,\n lookupTable,\n addresses: chunk,\n })\n );\n }\n return txs;\n };\n\n getLookupTable = async (tablePk: PublicKey): Promise<AddressLookupTableAccount> => {\n const lookupTableAccount = await this._connection.getAddressLookupTable(tablePk).then((res) => res.value);\n if (!lookupTableAccount) {\n throw new Error(`Could not get lookup table ${tablePk.toString()}`);\n }\n return lookupTableAccount;\n };\n\n setupStrategyLookupTable = async (\n authority: Keypair,\n strategy: PublicKey | StrategyWithAddress,\n slot?: number\n ): Promise<PublicKey> => {\n const [createLookupTableIx, lookupTable] = await this.getInitLookupTableIx(authority.publicKey, slot);\n const populateLookupTableIx = await this.getPopulateLookupTableIxs(authority.publicKey, lookupTable, strategy);\n\n const strategyPk = strategy instanceof PublicKey ? strategy : strategy.address;\n const getUpdateStrategyLookupTableIx = await getUpdateStrategyConfigIx(\n authority.publicKey,\n this._globalConfig,\n strategyPk,\n new UpdateLookupTable(),\n new Decimal(0),\n lookupTable\n );\n\n const createTableTx = new Transaction().add(createLookupTableIx);\n await sendTransactionWithLogs(this._connection, createTableTx, authority.publicKey, [authority]);\n for (const ix of populateLookupTableIx) {\n const populateLookupTableTx = new Transaction().add(ix);\n await sendTransactionWithLogs(this._connection, populateLookupTableTx, authority.publicKey, [authority]);\n }\n\n const updateStrategyLookupTableTx = new Transaction().add(getUpdateStrategyLookupTableIx);\n const sig = await sendTransactionWithLogs(this._connection, updateStrategyLookupTableTx, authority.publicKey, [\n authority,\n ]);\n console.log('Updated strategy', strategyPk, 'lookup table', sig);\n\n return lookupTable;\n };\n\n // the optional param is a list of pubkeys of lookup tables and they will be read from chain and used in the tx\n getTransactionV2Message = async (\n payer: PublicKey,\n instructions: Array<TransactionInstruction>,\n lookupTables?: Array<PublicKey>\n ): Promise<MessageV0> => {\n const lookupTable = await this.getMainLookupTable();\n\n let allLookupTables: AddressLookupTableAccount[] = [];\n if (lookupTable) {\n allLookupTables = allLookupTables.concat(lookupTable);\n }\n if (lookupTables) {\n for (const table of lookupTables) {\n const lookupTableData = await this.getLookupTable(table);\n allLookupTables.push(lookupTableData);\n }\n }\n return await this.getTransactionV2MessageWithFetchedLookupTables(payer, instructions, allLookupTables);\n };\n\n // the optional param is the lookup table list of the tables that are already feteched from chain\n getTransactionV2MessageWithFetchedLookupTables = async (\n payer: PublicKey,\n instructions: Array<TransactionInstruction>,\n lookupTables?: Array<AddressLookupTableAccount>\n ): Promise<MessageV0> => {\n const lookupTable = await this.getMainLookupTable();\n const blockhash = await this._connection.getLatestBlockhash();\n\n let allLookupTables: AddressLookupTableAccount[] = [];\n if (lookupTables) {\n allLookupTables.push(...lookupTables);\n }\n\n if (lookupTable) {\n allLookupTables = allLookupTables.concat(lookupTable);\n }\n\n const v2Tx = new TransactionMessage({\n payerKey: payer,\n recentBlockhash: blockhash.blockhash,\n instructions: instructions,\n }).compileToV0Message(allLookupTables);\n return v2Tx;\n };\n\n // todo(silviu): implement this\n // getEstimatedApyAndVolumeOnRange = async (\n // dex: Dex,\n // pool: PublicKey,\n // lowerPrice: Decimal,\n // upperPrice: Decimal,\n // _startDate: Date,\n // _endDate: Date\n // ): Promise<GenericPositionRangeInfo> => {\n // if (dex == 'ORCA') {\n // return this.getEstimatedApyAndVolumeOnRangeOrca();\n // } else if (dex == 'RAYDIUM') {\n // return this.getEstimatedApyAndVolumeOnRangeRaydium();\n // } else if (dex == 'METEORA') {\n // return this.getEstimatedApyAndVolumeOnRangeMeteora();\n // } else {\n // throw new Error(`Dex ${dex} is not supported`);\n // }\n // };\n\n getEstimatedApyAndVolumeOnRangeOrca = async () // pool: PublicKey,\n // lowerPrice: Decimal,\n // upperPrice: Decimal\n : Promise<GenericPositionRangeInfo> => {\n // todo\n return {\n estimatedApy: new Decimal(0),\n estimatedVolume: new Decimal(0),\n };\n };\n\n getEstimatedApyAndVolumeOnRangeRaydium = async () // pool: PublicKey,\n // lowerPrice: Decimal,\n // upperPrice: Decimal\n : Promise<GenericPositionRangeInfo> => {\n // todo\n return {\n estimatedApy: new Decimal(0),\n estimatedVolume: new Decimal(0),\n };\n };\n\n getEstimatedApyAndVolumeOnRangeMeteora = async () // pool: PublicKey,\n // lowerPrice: Decimal,\n // upperPrice: Decimal\n : Promise<GenericPositionRangeInfo> => {\n // todo\n return {\n estimatedApy: new Decimal(0),\n estimatedVolume: new Decimal(0),\n };\n };\n\n getManualPoolSimulatedValues = async (params: {\n pool: PublicKey;\n priceLower: Decimal;\n priceUpper: Decimal;\n startDate: string;\n endDate: string;\n }): Promise<PoolSimulationResponse> => {\n const { pool, startDate, endDate, priceLower, priceUpper } = params;\n return simulateManualPool({ poolAddress: pool, priceUpper, priceLower, depositDate: startDate, endDate });\n };\n\n getPercentagePoolSimulatedValues = async (\n params: SimulationPercentagePoolParameters\n ): Promise<PoolSimulationResponse> => {\n const { resetRangeWidthPercLower = 1, resetRangeWidthPercUpper = 1, ...rest } = params;\n return simulatePercentagePool({ resetRangeWidthPercLower, resetRangeWidthPercUpper, ...rest });\n };\n\n /**\n * Get a list of transactions to rebalance a Kamino strategy.\n * @param strategy strategy pubkey or object\n * @param newPosition new liquidity position account pubkey\n * @param priceLower new position's lower price of the range\n * @param priceUpper new position's upper price of the range\n * @returns list of transactions to rebalance (executive withdraw, collect fees/rewards, open new position, invest)\n */\n rebalance = async (\n strategy: PublicKey | StrategyWithAddress,\n newPosition: PublicKey,\n priceLower: Decimal,\n priceUpper: Decimal\n ): Promise<TransactionInstruction[]> => {\n // todo: refactor this to return an object, not a list\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n\n const ixs: TransactionInstruction[] = [];\n\n // if there are no invested tokens we don't need to collect fees and rewards\n const stratTokenBalances = await this.getStrategyTokensBalances(strategyWithAddress.strategy);\n if (\n strategyWithAddress.strategy.strategyDex.toNumber() == dexToNumber('ORCA') ||\n stratTokenBalances.invested.a.greaterThan(ZERO) ||\n stratTokenBalances.invested.b.greaterThan(ZERO)\n ) {\n ixs.push(await this.collectFeesAndRewards(strategyWithAddress));\n }\n\n ixs.push(await this.openPosition(strategyWithAddress, newPosition, priceLower, priceUpper, new Rebalancing()));\n\n return ixs;\n };\n\n /**\n * Deserialize a buffer to MintInfo\n * @param data Buffer\n * @returns\n */\n _deserializeMint(data: Buffer): MintInfo {\n if (data.length !== MintLayout.span) {\n throw new Error('Not a valid Mint');\n }\n\n const mintInfo = MintLayout.decode(data);\n\n if (mintInfo.mintAuthorityOption === 0) {\n mintInfo.mintAuthority = null;\n } else {\n mintInfo.mintAuthority = new PublicKey(mintInfo.mintAuthority);\n }\n\n mintInfo.supply = u64.fromBuffer(mintInfo.supply);\n mintInfo.isInitialized = mintInfo.isInitialized !== 0;\n\n if (mintInfo.freezeAuthorityOption === 0) {\n mintInfo.freezeAuthority = null;\n } else {\n mintInfo.freezeAuthority = new PublicKey(mintInfo.freezeAuthority);\n }\n\n return mintInfo;\n }\n\n /**\n * Get a list of user's Kamino strategy positions\n * @param wallet user wallet address\n * @param strategyFilters\n * @returns list of kamino strategy positions\n */\n getUserPositions = async (\n wallet: PublicKey,\n strategyFilters: StrategiesFilters = { strategyCreationStatus: 'LIVE' }\n ): Promise<KaminoPosition[]> => {\n const userTokenAccounts = await this.getAllTokenAccounts(wallet);\n const liveStrategies = await this.getAllStrategiesWithFilters(strategyFilters);\n const positions: KaminoPosition[] = [];\n for (const tokenAccount of userTokenAccounts) {\n const accountData = tokenAccount.account.data as Data;\n const strategy = liveStrategies.find((x) => x.strategy.sharesMint.toString() === accountData.parsed.info.mint);\n if (strategy) {\n positions.push({\n shareMint: strategy.strategy.sharesMint,\n strategy: strategy.address,\n sharesAmount: new Decimal(accountData.parsed.info.tokenAmount.uiAmountString),\n strategyDex: numberToDex(strategy.strategy.strategyDex.toNumber()),\n });\n }\n }\n return positions;\n };\n\n /**\n * Get a list of user's Kamino strategy positions\n * @param wallet user wallet address\n * @returns list of kamino strategy positions\n */\n getUserPositionsByStrategiesMap = async (\n wallet: PublicKey,\n strategiesWithShareMintsMap: PubkeyHashMap<PublicKey, KaminoStrategyWithShareMint>,\n strategiesWithAddressMap?: PubkeyHashMap<PublicKey, WhirlpoolStrategy>\n ): Promise<KaminoPosition[]> => {\n const tokenAccounts = await this._connection.getParsedTokenAccountsByOwner(wallet, {\n programId: TOKEN_PROGRAM_ID,\n });\n\n const mints = tokenAccounts.value.map((accountInfo) => {\n return new PublicKey(accountInfo.account.data.parsed.info.mint);\n });\n const mintInfos = await batchFetch(mints, (chunk) => this.getConnection().getMultipleAccountsInfo(chunk));\n\n const kaminoStrategyAdresses: PublicKey[] = [];\n const kaminoAccountInfos: Array<AccountInfo<ParsedAccountData>> = [];\n\n for (const index of mints.keys()) {\n const mint = mints[index];\n const mintInfo = mintInfos[index];\n const accountInfo = tokenAccounts.value[index];\n\n if (!mint || !mintInfo || !accountInfo) continue;\n\n const [expectedMintAuthority] = PublicKey.findProgramAddressSync(\n [Buffer.from('authority'), mint.toBuffer()],\n this.getProgramID()\n );\n\n const mintData = this._deserializeMint(mintInfo.data);\n\n if (mintData.mintAuthority !== null && mintData.mintAuthority.equals(expectedMintAuthority)) {\n const shareMintAddress = tokenAccounts.value[index].account.data.parsed.info.mint;\n const address = strategiesWithShareMintsMap.get(new PublicKey(shareMintAddress))?.address;\n\n if (!address) continue;\n\n kaminoStrategyAdresses.push(new PublicKey(address));\n kaminoAccountInfos.push(accountInfo.account);\n }\n }\n\n let strategies: (WhirlpoolStrategy | null)[] = strategiesWithAddressMap\n ? Array.from(strategiesWithAddressMap.values())\n : [];\n const missingStrategies = kaminoStrategyAdresses.filter(\n (x) => !strategiesWithAddressMap || !strategiesWithAddressMap.has(x)\n );\n const missingStrategiesState = await batchFetch(missingStrategies, (chunk) => this.getStrategies(chunk));\n strategies = strategies.concat(missingStrategiesState);\n\n const positions: KaminoPosition[] = [];\n\n for (const index of strategies.keys()) {\n const strategy = strategies[index];\n const accountData = kaminoAccountInfos[index];\n const address = kaminoStrategyAdresses[index];\n\n if (!strategy || !accountData) {\n continue;\n }\n\n positions.push({\n shareMint: strategy.sharesMint,\n strategy: address,\n sharesAmount: new Decimal(accountData.data.parsed.info.tokenAmount.uiAmountString),\n strategyDex: numberToDex(strategy.strategyDex.toNumber()),\n });\n }\n\n return positions;\n };\n\n /**\n * Get Kamino strategy vault APY/APR\n * @param strategy strategy pubkey or onchain state\n * @param orcaPools not required, but you can add orca whirlpools if you're caching them, and we don't refetch every time\n * @param raydiumPools not required, but you can add raydium pools if you're caching them, and we don't refetch every time\n */\n getStrategyAprApy = async (\n strategy: PublicKey | StrategyWithAddress,\n orcaPools?: OrcaPool[],\n raydiumPools?: Pool[]\n ): Promise<WhirlpoolAprApy> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const dex = Number(strategyState.strategyDex);\n const isOrca = dexToNumber('ORCA') === dex;\n const isRaydium = dexToNumber('RAYDIUM') === dex;\n const isMeteora = dexToNumber('METEORA') === dex;\n if (strategyState.position.equals(PublicKey.default)) {\n return {\n totalApr: ZERO,\n feeApr: ZERO,\n totalApy: ZERO,\n feeApy: ZERO,\n priceUpper: ZERO,\n priceLower: ZERO,\n rewardsApr: [],\n rewardsApy: [],\n poolPrice: ZERO,\n strategyOutOfRange: false,\n };\n }\n if (isOrca) {\n const prices = await this.getAllPrices();\n const collateralInfos = await this.getCollateralInfos();\n return this._orcaService.getStrategyWhirlpoolPoolAprApy(strategyState, collateralInfos, prices, orcaPools);\n }\n if (isRaydium) {\n return this._raydiumService.getStrategyWhirlpoolPoolAprApy(strategyState, raydiumPools);\n }\n if (isMeteora) {\n return this._meteoraService.getStrategyMeteoraPoolAprApy(strategyState);\n }\n throw Error(`Strategy dex ${dex} not supported`);\n };\n\n getStrategyPerformanceFees = async (\n strategy: PublicKey | StrategyWithAddress,\n globalConfig?: GlobalConfig\n ): Promise<PerformanceFees> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const globalConfigState = globalConfig || (await this.getGlobalConfigState(strategyState.globalConfig));\n\n if (globalConfigState == null) {\n throw new Error(`Unable to fetch GlobalConfig with Pubkey ${strategyState.globalConfig}`);\n }\n const globalConfigMinPerformanceFee = new Decimal(globalConfigState.minPerformanceFeeBps.toString());\n\n const strategyFeesFee = new Decimal(strategyState.feesFee.toString());\n const strategyReward0Fee = new Decimal(strategyState.reward0Fee.toString());\n const strategyReward1Fee = new Decimal(strategyState.reward1Fee.toString());\n const strategyReward2Fee = new Decimal(strategyState.reward2Fee.toString());\n\n return {\n feesFeeBPS: Decimal.max(strategyFeesFee, globalConfigMinPerformanceFee),\n reward0FeeBPS: Decimal.max(strategyReward0Fee, globalConfigMinPerformanceFee),\n reward1FeeBPS: Decimal.max(strategyReward1Fee, globalConfigMinPerformanceFee),\n reward2FeeBPS: Decimal.max(strategyReward2Fee, globalConfigMinPerformanceFee),\n };\n };\n\n getLiquidityDistributionRaydiumPool = (\n pool: PublicKey,\n keepOrder: boolean = true,\n lowestTick?: number,\n highestTick?: number\n ): Promise<LiquidityDistribution> => {\n return this._raydiumService.getRaydiumPoolLiquidityDistribution(pool, keepOrder, lowestTick, highestTick);\n };\n\n getLiquidityDistributionMeteoraPool = (\n pool: PublicKey,\n keepOrder: boolean = true,\n lowestTick?: number,\n highestTick?: number\n ): Promise<LiquidityDistribution> => {\n return this._meteoraService.getMeteoraLiquidityDistribution(pool, keepOrder, lowestTick, highestTick);\n };\n\n getLiquidityDistributionOrcaWhirlpool = (\n pool: PublicKey,\n keepOrder: boolean = true,\n lowestTick?: number,\n highestTick?: number\n ): Promise<LiquidityDistribution> => {\n return this._orcaService.getWhirlpoolLiquidityDistribution(pool, keepOrder, lowestTick, highestTick);\n };\n\n getLiquidityDistribution = async (\n dex: Dex,\n pool: PublicKey,\n keepOrder: boolean = true,\n lowestTick?: number,\n highestTick?: number\n ): Promise<LiquidityDistribution> => {\n if (dex == 'ORCA') {\n return this.getLiquidityDistributionOrcaWhirlpool(pool, keepOrder, lowestTick, highestTick);\n } else if (dex == 'RAYDIUM') {\n return this.getLiquidityDistributionRaydiumPool(pool, keepOrder, lowestTick, highestTick);\n } else if (dex == 'METEORA') {\n return this.getLiquidityDistributionMeteoraPool(pool, keepOrder, lowestTick, highestTick);\n } else {\n throw Error(`Dex ${dex} not supported`);\n }\n };\n\n getPositionsCountForPool = async (dex: Dex, pool: PublicKey): Promise<number> => {\n if (dex == 'ORCA') {\n return this._orcaService.getPositionsCountByPool(pool);\n } else if (dex == 'RAYDIUM') {\n return this._raydiumService.getPositionsCountByPool(pool);\n } else if (dex == 'METEORA') {\n return this._meteoraService.getPositionsCountByPool(pool);\n } else {\n throw Error(`Dex ${dex} not supported`);\n }\n };\n\n getStrategyTokensHoldings = async (\n strategy: PublicKey | StrategyWithAddress,\n mode: 'DEPOSIT' | 'WITHDRAW' = 'WITHDRAW'\n ): Promise<TokenAmounts> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const holdings = await this.getStrategyTokensBalances(strategyState, mode);\n\n const totalA = holdings.available.a.add(holdings.invested.a);\n const totalB = holdings.available.b.add(holdings.invested.b);\n\n return { a: totalA, b: totalB };\n };\n\n /**\n * Get ratio of total_a_in_strategy/total_b_in_strategy; if the total_b_in_strategy is 0 throws;\n * @param strategy\n * @param amountA\n */\n getStrategyTokensRatio = async (strategy: PublicKey | StrategyWithAddress): Promise<Decimal> => {\n const totalHoldings = await this.getStrategyTokensHoldings(strategy);\n return totalHoldings.a.div(totalHoldings.b);\n };\n\n calculateAmountsToBeDepositedWithSwap = async (\n strategy: PublicKey | StrategyWithAddress,\n tokenAAmountUserDeposit: Decimal,\n tokenBAmountUserDeposit: Decimal,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution,\n priceAInB?: Decimal\n ): Promise<DepositAmountsForSwap> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const strategyState = strategyWithAddress.strategy;\n\n if (!priceAInB) {\n priceAInB = await this.getCurrentPrice(strategyWithAddress);\n }\n const priceBInA = new Decimal(1).div(priceAInB);\n\n const tokenADecimals = strategyState.tokenAMintDecimals.toNumber();\n const tokenBDecimals = strategyState.tokenBMintDecimals.toNumber();\n const tokenADecimalsDiff = tokenADecimals - tokenBDecimals;\n const tokenAAddDecimals = tokenADecimalsDiff > 0 ? 0 : Math.abs(tokenADecimalsDiff);\n const tokenBAddDecimals = tokenADecimalsDiff > 0 ? Math.abs(tokenADecimalsDiff) : 0;\n\n const aAmount = tokenAAmountUserDeposit;\n const bAmount = tokenBAmountUserDeposit;\n\n const [aAmounts, bAmounts] = await profiler(\n this.calculateAmountsRatioToBeDeposited(strategyWithAddress, undefined, profiler),\n 'C-calculateDepositRatio',\n []\n );\n\n const orcaAmountA = aAmounts.div(new Decimal(10).pow(tokenADecimals));\n const orcaAmountB = bAmounts.div(new Decimal(10).pow(tokenBDecimals));\n\n // multiply by tokens delta to make sure that both values uses the same about of decimals\n const totalUserDepositInA = aAmount\n .mul(10 ** tokenAAddDecimals)\n .add(bAmount.mul(10 ** tokenBAddDecimals).mul(priceBInA));\n\n // if the strategy is out of range we will deposit only one token so we will need to swap everything to that token\n if (orcaAmountA.eq(ZERO)) {\n const requiredAAmountToDeposit = ZERO;\n const requiredBAmountToDeposit = totalUserDepositInA.mul(priceAInB);\n\n const tokenAToSwapAmount = requiredAAmountToDeposit.sub(tokenAAmountUserDeposit);\n const tokenBToSwapAmount = requiredBAmountToDeposit.sub(tokenBAmountUserDeposit);\n\n const depositAmountsForSwap: DepositAmountsForSwap = {\n requiredAAmountToDeposit,\n requiredBAmountToDeposit,\n tokenAToSwapAmount,\n tokenBToSwapAmount,\n };\n\n return depositAmountsForSwap;\n }\n\n if (orcaAmountB.eq(ZERO)) {\n const requiredAAmountToDeposit = totalUserDepositInA;\n const requiredBAmountToDeposit = ZERO;\n\n const tokenAToSwapAmount = requiredAAmountToDeposit.sub(tokenAAmountUserDeposit);\n const tokenBToSwapAmount = requiredBAmountToDeposit.sub(tokenBAmountUserDeposit);\n\n const depositAmountsForSwap: DepositAmountsForSwap = {\n requiredAAmountToDeposit,\n requiredBAmountToDeposit,\n tokenAToSwapAmount,\n tokenBToSwapAmount,\n };\n\n return depositAmountsForSwap;\n }\n let ratio = orcaAmountA.div(orcaAmountB);\n ratio = ratio.div(priceBInA);\n\n const requiredAAmountToDeposit = totalUserDepositInA\n .mul(ratio)\n .div(ratio.add(1))\n .div(10 ** tokenAAddDecimals);\n const requiredBAmountToDeposit = totalUserDepositInA\n .sub(requiredAAmountToDeposit.mul(10 ** tokenAAddDecimals))\n .div(10 ** tokenBAddDecimals)\n .mul(priceAInB);\n\n const tokenAToSwapAmount = requiredAAmountToDeposit.sub(tokenAAmountUserDeposit);\n const tokenBToSwapAmount = requiredBAmountToDeposit.sub(tokenBAmountUserDeposit);\n\n const depositAmountsForSwap: DepositAmountsForSwap = {\n requiredAAmountToDeposit,\n requiredBAmountToDeposit,\n tokenAToSwapAmount,\n tokenBToSwapAmount,\n };\n\n return depositAmountsForSwap;\n };\n\n /**\n * @deprecated The method should not be used\n */\n calculateAmountsDistributionWithPriceRange = async (\n dex: Dex,\n pool: PublicKey,\n lowerPrice: Decimal,\n upperPrice: Decimal\n ): Promise<[Decimal, Decimal]> => {\n const tokenAAmountToDeposit = new Decimal(100.0);\n\n if (dex == 'RAYDIUM') {\n const poolState = await PoolState.fetch(this._connection, pool);\n if (!poolState) {\n throw new Error(`Raydium poolState ${pool.toString()} is not found`);\n }\n const decimalsA = poolState.mintDecimals0;\n const decimalsB = poolState.mintDecimals1;\n\n const { amountA, amountB } = LiquidityMath.getAmountsFromLiquidity(\n poolState.sqrtPriceX64,\n SqrtPriceMath.priceToSqrtPriceX64(lowerPrice, decimalsA, decimalsB),\n SqrtPriceMath.priceToSqrtPriceX64(upperPrice, decimalsA, decimalsB),\n new BN(100_000_000),\n true\n );\n\n const amountADecimal = new Decimal(amountA.toString());\n const amountBDecimal = new Decimal(amountB.toString());\n return [lamportsToNumberDecimal(amountADecimal, decimalsA), lamportsToNumberDecimal(amountBDecimal, decimalsB)];\n } else if (dex == 'ORCA') {\n const whirlpoolState = await Whirlpool.fetch(this._connection, pool);\n if (!whirlpoolState) {\n throw new Error(`Raydium poolState ${pool.toString()} is not found`);\n }\n const tokenMintA = whirlpoolState.tokenMintA;\n const tokenMintB = whirlpoolState.tokenMintB;\n const decimalsA = await getMintDecimals(this._connection, tokenMintA);\n const decimalsB = await getMintDecimals(this._connection, tokenMintB);\n\n const tickLowerIndex = getNearestValidTickIndexFromTickIndex(\n priceToTickIndex(lowerPrice, decimalsA, decimalsB),\n whirlpoolState.tickSpacing\n );\n const tickUpperIndex = getNearestValidTickIndexFromTickIndex(\n priceToTickIndex(upperPrice, decimalsA, decimalsB),\n whirlpoolState.tickSpacing\n );\n\n const params: InternalAddLiquidityQuoteParam = {\n tokenMintA,\n tokenMintB,\n tickCurrentIndex: whirlpoolState.tickCurrentIndex,\n sqrtPrice: whirlpoolState.sqrtPrice,\n inputTokenMint: tokenMintA,\n inputTokenAmount: new BN(collToLamportsDecimal(tokenAAmountToDeposit, decimalsA).toString()),\n tickLowerIndex,\n tickUpperIndex,\n slippageTolerance: defaultSlippagePercentage,\n };\n\n const addLiqResult: InternalAddLiquidityQuote = getAddLiquidityQuote(params);\n return [\n lamportsToNumberDecimal(addLiqResult.estTokenA.toNumber(), decimalsA),\n lamportsToNumberDecimal(addLiqResult.estTokenB.toNumber(), decimalsB),\n ];\n } else if (dex == 'METEORA') {\n const poolState = await LbPair.fetch(this._connection, pool);\n if (!poolState) {\n throw new Error(`Meteora poolState ${pool.toString()} is not found`);\n }\n // const tokenMintA = poolState.tokenXMint;\n // const tokenMintB = poolState.tokenYMint;\n // const decimalsA = await getMintDecimals(this._connection, tokenMintA);\n // const decimalsB = await getMintDecimals(this._connection, tokenMintB);\n\n return [new Decimal(0), new Decimal(0)];\n } else {\n throw new Error('Invalid dex, use RAYDIUM or ORCA or METEORA');\n }\n };\n\n calculateAmountsToBeDeposited = async (\n strategy: PublicKey | StrategyWithAddress,\n tokenAAmount?: Decimal,\n tokenBAmount?: Decimal,\n profiledFunctionExecution: ProfiledFunctionExecution = noopProfiledFunctionExecution\n ): Promise<[Decimal, Decimal]> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n if (strategyState.shareCalculationMethod === DOLAR_BASED) {\n return this.calculateDepostAmountsDollarBased(strategy, tokenAAmount, tokenBAmount);\n } else if (strategyState.shareCalculationMethod === PROPORTION_BASED) {\n return this.calculateDepositAmountsProportional(strategy, tokenAAmount, tokenBAmount, profiledFunctionExecution);\n } else {\n throw new Error('Invalid share calculation method');\n }\n };\n\n /// Returns an amount of tokenA and an amount of tokenB that define the ratio of the amounts that can be deposited\n calculateAmountsRatioToBeDeposited = async (\n strategy: PublicKey | StrategyWithAddress,\n holdings?: TokenAmounts,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution\n ): Promise<[Decimal, Decimal]> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n if (strategyState.shareCalculationMethod === DOLAR_BASED) {\n return this.calculateDepostAmountsDollarBased(strategy, new Decimal(100), undefined);\n } else if (strategyState.shareCalculationMethod === PROPORTION_BASED) {\n let tokenHoldings = holdings;\n if (!tokenHoldings) {\n tokenHoldings = await profiler(this.getStrategyTokensHoldings(strategy), 'getStrategyTokensHoldings', []);\n }\n const { a, b } = tokenHoldings;\n return [a, b];\n } else {\n throw new Error('Invalid share calculation method');\n }\n };\n\n calculateDepositAmountsProportional = async (\n strategy: PublicKey | StrategyWithAddress,\n tokenAAmount?: Decimal,\n tokenBAmount?: Decimal,\n profiler: ProfiledFunctionExecution = noopProfiledFunctionExecution\n ): Promise<[Decimal, Decimal]> => {\n if (!tokenAAmount && !tokenBAmount) {\n return [new Decimal(0), new Decimal(0)];\n }\n\n const totalHoldings = await profiler(this.getStrategyTokensHoldings(strategy), 'getStrategyTokensHoldings', []);\n // if we have no holdings, on the initial deposit we use the old method\n if (totalHoldings.a.eq(ZERO) && totalHoldings.b.eq(ZERO)) {\n return await this.calculateDepostAmountsDollarBased(strategy, tokenAAmount, tokenBAmount);\n }\n return await profiler(\n this.calculateDepositAmountsProportionalWithTotalTokens(totalHoldings, tokenAAmount, tokenBAmount),\n 'C-calculateDepositAmountsProportionalWithTotalTokens',\n []\n );\n };\n\n private calculateDepositAmountsProportionalWithTotalTokens = async (\n totalTokens: TokenAmounts,\n tokenAAmount?: Decimal,\n tokenBAmount?: Decimal\n ): Promise<[Decimal, Decimal]> => {\n if (totalTokens.a.eq(ZERO)) {\n return [ZERO, tokenBAmount ? tokenBAmount : new Decimal(Number.MAX_VALUE)];\n }\n if (totalTokens.b.eq(ZERO)) {\n return [tokenAAmount ? tokenAAmount : new Decimal(Number.MAX_VALUE), ZERO];\n }\n const tokensRatio = totalTokens.a.div(totalTokens.b);\n if (tokenAAmount) {\n const requiredBAmount = tokenAAmount.div(tokensRatio);\n if (!tokenBAmount || tokenBAmount.gt(requiredBAmount)) {\n return [tokenAAmount, requiredBAmount];\n } else {\n const requiredAAmount = tokenBAmount.mul(tokensRatio);\n return [requiredAAmount, tokenBAmount];\n }\n } else if (tokenBAmount) {\n const requiredAMount = tokenBAmount.mul(tokensRatio);\n return [requiredAMount, tokenBAmount];\n } else {\n throw new Error('Invalid params, one of tokenAAmount or tokenBAmount must be provided');\n }\n };\n\n calculateDepostAmountsDollarBased = async (\n strategy: PublicKey | StrategyWithAddress,\n tokenAAmount?: Decimal,\n tokenBAmount?: Decimal\n ): Promise<[Decimal, Decimal]> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const dex = Number(strategyState.strategyDex);\n const isOrca = dexToNumber('ORCA') === dex;\n const isRaydium = dexToNumber('RAYDIUM') === dex;\n const isMeteora = dexToNumber('METEORA') === dex;\n if (isOrca) {\n const whirlpool = await Whirlpool.fetch(this._connection, strategyState.pool);\n if (!whirlpool) {\n throw new Error(`Unable to get Orca whirlpool for pubkey ${strategyState.pool}`);\n }\n\n return this.calculateAmountsOrca({\n whirlpoolConfig: whirlpool.whirlpoolsConfig,\n tokenAMint: strategyState.tokenAMint,\n tokenBMint: strategyState.tokenBMint,\n positionAddress: strategyState.position,\n tokenAAmount,\n tokenBAmount,\n });\n } else if (isRaydium) {\n return this.calculateAmountsRaydium({ strategyState, tokenAAmount, tokenBAmount });\n } else if (isMeteora) {\n return this.calculateAmountsMeteora({ strategyState, tokenAAmount, tokenBAmount });\n } else {\n throw new Error(`The strategy ${strategy.toString()} is not Orca or Raydium`);\n }\n };\n\n calculateAmountsOrca = async ({\n whirlpoolConfig,\n tokenAMint,\n tokenBMint,\n positionAddress,\n tokenAAmount,\n tokenBAmount,\n }: {\n whirlpoolConfig: PublicKey;\n tokenAMint: PublicKey;\n tokenBMint: PublicKey;\n positionAddress: PublicKey;\n tokenAAmount?: Decimal;\n tokenBAmount?: Decimal;\n }): Promise<[Decimal, Decimal]> => {\n if (!tokenAAmount && !tokenBAmount) {\n return [new Decimal(0), new Decimal(0)];\n }\n // Given A in ATA, calc how much A and B\n const accessor = new OrcaDAL(whirlpoolConfig, WHIRLPOOL_PROGRAM_ID, this._connection);\n const orcaPosition = new OrcaPosition(accessor);\n const defaultSlippagePercentage = Percentage.fromFraction(1, 1000); // 0.1%\n\n const primaryTokenAmount = tokenAAmount || tokenBAmount;\n const primaryTokenMint = tokenAAmount ? tokenAMint : tokenBMint;\n const secondaryTokenAmount = tokenAAmount ? tokenBAmount : tokenAAmount;\n const secondaryTokenMint = tokenAAmount ? tokenBMint : tokenAMint;\n\n let params: AddLiquidityQuoteParam = {\n positionAddress,\n tokenMint: primaryTokenMint,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tokenAmount: new BN(primaryTokenAmount!.toString()), // safe to use ! here because we check in the beginning that at least one of the amounts are not undefined;\n refresh: true,\n slippageTolerance: defaultSlippagePercentage,\n };\n const estimatedGivenPrimary: AddLiquidityQuote = await orcaPosition.getAddLiquidityQuote(params);\n\n if (\n secondaryTokenAmount &&\n new Decimal(estimatedGivenPrimary.estTokenB.toString()) > new Decimal(secondaryTokenAmount.toString())\n ) {\n params = {\n positionAddress,\n tokenMint: secondaryTokenMint,\n tokenAmount: new BN(secondaryTokenAmount.toString()),\n refresh: true,\n slippageTolerance: defaultSlippagePercentage,\n };\n const estimatedGivenSecondary: AddLiquidityQuote = await orcaPosition.getAddLiquidityQuote(params);\n return [\n new Decimal(estimatedGivenSecondary.estTokenA.toString()),\n new Decimal(estimatedGivenSecondary.estTokenB.toString()),\n ];\n }\n return [\n new Decimal(estimatedGivenPrimary.estTokenA.toString()),\n new Decimal(estimatedGivenPrimary.estTokenB.toString()),\n ];\n };\n\n calculateAmountsRaydium = async ({\n strategyState,\n tokenAAmount,\n tokenBAmount,\n }: {\n strategyState: WhirlpoolStrategy;\n tokenAAmount?: Decimal;\n tokenBAmount?: Decimal;\n }): Promise<[Decimal, Decimal]> => {\n if (!tokenAAmount && !tokenBAmount) {\n return [new Decimal(0), new Decimal(0)];\n }\n\n const poolState = await PoolState.fetch(this._connection, strategyState.pool);\n const position = await PersonalPositionState.fetch(this._connection, strategyState.position);\n\n if (!position) {\n throw new Error(`position ${strategyState.position.toString()} is not found`);\n }\n\n if (!poolState) {\n throw new Error(`poolState ${strategyState.pool.toString()} is not found`);\n }\n\n if (tokenAAmount && tokenBAmount && tokenAAmount.gt(0) && tokenBAmount.gt(0)) {\n const liquidity = LiquidityMath.getLiquidityFromTokenAmounts(\n poolState.sqrtPriceX64,\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex),\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex),\n new BN(tokenAAmount.toString()),\n new BN(tokenBAmount.toString())\n );\n\n const { amountA, amountB } = LiquidityMath.getAmountsFromLiquidity(\n poolState.sqrtPriceX64,\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex),\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex),\n liquidity,\n true\n );\n\n return [new Decimal(amountA.toString()), new Decimal(amountB.toString())];\n } else {\n const primaryTokenAmount = tokenAAmount || tokenBAmount;\n const secondaryTokenAmount = tokenAAmount ? tokenBAmount : tokenAAmount;\n\n const { amountA, amountB } = LiquidityMath.getAmountsFromLiquidity(\n poolState.sqrtPriceX64,\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickLowerIndex),\n SqrtPriceMath.getSqrtPriceX64FromTick(position.tickUpperIndex),\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n new BN(primaryTokenAmount!.plus(secondaryTokenAmount || 0)!.toString()), // safe to use ! here because we check in the beginning that at least one of the amounts are not undefined;\n true\n );\n\n const amountADecimal = new Decimal(amountA.toString());\n const amountBDecimal = new Decimal(amountB.toString());\n const ratio = amountADecimal.div(amountBDecimal);\n if (tokenAAmount === undefined || tokenAAmount.eq(ZERO)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return [tokenBAmount!.mul(ratio), tokenBAmount!];\n }\n\n if (tokenBAmount === undefined || tokenBAmount.eq(ZERO)) {\n return [tokenAAmount, tokenAAmount.div(ratio)];\n }\n }\n\n return [new Decimal(0), new Decimal(0)];\n };\n\n calculateAmountsMeteora = async ({\n strategyState,\n tokenAAmount,\n tokenBAmount,\n }: {\n strategyState: WhirlpoolStrategy;\n tokenAAmount?: Decimal;\n tokenBAmount?: Decimal;\n }): Promise<[Decimal, Decimal]> => {\n if (!tokenAAmount && !tokenBAmount) {\n return [new Decimal(0), new Decimal(0)];\n }\n\n const poolState = await LbPair.fetch(this._connection, strategyState.pool);\n if (!poolState) {\n throw new Error(`poolState ${strategyState.pool.toString()} is not found`);\n }\n\n // TODO: this is just a simple approximation, but it's used only for the first deposit.\n if (tokenAAmount && tokenBAmount && tokenAAmount.gt(0) && tokenBAmount.gt(0)) {\n // Use everything that is given in case there are both tokens\n return [tokenAAmount, tokenBAmount];\n } else {\n const binArrayIndex = binIdToBinArrayIndex(new BN(poolState.activeId));\n const [binArrayPk] = deriveBinArray(strategyState.pool, binArrayIndex, METEORA_PROGRAM_ID);\n const binArray = await BinArray.fetch(this._connection, binArrayPk);\n if (!binArray) {\n throw new Error(`bin array ${binArrayPk.toString()} is not found`);\n }\n const bin = getBinFromBinArray(poolState.activeId, binArray);\n let amountADecimal = new Decimal(0);\n let amountBDecimal = new Decimal(0);\n if (bin) {\n if (!bin.amountX.eq(new BN(0))) {\n amountADecimal = new Decimal(bin.amountX.toString());\n }\n if (!bin.amountY.eq(new BN(0))) {\n amountBDecimal = new Decimal(bin.amountY.toString());\n }\n } else {\n throw new Error(`bin ${poolState.activeId.toString()} is not found`);\n }\n\n if (amountADecimal.eq(ZERO) && amountBDecimal.eq(ZERO)) {\n const decimalsA = await getMintDecimals(this._connection, strategyState.tokenAMint);\n const decimalsB = await getMintDecimals(this._connection, strategyState.tokenBMint);\n const poolPrice = getPriceOfBinByBinIdWithDecimals(poolState.activeId, poolState.binStep, decimalsA, decimalsB);\n return [tokenAAmount || tokenBAmount!.div(poolPrice), tokenBAmount || tokenAAmount!.mul(poolPrice)];\n }\n\n if (amountBDecimal.eq(ZERO)) {\n return [tokenAAmount!, ZERO];\n }\n\n if (amountADecimal.eq(ZERO)) {\n return [ZERO, tokenBAmount!];\n }\n\n const ratio = amountADecimal.div(amountBDecimal);\n if (tokenAAmount === undefined || tokenAAmount.eq(ZERO)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const amountA = tokenBAmount!.mul(ratio) || new Decimal(0);\n return [amountA, tokenBAmount!];\n }\n\n if (tokenBAmount === undefined || tokenBAmount.eq(ZERO)) {\n const amountB = tokenAAmount.div(ratio) || new Decimal(0);\n return [tokenAAmount, amountB];\n }\n }\n\n return [new Decimal(0), new Decimal(0)];\n };\n\n /**\n * @deprecated The method should not be used\n */\n getDepositRatioFromTokenA = async (\n strategy: PublicKey | StrategyWithAddress,\n amountA: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const dex = Number(strategyState.strategyDex);\n\n const isOrca = dexToNumber('ORCA') === dex;\n const isRaydium = dexToNumber('RAYDIUM') === dex;\n const isMeteora = dexToNumber('METEORA') === dex;\n\n if (isOrca) {\n return this.getDepositRatioFromAOrca(strategy, amountA);\n }\n if (isRaydium) {\n return this.getDepositRatioFromARaydium(strategy, amountA);\n }\n if (isMeteora) {\n return this.getDepositRatioFromAMeteora(strategy);\n }\n throw Error(`Strategy dex ${dex} not supported`);\n };\n\n /**\n * @deprecated The method should not be used\n */\n getDepositRatioFromTokenB = async (\n strategy: PublicKey | StrategyWithAddress,\n amountB: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const dex = Number(strategyState.strategyDex);\n\n const isOrca = dexToNumber('ORCA') === dex;\n const isRaydium = dexToNumber('RAYDIUM') === dex;\n const isMeteora = dexToNumber('METEORA') === dex;\n\n if (isOrca) {\n return this.getDepositRatioFromBOrca(strategy, amountB);\n }\n if (isRaydium) {\n return this.getDepositRatioFromBRaydium(strategy, amountB);\n }\n if (isMeteora) {\n return this.getDepositRatioFromBMeteora(strategy);\n }\n throw Error(`Strategy dex ${dex} not supported`);\n };\n\n /**\n * Get the on-chain state of the terms&conditions signature for the owner\n * @param owner\n */\n async getUserTermsSignatureState(owner: PublicKey): Promise<TermsSignature | null> {\n const pdaSeed = [Buffer.from('signature'), owner.toBuffer()];\n const [signatureStateKey, _signatureStateBump] = PublicKey.findProgramAddressSync(pdaSeed, this._kaminoProgramId);\n\n return await TermsSignature.fetch(this._connection, signatureStateKey);\n }\n\n /**\n * Get the instruction to store the on chain owner signature of terms&conditions\n * @param owner\n * @param signature\n */\n async getUserTermsSignatureIx(owner: PublicKey, signature: Uint8Array): Promise<TransactionInstruction> {\n const pdaSeed = [Buffer.from('signature'), owner.toBuffer()];\n const [signatureStateKey, _signatureStateBump] = PublicKey.findProgramAddressSync(pdaSeed, this._kaminoProgramId);\n\n const args: SignTermsArgs = {\n signature: Array.from(signature),\n };\n\n const accounts: SignTermsAccounts = {\n owner: owner,\n ownerSignatureState: signatureStateKey,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n };\n\n return signTerms(args, accounts);\n }\n\n private async getDepositRatioFromAOrca(\n strategy: PublicKey | StrategyWithAddress,\n amountA: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const whirlpool = await Whirlpool.fetch(this._connection, strategyState.pool);\n if (!whirlpool) {\n throw Error(`Could not fetch whirlpool state with pubkey ${strategyState.pool.toString()}`);\n }\n\n const position = await Position.fetch(this._connection, strategyState.position);\n if (!position) {\n throw new Error(`Whirlpool position ${strategyState.position} does not exist`);\n }\n\n const params: InternalAddLiquidityQuoteParam = {\n tokenMintA: strategyState.tokenAMint,\n tokenMintB: strategyState.tokenBMint,\n tickCurrentIndex: whirlpool.tickCurrentIndex,\n sqrtPrice: whirlpool.sqrtPrice,\n inputTokenMint: strategyState.tokenAMint,\n inputTokenAmount: amountA,\n tickLowerIndex: position.tickLowerIndex,\n tickUpperIndex: position.tickUpperIndex,\n slippageTolerance: defaultSlippagePercentage,\n };\n\n const quote: InternalAddLiquidityQuote = getAddLiquidityQuote(params);\n\n return { amountSlippageA: quote.estTokenA, amountSlippageB: quote.estTokenB };\n }\n\n private async getDepositRatioFromAMeteora(\n strategy: PublicKey | StrategyWithAddress\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const poolStatePromise = LbPair.fetch(this._connection, strategyState.pool);\n const positionPromise = PositionV2.fetch(this._connection, strategyState.position);\n\n const [poolState, _position] = await Promise.all([poolStatePromise, positionPromise]);\n if (!poolState) {\n throw Error(`Could not fetch lb pair state with pubkey ${strategyState.pool.toString()}`);\n }\n\n return { amountSlippageA: new BN(0), amountSlippageB: new BN(0) };\n }\n\n private async getDepositRatioFromBMeteora(\n strategy: PublicKey | StrategyWithAddress\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const poolStatePromise = await LbPair.fetch(this._connection, strategyState.pool);\n const positionPromise = await PositionV2.fetch(this._connection, strategyState.position);\n const [poolState, _position] = await Promise.all([poolStatePromise, positionPromise]);\n\n if (!poolState) {\n throw Error(`Could not fetch lb pair state with pubkey ${strategyState.pool.toString()}`);\n }\n\n return { amountSlippageA: new BN(0), amountSlippageB: new BN(0) };\n }\n\n private getDepositRatioFromBOrca = async (\n strategy: PublicKey | StrategyWithAddress,\n amountB: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const whirlpool = await Whirlpool.fetch(this._connection, strategyState.pool);\n if (!whirlpool) {\n throw Error(`Could not fetch whirlpool state with pubkey ${strategyState.pool.toString()}`);\n }\n\n const position = await Position.fetch(this._connection, strategyState.position);\n if (!position) {\n throw new Error(`Whirlpool position ${strategyState.position} does not exist`);\n }\n\n const params: InternalAddLiquidityQuoteParam = {\n tokenMintA: strategyState.tokenAMint,\n tokenMintB: strategyState.tokenBMint,\n tickCurrentIndex: whirlpool.tickCurrentIndex,\n sqrtPrice: whirlpool.sqrtPrice,\n inputTokenMint: strategyState.tokenBMint,\n inputTokenAmount: amountB,\n tickLowerIndex: position.tickLowerIndex,\n tickUpperIndex: position.tickUpperIndex,\n slippageTolerance: defaultSlippagePercentage,\n };\n\n const quote: InternalAddLiquidityQuote = getAddLiquidityQuote(params);\n\n return { amountSlippageA: quote.estTokenA, amountSlippageB: quote.estTokenB };\n };\n\n private getDepositRatioFromARaydium = async (\n strategy: PublicKey | StrategyWithAddress,\n amountA: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const poolState = await PoolState.fetch(this._connection, strategyState.pool);\n const positionState = await PersonalPositionState.fetch(this._connection, strategyState.position);\n\n if (!positionState) {\n throw new Error(`Raydium position ${strategyState.position.toString()} could not be found.`);\n }\n if (!poolState) {\n throw new Error(`Raydium pool ${strategyState.pool.toString()} could not be found.`);\n }\n\n const lowerSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(positionState.tickLowerIndex);\n const upperSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(positionState.tickUpperIndex);\n\n const liqudity = LiquidityMath.getLiquidityFromTokenAmountA(lowerSqrtPriceX64, upperSqrtPriceX64, amountA, false);\n const amountsSlippage = LiquidityMath.getAmountsFromLiquidityWithSlippage(\n poolState.sqrtPriceX64,\n lowerSqrtPriceX64,\n upperSqrtPriceX64,\n liqudity,\n true,\n false,\n 1\n );\n\n return amountsSlippage;\n };\n\n private getDepositRatioFromBRaydium = async (\n strategy: PublicKey | StrategyWithAddress,\n amountB: BN\n ): Promise<{ amountSlippageA: BN; amountSlippageB: BN }> => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n\n const poolState = await PoolState.fetch(this._connection, strategyState.pool);\n const positionState = await PersonalPositionState.fetch(this._connection, strategyState.position);\n\n if (!positionState) {\n throw new Error(`Raydium position ${strategyState.position.toString()} could not be found.`);\n }\n if (!poolState) {\n throw new Error(`Raydium pool ${strategyState.pool.toString()} could not be found.`);\n }\n\n const lowerSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(positionState.tickLowerIndex);\n const upperSqrtPriceX64 = SqrtPriceMath.getSqrtPriceX64FromTick(positionState.tickUpperIndex);\n\n const liqudity = LiquidityMath.getLiquidityFromTokenAmountB(lowerSqrtPriceX64, upperSqrtPriceX64, amountB);\n const amountsSlippage = LiquidityMath.getAmountsFromLiquidityWithSlippage(\n poolState.sqrtPriceX64,\n lowerSqrtPriceX64,\n upperSqrtPriceX64,\n liqudity,\n true,\n false,\n 1\n );\n\n return amountsSlippage;\n };\n\n getCollateralInfo = async (address: PublicKey): Promise<CollateralInfo[]> => {\n const collateralInfos = await CollateralInfos.fetch(this._connection, address, this._kaminoProgramId);\n if (collateralInfos === null) {\n throw new Error('Could not fetch CollateralInfos');\n }\n return collateralInfos.infos;\n };\n\n getGlobalConfigState = async (address: PublicKey): Promise<GlobalConfig | null> => {\n return await GlobalConfig.fetch(this._connection, address, this._kaminoProgramId);\n };\n\n getWhirlpoolStrategy = async (address: PublicKey): Promise<WhirlpoolStrategy | null> => {\n return await WhirlpoolStrategy.fetch(this._connection, address, this._kaminoProgramId);\n };\n\n getWhirlpoolStrategies = async (addresses: PublicKey[]): Promise<Array<WhirlpoolStrategy | null>> => {\n return await WhirlpoolStrategy.fetchMultiple(this._connection, addresses, this._kaminoProgramId);\n };\n\n getStrategyVaultBalances = async (strategy: PublicKey | StrategyWithAddress) => {\n const { strategy: strategyState } = await this.getStrategyStateIfNotFetched(strategy);\n const vaults = await Promise.all([\n this.getTokenAccountBalance(strategyState.tokenAVault),\n this.getTokenAccountBalance(strategyState.tokenBVault),\n ]);\n const aVault = vaults[0];\n const bVault = vaults[1];\n return { aVault, bVault };\n };\n\n getUpdateStrategyParamsIxs = async (\n strategyAdmin: PublicKey,\n strategy: PublicKey,\n rebalanceType: Decimal,\n withdrawFeeBps?: Decimal,\n performanceFeeBps?: Decimal\n ): Promise<TransactionInstruction[]> => {\n const updateRebalanceTypeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateRebalanceType(),\n rebalanceType\n );\n\n let updateWithdrawalFeeIx: TransactionInstruction | null = null;\n if (withdrawFeeBps) {\n updateWithdrawalFeeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateWithdrawFee(),\n withdrawFeeBps\n );\n }\n\n if (!performanceFeeBps) {\n performanceFeeBps = DefaultPerformanceFeeBps;\n }\n const updateFeesFeeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateCollectFeesFee(),\n performanceFeeBps\n );\n const updateRewards0FeeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateReward0Fee(),\n performanceFeeBps\n );\n const updateRewards1FeeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateReward1Fee(),\n performanceFeeBps\n );\n const updateRewards2FeeIx = await getUpdateStrategyConfigIx(\n strategyAdmin,\n this._globalConfig,\n strategy,\n new UpdateReward2Fee(),\n performanceFeeBps\n );\n\n const ixs = [updateRebalanceTypeIx, updateFeesFeeIx, updateRewards0FeeIx, updateRewards1FeeIx, updateRewards2FeeIx];\n if (updateWithdrawalFeeIx) {\n ixs.push(updateWithdrawalFeeIx);\n }\n return ixs;\n };\n\n getUpdateRewardsIxs = async (\n strategyOwner: PublicKey,\n strategy: PublicKey | StrategyWithAddress\n ): Promise<[TransactionInstruction, Keypair][]> => {\n const strategyWithAddress = await this.getStrategyStateIfNotFetched(strategy);\n const strategyState = strategyWithAddress.strategy;\n if (!strategyState) {\n throw Error(`Could not fetch strategy state with pubkey ${strategy.toString()}`);\n }\n const globalConfig = await this.getGlobalConfigState(strategyState.globalConfig);\n if (!globalConfig) {\n throw Error(`Could not fetch global config with pubkey ${strategyState.globalConfig.toString()}`);\n }\n const collateralInfos = await this.getCollateralInfo(globalConfig.tokenInfos);\n const result: [TransactionInstruction, Keypair][] = [];\n if (strategyState.strategyDex.toNumber() == dexToNumber('ORCA')) {\n const whirlpool = await Whirlpool.fetch(this._connection, strategyState.pool);\n if (!whirlpool) {\n throw Error(`Could not fetch whirlpool state with pubkey ${strategyState.pool.toString()}`);\n }\n for (let i = 0; i < 3; i++) {\n if (!whirlpool.rewardInfos[i].mint.equals(PublicKey.default)) {\n const collateralId = this.getCollateralIdFromMint(whirlpool.rewardInfos[i].mint, collateralInfos);\n if (collateralId == -1) {\n throw Error(`Could not find collateral id for mint ${whirlpool.rewardInfos[i].mint.toString()}`);\n }\n\n const rewardVault = Keypair.generate();\n const args: UpdateRewardMappingArgs = {\n rewardIndex: i,\n collateralToken: collateralId,\n };\n\n const tokenProgram = await this.getAccountOwner(whirlpool.rewardInfos[i].mint);\n const accounts: UpdateRewardMappingAccounts = {\n payer: strategyOwner,\n globalConfig: strategyState.globalConfig,\n strategy: strategyWithAddress.address,\n pool: strategyState.pool,\n rewardMint: whirlpool.rewardInfos[i].mint,\n rewardVault: rewardVault.publicKey,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram,\n tokenInfos: globalConfig.tokenInfos,\n };\n\n const ix = updateRewardMapping(args, accounts);\n result.push([ix, rewardVault]);\n }\n }\n return result;\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('RAYDIUM')) {\n const poolState = await PoolState.fetch(this._connection, strategyState.pool);\n if (!poolState) {\n throw new Error(`Could not fetch whirlpool state with pubkey ${strategyState.pool.toString()}`);\n }\n for (let i = 0; i < 3; i++) {\n if (!poolState.rewardInfos[i].tokenMint.equals(PublicKey.default)) {\n const collateralId = this.getCollateralIdFromMint(poolState.rewardInfos[i].tokenMint, collateralInfos);\n if (collateralId == -1) {\n throw Error(`Could not find collateral id for mint ${poolState.rewardInfos[i].tokenMint.toString()}`);\n }\n\n const rewardVault = Keypair.generate();\n const args: UpdateRewardMappingArgs = {\n rewardIndex: i,\n collateralToken: collateralId,\n };\n\n const tokenProgram = await this.getAccountOwner(poolState.rewardInfos[i].tokenMint);\n const accounts: UpdateRewardMappingAccounts = {\n payer: strategyOwner,\n globalConfig: strategyState.globalConfig,\n strategy: strategyWithAddress.address,\n pool: strategyState.pool,\n rewardMint: poolState.rewardInfos[i].tokenMint,\n rewardVault: rewardVault.publicKey,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram,\n tokenInfos: globalConfig.tokenInfos,\n };\n\n const ix = updateRewardMapping(args, accounts);\n result.push([ix, rewardVault]);\n }\n }\n return result;\n } else if (strategyState.strategyDex.toNumber() == dexToNumber('METEORA')) {\n const poolState = await LbPair.fetch(this._connection, strategyState.pool);\n if (!poolState) {\n throw new Error(`Could not fetch meteora state with pubkey ${strategyState.pool.toString()}`);\n }\n for (let i = 0; i < 2; i++) {\n if (!poolState.rewardInfos[i].mint.equals(PublicKey.default)) {\n const collateralId = this.getCollateralIdFromMint(poolState.rewardInfos[i].mint, collateralInfos);\n if (collateralId == -1) {\n throw Error(`Could not find collateral id for mint ${poolState.rewardInfos[i].mint.toString()}`);\n }\n\n const rewardVault = Keypair.generate();\n const args: UpdateRewardMappingArgs = {\n rewardIndex: i,\n collateralToken: collateralId,\n };\n\n const tokenProgram = await this.getAccountOwner(poolState.rewardInfos[i].mint);\n const accounts: UpdateRewardMappingAccounts = {\n payer: strategyOwner,\n globalConfig: strategyState.globalConfig,\n strategy: strategyWithAddress.address,\n pool: strategyState.pool,\n rewardMint: poolState.rewardInfos[i].mint,\n rewardVault: rewardVault.publicKey,\n baseVaultAuthority: strategyState.baseVaultAuthority,\n systemProgram: SystemProgram.programId,\n rent: SYSVAR_RENT_PUBKEY,\n tokenProgram,\n tokenInfos: globalConfig.tokenInfos,\n };\n\n const ix = updateRewardMapping(args, accounts);\n result.push([ix, rewardVault]);\n }\n }\n return result;\n } else {\n throw new Error(`Dex ${strategyState.strategyDex} not supported`);\n }\n };\n\n /**\n * Get the instruction to create an Orca Whirlpool tick, if it does not exist\n * @param payer\n * @param pool\n * @param price\n * @return tickPubkey, (tickInstruction | undefined)\n */\n initializeTickForOrcaPool = async (\n payer: PublicKey,\n pool: PublicKey | WhirlpoolWithAddress,\n price: Decimal\n ): Promise<InitPoolTickIfNeeded> => {\n const { address: poolAddress, whirlpool: whilrpoolState } = await this.getWhirlpoolStateIfNotFetched(pool);\n\n const decimalsA = await getMintDecimals(this._connection, whilrpoolState.tokenMintA);\n const decimalsB = await getMintDecimals(this._connection, whilrpoolState.tokenMintB);\n const tickIndex = getNextValidTickIndex(priceToTickIndex(price, decimalsA, decimalsB), whilrpoolState.tickSpacing);\n const startTickIndex = getStartTickIndex(tickIndex, whilrpoolState.tickSpacing);\n\n const [startTickIndexPk, _startTickIndexBump] = getTickArray(WHIRLPOOL_PROGRAM_ID, poolAddress, startTickIndex);\n const tick = await TickArray.fetch(this._connection, startTickIndexPk);\n // initialize tick if it doesn't exist\n if (!tick) {\n const initTickArrayArgs: InitializeTickArrayArgs = {\n startTickIndex,\n };\n const initTickArrayAccounts: InitializeTickArrayAccounts = {\n whirlpool: poolAddress,\n funder: payer,\n tickArray: startTickIndexPk,\n systemProgram: SystemProgram.programId,\n };\n return {\n tick: startTickIndexPk,\n initTickIx: initializeTickArray(initTickArrayArgs, initTickArrayAccounts),\n };\n }\n return {\n tick: startTickIndexPk,\n initTickIx: undefined,\n };\n };\n\n initializeTickForMeteoraPool = async (\n payer: PublicKey,\n pool: PublicKey | LbPairWithAddress,\n price: Decimal\n ): Promise<InitPoolTickIfNeeded> => {\n const { address: poolAddress, pool: poolState } = await this.getMeteoraStateIfNotFetched(pool);\n\n const decimalsA = await getMintDecimals(this._connection, poolState.tokenXMint);\n const decimalsB = await getMintDecimals(this._connection, poolState.tokenYMint);\n const binArray = getBinIdFromPriceWithDecimals(price, poolState.binStep, true, decimalsA, decimalsB);\n const binArrayIndex = binIdToBinArrayIndex(new BN(binArray));\n\n const [startTickIndexPk, _startTickIndexBump] = deriveBinArray(poolAddress, binArrayIndex, METEORA_PROGRAM_ID);\n const tick = await TickArray.fetch(this._connection, startTickIndexPk);\n // initialize tick if it doesn't exist\n if (!tick) {\n const initTickArrayArgs: InitializeBinArrayArgs = {\n index: new BN(binArrayIndex),\n };\n const initTickArrayAccounts: InitializeBinArrayAccounts = {\n funder: payer,\n binArray: startTickIndexPk,\n systemProgram: SystemProgram.programId,\n lbPair: poolAddress,\n };\n return {\n tick: startTickIndexPk,\n initTickIx: initializeBinArray(initTickArrayArgs, initTickArrayAccounts),\n };\n }\n return {\n tick: startTickIndexPk,\n initTickIx: undefined,\n };\n };\n}\n\nexport default Kamino;\n"]}
|