How to verify: open the vote at dao
How to check the Lido DAO on-chain vote #206
What the vote is about
This document outlines methods to verify all the calls embedded in the Lido DAO on-chain vote #206.
The vote covers the following changes:
- Activate the Community Staking Module for 0x02 withdrawal credentials, as per Snapshot decision. Audits: CSMv3 and CMv2 — Statemind, Certora; Easy Track factories — MixBytes | Deployment verification — MixBytes: 0x02 CSM, 0x02 CSM Easy Track factories
- Restrict proposal execution to 14:00-23:00 UTC. Item 1.1.
- Register, enable and configure 0x02 CSM with an initial stake share limit of 0.01% and top-up queue limit of 32. Items 1.2 - 1.8, 1.17 - 1.19.
- Register 0x02 CSM Module, Accounting, FeeOracle, Verifier and Ejector on CircuitBreaker with the CSM Committee as pauser. Items 1.9 - 1.13.
- Add 0x02 CSM Easy Track factories to report withdrawals for slashed validators, settle delayed penalties, and update share limit. Items 2 - 4.
- Set CMv1 stake share limit and priority exit share threshold to 0, as per Snapshot decision. Item 1.14
- Set Consensys target validators limit to 0 in CMv1 and CMv2 (soft mode), as proposed on the forum. Items 1.15 - 1.16.
- Add LOL LDO Easy Track factory for top-ups with a limit of 7.5M LDO per 12-month period, under the Snapshot-approved liquidity mandate. Item 5.
Resources for the Proposal Validation
The resources listed in this section are considered trustworthy and reliable.
- Lido Docs - use this to verify contract addresses
- Blockchain Explorer Etherscan (or alternatives such as Blockscout) - use this to review contract functionality/inspect methods, and check the current state of contracts
- Lido Research Forum - use this to access original proposals, review details of proposed changes, and validate modification parameters
- Snapshot - use this to review pre-approvals for on-chain proposals
Direct links to relevant sources will be provided for each item in the vote, ensuring easy access to the associated information.
Vote Items and Verification Details
1.1.Restrict proposal execution to 14:00–23:00 UTC
1.2.Register Community Staking 0x02 on StakingRouter
Role items (1.3–1.5, 1.7, 1.17, 1.19): check the target, the 32-byte role and the account. Open the pre-filled Keccak link next to each role and compare its result with the role value.
1.3.Grant the stETH burning-request role to 0x02 CSM Accounting
1.4.Grant the full-withdrawal-request role to 0x02 CSM Ejector
Temporary roles: 1.5 grants the Aragon Agent a role, 1.6 uses it and 1.7 revokes it. Items 1.17–1.19 follow the same pattern for the top-up queue limit.
1.5.Grant Aragon Agent the 0x02 CSM resume role
1.6.Resume 0x02 CSM
1.7.Revoke Aragon Agent’s 0x02 CSM resume role
HashConsensus: HashConsensus lets an oracle committee agree on a report hash before the report data is submitted.
1.8.Set the 0x02 CSM HashConsensus initial epoch
CircuitBreaker (1.9–1.13): in registerPauser, [1] is the contract that can be paused and [2] is its pauser. These items assign the CSM Committee to all five 0x02 CSM contracts.
1.9.Register the CSM Committee as pauser for 0x02 CSM CSModule
1.10.Register the CSM Committee as pauser for 0x02 CSM Accounting
1.11.Register the CSM Committee as pauser for 0x02 CSM FeeOracle
1.12.Register the CSM Committee as pauser for 0x02 CSM Verifier
1.13.Register the CSM Committee as pauser for 0x02 CSM Ejector
StakingRouter (1.14–1.16): check each module ID with getStakingModuleStateConfig(
1.14.Set CMv1 stake share limit and priority exit share threshold to zero
1.15.Set the CMv1 MetaMask Staking target-validator limit to zero in soft mode
1.16.Set the CMv2 MetaMask Staking target-validator limit to zero in soft mode
1.17.Grant Aragon Agent the 0x02 CSM top-up queue management role
1.18.Set the 0x02 CSM top-up queue limit to 32
1.19.Revoke Aragon Agent’s 0x02 CSM top-up queue management role
2–5. Register four Easy Track factories
Easy Track factories (2–5): compare each factory and its full permission string, then split the string into address and selector pairs as in the worked example below. If an explorer cannot show a tuple signature, use the verified ABI or Blockscout with the Keccak link.
| Item | [1] Factory | [2] Permissions · address + selector |
|---|---|---|
| 2 | ReportWithdrawalsForSlashedValidators | |
| 3 | SettleGeneralDelayedPenalty | |
| 4 | UpdateStakingModuleShareLimits | |
| 5 | LOL LDO TopUpAllowedRecipients |
How to Verify Permission Hashes — worked example: item 4
- Take exact call data [2] from item 4.
- Split after the initial 0x into consecutive 20-byte target addresses (40 hexadecimal characters) and 4-byte selectors (8 hexadecimal characters).Example from item 4
- Confirm the target contract address from the linked deployment sources.
- Hash the full canonical function signature using Ethereum Keccak-256 and take the first 4 bytes.
- Compare the computed selector, target address and complete reassembled raw permission value against call data [2].
validateParams(