UNPKG

@symmetry-hq/baskets-v2-sdk

Version:

Symmetry Baskets V2 SDK

49 lines (46 loc) 2.04 kB
// 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; }