@kamino-finance/farms-sdk
Version:
285 lines (267 loc) • 9.72 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,
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 { FARMS_PROGRAM_ADDRESS } from "../programs";
import { getAccountMetaFactory, type ResolvedAccount } from "../shared";
export const WITHDRAW_TREASURY_DISCRIMINATOR = new Uint8Array([
40, 63, 122, 158, 144, 216, 83, 96,
]);
export function getWithdrawTreasuryDiscriminatorBytes() {
return fixEncoderSize(getBytesEncoder(), 8).encode(
WITHDRAW_TREASURY_DISCRIMINATOR,
);
}
export type WithdrawTreasuryInstruction<
TProgram extends string = typeof FARMS_PROGRAM_ADDRESS,
TAccountGlobalAdmin extends string | AccountMeta<string> = string,
TAccountGlobalConfig extends string | AccountMeta<string> = string,
TAccountRewardMint extends string | AccountMeta<string> = string,
TAccountRewardTreasuryVault extends string | AccountMeta<string> = string,
TAccountTreasuryVaultAuthority extends string | AccountMeta<string> = string,
TAccountWithdrawDestinationTokenAccount extends string | AccountMeta<string> =
string,
TAccountTokenProgram extends string | AccountMeta<string> =
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
TRemainingAccounts extends readonly AccountMeta<string>[] = [],
> = Instruction<TProgram> &
InstructionWithData<ReadonlyUint8Array> &
InstructionWithAccounts<
[
TAccountGlobalAdmin extends string
? WritableSignerAccount<TAccountGlobalAdmin> &
AccountSignerMeta<TAccountGlobalAdmin>
: TAccountGlobalAdmin,
TAccountGlobalConfig extends string
? ReadonlyAccount<TAccountGlobalConfig>
: TAccountGlobalConfig,
TAccountRewardMint extends string
? ReadonlyAccount<TAccountRewardMint>
: TAccountRewardMint,
TAccountRewardTreasuryVault extends string
? WritableAccount<TAccountRewardTreasuryVault>
: TAccountRewardTreasuryVault,
TAccountTreasuryVaultAuthority extends string
? ReadonlyAccount<TAccountTreasuryVaultAuthority>
: TAccountTreasuryVaultAuthority,
TAccountWithdrawDestinationTokenAccount extends string
? WritableAccount<TAccountWithdrawDestinationTokenAccount>
: TAccountWithdrawDestinationTokenAccount,
TAccountTokenProgram extends string
? ReadonlyAccount<TAccountTokenProgram>
: TAccountTokenProgram,
...TRemainingAccounts,
]
>;
export type WithdrawTreasuryInstructionData = {
discriminator: ReadonlyUint8Array;
amount: bigint;
};
export type WithdrawTreasuryInstructionDataArgs = { amount: number | bigint };
export function getWithdrawTreasuryInstructionDataEncoder(): FixedSizeEncoder<WithdrawTreasuryInstructionDataArgs> {
return transformEncoder(
getStructEncoder([
["discriminator", fixEncoderSize(getBytesEncoder(), 8)],
["amount", getU64Encoder()],
]),
(value) => ({ ...value, discriminator: WITHDRAW_TREASURY_DISCRIMINATOR }),
);
}
export function getWithdrawTreasuryInstructionDataDecoder(): FixedSizeDecoder<WithdrawTreasuryInstructionData> {
return getStructDecoder([
["discriminator", fixDecoderSize(getBytesDecoder(), 8)],
["amount", getU64Decoder()],
]);
}
export function getWithdrawTreasuryInstructionDataCodec(): FixedSizeCodec<
WithdrawTreasuryInstructionDataArgs,
WithdrawTreasuryInstructionData
> {
return combineCodec(
getWithdrawTreasuryInstructionDataEncoder(),
getWithdrawTreasuryInstructionDataDecoder(),
);
}
export type WithdrawTreasuryInput<
TAccountGlobalAdmin extends string = string,
TAccountGlobalConfig extends string = string,
TAccountRewardMint extends string = string,
TAccountRewardTreasuryVault extends string = string,
TAccountTreasuryVaultAuthority extends string = string,
TAccountWithdrawDestinationTokenAccount extends string = string,
TAccountTokenProgram extends string = string,
> = {
globalAdmin: TransactionSigner<TAccountGlobalAdmin>;
globalConfig: Address<TAccountGlobalConfig>;
rewardMint: Address<TAccountRewardMint>;
rewardTreasuryVault: Address<TAccountRewardTreasuryVault>;
treasuryVaultAuthority: Address<TAccountTreasuryVaultAuthority>;
withdrawDestinationTokenAccount: Address<TAccountWithdrawDestinationTokenAccount>;
tokenProgram?: Address<TAccountTokenProgram>;
amount: WithdrawTreasuryInstructionDataArgs["amount"];
};
export function getWithdrawTreasuryInstruction<
TAccountGlobalAdmin extends string,
TAccountGlobalConfig extends string,
TAccountRewardMint extends string,
TAccountRewardTreasuryVault extends string,
TAccountTreasuryVaultAuthority extends string,
TAccountWithdrawDestinationTokenAccount extends string,
TAccountTokenProgram extends string,
TProgramAddress extends Address = typeof FARMS_PROGRAM_ADDRESS,
>(
input: WithdrawTreasuryInput<
TAccountGlobalAdmin,
TAccountGlobalConfig,
TAccountRewardMint,
TAccountRewardTreasuryVault,
TAccountTreasuryVaultAuthority,
TAccountWithdrawDestinationTokenAccount,
TAccountTokenProgram
>,
config?: { programAddress?: TProgramAddress },
): WithdrawTreasuryInstruction<
TProgramAddress,
TAccountGlobalAdmin,
TAccountGlobalConfig,
TAccountRewardMint,
TAccountRewardTreasuryVault,
TAccountTreasuryVaultAuthority,
TAccountWithdrawDestinationTokenAccount,
TAccountTokenProgram
> {
// Program address.
const programAddress = config?.programAddress ?? FARMS_PROGRAM_ADDRESS;
// Original accounts.
const originalAccounts = {
globalAdmin: { value: input.globalAdmin ?? null, isWritable: true },
globalConfig: { value: input.globalConfig ?? null, isWritable: false },
rewardMint: { value: input.rewardMint ?? null, isWritable: false },
rewardTreasuryVault: {
value: input.rewardTreasuryVault ?? null,
isWritable: true,
},
treasuryVaultAuthority: {
value: input.treasuryVaultAuthority ?? null,
isWritable: false,
},
withdrawDestinationTokenAccount: {
value: input.withdrawDestinationTokenAccount ?? null,
isWritable: true,
},
tokenProgram: { value: input.tokenProgram ?? 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.globalAdmin),
getAccountMeta(accounts.globalConfig),
getAccountMeta(accounts.rewardMint),
getAccountMeta(accounts.rewardTreasuryVault),
getAccountMeta(accounts.treasuryVaultAuthority),
getAccountMeta(accounts.withdrawDestinationTokenAccount),
getAccountMeta(accounts.tokenProgram),
],
data: getWithdrawTreasuryInstructionDataEncoder().encode(
args as WithdrawTreasuryInstructionDataArgs,
),
programAddress,
} as WithdrawTreasuryInstruction<
TProgramAddress,
TAccountGlobalAdmin,
TAccountGlobalConfig,
TAccountRewardMint,
TAccountRewardTreasuryVault,
TAccountTreasuryVaultAuthority,
TAccountWithdrawDestinationTokenAccount,
TAccountTokenProgram
>);
}
export type ParsedWithdrawTreasuryInstruction<
TProgram extends string = typeof FARMS_PROGRAM_ADDRESS,
TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[],
> = {
programAddress: Address<TProgram>;
accounts: {
globalAdmin: TAccountMetas[0];
globalConfig: TAccountMetas[1];
rewardMint: TAccountMetas[2];
rewardTreasuryVault: TAccountMetas[3];
treasuryVaultAuthority: TAccountMetas[4];
withdrawDestinationTokenAccount: TAccountMetas[5];
tokenProgram: TAccountMetas[6];
};
data: WithdrawTreasuryInstructionData;
};
export function parseWithdrawTreasuryInstruction<
TProgram extends string,
TAccountMetas extends readonly AccountMeta[],
>(
instruction: Instruction<TProgram> &
InstructionWithAccounts<TAccountMetas> &
InstructionWithData<ReadonlyUint8Array>,
): ParsedWithdrawTreasuryInstruction<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 as TAccountMetas)[accountIndex]!;
accountIndex += 1;
return accountMeta;
};
return {
programAddress: instruction.programAddress,
accounts: {
globalAdmin: getNextAccount(),
globalConfig: getNextAccount(),
rewardMint: getNextAccount(),
rewardTreasuryVault: getNextAccount(),
treasuryVaultAuthority: getNextAccount(),
withdrawDestinationTokenAccount: getNextAccount(),
tokenProgram: getNextAccount(),
},
data: getWithdrawTreasuryInstructionDataDecoder().decode(instruction.data),
};
}