This technical guide explains how to use the Voltr SDK to deposit and withdraw funds from strategies. It includes complete code examples and important technical considerations.
Setup
First, import the required dependencies:
import { Connection, Keypair, PublicKey, TransactionInstruction } from "@solana/web3.js";
import { VoltrClient, DEFAULT_ADAPTOR_PROGRAM_ID, SEEDS } from "@voltr/vault-sdk";
import { BN } from "@coral-xyz/anchor";
import {
createAssociatedTokenAccountInstruction,
getAssociatedTokenAddressSync,
getAccount,
TOKEN_PROGRAM_ID,
} from "@solana/spl-token";
Initialize the client and configuration:
// Load manager keypair
const managerKpFile = fs.readFileSync(managerFilePath, "utf-8");
const managerKpData = JSON.parse(managerKpFile);
const managerSecret = Uint8Array.from(managerKpData);
const managerKp = Keypair.fromSecretKey(managerSecret);
const manager = managerKp.publicKey;
// Initialize connection and client
const connection = new Connection(rpcUrl);
const client = new VoltrClient(connection);
// Reference vault and asset
const vault = new PublicKey("your-vault-address");
const vaultAssetMint = new PublicKey("your-asset-mint");
Depositing Funds to Strategies
Account Setup:
// Get strategy PDA
const [strategy] = PublicKey.findProgramAddressSync(
[SEEDS.STRATEGY, counterPartyTa.toBuffer()],
DEFAULT_ADAPTOR_PROGRAM_ID
);
// Get vault strategy authority
const { vaultStrategyAuth } = client.findVaultStrategyAddresses(vault, strategy);
// Setup vault strategy asset ATA
const vaultStrategyAssetAta = getAssociatedTokenAddressSync(
vaultAssetMint,
vaultStrategyAuth,
true
);
// Check and create ATA if needed
let transactionIxs: TransactionInstruction[] = [];
if (!vaultStrategyAssetAtaAccount) {
const createVaultStrategyAssetAtaIx = createAssociatedTokenAccountInstruction(
payer,
vaultStrategyAssetAta,
vaultStrategyAuth,
vaultAssetMint
);
transactionIxs.push(createVaultStrategyAssetAtaIx);
}