Try   HackMD

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, LIP-25, and LIP-26 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.

Audits

The solution passed audits by Ackee Blockchain and MixBytes:

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.

    ​​​​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.

    ​​​​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.

    ​​​​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).

    ​​​​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.

    ​​​​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 contract.

    • Staking Router: 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.

    ​​​​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).

    ​​​​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.

    ​​​​9. On [NodeOperatorsRegistry]
    ​​​​0x55032650b14df07b85bf18a3a3ec8e0af2e028d5
    
    ​​​​function finalizeUpgrade_v3()
    
    ​​​​Call data:
    ​​​​[empty]
    
  10. Add new SimpleDVT implementation to SimpleDVT app Repo.

    ​​​​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).

    ​​​​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 (proxy)

    ​​​​12. On [SimpleDVT]
    ​​​​0xae7b191a31f627b4eb1d4dac64eab9976995b433
    
    ​​​​function finalizeUpgrade_v3()
    
    ​​​​Call data:
    ​​​​[empty]
    
  13. Update Accounting Oracle implementation to 0x0e65898527E77210fB0133D00dd4C0E86Dc29bC7.

    ​​​​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.

    ​​​​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.

    ​​​​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.

    ​​​​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.

    ​​​​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.

    ​​​​18. On [EasyTrack]
    ​​​​0xf0211b7660680b49de1a7e9f25c65660f0a13fea
    
    ​​​​function removeEVMScriptFactory(
    ​​​​    address _evmScriptFactory
    ​​​​)
    
    ​​​​Call data:
    ​​​​[1] 0x41CF3DbDc939c5115823Fba1432c4EC5E7bD226C
    
  19. Add new UpdateTargetValidatorLimits factory for SimpleDVT to EasyTrack.

    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

  1. Add Community Staking Module 0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F to Staking Router.

    • Aragon Agent: 0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c (proxy)
    • Staking Router: 0xFdDf38947aFB03C621C71b06C9C70bce73f12999 (proxy)
    • Community Staking Module: 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
    
  2. 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.

    ​​​​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
    
  3. Grant RESUME_ROLE role on CSM to Aragon Agent.

    ​​​​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
    
  4. 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.

    ​​​​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]
    
  5. Revoke RESUME_ROLE role on CSM from Aragon Agent.

    ​​​​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
    
  6. Update initial epoch on CSHashConsensus

    ​​​​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
    
  7. Add CSMSettleElStealingPenalty factory to EasyTrack.

    ​​​​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
  1. 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
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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
    
  7. 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