/** * 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, getStructDecoder, getStructEncoder, getU32Decoder, getU32Encoder, getU64Decoder, getU64Encoder, 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 { SYSTEM_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const WITHDRAW_NONCE_ACCOUNT_DISCRIMINATOR = 5; export function getWithdrawNonceAccountDiscriminatorBytes() { return getU32Encoder().encode(WITHDRAW_NONCE_ACCOUNT_DISCRIMINATOR); } export type WithdrawNonceAccountInstruction< TProgram extends string = typeof SYSTEM_PROGRAM_ADDRESS, TAccountNonceAccount extends string | AccountMeta = string, TAccountRecipientAccount extends string | AccountMeta = string, TAccountRecentBlockhashesSysvar extends | string | AccountMeta = 'SysvarRecentB1ockHashes11111111111111111111', TAccountRentSysvar extends | string | AccountMeta = 'SysvarRent111111111111111111111111111111111', TAccountNonceAuthority extends string | AccountMeta = string, TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & InstructionWithData & InstructionWithAccounts< [ TAccountNonceAccount extends string ? WritableAccount : TAccountNonceAccount, TAccountRecipientAccount extends string ? WritableAccount : TAccountRecipientAccount, TAccountRecentBlockhashesSysvar extends string ? ReadonlyAccount : TAccountRecentBlockhashesSysvar, TAccountRentSysvar extends string ? ReadonlyAccount : TAccountRentSysvar, TAccountNonceAuthority extends string ? ReadonlySignerAccount & AccountSignerMeta : TAccountNonceAuthority, ...TRemainingAccounts, ] >; export type WithdrawNonceAccountInstructionData = { discriminator: number; withdrawAmount: bigint; }; export type WithdrawNonceAccountInstructionDataArgs = { withdrawAmount: number | bigint; }; export function getWithdrawNonceAccountInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([ ['discriminator', getU32Encoder()], ['withdrawAmount', getU64Encoder()], ]), (value) => ({ ...value, discriminator: WITHDRAW_NONCE_ACCOUNT_DISCRIMINATOR, }) ); } export function getWithdrawNonceAccountInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ['discriminator', getU32Decoder()], ['withdrawAmount', getU64Decoder()], ]); } export function getWithdrawNonceAccountInstructionDataCodec(): FixedSizeCodec< WithdrawNonceAccountInstructionDataArgs, WithdrawNonceAccountInstructionData > { return combineCodec( getWithdrawNonceAccountInstructionDataEncoder(), getWithdrawNonceAccountInstructionDataDecoder() ); } export type WithdrawNonceAccountInput< TAccountNonceAccount extends string = string, TAccountRecipientAccount extends string = string, TAccountRecentBlockhashesSysvar extends string = string, TAccountRentSysvar extends string = string, TAccountNonceAuthority extends string = string, > = { nonceAccount: Address; recipientAccount: Address; recentBlockhashesSysvar?: Address; rentSysvar?: Address; nonceAuthority: TransactionSigner; withdrawAmount: WithdrawNonceAccountInstructionDataArgs['withdrawAmount']; }; export function getWithdrawNonceAccountInstruction< TAccountNonceAccount extends string, TAccountRecipientAccount extends string, TAccountRecentBlockhashesSysvar extends string, TAccountRentSysvar extends string, TAccountNonceAuthority extends string, TProgramAddress extends Address = typeof SYSTEM_PROGRAM_ADDRESS, >( input: WithdrawNonceAccountInput< TAccountNonceAccount, TAccountRecipientAccount, TAccountRecentBlockhashesSysvar, TAccountRentSysvar, TAccountNonceAuthority >, config?: { programAddress?: TProgramAddress } ): WithdrawNonceAccountInstruction< TProgramAddress, TAccountNonceAccount, TAccountRecipientAccount, TAccountRecentBlockhashesSysvar, TAccountRentSysvar, TAccountNonceAuthority > { // Program address. const programAddress = config?.programAddress ?? SYSTEM_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { nonceAccount: { value: input.nonceAccount ?? null, isWritable: true }, recipientAccount: { value: input.recipientAccount ?? null, isWritable: true, }, recentBlockhashesSysvar: { value: input.recentBlockhashesSysvar ?? null, isWritable: false, }, rentSysvar: { value: input.rentSysvar ?? null, isWritable: false }, nonceAuthority: { value: input.nonceAuthority ?? null, isWritable: false }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedAccount >; // Original args. const args = { ...input }; // Resolve default values. if (!accounts.recentBlockhashesSysvar.value) { accounts.recentBlockhashesSysvar.value = 'SysvarRecentB1ockHashes11111111111111111111' as Address<'SysvarRecentB1ockHashes11111111111111111111'>; } if (!accounts.rentSysvar.value) { accounts.rentSysvar.value = 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>; } const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); return Object.freeze({ accounts: [ getAccountMeta(accounts.nonceAccount), getAccountMeta(accounts.recipientAccount), getAccountMeta(accounts.recentBlockhashesSysvar), getAccountMeta(accounts.rentSysvar), getAccountMeta(accounts.nonceAuthority), ], data: getWithdrawNonceAccountInstructionDataEncoder().encode( args as WithdrawNonceAccountInstructionDataArgs ), programAddress, } as WithdrawNonceAccountInstruction< TProgramAddress, TAccountNonceAccount, TAccountRecipientAccount, TAccountRecentBlockhashesSysvar, TAccountRentSysvar, TAccountNonceAuthority >); } export type ParsedWithdrawNonceAccountInstruction< TProgram extends string = typeof SYSTEM_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { nonceAccount: TAccountMetas[0]; recipientAccount: TAccountMetas[1]; recentBlockhashesSysvar: TAccountMetas[2]; rentSysvar: TAccountMetas[3]; nonceAuthority: TAccountMetas[4]; }; data: WithdrawNonceAccountInstructionData; }; export function parseWithdrawNonceAccountInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData ): ParsedWithdrawNonceAccountInstruction { if (instruction.accounts.length < 5) { // 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: { nonceAccount: getNextAccount(), recipientAccount: getNextAccount(), recentBlockhashesSysvar: getNextAccount(), rentSysvar: getNextAccount(), nonceAuthority: getNextAccount(), }, data: getWithdrawNonceAccountInstructionDataDecoder().decode( instruction.data ), }; }