Contracts
tip
Looking for a practical guide to run nodes? Follow the Curated Module v2 guide or the CSM guide.
CMv2 and CSM run on the same CSM v3 codebase, so most contracts below are deployed once per module from the same source. Each page lists the deployed address for every module that uses it.
Six contracts are specific to one module: the module contract and its entry gate differ, and MetaRegistry exists only in CMv2. Deployed addresses for every network are listed under Deployed Contracts.
Module
The core contract that stores Node Operators, validator keys, and deposit data, and talks to the Staking Router.
| Contract | Applies to | What it does |
|---|---|---|
CuratedModule | CMv2 only | Core module contract. Stores operators and deposit data, and allocates stake by operator weight |
CSModule | CSM only | Core module contract. Stores operators and deposit data, and allocates stake through the deposit queue |
Entry gates
How an address becomes a Node Operator. Each module has its own gate, and the factory that deploys them is shared.
| Contract | Applies to | What it does |
|---|---|---|
CuratedGate | CMv2 only | Lets an address in the gate's Merkle tree create a Node Operator of the gate's type |
PermissionlessGate | CSM only | Lets anyone register as a Node Operator |
VettedGate | CSM only | Lets addresses in the gate's Merkle tree register with a better bond curve, used for ICS and IDVTC |
MerkleGateFactory | Both | Deploys and initializes Merkle-based gate instances behind a proxy |
Bond and rewards
| Contract | Applies to | What it does |
|---|---|---|
Accounting | Both | Holds the bond as stETH shares and manages required bond, rewards, penalties, and charges |
FeeDistributor | Both | Holds reward shares while unallocated or claimable, and stores the rewards Merkle tree |
Configuration
| Contract | Applies to | What it does |
|---|---|---|
ParametersRegistry | Both | Stores per-Node-Operator-type parameters such as key limits, reward shares, and penalty amounts |
MetaRegistry | CMv2 only | Stores operator names and descriptions, and the operator groups and weights that drive stake allocation |
Exits and penalties
| Contract | Applies to | What it does |
|---|---|---|
ValidatorStrikes | Both | Stores strike data reported by the Performance Oracle and can trigger ejection |
ExitPenalties | Both | Records exit-related penalties and charges per validator |
Ejector | Both | Triggers validator withdrawals through EIP-7002 |
Oracles and proofs
| Contract | Applies to | What it does |
|---|---|---|
FeeOracle | Both | Processes the Performance Oracle report once consensus is reached |
Verifier | Both | Validates Consensus Layer proofs against the beacon block root and reports the verified facts |