/**
* This code was AUTOGENERATED using the Codama library.
* Please DO NOT EDIT THIS FILE, instead use visitors
* to add features, then rerun Codama to update it.
*
* @see https://github.com/codama-idl/codama
*/
import {
assertAccountExists,
assertAccountsExist,
combineCodec,
decodeAccount,
fetchEncodedAccount,
fetchEncodedAccounts,
fixDecoderSize,
fixEncoderSize,
getAddressDecoder,
getAddressEncoder,
getArrayDecoder,
getArrayEncoder,
getBytesDecoder,
getBytesEncoder,
getStructDecoder,
getStructEncoder,
getU128Decoder,
getU128Encoder,
getU32Decoder,
getU32Encoder,
getU64Decoder,
getU64Encoder,
getU8Decoder,
getU8Encoder,
transformEncoder,
type Account,
type Address,
type EncodedAccount,
type FetchAccountConfig,
type FetchAccountsConfig,
type FixedSizeCodec,
type FixedSizeDecoder,
type FixedSizeEncoder,
type MaybeAccount,
type MaybeEncodedAccount,
type ReadonlyUint8Array,
} from "@solana/kit";
import {
getKaminoRewardInfoDecoder,
getKaminoRewardInfoEncoder,
getPriceDecoder,
getPriceEncoder,
getRebalanceRawDecoder,
getRebalanceRawEncoder,
getWithdrawalCapsDecoder,
getWithdrawalCapsEncoder,
type KaminoRewardInfo,
type KaminoRewardInfoArgs,
type Price,
type PriceArgs,
type RebalanceRaw,
type RebalanceRawArgs,
type WithdrawalCaps,
type WithdrawalCapsArgs,
} from "../types";
export const WHIRLPOOL_STRATEGY_DISCRIMINATOR = new Uint8Array([
190, 178, 231, 184, 49, 186, 103, 13,
]);
export function getWhirlpoolStrategyDiscriminatorBytes() {
return fixEncoderSize(getBytesEncoder(), 8).encode(
WHIRLPOOL_STRATEGY_DISCRIMINATOR,
);
}
export type WhirlpoolStrategy = {
discriminator: ReadonlyUint8Array;
adminAuthority: Address;
globalConfig: Address;
baseVaultAuthority: Address;
baseVaultAuthorityBump: bigint;
pool: Address;
poolTokenVaultA: Address;
poolTokenVaultB: Address;
tickArrayLower: Address;
tickArrayUpper: Address;
position: Address;
positionMint: Address;
positionMetadata: Address;
positionTokenAccount: Address;
tokenAVault: Address;
tokenBVault: Address;
deprecated0: Array
;
deprecated1: Array;
tokenAMint: Address;
tokenBMint: Address;
tokenAMintDecimals: bigint;
tokenBMintDecimals: bigint;
tokenAAmounts: bigint;
tokenBAmounts: bigint;
tokenACollateralId: bigint;
tokenBCollateralId: bigint;
scopePrices: Address;
deprecated2: Address;
sharesMint: Address;
sharesMintDecimals: bigint;
sharesMintAuthority: Address;
sharesMintAuthorityBump: bigint;
sharesIssued: bigint;
status: bigint;
reward0Amount: bigint;
reward0Vault: Address;
reward0CollateralId: bigint;
reward0Decimals: bigint;
reward1Amount: bigint;
reward1Vault: Address;
reward1CollateralId: bigint;
reward1Decimals: bigint;
reward2Amount: bigint;
reward2Vault: Address;
reward2CollateralId: bigint;
reward2Decimals: bigint;
depositCapUsd: bigint;
feesACumulative: bigint;
feesBCumulative: bigint;
reward0AmountCumulative: bigint;
reward1AmountCumulative: bigint;
reward2AmountCumulative: bigint;
depositCapUsdPerIxn: bigint;
withdrawalCapA: WithdrawalCaps;
withdrawalCapB: WithdrawalCaps;
maxPriceDeviationBps: bigint;
swapVaultMaxSlippageBps: number;
swapVaultMaxSlippageFromReferenceBps: number;
strategyType: bigint;
padding0: bigint;
withdrawFee: bigint;
feesFee: bigint;
reward0Fee: bigint;
reward1Fee: bigint;
reward2Fee: bigint;
positionTimestamp: bigint;
kaminoRewards: Array;
strategyDex: bigint;
raydiumProtocolPositionOrBaseVaultAuthority: Address;
allowDepositWithoutInvest: bigint;
raydiumPoolConfigOrBaseVaultAuthority: Address;
depositBlocked: number;
creationStatus: number;
investBlocked: number;
/** share_calculation_method can be either DOLAR_BASED=0 or PROPORTION_BASED=1 */
shareCalculationMethod: number;
withdrawBlocked: number;
reservedFlag2: number;
localAdminBlocked: number;
flashVaultSwapAllowed: number;
referenceSwapPriceA: Price;
referenceSwapPriceB: Price;
isCommunity: number;
rebalanceType: number;
padding1: ReadonlyUint8Array;
rebalanceRaw: RebalanceRaw;
padding2: ReadonlyUint8Array;
tokenAFeesFromRewardsCumulative: bigint;
tokenBFeesFromRewardsCumulative: bigint;
strategyLookupTable: Address;
lastSwapUnevenStepTimestamp: bigint;
farm: Address;
rebalancesCap: WithdrawalCaps;
swapUnevenAuthority: Address;
tokenATokenProgram: Address;
tokenBTokenProgram: Address;
pendingAdmin: Address;
padding3: bigint;
padding4: Array;
padding5: Array;
padding6: Array;
padding7: Array;
};
export type WhirlpoolStrategyArgs = {
adminAuthority: Address;
globalConfig: Address;
baseVaultAuthority: Address;
baseVaultAuthorityBump: number | bigint;
pool: Address;
poolTokenVaultA: Address;
poolTokenVaultB: Address;
tickArrayLower: Address;
tickArrayUpper: Address;
position: Address;
positionMint: Address;
positionMetadata: Address;
positionTokenAccount: Address;
tokenAVault: Address;
tokenBVault: Address;
deprecated0: Array;
deprecated1: Array;
tokenAMint: Address;
tokenBMint: Address;
tokenAMintDecimals: number | bigint;
tokenBMintDecimals: number | bigint;
tokenAAmounts: number | bigint;
tokenBAmounts: number | bigint;
tokenACollateralId: number | bigint;
tokenBCollateralId: number | bigint;
scopePrices: Address;
deprecated2: Address;
sharesMint: Address;
sharesMintDecimals: number | bigint;
sharesMintAuthority: Address;
sharesMintAuthorityBump: number | bigint;
sharesIssued: number | bigint;
status: number | bigint;
reward0Amount: number | bigint;
reward0Vault: Address;
reward0CollateralId: number | bigint;
reward0Decimals: number | bigint;
reward1Amount: number | bigint;
reward1Vault: Address;
reward1CollateralId: number | bigint;
reward1Decimals: number | bigint;
reward2Amount: number | bigint;
reward2Vault: Address;
reward2CollateralId: number | bigint;
reward2Decimals: number | bigint;
depositCapUsd: number | bigint;
feesACumulative: number | bigint;
feesBCumulative: number | bigint;
reward0AmountCumulative: number | bigint;
reward1AmountCumulative: number | bigint;
reward2AmountCumulative: number | bigint;
depositCapUsdPerIxn: number | bigint;
withdrawalCapA: WithdrawalCapsArgs;
withdrawalCapB: WithdrawalCapsArgs;
maxPriceDeviationBps: number | bigint;
swapVaultMaxSlippageBps: number;
swapVaultMaxSlippageFromReferenceBps: number;
strategyType: number | bigint;
padding0: number | bigint;
withdrawFee: number | bigint;
feesFee: number | bigint;
reward0Fee: number | bigint;
reward1Fee: number | bigint;
reward2Fee: number | bigint;
positionTimestamp: number | bigint;
kaminoRewards: Array;
strategyDex: number | bigint;
raydiumProtocolPositionOrBaseVaultAuthority: Address;
allowDepositWithoutInvest: number | bigint;
raydiumPoolConfigOrBaseVaultAuthority: Address;
depositBlocked: number;
creationStatus: number;
investBlocked: number;
/** share_calculation_method can be either DOLAR_BASED=0 or PROPORTION_BASED=1 */
shareCalculationMethod: number;
withdrawBlocked: number;
reservedFlag2: number;
localAdminBlocked: number;
flashVaultSwapAllowed: number;
referenceSwapPriceA: PriceArgs;
referenceSwapPriceB: PriceArgs;
isCommunity: number;
rebalanceType: number;
padding1: ReadonlyUint8Array;
rebalanceRaw: RebalanceRawArgs;
padding2: ReadonlyUint8Array;
tokenAFeesFromRewardsCumulative: number | bigint;
tokenBFeesFromRewardsCumulative: number | bigint;
strategyLookupTable: Address;
lastSwapUnevenStepTimestamp: number | bigint;
farm: Address;
rebalancesCap: WithdrawalCapsArgs;
swapUnevenAuthority: Address;
tokenATokenProgram: Address;
tokenBTokenProgram: Address;
pendingAdmin: Address;
padding3: number | bigint;
padding4: Array;
padding5: Array;
padding6: Array;
padding7: Array;
};
/** Gets the encoder for {@link WhirlpoolStrategyArgs} account data. */
export function getWhirlpoolStrategyEncoder(): FixedSizeEncoder {
return transformEncoder(
getStructEncoder([
["discriminator", fixEncoderSize(getBytesEncoder(), 8)],
["adminAuthority", getAddressEncoder()],
["globalConfig", getAddressEncoder()],
["baseVaultAuthority", getAddressEncoder()],
["baseVaultAuthorityBump", getU64Encoder()],
["pool", getAddressEncoder()],
["poolTokenVaultA", getAddressEncoder()],
["poolTokenVaultB", getAddressEncoder()],
["tickArrayLower", getAddressEncoder()],
["tickArrayUpper", getAddressEncoder()],
["position", getAddressEncoder()],
["positionMint", getAddressEncoder()],
["positionMetadata", getAddressEncoder()],
["positionTokenAccount", getAddressEncoder()],
["tokenAVault", getAddressEncoder()],
["tokenBVault", getAddressEncoder()],
["deprecated0", getArrayEncoder(getAddressEncoder(), { size: 2 })],
["deprecated1", getArrayEncoder(getU64Encoder(), { size: 2 })],
["tokenAMint", getAddressEncoder()],
["tokenBMint", getAddressEncoder()],
["tokenAMintDecimals", getU64Encoder()],
["tokenBMintDecimals", getU64Encoder()],
["tokenAAmounts", getU64Encoder()],
["tokenBAmounts", getU64Encoder()],
["tokenACollateralId", getU64Encoder()],
["tokenBCollateralId", getU64Encoder()],
["scopePrices", getAddressEncoder()],
["deprecated2", getAddressEncoder()],
["sharesMint", getAddressEncoder()],
["sharesMintDecimals", getU64Encoder()],
["sharesMintAuthority", getAddressEncoder()],
["sharesMintAuthorityBump", getU64Encoder()],
["sharesIssued", getU64Encoder()],
["status", getU64Encoder()],
["reward0Amount", getU64Encoder()],
["reward0Vault", getAddressEncoder()],
["reward0CollateralId", getU64Encoder()],
["reward0Decimals", getU64Encoder()],
["reward1Amount", getU64Encoder()],
["reward1Vault", getAddressEncoder()],
["reward1CollateralId", getU64Encoder()],
["reward1Decimals", getU64Encoder()],
["reward2Amount", getU64Encoder()],
["reward2Vault", getAddressEncoder()],
["reward2CollateralId", getU64Encoder()],
["reward2Decimals", getU64Encoder()],
["depositCapUsd", getU64Encoder()],
["feesACumulative", getU64Encoder()],
["feesBCumulative", getU64Encoder()],
["reward0AmountCumulative", getU64Encoder()],
["reward1AmountCumulative", getU64Encoder()],
["reward2AmountCumulative", getU64Encoder()],
["depositCapUsdPerIxn", getU64Encoder()],
["withdrawalCapA", getWithdrawalCapsEncoder()],
["withdrawalCapB", getWithdrawalCapsEncoder()],
["maxPriceDeviationBps", getU64Encoder()],
["swapVaultMaxSlippageBps", getU32Encoder()],
["swapVaultMaxSlippageFromReferenceBps", getU32Encoder()],
["strategyType", getU64Encoder()],
["padding0", getU64Encoder()],
["withdrawFee", getU64Encoder()],
["feesFee", getU64Encoder()],
["reward0Fee", getU64Encoder()],
["reward1Fee", getU64Encoder()],
["reward2Fee", getU64Encoder()],
["positionTimestamp", getU64Encoder()],
[
"kaminoRewards",
getArrayEncoder(getKaminoRewardInfoEncoder(), { size: 3 }),
],
["strategyDex", getU64Encoder()],
["raydiumProtocolPositionOrBaseVaultAuthority", getAddressEncoder()],
["allowDepositWithoutInvest", getU64Encoder()],
["raydiumPoolConfigOrBaseVaultAuthority", getAddressEncoder()],
["depositBlocked", getU8Encoder()],
["creationStatus", getU8Encoder()],
["investBlocked", getU8Encoder()],
["shareCalculationMethod", getU8Encoder()],
["withdrawBlocked", getU8Encoder()],
["reservedFlag2", getU8Encoder()],
["localAdminBlocked", getU8Encoder()],
["flashVaultSwapAllowed", getU8Encoder()],
["referenceSwapPriceA", getPriceEncoder()],
["referenceSwapPriceB", getPriceEncoder()],
["isCommunity", getU8Encoder()],
["rebalanceType", getU8Encoder()],
["padding1", fixEncoderSize(getBytesEncoder(), 6)],
["rebalanceRaw", getRebalanceRawEncoder()],
["padding2", fixEncoderSize(getBytesEncoder(), 7)],
["tokenAFeesFromRewardsCumulative", getU64Encoder()],
["tokenBFeesFromRewardsCumulative", getU64Encoder()],
["strategyLookupTable", getAddressEncoder()],
["lastSwapUnevenStepTimestamp", getU64Encoder()],
["farm", getAddressEncoder()],
["rebalancesCap", getWithdrawalCapsEncoder()],
["swapUnevenAuthority", getAddressEncoder()],
["tokenATokenProgram", getAddressEncoder()],
["tokenBTokenProgram", getAddressEncoder()],
["pendingAdmin", getAddressEncoder()],
["padding3", getU64Encoder()],
["padding4", getArrayEncoder(getU128Encoder(), { size: 13 })],
["padding5", getArrayEncoder(getU128Encoder(), { size: 32 })],
["padding6", getArrayEncoder(getU128Encoder(), { size: 32 })],
["padding7", getArrayEncoder(getU128Encoder(), { size: 32 })],
]),
(value) => ({ ...value, discriminator: WHIRLPOOL_STRATEGY_DISCRIMINATOR }),
);
}
/** Gets the decoder for {@link WhirlpoolStrategy} account data. */
export function getWhirlpoolStrategyDecoder(): FixedSizeDecoder {
return getStructDecoder([
["discriminator", fixDecoderSize(getBytesDecoder(), 8)],
["adminAuthority", getAddressDecoder()],
["globalConfig", getAddressDecoder()],
["baseVaultAuthority", getAddressDecoder()],
["baseVaultAuthorityBump", getU64Decoder()],
["pool", getAddressDecoder()],
["poolTokenVaultA", getAddressDecoder()],
["poolTokenVaultB", getAddressDecoder()],
["tickArrayLower", getAddressDecoder()],
["tickArrayUpper", getAddressDecoder()],
["position", getAddressDecoder()],
["positionMint", getAddressDecoder()],
["positionMetadata", getAddressDecoder()],
["positionTokenAccount", getAddressDecoder()],
["tokenAVault", getAddressDecoder()],
["tokenBVault", getAddressDecoder()],
["deprecated0", getArrayDecoder(getAddressDecoder(), { size: 2 })],
["deprecated1", getArrayDecoder(getU64Decoder(), { size: 2 })],
["tokenAMint", getAddressDecoder()],
["tokenBMint", getAddressDecoder()],
["tokenAMintDecimals", getU64Decoder()],
["tokenBMintDecimals", getU64Decoder()],
["tokenAAmounts", getU64Decoder()],
["tokenBAmounts", getU64Decoder()],
["tokenACollateralId", getU64Decoder()],
["tokenBCollateralId", getU64Decoder()],
["scopePrices", getAddressDecoder()],
["deprecated2", getAddressDecoder()],
["sharesMint", getAddressDecoder()],
["sharesMintDecimals", getU64Decoder()],
["sharesMintAuthority", getAddressDecoder()],
["sharesMintAuthorityBump", getU64Decoder()],
["sharesIssued", getU64Decoder()],
["status", getU64Decoder()],
["reward0Amount", getU64Decoder()],
["reward0Vault", getAddressDecoder()],
["reward0CollateralId", getU64Decoder()],
["reward0Decimals", getU64Decoder()],
["reward1Amount", getU64Decoder()],
["reward1Vault", getAddressDecoder()],
["reward1CollateralId", getU64Decoder()],
["reward1Decimals", getU64Decoder()],
["reward2Amount", getU64Decoder()],
["reward2Vault", getAddressDecoder()],
["reward2CollateralId", getU64Decoder()],
["reward2Decimals", getU64Decoder()],
["depositCapUsd", getU64Decoder()],
["feesACumulative", getU64Decoder()],
["feesBCumulative", getU64Decoder()],
["reward0AmountCumulative", getU64Decoder()],
["reward1AmountCumulative", getU64Decoder()],
["reward2AmountCumulative", getU64Decoder()],
["depositCapUsdPerIxn", getU64Decoder()],
["withdrawalCapA", getWithdrawalCapsDecoder()],
["withdrawalCapB", getWithdrawalCapsDecoder()],
["maxPriceDeviationBps", getU64Decoder()],
["swapVaultMaxSlippageBps", getU32Decoder()],
["swapVaultMaxSlippageFromReferenceBps", getU32Decoder()],
["strategyType", getU64Decoder()],
["padding0", getU64Decoder()],
["withdrawFee", getU64Decoder()],
["feesFee", getU64Decoder()],
["reward0Fee", getU64Decoder()],
["reward1Fee", getU64Decoder()],
["reward2Fee", getU64Decoder()],
["positionTimestamp", getU64Decoder()],
[
"kaminoRewards",
getArrayDecoder(getKaminoRewardInfoDecoder(), { size: 3 }),
],
["strategyDex", getU64Decoder()],
["raydiumProtocolPositionOrBaseVaultAuthority", getAddressDecoder()],
["allowDepositWithoutInvest", getU64Decoder()],
["raydiumPoolConfigOrBaseVaultAuthority", getAddressDecoder()],
["depositBlocked", getU8Decoder()],
["creationStatus", getU8Decoder()],
["investBlocked", getU8Decoder()],
["shareCalculationMethod", getU8Decoder()],
["withdrawBlocked", getU8Decoder()],
["reservedFlag2", getU8Decoder()],
["localAdminBlocked", getU8Decoder()],
["flashVaultSwapAllowed", getU8Decoder()],
["referenceSwapPriceA", getPriceDecoder()],
["referenceSwapPriceB", getPriceDecoder()],
["isCommunity", getU8Decoder()],
["rebalanceType", getU8Decoder()],
["padding1", fixDecoderSize(getBytesDecoder(), 6)],
["rebalanceRaw", getRebalanceRawDecoder()],
["padding2", fixDecoderSize(getBytesDecoder(), 7)],
["tokenAFeesFromRewardsCumulative", getU64Decoder()],
["tokenBFeesFromRewardsCumulative", getU64Decoder()],
["strategyLookupTable", getAddressDecoder()],
["lastSwapUnevenStepTimestamp", getU64Decoder()],
["farm", getAddressDecoder()],
["rebalancesCap", getWithdrawalCapsDecoder()],
["swapUnevenAuthority", getAddressDecoder()],
["tokenATokenProgram", getAddressDecoder()],
["tokenBTokenProgram", getAddressDecoder()],
["pendingAdmin", getAddressDecoder()],
["padding3", getU64Decoder()],
["padding4", getArrayDecoder(getU128Decoder(), { size: 13 })],
["padding5", getArrayDecoder(getU128Decoder(), { size: 32 })],
["padding6", getArrayDecoder(getU128Decoder(), { size: 32 })],
["padding7", getArrayDecoder(getU128Decoder(), { size: 32 })],
]);
}
/** Gets the codec for {@link WhirlpoolStrategy} account data. */
export function getWhirlpoolStrategyCodec(): FixedSizeCodec<
WhirlpoolStrategyArgs,
WhirlpoolStrategy
> {
return combineCodec(
getWhirlpoolStrategyEncoder(),
getWhirlpoolStrategyDecoder(),
);
}
export function decodeWhirlpoolStrategy(
encodedAccount: EncodedAccount,
): Account;
export function decodeWhirlpoolStrategy(
encodedAccount: MaybeEncodedAccount,
): MaybeAccount;
export function decodeWhirlpoolStrategy(
encodedAccount: EncodedAccount | MaybeEncodedAccount,
):
| Account
| MaybeAccount {
return decodeAccount(
encodedAccount as MaybeEncodedAccount,
getWhirlpoolStrategyDecoder(),
);
}
export async function fetchWhirlpoolStrategy(
rpc: Parameters[0],
address: Address,
config?: FetchAccountConfig,
): Promise> {
const maybeAccount = await fetchMaybeWhirlpoolStrategy(rpc, address, config);
assertAccountExists(maybeAccount);
return maybeAccount;
}
export async function fetchMaybeWhirlpoolStrategy<
TAddress extends string = string,
>(
rpc: Parameters[0],
address: Address,
config?: FetchAccountConfig,
): Promise> {
const maybeAccount = await fetchEncodedAccount(rpc, address, config);
return decodeWhirlpoolStrategy(maybeAccount);
}
export async function fetchAllWhirlpoolStrategy(
rpc: Parameters[0],
addresses: Array,
config?: FetchAccountsConfig,
): Promise[]> {
const maybeAccounts = await fetchAllMaybeWhirlpoolStrategy(
rpc,
addresses,
config,
);
assertAccountsExist(maybeAccounts);
return maybeAccounts;
}
export async function fetchAllMaybeWhirlpoolStrategy(
rpc: Parameters[0],
addresses: Array,
config?: FetchAccountsConfig,
): Promise[]> {
const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);
return maybeAccounts.map((maybeAccount) =>
decodeWhirlpoolStrategy(maybeAccount),
);
}
export function getWhirlpoolStrategySize(): number {
return 4064;
}