/** * 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 CLEAR_PAYMENT_DISCRIMINATOR = 4; export function getClearPaymentDiscriminatorBytes() { return getU8Encoder().encode(CLEAR_PAYMENT_DISCRIMINATOR); } export type ClearPaymentInstruction< 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, TAccountMerchantSettlementAta extends string | AccountMeta = string, TAccountOperatorSettlementAta extends string | AccountMeta = string, TAccountTokenProgram extends | string | AccountMeta = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', TAccountAssociatedTokenProgram extends | string | AccountMeta = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL', 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, TAccountMerchantSettlementAta extends string ? WritableAccount : TAccountMerchantSettlementAta, TAccountOperatorSettlementAta extends string ? WritableAccount : TAccountOperatorSettlementAta, TAccountTokenProgram extends string ? ReadonlyAccount : TAccountTokenProgram, TAccountAssociatedTokenProgram extends string ? ReadonlyAccount : TAccountAssociatedTokenProgram, TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, TAccountEventAuthority extends string ? ReadonlyAccount : TAccountEventAuthority, TAccountCommerceProgram extends string ? ReadonlyAccount : TAccountCommerceProgram, ...TRemainingAccounts, ] >; export type ClearPaymentInstructionData = { discriminator: number }; export type ClearPaymentInstructionDataArgs = {}; export function getClearPaymentInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([['discriminator', getU8Encoder()]]), (value) => ({ ...value, discriminator: CLEAR_PAYMENT_DISCRIMINATOR }) ); } export function getClearPaymentInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([['discriminator', getU8Decoder()]]); } export function getClearPaymentInstructionDataCodec(): FixedSizeCodec< ClearPaymentInstructionDataArgs, ClearPaymentInstructionData > { return combineCodec( getClearPaymentInstructionDataEncoder(), getClearPaymentInstructionDataDecoder() ); } export type ClearPaymentAsyncInput< 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, TAccountMerchantSettlementAta extends string = string, TAccountOperatorSettlementAta extends string = string, TAccountTokenProgram extends string = string, TAccountAssociatedTokenProgram extends string = string, TAccountSystemProgram extends string = string, TAccountEventAuthority extends string = string, TAccountCommerceProgram extends string = string, > = { payer: TransactionSigner; /** New Payment PDA being created */ payment: Address; operatorAuthority: TransactionSigner; buyer: Address; /** Merchant PDA */ merchant: Address; /** Operator PDA */ operator?: Address; merchantOperatorConfig: Address; mint: Address; /** Merchant Escrow ATA (Merchant PDA is owner) */ merchantEscrowAta?: Address; /** Merchant Settlement ATA (Merchant settlement wallet is owner) */ merchantSettlementAta: Address; /** Operator Settlement ATA (Operator owner is owner) */ operatorSettlementAta?: Address; tokenProgram?: Address; associatedTokenProgram?: Address; systemProgram?: Address; /** Event authority PDA */ eventAuthority?: Address; /** Commerce Program ID */ commerceProgram?: Address; }; export async function getClearPaymentInstructionAsync< 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, TAccountMerchantSettlementAta extends string, TAccountOperatorSettlementAta extends string, TAccountTokenProgram extends string, TAccountAssociatedTokenProgram extends string, TAccountSystemProgram extends string, TAccountEventAuthority extends string, TAccountCommerceProgram extends string, TProgramAddress extends Address = typeof COMMERCE_PROGRAM_PROGRAM_ADDRESS, >( input: ClearPaymentAsyncInput< TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, TAccountOperatorSettlementAta, TAccountTokenProgram, TAccountAssociatedTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >, config?: { programAddress?: TProgramAddress } ): Promise< ClearPaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, TAccountOperatorSettlementAta, TAccountTokenProgram, TAccountAssociatedTokenProgram, 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, }, merchantSettlementAta: { value: input.merchantSettlementAta ?? null, isWritable: true, }, operatorSettlementAta: { value: input.operatorSettlementAta ?? null, isWritable: true, }, tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, associatedTokenProgram: { value: input.associatedTokenProgram ?? 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.operatorSettlementAta.value) { accounts.operatorSettlementAta.value = await getProgramDerivedAddress({ programAddress: 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>, seeds: [ getAddressEncoder().encode( expectAddress(accounts.operatorAuthority.value) ), getAddressEncoder().encode( address('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA') ), getAddressEncoder().encode(expectAddress(accounts.mint.value)), ], }); } if (!accounts.tokenProgram.value) { accounts.tokenProgram.value = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>; } if (!accounts.associatedTokenProgram.value) { accounts.associatedTokenProgram.value = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>; } 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.merchantSettlementAta), getAccountMeta(accounts.operatorSettlementAta), getAccountMeta(accounts.tokenProgram), getAccountMeta(accounts.associatedTokenProgram), getAccountMeta(accounts.systemProgram), getAccountMeta(accounts.eventAuthority), getAccountMeta(accounts.commerceProgram), ], data: getClearPaymentInstructionDataEncoder().encode({}), programAddress, } as ClearPaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, TAccountOperatorSettlementAta, TAccountTokenProgram, TAccountAssociatedTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >); } export type ClearPaymentInput< 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, TAccountMerchantSettlementAta extends string = string, TAccountOperatorSettlementAta extends string = string, TAccountTokenProgram extends string = string, TAccountAssociatedTokenProgram extends string = string, TAccountSystemProgram extends string = string, TAccountEventAuthority extends string = string, TAccountCommerceProgram extends string = string, > = { payer: TransactionSigner; /** New Payment PDA being created */ payment: Address; operatorAuthority: TransactionSigner; buyer: Address; /** Merchant PDA */ merchant: Address; /** Operator PDA */ operator: Address; merchantOperatorConfig: Address; mint: Address; /** Merchant Escrow ATA (Merchant PDA is owner) */ merchantEscrowAta: Address; /** Merchant Settlement ATA (Merchant settlement wallet is owner) */ merchantSettlementAta: Address; /** Operator Settlement ATA (Operator owner is owner) */ operatorSettlementAta: Address; tokenProgram?: Address; associatedTokenProgram?: Address; systemProgram?: Address; /** Event authority PDA */ eventAuthority?: Address; /** Commerce Program ID */ commerceProgram?: Address; }; export function getClearPaymentInstruction< 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, TAccountMerchantSettlementAta extends string, TAccountOperatorSettlementAta extends string, TAccountTokenProgram extends string, TAccountAssociatedTokenProgram extends string, TAccountSystemProgram extends string, TAccountEventAuthority extends string, TAccountCommerceProgram extends string, TProgramAddress extends Address = typeof COMMERCE_PROGRAM_PROGRAM_ADDRESS, >( input: ClearPaymentInput< TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, TAccountOperatorSettlementAta, TAccountTokenProgram, TAccountAssociatedTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >, config?: { programAddress?: TProgramAddress } ): ClearPaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, TAccountOperatorSettlementAta, TAccountTokenProgram, TAccountAssociatedTokenProgram, 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, }, merchantSettlementAta: { value: input.merchantSettlementAta ?? null, isWritable: true, }, operatorSettlementAta: { value: input.operatorSettlementAta ?? null, isWritable: true, }, tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, associatedTokenProgram: { value: input.associatedTokenProgram ?? 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.associatedTokenProgram.value) { accounts.associatedTokenProgram.value = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>; } 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.merchantSettlementAta), getAccountMeta(accounts.operatorSettlementAta), getAccountMeta(accounts.tokenProgram), getAccountMeta(accounts.associatedTokenProgram), getAccountMeta(accounts.systemProgram), getAccountMeta(accounts.eventAuthority), getAccountMeta(accounts.commerceProgram), ], data: getClearPaymentInstructionDataEncoder().encode({}), programAddress, } as ClearPaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountMerchant, TAccountOperator, TAccountMerchantOperatorConfig, TAccountMint, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, TAccountOperatorSettlementAta, TAccountTokenProgram, TAccountAssociatedTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >); } export type ParsedClearPaymentInstruction< TProgram extends string = typeof COMMERCE_PROGRAM_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { payer: TAccountMetas[0]; /** New Payment PDA being created */ payment: TAccountMetas[1]; operatorAuthority: TAccountMetas[2]; buyer: TAccountMetas[3]; /** Merchant PDA */ merchant: TAccountMetas[4]; /** Operator PDA */ operator: TAccountMetas[5]; merchantOperatorConfig: TAccountMetas[6]; mint: TAccountMetas[7]; /** Merchant Escrow ATA (Merchant PDA is owner) */ merchantEscrowAta: TAccountMetas[8]; /** Merchant Settlement ATA (Merchant settlement wallet is owner) */ merchantSettlementAta: TAccountMetas[9]; /** Operator Settlement ATA (Operator owner is owner) */ operatorSettlementAta: TAccountMetas[10]; tokenProgram: TAccountMetas[11]; associatedTokenProgram: TAccountMetas[12]; systemProgram: TAccountMetas[13]; /** Event authority PDA */ eventAuthority: TAccountMetas[14]; /** Commerce Program ID */ commerceProgram: TAccountMetas[15]; }; data: ClearPaymentInstructionData; }; export function parseClearPaymentInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData ): ParsedClearPaymentInstruction { if (instruction.accounts.length < 16) { // 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(), merchantSettlementAta: getNextAccount(), operatorSettlementAta: getNextAccount(), tokenProgram: getNextAccount(), associatedTokenProgram: getNextAccount(), systemProgram: getNextAccount(), eventAuthority: getNextAccount(), commerceProgram: getNextAccount(), }, data: getClearPaymentInstructionDataDecoder().decode(instruction.data), }; }