What are the advantages of CSM over regular staking?
A small addition to the parameters proposal above:
Under the proposed migration plan, the Node Operators will leave a portion of their keys (~500 keys each) in CMv1 while migrating the rest to CMv2.
This is needed to keep stake distribution fair for all operators, regardless of when they are migrated. If some Node Operators were able to migrate all of their keys to CMv2, while others remained in CMv1 until later, earlier-migrated operators could end up in a more favorable position. By leaving a portion of keys in CMv1, withdrawal demand can continue to be fulfilled proportionally across all operators until the CMv1 module is fully emptied.
To keep the fee structure consistent across both modules simply operational flows, we propose reducing the Public Good Operator fee, formerly referred to as the Client Teams fee, in CMv1 from 4.5% to 4%, effective September 1. This is in-line with the 4% effective fee the PGO type will have in CMv2.
In light of the upcoming release of CMv2, Lido contributors have compiled all the parameters and key values to be used.
IPFS - https://ipfs.io/ipfs/bafybeibhlw3e6zy6xkbdmusky5i5v5rwcpxnjqws23jpmszzkp5xwzzppe
Most of the parameters were already posted in this thread or used for the previous releases. Still, we recommend reviewing the file and requesting clarifications, as this set of parameters is planned for use in the CMv2 release.
EDIT: IPFS link updated to include recent params.
Changed
- maxDepositsPerBlock = 150 // Up to 150 32 ETH initial deposits per single deposit TX
- minDepositBlockDistance = 25 // Minimal block distance between deposit TXs
+ maxDepositsPerBlock = 100 // Up to 100 32 ETH initial deposits per single deposit TX
+ minDepositBlockDistance = 75 // Minimal block distance between deposit TXs
...
#### Professional Operator
metaRegistryBondCurveWeight = 50000 // 0.5 of default 100_000
+ keysLimit = 80
to reflect the most recent security considerations from the analytical recearch.
Snapshot vote started
The LIP-33: CMv2 and CSMv3 Architecture, Key Parameters, Rollout Plan Snapshot has started! Please cast your votes before Mon, 22 Jun 2026 16:00:00 GMT ![]()
Snapshot vote ended
The LIP-33: CMv2 and CSMv3 Architecture, Key Parameters, Rollout Plan Snapshot has reached a quorum and completed successfully!
The results are:
For: 57.4M LDO
Against: 0 LDO
Winning option: For
Hi everyone!
The security audit of Lido Oracle V8 — the off-chain oracle upgrade supporting the Curated Module v2 rollout alongside Staking Router v3 — by Composable Security has been completed. All identified issues have been addressed or acknowledged.
The full report is available in the Lido audits repository:
Composable Security — Lido Oracle V8 Audit Report
Given the upcoming release of Curated Module v2, Lido contributors are happy to share the initial lists of the Curated Module v2 operator addresses by Node Operator types.
Professional Operator
There are no operators of this type as of the initial deployment.
gate.treeRoot = 0x1111111111111111111111111111111111111111111111111111111111111111; // Unusable root. Effectively means that the gate is disabled until the real root is set.
gate.treeCid = "QmU4cnyaKWgMVCZVLiuQaqu6yGXahjzi4F1Vcnq2SXBBmT"; // Points to the "null" json file
Professional Trusted Operator
Stakin by The Tie,0xd9faE181C6BD5b4CD361b0F08926226a3af274Db
Simply Staking,0x4fbefaf1bff0130945c61603b97d38dd6e21f5cf
HashKey Cloud,0xEd95f777FDF439f2bea0B26ed4e37b95a851d131
Kukis Global,0x8845D7F2Bbfe82249c3B95e378A6eD039Dd953F5
RockawayX Infra,0xca6817dab36850d58375a10c78703ce49d41d25a
Blockscape,0x3831dc257b7b0b507c8aEBfBf94B8E82E5092311
MAVAN,0x35921FB43cB92F5Bfef7cBA1e97Eb5A21Fc2d353
RockLogic GmbH,0x765c6a8f20c842E8C826B0D9425015784F982aFc
Ebunker,0x944849824A88ffeA23eF7e53b8A6793D88CE7581
Gateway.FM,0x78CEE97C23560279909c0215e084dB293F036774
Senseinode Inc,0xE556Da28015c04F35A52B3111B9F4120E908056e
Everstake,0x51Ff4971FA1D7a194f49A7b3401330ADD94E0B56
InfStones,0x60bc65e1cca448f98578f8d9f9ab64c3ba70a4c3
Stakely,0x6d1d325bE40726Ef8c88F009b62d2135d9b38b11
ParaFi Technologies LLC,0x5Ee590eFfdf9456d5666002fBa05fbA8C3752CB7
RockX,0xFf16Cf8020B01F6032d63347520CEfde4be02C61
P2P.org,0x1126EBBDd9f2A9B3a1F1D48A74cDF4e67B80C262
DSRV,0x904A289145b1FE0B672682db895bAde2EB186126
Launchnodes,0x5a8B929EDBf3CE44526465DD2087EC7EFB59A561
Chainlayer,0xd80a8ce1Cb03d2a548b0B5D0AEA6F35EFd91638F
Allnodes,0xd8d93E91EA5F24D0E2a328BC242055D40f00bE1A
Solstice,0xb79C6146b0165eB25Fa33A796FB3bF3916254c67
Blockdaemon,0x3Dc3d9Be47ef787ff0CdD9C2a6650A1598D4c267
Staking Facilities,0x6fA0f36A24Cdb9cE4aeCc74DC86084c0c5dad8c6
Figment,0xB6F5E41acb99D57F07e3A5B2D2Ba3662bbaf31D2
Galaxy,0x349a332e45c4f48D806a380c45dfF93b0f5EA40d
stakefish,0x29c9829FE8C80D74515D69F8438BE2Fd97C70838
gate.treeRoot = 0x2be2e6ef3183615954ff2eef0a1425133132db440efa6c2b6162906d92057a97;
gate.treeCid = "bafkreidgr4wofdx5x2efyianenyi3ldq5hxareq6ydj6pjoolpu3izqq2u";
Public Good Operator
Develp,0x208e16012C0D774703cAA93f00F59A2d4a31689a
Consensys,0xF45C77EadD434612fCD93db978B3E36B0D58eC99
Attestant (BVI) Limited,0xcd51df5142156BD92E7A9494Dd2b9362f5078D64
ChainSafe Systems,0x29d5a9917A82Dbb77e3362128C425d3a63eE8E6F
Twinstake,0xC6AACba3a2dF56169aaA93c2947BF7Cea346fDA5
Prysm Team / Offchain Labs,0x09858D581F8F5CE13C164A83BFE84fD2a6A36CA0
Sigma Prime,0x209a649DAF35f390285c28F8FE3907804535C247
gate.treeRoot = 0x57db3289376dfbe035e073d81d5b297b8f5269fbdfee12643ded0180aac80839;
gate.treeCid = "bafkreihicf5dj4rfa42j4prxegrzxfcdkhwzgvgqjhuntgytdvffxkhjim";
Decentralization Operator
There are no operators of this type as of the initial deployment. Once the assessment is done, the tree will be updated via Easy Track.
gate.treeRoot = 0x1111111111111111111111111111111111111111111111111111111111111111; // Unusable root. Effectively means that the gate is disabled until the real root is set.
gate.treeCid = "QmU4cnyaKWgMVCZVLiuQaqu6yGXahjzi4F1Vcnq2SXBBmT"; // Points to the "null" json file
Extra Effort Operator
There are no operators of this type as of the initial deployment. Once the assessment is done, the tree will be updated via Easy Track.
gate.treeRoot = 0x1111111111111111111111111111111111111111111111111111111111111111; // Unusable root. Effectively means that the gate is disabled until the real root is set.
gate.treeCid = "QmU4cnyaKWgMVCZVLiuQaqu6yGXahjzi4F1Vcnq2SXBBmT"; // Points to the "null" json file
Intra-Operator DVT Cluster
Simply Staking,0x4fbefaf1bff0130945c61603b97d38dd6e21f5cf
Blockscape,0x3831dc257b7b0b507c8aEBfBf94B8E82E5092311
Ebunker,0x944849824A88ffeA23eF7e53b8A6793D88CE7581
stakefish,0x29c9829FE8C80D74515D69F8438BE2Fd97C70838
InfStones,0x60bc65e1cca448f98578f8d9f9ab64c3ba70a4c3
RockX,0xFf16Cf8020B01F6032d63347520CEfde4be02C61
P2P.org,0x1126EBBDd9f2A9B3a1F1D48A74cDF4e67B80C262
DSRV,0x904A289145b1FE0B672682db895bAde2EB186126
Launchnodes,0x5a8B929EDBf3CE44526465DD2087EC7EFB59A561
Blockdaemon,0x3Dc3d9Be47ef787ff0CdD9C2a6650A1598D4c267
ChainSafe Systems,0x29d5a9917A82Dbb77e3362128C425d3a63eE8E6F
gate.treeRoot = 0xfda6c221ae0f44dfa57c64324ebbd0c468bb402cbcc20326ad65a18e96a3df0c;
gate.treeCid = "bafkreigm3mqlqdto2ggxpq22w7tblfbx4p4o4a3gudf2lkfduwxeh2m62e";
Intra-Operator DVT Cluster Plus
There are no operators of this type as of the initial deployment. Once the assessment is done, the tree will be updated via Easy Track.
gate.treeRoot = 0x1111111111111111111111111111111111111111111111111111111111111111; // Unusable root. Effectively means that the gate is disabled until the real root is set.
gate.treeCid = "QmU4cnyaKWgMVCZVLiuQaqu6yGXahjzi4F1Vcnq2SXBBmT"; // Points to the "null" json file
Curated Module v2 contracts were deployed on mainnet!
{
"Accounting": "0x2F91e3A8C5d6593bf4F8403fCfeCcd62dF59f6F6",
"AccountingImpl": "0xB41F5d2721906b3BE4fC7ae08261266C801076C2",
"CuratedGateFactory": "0xDdE99d63b352A665d04339D4792E6852Ce89d1B7",
"CuratedGateImpl": "0x3cb948FD454ad6b20DE67633f25DcbDbEaa0e849",
"CuratedGates": [
"0x6093EFA6B5E2FF3be54d1c895c9deA932805c49F",
"0x8c002c6eE10cf8adb78D1F9EB2e134FdaF8A7C1a",
"0x207798e6fD1aa7Ee8a63782A64c959cD6727b78C",
"0xeF273Ca4A21Ba7B414Ae3C9f9b443038cb133F72",
"0x3BbBb175f7F07954DE00052b20E1c5572223F24D",
"0x86A8d4E0db5938D21d98047544668FCCB1A9ADc8",
"0x773933F9db8964A17d62fb808f2EC7A2de4247CC"
],
"CuratedModule": "0xDa5F930cE326EB5205085D66c72A4E79d60cB8C1",
"CuratedModuleImpl": "0x959fC67FE53c8A6C7a1AEd73430Aa07a36eD9337",
"Ejector": "0xe181A377A2d2BDE9A83f1474BC3DB7A412de091E",
"ExitPenalties": "0x004aFb7DAA7dEA20EbAaB75c9F4892C879FaCCe0",
"ExitPenaltiesImpl": "0x3766ABbA4635EE0fC3E6A7EB3EF169fe930df9c2",
"FeeDistributor": "0x367d23c756599c20DCc8D6943F4976E8F88D60d7",
"FeeDistributorImpl": "0x7C8FEE1dcC95Df60fC9b5BE7603c28Eb3af16753",
"FeeOracle": "0x8EeFCdbD984c30E472BcbF545783D051CB5114e5",
"FeeOracleImpl": "0x16804084408B6Caad10046F49aD421cBA56C0b5e",
"HashConsensus": "0x902D64c93F6595339aA46105627a085591051aFb",
"MetaRegistry": "0xA64b339eebD3dC3De848298B6a140955932901d8",
"MetaRegistryImpl": "0x6d852907463496622bb5FE5bc55cc30C4682E10e",
"ParametersRegistry": "0xffC1C5d59CeAC6F6c27E701F04a70cb50474607C",
"ParametersRegistryImpl": "0xfF419BbBC5f44d46547079922a88d691886d192a",
"ValidatorStrikes": "0xf4618370a1fBf46905B16C10817c8CFaD924D6db",
"ValidatorStrikesImpl": "0x239Ee6ab18fB06370ad53Ce05097B32208fB0a30",
"Verifier": "0xC392F457960f1B13Ebaf1aa6C065479dD507E1E3",
"ExternalLibraries": {
"AssetRecovererLib": "0x37aDa408AE3c3992953688e2CCb9eE7a3dfdA902",
"BondCurvesLib": "0xC4511d09639e5E174506083443da230D39196323",
"GeneralPenalty": "0xF05545ED71c60bBba6E73B6B70B15D4f5F22C0f4",
"NOAddresses": "0x9D9c8799189c797f6e2dA74F71aDF84492adA7D3",
"NodeOperatorOps": "0xDD42EE5D54A1822021782F3F455bb99fBC19499A",
"StakeTracker": "0xbb6E4Db18182d45038F91B9F1195291c206fd8d2",
"WithdrawnValidatorLib": "0x3bf9674f062aF9BA94FdAe9Fcdf2D0001FFf0a3A",
"CuratedDepositAllocator": "0xa4fCD4dDa0e4a847142E3592C97c77d8B9B3Cf5F"
}
}
SRv3 + CSMv3 + CMv2 Voting Structure
The on-chain Aragon vote is an omnibus proposal with two distinct parts:
Part 1: Voting Items (11 items) — Execute Immediately
These items are executed when the Aragon vote passes (no Dual Governance delay):
| # | Action | Contract Target | Permission Granted |
|---|---|---|---|
| 2 | Remove CSMSettleElStealingPenalty factory from Easy Track | EasyTrack | |
| 3 | Remove CSMSetVettedGateTree factory from Easy Track | EasyTrack | |
| 4 | Add UpdateStakingModuleShareLimits (for CSM) factory to Easy Track | EasyTrack | UpdateStakingModuleShareLimits.validateParams, stakingRouter.updateModuleShares |
| 5 | Add AllowConsolidationPair factory to Easy Track | EasyTrack | consolidationMigrator.allowPair |
| 6 | Add SetMerkleGateTree CSM factory to Easy Track | EasyTrack | SetMerkleGateTreeForCSM.validateInputData, icsGate.setTreeParams, idvtcGate.setTreeParams |
| 7 | Add ReportWithdrawalsForSlashedValidators CSM factory to Easy Track | EasyTrack | csm.reportSlashedWithdrawnValidators |
| 8 | Add SettleGeneralDelayedPenalty CSM factory to Easy Track | EasyTrack | csm.settleGeneralDelayedPenalty |
| 9 | Add SetMerkleGateTree CM factory to Easy Track | EasyTrack | SetMerkleGateTreeForCM.validateInputData, setTreeParams on all CM gates (PO, PTO, PGO, DO, EE, IODVTC, IODVTC+) |
| 10 | Add ReportWithdrawalsForSlashedValidators CM factory to Easy Track | EasyTrack | curatedModule.reportSlashedWithdrawnValidators |
| 11 | Add SettleGeneralDelayedPenalty CM factory to Easy Track | EasyTrack | curatedModule.settleGeneralDelayedPenalty |
| 12 | Add CreateOrUpdateOperatorGroup CM factory to Easy Track | EasyTrack | CreateOrUpdateOperatorGroupForCM.validateInputData, metaRegistry.createOrUpdateOperatorGroup |
Part 2: Dual Governance Items (69 items) — Subject to DG Veto Period
These items go through Dual Governance and execute only after the veto period:
Preparation items
| # | Action | Purpose |
|---|---|---|
| 1.1 | Call UpgradeTemplate.startUpgrade() |
Lock upgrade window, record initial state |
Lido Core upgrade items
| # | Action | Purpose |
|---|---|---|
| 1.2 | Upgrade LidoLocator implementation | Point to new contract registry |
| 1.3 | Upgrade StakingRouter implementation and call finalizeUpgrade_v4 | New contract version supporting ETH-based accounting and 0x02 validators |
| 1.4 | Upgrade AccountingOracle implementation and call finalizeUpgrade_v5 | New contract version supporting ETH-based accounting |
| 1.5 | Upgrade ValidatorsExitBusOracle implementation and call finalizeUpgrade_v3 | New contract version supporting ETH-based accounting and 0x02 validators |
| 1.6 | Upgrade Accounting implementation | New contract version supporting ETH-based accounting |
| 1.7 | Upgrade WithdrawalVault implementation and call finalizeUpgrade_v3 | New version supporting consolidations |
| 1.8 | Grant Aragon APP_MANAGER_ROLE to the AGENT | Temporary permission |
| 1.9 | Set Lido implementation in Kernel | Upgrade stETH contract to support new pull method for deposits to validators |
| 1.10 | Revoke Aragon APP_MANAGER_ROLE from the AGENT | Temporary permission cleanup |
| 1.11 | Create Aragon BUFFER_RESERVE_MANAGER_ROLE and grant role manager to the AGENT | New permission to manage deposit reserve size |
| 1.12 | Call finalizeUpgrade_v4 on Lido | Migrate to new storage layout and set initial deposit reserve size |
| 1.13 | Grant Staking Router STAKING_MODULE_SHARE_MANAGE_ROLE to EasyTrack executor | Permission for modules share management via EasyTrack |
| 1.14 | Revoke Staking Router STAKING_MODULE_UNVETTING_ROLE from old DSM | Remove permission from the old contract |
| 1.15 | Grant Staking Router STAKING_MODULE_UNVETTING_ROLE to new DSM | Grant permission to the new contract |
| 1.16 | Grant TWG TW_EXIT_LIMIT_MANAGER_ROLE to AGENT | Permission to manage TWG limits |
| 1.17 | Set TWG exit request limits | Set new TWG limits to support ETH-based accounting |
| 1.18 | Register CircuitBreaker pauser for ConsolidationGateway | CB pauser for the new contract |
| 1.19 | Register CircuitBreaker pauser for TopUpGateway | CB pauser for the new contract |
CSM upgrade items
| # | Action | Purpose |
|---|---|---|
| 1.20 | Upgrade CSM to v3 and call finalizeUpgradeV3 | New implementation of CSM with several improvements listed in LIP-33 |
| 1.21 | Upgrade CSM ParametersRegistry to v3 and call finalizeUpgradeV3 | New implementation with fine graded roles model |
| 1.22 | Upgrade CSM FeeOracle to v3 and call finalizeUpgradeV3 | New implementation with technical improvements and solidity version bump |
| 1.23 | Upgrade CSM VettedGate implementation | New implementation for the ICS Gate (previously called VettedGate) with referral program removed |
| 1.24 | Upgrade CSM Accounting to v3 and call finalizeUpgradeV3 | New implementation of Accounting with several improvements listed in LIP-33 |
| 1.25 | Upgrade CSM FeeDistributor to v3 and call finalizeUpgradeV3 | New implementation with support for reward splitters |
| 1.26 | Upgrade CSM ExitPenalties implementation | New implementation with technical improvements and solidity version bump |
| 1.27 | Upgrade CSM ValidatorStrikes implementation | New implementation with technical improvements and solidity version bump |
| 1.28 | Point CSM ValidatorStrikes to the New CSM Ejector | Use updated version of Ejector contract |
| 1.29 | Revoke CSM REPORT_EL_REWARDS_STEALING_PENALTY_ROLE from CSM Committee | Removal of the deprecated role |
| 1.30 | Grant CSM REPORT_GENERAL_DELAYED_PENALTY_ROLE to CSM Committee | New role introduced in CSMv3 |
| 1.31 | Revoke CSM SETTLE_EL_REWARDS_STEALING_PENALTY_ROLE from Easy Track executor | Removal of the deprecated role |
| 1.32 | Grant CSM SETTLE_GENERAL_DELAYED_PENALTY_ROLE to Easy Track executor | New role introduced in CSMv3 |
| 1.33 | Revoke CSM VERIFIER_ROLE from the Old CSM Verifier | Detach old verifier contract |
| 1.34 | Grant CSM VERIFIER_ROLE to the New CSM Verifier | Attach new verifier contract |
| 1.35 | Grant CSM REPORT_REGULAR_WITHDRAWN_VALIDATORS_ROLE to the New CSM Verifier | Attach new verifier contract |
| 1.36 | Grant CSM REPORT_SLASHED_WITHDRAWN_VALIDATORS_ROLE to Easy Track executor | New permission to allow for slashing penalty reporting via EasyTrack |
| 1.37 | Revoke CSM CREATE_NODE_OPERATOR_ROLE from the Old CSM PermissionlessGate | Detach old PermissionlessGate contract |
| 1.38 | Grant CSM CREATE_NODE_OPERATOR_ROLE to the New CSM PermissionlessGate | Attach new PermissionlessGate contract |
| 1.39 | Revoke VettedGate START_REFERRAL_SEASON_ROLE from AGENT | Deprecated role removal |
| 1.40 | Revoke VettedGate END_REFERRAL_SEASON_ROLE from CSM Committee | Deprecated role removal |
| 1.41 | Set name Identified Community Stakers for CSM VettedGate gate | Add a human-readable name for the ICS Gate |
| 1.42 | Unregister CircuitBreaker pauser for Old CSM Verifier | Detach old verifier contract |
| 1.43 | Unregister CircuitBreaker pauser for Old CSM Ejector | Detach old ejector contract |
| 1.44 | Register CircuitBreaker pauser for New CSM Verifier | Attach new verifier |
| 1.45 | Register CircuitBreaker pauser for New CSM Ejector | Attach new ejector |
| 1.46 | Register CircuitBreaker pauser for CSM Identified DVT cluster gate | Attach new IDVTC gate |
| 1.47 | Grant CREATE_NODE_OPERATOR_ROLE to Identified DVT cluster gate | Attach new IDVTC gate |
| 1.48 | Grant CSM Accounting SET_BOND_CURVE_ROLE to Identified DVT Cluster gate | Attach new IDVTC gate |
| 1.49 | Grant CSM Accounting MANAGE_BOND_CURVES_ROLE to Identified DVT Cluster curve setup | Temporary permission for the curve setup contract. Is renounced by the contract itself. |
| 1.50 | Grant CSM ParametersRegistry MANAGE_CURVE_PARAMETERS_ROLE to Identified DVT Cluster curve setup | Temporary permission for the curve setup contract. Is renounced by the contract itself. |
| 1.51 | Execute Identified DVT cluster curve setup | Create IDVTC bond curve and set additional parameters. Renounce roles granted above. |
| 1.52 | Grant CSM ParametersRegistry MANAGE_GENERAL_PENALTIES_AND_CHARGES_ROLE to CSM Committee | Permission to manage penalty and charge sizes for certain cases in CSM. More in LIP-33 |
| 1.53 | Revoke Burner REQUEST_BURN_SHARES_ROLE from CSM Accounting | Remove broad burn permission (Replace REQUEST_BURN_SHARES_ROLE with REQUEST_BURN_MY_STETH_ROLE for All Staking Modules · Issue #871 · lidofinance/core · GitHub) |
| 1.54 | Grant Burner REQUEST_BURN_MY_STETH_ROLE to CSM Accounting | Grant limited burn permission (Replace REQUEST_BURN_SHARES_ROLE with REQUEST_BURN_MY_STETH_ROLE for All Staking Modules · Issue #871 · lidofinance/core · GitHub) |
| 1.55 | Revoke TWG ADD_FULL_WITHDRAWAL_REQUEST_ROLE from the Old CSM Ejector | Detach old ejector |
| 1.56 | Grant TWG ADD_FULL_WITHDRAWAL_REQUEST_ROLE to the New CSM Ejector | Attach new ejector |
CMv2 addition items
| # | Action | Purpose |
|---|---|---|
| 1.57 | Add Curated Module v2 to StakingRouter | Add a new curated module to SR to allow for stake migration from 0x01 keys to 0x02 keys. |
| 1.58 | Grant Burner REQUEST_BURN_MY_STETH_ROLE to Curated Accounting | The role is required to penalize node operator’s bond |
| 1.59 | Grant TWG ADD_FULL_WITHDRAWAL_REQUEST_ROLE to Curated Ejector | The role is required to support voluntary and forced ejections via EIP-7002 from CMv2 |
| 1.60 | Grant CM RESUME_ROLE to AGENT | Temporary permission |
| 1.61 | Resume Curated Module v2 | Enable Node Operator creation and keys upload to the new module |
| 1.62 | Revoke CM RESUME_ROLE from AGENT | Remove temporary permission |
| 1.63 | Update Curated HashConsensus initial epoch | Initial epoch is required to define the beginning of the first frame for CMv2 performance Oracle |
| 1.64 | Register CircuitBreaker pauser for Curated Module v2 | Attach new contract |
| 1.65 | Register CircuitBreaker pauser for Curated Accounting | Attach new contract |
| 1.66 | Register CircuitBreaker pauser for Curated FeeOracle | Attach new contract |
| 1.67 | Register CircuitBreaker pauser for Curated Verifier | Attach new contract |
| 1.68 | Register CircuitBreaker pauser for Curated Ejector | Attach new contract |
Finalization items
| # | Action | Purpose |
|---|---|---|
| 1.69 | Call UpgradeTemplate.finishUpgrade() |
Finalize upgrade. Migrate Sanity Checker data. Perform final assertions |
Lido contributors expect to start the on-chain vote that will connect the recently deployed CMv2 module to the protocol on 15 July. In this case, we can expect the vote enactment on 24 July once all required governance actions are completed. The vote, among other steps, will set the initial epoch for the CMv2 performance oracle, which will define the report cadence.
Lido contributors have proposed the following epoch be set as the initial one: 467564, so the first frame will be running from 27 July 01:29:59 PM UTC to 10 August 01:29:59 PM UTC, given the proposed frame duration of 14 days. The established cadence ensures reports for the CSM and CMv2 modules are delivered in different weeks, allowing Lido contributors reasonable time to resolve any issues should they arise.
The proposed initial frame lies slightly after the expected enactment date, which provides some leeway for contributors to conduct all required checks. Since no validators can be activated in the module during the gap between the vote enactment and the frame start, given the entry queue exceeds 46 days at the time of writing, no performance data for the module will not be considered. Even though the next few reports are expected to be empty for the module under the same entry queue conditions, the earlier start will allow Lido contributors to verify the oracle member setup.
New EasyTrack factories to support CMv2 were deployed on mainnet:
{
"SetMerkleGateTree": "0xa121667D1780a1D54EAEd67AE17ee13d0f872D60",
"ReportWithdrawalsForSlashedValidators": "0x71862Abd99819597670007bb992A7a7562fE50f2",
"SettleGeneralDelayedPenalty": "0xfffEFC16231eDC6Dc9C93e364ff4D4E3f787f416",
"CreateOrUpdateOperatorGroup": "0x2fC78638b77381e9D040163Bd6EB1cac967bDBdF",
"AllowConsolidationPair": "0x29e23B1EF0c9fffAc8330F9abaCebDDD827E4b5C"
}
As part of CMv2 migration preparation, we want to flag a scenario to the community ahead of time.
Context: CMv2 requires seeding 0x02 validators via incoming deposits before consolidations can proceed at scale. Seeding timelines are currently modeled at ~83–100 days under normal deposit flow, with a specific buffer mechanism for seed deposits.
The scenario: If incoming deposits are insufficient to cover required seed deposits for 0x02 validators in a timely manner, we may ask Node Operators to voluntarily exit some validators to help meet seeding requirements.
We want to flag because:
- This would be a deviation and outside the scope of what the SNOP for Validator Exits (v4) currently establishes
- Any such requests would be targeted and tied to unblocking seed deposit shortfalls specifically
- NOs and the broader community should be aware of this possibility before migration begins for transparency purposes
We’ll follow up here if/when this mechanism is actually invoked.
The audits along with the deployment verification are published both for the CMv2 contracts and the supporting ET factories:
Below is the list of the permissions granted to the ET factories supporting CMv2.
AllowConsolidationPair
Factory: 0x29e23B1EF0c9fffAc8330F9abaCebDDD827E4b5C
ConsolidationMigrator:allowPair(uint256,uint256,address); selector:0xb4ecbe1a
SetMerkleGateTree
Factory: 0xa121667D1780a1D54EAEd67AE17ee13d0f872D60
SetMerkleGateTree:validateInputData(address,bytes32,string,bytes32,string); selector:0x672c809eProfessionalOperatorGate:setTreeParams(bytes32,string); selector:0xed4b1869ProfessionalTrustedOperatorGate:setTreeParams(bytes32,string); selector:0xed4b1869PublicGoodOperatorGate:setTreeParams(bytes32,string); selector:0xed4b1869DecentralizationOperatorGate:setTreeParams(bytes32,string); selector:0xed4b1869ExtraEffortOperatorGate:setTreeParams(bytes32,string); selector:0xed4b1869IntraOperatorDVTClusterGate:setTreeParams(bytes32,string); selector:0xed4b1869IntraOperatorDVTClusterPlusGate:setTreeParams(bytes32,string); selector:0xed4b1869
ReportWithdrawalsForSlashedValidators
Factory: 0x71862Abd99819597670007bb992A7a7562fE50f2
CuratedModule:reportSlashedWithdrawnValidators((uint256,uint256,uint256,uint256,bool)[]); selector:0x4412f7aa
SettleGeneralDelayedPenalty
Factory: 0xfffEFC16231eDC6Dc9C93e364ff4D4E3f787f416
CuratedModule:settleGeneralDelayedPenalty(uint256[],uint256[]); selector:0x187d9f92
CreateOrUpdateOperatorGroup
The on-chain vote #203 is now live and includes the proposal to add the Curated Module v2 supporting 0x02 validators, along with the Staking Router v3 and the Community Staking Module v3 upgrades.
The vote will be open for your “For” or “Against” input until the end of the main phase: July 18, 14:07 UTC.
For instructions on how to verify the vote items, please follow this guide.
The on-chain vote #203 has reached supporting quorum and has been enacted! Submitted Dual Governance Proposal #12 is now pending.