@symmetry-hq/baskets-v2-sdk
Version:
Symmetry Baskets V2 SDK
49 lines (44 loc) • 1.92 kB
text/typescript
// Core dependencies
import { Program } from "@coral-xyz/anchor";
import { AddressLookupTableProgram, PublicKey, SystemProgram, TransactionInstruction } from "@solana/web3.js";
// Local imports
import { BasketsProgram } from "../../idl/types";
import { fetchBasketState } from "../../state/basket";
import { getBasketPda, getDeactivatedLookupTableAccount, getLookupTableAccount, getStateCreatorAccount } from "../../utils/programAccounts";
export async function createLookupTableIx(params: {
program: Program<BasketsProgram>;
manager: PublicKey;
basket: PublicKey;
}): Promise<TransactionInstruction> {
const { program, manager } = params;
const basketState = await fetchBasketState(program, params.basket);
const slot = await program.provider.connection.getSlot();
const basketPda = getBasketPda(params.basket);
const oldLookupTable1 = basketState.otherLookupTable1;
const oldLookupTable2 = basketState.otherLookupTable2;
const newLookupTable1 = getLookupTableAccount(basketPda, slot);
const newLookupTable2 = getLookupTableAccount(basketPda, slot - 1);
const deactivatedLookupTable1 = getDeactivatedLookupTableAccount(oldLookupTable1);
const deactivatedLookupTable2 = getDeactivatedLookupTableAccount(oldLookupTable2);
const stateCreator = getStateCreatorAccount();
const ix = await program.methods
.createLookupTable(
slot
)
.accountsStrict({
manager,
basket: params.basket,
basketPda,
oldLookupTable1,
oldLookupTable2,
newLookupTable1,
newLookupTable2,
deactivatedLookupTable1,
deactivatedLookupTable2,
stateCreator,
addressLookupTableProgram: AddressLookupTableProgram.programId,
systemProgram: SystemProgram.programId,
})
.instruction();
return ix;
}