UNPKG

@robertprp/intents-sdk

Version:

Shogun Network Intent-based cross-chain swaps SDK

374 lines (351 loc) 13.4 kB
/** * 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 { getProgramDerivedAddress, type Address } from '@solana/kit'; import { combineCodec, fixDecoderSize, fixEncoderSize, getBytesDecoder, getBytesEncoder, getStructDecoder, getStructEncoder, transformEncoder, type Codec, type Decoder, type Encoder, type ReadonlyUint8Array, } from '@solana/kit'; import { type IAccountMeta, type IInstruction, type IInstructionWithAccounts, type IInstructionWithData, type ReadonlyAccount, type WritableAccount, type WritableSignerAccount, } from '@solana/kit'; import { type IAccountSignerMeta, type TransactionSigner } from '@solana/kit'; import { SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS } from '../programs/index.js'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared/index.js'; export const COLLECT_PROTOCOL_FEES_DISCRIMINATOR = new Uint8Array([22, 67, 23, 98, 150, 178, 70, 220]); export function getCollectProtocolFeesDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(COLLECT_PROTOCOL_FEES_DISCRIMINATOR); } export type CollectProtocolFeesInstruction< TProgram extends string = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS, TAccountAdmin extends string | IAccountMeta<string> = string, TAccountAdminSingleton extends string | IAccountMeta<string> = string, TAccountGuard extends string | IAccountMeta<string> = string, TAccountFeeTokenMint extends string | IAccountMeta<string> = string, TAccountAdminFeeTokenAccount extends string | IAccountMeta<string> = string, TAccountGuardFeeTokenAccount extends string | IAccountMeta<string> = string, TAccountFeeTokenProgram extends string | IAccountMeta<string> = string, TRemainingAccounts extends readonly IAccountMeta<string>[] = [], > = IInstruction<TProgram> & IInstructionWithData<Uint8Array> & IInstructionWithAccounts< [ TAccountAdmin extends string ? WritableSignerAccount<TAccountAdmin> & IAccountSignerMeta<TAccountAdmin> : TAccountAdmin, TAccountAdminSingleton extends string ? ReadonlyAccount<TAccountAdminSingleton> : TAccountAdminSingleton, TAccountGuard extends string ? WritableAccount<TAccountGuard> : TAccountGuard, TAccountFeeTokenMint extends string ? ReadonlyAccount<TAccountFeeTokenMint> : TAccountFeeTokenMint, TAccountAdminFeeTokenAccount extends string ? WritableAccount<TAccountAdminFeeTokenAccount> : TAccountAdminFeeTokenAccount, TAccountGuardFeeTokenAccount extends string ? WritableAccount<TAccountGuardFeeTokenAccount> : TAccountGuardFeeTokenAccount, TAccountFeeTokenProgram extends string ? ReadonlyAccount<TAccountFeeTokenProgram> : TAccountFeeTokenProgram, ...TRemainingAccounts, ] >; export type CollectProtocolFeesInstructionData = { discriminator: ReadonlyUint8Array; }; export type CollectProtocolFeesInstructionDataArgs = {}; export function getCollectProtocolFeesInstructionDataEncoder(): Encoder<CollectProtocolFeesInstructionDataArgs> { return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), (value) => ({ ...value, discriminator: COLLECT_PROTOCOL_FEES_DISCRIMINATOR, })); } export function getCollectProtocolFeesInstructionDataDecoder(): Decoder<CollectProtocolFeesInstructionData> { return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]); } export function getCollectProtocolFeesInstructionDataCodec(): Codec< CollectProtocolFeesInstructionDataArgs, CollectProtocolFeesInstructionData > { return combineCodec(getCollectProtocolFeesInstructionDataEncoder(), getCollectProtocolFeesInstructionDataDecoder()); } export type CollectProtocolFeesAsyncInput< TAccountAdmin extends string = string, TAccountAdminSingleton extends string = string, TAccountGuard extends string = string, TAccountFeeTokenMint extends string = string, TAccountAdminFeeTokenAccount extends string = string, TAccountGuardFeeTokenAccount extends string = string, TAccountFeeTokenProgram extends string = string, > = { /** Admin signer */ admin: TransactionSigner<TAccountAdmin>; /** Admin singleton account that grants access to admin functions */ adminSingleton?: Address<TAccountAdminSingleton>; /** Guard account */ guard: Address<TAccountGuard>; /** Fee token mint */ feeTokenMint: Address<TAccountFeeTokenMint>; /** Admin fee token account, to which fees will be sent */ adminFeeTokenAccount: Address<TAccountAdminFeeTokenAccount>; /** Guard fee token account, where Guard is collecting fee tokens */ guardFeeTokenAccount: Address<TAccountGuardFeeTokenAccount>; /** Solana token program */ feeTokenProgram: Address<TAccountFeeTokenProgram>; }; export async function getCollectProtocolFeesInstructionAsync< TAccountAdmin extends string, TAccountAdminSingleton extends string, TAccountGuard extends string, TAccountFeeTokenMint extends string, TAccountAdminFeeTokenAccount extends string, TAccountGuardFeeTokenAccount extends string, TAccountFeeTokenProgram extends string, TProgramAddress extends Address = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS, >( input: CollectProtocolFeesAsyncInput< TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountFeeTokenMint, TAccountAdminFeeTokenAccount, TAccountGuardFeeTokenAccount, TAccountFeeTokenProgram >, config?: { programAddress?: TProgramAddress }, ): Promise< CollectProtocolFeesInstruction< TProgramAddress, TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountFeeTokenMint, TAccountAdminFeeTokenAccount, TAccountGuardFeeTokenAccount, TAccountFeeTokenProgram > > { // Program address. const programAddress = config?.programAddress ?? SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { admin: { value: input.admin ?? null, isWritable: true }, adminSingleton: { value: input.adminSingleton ?? null, isWritable: false }, guard: { value: input.guard ?? null, isWritable: true }, feeTokenMint: { value: input.feeTokenMint ?? null, isWritable: false }, adminFeeTokenAccount: { value: input.adminFeeTokenAccount ?? null, isWritable: true, }, guardFeeTokenAccount: { value: input.guardFeeTokenAccount ?? null, isWritable: true, }, feeTokenProgram: { value: input.feeTokenProgram ?? null, isWritable: false, }, }; const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>; // Resolve default values. if (!accounts.adminSingleton.value) { accounts.adminSingleton.value = await getProgramDerivedAddress({ programAddress, seeds: [getBytesEncoder().encode(new Uint8Array([97, 100, 109, 105, 110]))], }); } const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); const instruction = { accounts: [ getAccountMeta(accounts.admin), getAccountMeta(accounts.adminSingleton), getAccountMeta(accounts.guard), getAccountMeta(accounts.feeTokenMint), getAccountMeta(accounts.adminFeeTokenAccount), getAccountMeta(accounts.guardFeeTokenAccount), getAccountMeta(accounts.feeTokenProgram), ], programAddress, data: getCollectProtocolFeesInstructionDataEncoder().encode({}), } as CollectProtocolFeesInstruction< TProgramAddress, TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountFeeTokenMint, TAccountAdminFeeTokenAccount, TAccountGuardFeeTokenAccount, TAccountFeeTokenProgram >; return instruction; } export type CollectProtocolFeesInput< TAccountAdmin extends string = string, TAccountAdminSingleton extends string = string, TAccountGuard extends string = string, TAccountFeeTokenMint extends string = string, TAccountAdminFeeTokenAccount extends string = string, TAccountGuardFeeTokenAccount extends string = string, TAccountFeeTokenProgram extends string = string, > = { /** Admin signer */ admin: TransactionSigner<TAccountAdmin>; /** Admin singleton account that grants access to admin functions */ adminSingleton: Address<TAccountAdminSingleton>; /** Guard account */ guard: Address<TAccountGuard>; /** Fee token mint */ feeTokenMint: Address<TAccountFeeTokenMint>; /** Admin fee token account, to which fees will be sent */ adminFeeTokenAccount: Address<TAccountAdminFeeTokenAccount>; /** Guard fee token account, where Guard is collecting fee tokens */ guardFeeTokenAccount: Address<TAccountGuardFeeTokenAccount>; /** Solana token program */ feeTokenProgram: Address<TAccountFeeTokenProgram>; }; export function getCollectProtocolFeesInstruction< TAccountAdmin extends string, TAccountAdminSingleton extends string, TAccountGuard extends string, TAccountFeeTokenMint extends string, TAccountAdminFeeTokenAccount extends string, TAccountGuardFeeTokenAccount extends string, TAccountFeeTokenProgram extends string, TProgramAddress extends Address = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS, >( input: CollectProtocolFeesInput< TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountFeeTokenMint, TAccountAdminFeeTokenAccount, TAccountGuardFeeTokenAccount, TAccountFeeTokenProgram >, config?: { programAddress?: TProgramAddress }, ): CollectProtocolFeesInstruction< TProgramAddress, TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountFeeTokenMint, TAccountAdminFeeTokenAccount, TAccountGuardFeeTokenAccount, TAccountFeeTokenProgram > { // Program address. const programAddress = config?.programAddress ?? SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { admin: { value: input.admin ?? null, isWritable: true }, adminSingleton: { value: input.adminSingleton ?? null, isWritable: false }, guard: { value: input.guard ?? null, isWritable: true }, feeTokenMint: { value: input.feeTokenMint ?? null, isWritable: false }, adminFeeTokenAccount: { value: input.adminFeeTokenAccount ?? null, isWritable: true, }, guardFeeTokenAccount: { value: input.guardFeeTokenAccount ?? null, isWritable: true, }, feeTokenProgram: { value: input.feeTokenProgram ?? null, isWritable: false, }, }; const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>; const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); const instruction = { accounts: [ getAccountMeta(accounts.admin), getAccountMeta(accounts.adminSingleton), getAccountMeta(accounts.guard), getAccountMeta(accounts.feeTokenMint), getAccountMeta(accounts.adminFeeTokenAccount), getAccountMeta(accounts.guardFeeTokenAccount), getAccountMeta(accounts.feeTokenProgram), ], programAddress, data: getCollectProtocolFeesInstructionDataEncoder().encode({}), } as CollectProtocolFeesInstruction< TProgramAddress, TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountFeeTokenMint, TAccountAdminFeeTokenAccount, TAccountGuardFeeTokenAccount, TAccountFeeTokenProgram >; return instruction; } export type ParsedCollectProtocolFeesInstruction< TProgram extends string = typeof SINGLE_CHAIN_GUARD_PROGRAM_ADDRESS, TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[], > = { programAddress: Address<TProgram>; accounts: { /** Admin signer */ admin: TAccountMetas[0]; /** Admin singleton account that grants access to admin functions */ adminSingleton: TAccountMetas[1]; /** Guard account */ guard: TAccountMetas[2]; /** Fee token mint */ feeTokenMint: TAccountMetas[3]; /** Admin fee token account, to which fees will be sent */ adminFeeTokenAccount: TAccountMetas[4]; /** Guard fee token account, where Guard is collecting fee tokens */ guardFeeTokenAccount: TAccountMetas[5]; /** Solana token program */ feeTokenProgram: TAccountMetas[6]; }; data: CollectProtocolFeesInstructionData; }; export function parseCollectProtocolFeesInstruction< TProgram extends string, TAccountMetas extends readonly IAccountMeta[], >( instruction: IInstruction<TProgram> & IInstructionWithAccounts<TAccountMetas> & IInstructionWithData<Uint8Array>, ): ParsedCollectProtocolFeesInstruction<TProgram, TAccountMetas> { if (instruction.accounts.length < 7) { // TODO: Coded error. throw new Error('Not enough accounts'); } let accountIndex = 0; const getNextAccount = () => { const accountMeta = instruction.accounts![accountIndex]!; accountIndex += 1; return accountMeta; }; return { programAddress: instruction.programAddress, accounts: { admin: getNextAccount(), adminSingleton: getNextAccount(), guard: getNextAccount(), feeTokenMint: getNextAccount(), adminFeeTokenAccount: getNextAccount(), guardFeeTokenAccount: getNextAccount(), feeTokenProgram: getNextAccount(), }, data: getCollectProtocolFeesInstructionDataDecoder().decode(instruction.data), }; }