/** * 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, getU32Decoder, getU32Encoder, getU64Decoder, getU64Encoder, 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, expectSome, getAccountMetaFactory, type ResolvedAccount, } from '../shared'; export const MAKE_PAYMENT_DISCRIMINATOR = 3; export function getMakePaymentDiscriminatorBytes() { return getU8Encoder().encode(MAKE_PAYMENT_DISCRIMINATOR); } export type MakePaymentInstruction< 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, TAccountOperator extends string | AccountMeta = string, TAccountMerchant extends string | AccountMeta = string, TAccountMerchantOperatorConfig extends string | AccountMeta = string, TAccountMint extends string | AccountMeta = string, TAccountBuyerAta extends string | AccountMeta = string, TAccountMerchantEscrowAta extends string | AccountMeta = string, TAccountMerchantSettlementAta 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 ? ReadonlySignerAccount & AccountSignerMeta : TAccountBuyer, TAccountOperator extends string ? ReadonlyAccount : TAccountOperator, TAccountMerchant extends string ? ReadonlyAccount : TAccountMerchant, TAccountMerchantOperatorConfig extends string ? WritableAccount : TAccountMerchantOperatorConfig, TAccountMint extends string ? ReadonlyAccount : TAccountMint, TAccountBuyerAta extends string ? WritableAccount : TAccountBuyerAta, TAccountMerchantEscrowAta extends string ? WritableAccount : TAccountMerchantEscrowAta, TAccountMerchantSettlementAta extends string ? WritableAccount : TAccountMerchantSettlementAta, TAccountTokenProgram extends string ? ReadonlyAccount : TAccountTokenProgram, TAccountSystemProgram extends string ? ReadonlyAccount : TAccountSystemProgram, TAccountEventAuthority extends string ? ReadonlyAccount : TAccountEventAuthority, TAccountCommerceProgram extends string ? ReadonlyAccount : TAccountCommerceProgram, ...TRemainingAccounts, ] >; export type MakePaymentInstructionData = { discriminator: number; orderId: number; amount: bigint; bump: number; }; export type MakePaymentInstructionDataArgs = { orderId: number; amount: number | bigint; bump: number; }; export function getMakePaymentInstructionDataEncoder(): FixedSizeEncoder { return transformEncoder( getStructEncoder([ ['discriminator', getU8Encoder()], ['orderId', getU32Encoder()], ['amount', getU64Encoder()], ['bump', getU8Encoder()], ]), (value) => ({ ...value, discriminator: MAKE_PAYMENT_DISCRIMINATOR }) ); } export function getMakePaymentInstructionDataDecoder(): FixedSizeDecoder { return getStructDecoder([ ['discriminator', getU8Decoder()], ['orderId', getU32Decoder()], ['amount', getU64Decoder()], ['bump', getU8Decoder()], ]); } export function getMakePaymentInstructionDataCodec(): FixedSizeCodec< MakePaymentInstructionDataArgs, MakePaymentInstructionData > { return combineCodec( getMakePaymentInstructionDataEncoder(), getMakePaymentInstructionDataDecoder() ); } export type MakePaymentAsyncInput< TAccountPayer extends string = string, TAccountPayment extends string = string, TAccountOperatorAuthority extends string = string, TAccountBuyer extends string = string, TAccountOperator extends string = string, TAccountMerchant extends string = string, TAccountMerchantOperatorConfig extends string = string, TAccountMint extends string = string, TAccountBuyerAta extends string = string, TAccountMerchantEscrowAta extends string = string, TAccountMerchantSettlementAta extends string = string, TAccountTokenProgram extends string = string, TAccountSystemProgram extends string = string, TAccountEventAuthority extends string = string, TAccountCommerceProgram extends string = string, > = { payer: TransactionSigner; payment?: Address; operatorAuthority: TransactionSigner; buyer: TransactionSigner; operator?: Address; /** Merchant PDA */ merchant: Address; merchantOperatorConfig: Address; mint: Address; buyerAta?: Address; merchantEscrowAta?: Address; merchantSettlementAta: Address; tokenProgram?: Address; systemProgram?: Address; /** Event authority PDA */ eventAuthority?: Address; /** Commerce Program ID */ commerceProgram?: Address; orderId: MakePaymentInstructionDataArgs['orderId']; amount: MakePaymentInstructionDataArgs['amount']; bump: MakePaymentInstructionDataArgs['bump']; }; export async function getMakePaymentInstructionAsync< TAccountPayer extends string, TAccountPayment extends string, TAccountOperatorAuthority extends string, TAccountBuyer extends string, TAccountOperator extends string, TAccountMerchant extends string, TAccountMerchantOperatorConfig extends string, TAccountMint extends string, TAccountBuyerAta extends string, TAccountMerchantEscrowAta extends string, TAccountMerchantSettlementAta extends string, TAccountTokenProgram extends string, TAccountSystemProgram extends string, TAccountEventAuthority extends string, TAccountCommerceProgram extends string, TProgramAddress extends Address = typeof COMMERCE_PROGRAM_PROGRAM_ADDRESS, >( input: MakePaymentAsyncInput< TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountOperator, TAccountMerchant, TAccountMerchantOperatorConfig, TAccountMint, TAccountBuyerAta, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >, config?: { programAddress?: TProgramAddress } ): Promise< MakePaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountOperator, TAccountMerchant, TAccountMerchantOperatorConfig, TAccountMint, TAccountBuyerAta, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, 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 }, operator: { value: input.operator ?? null, isWritable: false }, merchant: { value: input.merchant ?? null, isWritable: false }, merchantOperatorConfig: { value: input.merchantOperatorConfig ?? null, isWritable: true, }, mint: { value: input.mint ?? null, isWritable: false }, buyerAta: { value: input.buyerAta ?? null, isWritable: true }, merchantEscrowAta: { value: input.merchantEscrowAta ?? null, isWritable: true, }, merchantSettlementAta: { value: input.merchantSettlementAta ?? 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 >; // Original args. const args = { ...input }; // Resolve default values. if (!accounts.payment.value) { accounts.payment.value = await getProgramDerivedAddress({ programAddress: 'commkU28d52cwo2Ma3Marxz4Qr9REtfJtuUfqnDnbhT' as Address<'commkU28d52cwo2Ma3Marxz4Qr9REtfJtuUfqnDnbhT'>, seeds: [ getUtf8Encoder().encode('payment'), getAddressEncoder().encode( expectAddress(accounts.merchantOperatorConfig.value) ), getAddressEncoder().encode(expectAddress(accounts.buyer.value)), getAddressEncoder().encode(expectAddress(accounts.mint.value)), getU32Encoder().encode(expectSome(args.orderId)), ], }); } 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.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.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.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.operator), getAccountMeta(accounts.merchant), getAccountMeta(accounts.merchantOperatorConfig), getAccountMeta(accounts.mint), getAccountMeta(accounts.buyerAta), getAccountMeta(accounts.merchantEscrowAta), getAccountMeta(accounts.merchantSettlementAta), getAccountMeta(accounts.tokenProgram), getAccountMeta(accounts.systemProgram), getAccountMeta(accounts.eventAuthority), getAccountMeta(accounts.commerceProgram), ], data: getMakePaymentInstructionDataEncoder().encode( args as MakePaymentInstructionDataArgs ), programAddress, } as MakePaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountOperator, TAccountMerchant, TAccountMerchantOperatorConfig, TAccountMint, TAccountBuyerAta, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >); } export type MakePaymentInput< TAccountPayer extends string = string, TAccountPayment extends string = string, TAccountOperatorAuthority extends string = string, TAccountBuyer extends string = string, TAccountOperator extends string = string, TAccountMerchant extends string = string, TAccountMerchantOperatorConfig extends string = string, TAccountMint extends string = string, TAccountBuyerAta extends string = string, TAccountMerchantEscrowAta extends string = string, TAccountMerchantSettlementAta extends string = string, TAccountTokenProgram extends string = string, TAccountSystemProgram extends string = string, TAccountEventAuthority extends string = string, TAccountCommerceProgram extends string = string, > = { payer: TransactionSigner; payment: Address; operatorAuthority: TransactionSigner; buyer: TransactionSigner; operator: Address; /** Merchant PDA */ merchant: Address; merchantOperatorConfig: Address; mint: Address; buyerAta: Address; merchantEscrowAta: Address; merchantSettlementAta: Address; tokenProgram?: Address; systemProgram?: Address; /** Event authority PDA */ eventAuthority?: Address; /** Commerce Program ID */ commerceProgram?: Address; orderId: MakePaymentInstructionDataArgs['orderId']; amount: MakePaymentInstructionDataArgs['amount']; bump: MakePaymentInstructionDataArgs['bump']; }; export function getMakePaymentInstruction< TAccountPayer extends string, TAccountPayment extends string, TAccountOperatorAuthority extends string, TAccountBuyer extends string, TAccountOperator extends string, TAccountMerchant extends string, TAccountMerchantOperatorConfig extends string, TAccountMint extends string, TAccountBuyerAta extends string, TAccountMerchantEscrowAta extends string, TAccountMerchantSettlementAta extends string, TAccountTokenProgram extends string, TAccountSystemProgram extends string, TAccountEventAuthority extends string, TAccountCommerceProgram extends string, TProgramAddress extends Address = typeof COMMERCE_PROGRAM_PROGRAM_ADDRESS, >( input: MakePaymentInput< TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountOperator, TAccountMerchant, TAccountMerchantOperatorConfig, TAccountMint, TAccountBuyerAta, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >, config?: { programAddress?: TProgramAddress } ): MakePaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountOperator, TAccountMerchant, TAccountMerchantOperatorConfig, TAccountMint, TAccountBuyerAta, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, 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 }, operator: { value: input.operator ?? null, isWritable: false }, merchant: { value: input.merchant ?? null, isWritable: false }, merchantOperatorConfig: { value: input.merchantOperatorConfig ?? null, isWritable: true, }, mint: { value: input.mint ?? null, isWritable: false }, buyerAta: { value: input.buyerAta ?? null, isWritable: true }, merchantEscrowAta: { value: input.merchantEscrowAta ?? null, isWritable: true, }, merchantSettlementAta: { value: input.merchantSettlementAta ?? 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 >; // Original args. const args = { ...input }; // 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.operator), getAccountMeta(accounts.merchant), getAccountMeta(accounts.merchantOperatorConfig), getAccountMeta(accounts.mint), getAccountMeta(accounts.buyerAta), getAccountMeta(accounts.merchantEscrowAta), getAccountMeta(accounts.merchantSettlementAta), getAccountMeta(accounts.tokenProgram), getAccountMeta(accounts.systemProgram), getAccountMeta(accounts.eventAuthority), getAccountMeta(accounts.commerceProgram), ], data: getMakePaymentInstructionDataEncoder().encode( args as MakePaymentInstructionDataArgs ), programAddress, } as MakePaymentInstruction< TProgramAddress, TAccountPayer, TAccountPayment, TAccountOperatorAuthority, TAccountBuyer, TAccountOperator, TAccountMerchant, TAccountMerchantOperatorConfig, TAccountMint, TAccountBuyerAta, TAccountMerchantEscrowAta, TAccountMerchantSettlementAta, TAccountTokenProgram, TAccountSystemProgram, TAccountEventAuthority, TAccountCommerceProgram >); } export type ParsedMakePaymentInstruction< TProgram extends string = typeof COMMERCE_PROGRAM_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], > = { programAddress: Address; accounts: { payer: TAccountMetas[0]; payment: TAccountMetas[1]; operatorAuthority: TAccountMetas[2]; buyer: TAccountMetas[3]; operator: TAccountMetas[4]; /** Merchant PDA */ merchant: TAccountMetas[5]; merchantOperatorConfig: TAccountMetas[6]; mint: TAccountMetas[7]; buyerAta: TAccountMetas[8]; merchantEscrowAta: TAccountMetas[9]; merchantSettlementAta: TAccountMetas[10]; tokenProgram: TAccountMetas[11]; systemProgram: TAccountMetas[12]; /** Event authority PDA */ eventAuthority: TAccountMetas[13]; /** Commerce Program ID */ commerceProgram: TAccountMetas[14]; }; data: MakePaymentInstructionData; }; export function parseMakePaymentInstruction< TProgram extends string, TAccountMetas extends readonly AccountMeta[], >( instruction: Instruction & InstructionWithAccounts & InstructionWithData ): ParsedMakePaymentInstruction { if (instruction.accounts.length < 15) { // 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(), operator: getNextAccount(), merchant: getNextAccount(), merchantOperatorConfig: getNextAccount(), mint: getNextAccount(), buyerAta: getNextAccount(), merchantEscrowAta: getNextAccount(), merchantSettlementAta: getNextAccount(), tokenProgram: getNextAccount(), systemProgram: getNextAccount(), eventAuthority: getNextAccount(), commerceProgram: getNextAccount(), }, data: getMakePaymentInstructionDataDecoder().decode(instruction.data), }; }