In user-facing documentation, a MultiVehicle is referred to as a Strategy. See Glossary.
Architecture overview
A Multi-Vehicle is composed of 6 interconnected components: The MultiVehicle exposes onlymanager(). Every engine is reached through the VehicleManager:
Solidity
The 6 components
1. MultiVehicle (main contract)
The STEAM-compliant entry point that users interact with directly. User operations:- Deposit assets — receive Multi-Vehicle shares
- Redeem shares — receive base assets back
- User-facing STEAM operations (
create,resume,unlock,recover) - Share minting and burning using ERC-4626-style exchange rates
- Integration with QueryRedeemQueue for asynchronous redemptions
2. SectorAccountingEngine
The central accounting system implementing double-entry bookkeeping principles. Every asset movement is recorded as a transfer between sectors, ensuring the total supply of accounted assets remains constant.RESERVED is asset-only and reachable only through an explicit move, so neither auto-fulfill nor the Queue Strategy Engine can consume liquidity parked there.
3. QueueStrategyEngine
Defines the allocation strategy through configurable priority queues. The asset manager sets up deposit and redeem queues that control how capital is distributed.Deposit queue
A prioritized list of{vehicle, target} pairs:
- Processes in order (index 0 = highest priority)
target= maximum shares to allocate to a vehicle before moving to the next entry- Stops when the vehicle reaches its target, hits
maxDepositable, or assets are exhausted
The deposit queue does not enforce ongoing ratios. If a vehicle grows past its target from yield alone, new deposits skip it and go to the next queue entry.
Redeem queue
A prioritized list of{vehicle, target} pairs where target represents a floor (minimum shares to maintain):
- Processes in order (index 0 = highest priority)
- Redeems from a vehicle down to its floor
- Moves to the next entry if more assets are needed
4. SubQueryEngine
Manages the STEAM query lifecycle for operations dispatched to sub-vehicles. It tracks ephemeral accounting to prevent share price distortion during asynchronous operations. Ephemeral accounting ensures thattotalAssets() remains accurate even when assets are in-flight:
- When a sub-query enters PROCESSING, the system uses the vehicle’s
estimate()function to record expected outputs - As actual shares are received on settlement, the ephemeral estimate is replaced with real values
- This prevents spikes or drops in the Multi-Vehicle’s share price during async settlements
5. QueryRedeemQueue
Handles asynchronous redemptions when immediate liquidity is insufficient:- Demands — user redemption requests created by
demand(amountIn, maxAmountOut). Each demand records the shares owed, carries a slippage ceiling, and is assigned a 1-indexed id. - Fulfillments — liquidity provisions created by
fulfill(amountInFilled, amountOutProvided), driven by a keeper or operator callingfeedQueryRedeemQueueon the Vehicle Manager. Assets are distributed pro-rata over the demand/fulfillment position overlap. - Partial fills — a single demand can be filled across multiple rounds.
redeemis callable repeatedly as new fulfillments arrive, andpending(demandId)reports what is still owed. - Claiming — once a demand is redeemable, the holder calls
redeem(demandId), which returns(redeemedAssets, remainingShares)and transfers the base assets. Checkredeemable(demandId)first; the call reverts if the demand is not yet redeemable or if the assets would exceed the demand’smaxAmountOut. - Excess — assets left over when fulfillments over-provide accumulate as
retrievable(), pulled back by the Vehicle Manager viaretrieveQueryRedeemQueueAssets.
6. VehicleManager
The control plane for sub-vehicles and the contract the MultiVehicle points at. Every vehicle must be authorized here before it can receive capital. Key responsibilities:- Validate vehicle compatibility (a contract,
ready(), matching base asset) - Store per-vehicle configuration:
VehicleConfig { VehicleMode mode; Target cap; } - Hold the wiring to the engines and the redeem queue (
accountingEngine(),queueStrategyEngine(),subQueryEngine(),redeemQueue()) - Own the strategy-level knobs:
setThresholds,setMaxTotalAssets,feedQueryRedeemQueue,retrieveQueryRedeemQueueAssets - Enforce role-based access for authorization changes
The role of the asset manager
The asset manager configures and operates the Multi-Vehicle. Beyond setting initial parameters, they have four active levers.Rebalance capital
There is norebalance function. The asset manager composes one from dispatch and move, reusing a single operationId so off-chain consumers can group the steps:
PROCESSING: the redemption must settle before the assets exist in AVAILABLE, so steps 2 and 3 run in a later transaction.
Manage sub-vehicles
Add or remove yield sources at any time:Reconfigure queues
Update allocation priorities without moving capital:Feed redemption liquidity
When async redemptions are pending in the QueryRedeemQueue, feed liquidity to fulfill demands:Authorization and guardrails
Every sub-vehicle must be explicitly authorized on the VehicleManager before it can receive capital. Authorization validates that the vehicle is a contract, reportsready(), and uses the same base asset as the Multi-Vehicle.
Vehicle configuration
Each authorized vehicle has a configuration with two parameters:On-chain guardrails
Authorization and caps create enforceable boundaries:- Queue configuration cannot route capital to unauthorized vehicles
- Allocation caps limit exposure regardless of queue targets or manual moves
- Role-based access (via EAC) controls who can authorize vehicles, set caps, and reconfigure queues — allowing platforms commissioning a strategy to set guardrails that asset managers cannot override
Sync and async sub-vehicles
Multi-Vehicle orchestrates both synchronous and asynchronous sub-vehicles. Synchronous sub-vehicles (Aave V3, Morpho Blue, ERC-4626) complete in a single transaction:- Sub-queries remain in PROCESSING until the underlying protocol is ready
- Ephemeral accounting tracks expected outputs to prevent share price distortion
- The Keeper system automates monitoring and advancing nested operations
- Operators should watch vehicle sector balances for high amounts indicating slow settlement
Design principles
- Separation of concerns — Each component has a single, well-defined responsibility
- Double-entry accounting — All asset movements are tracked through sector transfers
- Asynchronous by design — STEAM handles both sync and async operations gracefully
- Queue-based strategy — Flexible, operator-controlled allocation and redemption logic
- Accurate pricing — Ephemeral accounting ensures share price accuracy during in-flight operations