Voltr SDK

Voltr SDK

A TypeScript SDK for interacting with the Voltr protocol on Solana.

  • Complete TypeScript support with type definitions
  • Comprehensive vault management functionality
  • Strategy handling and execution with adaptor support
  • Asset deposit and withdrawal operations with direct withdraw capability
  • Account data fetching and PDA (Program Derived Address) utilities
  • Position and total value tracking
npm install @voltr/vault-sdk
import { Connection } from "@solana/web3.js";
import { VoltrClient } from "@voltr/vault-sdk";

// Initialize client
const connection = new Connection("https://api.mainnet-beta.solana.com");
const client = new VoltrClient(connection);
import { BN } from "@coral-xyz/anchor";
import { Keypair, PublicKey } from "@solana/web3.js";

// Create vault initialization parameters
const vaultParams = {
config: {
maxCap: new BN("1000000000"),
startAtTs: new BN(Math.floor(Date.now() / 1000)),
lockedProfitDegradationDuration: new BN(3600), // 1 hour
managerManagementFee: 50, // 0.5%
managerPerformanceFee: 1000, // 10%
adminManagementFee: 50, // 0.5%
adminPerformanceFee: 1000, // 10%
redemptionFeePercentageBps: 10, // 0.1%
issuanceFeePercentageBps: 10, // 0.1%
withdrawalWaitingPeriod: new BN(3600), // 1 hour
},
name: "My Vault",
description: "Example vault",
};

// Create initialization instruction
const ix = await client.createInitializeVaultIx(vaultParams, {
vault: vaultKeypair,
vaultAssetMint: new PublicKey("..."),
admin: adminPubkey,
manager: managerPubkey,
payer: payerPubkey,
});
// Add an adaptor to a vault
const addAdaptorIx = await client.createAddAdaptorIx({
vault: vaultPubkey,
payer: payerPubkey,
admin: adminPubkey,
adaptorProgram: adaptorProgramPubkey,
});

// Initialize a strategy
const initStrategyIx = await client.createInitializeStrategyIx(
{
instructionDiscriminator: null,
additionalArgs: null,
},
{
payer: payerPubkey,
vault: vaultPubkey,
manager: managerPubkey,
strategy: strategyPubkey,
adaptorProgram: adaptorProgramPubkey,
remainingAccounts: [],
}
);

// Initialize direct withdraw strategy
const initDirectWithdrawIx =
await client.createInitializeDirectWithdrawStrategyIx(
{
instructionDiscriminator: null,
additionalArgs: null,
allowUserArgs: true,
},
{
payer: payerPubkey,
admin: adminPubkey,
vault: vaultPubkey,
strategy: strategyPubkey,
adaptorProgram: adaptorProgramPubkey,
}
);
// Deposit assets
const depositIx = await client.createDepositIx(new BN("1000000000"), {
userAuthority: userPubkey,
vault: vaultPubkey,
vaultAssetMint: mintPubkey,
assetTokenProgram: tokenProgramPubkey,
});

// Request withdraw assets
const requestWithdrawIx = await client.createRequestWithdrawVaultIx(
{
amount: new BN("1000000000"),
isAmountInLp: false,
isWithdrawAll: false,
},
{
payer: payerPubkey,
userAuthority: userPubkey,
vault: vaultPubkey,
}
);

// Cancel withdraw request
const cancelRequestWithdrawIx = await client.createCancelRequestWithdrawVaultIx(
{
userAuthority: userPubkey,
vault: vaultPubkey,
}
);

// Withdraw from vault
const withdrawIx = await client.createWithdrawIx({
userAuthority: userPubkey,
vault: vaultPubkey,
vaultAssetMint: mintPubkey,
assetTokenProgram: tokenProgramPubkey,
});

// Direct withdraw from strategy
const directWithdrawIx = await client.createDirectWithdrawStrategyIx(
{
userArgs: null,
},
{
user: userPubkey,
vault: vaultPubkey,
strategy: strategyPubkey,
vaultAssetMint: mintPubkey,
assetTokenProgram: tokenProgramPubkey,
adaptorProgram: adaptorProgramPubkey,
remainingAccounts: [],
}
);
// Get position and total values for a vault
const values = await client.getPositionAndTotalValuesForVault(vaultPubkey);
console.log(`Total Value: ${values.totalValue}`);
console.log("Strategy Positions:", values.strategies);
  • createInitializeVaultIx(vaultParams, params)
  • createRequestWithdrawVaultIx(requestWithdrawArgs, params)
  • createCancelRequestWithdrawVaultIx(params)
  • createWithdrawVaultIx(params)
  • createAddAdaptorIx(params)
  • createInitializeStrategyIx(initArgs, params)
  • createDepositStrategyIx(depositArgs, params)
  • createWithdrawStrategyIx(withdrawArgs, params)
  • createInitializeDirectWithdrawStrategyIx(initArgs, params)
  • createDirectWithdrawStrategyIx(withdrawArgs, params)
  • createRemoveAdaptorIx(params)
  • fetchVaultAccount(vault)
  • fetchAllStrategyInitReceiptAccounts()
  • fetchAllStrategyInitReceiptAccountsOfVault(vault)
  • fetchAllAdaptorAddReceiptAccountsOfVault(vault)
  • getPositionAndTotalValuesForVault(vault)
  • findVaultLpMint(vault)
  • findVaultAssetIdleAuth(vault)
  • findVaultAddresses(vault)
  • findVaultStrategyAuth(vault, strategy)
  • findStrategyInitReceipt(vault, strategy)
  • findDirectWithdrawInitReceipt(vault, strategy)
  • calculateAssetsForWithdraw(vaultPk, lpAmount)
  • calculateLpForWithdraw(vaultPk, assetAmount)
  • calculateLpForDeposit(vaultPk, assetAmount)

MIT