UNPKG

@kamino-finance/kliquidity-sdk

Version:

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

92 lines (72 loc) 7.46 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, getI32Decoder, getI32Encoder, getStructDecoder, getStructEncoder, transformEncoder, type AccountMeta, type Address, type FixedSizeCodec, type FixedSizeDecoder, type FixedSizeEncoder, type Instruction, type InstructionWithAccounts, type InstructionWithData, type ReadonlyAccount, type ReadonlyUint8Array, type WritableAccount } from '@solana/kit'; import { LB_CLMM_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const GO_TO_A_BIN_DISCRIMINATOR = new Uint8Array([146, 72, 174, 224, 40, 253, 84, 174]); export function getGoToABinDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(GO_TO_A_BIN_DISCRIMINATOR); } export type GoToABinInstruction<TProgram extends string = typeof LB_CLMM_PROGRAM_ADDRESS, TAccountLbPair extends string | AccountMeta<string> = string, TAccountBinArrayBitmapExtension extends string | AccountMeta<string> = string, TAccountFromBinArray extends string | AccountMeta<string> = string, TAccountToBinArray extends string | AccountMeta<string> = string, TAccountEventAuthority extends string | AccountMeta<string> = string, TAccountProgram extends string | AccountMeta<string> = string, TRemainingAccounts extends readonly AccountMeta<string>[] = []> = Instruction<TProgram> & InstructionWithData<ReadonlyUint8Array> & InstructionWithAccounts<[TAccountLbPair extends string ? WritableAccount<TAccountLbPair> : TAccountLbPair, TAccountBinArrayBitmapExtension extends string ? ReadonlyAccount<TAccountBinArrayBitmapExtension> : TAccountBinArrayBitmapExtension, TAccountFromBinArray extends string ? ReadonlyAccount<TAccountFromBinArray> : TAccountFromBinArray, TAccountToBinArray extends string ? ReadonlyAccount<TAccountToBinArray> : TAccountToBinArray, TAccountEventAuthority extends string ? ReadonlyAccount<TAccountEventAuthority> : TAccountEventAuthority, TAccountProgram extends string ? ReadonlyAccount<TAccountProgram> : TAccountProgram, ...TRemainingAccounts]>; export type GoToABinInstructionData = { discriminator: ReadonlyUint8Array; binId: number; }; export type GoToABinInstructionDataArgs = { binId: number; }; export function getGoToABinInstructionDataEncoder(): FixedSizeEncoder<GoToABinInstructionDataArgs> { return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['binId', getI32Encoder()]]), (value) => ({ ...value, discriminator: GO_TO_A_BIN_DISCRIMINATOR })); } export function getGoToABinInstructionDataDecoder(): FixedSizeDecoder<GoToABinInstructionData> { return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['binId', getI32Decoder()]]); } export function getGoToABinInstructionDataCodec(): FixedSizeCodec<GoToABinInstructionDataArgs, GoToABinInstructionData> { return combineCodec(getGoToABinInstructionDataEncoder(), getGoToABinInstructionDataDecoder()); } export type GoToABinInput<TAccountLbPair extends string = string, TAccountBinArrayBitmapExtension extends string = string, TAccountFromBinArray extends string = string, TAccountToBinArray extends string = string, TAccountEventAuthority extends string = string, TAccountProgram extends string = string> = { lbPair: Address<TAccountLbPair>; binArrayBitmapExtension?: Address<TAccountBinArrayBitmapExtension>; fromBinArray?: Address<TAccountFromBinArray>; toBinArray?: Address<TAccountToBinArray>; eventAuthority: Address<TAccountEventAuthority>; program: Address<TAccountProgram>; binId: GoToABinInstructionDataArgs["binId"]; } export function getGoToABinInstruction<TAccountLbPair extends string, TAccountBinArrayBitmapExtension extends string, TAccountFromBinArray extends string, TAccountToBinArray extends string, TAccountEventAuthority extends string, TAccountProgram extends string, TProgramAddress extends Address = typeof LB_CLMM_PROGRAM_ADDRESS>(input: GoToABinInput<TAccountLbPair, TAccountBinArrayBitmapExtension, TAccountFromBinArray, TAccountToBinArray, TAccountEventAuthority, TAccountProgram>, config?: { programAddress?: TProgramAddress } ): GoToABinInstruction<TProgramAddress, TAccountLbPair, TAccountBinArrayBitmapExtension, TAccountFromBinArray, TAccountToBinArray, TAccountEventAuthority, TAccountProgram> { // Program address. const programAddress = config?.programAddress ?? LB_CLMM_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { lbPair: { value: input.lbPair ?? null, isWritable: true }, binArrayBitmapExtension: { value: input.binArrayBitmapExtension ?? null, isWritable: false }, fromBinArray: { value: input.fromBinArray ?? null, isWritable: false }, toBinArray: { value: input.toBinArray ?? null, isWritable: false }, eventAuthority: { value: input.eventAuthority ?? null, isWritable: false }, program: { value: input.program ?? null, isWritable: false } } 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.lbPair), getAccountMeta(accounts.binArrayBitmapExtension), getAccountMeta(accounts.fromBinArray), getAccountMeta(accounts.toBinArray), getAccountMeta(accounts.eventAuthority), getAccountMeta(accounts.program)], data: getGoToABinInstructionDataEncoder().encode(args as GoToABinInstructionDataArgs), programAddress } as GoToABinInstruction<TProgramAddress, TAccountLbPair, TAccountBinArrayBitmapExtension, TAccountFromBinArray, TAccountToBinArray, TAccountEventAuthority, TAccountProgram>); } export type ParsedGoToABinInstruction<TProgram extends string = typeof LB_CLMM_PROGRAM_ADDRESS, TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[]> = { programAddress: Address<TProgram>; accounts: { lbPair: TAccountMetas[0]; binArrayBitmapExtension?: TAccountMetas[1] | undefined; fromBinArray?: TAccountMetas[2] | undefined; toBinArray?: TAccountMetas[3] | undefined; eventAuthority: TAccountMetas[4]; program: TAccountMetas[5]; }; data: GoToABinInstructionData; }; export function parseGoToABinInstruction<TProgram extends string, TAccountMetas extends readonly AccountMeta[]>(instruction: Instruction<TProgram> & InstructionWithAccounts<TAccountMetas> & InstructionWithData<ReadonlyUint8Array>): ParsedGoToABinInstruction<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; } const getNextOptionalAccount = () => { const accountMeta = getNextAccount(); return accountMeta.address === LB_CLMM_PROGRAM_ADDRESS ? undefined : accountMeta; }; return { programAddress: instruction.programAddress, accounts: { lbPair: getNextAccount(), binArrayBitmapExtension: getNextOptionalAccount(), fromBinArray: getNextOptionalAccount(), toBinArray: getNextOptionalAccount(), eventAuthority: getNextAccount(), program: getNextAccount() }, data: getGoToABinInstructionDataDecoder().decode(instruction.data) }; }