UNPKG

@kamino-finance/kliquidity-sdk

Version:

Typescript SDK for interacting with the Kamino Liquidity (kliquidity) protocol

92 lines (73 loc) 8.11 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 { combineCodec, fixDecoderSize, fixEncoderSize, getBytesDecoder, getBytesEncoder, getStructDecoder, getStructEncoder, getU64Decoder, getU64Encoder, 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 } from '@solana/kit'; import { AMM_V3_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const SWAP_ROUTER_BASE_IN_DISCRIMINATOR = new Uint8Array([69, 125, 115, 218, 245, 186, 242, 196]); export function getSwapRouterBaseInDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(SWAP_ROUTER_BASE_IN_DISCRIMINATOR); } export type SwapRouterBaseInInstruction<TProgram extends string = typeof AMM_V3_PROGRAM_ADDRESS, TAccountPayer extends string | AccountMeta<string> = string, TAccountInputTokenAccount extends string | AccountMeta<string> = string, TAccountInputTokenMint extends string | AccountMeta<string> = string, TAccountTokenProgram extends string | AccountMeta<string> = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", TAccountTokenProgram2022 extends string | AccountMeta<string> = string, TAccountMemoProgram extends string | AccountMeta<string> = string, TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountPayer extends string ? ReadonlySignerAccount<TAccountPayer> & AccountSignerMeta<TAccountPayer> : TAccountPayer, TAccountInputTokenAccount extends string ? WritableAccount<TAccountInputTokenAccount> : TAccountInputTokenAccount, TAccountInputTokenMint extends string ? WritableAccount<TAccountInputTokenMint> : TAccountInputTokenMint, TAccountTokenProgram extends string ? ReadonlyAccount<TAccountTokenProgram> : TAccountTokenProgram, TAccountTokenProgram2022 extends string ? ReadonlyAccount<TAccountTokenProgram2022> : TAccountTokenProgram2022, TAccountMemoProgram extends string ? ReadonlyAccount<TAccountMemoProgram> : TAccountMemoProgram, ...TRemainingAccounts]>; export type SwapRouterBaseInInstructionData = { discriminator: ReadonlyUint8Array; amountIn: bigint; amountOutMinimum: bigint; }; export type SwapRouterBaseInInstructionDataArgs = { amountIn: number | bigint; amountOutMinimum: number | bigint; }; export function getSwapRouterBaseInInstructionDataEncoder(): FixedSizeEncoder<SwapRouterBaseInInstructionDataArgs> { return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['amountIn', getU64Encoder()], ['amountOutMinimum', getU64Encoder()]]), (value) => ({ ...value, discriminator: SWAP_ROUTER_BASE_IN_DISCRIMINATOR })); } export function getSwapRouterBaseInInstructionDataDecoder(): FixedSizeDecoder<SwapRouterBaseInInstructionData> { return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['amountIn', getU64Decoder()], ['amountOutMinimum', getU64Decoder()]]); } export function getSwapRouterBaseInInstructionDataCodec(): FixedSizeCodec<SwapRouterBaseInInstructionDataArgs, SwapRouterBaseInInstructionData> { return combineCodec(getSwapRouterBaseInInstructionDataEncoder(), getSwapRouterBaseInInstructionDataDecoder()); } export type SwapRouterBaseInInput<TAccountPayer extends string = string, TAccountInputTokenAccount extends string = string, TAccountInputTokenMint extends string = string, TAccountTokenProgram extends string = string, TAccountTokenProgram2022 extends string = string, TAccountMemoProgram extends string = string> = { payer: TransactionSigner<TAccountPayer>; inputTokenAccount: Address<TAccountInputTokenAccount>; inputTokenMint: Address<TAccountInputTokenMint>; tokenProgram?: Address<TAccountTokenProgram>; tokenProgram2022: Address<TAccountTokenProgram2022>; memoProgram: Address<TAccountMemoProgram>; amountIn: SwapRouterBaseInInstructionDataArgs["amountIn"]; amountOutMinimum: SwapRouterBaseInInstructionDataArgs["amountOutMinimum"]; } export function getSwapRouterBaseInInstruction<TAccountPayer extends string, TAccountInputTokenAccount extends string, TAccountInputTokenMint extends string, TAccountTokenProgram extends string, TAccountTokenProgram2022 extends string, TAccountMemoProgram extends string, TProgramAddress extends Address = typeof AMM_V3_PROGRAM_ADDRESS>(input: SwapRouterBaseInInput<TAccountPayer, TAccountInputTokenAccount, TAccountInputTokenMint, TAccountTokenProgram, TAccountTokenProgram2022, TAccountMemoProgram>, config?: { programAddress?: TProgramAddress } ): SwapRouterBaseInInstruction<TProgramAddress, TAccountPayer, TAccountInputTokenAccount, TAccountInputTokenMint, TAccountTokenProgram, TAccountTokenProgram2022, TAccountMemoProgram> { // Program address. const programAddress = config?.programAddress ?? AMM_V3_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { payer: { value: input.payer ?? null, isWritable: false }, inputTokenAccount: { value: input.inputTokenAccount ?? null, isWritable: true }, inputTokenMint: { value: input.inputTokenMint ?? null, isWritable: true }, tokenProgram: { value: input.tokenProgram ?? null, isWritable: false }, tokenProgram2022: { value: input.tokenProgram2022 ?? null, isWritable: false }, memoProgram: { value: input.memoProgram ?? 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'>; } const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); return Object.freeze({ accounts: [getAccountMeta(accounts.payer), getAccountMeta(accounts.inputTokenAccount), getAccountMeta(accounts.inputTokenMint), getAccountMeta(accounts.tokenProgram), getAccountMeta(accounts.tokenProgram2022), getAccountMeta(accounts.memoProgram)], data: getSwapRouterBaseInInstructionDataEncoder().encode(args as SwapRouterBaseInInstructionDataArgs), programAddress } as SwapRouterBaseInInstruction<TProgramAddress, TAccountPayer, TAccountInputTokenAccount, TAccountInputTokenMint, TAccountTokenProgram, TAccountTokenProgram2022, TAccountMemoProgram>); } export type ParsedSwapRouterBaseInInstruction<TProgram extends string = typeof AMM_V3_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = { programAddress: Address<TProgram>; accounts: { payer: TAccountMetas[0]; inputTokenAccount: TAccountMetas[1]; inputTokenMint: TAccountMetas[2]; tokenProgram: TAccountMetas[3]; tokenProgram2022: TAccountMetas[4]; memoProgram: TAccountMetas[5]; }; data: SwapRouterBaseInInstructionData; }; export function parseSwapRouterBaseInInstruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedSwapRouterBaseInInstruction<TProgram, TAccountMetas> { if (instruction.accounts.length < 6) { // 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(), inputTokenAccount: getNextAccount(), inputTokenMint: getNextAccount(), tokenProgram: getNextAccount(), tokenProgram2022: getNextAccount(), memoProgram: getNextAccount() }, data: getSwapRouterBaseInInstructionDataDecoder().decode(instruction.data) }; }