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
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_operations - Safe 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