@kamino-finance/kliquidity-sdk
Version:
Typescript SDK for interacting with the Kamino Liquidity (kliquidity) protocol
112 lines (92 loc) • 13.5 kB
text/typescript
/**
* 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, getBooleanDecoder, getBooleanEncoder, getBytesDecoder, getBytesEncoder, getOptionDecoder, getOptionEncoder, getStructDecoder, getStructEncoder, getU128Decoder, getU128Encoder, getU64Decoder, getU64Encoder, transformEncoder, type AccountMeta, type AccountSignerMeta, type Address, type Codec, type Decoder, type Encoder, type Instruction, type InstructionWithAccounts, type InstructionWithData, type Option, type OptionOrNullable, type ReadonlyAccount, type ReadonlySignerAccount, type ReadonlyUint8Array, type TransactionSigner, type WritableAccount } from '@solana/kit';
import { WHIRLPOOL_PROGRAM_ADDRESS } from '../programs';
import { getAccountMetaFactory, type ResolvedAccount } from '../shared';
import { getRemainingAccountsInfoDecoder, getRemainingAccountsInfoEncoder, type RemainingAccountsInfo, type RemainingAccountsInfoArgs } from '../types';
export const SWAP_V2_DISCRIMINATOR = new Uint8Array([43, 4, 237, 11, 26, 201, 30, 98]);
export function getSwapV2DiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(SWAP_V2_DISCRIMINATOR); }
export type SwapV2Instruction<TProgram extends string = typeof WHIRLPOOL_PROGRAM_ADDRESS, TAccountTokenProgramA extends string | AccountMeta<string> = string, TAccountTokenProgramB extends string | AccountMeta<string> = string, TAccountMemoProgram extends string | AccountMeta<string> = string, TAccountTokenAuthority extends string | AccountMeta<string> = string, TAccountWhirlpool extends string | AccountMeta<string> = string, TAccountTokenMintA extends string | AccountMeta<string> = string, TAccountTokenMintB extends string | AccountMeta<string> = string, TAccountTokenOwnerAccountA extends string | AccountMeta<string> = string, TAccountTokenVaultA extends string | AccountMeta<string> = string, TAccountTokenOwnerAccountB extends string | AccountMeta<string> = string, TAccountTokenVaultB extends string | AccountMeta<string> = string, TAccountTickArray0 extends string | AccountMeta<string> = string, TAccountTickArray1 extends string | AccountMeta<string> = string, TAccountTickArray2 extends string | AccountMeta<string> = string, TAccountOracle extends string | AccountMeta<string> = string, TRemainingAccounts extends readonly AccountMeta<string>[] = []> =
Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountTokenProgramA extends string ? ReadonlyAccount<TAccountTokenProgramA> : TAccountTokenProgramA, TAccountTokenProgramB extends string ? ReadonlyAccount<TAccountTokenProgramB> : TAccountTokenProgramB, TAccountMemoProgram extends string ? ReadonlyAccount<TAccountMemoProgram> : TAccountMemoProgram, TAccountTokenAuthority extends string ? ReadonlySignerAccount<TAccountTokenAuthority> & AccountSignerMeta<TAccountTokenAuthority> : TAccountTokenAuthority, TAccountWhirlpool extends string ? WritableAccount<TAccountWhirlpool> : TAccountWhirlpool, TAccountTokenMintA extends string ? ReadonlyAccount<TAccountTokenMintA> : TAccountTokenMintA, TAccountTokenMintB extends string ? ReadonlyAccount<TAccountTokenMintB> : TAccountTokenMintB, TAccountTokenOwnerAccountA extends string ? WritableAccount<TAccountTokenOwnerAccountA> : TAccountTokenOwnerAccountA, TAccountTokenVaultA extends string ? WritableAccount<TAccountTokenVaultA> : TAccountTokenVaultA, TAccountTokenOwnerAccountB extends string ? WritableAccount<TAccountTokenOwnerAccountB> : TAccountTokenOwnerAccountB, TAccountTokenVaultB extends string ? WritableAccount<TAccountTokenVaultB> : TAccountTokenVaultB, TAccountTickArray0 extends string ? WritableAccount<TAccountTickArray0> : TAccountTickArray0, TAccountTickArray1 extends string ? WritableAccount<TAccountTickArray1> : TAccountTickArray1, TAccountTickArray2 extends string ? WritableAccount<TAccountTickArray2> : TAccountTickArray2, TAccountOracle extends string ? WritableAccount<TAccountOracle> : TAccountOracle, ...TRemainingAccounts]>;
export type SwapV2InstructionData = { discriminator: ReadonlyUint8Array; amount: bigint; otherAmountThreshold: bigint; sqrtPriceLimit: bigint; amountSpecifiedIsInput: boolean; aToB: boolean; remainingAccountsInfo: Option<RemainingAccountsInfo>; };
export type SwapV2InstructionDataArgs = { amount: number | bigint; otherAmountThreshold: number | bigint; sqrtPriceLimit: number | bigint; amountSpecifiedIsInput: boolean; aToB: boolean; remainingAccountsInfo: OptionOrNullable<RemainingAccountsInfoArgs>; };
export function getSwapV2InstructionDataEncoder(): Encoder<SwapV2InstructionDataArgs> {
return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['amount', getU64Encoder()], ['otherAmountThreshold', getU64Encoder()], ['sqrtPriceLimit', getU128Encoder()], ['amountSpecifiedIsInput', getBooleanEncoder()], ['aToB', getBooleanEncoder()], ['remainingAccountsInfo', getOptionEncoder(getRemainingAccountsInfoEncoder())]]), (value) => ({ ...value, discriminator: SWAP_V2_DISCRIMINATOR }));
}
export function getSwapV2InstructionDataDecoder(): Decoder<SwapV2InstructionData> {
return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['amount', getU64Decoder()], ['otherAmountThreshold', getU64Decoder()], ['sqrtPriceLimit', getU128Decoder()], ['amountSpecifiedIsInput', getBooleanDecoder()], ['aToB', getBooleanDecoder()], ['remainingAccountsInfo', getOptionDecoder(getRemainingAccountsInfoDecoder())]]);
}
export function getSwapV2InstructionDataCodec(): Codec<SwapV2InstructionDataArgs, SwapV2InstructionData> {
return combineCodec(getSwapV2InstructionDataEncoder(), getSwapV2InstructionDataDecoder());
}
export type SwapV2Input<TAccountTokenProgramA extends string = string, TAccountTokenProgramB extends string = string, TAccountMemoProgram extends string = string, TAccountTokenAuthority extends string = string, TAccountWhirlpool extends string = string, TAccountTokenMintA extends string = string, TAccountTokenMintB extends string = string, TAccountTokenOwnerAccountA extends string = string, TAccountTokenVaultA extends string = string, TAccountTokenOwnerAccountB extends string = string, TAccountTokenVaultB extends string = string, TAccountTickArray0 extends string = string, TAccountTickArray1 extends string = string, TAccountTickArray2 extends string = string, TAccountOracle extends string = string> = {
tokenProgramA: Address<TAccountTokenProgramA>;
tokenProgramB: Address<TAccountTokenProgramB>;
memoProgram: Address<TAccountMemoProgram>;
tokenAuthority: TransactionSigner<TAccountTokenAuthority>;
whirlpool: Address<TAccountWhirlpool>;
tokenMintA: Address<TAccountTokenMintA>;
tokenMintB: Address<TAccountTokenMintB>;
tokenOwnerAccountA: Address<TAccountTokenOwnerAccountA>;
tokenVaultA: Address<TAccountTokenVaultA>;
tokenOwnerAccountB: Address<TAccountTokenOwnerAccountB>;
tokenVaultB: Address<TAccountTokenVaultB>;
tickArray0: Address<TAccountTickArray0>;
tickArray1: Address<TAccountTickArray1>;
tickArray2: Address<TAccountTickArray2>;
oracle: Address<TAccountOracle>;
amount: SwapV2InstructionDataArgs["amount"];
otherAmountThreshold: SwapV2InstructionDataArgs["otherAmountThreshold"];
sqrtPriceLimit: SwapV2InstructionDataArgs["sqrtPriceLimit"];
amountSpecifiedIsInput: SwapV2InstructionDataArgs["amountSpecifiedIsInput"];
aToB: SwapV2InstructionDataArgs["aToB"];
remainingAccountsInfo: SwapV2InstructionDataArgs["remainingAccountsInfo"];
}
export function getSwapV2Instruction<TAccountTokenProgramA extends string, TAccountTokenProgramB extends string, TAccountMemoProgram extends string, TAccountTokenAuthority extends string, TAccountWhirlpool extends string, TAccountTokenMintA extends string, TAccountTokenMintB extends string, TAccountTokenOwnerAccountA extends string, TAccountTokenVaultA extends string, TAccountTokenOwnerAccountB extends string, TAccountTokenVaultB extends string, TAccountTickArray0 extends string, TAccountTickArray1 extends string, TAccountTickArray2 extends string, TAccountOracle extends string, TProgramAddress extends Address = typeof WHIRLPOOL_PROGRAM_ADDRESS>(input: SwapV2Input<TAccountTokenProgramA, TAccountTokenProgramB, TAccountMemoProgram, TAccountTokenAuthority, TAccountWhirlpool, TAccountTokenMintA, TAccountTokenMintB, TAccountTokenOwnerAccountA, TAccountTokenVaultA, TAccountTokenOwnerAccountB, TAccountTokenVaultB, TAccountTickArray0, TAccountTickArray1, TAccountTickArray2, TAccountOracle>, config?: { programAddress?: TProgramAddress } ): SwapV2Instruction<TProgramAddress, TAccountTokenProgramA, TAccountTokenProgramB, TAccountMemoProgram, TAccountTokenAuthority, TAccountWhirlpool, TAccountTokenMintA, TAccountTokenMintB, TAccountTokenOwnerAccountA, TAccountTokenVaultA, TAccountTokenOwnerAccountB, TAccountTokenVaultB, TAccountTickArray0, TAccountTickArray1, TAccountTickArray2, TAccountOracle> {
// Program address.
const programAddress = config?.programAddress ?? WHIRLPOOL_PROGRAM_ADDRESS;
// Original accounts.
const originalAccounts = { tokenProgramA: { value: input.tokenProgramA ?? null, isWritable: false }, tokenProgramB: { value: input.tokenProgramB ?? null, isWritable: false }, memoProgram: { value: input.memoProgram ?? null, isWritable: false }, tokenAuthority: { value: input.tokenAuthority ?? null, isWritable: false }, whirlpool: { value: input.whirlpool ?? null, isWritable: true }, tokenMintA: { value: input.tokenMintA ?? null, isWritable: false }, tokenMintB: { value: input.tokenMintB ?? null, isWritable: false }, tokenOwnerAccountA: { value: input.tokenOwnerAccountA ?? null, isWritable: true }, tokenVaultA: { value: input.tokenVaultA ?? null, isWritable: true }, tokenOwnerAccountB: { value: input.tokenOwnerAccountB ?? null, isWritable: true }, tokenVaultB: { value: input.tokenVaultB ?? null, isWritable: true }, tickArray0: { value: input.tickArray0 ?? null, isWritable: true }, tickArray1: { value: input.tickArray1 ?? null, isWritable: true }, tickArray2: { value: input.tickArray2 ?? null, isWritable: true }, oracle: { value: input.oracle ?? null, isWritable: true } }
const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;
// Original args.
const args = { ...input, };
const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
return Object.freeze({ accounts: [getAccountMeta(accounts.tokenProgramA), getAccountMeta(accounts.tokenProgramB), getAccountMeta(accounts.memoProgram), getAccountMeta(accounts.tokenAuthority), getAccountMeta(accounts.whirlpool), getAccountMeta(accounts.tokenMintA), getAccountMeta(accounts.tokenMintB), getAccountMeta(accounts.tokenOwnerAccountA), getAccountMeta(accounts.tokenVaultA), getAccountMeta(accounts.tokenOwnerAccountB), getAccountMeta(accounts.tokenVaultB), getAccountMeta(accounts.tickArray0), getAccountMeta(accounts.tickArray1), getAccountMeta(accounts.tickArray2), getAccountMeta(accounts.oracle)], data: getSwapV2InstructionDataEncoder().encode(args as SwapV2InstructionDataArgs), programAddress } as SwapV2Instruction<TProgramAddress, TAccountTokenProgramA, TAccountTokenProgramB, TAccountMemoProgram, TAccountTokenAuthority, TAccountWhirlpool, TAccountTokenMintA, TAccountTokenMintB, TAccountTokenOwnerAccountA, TAccountTokenVaultA, TAccountTokenOwnerAccountB, TAccountTokenVaultB, TAccountTickArray0, TAccountTickArray1, TAccountTickArray2, TAccountOracle>);
}
export type ParsedSwapV2Instruction<TProgram extends string = typeof WHIRLPOOL_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = { programAddress: Address<TProgram>;
accounts: {
tokenProgramA: TAccountMetas[0];
tokenProgramB: TAccountMetas[1];
memoProgram: TAccountMetas[2];
tokenAuthority: TAccountMetas[3];
whirlpool: TAccountMetas[4];
tokenMintA: TAccountMetas[5];
tokenMintB: TAccountMetas[6];
tokenOwnerAccountA: TAccountMetas[7];
tokenVaultA: TAccountMetas[8];
tokenOwnerAccountB: TAccountMetas[9];
tokenVaultB: TAccountMetas[10];
tickArray0: TAccountMetas[11];
tickArray1: TAccountMetas[12];
tickArray2: TAccountMetas[13];
oracle: TAccountMetas[14];
};
data: SwapV2InstructionData; };
export function parseSwapV2Instruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedSwapV2Instruction<TProgram, TAccountMetas> {
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: { tokenProgramA: getNextAccount(), tokenProgramB: getNextAccount(), memoProgram: getNextAccount(), tokenAuthority: getNextAccount(), whirlpool: getNextAccount(), tokenMintA: getNextAccount(), tokenMintB: getNextAccount(), tokenOwnerAccountA: getNextAccount(), tokenVaultA: getNextAccount(), tokenOwnerAccountB: getNextAccount(), tokenVaultB: getNextAccount(), tickArray0: getNextAccount(), tickArray1: getNextAccount(), tickArray2: getNextAccount(), oracle: getNextAccount() }, data: getSwapV2InstructionDataDecoder().decode(instruction.data) };
}