# Staking Router 2.0 + Community Staking Module voting script Contributors from the Lido ValSet workstream have prepared a voting script for the upcoming protocol upgrades, based on the previously approved [LIP-23](https://snapshot.org/#/lido-snapshot.eth/proposal/0xa44f6a4dba07d7e24b0e4180025f7a9db6251046daa74d2a8fae84de0d9ce21e), [LIP-25](https://snapshot.org/#/lido-snapshot.eth/proposal/0xffb4042d3bfceef33c66f78c092a76fa8e1db198559d93798cc9db3fb4d722e7), and [LIP-26](https://snapshot.org/#/lido-snapshot.eth/proposal/0xd0d7bfd68f2241524dbb14ae6fe0e8414b9fe3e0dcfc50641a8d28f0067d6693) proposals. The voting script consists of 33 independent steps, and the successful execution of the script will result in: - The Community Staking Module (CSM) will be integrated into the Lido protocol. - Staking Router and all related contracts being upgraded with new implementations. - Roles being updated or revoked as necessary. - All steps, including publishing updates, finalizing upgrades, and integrating new governance roles, being completed. This process will ensure that all modules are fully operational and updated. **Note:** All contract addresses can be verified at [Lido's deployed contracts documentation](https://docs.lido.fi/deployed-contracts/). ## Audits The solution passed audits by Ackee Blockchain and MixBytes: - [Ackee Blockchain Lido Community Staking Module Report 10-24.pdf](https://github.com/lidofinance/audits/blob/main/Ackee%20Blockchain%20Lido%20Community%20Staking%20Module%20Report%2010-24.pdf) - [Ackee Blockchain Lido Staking Router v2 Report 10-24.pdf](https://github.com/lidofinance/audits/blob/main/Ackee%20Blockchain%20Lido%20Staking%20Router%20v2%20Report%2010-24.pdf) - [MixBytes Lido CSM Security Audit Report 10-24.pdf](https://github.com/lidofinance/audits/blob/main/MixBytes%20Lido%20CSM%20Security%20Audit%20Report%2010-24.pdf) - [MixBytes Lido Oracle Security Audit Report 10-24.pdf](https://github.com/lidofinance/audits/blob/main/MixBytes%20Lido%20Oracle%20Security%20Audit%20Report%2010-24.pdf) ## Voting Script The voting script will be added to the omnibus on-chain Aragon vote, including the following actions: ### Staking Router V2 1. Update Lido locator implementation to `0x3ABc4764f0237923d52056CFba7E9AEBf87113D3`. New implementation contains updated addresses of the Deposit Security Module and Oracle Report Sanity Checker contracts. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Locator: [0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb](https://etherscan.io/address/0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb) (proxy) - New Locator: [0x3ABc4764f0237923d52056CFba7E9AEBf87113D3](https://etherscan.io/address/0x3abc4764f0237923d52056cfba7e9aebf87113d3) (impl) ``` 1. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 1.1 1.1. On [LidoLocator] 0xc1d0b3de6792bf6b4b37eccdcc24e45978cfd2eb function proxy__upgradeTo( address newImplementation_ ) Call data: [1] 0x3ABc4764f0237923d52056CFba7E9AEBf87113D3 ``` 2. Revoke `STAKING_MODULE_PAUSE_ROLE` role on Staking Router from old Deposit Security Module. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Staking Router: [0xFdDf38947aFB03C621C71b06C9C70bce73f12999](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999) (proxy) - `STAKING_MODULE_PAUSE_ROLE` role: [0x00b1e70095ba5bacc3202c3db9faf1f7873186f0ed7b6c84e80c0018dcc6e38e](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999#readProxyContract#F10) - Old Deposit Security Module: [0xC77F8768774E1c9244BEed705C4354f2113CFc09](https://etherscan.io/address/0xC77F8768774E1c9244BEed705C4354f2113CFc09) ``` 2. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 2.1 2.1. On [StakingRouter] 0xfddf38947afb03c621c71b06c9c70bce73f12999 function revokeRole( bytes32 role, address account ) Call data: [1] 0x00b1e70095ba5bacc3202c3db9faf1f7873186f0ed7b6c84e80c0018dcc6e38e [2] 0xC77F8768774E1c9244BEed705C4354f2113CFc09 ``` 3. Revoke `STAKING_MODULE_RESUME_ROLE` role on Staking Router from old Deposit Security Module. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Staking Router: [0xFdDf38947aFB03C621C71b06C9C70bce73f12999](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999) (proxy) - `STAKING_MODULE_RESUME_ROLE` role: [0x9a2f67efb89489040f2c48c3b2c38f719fba1276678d2ced3bd9049fb5edc6b2](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999#readProxyContract#F11) - Old Deposit Security Module: [0xC77F8768774E1c9244BEed705C4354f2113CFc09](https://etherscan.io/address/0xC77F8768774E1c9244BEed705C4354f2113CFc09) ``` 3. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 3.1 3.1. On [StakingRouter] 0xfddf38947afb03c621c71b06c9c70bce73f12999 function revokeRole( bytes32 role, address account ) Call data: [1] 0x9a2f67efb89489040f2c48c3b2c38f719fba1276678d2ced3bd9049fb5edc6b2 [2] 0xC77F8768774E1c9244BEed705C4354f2113CFc09 ``` 4. Grant `STAKING_MODULE_UNVETTING_ROLE` role on Staking Router to new Deposit Security Module. This role is required for ability to unvet Node Operators' keys by Deposit Security Module Contract, it is a brand new role which was introduced as part of current Staking Router upgrade (see step #5). - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Staking Router: [0xFdDf38947aFB03C621C71b06C9C70bce73f12999](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999) (proxy) - New Staking Router: [0x89eDa99C0551d4320b56F82DDE8dF2f8D2eF81aA](https://etherscan.io/address/0x89eDa99C0551d4320b56F82DDE8dF2f8D2eF81aA) (impl) - `STAKING_MODULE_UNVETTING_ROLE` role: [0x240525496a9dc32284b17ce03b43e539e4bd81414634ee54395030d793463b57](https://etherscan.io/address/0x89eDa99C0551d4320b56F82DDE8dF2f8D2eF81aA#readContract#F10) - New Deposit Security Module: [0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fD](https://etherscan.io/address/0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fD) ``` 4. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 4.1 4.1. On [StakingRouter] 0xfddf38947afb03c621c71b06c9c70bce73f12999 function grantRole( bytes32 role, address account ) Call data: [1] 0x240525496a9dc32284b17ce03b43e539e4bd81414634ee54395030d793463b57 [2] 0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fD ``` 5. Update Staking Router implementation to `0x89eDa99C0551d4320b56F82DDE8dF2f8D2eF81aA`. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Staking Router: [0xFdDf38947aFB03C621C71b06C9C70bce73f12999](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999) (proxy) - New Staking Router: [0x89eDa99C0551d4320b56F82DDE8dF2f8D2eF81aA](https://etherscan.io/address/0x89eDa99C0551d4320b56F82DDE8dF2f8D2eF81aA) (impl) ``` 5. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 5.1 5.1. On [StakingRouter] 0xfddf38947afb03c621c71b06c9c70bce73f12999 function proxy__upgradeTo( address newImplementation_ ) Call data: [1] 0x89eDa99C0551d4320b56F82DDE8dF2f8D2eF81aA ``` 6. Call finalize upgrade on Staking Router. Save the `maxDepositsPerBlock`, `minDepositBlockDistance`, and the new `priorityExitShareThreshold` for both the Curated and Simple DVT modules in the Staking Router's state. This also updates the contract version to `2`. Note: Previously, the `maxDepositsPerBlock` and `minDepositBlockDistance` values, which were shared across all modules, were stored in the [Deposit Security Module](https://etherscan.io/address/0xC77F8768774E1c9244BEed705C4354f2113CFc09) contract. - Staking Router: [0xFdDf38947aFB03C621C71b06C9C70bce73f12999](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999) (proxy) - finalize upgrade parameters ``` priorityExitShareThresholds: [10_000, 444] maxDepositsPerBlock: [150, 150] minDepositBlockDistances: [25, 25] ``` ``` 6. On [StakingRouter] 0xfddf38947afb03c621c71b06c9c70bce73f12999 function finalizeUpgrade_v2( uint256[] _priorityExitShareThresholds, uint256[] _maxDepositsPerBlock, uint256[] _minDepositBlockDistances ) Call data: [1] 10000,444 [2] 150,150 [3] 25,25 ``` 7. Add new NodeOperatorsRegistry implementation to APM Node Operators Registry app repo. - Node Operators Registry Repo: [0x0D97E876ad14DB2b183CFeEB8aa1A5C788eB1831](https://etherscan.io/address/0x0D97E876ad14DB2b183CFeEB8aa1A5C788eB1831) (proxy) - Content URI (latest from Node Operators Registry Repo): [0x697066733a516d54346a64693146684d454b5576575351316877786e33365748394b6a656743755a7441684a6b6368526b7a70](https://etherscan.io/address/0x0D97E876ad14DB2b183CFeEB8aa1A5C788eB1831#readProxyContract#F14) - Node Operators Registry: [0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135](https://etherscan.io/address/0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135) (impl) - New app version: `5.0.0` ``` 7. On [NodeOperatorsRegistryRepo] 0x0d97e876ad14db2b183cfeeb8aa1a5c788eb1831 function newVersion( uint16[3] _newSemanticVersion, address _contractAddress, bytes _contentURI ) Call data: [1] 5,0,0 [2] 0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135 [3] 0x697066733a516d54346a64693146684d454b5576575351316877786e33365748394b6a656743755a7441684a6b6368526b7a70 ``` 8. Update NodeOperatorsRegistry app. SetApp on Lido DAO (Kernel). - Lido DAO (Kernel): [0xb8FFC3Cd6e7Cf5a098A1c92F48009765B24088Dc](https://etherscan.io/address/0xb8FFC3Cd6e7Cf5a098A1c92F48009765B24088Dc) (proxy) - APP_BASES_NAMESPACE (from Lido DAO): [0xf1f3eb40f5bc1ad1344716ced8b8a0431d840b5783aea1fd01786bc26f35ac0f](https://etherscan.io/address/0xb8FFC3Cd6e7Cf5a098A1c92F48009765B24088Dc#readProxyContract#F12) - Curated (Node Operators Registry): [0x55032650b14df07b85bF18A3a3eC8E0Af2e028d5](https://etherscan.io/address/0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135) (proxy) - Aragon app id (from Curated proxy): [0x7071f283424072341f856ac9e947e7ec0eb68719f757a7e785979b6b8717579d](https://etherscan.io/address/0x55032650b14df07b85bF18A3a3eC8E0Af2e028d5#readProxyContract#F13) - New Node Operators Registry: [0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135](https://etherscan.io/address/0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135) (impl) ``` 8. On [LidoDAO] 0xb8ffc3cd6e7cf5a098a1c92f48009765b24088dc function setApp( bytes32 _namespace, bytes32 _appId, address _app ) Call data: [1] 0xf1f3eb40f5bc1ad1344716ced8b8a0431d840b5783aea1fd01786bc26f35ac0f [2] 0x7071f283424072341f856ac9e947e7ec0eb68719f757a7e785979b6b8717579d [3] 0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135 ``` 9. Finalize Node Operators Registry upgrade. The method call will clear deprecated total keys count storage and bumps the contract version to `3`. - Curated (Node Operators Registry): [0x55032650b14df07b85bF18A3a3eC8E0Af2e028d5](https://etherscan.io/address/0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135) (proxy) ``` 9. On [NodeOperatorsRegistry] 0x55032650b14df07b85bf18a3a3ec8e0af2e028d5 function finalizeUpgrade_v3() Call data: [empty] ``` 10. Add new SimpleDVT implementation to SimpleDVT app Repo. - Simple DVT Repo: [0x2325b0a607808dE42D918DB07F925FFcCfBb2968](https://etherscan.io/address/0x2325b0a607808dE42D918DB07F925FFcCfBb2968) (proxy) - New Node Operators Registry:[0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135](https://etherscan.io/address/0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135) (impl) - New app version: `2.0.0` - Content URI (latest from Simple DVT Repo): [0x697066733a516d615353756a484347636e4675657441504777565735426567614d42766e355343736769334c5366767261536f](https://etherscan.io/address/0x2325b0a607808dE42D918DB07F925FFcCfBb2968#readProxyContract#F14) ``` 10. On 0x2325b0a607808de42d918db07f925ffccfbb2968 function newVersion( uint16[3] _newSemanticVersion, address _contractAddress, bytes _contentURI ) Call data: [1] 2,0,0 [2] 0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135 [3] 0x697066733a516d615353756a484347636e4675657441504777565735426567614d42766e355343736769334c5366767261536f ``` 11. Update SimpleDVT app. SetApp on Lido DAO (Kernel). - Lido DAO (Kernel): [0xb8FFC3Cd6e7Cf5a098A1c92F48009765B24088Dc](https://etherscan.io/address/0xb8FFC3Cd6e7Cf5a098A1c92F48009765B24088Dc) (proxy) - APP_BASES_NAMESPACE (from Lido DAO): [0xf1f3eb40f5bc1ad1344716ced8b8a0431d840b5783aea1fd01786bc26f35ac0f] - Simple DVT (Node Operators Registry): [0xaE7B191A31f627b4eB1d4DaC64eaB9976995b433](https://etherscan.io/address/0xaE7B191A31f627b4eB1d4DaC64eaB9976995b433) (proxy) - Aragon app id (on Simple DVT proxy): [0xe1635b63b5f7b5e545f2a637558a4029dea7905361a2f0fc28c66e9136cf86a4](https://etherscan.io/address/0xaE7B191A31f627b4eB1d4DaC64eaB9976995b433#readContract#F4) - New Node Operators Registry: [0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135](https://etherscan.io/address/0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135) (impl) ``` 11. On [LidoDAO] 0xb8ffc3cd6e7cf5a098a1c92f48009765b24088dc function setApp( bytes32 _namespace, bytes32 _appId, address _app ) Call data: [1] 0xf1f3eb40f5bc1ad1344716ced8b8a0431d840b5783aea1fd01786bc26f35ac0f [2] 0xe1635b63b5f7b5e545f2a637558a4029dea7905361a2f0fc28c66e9136cf86a4 [3] 0x1770044a38402e3CfCa2Fcfa0C84a093c9B42135 ``` 12. Finalize SimpleDVT upgrade. The method call clears deprecated total keys count storage and bumps the contract version to `3`. Simple DVT (Node Operators Registry): [0xaE7B191A31f627b4eB1d4DaC64eaB9976995b433](https://etherscan.io/address/0xaE7B191A31f627b4eB1d4DaC64eaB9976995b433) (proxy) ``` 12. On [SimpleDVT] 0xae7b191a31f627b4eb1d4dac64eab9976995b433 function finalizeUpgrade_v3() Call data: [empty] ``` 13. Update Accounting Oracle implementation to `0x0e65898527E77210fB0133D00dd4C0E86Dc29bC7`. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Accounting Oracle: [0x852deD011285fe67063a08005c71a85690503Cee](https://etherscan.io/address/0x852deD011285fe67063a08005c71a85690503Cee) (proxy) - New Accounting Oracle: [0x0e65898527E77210fB0133D00dd4C0E86Dc29bC7](https://etherscan.io/address/0x0e65898527E77210fB0133D00dd4C0E86Dc29bC7) (impl) ``` 13. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 13.1 13.1. On [AccountingOracle] 0x852ded011285fe67063a08005c71a85690503cee function proxy__upgradeTo( address newImplementation_ ) Call data: [1] 0x0e65898527E77210fB0133D00dd4C0E86Dc29bC7 ``` 14. Finalize Accounting Oracle upgrade and set consensus version to `2`. - Accounting Oracle: [0x852deD011285fe67063a08005c71a85690503Cee](https://etherscan.io/address/0x852deD011285fe67063a08005c71a85690503Cee) (proxy) ``` 14. On [AccountingOracle] 0x852ded011285fe67063a08005c71a85690503cee function finalizeUpgrade_v2( uint256 consensusVersion ) Call data: [1] 2 ``` 15. Grant `MANAGE_CONSENSUS_VERSION_ROLE` role on Validator Exit Bus Oracle to Aragon Agent. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Validators Exit Bus Oracle: [0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e](https://etherscan.io/address/0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e) (proxy) - MANAGE_CONSENSUS_VERSION_ROLE: [0xc31b1e4b732c5173dc51d519dfa432bad95550ecc4b0f9a61c2a558a2a8e4341](https://etherscan.io/address/0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e#readProxyContract#F5) ``` 15. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 15.1 15.1. On [ValidatorsExitBusOracle] 0x0de4ea0184c2ad0baca7183356aea5b8d5bf5c6e function grantRole( bytes32 role, address account ) Call data: [1] 0xc31b1e4b732c5173dc51d519dfa432bad95550ecc4b0f9a61c2a558a2a8e4341 [2] 0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c ``` 16. Update Validator Exit Bus Oracle consensus version to `2`. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Validators Exit Bus Oracle: [0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e](https://etherscan.io/address/0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e) (proxy) ``` 16. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 16.1 16.1. On [ValidatorsExitBusOracle] 0x0de4ea0184c2ad0baca7183356aea5b8d5bf5c6e function setConsensusVersion( uint256 version ) Call data: [1] 2 ``` 17. Revoke `MANAGE_CONSENSUS_VERSION_ROLE` role on Validator Exit Bus Oracle from Aragon Agent. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Validators Exit Bus Oracle: [0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e](https://etherscan.io/address/0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e) (proxy) - MANAGE_CONSENSUS_VERSION_ROLE: [0xc31b1e4b732c5173dc51d519dfa432bad95550ecc4b0f9a61c2a558a2a8e4341](https://etherscan.io/address/0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e#readProxyContract#F5) ``` 17. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 17.1 17.1. On [ValidatorsExitBusOracle] 0x0de4ea0184c2ad0baca7183356aea5b8d5bf5c6e function revokeRole( bytes32 role, address account ) Call data: [1] 0xc31b1e4b732c5173dc51d519dfa432bad95550ecc4b0f9a61c2a558a2a8e4341 [2] 0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c ``` 18. Remove old UpdateTargetValidatorLimits factory for SimpleDVT from EasyTrack. - EasyTrack: [0xF0211b7660680B49De1A7E9f25C65660F0a13Fea](https://etherscan.io/address/0xF0211b7660680B49De1A7E9f25C65660F0a13Fea) - Old SimpleDVT factory: [0x41CF3DbDc939c5115823Fba1432c4EC5E7bD226C](https://etherscan.io/address/0x41CF3DbDc939c5115823Fba1432c4EC5E7bD226C) ``` 18. On [EasyTrack] 0xf0211b7660680b49de1a7e9f25c65660f0a13fea function removeEVMScriptFactory( address _evmScriptFactory ) Call data: [1] 0x41CF3DbDc939c5115823Fba1432c4EC5E7bD226C ``` 19. Add new UpdateTargetValidatorLimits factory for SimpleDVT to EasyTrack. - EasyTrack: [0xF0211b7660680B49De1A7E9f25C65660F0a13Fea](https://etherscan.io/address/0xF0211b7660680B49De1A7E9f25C65660F0a13Fea) - New factory: [0x161a4552A625844c822954C5AcBac928ee0f399B](https://etherscan.io/address/0x161a4552A625844c822954C5AcBac928ee0f399B) The `permissions` parameter value (`0xae7b191a31f627b4eb1d4dac64eab9976995b43308a679ad`) is a combination of the Simple DVT contract address and the signature of the `updateTargetValidatorsLimits` method with the parameter types `("uint", "uint", "uint")`. ``` 19. On [EasyTrack] 0xf0211b7660680b49de1a7e9f25c65660f0a13fea function addEVMScriptFactory( address _evmScriptFactory, bytes _permissions ) Call data: [1] 0x161a4552A625844c822954C5AcBac928ee0f399B [2] 0xae7b191a31f627b4eb1d4dac64eab9976995b43308a679ad ``` ### Community Staking Module 20. Add Community Staking Module `0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F` to Staking Router. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Staking Router: [0xFdDf38947aFB03C621C71b06C9C70bce73f12999](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999) (proxy) - Community Staking Module: [0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F](https://etherscan.io/address/0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F) (proxy) - Community Stakig Module parameters: ``` name: Community Staking stakingModuleAddress: 0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F stakeShareLimit: 100 priorityExitShareThreshold: 125 stakingModuleFee: 600 treasuryFee: 400 maxDepositsPerBlock: 30 minDepositBlockDistance: 25 ``` ``` 20. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 20.1 20.1. On [StakingRouter] 0xfddf38947afb03c621c71b06c9c70bce73f12999 function addStakingModule( string _name, address _stakingModuleAddress, uint256 _stakeShareLimit, uint256 _priorityExitShareThreshold, uint256 _stakingModuleFee, uint256 _treasuryFee, uint256 _maxDepositsPerBlock, uint256 _minDepositBlockDistance ) Call data: [1] Community Staking [2] 0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F [3] 100 [4] 125 [5] 600 [6] 400 [7] 30 [8] 25 ``` 21. Grant `REQUEST_BURN_SHARES_ROLE` role on Burner to CSAccounting. This role is required for ability to burn stETH tokens in case of operator’s penalties. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Burner: [0xD15a672319Cf0352560eE76d9e89eAB0889046D3](https://etherscan.io/address/0xD15a672319Cf0352560eE76d9e89eAB0889046D3) - REQUEST_BURN_SHARES_ROLE: [0x4be29e0e4eb91f98f709d98803cba271592782e293b84a625e025cbb40197ba8](https://etherscan.io/address/0xD15a672319Cf0352560eE76d9e89eAB0889046D3#readContract#F3) - CSAccounting: [0x4d72BFF1BeaC69925F8Bd12526a39BAAb069e5Da](https://etherscan.io/address/0x4d72BFF1BeaC69925F8Bd12526a39BAAb069e5Da) (proxy) ``` 21. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 21.1 21.1. On [Burner] 0xd15a672319cf0352560ee76d9e89eab0889046d3 function grantRole( bytes32 role, address account ) Call data: [1] 0x4be29e0e4eb91f98f709d98803cba271592782e293b84a625e025cbb40197ba8 [2] 0x4d72BFF1BeaC69925F8Bd12526a39BAAb069e5Da ``` 22. Grant `RESUME_ROLE` role on CSM to Aragon Agent. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Community Staking Module: [0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F](https://etherscan.io/address/0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F) (proxy) - RESUME_ROLE: [0x2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c7](https://etherscan.io/address/0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F#readProxyContract#F12) ``` 22. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 22.1 22.1. On 0xda7de2ecddfccc6c3af10108db212acbbf9ea83f function grantRole( bytes32 role, address account ) Call data: [1] 0x2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c7 [2] 0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c ``` 23. Resume Community Staking Module. The module deployed on pause, preventing the creation of new operators until the module is connected to the Staking Router. Calling the resume method activates the module. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Community Staking Module: [0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F](https://etherscan.io/address/0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F) (proxy) ``` 23. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 23.1 23.1. On [CSModule] 0xda7de2ecddfccc6c3af10108db212acbbf9ea83f function resume() Call data: [empty] ``` 24. Revoke `RESUME_ROLE` role on CSM from Aragon Agent. - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - Community Staking Module: [0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F](https://etherscan.io/address/0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F) (proxy) - RESUME_ROLE: [0x2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c7](https://etherscan.io/address/0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F#readProxyContract#F12) ``` 24. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 24.1 24.1. On 0xda7de2ecddfccc6c3af10108db212acbbf9ea83f function revokeRole( bytes32 role, address account ) Call data: [1] 0x2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c7 [2] 0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c ``` 25. Update initial epoch on CSHashConsensus - Aragon Agent: [0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) (proxy) - HashConsensus for CSFeeOracle: [0x71093efF8D8599b5fA340D665Ad60fA7C80688e4](https://etherscan.io/address/0x71093efF8D8599b5fA340D665Ad60fA7C80688e4) - Initial epoch: `326715` ``` 25. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 25.1 25.1. On 0x71093eff8d8599b5fa340d665ad60fa7c80688e4 function updateInitialEpoch( uint256 initialEpoch ) Call data: [1] 326715 ``` 26. Add CSMSettleElStealingPenalty factory to EasyTrack. - EasyTrack: [0xF0211b7660680B49De1A7E9f25C65660F0a13Fea](https://etherscan.io/address/0xF0211b7660680B49De1A7E9f25C65660F0a13Fea) - New CSMSettleElStealingPenalty factory: [0xF6B6E7997338C48Ea3a8BCfa4BB64a315fDa76f4](https://etherscan.io/address/0xF6B6E7997338C48Ea3a8BCfa4BB64a315fDa76f4) ``` 26. On [EasyTrack] 0xf0211b7660680b49de1a7e9f25c65660f0a13fea function addEVMScriptFactory( address _evmScriptFactory, bytes _permissions ) Call data: [1] 0xF6B6E7997338C48Ea3a8BCfa4BB64a315fDa76f4 [2] 0xda7de2ecddfccc6c3af10108db212acbbf9ea83f37b12b5f ``` ### Instadapp oracle rotation Instadapp rotates the address used in the Lido Oracle set from `0x1ca0fec59b86f549e1f1184d97cb47794c8af58d` to `0x73181107c8D9ED4ce0bbeF7A0b4ccf3320C41d12`. - Forum post: ==TBA== - Twitter post: ==TBA== 27. Remove the oracle member with address `0x1Ca0fEC59b86F549e1F1184d97cb47794C8Af58d` from HashConsensus for AccountingOracle. ``` 27. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 27.1 27.1. On [HashConsensusAccountingOracle] 0xd624b08c83baecf0807dd2c6880c3154a5f0b288 function removeMember( address addr, uint256 quorum ) Call data: [1] 0x1Ca0fEC59b86F549e1F1184d97cb47794C8Af58d [2] 5 ``` - `0xd624b08c83baecf0807dd2c6880c3154a5f0b288` is [HashConsensus for AccountingOracle](https://etherscan.io/address/0xd624b08c83baecf0807dd2c6880c3154a5f0b288) - `0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c` is [Aragon Agent contract](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) - `0x1Ca0fEC59b86F549e1F1184d97cb47794C8Af58d` is [the old oracle address](#Instadapp-oracle-rotation) - `5` is the quorum, that remains unchanged and can be verified on [the current contract state](https://etherscan.io/address/0xd624b08c83baecf0807dd2c6880c3154a5f0b288#readContract#F17) 28. Remove the oracle member with address `0x1Ca0fEC59b86F549e1F1184d97cb47794C8Af58d` from HashConsensus for ValidatorsExitBusOracle. ``` 28. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 28.1 28.1. On [HashConsensusValidatorsExitBus] 0x7fadb6358950c5faa66cb5eb8ee5147de3df355a function removeMember( address addr, uint256 quorum ) Call data: [1] 0x1Ca0fEC59b86F549e1F1184d97cb47794C8Af58d [2] 5 ``` - `0x7fadb6358950c5faa66cb5eb8ee5147de3df355a` is [HashConsensus for ValidatorsExitBusOracle](https://etherscan.io/address/0x7fadb6358950c5faa66cb5eb8ee5147de3df355a) - `0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c` is [Aragon Agent contract](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) - `0x1Ca0fEC59b86F549e1F1184d97cb47794C8Af58d` is [the old oracle address](#Instadapp-oracle-rotation) - `5` is the quorum, that remains unchanged and can be verified on [the current contract state](https://etherscan.io/address/0x7fadb6358950c5faa66cb5eb8ee5147de3df355a#readContract#F17) 29. Grant `MANAGE_MEMBERS_AND_QUORUM_ROLE` role on CSHashConsensus to Aragon Agent. This role is required for ability to manage members and quorum on CSHashConsensus contract. ``` 29. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 29.1 29.1. On [CSHashConsensus] 0x71093eff8d8599b5fa340d665ad60fa7c80688e4 function grantRole( bytes32 role, address account ) Call data: [1] 0x66a484cf1a3c6ef8dfd59d24824943d2853a29d96f34a01271efc55774452a51 [2] 0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c ``` - `0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c` is [Aragon Agent contract](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) - `0x71093eff8d8599b5fa340d665ad60fa7c80688e4` is [CSHashConsensus for CSFeeOracle](https://etherscan.io/address/0x71093eff8d8599b5fa340d665ad60fa7c80688e4) announced on [the research forum](https://research.lido.fi/t/community-staking-module/5917/67) and [audited by MixBytes and Ackee Blockchain](#Audits) - `0x66a484cf1a3c6ef8dfd59d24824943d2853a29d96f34a01271efc55774452a51` is `MANAGE_MEMBERS_AND_QUORUM_ROLE` role. The hash can be verified by calling [corresponding function on the contract](https://etherscan.io/address/0x71093eff8d8599b5fa340d665ad60fa7c80688e4#readContract#F5) 30. Remove the oracle member with address `0x1Ca0fEC59b86F549e1F1184d97cb47794C8Af58d` from CSHashConsensus for CSFeeOracle. ``` 30. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 30.1 30.1. On [CSHashConsensus] 0x71093eff8d8599b5fa340d665ad60fa7c80688e4 function removeMember( address addr, uint256 quorum ) Call data: [1] 0x1Ca0fEC59b86F549e1F1184d97cb47794C8Af58d [2] 5 ``` - `0x71093eff8d8599b5fa340d665ad60fa7c80688e4` is [CSHashConsensus for CSFeeOracle](https://etherscan.io/address/0x71093eff8d8599b5fa340d665ad60fa7c80688e4) announced on [the research forum](https://research.lido.fi/t/community-staking-module/5917/67) and [audited by MixBytes and Ackee Blockchain](#Audits) - `0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c` is [Aragon Agent contract](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) - `0x1Ca0fEC59b86F549e1F1184d97cb47794C8Af58d` is [the old oracle address](#Instadapp-oracle-rotation) - `5` is the quorum, that remains unchanged and can be verified on [the current contract state](https://etherscan.io/address/0x71093eff8d8599b5fa340d665ad60fa7c80688e4#readContract#F17) 31. Add oracle member with address `0x73181107c8D9ED4ce0bbeF7A0b4ccf3320C41d12` to HashConsensus for AccountingOracle. ``` 31. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 31.1 31.1. On [HashConsensusAccountingOracle] 0xd624b08c83baecf0807dd2c6880c3154a5f0b288 function addMember( address addr, uint256 quorum ) Call data: [1] 0x73181107c8D9ED4ce0bbeF7A0b4ccf3320C41d12 [2] 5 ``` - `0xd624b08c83baecf0807dd2c6880c3154a5f0b288` is [HashConsensus for AccountingOracle](https://etherscan.io/address/0xd624b08c83baecf0807dd2c6880c3154a5f0b288). - `0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c` is [Aragon Agent contract](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) - `0x73181107c8D9ED4ce0bbeF7A0b4ccf3320C41d12` is [the new oracle address](#Instadapp-oracle-rotation) - `5` is the quorum, that remains unchanged and can be verified on [the current contract state](https://etherscan.io/address/0xd624b08c83baecf0807dd2c6880c3154a5f0b288#readContract#F17) 32. Add oracle member with address `0x73181107c8D9ED4ce0bbeF7A0b4ccf3320C41d12` to HashConsensus for ValidatorsExitBusOracle. ``` 32. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 32.1 32.1. On [HashConsensusValidatorsExitBus] 0x7fadb6358950c5faa66cb5eb8ee5147de3df355a function addMember( address addr, uint256 quorum ) Call data: [1] 0x73181107c8D9ED4ce0bbeF7A0b4ccf3320C41d12 [2] 5 ``` - `0x7fadb6358950c5faa66cb5eb8ee5147de3df355a` is [HashConsensus for ValidatorsExitBus](https://etherscan.io/address/0x7fadb6358950c5faa66cb5eb8ee5147de3df355a). - `0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c` is [Aragon Agent contract](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) - `0x73181107c8D9ED4ce0bbeF7A0b4ccf3320C41d12` is [the new oracle address](#Instadapp-oracle-rotation) - `5` is the quorum, that remains unchanged and can be verified on [the current contract state](https://etherscan.io/address/0x7fadb6358950c5faa66cb5eb8ee5147de3df355a#readContract#F17) 33. Add oracle member with address `0x73181107c8D9ED4ce0bbeF7A0b4ccf3320C41d12` to CSHashConsensus for CSFeeOracle. ``` 33. On [AragonAgent] 0x3e40d73eb977dc6a537af587d48316fee66e9c8c function forward( bytes _evmScript ) Call data: [1] See parsed evm script at 33.1 33.1. On [CSHashConsensus] 0x71093eff8d8599b5fa340d665ad60fa7c80688e4 function addMember( address addr, uint256 quorum ) Call data: [1] 0x73181107c8D9ED4ce0bbeF7A0b4ccf3320C41d12 [2] 5 ``` - `0x71093eff8d8599b5fa340d665ad60fa7c80688e4` is [CSHashConsensus for CSFeeOracle](https://etherscan.io/address/0x71093eff8d8599b5fa340d665ad60fa7c80688e4) announced on [the research forum](https://research.lido.fi/t/community-staking-module/5917/67) and [audited by MixBytes and Ackee Blockchain](#Audits) - `0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c` is [Aragon Agent contract](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c) - `0x73181107c8D9ED4ce0bbeF7A0b4ccf3320C41d12` is [the new oracle address](#Instadapp-oracle-rotation) - `5` is the quorum, that remains unchanged and can be verified on [the current contract state](https://etherscan.io/address/0x71093eff8d8599b5fa340d665ad60fa7c80688e4#readContract#F17)