/** * This code was GENERATED using the codama library. * Please DO NOT EDIT THIS FILE, instead rerun codama to update it. * * @see https://github.com/codama-idl/codama */ import type { Address } from '@solana/addresses'; import { getStructEncoder, getStructDecoder, getU64Encoder, getU64Decoder, getBooleanEncoder, getBooleanDecoder, transformEncoder, transformDecoder, type Codec, type Decoder, type Encoder, combineCodec, getBytesEncoder, getBytesDecoder } from '@solana/codecs'; import type { IAccountMeta, IInstruction, IInstructionWithAccounts, IInstructionWithData, } from '../../utils/instruction-compat'; import { AccountRole } from '../../utils/instruction-compat'; export const PROCESS_PAYMENT_DISCRIMINATOR = new Uint8Array([ 78, 159, 201, 44, 92, 88, 134, 201, ]); export function getProcessPaymentDiscriminatorBytes() { return PROCESS_PAYMENT_DISCRIMINATOR.slice(); } export type ProcessPaymentInstruction< TProgram extends string = 'PodAI111111111111111111111111111111111111111', TAccountPayment extends string | IAccountMeta = string, TAccountWorkOrder extends string | IAccountMeta = string, TAccountProviderAgent extends string | IAccountMeta = string, TAccountPayer extends string | IAccountMeta = string, TAccountPayerTokenAccount extends string | IAccountMeta = string, TAccountProviderTokenAccount extends string | IAccountMeta = string, TAccountTokenMint extends string | IAccountMeta = string, TAccountTokenProgram extends string | IAccountMeta = string, TAccountSystemProgram extends string | IAccountMeta = string, TRemainingAccounts extends readonly IAccountMeta[] = [], > = IInstruction & IInstructionWithData & IInstructionWithAccounts[]>; export type ProcessPaymentInstructionData = { discriminator: Uint8Array; amount: bigint; useConfidentialTransfer: boolean; }; export type ProcessPaymentInstructionDataArgs = { amount: number | bigint; useConfidentialTransfer: boolean; }; export function getProcessPaymentInstructionDataEncoder(): Encoder { return transformEncoder( getStructEncoder([ ['discriminator', getBytesEncoder()], ['amount', getU64Encoder()], ['useConfidentialTransfer', getBooleanEncoder()], ]), (value) => ({ ...value, discriminator: getProcessPaymentDiscriminatorBytes() }) ); } export function getProcessPaymentInstructionDataDecoder(): Decoder { return transformDecoder( getStructDecoder([ ['discriminator', getBytesDecoder()], ['amount', getU64Decoder()], ['useConfidentialTransfer', getBooleanDecoder()], ]), (value) => ({ ...value, discriminator: new Uint8Array(value.discriminator) }) ); } export function getProcessPaymentInstructionDataCodec(): Codec< ProcessPaymentInstructionDataArgs, ProcessPaymentInstructionData > { return combineCodec( getProcessPaymentInstructionDataEncoder(), getProcessPaymentInstructionDataDecoder() ); } export type ProcessPaymentInput< TAccountPayment extends string = string, TAccountWorkOrder extends string = string, TAccountProviderAgent extends string = string, TAccountPayer extends string = string, TAccountPayerTokenAccount extends string = string, TAccountProviderTokenAccount extends string = string, TAccountTokenMint extends string = string, TAccountTokenProgram extends string = string, TAccountSystemProgram extends string = string, > = { payment: Address; workOrder: Address; providerAgent: Address; payer: Address; payerTokenAccount: Address; providerTokenAccount: Address; tokenMint: Address; tokenProgram?: Address; systemProgram?: Address; amount: ProcessPaymentInstructionDataArgs['amount']; useConfidentialTransfer: ProcessPaymentInstructionDataArgs['useConfidentialTransfer']; }; export function getProcessPaymentInstruction< TAccountPayment extends string, TAccountWorkOrder extends string, TAccountProviderAgent extends string, TAccountPayer extends string, TAccountPayerTokenAccount extends string, TAccountProviderTokenAccount extends string, TAccountTokenMint extends string, TAccountTokenProgram extends string, TAccountSystemProgram extends string, >( input: ProcessPaymentInput< TAccountPayment, TAccountWorkOrder, TAccountProviderAgent, TAccountPayer, TAccountPayerTokenAccount, TAccountProviderTokenAccount, TAccountTokenMint, TAccountTokenProgram, TAccountSystemProgram > ): ProcessPaymentInstruction< 'PodAI111111111111111111111111111111111111111', TAccountPayment, TAccountWorkOrder, TAccountProviderAgent, TAccountPayer, TAccountPayerTokenAccount, TAccountProviderTokenAccount, TAccountTokenMint, TAccountTokenProgram, TAccountSystemProgram > { const programAddress = 'PodAI111111111111111111111111111111111111111' as Address<'PodAI111111111111111111111111111111111111111'>; const accounts = [ { address: input.payment, role: 'writable' }, { address: input.workOrder, role: 'writable' }, { address: input.providerAgent, role: 'writable' }, { address: input.payer, role: 'writable', signer: true }, { address: input.payerTokenAccount, role: 'writable' }, { address: input.providerTokenAccount, role: 'writable' }, { address: input.tokenMint, role: 'readonly' }, { address: input.tokenProgram ?? ('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address), role: 'readonly' }, { address: input.systemProgram ?? ('11111111111111111111111111111111' as Address), role: 'readonly' } ] as [ IAccountMeta, IAccountMeta, IAccountMeta, IAccountMeta, IAccountMeta, IAccountMeta, IAccountMeta, IAccountMeta, IAccountMeta ]; // Instruction data const args = { amount: input.amount, useConfidentialTransfer: input.useConfidentialTransfer, }; let data = new Uint8Array(getProcessPaymentInstructionDataEncoder().encode(args)); if (!(data instanceof Uint8Array)) { data = new Uint8Array(data); } return { programAddress, accounts: accounts as any, data: data as Uint8Array & ArrayBufferLike, } as any as ProcessPaymentInstruction< 'PodAI111111111111111111111111111111111111111', TAccountPayment, TAccountWorkOrder, TAccountProviderAgent, TAccountPayer, TAccountPayerTokenAccount, TAccountProviderTokenAccount, TAccountTokenMint, TAccountTokenProgram, TAccountSystemProgram >; } export type ParsedProcessPaymentInstruction< TProgram extends string = 'PodAI111111111111111111111111111111111111111', TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[], > = { programId: Address; accounts: { payment: TAccountMetas[0]; workOrder: TAccountMetas[1]; providerAgent: TAccountMetas[2]; payer: TAccountMetas[3]; payerTokenAccount: TAccountMetas[4]; providerTokenAccount: TAccountMetas[5]; tokenMint: TAccountMetas[6]; tokenProgram: TAccountMetas[7]; systemProgram: TAccountMetas[8]; }; data: ProcessPaymentInstructionData; }; export function parseProcessPaymentInstruction< TProgram extends string, TAccountMetas extends readonly IAccountMeta[], >( instruction: IInstruction & IInstructionWithAccounts & IInstructionWithData ): ParsedProcessPaymentInstruction { if (instruction.accounts.length < 9) { throw new Error('Not enough accounts'); } let accountIndex = 0; const getNextAccount = () => { const accountMeta = instruction.accounts![accountIndex]!; accountIndex += 1; return accountMeta; }; return { programId: instruction.programAddress, accounts: { payment: getNextAccount(), workOrder: getNextAccount(), providerAgent: getNextAccount(), payer: getNextAccount(), payerTokenAccount: getNextAccount(), providerTokenAccount: getNextAccount(), tokenMint: getNextAccount(), tokenProgram: getNextAccount(), systemProgram: getNextAccount(), }, data: getProcessPaymentInstructionDataDecoder().decode(instruction.data), }; } // Async version for modern Web3.js v2 usage export async function getProcessPaymentInstructionAsync< TAccountPayment extends string, TAccountWorkOrder extends string, TAccountProviderAgent extends string, TAccountPayer extends string, TAccountPayerTokenAccount extends string, TAccountProviderTokenAccount extends string, TAccountTokenMint extends string, TAccountTokenProgram extends string, TAccountSystemProgram extends string, >( input: ProcessPaymentInput< TAccountPayment, TAccountWorkOrder, TAccountProviderAgent, TAccountPayer, TAccountPayerTokenAccount, TAccountProviderTokenAccount, TAccountTokenMint, TAccountTokenProgram, TAccountSystemProgram > ): Promise> { return getProcessPaymentInstruction(input); }