- Whether the asset is authorized for use
- The initial deposit amount the factory should pull and burn during deployment
initialDepositSize in their SpawnParams — the registry is the source of truth. A caller with FACTORY_SPAWN cannot deploy through them for an unauthorized asset, and cannot override the initial deposit amount set by the registry admin. ERC7540VehicleFactory is the exception: it is not wired to a registry and still takes initialDepositSize in its SpawnParams.
What it stores
Each asset has anAssetConfig:
Why the initial deposit size matters
Vehicles wrap underlying yield protocols (Aave V3, Morpho Blue, ERC-4626 vaults), creating two independent layers of integer share math. Each layer rounds in the protocol’s favor (floor on deposit, ceil on withdraw), and because the Vehicle’s share math and the underlying protocol’s share math round independently, per-operation dust accumulates non-deterministically on the Vehicle’s balance. Two outcomes per operation:- Erosion — the underlying protocol rounds harder against the Vehicle than the Vehicle rounds against the user. The Vehicle ends up with slightly less underlying value, dragging the share price down for all holders.
- Accretion — the Vehicle rounds harder against the user. The Vehicle retains extra dust, lifting the share price.
totalAssets. The shares minted from the initial deposit are burned to a permanent burn address, so the underlying buffer stays in the Vehicle forever, absorbing rounding losses without affecting any real user.
Authorization
Managing registry entries requires theASSET_REGISTRY_SET_ASSET role.
setAssetConfig(asset, isAuthorized, initialDepositAmount) is the only writer. Authorizing an asset requires a non-zero initialDepositAmount, otherwise the call reverts with InvalidInitialDepositSize; deauthorizing forces the stored amount back to 0. Every write emits AssetConfigSet(asset, isAuthorized, initialDepositAmount).
When a factory is asked to spawn for an unauthorized asset, it reverts with AssetNotAuthorized(address) from FactoryLib. Constructing a factory with a zero or non-contract registry address reverts with InvalidAssetRegistry.
Deploy and configure
The registry is typically deployed once per environment, pre-populated with the assets you expect to support.How factories use the registry
TheAaveV3, ERC4626, Ethena, MorphoBlue, MultiVehicle, Wrapper, and Conduit factories each hold an immutable ASSET_REGISTRY pointer set at construction, announced with the AssetRegistryInitialized event. On spawn:
- The factory reads
getInitialDepositAmount(asset)— reverts if the asset is not authorized.ConduitFactoryuses the underlying Vehicle’sasset(). - It pulls that amount from the caller and performs the initial deposit into the new Vehicle or Conduit.
- It transfers the resulting shares to the burn address (
0x…dEaD), permanently locking the deposit.
Next steps
Create a Conduit
Factory flow that reads the registry at spawn time.
Create an Allocation Strategy
Walk through a MultiVehicle deployment end-to-end.