/** * 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 { address, combineCodec, getAddressEncoder, getProgramDerivedAddress, getStructDecoder, getStructEncoder, getU8Decoder, getU8Encoder, getUtf8Encoder, 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, type WritableSignerAccount, } from '@solana/kit'; import { COMMERCE_PROGRAM_PROGRAM_ADDRESS } from '../programs'; import { expectAddress, getAccountMetaFactory, type ResolvedAccount, } from '../shared'; export const REFUND_PAYMENT_DISCRIMINATOR = 5; export function getRefundPaymentDiscriminatorBytes() { return getU8Encoder().encode(REFUND_PAYMENT_DISCRIMINATOR); } export type RefundPaymentInstruction< TProgram extends string = typeof COMMERCE_PROGRAM_PROGRAM_ADDRESS, TAccountPayer extends string | AccountMeta = string, TAccountPayment extends string | AccountMeta = string, TAccountOperatorAuthority extends string | AccountMeta = string, TAccountBuyer extends string | AccountMeta = string, TAccountMerchant extends string | AccountMeta = string, TAccountOperator extends string | AccountMeta = string, TAccountMerchantOperatorConfig extends string | AccountMeta = string, TAccountMint extends string | AccountMeta = string, TAccountMerchantEscrowAta extends string | AccountMeta = string, TAccountBuyerAta extends string | AccountMeta = string, TAccountTokenProgram extends | string | AccountMeta = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', TAccountSystemProgram extends | string | AccountMeta = '11111111111111111111111111111111', TAccountEventAuthority extends | string | AccountMeta = '3VSJP7faqLk6MbCaNtMYc2Y8S8hMXRsZ5cBcwh1fjMH1', TAccountCommerceProgram extends | string | AccountMeta = 'commkU28d52cwo2Ma3Marxz4Qr9REtfJtuUfqnDnbhT', TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & InstructionWithData & InstructionWithAccounts< [ TAccountPayer extends string ? WritableSignerAccount & AccountSignerMeta : TAccountPayer, TAccountPayment extends string ? WritableAccount : TAccountPayment, TAccountOperatorAuthority extends string ? ReadonlySignerAccount & AccountSignerMeta : TAccountOperatorAuthority, TAccountBuyer extends string ? ReadonlyAccount : TAccountBuyer, TAccountMerchant extends string ? ReadonlyAccount : TAccountMerchant, TAccountOperator extends string ? ReadonlyAccount : TAccountOperator, TAccountMerchantOperatorConfig extends string ? ReadonlyAccount : TAccountMerchantOperatorConfig, TAccountMint extends string ? ReadonlyAccount : TAccountMint, TAccountMerchantEscrowAta extends string ? WritableAccount : TAccountMerchantEscrowAta, TAccountBuyerAta extends string ? WritableAccount : TAccountBuyerAta, TAccountTokenProgram extends string ? ReadonlyAccount : TAccountTokenProgram, TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, TAccountEventAuthority extends string ? ReadonlyAccount : TAccountEventAuthority, TAccountCommerceProgram extends string ? ReadonlyAccount : TAccountCommerceProgram, ...TRemainingAccounts, ] >; export type RefundPaymentInstructionData = { discriminator: number }; export type RefundPaymentInstructionDataArgs = {}; export function getRefundPaymentInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([['discriminator', getU8Encoder()]]), (value) => ({ ...value, discriminator: REFUND_PAYMENT_DISCRIMINATOR }) ); } export function getRefundPaymentInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([['discriminator', getU8Decoder()]]); } export function getRefundPaymentInstructionDataCodec(): FixedSizeCodec< RefundPaymentInstructionDataArgs, RefundPaymentInstructionData > { return combineCodec( getRefundPaymentInstructionDataEncoder(), getRefundPaymentInstructionDataDecoder() ); } export type RefundPaymentAsyncInput< TAccountPayer extends string = string, TAccountPayment extends string = string, TAccountOperatorAuthority extends string = string, TAccountBuyer extends string = string, TAccountMerchant extends string = string, TAccountOperator extends string = string, TAccountMerchantOperatorConfig extends string = string, TAccountMint extends string = string, TAccountMerchantEscrowAta extends string = string, TAccountBuyerAta extends string = string, TAccountTokenProgram extends string = string, TAccountSystemProgram extends string = string, TAccountEventAuthority extends string = string, TAccountCommerceProgram extends string = string, > = { payer: TransactionSigner; /** Payment PDA being updated */ payment: Address; operatorAuthority: TransactionSigner; /** Refund destination owner */ buyer: Address; /** Merchant PDA */ merchant: Address; /** Operator PDA */ operator?: Address; /** Merchant Operator Config PDA */ merchantOperatorConfig: Address; mint: Address; /** Merchant Escrow ATA (Merchant PDA is owner) */ merchantEscrowAta?: Address; buyerAta?: Address; tokenProgram?: Address; systemProgram?: Address; /** Event authority PDA */ eventAuthority?: Address; /** Commerce Program ID */ commerceProgram?: Address; }; export async function getRefundPaymentInstructionAsync< TAccountPayer extends string, TAccountPayment extends string, TAccountOperatorAuthority extends string, TAccountBuyer extends string, TAccountMerchant extends string, TAccountOperator extends string, TAccountMerchantOperatorConfig extends string, TAccountMint extends string, TAccountMerchantEscrowAta extends string, TAccountBuyerAta extends string, TAccountTokenProgram extends string, TAccountSystemProgram extends string, TAccountEventAuthority extends string, TAccountCommerceProgram extends string, TProgramAddress extends Address = typeof COMMERCE_PROGRAM_PROGRAM_ADDRESS, >( input: RefundPaymentAsyncInput< TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountBuyerAta, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >, config?: { programAddress?: TProgramAddress } ): Promise< RefundPaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountBuyerAta, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram > > { // Program address. const programAddress = config?.programAddress ?? COMMERCE_PROGRAM_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { payer: { value: input.payer ?? null, isWritable: true }, payment: { value: input.payment ?? null, isWritable: true }, operatorAuthority: { value: input.operatorAuthority ?? null, isWritable: false, }, buyer: { value: input.buyer ?? null, isWritable: false }, merchant: { value: input.merchant ?? null, isWritable: false }, operator: { value: input.operator ?? null, isWritable: false }, merchantOperatorConfig: { value: input.merchantOperatorConfig ?? null, isWritable: false, }, mint: { value: input.mint ?? null, isWritable: false }, merchantEscrowAta: { value: input.merchantEscrowAta ?? null, isWritable: true, }, buyerAta: { value: input.buyerAta ?? null, isWritable: true }, tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false }, eventAuthority: { value: input.eventAuthority ?? null, isWritable: false }, commerceProgram: { value: input.commerceProgram ?? null, isWritable: false, }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedAccount >; // Resolve default values. if (!accounts.operator.value) { accounts.operator.value = await getProgramDerivedAddress({ programAddress: 'commkU28d52cwo2Ma3Marxz4Qr9REtfJtuUfqnDnbhT' as Address<'commkU28d52cwo2Ma3Marxz4Qr9REtfJtuUfqnDnbhT'>, seeds: [ getUtf8Encoder().encode('operator'), getAddressEncoder().encode( expectAddress(accounts.operatorAuthority.value) ), ], }); } if (!accounts.merchantEscrowAta.value) { accounts.merchantEscrowAta.value = await getProgramDerivedAddress({ programAddress: 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>, seeds: [ getAddressEncoder().encode(expectAddress(accounts.merchant.value)), getAddressEncoder().encode( address('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA') ), getAddressEncoder().encode(expectAddress(accounts.mint.value)), ], }); } if (!accounts.buyerAta.value) { accounts.buyerAta.value = await getProgramDerivedAddress({ programAddress: 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>, seeds: [ getAddressEncoder().encode(expectAddress(accounts.buyer.value)), getAddressEncoder().encode( address('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA') ), getAddressEncoder().encode(expectAddress(accounts.mint.value)), ], }); } if (!accounts.tokenProgram.value) { accounts.tokenProgram.value = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>; } if (!accounts.systemProgram.value) { accounts.systemProgram.value = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; } if (!accounts.eventAuthority.value) { accounts.eventAuthority.value = '3VSJP7faqLk6MbCaNtMYc2Y8S8hMXRsZ5cBcwh1fjMH1' as Address<'3VSJP7faqLk6MbCaNtMYc2Y8S8hMXRsZ5cBcwh1fjMH1'>; } if (!accounts.commerceProgram.value) { accounts.commerceProgram.value = 'commkU28d52cwo2Ma3Marxz4Qr9REtfJtuUfqnDnbhT' as Address<'commkU28d52cwo2Ma3Marxz4Qr9REtfJtuUfqnDnbhT'>; } const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); return Object.freeze({ accounts: [ getAccountMeta(accounts.payer), getAccountMeta(accounts.payment), getAccountMeta(accounts.operatorAuthority), getAccountMeta(accounts.buyer), getAccountMeta(accounts.merchant), getAccountMeta(accounts.operator), getAccountMeta(accounts.merchantOperatorConfig), getAccountMeta(accounts.mint), getAccountMeta(accounts.merchantEscrowAta), getAccountMeta(accounts.buyerAta), getAccountMeta(accounts.tokenProgram), getAccountMeta(accounts.systemProgram), getAccountMeta(accounts.eventAuthority), getAccountMeta(accounts.commerceProgram), ], data: getRefundPaymentInstructionDataEncoder().encode({}), programAddress, } as RefundPaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountBuyerAta, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >); } export type RefundPaymentInput< TAccountPayer extends string = string, TAccountPayment extends string = string, TAccountOperatorAuthority extends string = string, TAccountBuyer extends string = string, TAccountMerchant extends string = string, TAccountOperator extends string = string, TAccountMerchantOperatorConfig extends string = string, TAccountMint extends string = string, TAccountMerchantEscrowAta extends string = string, TAccountBuyerAta extends string = string, TAccountTokenProgram extends string = string, TAccountSystemProgram extends string = string, TAccountEventAuthority extends string = string, TAccountCommerceProgram extends string = string, > = { payer: TransactionSigner; /** Payment PDA being updated */ payment: Address; operatorAuthority: TransactionSigner; /** Refund destination owner */ buyer: Address; /** Merchant PDA */ merchant: Address; /** Operator PDA */ operator: Address; /** Merchant Operator Config PDA */ merchantOperatorConfig: Address; mint: Address; /** Merchant Escrow ATA (Merchant PDA is owner) */ merchantEscrowAta: Address; buyerAta: Address; tokenProgram?: Address; systemProgram?: Address; /** Event authority PDA */ eventAuthority?: Address; /** Commerce Program ID */ commerceProgram?: Address; }; export function getRefundPaymentInstruction< TAccountPayer extends string, TAccountPayment extends string, TAccountOperatorAuthority extends string, TAccountBuyer extends string, TAccountMerchant extends string, TAccountOperator extends string, TAccountMerchantOperatorConfig extends string, TAccountMint extends string, TAccountMerchantEscrowAta extends string, TAccountBuyerAta extends string, TAccountTokenProgram extends string, TAccountSystemProgram extends string, TAccountEventAuthority extends string, TAccountCommerceProgram extends string, TProgramAddress extends Address = typeof COMMERCE_PROGRAM_PROGRAM_ADDRESS, >( input: RefundPaymentInput< TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountBuyerAta, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >, config?: { programAddress?: TProgramAddress } ): RefundPaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountBuyerAta, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram > { // Program address. const programAddress = config?.programAddress ?? COMMERCE_PROGRAM_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { payer: { value: input.payer ?? null, isWritable: true }, payment: { value: input.payment ?? null, isWritable: true }, operatorAuthority: { value: input.operatorAuthority ?? null, isWritable: false, }, buyer: { value: input.buyer ?? null, isWritable: false }, merchant: { value: input.merchant ?? null, isWritable: false }, operator: { value: input.operator ?? null, isWritable: false }, merchantOperatorConfig: { value: input.merchantOperatorConfig ?? null, isWritable: false, }, mint: { value: input.mint ?? null, isWritable: false }, merchantEscrowAta: { value: input.merchantEscrowAta ?? null, isWritable: true, }, buyerAta: { value: input.buyerAta ?? null, isWritable: true }, tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false }, eventAuthority: { value: input.eventAuthority ?? null, isWritable: false }, commerceProgram: { value: input.commerceProgram ?? null, isWritable: false, }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedAccount >; // Resolve default values. if (!accounts.tokenProgram.value) { accounts.tokenProgram.value = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>; } if (!accounts.systemProgram.value) { accounts.systemProgram.value = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>; } if (!accounts.eventAuthority.value) { accounts.eventAuthority.value = '3VSJP7faqLk6MbCaNtMYc2Y8S8hMXRsZ5cBcwh1fjMH1' as Address<'3VSJP7faqLk6MbCaNtMYc2Y8S8hMXRsZ5cBcwh1fjMH1'>; } if (!accounts.commerceProgram.value) { accounts.commerceProgram.value = 'commkU28d52cwo2Ma3Marxz4Qr9REtfJtuUfqnDnbhT' as Address<'commkU28d52cwo2Ma3Marxz4Qr9REtfJtuUfqnDnbhT'>; } const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); return Object.freeze({ accounts: [ getAccountMeta(accounts.payer), getAccountMeta(accounts.payment), getAccountMeta(accounts.operatorAuthority), getAccountMeta(accounts.buyer), getAccountMeta(accounts.merchant), getAccountMeta(accounts.operator), getAccountMeta(accounts.merchantOperatorConfig), getAccountMeta(accounts.mint), getAccountMeta(accounts.merchantEscrowAta), getAccountMeta(accounts.buyerAta), getAccountMeta(accounts.tokenProgram), getAccountMeta(accounts.systemProgram), getAccountMeta(accounts.eventAuthority), getAccountMeta(accounts.commerceProgram), ], data: getRefundPaymentInstructionDataEncoder().encode({}), programAddress, } as RefundPaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountBuyerAta, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >); } export type ParsedRefundPaymentInstruction< TProgram extends string = typeof COMMERCE_PROGRAM_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { payer: TAccountMetas[0]; /** Payment PDA being updated */ payment: TAccountMetas[1]; operatorAuthority: TAccountMetas[2]; /** Refund destination owner */ buyer: TAccountMetas[3]; /** Merchant PDA */ merchant: TAccountMetas[4]; /** Operator PDA */ operator: TAccountMetas[5]; /** Merchant Operator Config PDA */ merchantOperatorConfig: TAccountMetas[6]; mint: TAccountMetas[7]; /** Merchant Escrow ATA (Merchant PDA is owner) */ merchantEscrowAta: TAccountMetas[8]; buyerAta: TAccountMetas[9]; tokenProgram: TAccountMetas[10]; systemProgram: TAccountMetas[11]; /** Event authority PDA */ eventAuthority: TAccountMetas[12]; /** Commerce Program ID */ commerceProgram: TAccountMetas[13]; }; data: RefundPaymentInstructionData; }; export function parseRefundPaymentInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData ): ParsedRefundPaymentInstruction { if (instruction.accounts.length < 14) { // 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: { payer: getNextAccount(), payment: getNextAccount(), operatorAuthority: getNextAccount(), buyer: getNextAccount(), merchant: getNextAccount(), operator: getNextAccount(), merchantOperatorConfig: getNextAccount(), mint: getNextAccount(), merchantEscrowAta: getNextAccount(), buyerAta: getNextAccount(), tokenProgram: getNextAccount(), systemProgram: getNextAccount(), eventAuthority: getNextAccount(), commerceProgram: getNextAccount(), }, data: getRefundPaymentInstructionDataDecoder().decode(instruction.data), }; }