Diamond Standard (EIP-2535)
MORE Vaults treats each vault as a Diamond proxy: a single address that delegates calls to a bundle of plug-and-play modules called facets.
Cut – add / replace / remove selectors
DiamondCutFacet
exposes diamondCut
, the one authoritative entry point for upgrading logic.
Loupe – introspection
DiamondLoupeFacet
returns the facet-selector map so UIs and auditors can verify what code is live on-chain.
Initialization slot – guard against double init
Every facet inherits BaseFacetInitializer
, which stores an _initialized
flag in a fixed slot and reverts on re-entry.
Why this matters:
Modularity without proxy sprawl: a single ERC-20 share contract can absorb new strategies or fee logic over time.
Audit friendliness: facets are small, self-contained, and version-tagged; diffing two upgrades is a selector-level exercise.
Gas savings: users pay for one deployment (the diamond) instead of N proxies per strategy.
Last updated