Best Practices
Access Control and Authorization
Role-Based Access Control
Clear separation between admin and manager roles in the vault
Strict validation of admin and manager signatures for privileged operations
Manager-only access for strategy operations like deposits and withdrawals
Admin-only access for strategy addition and removal
PDA Authorization
Utilization of Program Derived Addresses (PDAs) for critical vault components:
vault_asset_idle_auth
- Controls idle assetsvault_lp_mint_auth
- Controls LP token mintingvault_lp_fee_auth
- Controls fee collection
PDAs are derived using unique seeds tied to the vault's public key
All PDA seeds are properly validated in each instruction
Asset Safety
Vault Asset Management
Strict accounting of total assets across idle and deployed positions
Validation of asset mint addresses and associated token accounts
Atomic transaction handling for deposits and withdrawals
Maximum cap enforcement to prevent overflow risks
Strategy Integration
Strict validation of strategy accounts and their ownership
Proper handling of counterparty asset token accounts
Validation of protocol program addresses
Clear separation between different strategy types (Kamino, Drift, Marginfi, Solend)
Mathematical Safety
Comprehensive overflow checks using
checked_
operationsSafe decimal handling for token amounts and exchange rates
Proper scaling of values when converting between different decimal bases
Explicit error handling for mathematical operations
Token Security
Token Account Validation
Strict validation of token program addresses
Verification of token mint addresses
Proper authority checks for token operations
Support for both Token and Token-2022 programs
LP Token Management
Secure minting controls through PDA-based mint authority
Proper calculation of LP token amounts based on deposits
Safe handling of LP token burns during withdrawals
Proper tracking of total supply
Fee Handling
Performance Fee Security
Safe calculation of performance fees using proper decimal handling
Atomic execution of fee collection
Proper PDA-based authorization for fee collection
Validation of fee parameters within acceptable ranges
Protocol Integration Security
Adaptor Pattern
Clear separation between vault and protocol interactions through adaptors
Proper validation of protocol-specific accounts
Safe handling of protocol-specific state updates
Proper error propagation from protocol operations
Cross-Program Invocation (CPI) Safety
Proper signature validation for CPI calls
Careful handling of remaining accounts
Validation of program IDs for external calls
Proper error handling for CPI failures
Error Handling
Custom Error Types
Comprehensive error definitions in both vault and adaptor
Clear error messages for debugging
Proper error propagation across program boundaries
Custom error codes for specific failure scenarios
State Management
Account Data Safety
Proper initialization of all account fields
Safe updates to account state
Atomic state transitions
Proper closing of accounts when needed
Data Validation
Input parameter validation
Account size validation
Proper handling of optional fields
Safe deserialization of account data
Last updated