@symmetry-hq/baskets-v2-sdk
Version:
Symmetry Baskets V2 SDK
49 lines (46 loc) • 2.04 kB
text/typescript
// Core dependencies
import { Program } from "@coral-xyz/anchor";
import { PublicKey, SystemProgram, SYSVAR_INSTRUCTIONS_PUBKEY, TransactionInstruction } from "@solana/web3.js";
import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
// Local imports
import { BasketsProgram } from "../../idl/types";
import { getAta, getRebalanceStateAccount } from "../../utils/programAccounts";
import { BasketState } from "../../state/basket";
import { REBALANCE_FEE_WALLET } from "../../utils/constants";
export async function depositAfterRebalanceIx( params: {
program: Program<BasketsProgram>,
basketState: BasketState,
payer: PublicKey,
fromTokenMint: PublicKey,
toTokenMint: PublicKey,
checkWeights: boolean,
}): Promise<TransactionInstruction> {
const { program, basketState } = params;
const basketPda = basketState.basketPda;
const basketFromTokenAccount = getAta(basketPda, params.fromTokenMint);
const workerFromTokenAccount = getAta(params.payer, params.fromTokenMint);
const basketToTokenAccount = getAta(basketPda, params.toTokenMint);
const workerToTokenAccount = getAta(params.payer, params.toTokenMint);
const rebalanceState = getRebalanceStateAccount();
const rebalanceFeeAccount = getAta(REBALANCE_FEE_WALLET, params.toTokenMint);
const ix = await program.methods
.basketDepositAfterRebalance(
params.checkWeights == true ? 1 : 0,
).accountsStrict({
worker: params.payer,
basket: basketState.ownAddress,
basketPda,
fromTokenMint: params.fromTokenMint,
basketFromTokenAccount,
workerFromTokenAccount,
toTokenMint: params.toTokenMint,
basketToTokenAccount,
workerToTokenAccount,
rebalanceState,
rebalanceFeeAccount,
instructionsSysvar: SYSVAR_INSTRUCTIONS_PUBKEY,
systemProgram: SystemProgram.programId,
tokenProgram: TOKEN_PROGRAM_ID,
}).instruction();
return ix;
}