Strategies Initialization
Voltr Protocol - Strategy Integration Guide
This guide explains how to add adaptors and initialize strategies in the Voltr Protocol. It covers the process of adding adaptors to vaults and managing strategy lifecycles.
Setup
Import the required dependencies:
import { BN } from "@coral-xyz/anchor";
import { VoltrClient, SEEDS, DEFAULT_ADAPTOR_PROGRAM_ID} from "@voltr/vault-sdk";
import {
Connection,
Keypair,
PublicKey,
sendAndConfirmTransaction,
} from "@solana/web3.js";
Vault owners can integrate with the default adaptor or custom adaptors created by DeFi teams.
Adding Adaptor
Define Required Variables:
// File paths for keypairs
const adminFilePath = "/path/to/admin.json";
// Network and asset configuration
const assetMintAddress = "..."; // Your asset token mint
const solanaRpcUrl = "your-solana-rpc-url";
// Load keypairs
const adminKp = Keypair.fromSecretKey(
Uint8Array.from(JSON.parse(fs.readFileSync(adminFilePath, "utf-8")))
);
// Reference your vault
const vault = new PublicKey("previously-initialized-vault");
// Initialize client
const connection = new Connection(solanaRpcUrl);
const client = new VoltrClient(connection);
Create Add Adaptor Instruction:
const createAddAdaptorIx = await client.createAddAdaptorIx({
vault,
admin: adminKp.publicKey,
payer: adminKp.publicKey,
});
Send and Confirm Instruction:
const txSig = await sendAndConfirmTransaction(
[createAddAdaptorIx],
connection,
[adminKp]
);
Initializing Strategies
Derive Strategy Address:
// the counterParty's token account the vault will be transferring to
const counterPartyTa = new PublicKey("...");
const [strategy] = PublicKey.findProgramAddressSync(
[SEEDS.STRATEGY, counterPartyTa.toBuffer()],
DEFAULT_ADAPTOR_PROGRAM_ID
);
Create Strategy Initialization Instruction:
const createInitializeStrategyIx = await client.createInitializeStrategyIx(
{}, // Optional initialization args
{
payer,
vault,
manager: payer,
strategy,
remainingAccounts: [
// Protocol-specific accounts required for initialization
{ pubkey: protocolProgram, isSigner: false, isWritable: false },
// Additional required accounts...
],
}
);
Send and Confirm Transaction:
const txSig = await sendAndConfirmTransaction(
[createInitializeStrategyIx],
connection,
[adminKp]
);
Required Account Structure
The strategy initialization requires several key accounts:
Core Accounts:
payer
: Account paying for the transactionvault
: The initialized vaultmanager
: Vault manager authoritystrategy
: Derived strategy PDAprotocolProgram
: Target protocol program ID
Protocol-Specific Accounts:
Protocol program account
Any required protocol state accounts
Token accounts and authorities
System accounts (RENT, etc.)
Best Practices
Strategy Selection:
Choose strategies that match your vault's risk profile
Understand the underlying protocol's mechanisms
Verify strategy program compatibility
Risk Management:
Start with small deposits to test strategy
Monitor strategy performance regularly
Have a withdrawal plan for emergencies
Security:
Keep admin keys secure
Test on devnet first
Verify all account permissions
Double-check program IDs
Operations:
Always check strategy balance before removal
Maintain accurate records of deployed assets
Monitor gas costs for operations
Troubleshooting
Strategy Creation Fails:
Verify admin authority
Check counterparty token account exists
Ensure protocol program ID is correct
Strategy Addition Fails:
Verify vault admin authority
Check strategy account exists
Ensure adaptor program matches
Strategy Removal Fails:
Verify strategy has zero balance
Check admin authority
Ensure all funds are withdrawn
Initialization Fails:
Check account permissions
Verify rent exemption
Validate program IDs
For additional support or questions, refer to the Voltr SDK documentation or example scripts.
Last updated