Documentation Index
Fetch the complete documentation index at: https://docs.sendai.fun/llms.txt
Use this file to discover all available pages before exploring further.
Solana Agent Kit provides comprehensive integration with Voltr vaults for managing deposits, withdrawals, and viewing position values. The integration supports both Token Program and Token-2022 assets.
Key Features
- Strategy deposits
- Strategy withdrawals
- Position value tracking
- Token-2022 support
- Remaining accounts handling
- LangChain tool integration
Basic Usage
Getting Position Values
const values = await agent.voltrGetPositionValues(
new PublicKey("vault_address")
);
Depositing into a Strategy
const signature = await agent.voltrDepositStrategy(
new BN("1000000"), // Amount in base units
new PublicKey("vault_address"),
new PublicKey("strategy_address")
);
Withdrawing from a Strategy
const signature = await agent.voltrWithdrawStrategy(
new BN("1000000"), // Amount in base units
new PublicKey("vault_address"),
new PublicKey("strategy_address")
);
Strategy Operation Parameters
interface StrategyParams {
depositAmount?: BN; // Amount to deposit
withdrawAmount?: BN; // Amount to withdraw
vault: PublicKey; // Vault address
strategy: PublicKey; // Strategy address
}
Remaining Accounts Structure
interface RemainingAccount {
pubkey: string; // Account public key
isSigner: boolean; // Is signer flag
isWritable: boolean; // Is writable flag
}
LangChain Integration
Solana Agent Kit provides several LangChain tools for Voltr operations:
import { SolanaVoltrGetPositionValues } from 'solana-agent-kit';
const getPositionTool = new SolanaVoltrGetPositionValues(agent);
// Tool input: vault address as string
const input = "vault_address";
// Tool returns JSON string with position values
import { SolanaVoltrDepositStrategy } from 'solana-agent-kit';
const depositTool = new SolanaVoltrDepositStrategy(agent);
// Tool input format (JSON string):
const input = JSON.stringify({
depositAmount: "1000000",
vault: "vault_address",
strategy: "strategy_address"
});
// Tool returns JSON response:
{
status: "success",
message: "Deposited 1000000 into strategy successfully",
transaction: "transaction_signature"
}
import { SolanaVoltrWithdrawStrategy } from 'solana-agent-kit';
const withdrawTool = new SolanaVoltrWithdrawStrategy(agent);
// Tool input format (JSON string):
const input = JSON.stringify({
withdrawAmount: "1000000",
vault: "vault_address",
strategy: "strategy_address"
});
// Tool returns JSON response:
{
status: "success",
message: "Withdrew 1000000 from strategy successfully",
transaction: "transaction_signature"
}
Example Prompts
For LangChain AI tools, here are example prompts:
Position Management
"Get current position values for vault [address]"
"Deposit 1000 USDC into strategy [address]"
"Withdraw 500 SOL from vault strategy"
Important Notes
-
Token Programs
- Supports both Token Program and Token-2022
- Automatically detects token program type
- Validates program compatibility
-
Amount Handling
- All amounts must be in base units (lamports)
- Use BN.js for precise number handling
- Consider token decimals when calculating amounts
-
Remaining Accounts
- Fetched automatically from Voltr API
- Required for strategy operations
- Includes instruction discriminators
Best Practices
-
Error Handling
try {
const signature = await agent.voltrDepositStrategy(
amount,
vault,
strategy
);
} catch (error) {
if (error.message.includes("Invalid asset")) {
// Handle invalid token program
} else if (error.message.includes("insufficient")) {
// Handle insufficient funds
}
}
-
Amount Calculation
// Convert from human readable to base units
function toBaseUnits(amount: number, decimals: number): BN {
return new BN(amount * Math.pow(10, decimals));
}
-
Transaction Monitoring
// Monitor transaction status
const signature = await agent.voltrDepositStrategy(...);
await agent.connection.confirmTransaction(signature);
Technical Details
Constants
const TOKEN_PROGRAMS = {
LEGACY: TOKEN_PROGRAM_ID,
TOKEN_2022: TOKEN_2022_PROGRAM_ID
};
Voltr Client Configuration
const client = new VoltrClient(connection, wallet);
API Endpoints
const VOLTR_API = {
REMAINING_ACCOUNTS: "https://voltr.xyz/api/remaining-accounts"
};
Transaction Options
const TX_OPTIONS = {
skipPreflight: false,
preflightCommitment: "confirmed"
};
Implementation Examples
-
Full Deposit Flow
// 1. Get vault account
const vaultAccount = await client.fetchVaultAccount(vault);
// 2. Verify token program
const assetTokenProgram = await getTokenProgram(vaultAccount.asset.mint);
// 3. Get remaining accounts
const { remainingAccounts } = await fetchRemainingAccounts(vault, strategy);
// 4. Create and send transaction
const ix = await client.createDepositStrategyIx({...});
const signature = await sendAndConfirmTransaction(tx, [wallet]);
-
Position Value Check
// Get position and total values
const values = await client.getPositionAndTotalValuesForVault(vault);
console.log(`Total Value: ${values.totalValue}`);
values.positions.forEach(pos => {
console.log(`Strategy ${pos.strategy}: ${pos.value}`);
});
-
Withdrawal with Amount Validation
// Check available balance before withdrawal
const position = await client.getPositionValue(vault, strategy);
if (withdrawAmount.gt(position)) {
throw new Error("Insufficient balance in strategy");
}
const signature = await agent.voltrWithdrawStrategy(...);