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 |