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.

Diamond concept
MORE implementation

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