/** * 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, getBytesDecoder, getBytesEncoder, getStructDecoder, getStructEncoder, getU64Decoder, getU64Encoder, transformEncoder, type AccountMeta, type AccountSignerMeta, type Address, type FixedSizeCodec, type FixedSizeDecoder, type FixedSizeEncoder, type Instruction, type InstructionWithAccounts, type InstructionWithData, type ReadonlyAccount, type ReadonlyUint8Array, type TransactionSigner, type WritableSignerAccount, } from "@solana/kit"; import { YVAULTS_PROGRAM_ADDRESS } from "../programs"; import { getAccountMetaFactory, type ResolvedAccount } from "../shared"; export const CHECK_EXPECTED_VAULTS_BALANCES_DISCRIMINATOR = new Uint8Array([ 75, 151, 187, 125, 50, 4, 11, 71, ]); export function getCheckExpectedVaultsBalancesDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( CHECK_EXPECTED_VAULTS_BALANCES_DISCRIMINATOR, ); } export type CheckExpectedVaultsBalancesInstruction< TProgram extends string = typeof YVAULTS_PROGRAM_ADDRESS, TAccountUser extends string | AccountMeta = string, TAccountTokenAAta extends string | AccountMeta = string, TAccountTokenBAta extends string | AccountMeta = string, TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & InstructionWithData & InstructionWithAccounts< [ TAccountUser extends string ? WritableSignerAccount & AccountSignerMeta : TAccountUser, TAccountTokenAAta extends string ? ReadonlyAccount : TAccountTokenAAta, TAccountTokenBAta extends string ? ReadonlyAccount : TAccountTokenBAta, ...TRemainingAccounts, ] >; export type CheckExpectedVaultsBalancesInstructionData = { discriminator: ReadonlyUint8Array; tokenAAtaBalance: bigint; tokenBAtaBalance: bigint; }; export type CheckExpectedVaultsBalancesInstructionDataArgs = { tokenAAtaBalance: number | bigint; tokenBAtaBalance: number | bigint; }; export function getCheckExpectedVaultsBalancesInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([ ["discriminator", fixEncoderSize(getBytesEncoder(), 8)], ["tokenAAtaBalance", getU64Encoder()], ["tokenBAtaBalance", getU64Encoder()], ]), (value) => ({ ...value, discriminator: CHECK_EXPECTED_VAULTS_BALANCES_DISCRIMINATOR, }), ); } export function getCheckExpectedVaultsBalancesInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ["discriminator", fixDecoderSize(getBytesDecoder(), 8)], ["tokenAAtaBalance", getU64Decoder()], ["tokenBAtaBalance", getU64Decoder()], ]); } export function getCheckExpectedVaultsBalancesInstructionDataCodec(): FixedSizeCodec< CheckExpectedVaultsBalancesInstructionDataArgs, CheckExpectedVaultsBalancesInstructionData > { return combineCodec( getCheckExpectedVaultsBalancesInstructionDataEncoder(), getCheckExpectedVaultsBalancesInstructionDataDecoder(), ); } export type CheckExpectedVaultsBalancesInput< TAccountUser extends string = string, TAccountTokenAAta extends string = string, TAccountTokenBAta extends string = string, > = { user: TransactionSigner; tokenAAta: Address; tokenBAta: Address; tokenAAtaBalance: CheckExpectedVaultsBalancesInstructionDataArgs["tokenAAtaBalance"]; tokenBAtaBalance: CheckExpectedVaultsBalancesInstructionDataArgs["tokenBAtaBalance"]; }; export function getCheckExpectedVaultsBalancesInstruction< TAccountUser extends string, TAccountTokenAAta extends string, TAccountTokenBAta extends string, TProgramAddress extends Address = typeof YVAULTS_PROGRAM_ADDRESS, >( input: CheckExpectedVaultsBalancesInput< TAccountUser, TAccountTokenAAta, TAccountTokenBAta >, config?: { programAddress?: TProgramAddress }, ): CheckExpectedVaultsBalancesInstruction< TProgramAddress, TAccountUser, TAccountTokenAAta, TAccountTokenBAta > { // Program address. const programAddress = config?.programAddress ?? YVAULTS_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { user: { value: input.user ?? null, isWritable: true }, tokenAAta: { value: input.tokenAAta ?? null, isWritable: false }, tokenBAta: { value: input.tokenBAta ?? null, isWritable: false }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedAccount >; // Original args. const args = { ...input }; const getAccountMeta = getAccountMetaFactory(programAddress, "programId"); return Object.freeze({ accounts: [ getAccountMeta(accounts.user), getAccountMeta(accounts.tokenAAta), getAccountMeta(accounts.tokenBAta), ], data: getCheckExpectedVaultsBalancesInstructionDataEncoder().encode( args as CheckExpectedVaultsBalancesInstructionDataArgs, ), programAddress, } as CheckExpectedVaultsBalancesInstruction< TProgramAddress, TAccountUser, TAccountTokenAAta, TAccountTokenBAta >); } export type ParsedCheckExpectedVaultsBalancesInstruction< TProgram extends string = typeof YVAULTS_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { user: TAccountMetas[0]; tokenAAta: TAccountMetas[1]; tokenBAta: TAccountMetas[2]; }; data: CheckExpectedVaultsBalancesInstructionData; }; export function parseCheckExpectedVaultsBalancesInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData, ): ParsedCheckExpectedVaultsBalancesInstruction { if (instruction.accounts.length < 3) { // TODO: Coded error. throw new Error("Not enough accounts"); } let accountIndex = 0; const getNextAccount = () => { const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; accountIndex += 1; return accountMeta; }; return { programAddress: instruction.programAddress, accounts: { user: getNextAccount(), tokenAAta: getNextAccount(), tokenBAta: getNextAccount(), }, data: getCheckExpectedVaultsBalancesInstructionDataDecoder().decode( instruction.data, ), }; }