UNPKG

@solsdk/xswap_sdk

Version:

Universal cross-chain swaps SDK

384 lines (361 loc) 14.3 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 { SOURCE_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 SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS, TAccountAdmin extends string | IAccountMeta<string> = string, TAccountAdminSingleton extends string | IAccountMeta<string> = string, TAccountGuard extends string | IAccountMeta<string> = string, TAccountCollateralTokenMint extends string | IAccountMeta<string> = string, TAccountAdminCollateralTokenAccount extends string | IAccountMeta<string> = string, TAccountGuardCollateralTokenAccount extends string | IAccountMeta<string> = string, TAccountCollateralTokenProgram 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, TAccountCollateralTokenMint extends string ? ReadonlyAccount<TAccountCollateralTokenMint> : TAccountCollateralTokenMint, TAccountAdminCollateralTokenAccount extends string ? WritableAccount<TAccountAdminCollateralTokenAccount> : TAccountAdminCollateralTokenAccount, TAccountGuardCollateralTokenAccount extends string ? WritableAccount<TAccountGuardCollateralTokenAccount> : TAccountGuardCollateralTokenAccount, TAccountCollateralTokenProgram extends string ? ReadonlyAccount<TAccountCollateralTokenProgram> : TAccountCollateralTokenProgram, ...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, TAccountCollateralTokenMint extends string = string, TAccountAdminCollateralTokenAccount extends string = string, TAccountGuardCollateralTokenAccount extends string = string, TAccountCollateralTokenProgram 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>; /** Collateral token mint */ collateralTokenMint: Address<TAccountCollateralTokenMint>; /** Solver collateral account, from which solver is paying collateral tokens and fees */ adminCollateralTokenAccount: Address<TAccountAdminCollateralTokenAccount>; /** Guard collateral account, where Guard is collecting collateral tokens */ guardCollateralTokenAccount: Address<TAccountGuardCollateralTokenAccount>; /** Solana token program */ collateralTokenProgram: Address<TAccountCollateralTokenProgram>; }; export async function getCollectProtocolFeesInstructionAsync< TAccountAdmin extends string, TAccountAdminSingleton extends string, TAccountGuard extends string, TAccountCollateralTokenMint extends string, TAccountAdminCollateralTokenAccount extends string, TAccountGuardCollateralTokenAccount extends string, TAccountCollateralTokenProgram extends string, TProgramAddress extends Address = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS, >( input: CollectProtocolFeesAsyncInput< TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountCollateralTokenMint, TAccountAdminCollateralTokenAccount, TAccountGuardCollateralTokenAccount, TAccountCollateralTokenProgram >, config?: { programAddress?: TProgramAddress }, ): Promise< CollectProtocolFeesInstruction< TProgramAddress, TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountCollateralTokenMint, TAccountAdminCollateralTokenAccount, TAccountGuardCollateralTokenAccount, TAccountCollateralTokenProgram > > { // Program address. const programAddress = config?.programAddress ?? SOURCE_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 }, collateralTokenMint: { value: input.collateralTokenMint ?? null, isWritable: false, }, adminCollateralTokenAccount: { value: input.adminCollateralTokenAccount ?? null, isWritable: true, }, guardCollateralTokenAccount: { value: input.guardCollateralTokenAccount ?? null, isWritable: true, }, collateralTokenProgram: { value: input.collateralTokenProgram ?? 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.collateralTokenMint), getAccountMeta(accounts.adminCollateralTokenAccount), getAccountMeta(accounts.guardCollateralTokenAccount), getAccountMeta(accounts.collateralTokenProgram), ], programAddress, data: getCollectProtocolFeesInstructionDataEncoder().encode({}), } as CollectProtocolFeesInstruction< TProgramAddress, TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountCollateralTokenMint, TAccountAdminCollateralTokenAccount, TAccountGuardCollateralTokenAccount, TAccountCollateralTokenProgram >; return instruction; } export type CollectProtocolFeesInput< TAccountAdmin extends string = string, TAccountAdminSingleton extends string = string, TAccountGuard extends string = string, TAccountCollateralTokenMint extends string = string, TAccountAdminCollateralTokenAccount extends string = string, TAccountGuardCollateralTokenAccount extends string = string, TAccountCollateralTokenProgram 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>; /** Collateral token mint */ collateralTokenMint: Address<TAccountCollateralTokenMint>; /** Solver collateral account, from which solver is paying collateral tokens and fees */ adminCollateralTokenAccount: Address<TAccountAdminCollateralTokenAccount>; /** Guard collateral account, where Guard is collecting collateral tokens */ guardCollateralTokenAccount: Address<TAccountGuardCollateralTokenAccount>; /** Solana token program */ collateralTokenProgram: Address<TAccountCollateralTokenProgram>; }; export function getCollectProtocolFeesInstruction< TAccountAdmin extends string, TAccountAdminSingleton extends string, TAccountGuard extends string, TAccountCollateralTokenMint extends string, TAccountAdminCollateralTokenAccount extends string, TAccountGuardCollateralTokenAccount extends string, TAccountCollateralTokenProgram extends string, TProgramAddress extends Address = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS, >( input: CollectProtocolFeesInput< TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountCollateralTokenMint, TAccountAdminCollateralTokenAccount, TAccountGuardCollateralTokenAccount, TAccountCollateralTokenProgram >, config?: { programAddress?: TProgramAddress }, ): CollectProtocolFeesInstruction< TProgramAddress, TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountCollateralTokenMint, TAccountAdminCollateralTokenAccount, TAccountGuardCollateralTokenAccount, TAccountCollateralTokenProgram > { // Program address. const programAddress = config?.programAddress ?? SOURCE_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 }, collateralTokenMint: { value: input.collateralTokenMint ?? null, isWritable: false, }, adminCollateralTokenAccount: { value: input.adminCollateralTokenAccount ?? null, isWritable: true, }, guardCollateralTokenAccount: { value: input.guardCollateralTokenAccount ?? null, isWritable: true, }, collateralTokenProgram: { value: input.collateralTokenProgram ?? 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.collateralTokenMint), getAccountMeta(accounts.adminCollateralTokenAccount), getAccountMeta(accounts.guardCollateralTokenAccount), getAccountMeta(accounts.collateralTokenProgram), ], programAddress, data: getCollectProtocolFeesInstructionDataEncoder().encode({}), } as CollectProtocolFeesInstruction< TProgramAddress, TAccountAdmin, TAccountAdminSingleton, TAccountGuard, TAccountCollateralTokenMint, TAccountAdminCollateralTokenAccount, TAccountGuardCollateralTokenAccount, TAccountCollateralTokenProgram >; return instruction; } export type ParsedCollectProtocolFeesInstruction< TProgram extends string = typeof SOURCE_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]; /** Collateral token mint */ collateralTokenMint: TAccountMetas[3]; /** Solver collateral account, from which solver is paying collateral tokens and fees */ adminCollateralTokenAccount: TAccountMetas[4]; /** Guard collateral account, where Guard is collecting collateral tokens */ guardCollateralTokenAccount: TAccountMetas[5]; /** Solana token program */ collateralTokenProgram: 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(), collateralTokenMint: getNextAccount(), adminCollateralTokenAccount: getNextAccount(), guardCollateralTokenAccount: getNextAccount(), collateralTokenProgram: getNextAccount(), }, data: getCollectProtocolFeesInstructionDataDecoder().decode(instruction.data), }; }