Skip to content
  1. Home
  2. ERC Standards
  3. ERC Standards
  4. ERC-2535 Explained: The Diamond Standard for Modular, Upgradeable Platforms
ERC Standards

ERC-2535 Explained: The Diamond Standard for Modular, Upgradeable Platforms

ERC-2535 Diamonds route function calls to multiple facet contracts behind one address. Learn how they work, when a tokenization platform benefits, and the complexity trade-offs.

NUVZ Tokenization Team Updated 4 min read Technically reviewed

ERC-2535, the Diamond Standard, lets one contract address (the “diamond”) delegate each function selector to one of many implementation contracts called facets. Facets can be added, replaced or removed through a diamondCut operation, and loupe functions let anyone inspect which facet handles which function. It solves the 24 KB contract-size limit and enables highly modular, upgradeable systems — at the cost of significant complexity.

Key takeaways

  • One address, many facets — e.g. issuance, compliance, marketplace, distributions, admin.
  • diamondCut adds/replaces/removes selectors; DiamondCut events record every change.
  • Loupe functions (facets, facetFunctionSelectors, facetAddress) make the routing transparent.
  • Shared storage must be carefully namespaced (diamond storage / app storage patterns).
  • Best for large platforms; for a single token, a standard ERC-1967 proxy is simpler.

How a diamond works

  1. A call arrives at the diamond.
  2. The fallback function looks up the selector in a mapping to find the facet address.
  3. It delegatecalls the facet, which operates on the diamond’s storage.
  4. Governance can perform a diamondCut to change mappings.

When diamonds make sense for tokenization

  • Platform contracts combining issuance, order books, auctions, escrow, distributions and fee logic that would exceed size limits.
  • Feature evolution — adding secondary-market features after a primary-only launch without migrating state.
  • Shared state across modules — e.g. investor registry used by marketplace and distribution facets.
Not sure which token standard fits your asset?Share your asset, investor base and jurisdictions — we will recommend a standard, chain and compliance model in a free 30-minute session.
Chat with an expert

When to avoid them

  • Simple tokens — investors, custodians and venues prefer recognisable standard proxies.
  • Teams new to the pattern — storage mistakes in diamonds can be catastrophic.
  • Audit budgets — more moving parts mean more review time.

Governance and transparency

Every diamondCut can change behaviour, so apply the same safeguards as other upgradeable systems: multisig control, timelocks, published change logs, audits of each new facet and monitoring of DiamondCut events. Consider freezing critical facets (e.g. token balances) once stable.

Example facet layout for a tokenization marketplace

Facet Functions
DiamondCutFacet diamondCut (governed by multisig + timelock)
DiamondLoupeFacet facets, facetFunctionSelectors, facetAddresses, facetAddress
ListingFacet Create, update and cancel listings of asset tokens
OrderFacet Bids, RFQ responses, order matching
SettlementFacet DvP escrow, payment confirmation, release
DistributionFacet Income snapshots and claims
ComplianceFacet Eligibility checks against identity registries
AdminFacet Fees, pausing, role management

Storage patterns

  • Diamond storage: each facet keeps its own struct at a hashed storage position, avoiding collisions.
  • AppStorage: one shared struct used by all facets, simpler but requires discipline when appending fields.
  • Namespaced storage (ERC-7201): a standardised way to define storage namespaces, increasingly used in both diamonds and regular proxies.

Diamond cut example

// Adding a new facet with two functions (illustrative).
IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](1);
bytes4[] memory selectors = new bytes4[](2);
selectors[0] = RfqFacet.requestQuote.selector;
selectors[1] = RfqFacet.respondQuote.selector;
cut[0] = IDiamondCut.FacetCut({facetAddress: address(rfqFacet), action: IDiamondCut.FacetCutAction.Add, functionSelectors: selectors});
IDiamondCut(diamond).diamondCut(cut, address(0), "");

Frequently asked questions

It removes the contract-size limit for large systems and allows fine-grained, modular upgrades behind a single address.

Yes. Auditors must review each facet, storage layout and the upgrade process.

It can, but most token holders, explorers and integrators expect standard tokens behind simple proxies. We generally keep tokens simple and use diamonds for platform logic.

Through loupe functions and verified facet source code on explorers.

Yes. Facets are stateless logic contracts, so several diamonds can reuse them.

Not directly — explorers and tools need diamond-aware support (loupe functions) to display all facets.

Written by the NUVZ Tokenization Team

NUVZ is the RWA and Web3 engineering brand of ESS ENN Associates (est. 1993). Our team has designed and shipped tokenization platforms for real estate, education loans, solar PPAs, energy, carbon credits, bank deposits and trade documents. About us · Case studies

This article is for general information only and is not legal, tax or investment advice. Token standards evolve — always confirm the current status of an ERC at eips.ethereum.org and take advice from qualified counsel in each jurisdiction before issuing tokens.

Keep reading

Related guides

All insights →

Get Expert Advice on Your Token Design

Questions about this standard or your own tokenization use case? Send us a note. A NUVZ engineer will reply within one business day.

Prefer a call? Pick a 30-minute slot with our team.

Book a 30-min expert call
  • Mutual NDA available before you share details
  • Reply within one business day
  • Your data is used only to answer your enquiry

Protected against spam. We never sell or share your data with third parties for marketing.

Chat with our experts