In user-facing documentation, a MultiVehicle is referred to as a Strategy. See Glossary.
Why sector-based accounting
In a multi-protocol environment, assets are rarely static. They move between being idle in the vault, committed to a deposit query, held as shares in a sub-vehicle, or queued for redemption. Traditional balance-based accounting struggles to track these “in-flight” assets, leading to potential double-counting or inaccurate share pricing. Multi-Vehicle solves this by partitioning assets into logical sectors that represent their current operational state. This allows the protocol to:- Track the exact lifecycle stage of every asset
- Handle asynchronous settlements without losing track of value
- Provide an accurate
totalAssets()calculation at any point in time
The double-entry principle
Every movement of assets within the system has an explicit source and destination sector. The SectorAccountingEngine:- Decrements the balance of the source sector
- Increments the balance of the destination sector
- Emits a
SectorTransferevent for a clear audit trail
Core sectors
RESERVED exists so that you can park liquidity neither the auto-fulfill path nor the QueueStrategyEngine can consume: both spend against withdrawable(), which reads only AVAILABLE, so a parked balance is invisible to them while still counting towards totalAssets(). Nothing reaches RESERVED implicitly — you must move assets in explicitly (AVAILABLE → RESERVED to park, RESERVED → AVAILABLE to unpark), or route a redeem’s settledDestination there.
Dynamic sectors
Beyond the core sectors, the system creates dynamic sectors for per-vehicle operations:Deposit flow
Assets flowing from users into sub-vehicles follow this path:1
Asset reception
The user deposits base assets into the Multi-Vehicle. Assets transfer from ENTRY (virtual) to the AVAILABLE sector.
2
Allocation decision
The QueueStrategyEngine processes the deposit queue and determines which sub-vehicle receives the assets.
3
Staging
Assets move from AVAILABLE into the target vehicle’s own sector,
SectorLib.toSector(vehicle), where they wait for a query to be created.4
Query dispatch
dispatch creates the STEAM query and sends the assets to the sub-vehicle, so they leave the vehicle sector and the accounting system in one step. Ephemeral accounting estimates the expected shares to keep totalAssets accurate during this gap.5
Settlement
When the sub-vehicle query settles (sync or async), shares enter the accounting system.
ENTRY → ALLOCATION (virtual). Ephemeral estimates are replaced with actual values.Between steps 4 and 5, assets exist outside the Multi-Vehicle’s accounting system (they are held by the sub-vehicle). Ephemeral accounting tracks their estimated value during this gap to keep
totalAssets() and share price accurate.Redeem flow
Assets flowing from sub-vehicles back to users follow the reverse path:1
Unallocation decision
The QueueStrategyEngine processes the redeem queue and determines which sub-vehicle to unallocate from.
ALLOCATION → vehicle sector.2
Query dispatch
dispatch creates a STEAM redeem query and sends the shares to the sub-vehicle, so they leave the vehicle sector and the accounting system. Ephemeral accounting estimates the expected base assets to keep totalAssets accurate.3
Settlement
Base assets arrive from the sub-vehicle and land in the query’s
settledDestination — AVAILABLE by default, though you can route them to RESERVED or to another vehicle’s sector instead. Ephemeral estimates are replaced with actual values.4
Asset return
The user withdraws their base assets.
AVAILABLE → EXIT.Example: deposit cycle walkthrough
Step-by-step sector balances through a 50k deposit
Step-by-step sector balances through a 50k deposit
A Multi-Vehicle starts with 100k in total assets. A user deposits 50k, which is allocated to an Aave sub-vehicle.
Key insight:
totalAssets stays at ~150k through every step. At T2 the 50k is still accounted for, just staged in the vehicle sector. At T3 it has left the system entirely and the shares have not arrived yet (ENTRY → ALLOCATION has not happened); ephemeral accounting bridges this gap by estimating the expected share value.Asynchronous redemptions
When immediate liquidity is insufficient, the QueryRedeemQueue handles fulfillment over time:- User requests a redemption that exceeds available liquidity
- A demand is created in the QueryRedeemQueue for the unfulfilled portion
- A keeper or operator provides liquidity by calling
feedQueryRedeemQueueon the VehicleManager, which spendswithdrawable()(the AVAILABLE balance) - FIFO position-based matching pairs demands with fulfillments as liquidity arrives
- The user receives assets (full or partial) as liquidity becomes available
Ephemeral accounting
One of the most critical challenges in async asset management is accounting for value that has been committed but not yet received. When a deposit to a sub-vehicle is PROCESSING, the Multi-Vehicle no longer has the base assets, but it does not yet have the shares. The SubQueryEngine manages ephemeral accounting to bridge this gap:- Without ephemeral accounting
- With ephemeral accounting
estimate() function to determine the expected output. This estimated value is tracked as ephemeral accounting against the query’s settledDestination. On settlement, shares enter the system (ENTRY → ALLOCATION) and the ephemeral estimation is replaced with actual values.
Exchange rate and share price
Multi-Vehicle uses the ERC-4626 standard for pricing:totalAssets() function aggregates value across all sectors:
withdrawable() is deliberately narrower: it reports only the AVAILABLE balance. RESERVED, vehicle-sector residuals and ALLOCATION shares are never counted as immediate liquidity, because reaching them requires an explicit move or dispatch.
Monitoring
Operators should track these key metrics:Sector balances
Sector balances
- AVAILABLE — Idle base-asset liquidity, and everything
withdrawable()reports - RESERVED — Earmarked base assets, excluded from
withdrawable() - ALLOCATION — Total deployed capital, held as sub-vehicle shares
- Vehicle sectors — Assets and shares staged for the next query
- Ephemeral — Value in flight for PROCESSING queries
Queue health
Queue health
- Demand — Total pending redemptions in the QueryRedeemQueue
- Fulfillment — Available liquidity for matching
- Average wait time — User experience metric
Vehicle health
Vehicle health
- Per-vehicle — totalAssets, share price, query states
- Distribution — Actual vs target allocations across sub-vehicles
Next steps
Multi-Vehicle architecture
How Multi-Vehicle orchestrates capital across sub-vehicles.
The STEAM standard
The state machine interface that drives all deposit and redeem queries.
Create an Allocation Strategy
Deploy an Allocation Strategy (MultiVehicle) ecosystem.
Operate an Allocation Strategy
Day-to-day operations including queue management and rebalancing.