Lido V2
Stage 0
Website

Protocol Decentralization

Stage 0
Stage 1
Stage 2

  • Upgrades with potential of “loss of funds” not protected with Exit Window >= 7 days OR a sufficient Security Council
  • Dependency with High centralization are mitigated
  • Frontend backups or self-hosting option exists

Risk Areas

Chain
Upgrades
Autonomy
Exit Window
Access

Summary

Lido V2 is a liquid-staking protocol. Liquid staking allows users to deposit ETH for staking to a set of Node Operators who run validators with ETH staked in Lido. In exchange for depositing ETH users get stETH, Liquid staked Ether, a token issued by Lido which represents the staked ETH. This token can then be used throughout DeFi in other protocols, for example, as collateral. Lido takes a 10% fee on the yield, split between the Lido Treasury and Node Operators.

Lido V2 uses a system of Staking Modules as explained in the Protocol Analysis. Each Staking Module has its own set of Node Operators, incentive mechanisms, and potential penalties. Currently three modules exist: the Curated, Simple-DVT, and Community staking modules. Validators in the first two have to be approved by Lido Governance, whereas anyone can become a Node Operator for the Community Staking Module by depositing a bond.

Ratings

Chain

Lido is currently deployed on multiple chains. This review focuses on the Ethereum mainnet deployment.

Chain score: Low

Upgradeability

Most contracts in the Lido protocol can be upgraded. In particular, this includes the deposit, withdrawal and rewards contracts through which ETH deposits and withdrawals are processed and staking yield is distributed. Upgrading those contracts can lead to the loss of funds or unclaimed yield for Lido users.

The staking module contracts NodeOperatorsRegistry and CSModule are also upgradeable. Those contracts are responsible for tracking the Node Operators. Upgrading these contracts may lead to the loss of funds for Node Operators or users (to the benefit of Node Operators).

Furthermore, the governance contracts Voting and Agent can also be upgraded, with the potential impact of replacing the current implementation of the Lido Governance permissions and processes.

Finally, the Consensus Committee is in control of reporting on the state of the beacon chain through the AccountingOracle and ExitBusOracle contracts. If compromised, it could manipulate the stETH supply through false data reporting, leading to inflation or deflation of stETH. Similarly, the guardians of the Deposit Security Module control the creation of new Lido validators and, if colluding with Node Operators, could enable theft of deposited ETH. Both these centralization vectors can thus result in the loss of funds for users.

Upgradeability score: High

Autonomy

Lido relies on Node Operators to operate the validators. As explained in the protocol analysis, users' staked funds are not in control by the Node Operators. This is because Lido enforces that these funds can only be withdrawn to a fixed withdrawal account, that is controlled by the Lido protocol. Nonetheless, the Node Operators may misbehave and lose funds due to slashing. In addition to that, Node Operators could steal parts of the earned staking yield, by redirecting them to their own address. In the worst case, a validator can lose up to 16 ETH to slashing events before it is forcefully exited and the remaining ETH withdrawn to Lido's withdrawal account.

Lido addresses those risks differently for each staking module. In the Curated Module, the Node Operators are trusted and approved by Lido Governance. Currently 36 Node Operators exist which manage on average 7'779 validators each. Different diversification measures are implemented to mitigate the risk of centralized infrastructure. This is detailed on a dedicated dashboard. We computed that in a worst-case scenario, the failure of a Node Operator in the Curated Module would impact less than 1% of the total funds staked through Lido (see more in dependencies).

In the Community Module, anyone can become a Node Operator, but needs to deposit a bond of up to 2.4 ETH for the first validator or 1.3 ETH for all additional validators. Funds lost by the Node Operators in the Community Module, eg due to slashing or theft of staking yield, are compensated through this bond and additional penalties for the Node Operators applied on top. Currently 312 Node Operators are active in the Community Module with an average of 19 validators operated by each. Additional losses, that exceed the Node Operator's deposited bond, are covered by the Lido Treasury.

Autonomy score: Low

Exit Window

Lido Governance is an onchain governance system that allows LDO holders to vote on contract upgrades and other governance matters. The voting period lasts 5 days, only the first 3 of which can be used to approve a proposal, with 2 additional days to object to an accepted proposal. No Exit Window is enforced once the voting period has ended.

A system of Easytrack is in place for a set of pre-approved actions to be executed without requiring a quorum. Actions in the Easytrack contract have a 3-day delay which can be vetoed with more than 0.5% of the voting power. Different multisigs can create Easytrack actions which may make treasury payments, control the Simple-DVT Module, or settle penalties in the Community Module. The Simple-DVT Module Committee has the permission to create Easytrack actions for the Simple-DVT Module, these actions include the approval of new Node Operators on the Simple-DVT Module and thus potentially impact user funds. The Simple-DVT Module Committee complies with the Security Council requirements, thus mitigating the respective risks. The Easytrack can be paused by the Emergency Brakes multisig or by Lido Governance.

Finally, multiple Emergency Actions exist which can be initiated by different Lido multisig accounts. Any signer in the DepositSecurityModule can trigger the pause of all deposits without delay. In addition to that, the Community Staking Module can be completely paused by the Community Staking Module Committee, this includes the registering of new Node Operators and claiming rewards.

Exit Window score: High

Accessibility

Lido has a main frontend at stake.lido.fi. The different releases of this frontend are published on IPFS and instructions to access the latest release using an IPFS gateway of choice are available on the public docs.

In addition to that, multiple third-party frontends, applications and wallets, such as Metamask, Argent, and Infinex, exist and enable direct access to the Lido protocol. In fact, Lido offers a public library of UI integration elements that enables third parties to seamlessly build more frontends to Lido.

Accessibility score: Low

Conclusion

Lido receives a High Centralization score in terms of Upgradeability and Exit Window. This is due to its contracts allowing for critical upgrades that are not protected with a sufficient Exit Window. Furthermore, its DepositSecurityModule multisig exposes critical permissions without meeting the Security Council requirements. For these reasons, Lido achieves Stage 0.

Lido could reach Stage 1 by enforcing a 7-day Exit Window to the critical smart contract upgrades or any action that may result in the loss of user funds or adopting a Security Council to safeguard those actions. It would also need to update the DepositSecurityModule to a Security Council.

Lido could reach Stage 2 by implementing a 30-day Exit Window and replacing the Consensus Committee and DepositSecurityModule through sufficiently decentralizated solutions.

Overall score: Stage 0

Reviewer Notes

⚠️ Lido has different treasury management multisigs all listed here. For practical reasons and readability, our securty council section only lists the most important committees and multisigs.

Protocol Analysis

Liquid Stakings

An overview of Lido's liquid staking protocol can be seen below.

Overview of Lido

Users can stake their ETH with Lido through the Lido contract and obtain stETH in return. Users can then redeem their stETH for ETH by entering a withdrawal queue in interacting directly with the WithdrawalQueueuErc721. The deposits and withdrawals may balance each other, but when excess ETH is deposited or more stETH is redeemed, Ethereum validators operated by different Node Operators are created or asked to exit.

A Consensus Committee is trusted to report the relevant state of the consensus layer onchain. The report includes information on the number of Lido validators on the consensus layer, their cumulative balance, exited validators, the balance of the rewards and withdrawal vaults, and the simulated share rate (total ETH per share emitted). This information is then processed and transmitted to other Lido contracts. It will influence how shares are rebased and whether validators may be created or asked to exit in future slots. The report of wrong data could therefore lead to the loss of unclaimed yield or loss of user funds. This makes the Consensus Committee a critical dependency.

The governance contract Voting and its Agent have managing rights on all apps and ossifiable proxies respectively. This includes contract upgrades.

Validator creation

When enough ETH is deposited into the contract, the StakingRouter chooses a pair of validator keys from either the Curated, Simple-DVT, or Community staking modules to assign funds to, following a specific algorithm and the governance chosen allocation. An offchain set of 6 guardians form the DepositSecurityModule. They coordinate to sign the Merkle root of the deposit contract and trigger the deposit of 32 ETH for the chosen validator keys. The guardians have been introduced to counter a frontrunning vulnerability from validators and ensure the validators' withdrawal address is the Lido WithdrawalsManagerProxy.

Validator exit

Validators may be asked to exit to provide ETH to the withdrawal queue. The signal to exit will be sent during one of the oracle reports, the oracles should then withdraw all 32 ETH staked. Those funds are sent automatically to the WithdrawalsManagerProxy. If validators are not exited they are declared stuck and the Node Operators will be penalized.

Staking Rewards

Validator rewards come from two sources: the consensus and execution layers. The consensus layer rewards come from the validators' participation in the consensus and are automatically distributed to the validators' withdrawal address. This address has to be the same for all Lido validators and is set to the WithdrawalsManagerProxy. Execution layer rewards include MEV and are not fixed. The Node Operators are trusted to send those rewards to the LidoExecutionLayerRewardsVaultand are penalized if they fail to do so.

Both types of rewards are combined and distributed to all stETH holders after a 10% fee split between the treasury and the staking modules (Node Operators). The specific fee allocation between treasury and module differs for each staking module.

Staking Modules

Lido allocates funds to different staking modules that handle their own set of Node Operators and incentive mechanisms. Each new module is approved through governance proposals and 3 modules are currently deployed: the Curated, Simple-DVT, and Community staking modules. We detail each of those below.

Curated and Simple-DVT Staking Modules

The Curated Module is the original staking module for Lido. It is made of professional Node Operators who have been approved by the governance. At the time of writing more than 95% of Lido validators are operated by the Curated staking module.

The Simple-DVT Module is an experimenting module to develop Distributed Validator Technologies and operates with implementations from both Obol and SSV Network. New Node Operators are approved by governance through the Easytrack process, which is explained in the Governance section.

Both of those modules are represented onchain by the contracts using the same implementation of the NodeOperatorsRegistry which simply stores information on the registered Node Operators, their validator keys, and potential penalties. The Curated module's registry is solely managed by the governance's Agent, while the Simple-DVT can additionally be managed through Easytrack by the Simple-DVT Module Committee, but upgraded by the Agent only.

Community Staking Module

An overview of the Community Staking Module can be seen below.

Overview of Lido's Community Staking Module

The Community Staking Module (CSM) is a permissionless module. Node Operators can register themselves into the module by paying a bond per pair of validator keys added. Node Operators interact with the CSModule contract which deposits data and interacts with the StakingRouter. An additional CSAccounting is responsible for the management of bonds, rewards, and penalties. The bonding curve used to determine bond prices can also be updated through this contract. The CSEarlyAdoption contract keeps track of early adopters who have lower bond prices.

Finally, CSFeeDistributor handles the distribution of rewards to Node Operators. It receives the non-distributed rewards from the CSModule every time the StakingRouter mints additional Node Operator rewards. It accepts calls from CSAccounting with reward claims and stores the balances of claims from each Node Operator as well as the late Merkle proof of the rewards distribution Merkle tree. It receives this root from the Consensus Committee through the CSOracle.

Those contracts are upgradeable by the governance through the Agent contract. The Agent also holds the right to change the exit charge, which could abuse the Node Operators' deposited bonds. The Community Staking Module Committee can also report reward stealing from Node Operators in order to penalize them. The committee may also pause the staking module at any time, prohibiting Node Operators from claiming their rewards until it is resumed by the governance.

Dependencies

Lido relies on Node Operators to operate the validators. The funds are not in the control of the Node Operators and will be returned to Lido in case of withdrawal. Nonetheless, the Node Operators may misbehave and lose some of the funds due to slashing.

Lido addresses this issue differently for each staking module. This is explained in the respective staking modules' subsections of the protocol analysis.

We focus the analysis on the Curated Node Operators since they operate 94% of the Lido validators and have the most centralization. The Curated Node Operators have different diversification measures to mitigate the risk of bugs or infrastructure failures. This is detailed on a dedicated dashboard. In the worst case of a Curated Node Operator getting slashed on all his validators, this would result in a loss of 1.8 ETH per validator, assuming a non-Ethereum-wide adversarial coordination. On the other hand, if all validators of a given Curated Node Operator go down and all keys are lost due to infrastructure issues, those validators would lose 15.8% of their funds annually due to inactivity penalties down to 16.75 ETH (as detailed in [1], [2]), assuming no "non-activity" leak phase. Once it reaches 16.75 ETH the remaining balance is automatically withdrawn. In such instance and taking the current Lido statistics, 2.65% of the funds would become inaccessible, with 1.26% being definitely lost overtime and the remaining being frozen for a long period.

In both cases, this would impact less than 3% of the funds locked in the Lido protocol.

The operators in the Simple-DVT and Community modules represent the same risk of potential losses per validator, but those are less impactful due to; a greater diversification of Node Operators in the case of the the Simple-DVT module, and the security bond deposited by operators in the Community module.

Governance

Overview of Lido's Governance

Lido uses Aragon for its governance model. Aragon has Apps which are referred to by namespace and app ID. The Kernel app is the core contract in the Aragon framework. It acts as both a registry for applications and the central permissions management reference. The Kernel forwards all permission checks to the ACL which stores all the access control conditions for Lido Aragon Apps All the Aragon Apps currently used for the Lido Governance are upgradeable.

The Voting app is the main governance entry point in which users can vote and create proposals. Proposals that interact with Aragon Apps (AppProxy contracts) are executed through Voting while proposals interacting with other contracts such as OssifiableProxy are executed through the Agent.

The TokenManager is an Aragon application that manages the LDO governance token, providing functionality for token distribution, vesting, and control. The Finance contract serves as a financial controller. It manages treasury funds through a Vault and handles recurring as well as one-time payments.

An Easytrack handles a set of pre-approved governance operations that can be executed after a waiting period if there is no governance objection. The Factories through which operations can be created are created by the governance and only a trusted caller can create the operations. For operations on the Simple-DVT and Community modules, only their respective committees can create motions. Once a motion is created it can be cancelled by 0.5% of the voting power during the 3-day delay. In addition to managing the staking modules, the EasyTrack is also used for treasury payments through the Finance contract. A variety of multisigs is allowed to make different payments through the EasyTrack, the complete list is documented by Lido here.

Exit Window

The voting period on Lido Governance proposals is made of 5 days, only the first 3 of which can be used to approve a proposal, with 2 additional days to object to an accepted proposal. Once the voting period ends there are no delays before the proposal can be executed. Anyone can create a proposal, but it is only valid if at least 5% of the total LDO tokens are used to vote for one of the options. The proposal passes if more than 50% of the votes are in favor.

Security Council

This table shows the external permission owners and how they are rated against the security council criteria.

NameAccountType≥ 7 signers≥ 51% threshold≥ 50% non-insiderSigners public
Consensus Committee (HashConsensus)0x98be4a407Bff0c125e25fBE9Eb1165504349c37dMultisig 5/9✅ (source)
Relay Maintenance Committee0x98be4a407Bff0c125e25fBE9Eb1165504349c37dMultisig 5/7✅ (source)
DepositSecurityModule (Guardians)0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fDMultisig 4/6
EmergencyBrakes0x73b047fe6337183A454c5217241D780a932777bDMultisig 3/5
Community Staking Module Committee0xc52fc3081123073078698f1eac2f1dc7bd71880fMultisig 4/6✅ (source)
Simple-DVT Module Committee0xc52fc3081123073078698f1eac2f1dc7bd71880fMultisig 4/7✅ (source)

Most Lido multisigs, as well as treasury management multisigs, are listed in the Lido docs with their corresponding capabilities here.

Contracts & Permissions

Contracts

Contract NameAddress
LidoLocator (Proxy)0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb
LidoLocator (Implementation)0x3abc4764f0237923d52056cfba7e9aebf87113d3
Lido (Proxy)0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84
Lido (Implementation)0x17144556fd3424edc8fc8a4c940b2d04936d17eb
WstETH0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0
EIP712StETH0x8F73e4C2A6D852bb4ab2A45E6a9CF5715b3228B7
StakingRouter (Proxy)0xFdDf38947aFB03C621C71b06C9C70bce73f12999
StakingRouter (Implementation)0x89eDa99C0551d4320b56F82DDE8dF2f8D2eF81aA
DepositSecurityModule0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fD
LidoExecutionLayerRewardsVault0x388C818CA8B9251b393131C08a736A67ccB19297
WithdrawalQueueERC721 (Proxy)0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1
WithdrawalQueueERC721 (Implementation)0xE42C659Dc09109566720EA8b2De186c2Be7D94D9
WithdrawalsManagerProxy0xB9D7934878B5FB9610B3fE8A5e441e8fad7E293f
WithdrawalVault0xCC52f17756C04bBa7E377716d7062fC36D7f69Fd
Burner0xD15a672319Cf0352560eE76d9e89eAB0889046D3
MinFirstAllocationStrategy0x7e70De6D1877B3711b2bEDa7BA00013C7142d993
LDO (MiniMeToken)0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32
InsuranceFund0x8B3f33234ABD88493c0Cd28De33D583B70beDe35
EVMScriptExecutor0xFE5986E06210aC1eCC1aDCafc0cc7f8D63B3F977
EasyTrack0xF0211b7660680B49De1A7E9f25C65660F0a13Fea
HashConsensus (AccountingOracle)0xD624B08C83bAECF0807Dd2c6880C3154a5F0B288
Agent (Governance)0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c
Voting (Governance)0x2e59A20f205bB85a89C53f1936454680651E618e
Finance (proxy)0xB9E5CBB9CA5b0d659238807E84D0176930753d86
Kernel (proxy)0xb8FFC3Cd6e7Cf5a098A1c92F48009765B24088Dc
TokenManager (proxy)0xf73a1260d222f447210581DDf212D915c09a3249
ACL (proxy)0x9895f0f17cc1d1891b6f18ee0b483b6f221b37bb
APMRegistry (proxy)0x0cb113890b04b49455dfe06554e2d784598a29c9
HashConsensus (ExitBusOracle)0x7FaDB6358950c5fAA66Cb5EB8eE5147De3df355a
ValidatorsExitBusOracle (Proxy)0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e
AccountingOracle (Proxy)0x852deD011285fe67063a08005c71a85690503Cee
MEV Boost Relay Allowed List0xF95f069F9AD107938F6ba802a3da87892298610E
GateSeal0xEe06EA501f7d9DC6F4200385A8D910182D155d3e
GateSeal0xf9C9fDB4A5D2AA1D836D5370AB9b28BC1847e178
GateSeal Factory0x6c82877cac5a7a739f16ca0a89c0a328b8764a24
Node Operators Registry (Proxy) (Curated Module)0x55032650b14df07b85bF18A3a3eC8E0Af2e028d5
Node Operators Registry (Proxy) (DVT Module)0xaE7B191A31f627b4eB1d4DaC64eaB9976995b433
NodeOperatorsRegistry (Implementation)0x1770044a38402e3cfca2fcfa0c84a093c9b42135
CSModule (Proxy)0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F
CSModule (Implementation)0x8daea53b17a629918cdfab785c5c74077c1d895b
CSAccounting (Proxy)0x4d72BFF1BeaC69925F8Bd12526a39BAAb069e5Da
CSAccounting (Implementation)0x71FCD2a6F38B644641B0F46c345Ea03Daabf2758
CSFeeDistributor (Proxy)0xD99CC66fEC647E68294C6477B40fC7E0F6F618D0
CSFeeDistributor (Implementation)0x17Fc610ecbbAc3f99751b3B2aAc1bA2b22E444f0
CSVerifier0x0c345dFa318f9F4977cdd4f33d80F9D0ffA38e8B
CSEarlyAdoption0x3D5148ad93e2ae5DedD1f7A8B3C19E7F67F90c0E
CSFeeOracle (Proxy)0x4D4074628678Bd302921c20573EEa1ed38DdF7FB
CSFeeOracle (Implementation)0x919ac5C6c62B6ef7B05cF05070080525a7B0381E
HashConsensus (CSFeeOracle)0x71093efF8D8599b5fA340D665Ad60fA7C80688e4
GateSeal (CSModule) (CSM Committee)0x5cfca30450b1e5548f140c24a47e36c10ce306f0
GateSeal (CSAccounting) (CSM Committee)0x16Dbd4B85a448bE564f1742d5c8cCdD2bB3185D0

All Permission Owners

Entity NameAddressType
Lido (Proxy)0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84Contract
Agent (Governance)0x3e40D73EB977Dc6a537aF587D48316feE66E9C8cContract
Voting (Governance)0x2e59A20f205bB85a89C53f1936454680651E618eContract
Finance (proxy)0xB9E5CBB9CA5b0d659238807E84D0176930753d86Contract
MEV Boost Relay Allowed List0xF95f069F9AD107938F6ba802a3da87892298610EContract
AccountingOracle (Proxy)0x852deD011285fe67063a08005c71a85690503CeeContract
EmergencyBrakes0x73b047fe6337183A454c5217241D780a932777bDContract
EVMScriptExecutor0xFE5986E06210aC1eCC1aDCafc0cc7f8D63B3F977Contract
EasyTrack0xF0211b7660680B49De1A7E9f25C65660F0a13FeaContract
HashConsensus0xD624B08C83bAECF0807Dd2c6880C3154a5F0B288Contract
WithdrawalsManagerProxy0xB9D7934878B5FB9610B3fE8A5e441e8fad7E293fContract
LidoExecutionLayerRewardsVault0x388C818CA8B9251b393131C08a736A67ccB19297Contract
CSVerifier0x3dfc50f22aca652a0a6f28a0f892ab62074b5583Contract
CSFeeOracle (Proxy)0x4D4074628678Bd302921c20573EEa1ed38DdF7FBContract
CSFeeDistributor (Proxy)0xD99CC66fEC647E68294C6477B40fC7E0F6F618D0Contract
CSAccounting (Proxy)0x4d72BFF1BeaC69925F8Bd12526a39BAAb069e5DaContract
CSModule (Proxy)0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83FContract
Relay Maintenance Committee0x98be4a407Bff0c125e25fBE9Eb1165504349c37dMultisig
DepositSecurityModule (Guardians)0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fDMultisig
Community Staking Module Committee0xc52fc3081123073078698f1eac2f1dc7bd71880fMultisig 4/6
GateSeal (CSModule) (CSM Committee)0x5cfca30450b1e5548f140c24a47e36c10ce306f0Multisig 4/6
GateSeal (CSAccounting) (CSM Committee)0x16Dbd4B85a448bE564f1742d5c8cCdD2bB3185D0Multisig 4/6

Permissions

ContractFunctionImpactOwner
LidostopStops all staking similarly to pauseStaking, and prevents transfer of stETH as well as beacone chain oracle submissions. This is a critical emergency function that completely halts the users' ability to enter and exit the system.Voting
LidoresumeResumes all operations paused after stop was called.Voting
LidopauseStakingStops accepting new ETH deposits to the protocol. This ensures new funds do not enter the system without affecting other operations.Voting
LidoresumeStakingRe-enables staking of new ETH into the contract.Voting
LidosetStakingLimitLimits the rate and total stake of ETH allows into the contract. This is done by imposing a maximum stake limit and a rate of increase per block. This will prevent users from depositing additional ETH if the limit is reached.Voting
LidoremoveStakingLimitRemoves the staking limit, allowing unlimited deposits.Voting
LidoreceiveELRewardsA function to allow the rewards vault to send rewards to this contract without them being considered user deposits.getLidoLocator().elRewardsVault()
LidoreceiveWithdrawalsA function to allw the WithdrawalVault to receive funds from exited validators without them being considered user deposits.WithdrawalVault
LidohandleOracleReportHandles the oracle data and takes a series of actions accordingly. Actions include process withdrawals, burning shares, distribute rewards, and rebase tokens. Malicious or wrong data reporting could lead to accounting errors and potential loss of user funds and unclaimed yield.AccountingOracle
LidounsafeChangeDepositedValidatorsUnsafely changes the deposited validators counter. This may be used to onboard external validators to Lido. This is function could dangerously change the accounting metrics in Lido as it changes a parameter without any safeguards. Such a change could artificially inflate or deflate the value of stETH or manipulate the expected returns calculation.0x0 (Managed by Voting)
LidodepositDeposits 32 ETH into the ethereum staking contract to create a new validator. This can only be called by the DepositSecurityModule which will make sure the call reverts if the state of the deposit contract has changed between the submission and execution of the deposit.DepositSecurityModule
LidotransferToVaultDefault recovery function in Aragon Apps. Irreversably disabled.0x0
LidoLocator (Proxy)proxy__ossifyOssifies the proxy. This freezes the current implementation of the LidoLocator and effectively makes it non-upagreable by changing the proxy admin to the zero address.Agent
LidoLocator (Proxy)proxy__changeAdminChanges the proxy admin. The admin can update the entire implementation and logic of the LidoLocator.Agent
LidoLocator (Proxy)proxy__upgradeToUpgrades the implementation of the LidoLocator This can change the entire logic of the contract including change ownership of funds locked in the contract, if any.Agent
LidoLocator (Proxy)proxy__upgradeToAndCallUpgrades the implementation of the LidoLocator (similarly to _proxy__upgradeTo _), and then calls a function in the new contract.Agent
StakingRouter (Proxy)proxy__ossifyOssifies the proxy. This freezes the current implementation of the StakingRouter and effectively makes it non-upagreable by changing the proxy admin to the zero address.Agent
StakingRouter (Proxy)proxy__changeAdminChanges the proxy admin. The admin can update the entire implementation and logic of the StakingRouter.Agent
StakingRouter (Proxy)proxy__upgradeToUpgrades the implementation of the StakingRouter This can change the entire logic of the contract including change ownership of funds locked in the contract, if any.Agent
StakingRouter (Proxy)proxy__upgradeToAndCallUpgrades the implementation of the StakingRouter (similarly to _proxy__upgradeTo _), and then calls a function in the new contract.Agent
StakingRouter (Implementation)addStakingModuleRegisters a staking module specifying a name, contract, fee settings, and limits on the shares and validators. The new module can receive ETH deposits. Adding a malicious staking modules could lead to the loss of vunds allocated to new deposits.Agent
StakingRouter (Implementation)updateStakingModuleUpdates the settings of an existing Staking Module. This can change the fees or the limits set on deposits and staking shares.Agent
StakingRouter (Implementation)updateTargetValidatorsLimitsAdjusts the maximum number of validators a specific node operator within a staking module can manage. This influences risk distribution within the protocol.Agent
StakingRouter (Implementation)updateRefundedValidatorsCountUpdates the count of validators that have been refunded for a specific node operator.Agent
StakingRouter (Implementation)reportRewardsMintedReports rewards that have been minted and notifies each module of the rewards they received by calling a dedicated function in the respective module's contract.Lido (Proxy)
StakingRouter (Implementation)updateExitedValidatorsCountByStakingModuleUpdates the total numbers of exited validators for each module. This is used to determine and confirm the number of active validators.AccountingOracle
StakingRouter (Implementation)reportStakingModuleExitedValidatorsCountByNodeOperatorFor a specific staking module, reports the total number of exited validators for each node operator.AccountingOracle
StakingRouter (Implementation)unsafeSetExitedValidatorsCountOverrides the number of exited validators for a given node operator in a given staking module, without any safety check. This function cannot be called from the current AccountingOracle, but the Oracle could be upgraded to a version which can call this function if it isn't ossified.AccountingOracle
StakingRouter (Implementation)reportStakingModuleStuckValidatorsCountByNodeOperatorUpdates stuck validators counts per node operator for the given staking module. Stuck validators are validators who didn't comply with the exit signal and who may be penalized.AccountingOracle
StakingRouter (Implementation)onValidatorsCountsByNodeOperatorReportingFinishedCalled when the reporting of exited and stuck validators is over. This function will call the different staking modules to update their data.AccountingOracle
StakingRouter (Implementation)decreaseStakingModuleVettedKeysCountByNodeOperatorReduces the number of validators a specific node operator can run. This doesn't affect existing validators but may prevent the node operators to create new validators if it has reached the new limit count.DepositSecurityModule
StakingRouter (Implementation)setStakingModuleStatusChanges the status of a staking module. Modules may be Active, Paused, or Stopped. When Paused no more deposits can be added but the rewards are still distributed. If stopped no more deposits can be added and the rewards go to the protocol treasury instead.Agent
StakingRouter (Implementation)depositDeposits batchs of 32 ETH to create validators in a given staking module. The staking module is specified by the Lido contract which is the only possible caller, and the underlaying staking module constract specifies the node operator public keys.Lido (Proxy)
StakingRouter (Implementation)setWithdrawalCredentialsSets the withdraw credentials of each module. The credentials are used to withdraw ETH on the Consensus Layer side. No address currently has the permission to change those credentials.0x0
StakingRouter (Implementation)grantRoleGrants a role within the contract. Roles are used to handle the access control of all functions above. Granting a role to a malicious actor could put lead to the hijack of deposited funds.Agent
StakingRouter (Implementation)revokeRoleRevokes a role from a specific address.Agent
DepositSecurityModulesetOwnerSets the owner of the contract. This role is dedicated to the DAO. The owner can add new guardians, change the quorum, and unpause the deposits.Agent
DepositSecurityModulesetPauseIntentValidityPeriodBlocksSets the window of validity of a pause intent. This is the reaction time allowed for guardians to pause deposits. When a guardian wants to pause deposits it specifies a block number, the pause is only applied if the current block number is within the validity period of the specified block. This is to avoid replay of pause messages.Agent
DepositSecurityModulepauseDepositsPauses the deposits. Funds can no longer be deposited into new validators until deposits are unpaused. This can be called by any guardian when a frontrunning by a node operator is suspected and prevents the loss of user funds through deposits.DepositSecurityModule (Guardian)
DepositSecurityModuleunvetSigningKeysUnvets signing keys for the given node operators. This can be called by any guardian when a frontrunning by a node operator is suspectedand prevents the loss of user funds through deposits.DepositSecurityModule (Guardian)
DepositSecurityModuledepositsBufferedETHDeposits ETH into a given validator using Lido.deposit. The message must include at least 4/6 signatures from guardians for it to be valid.DepositSecurityModule (Guardians)
DepositSecurityModulesetMaxOperatorsPerUnvettingSets a limit on how many node operators can have their vetted signing keys unvetted in one transaction, as a safeguard against drastic changes.Agent
DepositSecurityModulesetGuardianQuorumSets the quorum value. This is the minimum number of guardians that need to take part in a deposit for it to be valid.Agent
DepositSecurityModuleaddGuardianAdds a guardian and sets a new custom quorum value. Guardians co-sign deposits to reduce the risk of collusion with node operators.Agent
DepositSecurityModuleaddGuardiansAdds multiple guardians and sets a new custom quorum value. Guardians co-sign deposits to reduce the risk of collusion with node operators.Agent
DepositSecurityModuleremoveGuardianRemoves a guardian andAgent
DepositSecurityModuleunpauseDepositsunpauses the deposits without delay.Agent
AccountingOracle (Proxy)proxy__ossifyOssifies the proxy. This freezes the current implementation of the AccountingOracle and effectively makes it non-upagreable by changing the proxy admin to the zero address.Agent
AccountingOracle (Proxy)proxy__changeAdminChanges the proxy admin. The admin can update the entire implementation and logic of the AccountingOracle.Agent
AccountingOracle (Proxy)proxy__upgradeToUpgrades the implementation of the AccountingOracle This can change the entire logic of the contract including change ownership of funds locked in the contract, if any.Agent
AccountingOracle (Proxy)proxy__upgradeToAndCallUpgrades the implementation of the AccountingOracle (similarly to _proxy__upgradeTo _), and then calls a function in the new contract.Agent
AccountingOracle (Implementation)submitReportDataSubmits a report for a given reference slot on the beacon chain. This report includes information on the number of Lido validators on the consensus layer, their cumulative balance, exited validators, balance of the rewards and withdrawal vaults, and the simulated share rate (total ether / all shares emitted). This information is then processed and transmitted to other Lido contracts. It will influence how shares are rebased and whether validators will be exited/created in future slots. The report of wrong data could therefore lead to the loss of unclaimed yield or loss of user funds.HashConsensus (Committee Members)
AccountingOracle (Implementation)submitReportExtraDataEmptyInforms that no extra data is submitted for the given slot.HashConsensus (Committee Members)
AccountingOracle (Implementation)submitReportExtraDataListSubmits extra data for a slot. This allows the consensus committee to compute the extra data asynchronously and report it later than the main report data. If the deadline has passed or the next report has started then no more extra data can be added for a slot.HashConsensus (Committee Members)
AccountingOracle (Implementation)submitConsensusReportPushes the hash of the report built by the consensus committee. This ensures that the data reported and processed matches the consensus.HashConsensus
AccountingOracle (Implementation)discardConsensusReportDiscards the report for the current slot. This can only be called when (all conditions met): a consensus was pushed, the processing hasn't started, the deadline is not expired, and there is no consensus to replace the current one. This may happen if a member changers their report, is moved from the set, or the quorum value gets increased.HashConsensus
AccountingOracle (Implementation)setConsensusContractSets the consensus contract to use. The consensus contract is currently HashConsensus, it can decide who is a committee member and push the consensus proof to the AccountingOracle.Agent
AccountingOracle (Implementation)setConsensusVersionSets the current consensus version used. The version refers to a set of rules that the members must agree on when building the report.Agent
AccountingOracle (Implementation)grantRoleGrants a role within the contract to a specific address. There are roles to allow the management of the consensus contract or the right to submit data. None of these role are currently in use.Agent
AccountingOracle (Implementation)revokeRoleRevokes a role for a specific address.Agent
HashConsensussubmitReportUsed by oracle members to submit hash of the data calculated for the given reference slot. If consensus is reached (more submissions of the same report than the quorum amount) the HashConsensus contract submits this report to the processing contract (either AccountingOracle or ValidatorsExitBusOracle) to enable processing.HashConsensus (Committee Members)
HashConsensusdisableConsensusTemporarily disables consensus by increasing the quorum value an unreachable number. This prevents any consensus from being reached. Consensus needs to be re-enabled using setQuorum.Agent
HashConsensusaddMemberAdds a member to the consensus committee. Members can contribute to building consensus and submit reports.Agent
HashConsensusremoveMemberRemoves a member from the consensus committee.Agent
HashConsensussetQuorumSets the quorum value. This is the amount of equal reports that need to be accumulated for each slot for a report to be considered valid and ready for processing. A value higher the the number of members in the committee would make consensus impossible.Agent
HashConsensusupdateInitialEpochChanges when to oracle reporting system starts, given it hasn't started yet. This function can no longer becalled.Agent
HashConsensussetFastLaneLengthSlotsSets the duration of a fast lane rotation in slots. Members in the fast lane can (and are expected to) submit their report during a dedicated fast lane time window before submissions are open to all other members. The members in the fast lanes are rotated at a rate set using this function. The goal is to enforce active participation of all oracle members, preventing lazy copying.Agent
HashConsensussetFrameConfigSets the configuration of frames. Frames are time window of equal lenghts referencing the processing of a slot and the corresponding deadline. A report based on the consensus layer must be built and consensus must be reached before each deadline.Agent
HashConsensussetReportProcessorSets the processor contract to which the reports are sent over to. There are two HashConsensus contracts in use, one that uses the AccountingOracle and one that uses ValidatorsExitBusOracle as processor.Agent
HashConsensusgrantRoleGrants a role within the contract to a specific address. This may allow addresses to execute any of the functions above related to the specific role.Agent
HashConsensusrevokeRoleRevokes a role for a specific address.Agent
ValidatorsExitBusOracle (Proxy)proxy__ossifyOssifies the proxy. This freezes the current implementation of the ValidatorsExitBusOracle and effectively makes it non-upagreable by changing the proxy admin to the zero address.Agent
ValidatorsExitBusOracle (Proxy)proxy__changeAdminChanges the proxy admin. The admin can update the entire implementation and logic of the ValidatorsExitBusOracle.Agent
ValidatorsExitBusOracle (Proxy)proxy__upgradeToUpgrades the implementation of the ValidatorsExitBusOracle This can change the entire logic of the contract including change ownership of funds locked in the contract, if any.Agent
ValidatorsExitBusOracle (Proxy)proxy__upgradeToAndCallUpgrades the implementation of the ValidatorsExitBusOracle (similarly to proxy__upgradeTo _), and then calls a function in the new contract.Agent
ValidatorsExitBusOracle (Implementation)resumeResumes the contract if it was paused.Agent
ValidatorsExitBusOracle (Implementation)pauseForPauses the validator exit request processing for a specified duration.GateSeal Committee (expired)
ValidatorsExitBusOracle (Implementation)pauseUntilPauses the validator exit request processing until a specific timestamp.GateSeal Committee (expired)
ValidatorsExitBusOracle (Implementation)submitReportDataSubmits report data containing validator exit requests for processing.HashConsensus (Committee Members)
ValidatorsExitBusOracle (Implementation)submitConsensusReportPushes the hash of the exit report built by the consensus committee. This ensures that the data reported and processed matches the consensus.HashConsensus
ValidatorsExitBusOracle (Implementation)discardConsensusReportDiscards the validator exit report for the current slot. This can only be called when (all conditions met): a consensus was pushed, the processing hasn't started, the deadline is not expired, and there is no consensus to replace the current one. This may happen if a member changers their report, is moved from the set, or the quorum value gets increased.HashConsensus
ValidatorsExitBusOracle (Implementation)setConsensusContractSets the consensus contract to use. The consensus contract is currently HashConsensus, it can decide who is a committee member and push the consensus proof to the ValidatorsExitBusOracle.Agent
ValidatorsExitBusOracle (Implementation)setConsensusVersionSets the current consensus version used. The version refers to a set of rules that the members must agree on when building the report.Agent
ValidatorsExitBusOracle (Implementation)grantRoleGrants a role within the contract to a specific address. The Pause role allows the role owners to pause the exit request processing. There are roles to allow the management of the consensus contract or the right to submit data. These role are currently not in use.Agent
ValidatorsExitBusOracle (Implementation)revokeRoleRevokes a role for a specific address.Agent
WithdrawalVault (Proxy)proxy_upgradeToUpgrades the implementation of the WithdrawalVault This can change the entire logic of the contract including change ownership of funds locked in the contract, if any.Voting
WithdrawalVault (Proxy)proxy_changeAdminChanges the proxy admin. The admin can update the entire implementation and logic of the WithdrawalVault.Voting
WithdrawalVault (Implementation)withdrawWithdrawalsTransfer the amount of accumulated withdrawals (from validators) to the Lido contract.Lido (contract)
LidoExecutionLayerRewardsVaultwithdrawRewardsMove all accumulated Execution Layer rewards (MEV, tx priority) to the Lido contract. Can only be called by the Lido contract.Lido (contract)
WithdrawalQueueERC721 (Proxy)proxy__ossifyOssifies the proxy. This freezes the current implementation of the WithdrawalQueueERC721 and effectively makes it non-upagreable by changing the proxy admin to the zero address.Agent
WithdrawalQueueERC721 (Proxy)proxy__changeAdminChanges the proxy admin. The admin can update the entire implementation and logic of the WithdrawalQueueERC721.Agent
WithdrawalQueueERC721 (Proxy)proxy__upgradeToUpgrades the implementation of the WithdrawalQueueERC721 This can change the entire logic of the contract including change ownership of funds locked in the contract, if any.Agent
WithdrawalQueueERC721 (Proxy)proxy__upgradeToAndCallUpgrades the implementation of the WithdrawalQueueERC721 (similarly to _proxy__upgradeTo _), and then calls a function in the new contract.Agent
WithdrawalQueueERC721 (Implementation)finalizeFinalizes a batch of withdrawal requests, allowing the corresponding ETH to be claimed by users. This is meant to be called by the Lido contract once the corresponding ETH has been unlocked from the Withdrawal vault.Lido (contract), Agent
WithdrawalQueueERC721 (Implementation)pauseForPause withdrawal requests placement and finalization for particular _duration. Claiming finalized requests will still be available. The current multisig with this permission is expired and can no longer execute this function.Seal Committee (expired), Agent
WithdrawalQueueERC721 (Implementation)pauseUntilPause withdrawal requests placement and finalization until a given timestamp. Claiming finalized requests will still be available. The current multisig with this permission is expired and can no longer execute this function.Seal Committee (expired), Agent
WithdrawalQueueERC721 (Implementation)resumeResumes withdrawal requests placement and finalization.Seal Committee (expired), Agent
WithdrawalQueueERC721 (Implementation)setBaseURISets the unstETH NFT token URI. This is the URI used to display information about the NFT. the unstETH NFT is used to issue withdrawal requests and allows users to claim their ETH once the request is finalized.Agent
WithdrawalQueueERC721 (Implementation)setNFTDescriptorAddressSets the address of a sperarate contract that will be repsonsible for generating a complete token URI (see setBaseURI). This offers more flexibility than the base URI approach.Agent
WithdrawalQueueERC721 (Implementation)grantRoleGrants a role within the contract to a specific address. There are role to pause the contract, set URIs, and finalize withdrawals. The finalization role should only be granted to the Lido contract, as it could put user funds at risk if called maliciously.Agent
WithdrawalQueueERC721 (Implementation)revokeRoleRevokes a role given to a specific address.Agent
BurnerrequestBurnMyStETHForCoverTranfers stETH from the sender and irreversibly locks it on the burner contract. This increases the cover-backed burning counter. A share burn meant to cover is to compensate a slashing event.Agent
BurnerrequestBurnSharesForCoverTransfers stETH shares from another user (who should have approved) and locks it on the burner contract. This increases the cover-backed burning counter. A share burn meant to cover is to compensate a slashing event.Lido, NodeOperatorsRegistry, CSAccounting
BurnerrequestBurnMyStETHTranfers stETH from the sender and irreversibly locks it on the burner contract. This increases the non-cover backed burning counter.Agent
BurnerrequestBurnSharesTransfers stETH shares from another user (who should have approved) and locks it on the burner contract. This increases the non-cover backed burning counter.Lido, NodeOperatorsRegistry, CSAccounting
BurnercommitSharesToBurnMarks previously requested to burn cover and non-cover shares as burnt. This function is meant to be called by the Lido contract in the same tx as the share burning it actually done.Lido (contract) (stETH)
BurnergrantRoleGrants a role within the contract to a specific address. There are roles to allow burning stETH either from a delegated address or from the caller itself. Only the Governance is currently allowed to burn its own stETH.Agent
BurnerrevokeRoleRevokes a role to a specific address.Agent
MiniMeToken (LDO Token)generateTokensGenerates (mints) new LDO to a specific address.TokenManager
MiniMeToken (LDO Token)destroyTokensDestroys (burns) LDO tokens from a given arbitrary address.TokenManager
MiniMeToken (LDO Token)enableTransfersEnables or disables transfer of LDO tokens.TokenManager
MiniMeToken (LDO Token)claimTokensTransfers any given token held in the contract to the TokenManager. This is meant to recover funds sent to the contract by mistake.TokenManager
MiniMeToken (LDO Token)changeControllerChanges the controller contract. The controller (currently TokenManager) can arbitrarily mint and burn LDO tokens from and to any user. This could put the governance and entire protocol at risk since LDO tokens are used to vote.TokenManager
KernelsetAppSets the implementation contract (code logic) that corresponds to a given namespace and app ID in the registry. All proxies in this namespace with this AppID will now point to this new implementation.Voting
KernelnewAppInstanceCreates a new upgradeable application instance by deploying the proxy. The instance has an app ID and will use the implementation contract (code logic) currently associated with this ID.Voting
KernelnewPinnedAppInstanceCreates a new non-upgradeable (pinned) application instance. The instance has an app ID and will use the implementation contract (code logic) associated with this ID.Voting
KernelsetRecoveryVaultAppIdSets the recovery vault. A contract to recover assets if neeeded. The current vault is the Agent contract.Voting
ACLcreatePermissionCreates a new permission and specifies its permission manager and the role ID.Voting
ACLgrantPermissionGrants a permission (a role) to an entity. The entity can then perform all the actions associated with the role. Optionally the manager can specify parameters associated with the permission that could grant additional permisisons specifically for those parameters.Voting
ACLrevokePermissionRevokes a permission from an entity.Permisison's Manager
ACLsetPermissionManagerSets a permission (role)'s manaer. The manager can grant and revoke the permissions for that role ID.Permisison's Manager
ACLremovePermissionManagerRemoves the permission manager for a role and sets it to the zero address. This role can no longer be granted or revoked, but a new manager can still be named using the createPermission function.Permisison's Manager
ACLburnPermissionManagerPermanently locks a permission so it can never be modified. This is done by changing the manager to a BURN_ENTITY.Permisison's Manager
ACLcreateBurnedPermissionPermanently locks a permission so it can never be modified. This variant is called when the manager of the role was already the zero address.Voting
VotingchangeSupportRequiredPctChanges the required percentage of "yes" votes for a proposal to pass. The number has to be greater or equal than the quorum and less than 100%.Voting
VotingchangeMinAcceptQuorumPctChanges the minimum quorum required for a proposal to pass. This is the percentage of "yes" votes in regard to the total voting power. The new value has to be less or equal than the support percentage.Voting
VotingunsafelyChangeVoteTimeChanges the total duration of voting. This affects all existing unexecuted votes. The new value has to be greater than the objection time and will effectively change the main voting period. The main voting period is the time before objection during which users can vote "yes" or "no" for proposals. If the new time is smaller than the passed time on existing proposals this would fast forward the proposals to the objection or closed phase.0x0 (Managed by Voting)
VotingunsafelyChangeObjectionPhaseTimeChanges the duration of the objection phase. This affects all existing unexecuted votes and could be used to remove, fast forward, or exten the objection phase on existing and future proposals. The new value has to be less than the total vote time.0x0 (Managed by Voting)
VotingnewVoteCreates a proposal with an associated execution script and description metadata. If the proposal is accepted the script will be executed and could perform any action that the Voting contract is allowed to do.TokenManager
VotingforwardSimilar to newVote but without any description metadata. This is meant to be called as a result of other governance processes or smart contracts.Voting
AgentexecuteExecutes arbitrary function calls to any external contract with a given ETH value. This can perform any action that is allowed to the Agent in other Lido contracts, which includes critical ones.Voting
AgenttransferTransfers a given ERC20 token out of the contract to a given address.Finance
AgentforwardExecutes a script as the Agent. This is meant to be called by the Voting contract to execute proposals through the Agent.Voting
AgentsafeExecuteSimilar to execute but with protections for known critical tokens. It ensures there are no direct calls to the protected tokens, the token balances don't decrease, and the list of protected tokens doesn't change.0x0 (Managed by Voting)
AgentaddProtectedTokenAdds a token to the protected list (maximum of 10 tokens). Those tokens are safeguarded when proposals are executed using safeExecute.0x0 (Managed by Voting)
AgentremoveProtectedTokenRemoves a token from the protected list.0x0 (Managed by Voting)
AgentpresignHashPre-approves a hash according to ERC-1271. It allows the governance to approve a hash so that it is considered valid once verified. This allows the approval of a message without requiring the contract to actually sign it.0x0 (Managed by Voting)
AgentsetDesignatedSignerAdds a designated signer. The external address can sign messages on behalf of the Agent according to ERC-1271.0x0 (Managed by Voting)
TokenManagermintMints a given amount of LDO token to a specified address.0x0 (Managed by Voting)
TokenManagerissueMints a given amount of LDO token to the TokenManager. This is used to create a treasury of tokens that can later be assigned.0x0 (Managed by Voting)
TokenManagerassignAssigns a given amount of LDO tokens to a recipient. The tokens are directly taken out of the TokenManager and transferred to the recipient.Voting
TokenManagerassignVestedASsigns a given of LDO tokens to a recipient with a specific vesting plan. The full amount is transferred to the address but the LDO token is trusted to call the TokenManager upon each transfer and enforce the vesting plan. The plan can optionally contain a revokable flag which allows the manager to cancel the remaining locked tokens in a plan at any time before the plan expires.Voting
TokenManagerburnBurns the given amount of LDO tokens of any given address. This allows this contract to burn any user's LDO tokens.0x0 (Managed by Voting)
TokenManagerrevokeVestingRevokes a user's vesting plan. This will cancel all the tokens that are still locked.0x0 (Managed by Voting)
TokenManagerforwardRuns an Aragon EVM script on behalf of a token holder. The token holder needs to have permission and the contract uses a blacklist to prevent the holder from executing actions on behalf of the TokenManager.public
FinancenewImmediatePaymentMakes a new instant payment of a given amount of tokens to a receiver. The tokens are taken out of the vault. The current vault is the AragonAgentVoting, EVMSCriptExecutor (EasyTrack)
FinancenewScheduledPaymentCreates a new recurring payment. Recurring payments have a starting date, an intervale at which they can be executed, and a total amount of executions. The intervals are fixed and in reference to the starting timestamp, the payment can be manually executed once per interval. It may also be executed late.Voting, EVMSCriptExecutor (EasyTrack)
FinancesetPeriodDurationSets the accounting period duration. The period is used for accounting and budget restrictions. The new duration will be effective from the next period.0x0 (Managed by Voting)
FinancesetBudgetSets the spending budget of a given token for per accounting period. This budget is enforced for each payment and resets at the end of the accounting period.0x0 (Managed by Voting)
FinanceremoveBudgetRemoves the budget for a token and enables unlimited spending.0x0 (Managed by Voting)
FinanceexecutePaymentExecutes a schedule payment as many times as possible according to the current timestamp and payment limit.Voting
FinancereceiverExecutePaymentSimilar to executePaymentbut can be called by the payment's receiver.payment recipient
FinancesetPaymentStatusSets the status of a scheduled payment as active or inactive. When inactive the payment can no longer be triggered. If reactivated the missed payment intervals can still be triggered in retrospect.Voting
ReponewVersionUpdates the version for the tracked package. Each version is specified by a version number (major.minimal.patch), a content URI and the corresponding contract address. The contract address can only be changed if the major version number if changed.0x0 (managed by Voting)
APMRegistrynewRepoCreates a new Repo contract for on-chain version control. Grants version management permissions to a an address specified by the caller.Voting
APMRegistrynewRepoWithVersionSimilar to newRepo with the initial version specified.Voting
InsuranceFundtransferEtherTransfers ETH out of the contract and to a non-zero recipient.Agent
InsuranceFundtransferERC20Transfers an ERC20 compatible token out of the contract and to a non-zero recipient.Agent
InsuranceFundtransferERC721Transfers an ERC721 (NFT) out of the contract and to a non-zero recipient.Agent
InsuranceFundtransferERC1155Transfers an ERC1155 compatible token out of the contract and to a non-zero recipient.Agent
InsuranceFundrenounceOwnershipWould renounce ownership over the contract and lock assets forever. This function is irreversebly disabled.0x0
InsuranceFundtransferOwnershipTransfers ownership over the contract to any non-zero address. The new owner has control over all assets in the insurance fund.Agent
MEV Boost Relay Allowed List (Vyper)add_relayAdds a relay to the list of approved relays in MEV-Boost setups. The relays listed in the contract are used to generate a configuration file to be used by the node operators.Relay Maintenance Committee, Agent
MEV Boost Relay Allowed List (Vyper)remove_relayRemoves a relay from the list.Relay Maintenance Committee, Agent
MEV Boost Relay Allowed List (Vyper)change_ownerChanges the contract owner. The owner can name a manager, add or remove relays, and recover funds from the contract. The current owner is the Lido DAO.Agent
MEV Boost Relay Allowed List (Vyper)set_managerSets a manager who can add or remove relays.Agent
MEV Boost Relay Allowed List (Vyper)dismiss_managerDismisses the current manager and sets the manager to the zero address.Agent
MEV Boost Relay Allowed List (Vyper)recover_erc20Transfers ERC20 tokens out of the contract and to any non-zero address. This is meant to recover funds sent to the contract by mistake.Agent
EasyTrackaddEVMScriptFactoryAdds a script factory to the contract and associated permissions. This factory can later be used by anyone to create motions in the easy track. The factory can only create script which execute functions allowed by the specified permissions.Voting
EasyTrackremoveEVMScriptFactoryRemoves a script factory from the contract and prevents any further motions to be created from it.Voting
EasyTracksetEVMScriptExecutorSets the script executor, the contract used to execute the motions.Voting
EasyTracksetMotionDurationSets the duration of a motion. This is a critical parameter as it represents the minimal waiting time before a motion can be enacted. If the time is too short users will not have time to object to the motion and cancel it. A duration cannot be set to less than 48 hours and is currently 72 hours at the time of writing.Voting
EasyTracksetObjectionsThresholdSets the percent of total governance tokens required to object to a motion, in basis points (1% = 100). The current objection threshold is 0.5% of all governance tokens.Voting
EasyTracksetMotionsCountLimitSets a limit for the number of motions which can be ongoing at all times.Voting
EasyTrackcreateMotionCreates a motion using one of the pre-created script factories. Although this function is permissionless the identity of the creator is passed on to the factory who is likely to check for a trusted caller.Anyone
EasyTrackcancelMotionAllows the creator of a motion to cancel it before execution.Motion Creator
EasyTrackcancelMotionsAllows the governance to cancel a list of motions.Voting
EasyTrackcancelAllMotionsAllows the governance to cancel all pending motions.Voting
EasyTrackpausePauses the contract and prevents both the creation and activation of motions.EmergencyBrakes Multisig, Voting
EasyTrackunpauseUnpauses the contract. New motions can be created again and existing motions can complete if they haven't been cancelled.Voting
EasyTrackgrantRoleGrants a role within the contract. There are roles to pause, unpause, and cancel motions.Voting
EasyTrackrevokeRoleRevokes a role within the contract.Voting
EVMScriptExecutorrenounceOwnershipWould remove all ownership over the contract and prevent future update of the EasyTrackcontract.Voting
EVMScriptExecutortransferOwnershipTransfers ownership over the contract to a new address. The new owner can change the EasyTrack contract. The new contract would have permissions to use any permissions (throughs scripts) granted to the EVMScriptExecutor without any mandatory delay and objection rights.Voting
EVMScriptExecutorexecuteEVMScriptExecutes a script. Only the EasyTrack can call this function and this ensures only scripts approved and created through the EasyTrack will be executed.EasyTrack
EVMScriptExecutorsetEasyTrackSets the EasyTrack contract, the contract allowed to execute scripts using through this contract.Voting
NodeOperatorsRegistry (Curated Module)addNodeOperatorAdds a new approved node operator. Node operators in the curated module are trusted to operate correctly.Agent
NodeOperatorsRegistry (Curated Module)activateNodeOperatorActivates a previously deactivated node operator.Agent
NodeOperatorsRegistry (Curated Module)deactivateNodeOperatorDeactivates an active node operator, removing them from participation in staking and rewards.Agent
NodeOperatorsRegistry (Curated Module)setNodeOperatorNameChanges the human-readable name of a node operator.Agent
NodeOperatorsRegistry (Curated Module)setNodeOperatorRewardAddressChanges the reward address of a node operator. This address is used by node operators to receive their rewards and register new signing keys.Agent
NodeOperatorsRegistry (Curated Module)setNodeOperatorStakingLimitSets the maximum number of validators to stake for a node operator. This sets the amount of vetted signing keys a node operators is allowed to have.Voting, EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Curated Module)decreaseVettedSigningKeysCountDecreases the number of vetted keys for node operators. Vetted keys are keys approved to receive ether for deposit.StakingRouter
NodeOperatorsRegistry (Curated Module)onRewardsMintedSignal that stETH rewards were minted for this module.StakingRouter
NodeOperatorsRegistry (Curated Module)updateStuckValidatorsCountUpdates the count of validators that were requested to exit but failed. The node operators will be penalized.StakingRouter
NodeOperatorsRegistry (Curated Module)updateExitedValidatorsCountUpdates the count of validators in the EXITED state.StakingRouter
NodeOperatorsRegistry (Curated Module)updateRefundedValidatorsCountUpdates the count of refunded validators for a node operator.StakingRouter
NodeOperatorsRegistry (Curated Module)onExitedAndStuckValidatorsCountsUpdatedCalled after oracle report is applied to update exited and stuck validators counts.StakingRouter
NodeOperatorsRegistry (Curated Module)unsafeUpdateValidatorsCountUnsafely updates the number of validators in EXITED/STUCK states.StakingRouter
NodeOperatorsRegistry (Curated Module)updateTargetValidatorsLimitsUpdates the limit of validators that can be used for deposit.StakingRouter
NodeOperatorsRegistry (Curated Module)onWithdrawalCredentialsChangedInvalidates all unused deposit data for all node operators.StakingRouter
NodeOperatorsRegistry (Curated Module)invalidateReadyToDepositKeysRangeInvalidates unused validators keys for the given node operators.Agent
NodeOperatorsRegistry (Curated Module)obtainDepositDataObtains deposit data to be used by StakingRouter for deposit to Ethereum Deposit contract.StakingRouter
NodeOperatorsRegistry (Curated Module)addSigningKeysAdds validator signing keys to a node operator.Voting, Node Operator's reward address
NodeOperatorsRegistry (Curated Module)removeSigningKeysRemoves validator signing keys from a node operator.Voting, Node Operator's reward address
NodeOperatorsRegistry (Curated Module)setStuckPenaltyDelaySets the delay period for stuck penalty. This is the minimum delay for which a node operator needs to suffer a penalty before the penalty can be cleared.Agent
NodeOperatorsRegistry (Simple DVT Module)addNodeOperatorAdds a new approved node operator.EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)activateNodeOperatorActivates a previously deactivated node operator.EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)deactivateNodeOperatorDeactivates an active node operator, removing them from participation in staking and rewards.EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)setNodeOperatorNameChanges the human-readable name of a node operator.EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)setNodeOperatorRewardAddressChanges the reward address of a node operator. This address is used by node operators to receive their rewards and register new signing keys.EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)setNodeOperatorStakingLimitSets the maximum number of validators to stake for a node operator. This sets the amount of vetted signing keys a node operators is allowed to have.EVMScriptExecutor (EasyTrack), EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)decreaseVettedSigningKeysCountDecreases the number of vetted keys for node operators. Vetted keys are keys approved to receive ether for deposit.StakingRouter, EVMScriptExecutor (EasyTrack) (managed by EVMScriptExecutor)
NodeOperatorsRegistry (Simple DVT Module)onRewardsMintedSignal that stETH rewards were minted for this module.StakingRouter, EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)updateStuckValidatorsCountUpdates the count of validators that were requested to exit but failed. The node operators will be penalized.StakingRouter, EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)updateExitedValidatorsCountUpdates the count of validators in the EXITED state.StakingRouter, EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)updateRefundedValidatorsCountUpdates the count of refunded validators for a node operator.StakingRouter, EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)onExitedAndStuckValidatorsCountsUpdatedCalled after oracle report is applied to update exited and stuck validators counts.StakingRouter, EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)unsafeUpdateValidatorsCountUnsafely updates the number of validators in EXITED/STUCK states.StakingRouter, EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)updateTargetValidatorsLimitsUpdates the limit of validators that can be used for deposit.StakingRouter, EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)onWithdrawalCredentialsChangedInvalidates all unused deposit data for all node operators.StakingRouter, EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)invalidateReadyToDepositKeysRangeInvalidates unused validators keys for the given node operators.EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)obtainDepositDataObtains deposit data to be used by StakingRouter for deposit to Ethereum Deposit contract.StakingRouter, EVMScriptExecutor (EasyTrack)
NodeOperatorsRegistry (Simple DVT Module)addSigningKeysAdds validator signing keys to a node operator.Node Operator's reward address, EVMScriptExecutor (EasyTrack) (managed by EVMScriptExecutor)
NodeOperatorsRegistry (Simple DVT Module)removeSigningKeysRemoves validator signing keys from a node operator.Node Operator's reward address, EVMScriptExecutor (EasyTrack) (managed by EVMScriptExecutor)
NodeOperatorsRegistry (Simple DVT Module)setStuckPenaltyDelaySets the delay period for stuck penalty. This is the minimum delay for which a node operator needs to suffer a penalty before the penalty can be cleared.EVMScriptExecutor (EasyTrack)
CSModule (Proxy)proxy__ossifyOssifies the proxy. This freezes the current implementation of the CSModule and effectively makes it non-upagreable by changing the proxy admin to the zero address.Agent
CSModule (Proxy)proxy__changeAdminChanges the proxy admin. The admin can update the entire implementation and logic of the CSModule.Agent
CSModule (Proxy)proxy__upgradeToUpgrades the implementation of the CSModule This can change the entire logic of the contract including change ownership of funds locked in the contract, if any, or influence interaction with the rest of the protocol.Agent
CSModule (Proxy)proxy__upgradeToAndCallUpgrades the implementation of the CSModule (similarly to _proxy__upgradeTo _), and then calls a function in the new contract.Agent
CSModuleactivatePublicReleasePublicly releases the module and enable permissionless node operator registration with no limit on the amount of keys.Agent
CSModulesetKeyRemovalChargeSets the key removal charge. This charge is taken from the bond if a key is removed.Agent
CSModuleclaimRewardsStETHClaim full reward (fees + bond rewards) in stETH for the given Node OperatorNode operator's manager or rewards address
CSModuleclaimRewardsWstETHClaim full reward (fees + bond rewards) in WstETH for the given Node OperatorNode operator's manager or rewards address
CSModuleclaimRewardsUnstETHRequest full reward (fees + bond rewards) in Withdrawal NFT (unstETH) for the given Node OperatorNode operator's manager or rewards address
CSModuleremoveKeysRemoves validator keys and takes a charge in the node opertaor's bonds.Node operator's manager
CSModulecompensateELRewardsStealingPenaltyCompensate execution layer rewards stealing penalty for the given Node Operator to prevent further validator exits.Node Operator's manager
CSModuleonRewardsMintedCalled when rewards are minted for the module, it passes through the minted stETH shares to the fee distributorStakingRouter, Agent
CSModuleupdateStuckValidatorsCountUpdate stuck validators count for Node Operators. Stuck validators are validators who did not follow the exit signal and may be penalized. If any operator has stuck validators it may no loinger be assigned validators as long as it is not resolved.StakingRouter, Agent
CSModuleupdateExitedValidatorsCountUpdate exited validators count for Node Operators.StakingRouter, Agent
CSModuleupdateRefundedValidatorsCountUnsupported, always reverts.StakingRouter, Agent
CSModuleupdateTargetValidatorsLimitsUpdate target validators limits for a given node operator.StakingRouter, Agent
CSModuleonExitedAndStuckValidatorsCountsUpdatedThis method is empty but will be called every time the counts are updated.StakingRouter, Agent
CSModuleunsafeUpdateValidatorsCountCalled to decrease the number of vetted keys for the given node operators.StakingRouter, Agent
CSModuledecreaseVettedSigningKeysCountDecreases the amount of vetted validator keys for the given node operators. Vetted keys are keys approved to receive ether for deposit.StakingRouter, Agent
CSModulereportELRewardsStealingPenaltyReports that a node operators stole execution layer rewards. The amount stolen and a fee will be locked from the node operator's bond.Community Staking Module Committee, Agent
CSModulecancelELRewardsStealingPenaltyCancels a previously reported stealing penalty and unlocks the funds for the node operator.Community Staking Module Committee, Agent
CSModulesettleELRewardsStealingPenaltySettle locked bond for the given Node Operators throught theCSAccounting contract. The locked bond burnt.EVMScriptExecutor (EasyTrack), Agent
CSModulesubmitWithdrawalReport Node Operator's key as withdrawn and settle withdrawn amount. If wrongly sent this signal could free funds that are still deposited and lead to accounting errors.CSVerifier, Agent
CSModulesubmitInitialSlashingReport Node Operator's key as slashed and apply the initial slashing penalty (through CSAccounting).CSVerifier, Agent
CSModuleonWithdrawalCredentialsChangedSignals that the withdrawal credentials have been changed by the DAO. This sets the withdrawal charge to zero as node operators will need to remove their keys and submit new ones.StakingRouter
CSModuleobtainDepositDataGet the next depositsCount of depositable keys with signatures from the queue.StakingRouter
CSModulepauseForPause creation of the Node Operators and keys upload for a given amount of seconds. The management of existing node operators and rewards claiming remains possible. Rewards redemption can be paused through CSAccounting.GateSeal (CSM Committee), Agent
CSModuleresumeResume creation of the Node Operators and keys upload.Agent
CSModulegrantRoleGrants a role withing the contract to a given address. There are roles to pause and resume the contract as well as roles meant for contracts (StakingRouter, Oracles). Granting contract roles to external accounts could lead to a hijack of user funds or wrongful penalties.Agent
CSModulerevokeRoleRevokes a role in the contract.Agent
CSAccounting (Proxy)proxy__ossifyOssifies the proxy. This freezes the current implementation of the CSAccounting and effectively makes it non-upagreable by changing the proxy admin to the zero address.Agent
CSAccounting (Proxy)proxy__changeAdminChanges the proxy admin. The admin can update the entire implementation and logic of the CSAccounting.Agent
CSAccounting (Proxy)proxy__upgradeToUpgrades the implementation of the CSAccounting This can change the entire logic of the contract including change ownership of funds locked in the contract, if any, or influence interaction with the rest of the protocol.Agent
CSAccounting (Proxy)proxy__upgradeToAndCallUpgrades the implementation of the CSAccounting (similarly to proxy__upgradeTo), and then calls a function in the new contract.Agent
CSAccountingsetChargePenaltyRecipientSets the charge recipient. The address that will receive the withdrawal charge.Agent
CSAccountingsetLockedBondRetentionPeriodSets the period (in seconds) to retain the bon lock.Agent
CSAccountingaddBondCurveAdds a new bond curve. Bond curves determine the price of a bond given the amount of validator keys a node operator has created.Agent
CSAccountingupdateBondCurveUpdates an existing bond curve.Agent
CSAccountingsetBondCurveSets the bond curve for a given node operator. This sets how much a node operator needs to deposit for bonds for each validator keys created.CSModule, Community Staking Module Committee, Agent
CSAccountingresetBondCurveResets a node operator's bond curve to the default one.CSModule, Community Staking Module Committee, Agent
CSAccountingdepositETHStake ETH with Lido and deposit stETH to the a node operator's bond.CSModule
CSAccountingdepositStETHDeposit stETH to the a node operator's bond.CSModule
CSAccountingdepositWstETHUnwarps wstETH and deposit stETH to a node operator's bond.CSModule
CSAccountingclaimRewardsStETHClaim full rewards for the given node operator.CSModule
CSAccountingclaimRewardsWstETHClaim full rewards in wstETH for the given node operator.CSModule
CSAccountingclaimRewardsUnstETHClaim full rewards in Withdrawal NFT (unstETH) for the given node operator.CSModule
CSAccountinglockBondETHLocks an amount in ETH from a node operator's bond. (see CSModule)CSModule
CSAccountingreleaseLockedBondETHReleases a node operator's locked bond. (see CSModule)CSModule
CSAccountingcompensateLockedBondETHCompensates a locked bond for the given node operator (see CSModule)CSModule
CSAccountingsettleLockedBondETHSettle a locked bond for the given node operator. (see CSModule)CSModule
CSAccountingpenalizePenalize a bond by burning stETH shares of the node operator.CSModule
CSAccountingchargeFeeCharge a fee from the bond by transfering stETH to the charge recipient.CSModule
CSAccountinggrantRoleGrants a role within the contract to a given address. Roles may allow any address to manage bond curves and change the charge recipient. Contrary to the CSModule's design, the functions destined to be called by contracts (namely by the CSModule) cannot be hijacked as the CSModule's address used cannot be changed.Agent
CSAccountingrevokeRoleRevokes a role within the contract.Agent
CSAccountingpauseForPauses deposits and rewards claims for a given amount of seconds.GateSeal(CSAccounting), Agent
CSAccountingresumeResumes all paused functions.Agent
CSFeeDistributor (Proxy)proxy__ossifyOssifies the proxy. This freezes the current implementation of the CSFeeDistributor and effectively makes it non-upagreable by changing the proxy admin to the zero address.Agent
CSFeeDistributor (Proxy)proxy__changeAdminChanges the proxy admin. The admin can update the entire implementation and logic of the CSFeeDistributor.Agent
CSFeeDistributor (Proxy)proxy__upgradeToUpgrades the implementation of the CSFeeDistributor This can change the entire logic of the contract including change ownership of funds locked in the contract, if any, or influence interaction with the rest of the protocol.Agent
CSFeeDistributor (Proxy)proxy__upgradeToAndCallUpgrades the implementation of the CSFeeDistributor (similarly to _proxy__upgradeTo _), and then calls a function in the new contract.Agent
CSFeeDistributordistributeFeesDistributes fees to the accounting contract in favour of the given node operator.CSAccounting
CSFeeDistributorprocessOracleReportReceives the data of the Merkle tree used for fee distribution.CSFeeOracle
CSFeeDistributorrecoverERC20Recovers any ERC20 (except stETH) from the contract. This is meant for tokens wrongfully sent to this contract.Agent
CSFeeDistributorgrantRoleGrants a role within the contract. The only role in use is RECOVERER, the address with the right to sweep tokens.Agent
CSFeeDistributorrevokeRoleRevokes a role from a given address.Agent
CSFeeOracle (Proxy)proxy__ossifyOssifies the proxy. This freezes the current implementation of the CSFeeOracle and effectively makes it non-upagreable by changing the proxy admin to the zero address.Agent
CSFeeOracle (Proxy)proxy__changeAdminChanges the proxy admin. The admin can update the entire implementation and logic of the CSFeeOracle.Agent
CSFeeOracle (Proxy)proxy__upgradeToUpgrades the implementation of the CSFeeOracle This can change the entire logic of the contract including change ownership of funds locked in the contract, if any, or influence interaction with the rest of the protocol.Agent
CSFeeOracle (Proxy)proxy__upgradeToAndCallUpgrades the implementation of the CSFeeOracle (similarly to _proxy__upgradeTo _), and then calls a function in the new contract.Agent
CSFeeOraclesubmitReportDataSubmits a report for the current slot on which the committee members reached a consensus. The report contains the data on the fee distribution.HashConsensus Committee Members (below), Agent
CSFeeOraclesetConsensusContractSets the consensus contract to use. The consensus contract is a HashConsensus, it can decide who is a committee member and push the consensus proof to the CSFeeOracle.Agent
CSFeeOraclesetConsensusVersionSets the current consensus version used. The version refers to a set of rules that the members must agree on when building the report.Agent
CSFeeOraclesetFeeDistributorContractSets the address of the CSFeeDistributor used.Agent
CSFeeOraclesetPerformanceLeewaySets the performance leeway in basis points. This is the threshold used to determine the under-performing validators in reference to the average performance reported by the oracle.Agent
CSFeeOraclepauseForStops accepting new oracle reports for a given amount of seconds.Agent, GateSeal (CSAccounting)
CSFeeOraclepauseUntilStops accepting new oracle reports until a specific timestamp.Agent, GateSeal (CSAccounting)
CSFeeOracleresumeResumes the paused contract and starts accepting oracle reports again.Agent
CSFeeOraclegrantRoleGrants a role within the contract. There are roles to manage the contract and submit data. Granting roles to a malicious actors could abuse the fee distribution system by over or under distributing rewards. Reporting wrong performances could also wrongfully penalize the node operators.Agent
CSFeeOraclerevokeRoleRevokes a role from a given address.Agent
HashConsensus (of CSFeeOracle)submitReportUsed by oracle members to submit hash of the data calculated for the given reference slot. If consensus is reached (more submissions of the same report than the quorum amount) the HashConsensus contract submits this report to the processing contract (CSFeeOracle) to enable processing.HashCon sensus (Committee Members)
HashConsensus (of CSFeeOracle)disableConsensusTemporarily disables consensus by increasing the quorum value to an unreachable number. This prevents any consensus from being reached. Consensus needs to be re-enabled using setQuorum.Agent
HashConsensus (of CSFeeOracle)setQuorumSets the quorum value. This is the amount of equal reports that need to be accumulated for each slot for a report to be considered valid and ready for processing. A value higher the the number of members in the committee would make consensus impossible.Agent
HashConsensus (of CSFeeOracle)updateInitialEpochChanges when to oracle reporting system starts, given it hasn't started yet. This function can no longer becalled.Agent
HashConsensus (of CSFeeOracle)setFrameConfigSets the configuration of frames. Frames are time window of equal lenghts referencing the processing of a slot and the corresponding deadline. A report based on the consensus layer must be built and consensus must be reached before each deadline.Agent
HashConsensus (of CSFeeOracle)setFastLaneLengthSlotsSets the duration of a fast lane rotation in slots. Members in the fast lane can (and are expected to) submit their report during a dedicated fast lane time window before submissions are open to all other members. The members in the fast lanes are rotated at a rate set using this function. The goal is to enforce active participation of all oracle members, preventing lazy copying.Agent
HashConsensus (of CSFeeOracle)addMemberAdds a member to the consensus committee. Members can contribute to building consensus and submit reports.Agent
HashConsensus (of CSFeeOracle)removeMemberRemoves a member from the consensus committee.Agent
HashConsensus (of CSFeeOracle)setReportProcessorSets the processor contract to which the reports are sent over to. This particular HashConsensus contract is meant for the CSFeeOracle as processor.Agent
HashConsensus (of CSFeeOracle)grantRoleGrants a role within the contract to a specific address. This may allow addresses to execute any of the functions above related to the specific role.Agent
HashConsensus (of CSFeeOracle)revokeRoleRevokes a role to a specific address.Agent

Access Control

Role Permissions in AccountOracle

Role nameIDRole OwnersRole Admin
DEFAULT_ADMIN0x0000000000000000000000000000000000000000000000000000000000000000AgentDEFAULT_ADMIN

Role Permissions in HashConsensus

Role nameIDRole OwnersRole Admin
DEFAULT_ADMIN0x0000000000000000000000000000000000000000000000000000000000000000AgentDEFAULT_ADMIN
DISABLE_CONSENSUS_ROLE0x10b016346186602d93fc7a27ace09ba944baf9453611b186d36acd3d3d667dc0DEFAULT_ADMIN
MANAGE_FAST_LANE_CONFIG_ROLE0x4af6faa30fabb2c4d8d567d06168f9be8adb583156c1ecb424b4832a7e4d6717DEFAULT_ADMIN
MANAGE_FRAME_CONFIG_ROLE0x921f40f434e049d23969cbe68d9cf3ac1013fbe8945da07963af6f3142de6afeDEFAULT_ADMIN
MANAGE_REPORT_PROCESSOR_ROLE0xc5219a8d2d0107a57aad00b22081326d173df87bad251126f070df2659770c3eDEFAULT_ADMIN
MANAGE_MEMBERS_AND_QUORUM_ROLE0x66a484cf1a3c6ef8dfd59d24824943d2853a29d96f34a01271efc55774452a51AgentDEFAULT_ADMIN

Role Permissions in ValidatorsExitBusOracle

Role nameIDRole OwnersRole Admin
DEFAULT_ADMIN0x0000000000000000000000000000000000000000000000000000000000000000AgentDEFAULT_ADMIN
MANAGE_CONSENSUS_CONTRACT_ROLE0x04a0afbbd09d5ad397fc858789da4f8edd59f5ca5098d70faa490babee945c3bDEFAULT_ADMIN
MANAGE_CONSENSUS_VERSION_ROLE0xc31b1e4b732c5173dc51d519dfa432bad95550ecc4b0f9a61c2a558a2a8e4341DEFAULT_ADMIN
PAUSE_ROLE0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46dGateSeal Committee (expired)DEFAULT_ADMIN
RESUME_ROLE0x2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c7DEFAULT_ADMIN
SUBMIT_DATA_ROLE0x65fa0c17458517c727737e4153dd477fa3e328cf706640b0f68b1a285c5990daDEFAULT_ADMIN

Role Permissions in WithdrawalQueueERC721

Role nameIDRole OwnersRole Admin
DEFAULT_ADMIN0x0000000000000000000000000000000000000000000000000000000000000000AgentDEFAULT_ADMIN
FINALIZE_ROLE0x485191a2ef18512555bd4426d18a716ce8e98c80ec2de16394dcf86d7d91bc80Lido (contract)DEFAULT_ADMIN
MANAGE_TOKEN_URI_ROLE0xbe882725f03f148e7c5a5e63ec45f182f7dcdb6bb8b92311ade5a6d138e0ee0fDEFAULT_ADMIN
ORACLE_ROLE0x68e79a7bf1e0bc45d0a330c573bc367f9cf464fd326078812f301165fbda4ef1AccountingOracleDEFAULT_ADMIN
PAUSE_ROLE0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46dGateSeal Committee (expired)DEFAULT_ADMIN
RESUME_ROLE0x2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c7DEFAULT_ADMIN

Role Permissions in Burner

Role nameIDRole OwnersRole Admin
DEFAULT_ADMIN0x0000000000000000000000000000000000000000000000000000000000000000AgentDEFAULT_ADMIN
REQUEST_BURN_SHARES_ROLE0x4be29e0e4eb91f98f709d98803cba271592782e293b84a625e025cbb40197ba8Lido (contract), NodeOperatorsRegistry, CSAccountingDEFAULT_ADMIN
REQUEST_BURN_MY_STETH_ROLE0x28186f938b759084eea36948ef1cd8b40ec8790a98d5f1a09b70879fe054e5ccAgentDEFAULT_ADMIN

Role Permissions in Easytrack

Role NameIDRole OwnersRole Admin
default admin0x0000000000000000000000000000000000000000000000000000000000000000VotingDEFAULT_ADMIN
pause role0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46dVoting, EmergencyBrakes MultisigDEFAULT_ADMIN
unpause role0x265b220c5a8891efdd9e1b1b7fa72f257bd5169f8d87e319cf3dad6ff52b94aeVotingDEFAULT_ADMIN
cancel role0x9f959e00d95122f5cbd677010436cf273ef535b86b056afc172852144b9491d7VotingDEFAULT_ADMIN

Role Permissions in CSModule

Role NameIDRole OwnersRole Admin
DEFAULT_ADMIN_ROLE0x0000000000000000000000000000000000000000000000000000000000000000AgentDEFAULT_ADMIN
STAKING_ROUTER_ROLE0xbb75b874360e0bfd87f964eadd8276d8efb7c942134fc329b513032d0803e0c6StakingRouterDEFAULT_ADMIN
PAUSE_ROLE0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46dGateSeal (CSM)DEFAULT_ADMIN
REPORT_EL_REWARDS_STEALING_PENALTY_ROLE0x59911a6aa08a72fe3824aec4500dc42335c6d0702b6d5c5c72ceb265a0de9302Community Staking Module CommitteeDEFAULT_ADMIN
SETTLE_EL_REWARDS_STEALING_PENALTY_ROLE0xe85fdec10fe0f93d0792364051df7c3d73e37c17b3a954bffe593960e3cd3012EVMScriptExecutor (EasyTrack)DEFAULT_ADMIN
VERIFIER_ROLE0x0ce23c3e399818cfee81a7ab0880f714e53d7672b08df0fa62f2843416e1ea09CSVerifierDEFAULT_ADMIN
RESUME_ROLE0x2fc10cc8ae19568712f7a176fb4978616a610650813c9d05326c34abb62749c70x0DEFAULT_ADMIN
MODULE_MANAGER_ROLE0x79dfcec784e591aafcf60db7db7b029a5c8b12aac4afd4e8c4eb740430405fa60x0DEFAULT_ADMIN

Role Permissions in CSAccounting

Role NameIDRole OwnersRole Admin
DEFAULT_ADMIN_ROLE0x0000000000000000000000000000000000000000000000000000000000000000AgentDEFAULT_ADMIN
SET_BOND_CURVE_ROLE0x645c9e6d2a86805cb5a28b1e4751c0dab493df7cf935070ce405489ba1a7bf72CSModule, Community Staking Module CommitteeDEFAULT_ADMIN
RESET_BOND_CURVE_ROLE0xb5dffea014b759c493d63b1edaceb942631d6468998125e1b4fe427c99082134CSModule, Community Staking Module CommitteeDEFAULT_ADMIN
MANAGE_BOND_CURVES_ROLE0xd35e4a788498271198ec69c34f1dc762a1eee8200c111f598da1b3dde946783d0x0DEFAULT_ADMIN
PAUSE_ROLE0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46dGateSeal (CSAccounting)DEFAULT_ADMIN

Role Permissions in CSOracle

Role NameIDRole OwnersRole Admin
DEFAULT_ADMIN_ROLE0x0000000000000000000000000000000000000000000000000000000000000000AgentDEFAULT_ADMIN
PAUSE_ROLE0x139c2898040ef16910dc9f44dc697df79363da767d8bc92f2e310312b816e46dAgent, GateSeal (CSAccounting)DEFAULT_ADMIN
MANAGE_CONSENSUS_VERSION_ROLE0xc31b1e4b732c5173dc51d519dfa432bad95550ecc4b0f9a61c2a558a2a8e43410x0DEFAULT_ADMIN