RPC connection
Fee payer (needed for associated token account instructions)
Program ID for decompressAccountsIdempotent
PDAs and vaults (caller pre-fetches)
User ATAs (fetched via getAtaInterface)
Optionaloptions: InterfaceOptionsOptional load options
LoadResult with decompressParams and ataInstructions
const poolInfo = await myProgram.fetchPoolState(rpc, poolAddress);
const vault0Ata = getAssociatedTokenAddressInterface(token0Mint, poolAddress);
const vault0Info = await getAtaInterface(rpc, vault0Ata, poolAddress, token0Mint, undefined, LIGHT_TOKEN_PROGRAM_ID);
const userAta = getAssociatedTokenAddressInterface(tokenMint, userWallet);
const userAtaInfo = await getAtaInterface(rpc, userAta, userWallet, tokenMint);
const result = await createLoadAccountsParams(
rpc,
payer.publicKey,
programId,
[
{ address: poolAddress, accountType: 'poolState', info: poolInfo },
{ address: vault0, accountType: 'cTokenData', tokenVariant: 'token0Vault', info: vault0Info },
],
[userAta],
);
// Build transaction with both program decompress and associated token account load
const instructions = [...result.ataInstructions];
if (result.decompressParams) {
instructions.push(await program.methods
.decompressAccountsIdempotent(
result.decompressParams.proofOption,
result.decompressParams.compressedAccounts,
result.decompressParams.systemAccountsOffset,
)
.remainingAccounts(result.decompressParams.remainingAccounts)
.instruction());
}
Create params for loading program accounts and ATAs.
Returns: