/** * 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 { combineCodec, fixDecoderSize, fixEncoderSize, getAddressEncoder, getBytesDecoder, getBytesEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, SolanaError, transformEncoder, type AccountMeta, type AccountSignerMeta, type Address, type FixedSizeCodec, type FixedSizeDecoder, type FixedSizeEncoder, type Instruction, type InstructionWithAccounts, type InstructionWithData, type ReadonlyAccount, type ReadonlySignerAccount, type ReadonlyUint8Array, type TransactionSigner, type WritableAccount, } from "@solana/kit"; import { getAccountMetaFactory, getAddressFromResolvedInstructionAccount, type ResolvedInstructionAccount, } from "@solana/program-client-core"; import { findProtocolPda, findVaultLpMintAuthPda, findVaultLpMintPda, } from "../pdas"; import { VOLTR_VAULT_PROGRAM_ADDRESS } from "../programs"; export const HARVEST_FEE_DISCRIMINATOR = new Uint8Array([ 32, 59, 42, 128, 246, 73, 255, 47, ]); export function getHarvestFeeDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(HARVEST_FEE_DISCRIMINATOR); } export type HarvestFeeInstruction< TProgram extends string = typeof VOLTR_VAULT_PROGRAM_ADDRESS, TAccountHarvester extends string | AccountMeta = string, TAccountVaultManager extends string | AccountMeta = string, TAccountVaultAdmin extends string | AccountMeta = string, TAccountProtocolTreasury extends string | AccountMeta = string, TAccountProtocol extends string | AccountMeta = string, TAccountVault extends string | AccountMeta = string, TAccountVaultLpMint extends string | AccountMeta = string, TAccountVaultLpMintAuth extends string | AccountMeta = string, TAccountVaultManagerLpAta extends string | AccountMeta = string, TAccountVaultAdminLpAta extends string | AccountMeta = string, TAccountProtocolTreasuryLpAta extends string | AccountMeta = string, TAccountLpTokenProgram extends string | AccountMeta = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & InstructionWithData & InstructionWithAccounts< [ TAccountHarvester extends string ? ReadonlySignerAccount & AccountSignerMeta : TAccountHarvester, TAccountVaultManager extends string ? ReadonlyAccount : TAccountVaultManager, TAccountVaultAdmin extends string ? ReadonlyAccount : TAccountVaultAdmin, TAccountProtocolTreasury extends string ? ReadonlyAccount : TAccountProtocolTreasury, TAccountProtocol extends string ? ReadonlyAccount : TAccountProtocol, TAccountVault extends string ? WritableAccount : TAccountVault, TAccountVaultLpMint extends string ? WritableAccount : TAccountVaultLpMint, TAccountVaultLpMintAuth extends string ? ReadonlyAccount : TAccountVaultLpMintAuth, TAccountVaultManagerLpAta extends string ? WritableAccount : TAccountVaultManagerLpAta, TAccountVaultAdminLpAta extends string ? WritableAccount : TAccountVaultAdminLpAta, TAccountProtocolTreasuryLpAta extends string ? WritableAccount : TAccountProtocolTreasuryLpAta, TAccountLpTokenProgram extends string ? ReadonlyAccount : TAccountLpTokenProgram, ...TRemainingAccounts, ] >; export type HarvestFeeInstructionData = { discriminator: ReadonlyUint8Array }; export type HarvestFeeInstructionDataArgs = {}; export function getHarvestFeeInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([["discriminator", fixEncoderSize(getBytesEncoder(), 8)]]), (value) => ({ ...value, discriminator: HARVEST_FEE_DISCRIMINATOR }), ); } export function getHarvestFeeInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ["discriminator", fixDecoderSize(getBytesDecoder(), 8)], ]); } export function getHarvestFeeInstructionDataCodec(): FixedSizeCodec< HarvestFeeInstructionDataArgs, HarvestFeeInstructionData > { return combineCodec( getHarvestFeeInstructionDataEncoder(), getHarvestFeeInstructionDataDecoder(), ); } export type HarvestFeeAsyncInput< TAccountHarvester extends string = string, TAccountVaultManager extends string = string, TAccountVaultAdmin extends string = string, TAccountProtocolTreasury extends string = string, TAccountProtocol extends string = string, TAccountVault extends string = string, TAccountVaultLpMint extends string = string, TAccountVaultLpMintAuth extends string = string, TAccountVaultManagerLpAta extends string = string, TAccountVaultAdminLpAta extends string = string, TAccountProtocolTreasuryLpAta extends string = string, TAccountLpTokenProgram extends string = string, > = { harvester: TransactionSigner; vaultManager: Address; vaultAdmin: Address; protocolTreasury: Address; protocol?: Address; vault: Address; vaultLpMint?: Address; vaultLpMintAuth?: Address; vaultManagerLpAta?: Address; vaultAdminLpAta?: Address; protocolTreasuryLpAta?: Address; lpTokenProgram?: Address; }; export async function getHarvestFeeInstructionAsync< TAccountHarvester extends string, TAccountVaultManager extends string, TAccountVaultAdmin extends string, TAccountProtocolTreasury extends string, TAccountProtocol extends string, TAccountVault extends string, TAccountVaultLpMint extends string, TAccountVaultLpMintAuth extends string, TAccountVaultManagerLpAta extends string, TAccountVaultAdminLpAta extends string, TAccountProtocolTreasuryLpAta extends string, TAccountLpTokenProgram extends string, TProgramAddress extends Address = typeof VOLTR_VAULT_PROGRAM_ADDRESS, >( input: HarvestFeeAsyncInput< TAccountHarvester, TAccountVaultManager, TAccountVaultAdmin, TAccountProtocolTreasury, TAccountProtocol, TAccountVault, TAccountVaultLpMint, TAccountVaultLpMintAuth, TAccountVaultManagerLpAta, TAccountVaultAdminLpAta, TAccountProtocolTreasuryLpAta, TAccountLpTokenProgram >, config?: { programAddress?: TProgramAddress }, ): Promise< HarvestFeeInstruction< TProgramAddress, TAccountHarvester, TAccountVaultManager, TAccountVaultAdmin, TAccountProtocolTreasury, TAccountProtocol, TAccountVault, TAccountVaultLpMint, TAccountVaultLpMintAuth, TAccountVaultManagerLpAta, TAccountVaultAdminLpAta, TAccountProtocolTreasuryLpAta, TAccountLpTokenProgram > > { // Program address. const programAddress = config?.programAddress ?? VOLTR_VAULT_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { harvester: { value: input.harvester ?? null, isWritable: false }, vaultManager: { value: input.vaultManager ?? null, isWritable: false }, vaultAdmin: { value: input.vaultAdmin ?? null, isWritable: false }, protocolTreasury: { value: input.protocolTreasury ?? null, isWritable: false, }, protocol: { value: input.protocol ?? null, isWritable: false }, vault: { value: input.vault ?? null, isWritable: true }, vaultLpMint: { value: input.vaultLpMint ?? null, isWritable: true }, vaultLpMintAuth: { value: input.vaultLpMintAuth ?? null, isWritable: false, }, vaultManagerLpAta: { value: input.vaultManagerLpAta ?? null, isWritable: true, }, vaultAdminLpAta: { value: input.vaultAdminLpAta ?? null, isWritable: true }, protocolTreasuryLpAta: { value: input.protocolTreasuryLpAta ?? null, isWritable: true, }, lpTokenProgram: { value: input.lpTokenProgram ?? null, isWritable: false }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedInstructionAccount >; // Resolve default values. if (!accounts.protocol.value) { accounts.protocol.value = await findProtocolPda(); } if (!accounts.vaultLpMint.value) { accounts.vaultLpMint.value = await findVaultLpMintPda({ vault: getAddressFromResolvedInstructionAccount( "vault", accounts.vault.value, ), }); } if (!accounts.vaultLpMintAuth.value) { accounts.vaultLpMintAuth.value = await findVaultLpMintAuthPda({ vault: getAddressFromResolvedInstructionAccount( "vault", accounts.vault.value, ), }); } if (!accounts.lpTokenProgram.value) { accounts.lpTokenProgram.value = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" as Address<"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA">; } if (!accounts.vaultManagerLpAta.value) { accounts.vaultManagerLpAta.value = await getProgramDerivedAddress({ programAddress: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" as Address<"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL">, seeds: [ getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( "vaultManager", accounts.vaultManager.value, ), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( "lpTokenProgram", accounts.lpTokenProgram.value, ), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( "vaultLpMint", accounts.vaultLpMint.value, ), ), ], }); } if (!accounts.vaultAdminLpAta.value) { accounts.vaultAdminLpAta.value = await getProgramDerivedAddress({ programAddress: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" as Address<"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL">, seeds: [ getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( "vaultAdmin", accounts.vaultAdmin.value, ), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( "lpTokenProgram", accounts.lpTokenProgram.value, ), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( "vaultLpMint", accounts.vaultLpMint.value, ), ), ], }); } if (!accounts.protocolTreasuryLpAta.value) { accounts.protocolTreasuryLpAta.value = await getProgramDerivedAddress({ programAddress: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" as Address<"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL">, seeds: [ getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( "protocolTreasury", accounts.protocolTreasury.value, ), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( "lpTokenProgram", accounts.lpTokenProgram.value, ), ), getAddressEncoder().encode( getAddressFromResolvedInstructionAccount( "vaultLpMint", accounts.vaultLpMint.value, ), ), ], }); } const getAccountMeta = getAccountMetaFactory(programAddress, "programId"); return Object.freeze({ accounts: [ getAccountMeta("harvester", accounts.harvester), getAccountMeta("vaultManager", accounts.vaultManager), getAccountMeta("vaultAdmin", accounts.vaultAdmin), getAccountMeta("protocolTreasury", accounts.protocolTreasury), getAccountMeta("protocol", accounts.protocol), getAccountMeta("vault", accounts.vault), getAccountMeta("vaultLpMint", accounts.vaultLpMint), getAccountMeta("vaultLpMintAuth", accounts.vaultLpMintAuth), getAccountMeta("vaultManagerLpAta", accounts.vaultManagerLpAta), getAccountMeta("vaultAdminLpAta", accounts.vaultAdminLpAta), getAccountMeta("protocolTreasuryLpAta", accounts.protocolTreasuryLpAta), getAccountMeta("lpTokenProgram", accounts.lpTokenProgram), ], data: getHarvestFeeInstructionDataEncoder().encode({}), programAddress, } as HarvestFeeInstruction< TProgramAddress, TAccountHarvester, TAccountVaultManager, TAccountVaultAdmin, TAccountProtocolTreasury, TAccountProtocol, TAccountVault, TAccountVaultLpMint, TAccountVaultLpMintAuth, TAccountVaultManagerLpAta, TAccountVaultAdminLpAta, TAccountProtocolTreasuryLpAta, TAccountLpTokenProgram >); } export type HarvestFeeInput< TAccountHarvester extends string = string, TAccountVaultManager extends string = string, TAccountVaultAdmin extends string = string, TAccountProtocolTreasury extends string = string, TAccountProtocol extends string = string, TAccountVault extends string = string, TAccountVaultLpMint extends string = string, TAccountVaultLpMintAuth extends string = string, TAccountVaultManagerLpAta extends string = string, TAccountVaultAdminLpAta extends string = string, TAccountProtocolTreasuryLpAta extends string = string, TAccountLpTokenProgram extends string = string, > = { harvester: TransactionSigner; vaultManager: Address; vaultAdmin: Address; protocolTreasury: Address; protocol: Address; vault: Address; vaultLpMint: Address; vaultLpMintAuth: Address; vaultManagerLpAta: Address; vaultAdminLpAta: Address; protocolTreasuryLpAta: Address; lpTokenProgram?: Address; }; export function getHarvestFeeInstruction< TAccountHarvester extends string, TAccountVaultManager extends string, TAccountVaultAdmin extends string, TAccountProtocolTreasury extends string, TAccountProtocol extends string, TAccountVault extends string, TAccountVaultLpMint extends string, TAccountVaultLpMintAuth extends string, TAccountVaultManagerLpAta extends string, TAccountVaultAdminLpAta extends string, TAccountProtocolTreasuryLpAta extends string, TAccountLpTokenProgram extends string, TProgramAddress extends Address = typeof VOLTR_VAULT_PROGRAM_ADDRESS, >( input: HarvestFeeInput< TAccountHarvester, TAccountVaultManager, TAccountVaultAdmin, TAccountProtocolTreasury, TAccountProtocol, TAccountVault, TAccountVaultLpMint, TAccountVaultLpMintAuth, TAccountVaultManagerLpAta, TAccountVaultAdminLpAta, TAccountProtocolTreasuryLpAta, TAccountLpTokenProgram >, config?: { programAddress?: TProgramAddress }, ): HarvestFeeInstruction< TProgramAddress, TAccountHarvester, TAccountVaultManager, TAccountVaultAdmin, TAccountProtocolTreasury, TAccountProtocol, TAccountVault, TAccountVaultLpMint, TAccountVaultLpMintAuth, TAccountVaultManagerLpAta, TAccountVaultAdminLpAta, TAccountProtocolTreasuryLpAta, TAccountLpTokenProgram > { // Program address. const programAddress = config?.programAddress ?? VOLTR_VAULT_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { harvester: { value: input.harvester ?? null, isWritable: false }, vaultManager: { value: input.vaultManager ?? null, isWritable: false }, vaultAdmin: { value: input.vaultAdmin ?? null, isWritable: false }, protocolTreasury: { value: input.protocolTreasury ?? null, isWritable: false, }, protocol: { value: input.protocol ?? null, isWritable: false }, vault: { value: input.vault ?? null, isWritable: true }, vaultLpMint: { value: input.vaultLpMint ?? null, isWritable: true }, vaultLpMintAuth: { value: input.vaultLpMintAuth ?? null, isWritable: false, }, vaultManagerLpAta: { value: input.vaultManagerLpAta ?? null, isWritable: true, }, vaultAdminLpAta: { value: input.vaultAdminLpAta ?? null, isWritable: true }, protocolTreasuryLpAta: { value: input.protocolTreasuryLpAta ?? null, isWritable: true, }, lpTokenProgram: { value: input.lpTokenProgram ?? null, isWritable: false }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedInstructionAccount >; // Resolve default values. if (!accounts.lpTokenProgram.value) { accounts.lpTokenProgram.value = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" as Address<"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA">; } const getAccountMeta = getAccountMetaFactory(programAddress, "programId"); return Object.freeze({ accounts: [ getAccountMeta("harvester", accounts.harvester), getAccountMeta("vaultManager", accounts.vaultManager), getAccountMeta("vaultAdmin", accounts.vaultAdmin), getAccountMeta("protocolTreasury", accounts.protocolTreasury), getAccountMeta("protocol", accounts.protocol), getAccountMeta("vault", accounts.vault), getAccountMeta("vaultLpMint", accounts.vaultLpMint), getAccountMeta("vaultLpMintAuth", accounts.vaultLpMintAuth), getAccountMeta("vaultManagerLpAta", accounts.vaultManagerLpAta), getAccountMeta("vaultAdminLpAta", accounts.vaultAdminLpAta), getAccountMeta("protocolTreasuryLpAta", accounts.protocolTreasuryLpAta), getAccountMeta("lpTokenProgram", accounts.lpTokenProgram), ], data: getHarvestFeeInstructionDataEncoder().encode({}), programAddress, } as HarvestFeeInstruction< TProgramAddress, TAccountHarvester, TAccountVaultManager, TAccountVaultAdmin, TAccountProtocolTreasury, TAccountProtocol, TAccountVault, TAccountVaultLpMint, TAccountVaultLpMintAuth, TAccountVaultManagerLpAta, TAccountVaultAdminLpAta, TAccountProtocolTreasuryLpAta, TAccountLpTokenProgram >); } export type ParsedHarvestFeeInstruction< TProgram extends string = typeof VOLTR_VAULT_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { harvester: TAccountMetas[0]; vaultManager: TAccountMetas[1]; vaultAdmin: TAccountMetas[2]; protocolTreasury: TAccountMetas[3]; protocol: TAccountMetas[4]; vault: TAccountMetas[5]; vaultLpMint: TAccountMetas[6]; vaultLpMintAuth: TAccountMetas[7]; vaultManagerLpAta: TAccountMetas[8]; vaultAdminLpAta: TAccountMetas[9]; protocolTreasuryLpAta: TAccountMetas[10]; lpTokenProgram: TAccountMetas[11]; }; data: HarvestFeeInstructionData; }; export function parseHarvestFeeInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData, ): ParsedHarvestFeeInstruction { if (instruction.accounts.length < 12) { throw new SolanaError( SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { actualAccountMetas: instruction.accounts.length, expectedAccountMetas: 12, }, ); } let accountIndex = 0; const getNextAccount = () => { const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; accountIndex += 1; return accountMeta; }; return { programAddress: instruction.programAddress, accounts: { harvester: getNextAccount(), vaultManager: getNextAccount(), vaultAdmin: getNextAccount(), protocolTreasury: getNextAccount(), protocol: getNextAccount(), vault: getNextAccount(), vaultLpMint: getNextAccount(), vaultLpMintAuth: getNextAccount(), vaultManagerLpAta: getNextAccount(), vaultAdminLpAta: getNextAccount(), protocolTreasuryLpAta: getNextAccount(), lpTokenProgram: getNextAccount(), }, data: getHarvestFeeInstructionDataDecoder().decode(instruction.data), }; }