Subvault
Overview
The Subvault contract represents a modular, permissioned vault component designed to manage delegated asset strategies within a parent Vault. It enables curated logic for permissioned calls and asset management without exposing external deposit or redemption interfaces.
This contract combines callable and verifiable logic to serve as a secure, controlled execution unit within a system.
Inheritance Structure
contract Subvault is IFactoryEntity, CallModule, SubvaultModuleThe Subvault inherits:
CallModule: Enables arbitrary low-level calls to external contracts (used by curator of the vault), and verification through a verifier module.SubvaultModule: Handles vault linkage and liquidity handling.IFactoryEntity: Standard initialization interface for factory deployment compatibility.
The constructor explicitly calls:
VerifierModule(name_, version_)
SubvaultModule(name_, version_)This indicates that both modules rely on deterministic storage and versioned deployment identifiers via SlotLibrary.
Constructor
constructor(string memory name_, uint256 version_)Parameters:
name_: A unique string identifier for the deployment (e.g., “Mellow”).version_: A version number used to derive storage slots and allow upgradeable logic.
Behavior:
Passes the name_ and version_ arguments into the constructors of VerifierModule and SubvaultModule.
External Functions
initialize
initializeInitializes the subvault contract. This function can only be called once due to the initializer modifier.
Parameters:
initParams: ABI-encoded as(address verifier_, address vault_)
Initialization Steps:
Decodes
verifier_andvault_from the calldata.Calls
__VerifierModule_init(verifier_)to link the external verifier (used for strategy proof or access control).Calls
__SubvaultModule_init(vault_)to register this subvault with the parent vault.Emits the
Initialized(initParams)event for transparency.
Design Notes
Modular Strategy Execution: The
CallModuleenables arbitrary external calls, useful for delegating assets into other protocols or yield strategies.Trust-Minimized Calls: External strategy actions are gated via a
VerifierModule, which can enforce logic like off-chain signatures or time-based constraints.Parent Vault Registration: Initialization ensures the
vaultaddress is securely set once and governs access and lifecycle.Upgradeable Architecture: Follows the shared pattern of using deterministic storage slots (via
SlotLibrary) to remain safely upgradeable and composable.
Events
Initialized(bytes data)
Initialized(bytes data)Emitted once after a successful initialize call. Contains the raw ABI-encoded input for auditing or debugging.