Multi-Strategy Vaults
Overview
Multi-Strategy Vaults in Octant v2 enable Dragons to diversify yield generation across multiple strategies while maintaining a single vault share token. Think of it as a fund-of-funds structure where your vault intelligently allocates capital across different DeFi strategies.
The Multi-Strategy Vault works with a multi-tiered ERC-4626 vault structure. It holds an underlying asset (e.g., USDC) and dynamically allocates it to different strategies by depositing into their ERC-4626 vaults and receiving their shares in return.
How Multi-Strategy Vaults Work
The Capital Flow
User deposits USDC → Multi-Strategy Vault issues shares
                          ↓
         Vault allocates USDC to multiple strategies
         ↓                    ↓                    ↓
    Strategy A          Strategy B          Strategy C
    (e.g., Aave)       (e.g., Yearn)      (e.g., Spark)
The vault maintains:
- Idle funds: Unallocated capital ready for withdrawals
- Strategy allocations: Capital deployed to each strategy (tracked as "debt")
- Queue system: Ordered list for withdrawals and auto-allocations
Core Concepts
1. Strategy Queue
The vault uses a withdrawal queue (max 10 strategies) that determines:
- Order for pulling funds during withdrawals.
- Default allocation target for auto-deposits.
- Priority for rebalancing operations.
2. Debt Management
"Debt" represents capital allocated to a strategy:
- Current Debt: Actual amount allocated.
- Max Debt: Upper limit per strategy.
- Each strategy tracks its performance independently.
3. Rebalancing Mechanism
Rebalancing happens through the updateDebt() function:
- Increasing allocation: Transfers idle funds to strategy.
- Decreasing allocation: Withdraws from strategy to idle.
- Loss tolerance: Configurable maximum acceptable loss during rebalancing.
Configuration Steps
Step 1: Deploy Your Multi-Strategy Vault
// Deploy through MultistrategyVaultFactory.sol
function deployNewVault(
        address asset,
        string memory _name,
        string memory symbol,
        address roleManager,
        uint256 profitMaxUnlockTime
    ) external returns (address);
Step 2: Add Strategies
// Add strategy to vault and optionally to default queue
function addStrategy(address newStrategy_, bool addToQueue_) external;
Step 3: Set Allocation Limits
// Set maximum allocation per strategy
function updateMaxDebtForStrategy(address strategy_, uint256 newMaxDebt_) external;
Step 4: Configure Auto-Allocation (Optional)
// Enable automatic allocation to first queue strategy
function setAutoAllocate(bool autoAllocate_) external;
// Set custom withdrawal queue order
function setDefaultQueue(address[] calldata newDefaultQueue_);
Step 5: Execute Rebalancing
// Rebalance the debt of a strategy, either by withdrawing funds or depositing new funds
function updateDebt(
        address strategy_,
        uint256 targetDebt_,
        uint256 maxLoss_
    ) external nonReentrant returns (uint256);
Rebalancing Strategies
The following examples illustrate different vault configurations and protocol integrations. These represent technical implementations, not recommendations, and each treasury must evaluate configurations based on its specific requirements and risk parameters.
Example Configuration A: Balanced
- Keep 20-30% in idle for liquidity.
- Spread allocations across 3-5 proven strategies.
- Set tight loss tolerances (0.5-1%).
Example Configuration B: Concentrated
- Minimize idle funds (<5%).
- Concentrate in 2-3 high-yield strategies.
- Accept higher loss tolerances for rebalancing flexibility.
Example Configuration C: Dynamic
Monitor and adjust based on:
- Yield changes: Move to higher-performing strategies.
- Risk events: Quickly reduce exposure to troubled protocols.
- Gas costs: Batch rebalancing operations to minimize costs.
Example Configurations
1. Balanced Public Goods Vault
40% Yield-Donating Aave Strategy → Dragon Router
30% Yield-Donating Compound → Dragon Router
20% Standard Yearn Strategy → Compounds
10% Idle for liquidity
2. High-Yield Vault
45% High-yield Strategy A
45% High-yield Strategy B
10% Idle buffer
Auto-allocation enabled
Daily rebalancing based on APY
3. Highly Liquid Treasury
30% Stable yield strategy
30% Low-risk lending
40% Idle for immediate liquidity
Quarterly rebalancing only
Important Considerations
Withdrawal Mechanics
- Withdrawals pull from idle first.
- Then from strategies in queue order.
- Losses are socialized across all shareholders.
- Consider MEV protection for large withdrawals.
Emergency Controls
- Emergency admin can shutdown vault.
- Force revoke removes strategy even with losses.
- Implement monitoring for strategy health.
Gas Optimization
- Batch operations when possible.
- Use auto-allocation for regular deposits.
- Set appropriate minimum deposit limits.
Practical Implementation Steps
- Test on testnet with small amounts first.
- Set up monitoring for strategy performance.
- Establish rebalancing schedule (daily/weekly/event-driven).
- Configure access controls with multi-sig.
- Document strategy selection criteria for governance.