SubvaultModule
Purpose​
The SubvaultModule represents an isolated child vault within a modular vault system. It is tightly controlled by its parent vault (typically a VaultModule) and is responsible for securely holding and releasing assets upon authenticated requests.
Responsibilities​
- Store and isolate a portion of vault assets.
- Allow trusted actor (curator) to delegate liquidity from the subvault to external protocols based on the
Verifiersetup for this specific subvault. - Respond to
pullAssetscalls from the parent vault only.
Storage Layout (SubvaultModuleStorage)​
struct SubvaultModuleStorage {
address vault;
}
vault: Address of the root vault that controls this subvault. Only this address can request asset withdrawals.
The layout is stored in a deterministic custom slot derived using:
SlotLibrary.getSlot("SubvaultModule", name_, version_)
View Functions​
vault() -> address​
Returns the address of the parent vault that instantiated this subvault.
Mutable Functions​
pullAssets(asset: address, value: uint256)​
Allows the parent vault to withdraw a specified amount of an asset.
- Access control: Can only be called by the
vault()address. - Reverts with
NotVault()if the caller is not the vault. - Transfer behavior: Uses
TransferLibrary.sendAssets()to forward tokens or native ETH to theVault.soladdress. - Emits
AssetsPulled(asset, vault, value).
Internal Initialization​
__SubvaultModule_init(address vault_)​
Internal setup method to be called during construction or proxy initialization.
Events​
event AssetsPulled(address indexed asset, address indexed to, uint256 value)​
Triggered when assets are withdrawn by the parent vault.
asset: Address of the ERC20 token or native ETH.to: Always equals thevault()address.value: Amount of the asset transferred.
Error Handling​
NotVault(): Raised when a non-vault caller attempts to callpullAssets().