/** * 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, getU16Decoder, getU16Encoder, 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 WritableAccount, type WritableSignerAccount, } from "@solana/kit"; import { YVAULTS_PROGRAM_ADDRESS } from "../programs"; import { getAccountMetaFactory, type ResolvedAccount } from "../shared"; export const UPDATE_TREASURY_FEE_VAULT_DISCRIMINATOR = new Uint8Array([ 9, 241, 94, 91, 173, 74, 166, 119, ]); export function getUpdateTreasuryFeeVaultDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( UPDATE_TREASURY_FEE_VAULT_DISCRIMINATOR, ); } export type UpdateTreasuryFeeVaultInstruction< TProgram extends string = typeof YVAULTS_PROGRAM_ADDRESS, TAccountSigner extends string | AccountMeta = string, TAccountGlobalConfig extends string | AccountMeta = string, TAccountFeeMint extends string | AccountMeta = string, TAccountTreasuryFeeVault extends string | AccountMeta = string, TAccountTreasuryFeeVaultAuthority extends string | AccountMeta = string, TAccountTokenInfos extends string | AccountMeta = string, TAccountSystemProgram extends string | AccountMeta = "11111111111111111111111111111111", TAccountRent extends string | AccountMeta = "SysvarRent111111111111111111111111111111111", TAccountTokenProgram extends string | AccountMeta = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & InstructionWithData & InstructionWithAccounts< [ TAccountSigner extends string ? WritableSignerAccount & AccountSignerMeta : TAccountSigner, TAccountGlobalConfig extends string ? WritableAccount : TAccountGlobalConfig, TAccountFeeMint extends string ? ReadonlyAccount : TAccountFeeMint, TAccountTreasuryFeeVault extends string ? WritableAccount : TAccountTreasuryFeeVault, TAccountTreasuryFeeVaultAuthority extends string ? ReadonlyAccount : TAccountTreasuryFeeVaultAuthority, TAccountTokenInfos extends string ? ReadonlyAccount : TAccountTokenInfos, TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, TAccountRent extends string ? ReadonlyAccount : TAccountRent, TAccountTokenProgram extends string ? ReadonlyAccount : TAccountTokenProgram, ...TRemainingAccounts, ] >; export type UpdateTreasuryFeeVaultInstructionData = { discriminator: ReadonlyUint8Array; collateralId: number; }; export type UpdateTreasuryFeeVaultInstructionDataArgs = { collateralId: number; }; export function getUpdateTreasuryFeeVaultInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([ ["discriminator", fixEncoderSize(getBytesEncoder(), 8)], ["collateralId", getU16Encoder()], ]), (value) => ({ ...value, discriminator: UPDATE_TREASURY_FEE_VAULT_DISCRIMINATOR, }), ); } export function getUpdateTreasuryFeeVaultInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ["discriminator", fixDecoderSize(getBytesDecoder(), 8)], ["collateralId", getU16Decoder()], ]); } export function getUpdateTreasuryFeeVaultInstructionDataCodec(): FixedSizeCodec< UpdateTreasuryFeeVaultInstructionDataArgs, UpdateTreasuryFeeVaultInstructionData > { return combineCodec( getUpdateTreasuryFeeVaultInstructionDataEncoder(), getUpdateTreasuryFeeVaultInstructionDataDecoder(), ); } export type UpdateTreasuryFeeVaultInput< TAccountSigner extends string = string, TAccountGlobalConfig extends string = string, TAccountFeeMint extends string = string, TAccountTreasuryFeeVault extends string = string, TAccountTreasuryFeeVaultAuthority extends string = string, TAccountTokenInfos extends string = string, TAccountSystemProgram extends string = string, TAccountRent extends string = string, TAccountTokenProgram extends string = string, > = { signer: TransactionSigner; globalConfig: Address; feeMint: Address; treasuryFeeVault: Address; treasuryFeeVaultAuthority: Address; tokenInfos: Address; systemProgram?: Address; rent?: Address; tokenProgram?: Address; collateralId: UpdateTreasuryFeeVaultInstructionDataArgs["collateralId"]; }; export function getUpdateTreasuryFeeVaultInstruction< TAccountSigner extends string, TAccountGlobalConfig extends string, TAccountFeeMint extends string, TAccountTreasuryFeeVault extends string, TAccountTreasuryFeeVaultAuthority extends string, TAccountTokenInfos extends string, TAccountSystemProgram extends string, TAccountRent extends string, TAccountTokenProgram extends string, TProgramAddress extends Address = typeof YVAULTS_PROGRAM_ADDRESS, >( input: UpdateTreasuryFeeVaultInput< TAccountSigner, TAccountGlobalConfig, TAccountFeeMint, TAccountTreasuryFeeVault, TAccountTreasuryFeeVaultAuthority, TAccountTokenInfos, TAccountSystemProgram, TAccountRent, TAccountTokenProgram >, config?: { programAddress?: TProgramAddress }, ): UpdateTreasuryFeeVaultInstruction< TProgramAddress, TAccountSigner, TAccountGlobalConfig, TAccountFeeMint, TAccountTreasuryFeeVault, TAccountTreasuryFeeVaultAuthority, TAccountTokenInfos, TAccountSystemProgram, TAccountRent, TAccountTokenProgram > { // Program address. const programAddress = config?.programAddress ?? YVAULTS_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { signer: { value: input.signer ?? null, isWritable: true }, globalConfig: { value: input.globalConfig ?? null, isWritable: true }, feeMint: { value: input.feeMint ?? null, isWritable: false }, treasuryFeeVault: { value: input.treasuryFeeVault ?? null, isWritable: true, }, treasuryFeeVaultAuthority: { value: input.treasuryFeeVaultAuthority ?? null, isWritable: false, }, tokenInfos: { value: input.tokenInfos ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false }, rent: { value: input.rent ?? null, isWritable: false }, tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedAccount >; // Original args. const args = { ...input }; // Resolve default values. if (!accounts.systemProgram.value) { accounts.systemProgram.value = "11111111111111111111111111111111" as Address<"11111111111111111111111111111111">; } if (!accounts.rent.value) { accounts.rent.value = "SysvarRent111111111111111111111111111111111" as Address<"SysvarRent111111111111111111111111111111111">; } if (!accounts.tokenProgram.value) { accounts.tokenProgram.value = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" as Address<"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA">; } const getAccountMeta = getAccountMetaFactory(programAddress, "programId"); return Object.freeze({ accounts: [ getAccountMeta(accounts.signer), getAccountMeta(accounts.globalConfig), getAccountMeta(accounts.feeMint), getAccountMeta(accounts.treasuryFeeVault), getAccountMeta(accounts.treasuryFeeVaultAuthority), getAccountMeta(accounts.tokenInfos), getAccountMeta(accounts.systemProgram), getAccountMeta(accounts.rent), getAccountMeta(accounts.tokenProgram), ], data: getUpdateTreasuryFeeVaultInstructionDataEncoder().encode( args as UpdateTreasuryFeeVaultInstructionDataArgs, ), programAddress, } as UpdateTreasuryFeeVaultInstruction< TProgramAddress, TAccountSigner, TAccountGlobalConfig, TAccountFeeMint, TAccountTreasuryFeeVault, TAccountTreasuryFeeVaultAuthority, TAccountTokenInfos, TAccountSystemProgram, TAccountRent, TAccountTokenProgram >); } export type ParsedUpdateTreasuryFeeVaultInstruction< TProgram extends string = typeof YVAULTS_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { signer: TAccountMetas[0]; globalConfig: TAccountMetas[1]; feeMint: TAccountMetas[2]; treasuryFeeVault: TAccountMetas[3]; treasuryFeeVaultAuthority: TAccountMetas[4]; tokenInfos: TAccountMetas[5]; systemProgram: TAccountMetas[6]; rent: TAccountMetas[7]; tokenProgram: TAccountMetas[8]; }; data: UpdateTreasuryFeeVaultInstructionData; }; export function parseUpdateTreasuryFeeVaultInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData, ): ParsedUpdateTreasuryFeeVaultInstruction { if (instruction.accounts.length < 9) { // 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: { signer: getNextAccount(), globalConfig: getNextAccount(), feeMint: getNextAccount(), treasuryFeeVault: getNextAccount(), treasuryFeeVaultAuthority: getNextAccount(), tokenInfos: getNextAccount(), systemProgram: getNextAccount(), rent: getNextAccount(), tokenProgram: getNextAccount(), }, data: getUpdateTreasuryFeeVaultInstructionDataDecoder().decode( instruction.data, ), }; }