@kamino-finance/kliquidity-sdk
Version:
Typescript SDK for interacting with the Kamino Liquidity (kliquidity) protocol
109 lines (90 loc) • 11.6 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, getBytesDecoder, getBytesEncoder, getStructDecoder, getStructEncoder, getU128Decoder, getU128Encoder, getU64Decoder, getU64Encoder, transformEncoder, type AccountMeta, type AccountSignerMeta, type Address, type FixedSizeCodec, type FixedSizeDecoder, type FixedSizeEncoder, type Instruction, type InstructionWithAccounts, type InstructionWithData, type ReadonlyAccount, type ReadonlyUint8Array, type TransactionSigner, type WritableAccount, type WritableSignerAccount } from '@solana/kit';
import { AMM_V3_PROGRAM_ADDRESS } from '../programs';
import { getAccountMetaFactory, type ResolvedAccount } from '../shared';
export const CREATE_POOL_DISCRIMINATOR = new Uint8Array([233, 146, 209, 142, 207, 104, 64, 188]);
export function getCreatePoolDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(CREATE_POOL_DISCRIMINATOR); }
export type CreatePoolInstruction<TProgram extends string = typeof AMM_V3_PROGRAM_ADDRESS, TAccountPoolCreator extends string | AccountMeta<string> = string, TAccountAmmConfig extends string | AccountMeta<string> = string, TAccountPoolState extends string | AccountMeta<string> = string, TAccountTokenMint0 extends string | AccountMeta<string> = string, TAccountTokenMint1 extends string | AccountMeta<string> = string, TAccountTokenVault0 extends string | AccountMeta<string> = string, TAccountTokenVault1 extends string | AccountMeta<string> = string, TAccountObservationState extends string | AccountMeta<string> = string, TAccountTickArrayBitmap extends string | AccountMeta<string> = string, TAccountTokenProgram0 extends string | AccountMeta<string> = string, TAccountTokenProgram1 extends string | AccountMeta<string> = string, TAccountSystemProgram extends string | AccountMeta<string> = "11111111111111111111111111111111", TAccountRent extends string | AccountMeta<string> = "SysvarRent111111111111111111111111111111111", TRemainingAccounts extends readonly AccountMeta<string>[] = []> =
Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountPoolCreator extends string ? WritableSignerAccount<TAccountPoolCreator> & AccountSignerMeta<TAccountPoolCreator> : TAccountPoolCreator, TAccountAmmConfig extends string ? ReadonlyAccount<TAccountAmmConfig> : TAccountAmmConfig, TAccountPoolState extends string ? WritableAccount<TAccountPoolState> : TAccountPoolState, TAccountTokenMint0 extends string ? ReadonlyAccount<TAccountTokenMint0> : TAccountTokenMint0, TAccountTokenMint1 extends string ? ReadonlyAccount<TAccountTokenMint1> : TAccountTokenMint1, TAccountTokenVault0 extends string ? WritableAccount<TAccountTokenVault0> : TAccountTokenVault0, TAccountTokenVault1 extends string ? WritableAccount<TAccountTokenVault1> : TAccountTokenVault1, TAccountObservationState extends string ? WritableAccount<TAccountObservationState> : TAccountObservationState, TAccountTickArrayBitmap extends string ? WritableAccount<TAccountTickArrayBitmap> : TAccountTickArrayBitmap, TAccountTokenProgram0 extends string ? ReadonlyAccount<TAccountTokenProgram0> : TAccountTokenProgram0, TAccountTokenProgram1 extends string ? ReadonlyAccount<TAccountTokenProgram1> : TAccountTokenProgram1, TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram, TAccountRent extends string ? ReadonlyAccount<TAccountRent> : TAccountRent, ...TRemainingAccounts]>;
export type CreatePoolInstructionData = { discriminator: ReadonlyUint8Array; sqrtPriceX64: bigint; openTime: bigint; };
export type CreatePoolInstructionDataArgs = { sqrtPriceX64: number | bigint; openTime: number | bigint; };
export function getCreatePoolInstructionDataEncoder(): FixedSizeEncoder<CreatePoolInstructionDataArgs> {
return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['sqrtPriceX64', getU128Encoder()], ['openTime', getU64Encoder()]]), (value) => ({ ...value, discriminator: CREATE_POOL_DISCRIMINATOR }));
}
export function getCreatePoolInstructionDataDecoder(): FixedSizeDecoder<CreatePoolInstructionData> {
return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['sqrtPriceX64', getU128Decoder()], ['openTime', getU64Decoder()]]);
}
export function getCreatePoolInstructionDataCodec(): FixedSizeCodec<CreatePoolInstructionDataArgs, CreatePoolInstructionData> {
return combineCodec(getCreatePoolInstructionDataEncoder(), getCreatePoolInstructionDataDecoder());
}
export type CreatePoolInput<TAccountPoolCreator extends string = string, TAccountAmmConfig extends string = string, TAccountPoolState extends string = string, TAccountTokenMint0 extends string = string, TAccountTokenMint1 extends string = string, TAccountTokenVault0 extends string = string, TAccountTokenVault1 extends string = string, TAccountObservationState extends string = string, TAccountTickArrayBitmap extends string = string, TAccountTokenProgram0 extends string = string, TAccountTokenProgram1 extends string = string, TAccountSystemProgram extends string = string, TAccountRent extends string = string> = {
poolCreator: TransactionSigner<TAccountPoolCreator>;
ammConfig: Address<TAccountAmmConfig>;
poolState: Address<TAccountPoolState>;
tokenMint0: Address<TAccountTokenMint0>;
tokenMint1: Address<TAccountTokenMint1>;
tokenVault0: Address<TAccountTokenVault0>;
tokenVault1: Address<TAccountTokenVault1>;
observationState: Address<TAccountObservationState>;
tickArrayBitmap: Address<TAccountTickArrayBitmap>;
tokenProgram0: Address<TAccountTokenProgram0>;
tokenProgram1: Address<TAccountTokenProgram1>;
systemProgram?: Address<TAccountSystemProgram>;
rent?: Address<TAccountRent>;
sqrtPriceX64: CreatePoolInstructionDataArgs["sqrtPriceX64"];
openTime: CreatePoolInstructionDataArgs["openTime"];
}
export function getCreatePoolInstruction<TAccountPoolCreator extends string, TAccountAmmConfig extends string, TAccountPoolState extends string, TAccountTokenMint0 extends string, TAccountTokenMint1 extends string, TAccountTokenVault0 extends string, TAccountTokenVault1 extends string, TAccountObservationState extends string, TAccountTickArrayBitmap extends string, TAccountTokenProgram0 extends string, TAccountTokenProgram1 extends string, TAccountSystemProgram extends string, TAccountRent extends string, TProgramAddress extends Address = typeof AMM_V3_PROGRAM_ADDRESS>(input: CreatePoolInput<TAccountPoolCreator, TAccountAmmConfig, TAccountPoolState, TAccountTokenMint0, TAccountTokenMint1, TAccountTokenVault0, TAccountTokenVault1, TAccountObservationState, TAccountTickArrayBitmap, TAccountTokenProgram0, TAccountTokenProgram1, TAccountSystemProgram, TAccountRent>, config?: { programAddress?: TProgramAddress } ): CreatePoolInstruction<TProgramAddress, TAccountPoolCreator, TAccountAmmConfig, TAccountPoolState, TAccountTokenMint0, TAccountTokenMint1, TAccountTokenVault0, TAccountTokenVault1, TAccountObservationState, TAccountTickArrayBitmap, TAccountTokenProgram0, TAccountTokenProgram1, TAccountSystemProgram, TAccountRent> {
// Program address.
const programAddress = config?.programAddress ?? AMM_V3_PROGRAM_ADDRESS;
// Original accounts.
const originalAccounts = { poolCreator: { value: input.poolCreator ?? null, isWritable: true }, ammConfig: { value: input.ammConfig ?? null, isWritable: false }, poolState: { value: input.poolState ?? null, isWritable: true }, tokenMint0: { value: input.tokenMint0 ?? null, isWritable: false }, tokenMint1: { value: input.tokenMint1 ?? null, isWritable: false }, tokenVault0: { value: input.tokenVault0 ?? null, isWritable: true }, tokenVault1: { value: input.tokenVault1 ?? null, isWritable: true }, observationState: { value: input.observationState ?? null, isWritable: true }, tickArrayBitmap: { value: input.tickArrayBitmap ?? null, isWritable: true }, tokenProgram0: { value: input.tokenProgram0 ?? null, isWritable: false }, tokenProgram1: { value: input.tokenProgram1 ?? null, isWritable: false }, systemProgram: { value: input.systemProgram ?? null, isWritable: false }, rent: { value: input.rent ?? null, isWritable: false } }
const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;
// Original args.
const args = { ...input, };
// Resolve default values.
if (!accounts.systemProgram.value) {
accounts.systemProgram.value = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;
}
if (!accounts.rent.value) {
accounts.rent.value = 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>;
}
const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
return Object.freeze({ accounts: [getAccountMeta(accounts.poolCreator), getAccountMeta(accounts.ammConfig), getAccountMeta(accounts.poolState), getAccountMeta(accounts.tokenMint0), getAccountMeta(accounts.tokenMint1), getAccountMeta(accounts.tokenVault0), getAccountMeta(accounts.tokenVault1), getAccountMeta(accounts.observationState), getAccountMeta(accounts.tickArrayBitmap), getAccountMeta(accounts.tokenProgram0), getAccountMeta(accounts.tokenProgram1), getAccountMeta(accounts.systemProgram), getAccountMeta(accounts.rent)], data: getCreatePoolInstructionDataEncoder().encode(args as CreatePoolInstructionDataArgs), programAddress } as CreatePoolInstruction<TProgramAddress, TAccountPoolCreator, TAccountAmmConfig, TAccountPoolState, TAccountTokenMint0, TAccountTokenMint1, TAccountTokenVault0, TAccountTokenVault1, TAccountObservationState, TAccountTickArrayBitmap, TAccountTokenProgram0, TAccountTokenProgram1, TAccountSystemProgram, TAccountRent>);
}
export type ParsedCreatePoolInstruction<TProgram extends string = typeof AMM_V3_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = { programAddress: Address<TProgram>;
accounts: {
poolCreator: TAccountMetas[0];
ammConfig: TAccountMetas[1];
poolState: TAccountMetas[2];
tokenMint0: TAccountMetas[3];
tokenMint1: TAccountMetas[4];
tokenVault0: TAccountMetas[5];
tokenVault1: TAccountMetas[6];
observationState: TAccountMetas[7];
tickArrayBitmap: TAccountMetas[8];
tokenProgram0: TAccountMetas[9];
tokenProgram1: TAccountMetas[10];
systemProgram: TAccountMetas[11];
rent: TAccountMetas[12];
};
data: CreatePoolInstructionData; };
export function parseCreatePoolInstruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedCreatePoolInstruction<TProgram, TAccountMetas> {
if (instruction.accounts.length < 13) {
// 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: { poolCreator: getNextAccount(), ammConfig: getNextAccount(), poolState: getNextAccount(), tokenMint0: getNextAccount(), tokenMint1: getNextAccount(), tokenVault0: getNextAccount(), tokenVault1: getNextAccount(), observationState: getNextAccount(), tickArrayBitmap: getNextAccount(), tokenProgram0: getNextAccount(), tokenProgram1: getNextAccount(), systemProgram: getNextAccount(), rent: getNextAccount() }, data: getCreatePoolInstructionDataDecoder().decode(instruction.data) };
}