Core Facets
Each vault is a Diamond whose behaviour is the sum of its facets. The protocol ships a "minimum viable bundle" that covers custody, accounting, governance, and upgrade plumbing. Strategists can add more facets, but may not remove these core ones.
VaultFacet (Custody & ERC-4626)
Handles deposits, withdrawals, share issuance, and asset accounting. It enforces per-deposit hooks such as slippage checks and liquidity caps, ensuring no strategy logic can bypass the vault’s accounting core.
ConfigurationFacet (Safety Rails)
Lets managers tune parameters (TVL caps, allowed assets, protocol-level fee bucket) inside bounded ranges and behind role checks, so risk settings evolve without redeployments. contract.
AccessControlFacet (Roles & Timelocks)
Stores OWNER
, CURATOR
, and GUARDIAN
roles in a single storage slot and exposes helpers to rotate them. Library modifiers consume those flags so all facets share the same authority model. contract.
DiamondCutFacet (Upgrade Lever)
The exclusive gateway to diamondCut
, enabling add / replace / remove of selectors. Factory admins can swap this facet out for a hardened version, or omit it entirely to create an immutable vault. contract.DiamondCutFacet
DiamondLoupeFacet (Introspection)
Surfaces facets()
, facetFunctionSelectors()
, and other reflection helpers so anyone can verify what code is live before trusting a vault. contract.DiamondLoupeFa…
MulticallFacet (Batching with Timelock)
Wraps arbitrary calls (including diamondCut
) in a two-phase submit/execute flow, forcing a protocol-wide delay and giving depositors time to respond. contract.MulticallFacet
BaseFacetInitializer (One-shot Init Guard)
Implements an _initialized
flag in a fixed storage slot so facets can run constructor-like logic exactly once, protecting against replay attacks during upgrades. abstract.BaseFacetIniti…
Take-away: A “boring” MORE Vault already ships with custody, configuration, governance, and upgrade semantics. Strategists only need to supply strategy-specific code.
Last updated