diff --git a/docs/deployed-contracts/hoodi.md b/docs/deployed-contracts/hoodi.md index 5a88358df..9f7d3c713 100644 --- a/docs/deployed-contracts/hoodi.md +++ b/docs/deployed-contracts/hoodi.md @@ -2,7 +2,7 @@ :::tip 📘 **Lido V3 Technical Paper** -Learn about the next evolution of Lido staking with **stVaults** — user-defined validator setups with optional stETH liquidity. Read the complete [**Lido V3 Technical Paper**](/lido-v3-whitepaper) for architecture details, mechanisms, and implementation specifics. +Learn about the next evolution of Lido staking with **stVaults** — user-defined validator setups with optional stETH liquidity. Read the complete [**Lido V3 Technical Paper**](/lido-v3-whitepaper/) for architecture details, mechanisms, and implementation specifics. ::: diff --git a/docs/deployed-contracts/index.md b/docs/deployed-contracts/index.md index 791e933de..39c4a1734 100644 --- a/docs/deployed-contracts/index.md +++ b/docs/deployed-contracts/index.md @@ -6,7 +6,7 @@ pagination_next: deployed-contracts/hoodi :::tip 📘 **Lido V3 Technical Paper** -Learn about the next evolution of Lido staking with **stVaults** — user-defined validator setups with optional stETH liquidity. Read the complete [**Lido V3 Technical Paper**](/lido-v3-whitepaper) for architecture details, mechanisms, and implementation specifics. +Learn about the next evolution of Lido staking with **stVaults** — user-defined validator setups with optional stETH liquidity. Read the complete [**Lido V3 Technical Paper**](/lido-v3-whitepaper/) for architecture details, mechanisms, and implementation specifics. ::: diff --git a/docs/guides/address-ownership-guide.md b/docs/guides/address-ownership-guide.md index 773c6cd09..ae1affa05 100644 --- a/docs/guides/address-ownership-guide.md +++ b/docs/guides/address-ownership-guide.md @@ -22,7 +22,7 @@ Using EOA across Lido DAO operational multisigs or protocol contracts requires p 2. Publish the message along with the Etherescan link (or signature hash in case of MyEtherWallet) on X.com (formerly Twitter) or other easily accessible social media. 3. Share the link to the post as a comment at the relevant [Lido DAO forum](https://research.lido.fi) post. -4. Make sure to follow the [general rules of thumb](/guides/multisig-signer-manual) for being a signer in Lido DAO operational multisigs. +4. Make sure to follow the [general rules of thumb](/guides/multisig-signer-manual/) for being a signer in Lido DAO operational multisigs. ### In case of using Safe multisig diff --git a/docs/guides/curated-module/el-rewards-configuration.md b/docs/guides/curated-module/el-rewards-configuration.md index 023d40f47..febb600c8 100644 --- a/docs/guides/curated-module/el-rewards-configuration.md +++ b/docs/guides/curated-module/el-rewards-configuration.md @@ -1,12 +1,12 @@ # Execution Layer Rewards Configuration -Node Operators who run validators for Lido are required to set the fee recipient for the relevant validators to the protocol-managed [`LidoExecutionLayerRewardsVault`](/contracts/lido-execution-layer-rewards-vault) which manages [Execution Layer Rewards](/contracts/lido#gettotalelrewardscollected). This address differs depending on the network (Mainnet, testnet, etc.) and is _not_ the same as the [Withdrawal Credentials](/contracts/staking-router#getwithdrawalcredentials) address. +Node Operators who run validators for Lido are required to set the fee recipient for the relevant validators to the protocol-managed [`LidoExecutionLayerRewardsVault`](/contracts/lido-execution-layer-rewards-vault/) which manages [Execution Layer Rewards](/contracts/lido/#gettotalelrewardscollected). This address differs depending on the network (Mainnet, testnet, etc.) and is _not_ the same as the [Withdrawal Credentials](/contracts/staking-router/#getwithdrawalcredentials) address. -This smart contract address can also be retrieved by [querying the `elRewardsVault()`](/contracts/lido-locator#elrewardsvault) method in the `LidoLocator` contract. +This smart contract address can also be retrieved by [querying the `elRewardsVault()`](/contracts/lido-locator/#elrewardsvault) method in the `LidoLocator` contract. The address is also available in the [Deployed Contracts] docs page, labeled as `Execution Layer Rewards Vault`. -[deployed contracts]: /deployed-contracts +[deployed contracts]: /deployed-contracts/ ## Fee recipient options for various Beacon Chain clients @@ -40,12 +40,12 @@ For some clients the fee recipient option should be applied with other options, [teku mev integration]: https://docs.teku.consensys.net/en/latest/Reference/CLI/CLI-Syntax/#builder-endpoint [nimbus mev integration]: https://nimbus.guide/external-block-builder.html [lighthouse mev integration]: https://lighthouse-book.sigmaprime.io/builders.html -[lodestar mev integration]: https://chainsafe.github.io/lodestar/run/beacon-management/mev-and-builder-integration +[lodestar mev integration]: https://chainsafe.github.io/lodestar/run/beacon-management/mev-and-builder-integration/ [prysm mev integration]: https://docs.prylabs.network/docs/prysm-usage/parameters ## Relays and MEV-Boost options -List of possible relays that have been approved by DAO can be fetched by [querying the `get_relays()`](/contracts/mev-boost-relays-allowed-list#get_relays) method in `MevBoostRelayAllowedList` contract. +List of possible relays that have been approved by DAO can be fetched by [querying the `get_relays()`](/contracts/mev-boost-relays-allowed-list/#get_relays) method in `MevBoostRelayAllowedList` contract. ### Mainnet diff --git a/docs/guides/curated-module/validator-keys.md b/docs/guides/curated-module/validator-keys.md index c49fa9a4e..43ced861f 100644 --- a/docs/guides/curated-module/validator-keys.md +++ b/docs/guides/curated-module/validator-keys.md @@ -229,4 +229,4 @@ It is urgent to notify Lido team and other Node Operators as soon as possible. F Once new keys are present and valid, a motion can be proposed to increase the staking limit for the Node Operator. -[Node Operators Guide to Easy Track](https://docs.lido.fi/guides/easy-track-guide#node-operators-guide-to-easy-track) +[Node Operators Guide to Easy Track](https://docs.lido.fi/guides/easy-track-guide/#node-operators-guide-to-easy-track) diff --git a/docs/guides/deposit-security-manual.md b/docs/guides/deposit-security-manual.md index b85550cec..8b1c6f890 100644 --- a/docs/guides/deposit-security-manual.md +++ b/docs/guides/deposit-security-manual.md @@ -44,7 +44,7 @@ It might be any EOA account under the member's control. Send the address of its ### Onchain Data Bus Communication -For inter-service communication, an onchain data bus is utilized, based on EVM-based network and a simple smart contract. This smart contract allows for sending messages essential for the operation of the service. The current specification of these messages is outlined in [this file](https://github.com/lidofinance/lido-council-daemon/blob/main/src/abi/data-bus.abi.json). For more details on the smart contract, please refer to [the document](/contracts/data-bus). +For inter-service communication, an onchain data bus is utilized, based on EVM-based network and a simple smart contract. This smart contract allows for sending messages essential for the operation of the service. The current specification of these messages is outlined in [this file](https://github.com/lidofinance/lido-council-daemon/blob/main/src/abi/data-bus.abi.json). For more details on the smart contract, please refer to [the document](/contracts/data-bus/). ### Run lido-council-daemon diff --git a/docs/guides/depositor-bot.md b/docs/guides/depositor-bot.md index 500dbebb6..30cecd30d 100644 --- a/docs/guides/depositor-bot.md +++ b/docs/guides/depositor-bot.md @@ -2,13 +2,13 @@ ## Introduction -Depositor bot is a part of [Deposit Security Module](/contracts/deposit-security-module). +Depositor bot is a part of [Deposit Security Module](/contracts/deposit-security-module/). The Depositor Bot obtains signed deposit messages from Council Daemons. Once a sufficient number of messages is collected to constitute a quorum, the bot proceeds to initiate a deposit into the designated staking module. This deposit is executed using -the [depositBufferedEther](https://docs.lido.fi/contracts/deposit-security-module#depositbufferedether) function within -the [DepositSecurityModule](https://docs.lido.fi/contracts/deposit-security-module) smart contract. +the [depositBufferedEther](https://docs.lido.fi/contracts/deposit-security-module/#depositbufferedether) function within +the [DepositSecurityModule](https://docs.lido.fi/contracts/deposit-security-module/) smart contract. ## Requirements @@ -97,7 +97,7 @@ line `"msg": "Bot env variables"` ### Docker -Docker image can be found [here](https://docs.lido.fi/guides/tooling#depositor-bot). +Docker image can be found [here](https://docs.lido.fi/guides/tooling/#depositor-bot). ## Monitoring diff --git a/docs/guides/multisig-signer-manual.md b/docs/guides/multisig-signer-manual.md index 8e2a05860..adb440210 100644 --- a/docs/guides/multisig-signer-manual.md +++ b/docs/guides/multisig-signer-manual.md @@ -3,7 +3,7 @@ Lido DAO uses multisig wallet for different ops for flexibility and fast reaction times. Here's a list of general tips & rules around being the signer: 1. Use hardware wallet & back up the seed phrase. -2. Upon joining to any multisig make sure to verify the address according [to the guide](/guides/address-ownership-guide). +2. Upon joining to any multisig make sure to verify the address according [to the guide](/guides/address-ownership-guide/). 3. Check transactions you see on the multisig. If it's unclear to what the transaction should do and why — don't sign it and ask for explanation. 4. Every transaction should have "how to check" guide. 1. Addresses & sums in question should be verifiable through third party sources (message from your fellow multisig co-signer doesn't cut it). diff --git a/docs/guides/oracle-operator-manual.md b/docs/guides/oracle-operator-manual.md index 0b0fcca8a..620c74a23 100644 --- a/docs/guides/oracle-operator-manual.md +++ b/docs/guides/oracle-operator-manual.md @@ -20,7 +20,7 @@ The Lido Oracle mechanism comprises three main components. The first component i Based on the update reports received from the oracles, the Lido smart contract performs state transitions such as updating user balances, processing withdrawal requests, and distributing rewards to node operators. Thus, the Lido Oracle mechanism acts as a synchronization device that bridges the protocol across the execution and consensus layers. It ensures that the protocol is updated in a timely and accurate manner and allows for smooth and efficient operation of the entire Lido system. -The two core contracts in the Lido Oracle suite are called [AccountingOracle](/contracts/accounting-oracle) and [ValidatorsExitBus](/contracts/validators-exit-bus-oracle). Together, these contracts collect information submitted by oracles about the state of validators and their balances, the amount of funds accumulated on protocol vaults, the number of withdrawal requests the protocol is able to process, and the validators are expected to be voluntary exited to finalize more withdrawal requests. This information is then used for these crucial processes: +The two core contracts in the Lido Oracle suite are called [AccountingOracle](/contracts/accounting-oracle/) and [ValidatorsExitBus](/contracts/validators-exit-bus-oracle/). Together, these contracts collect information submitted by oracles about the state of validators and their balances, the amount of funds accumulated on protocol vaults, the number of withdrawal requests the protocol is able to process, and the validators are expected to be voluntary exited to finalize more withdrawal requests. This information is then used for these crucial processes: - rebasing user balances, - distributing node operator rewards, @@ -46,7 +46,7 @@ The diagram below shows: `ReportProcessor` - `AccountingOracle` or `ValidatorsExitBusOracle` contract. `HashConsensus` - a contract which manages oracle members committee and allows the members to reach consensus on the particular data hash for each reporting frame. -You can read more about HashConsensus [here](/contracts/hash-consensus). +You can read more about HashConsensus [here](/contracts/hash-consensus/). ```mermaid graph LR; diff --git a/docs/guides/oracle-spec/accounting-oracle.md b/docs/guides/oracle-spec/accounting-oracle.md index 5995f96bc..145675b01 100644 --- a/docs/guides/oracle-spec/accounting-oracle.md +++ b/docs/guides/oracle-spec/accounting-oracle.md @@ -1,7 +1,7 @@ # Accounting oracle :::info -It's advised to read [What is Lido Oracle mechanism](/guides/oracle-operator-manual#intro) before +It's advised to read [What is Lido Oracle mechanism](/guides/oracle-operator-manual/#intro) before ::: ## Withdrawal stage diff --git a/docs/guides/oracle-spec/validator-exit-bus.md b/docs/guides/oracle-spec/validator-exit-bus.md index 758d3a157..1bd427120 100644 --- a/docs/guides/oracle-spec/validator-exit-bus.md +++ b/docs/guides/oracle-spec/validator-exit-bus.md @@ -1,10 +1,10 @@ # Validators Exit Bus :::info -It's advised to read [What is Lido Oracle mechanism](/guides/oracle-operator-manual#intro) before +It's advised to read [What is Lido Oracle mechanism](/guides/oracle-operator-manual/#intro) before ::: -[Validators Exit Bus](/contracts/validators-exit-bus-oracle) is an oracle that ejects Lido validators when the protocol requires additional funds to process user withdrawals. +[Validators Exit Bus](/contracts/validators-exit-bus-oracle/) is an oracle that ejects Lido validators when the protocol requires additional funds to process user withdrawals. There are two stages of selecting validators for exit: Covering Demand in WQ and Boosted Exits @@ -118,16 +118,16 @@ ValidatorsExitBusOracle.getLastRequestedValidatorIndices( To find the next validators to exit, Validators Exit Bus Oracle collects the following state from both Ethereum Consensus and Execution layers. -- From [OracleDaemonConfig](/contracts/oracle-daemon-config) contract: +- From [OracleDaemonConfig](/contracts/oracle-daemon-config/) contract: - PREDICTION_DURATION_IN_SLOTS - VALIDATOR_DELAYED_TIMEOUT_IN_SLOTS -- From [Withdrawal Queue](/contracts/withdrawal-queue-erc721): +- From [Withdrawal Queue](/contracts/withdrawal-queue-erc721/): - Get total unfinalized withdrawal request amount -- From [Lido](/contracts/lido) contract: +- From [Lido](/contracts/lido/) contract: - Recent postCLBalance/preCLBalance and withdrawals from Execution Layer Rewards and Withdrawal vaults via events - From Consensus Layer node: - All validators and their states on the reference slot -- From [Staking Router](/contracts/staking-router): +- From [Staking Router](/contracts/staking-router/): - Public keys of all Lido validators - Indices of the last requested validator to exit for each Node Operator - Validator keys statistics for each Node Operator @@ -143,13 +143,13 @@ Collects the amount of stETH in the queue yet to be finalized from `WithdrawalQu #### Calculate average rewards speed per epoch -Fetches `ETHDistributed` and `TokenRebased` events from the [`Lido`](/contracts/lido) contract and calculate average rewards amount per epoch. The rewards prediction period config fetches from the [OracleDaemonConfig](/contracts/oracle-daemon-config) contract. +Fetches `ETHDistributed` and `TokenRebased` events from the [`Lido`](/contracts/lido/) contract and calculate average rewards amount per epoch. The rewards prediction period config fetches from the [OracleDaemonConfig](/contracts/oracle-daemon-config/) contract. To get events in past, addressing the cases where there can be slots with missed block, the next scheme is introduced: ![VEBO 6](../../../static/img/oracle-spec/vebo-6.png) -- Get from [OracleDaemonConfig](/contracts/oracle-daemon-config) contract `PREDICTION_DURATION_IN_SLOTS` value +- Get from [OracleDaemonConfig](/contracts/oracle-daemon-config/) contract `PREDICTION_DURATION_IN_SLOTS` value - Get `TokenRebased` events from Lido - Get `ETHDistributed` events from Lido - Group that events by transaction hash @@ -207,7 +207,7 @@ epochs_required_to_exit_validators = (validators_to_eject_count - remain_exits_c withdrawal_epoch=max_exit_epoch_number + epochs_required_to_exit_validators + MIN_VALIDATOR_WITHDRAWABILITY_DELAY) ``` -MIN_VALIDATOR_WITHDRAWABILITY_DELAY [here](https://eth2book.info/altair/part3/config/configuration#min_validator_withdrawability_delay) +MIN_VALIDATOR_WITHDRAWABILITY_DELAY [here](https://eth2book.info/altair/part3/config/configuration/#min_validator_withdrawability_delay) So now we can calculate what amount (and validators count) is needed to fully cover amount of non-finalized WithdrawQueue requests. diff --git a/docs/guides/protocol-levers.md b/docs/guides/protocol-levers.md index 02d698189..7d98ec865 100644 --- a/docs/guides/protocol-levers.md +++ b/docs/guides/protocol-levers.md @@ -23,24 +23,24 @@ Upgradeable core protocol proxies (mainnet): | Contract | Address | | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| [LidoLocator](/contracts/lido-locator) | [`0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb`](https://etherscan.io/address/0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb) | -| [Lido](/contracts/lido) | [`0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84`](https://etherscan.io/address/0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84) | -| [Accounting](/contracts/accounting) | [`0x23ED611be0e1a820978875C0122F92260804cdDf`](https://etherscan.io/address/0x23ED611be0e1a820978875C0122F92260804cdDf) | -| [StakingRouter](/contracts/staking-router) | [`0xFdDf38947aFB03C621C71b06C9C70bce73f12999`](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999) | -| [WithdrawalQueueERC721](/contracts/withdrawal-queue-erc721) | [`0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1`](https://etherscan.io/address/0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1) | -| [WithdrawalVault](/contracts/withdrawal-vault) | [`0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f`](https://etherscan.io/address/0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f) | -| [Burner](/contracts/burner) | [`0xE76c52750019b80B43E36DF30bf4060EB73F573a`](https://etherscan.io/address/0xE76c52750019b80B43E36DF30bf4060EB73F573a) | -| [VaultHub](/contracts/vault-hub) | [`0x1d201BE093d847f6446530Efb0E8Fb426d176709`](https://etherscan.io/address/0x1d201BE093d847f6446530Efb0E8Fb426d176709) | -| [PredepositGuarantee](/contracts/predeposit-guarantee) | [`0xF4bF42c6D6A0E38825785048124DBAD6c9eaaac3`](https://etherscan.io/address/0xF4bF42c6D6A0E38825785048124DBAD6c9eaaac3) | -| [OperatorGrid](/contracts/operator-grid) | [`0xC69685E89Cefc327b43B7234AC646451B27c544d`](https://etherscan.io/address/0xC69685E89Cefc327b43B7234AC646451B27c544d) | +| [LidoLocator](/contracts/lido-locator/) | [`0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb`](https://etherscan.io/address/0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb) | +| [Lido](/contracts/lido/) | [`0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84`](https://etherscan.io/address/0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84) | +| [Accounting](/contracts/accounting/) | [`0x23ED611be0e1a820978875C0122F92260804cdDf`](https://etherscan.io/address/0x23ED611be0e1a820978875C0122F92260804cdDf) | +| [StakingRouter](/contracts/staking-router/) | [`0xFdDf38947aFB03C621C71b06C9C70bce73f12999`](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999) | +| [WithdrawalQueueERC721](/contracts/withdrawal-queue-erc721/) | [`0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1`](https://etherscan.io/address/0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1) | +| [WithdrawalVault](/contracts/withdrawal-vault/) | [`0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f`](https://etherscan.io/address/0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f) | +| [Burner](/contracts/burner/) | [`0xE76c52750019b80B43E36DF30bf4060EB73F573a`](https://etherscan.io/address/0xE76c52750019b80B43E36DF30bf4060EB73F573a) | +| [VaultHub](/contracts/vault-hub/) | [`0x1d201BE093d847f6446530Efb0E8Fb426d176709`](https://etherscan.io/address/0x1d201BE093d847f6446530Efb0E8Fb426d176709) | +| [PredepositGuarantee](/contracts/predeposit-guarantee/) | [`0xF4bF42c6D6A0E38825785048124DBAD6c9eaaac3`](https://etherscan.io/address/0xF4bF42c6D6A0E38825785048124DBAD6c9eaaac3) | +| [OperatorGrid](/contracts/operator-grid/) | [`0xC69685E89Cefc327b43B7234AC646451B27c544d`](https://etherscan.io/address/0xC69685E89Cefc327b43B7234AC646451B27c544d) | Upgradeable oracle proxies (mainnet): | Contract | Address | | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| [AccountingOracle](/contracts/accounting-oracle) | [`0x852deD011285fe67063a08005c71a85690503Cee`](https://etherscan.io/address/0x852deD011285fe67063a08005c71a85690503Cee) | -| [ValidatorsExitBusOracle](/contracts/validators-exit-bus-oracle) | [`0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e`](https://etherscan.io/address/0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e) | -| [LazyOracle](/contracts/lazy-oracle) | [`0x5DB427080200c235F2Ae8Cd17A7be87921f7AD6c`](https://etherscan.io/address/0x5DB427080200c235F2Ae8Cd17A7be87921f7AD6c) | +| [AccountingOracle](/contracts/accounting-oracle/) | [`0x852deD011285fe67063a08005c71a85690503Cee`](https://etherscan.io/address/0x852deD011285fe67063a08005c71a85690503Cee) | +| [ValidatorsExitBusOracle](/contracts/validators-exit-bus-oracle/) | [`0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e`](https://etherscan.io/address/0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e) | +| [LazyOracle](/contracts/lazy-oracle/) | [`0x5DB427080200c235F2Ae8Cd17A7be87921f7AD6c`](https://etherscan.io/address/0x5DB427080200c235F2Ae8Cd17A7be87921f7AD6c) | Upgradeable staking module proxies (mainnet): @@ -58,7 +58,7 @@ Upgradeable staking module proxies (mainnet): ## Lido (core pool) -Key levers on the core pool contract [Lido](/contracts/lido) ([`0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84`](https://etherscan.io/address/0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84)): +Key levers on the core pool contract [Lido](/contracts/lido/) ([`0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84`](https://etherscan.io/address/0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84)): | Lever | Mutators | Role | Role registry | Role admin | Holder | | ------------------- | ------------------------------------------- | ---------------------- | ------------- | ------------ | ---------- | @@ -73,7 +73,7 @@ Roles marked as unassigned are intentionally left without holders. The DAO can a The GateSeal mechanism allows emergency pausing without a full DAO vote. GateSeal contracts can temporarily pause protected apps, while the Reseal Manager holds both the `PAUSE_ROLE` and `RESUME_ROLE` for pause extension. -For current GateSeal contracts and protected apps, see the [GateSeal registry](/contracts/gate-seal). +For current GateSeal contracts and protected apps, see the [GateSeal registry](/contracts/gate-seal/). GateSeal pauses are time-limited; the Reseal Manager can extend a seal window, and resuming requires a DAO vote that unpauses the app. @@ -81,11 +81,11 @@ GateSeal pauses are time-limited; the Reseal Manager can extend a seal window, a | Lever | Contract | Mutators | Role | Role registry | Role admin | Holder | | -------------------------- | -------------------------------------------------------------------- | ------------------------------------------------- | ----------------------------------------------------------------- | ------------------------- | ------------ | ---------- | -| Consensus settings | [AccountingOracle](/contracts/accounting-oracle) | `setConsensusVersion()`, `setConsensusContract()` | `MANAGE_CONSENSUS_VERSION_ROLE`, `MANAGE_CONSENSUS_CONTRACT_ROLE` | AccountingOracle | Aragon Agent | Unassigned | -| Oracle report bounds | [OracleReportSanityChecker](/contracts/oracle-report-sanity-checker) | Various limit setters | `ALL_LIMITS_MANAGER_ROLE` | OracleReportSanityChecker | Aragon Agent | Unassigned | -| LazyOracle sanity | [LazyOracle](/contracts/lazy-oracle) | `updateSanityParams()` | `UPDATE_SANITY_PARAMS_ROLE` | LazyOracle | Aragon Agent | Unassigned | -| Oracle daemon config | [OracleDaemonConfig](/contracts/oracle-daemon-config) | `setConfig()` | `CONFIG_MANAGER_ROLE` | OracleDaemonConfig | Aragon Agent | Unassigned | -| VEB report data submission | [ValidatorsExitBusOracle](/contracts/validators-exit-bus-oracle) | `submitReportData()` | `SUBMIT_DATA_ROLE` | ValidatorsExitBusOracle | Aragon Agent | Unassigned | +| Consensus settings | [AccountingOracle](/contracts/accounting-oracle/) | `setConsensusVersion()`, `setConsensusContract()` | `MANAGE_CONSENSUS_VERSION_ROLE`, `MANAGE_CONSENSUS_CONTRACT_ROLE` | AccountingOracle | Aragon Agent | Unassigned | +| Oracle report bounds | [OracleReportSanityChecker](/contracts/oracle-report-sanity-checker/) | Various limit setters | `ALL_LIMITS_MANAGER_ROLE` | OracleReportSanityChecker | Aragon Agent | Unassigned | +| LazyOracle sanity | [LazyOracle](/contracts/lazy-oracle/) | `updateSanityParams()` | `UPDATE_SANITY_PARAMS_ROLE` | LazyOracle | Aragon Agent | Unassigned | +| Oracle daemon config | [OracleDaemonConfig](/contracts/oracle-daemon-config/) | `setConfig()` | `CONFIG_MANAGER_ROLE` | OracleDaemonConfig | Aragon Agent | Unassigned | +| VEB report data submission | [ValidatorsExitBusOracle](/contracts/validators-exit-bus-oracle/) | `submitReportData()` | `SUBMIT_DATA_ROLE` | ValidatorsExitBusOracle | Aragon Agent | Unassigned | ### Oracle consensus @@ -93,19 +93,19 @@ Oracle reports are submitted through HashConsensus contracts: | Oracle | HashConsensus Address | | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| [AccountingOracle](/contracts/accounting-oracle) | [`0xD624B08C83bAECF0807Dd2c6880C3154a5F0B288`](https://etherscan.io/address/0xD624B08C83bAECF0807Dd2c6880C3154a5F0B288) | -| [ValidatorsExitBusOracle](/contracts/validators-exit-bus-oracle) | [`0x7FaDB6358950c5fAA66Cb5EB8eE5147De3df355a`](https://etherscan.io/address/0x7FaDB6358950c5fAA66Cb5EB8eE5147De3df355a) | +| [AccountingOracle](/contracts/accounting-oracle/) | [`0xD624B08C83bAECF0807Dd2c6880C3154a5F0B288`](https://etherscan.io/address/0xD624B08C83bAECF0807Dd2c6880C3154a5F0B288) | +| [ValidatorsExitBusOracle](/contracts/validators-exit-bus-oracle/) | [`0x7FaDB6358950c5fAA66Cb5EB8eE5147De3df355a`](https://etherscan.io/address/0x7FaDB6358950c5fAA66Cb5EB8eE5147De3df355a) | ## StakingRouter and modules -Key levers on [StakingRouter](/contracts/staking-router) ([`0xFdDf38947aFB03C621C71b06C9C70bce73f12999`](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999)): +Key levers on [StakingRouter](/contracts/staking-router/) ([`0xFdDf38947aFB03C621C71b06C9C70bce73f12999`](https://etherscan.io/address/0xFdDf38947aFB03C621C71b06C9C70bce73f12999)): | Lever | Mutators | Role | Role registry | Role admin | Holder | | ---------------------- | ------------------------------------------------------------------------- | ------------------------------------ | ------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Module registry | `addStakingModule()`, `updateStakingModule()`, `setStakingModuleStatus()` | `STAKING_MODULE_MANAGE_ROLE` | StakingRouter | Aragon Agent | Aragon Agent ([`0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c`](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c)) | | Module fees | `setStakingModuleFees()` | `STAKING_MODULE_MANAGE_ROLE` | StakingRouter | Aragon Agent | Aragon Agent ([`0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c`](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c)) | | Withdrawal credentials | `setWithdrawalCredentials()` | `MANAGE_WITHDRAWAL_CREDENTIALS_ROLE` | StakingRouter | Aragon Agent | Unassigned | -| Module unvetting | `decreaseStakingModuleVettedKeysCountByNodeOperator()` | `STAKING_MODULE_UNVETTING_ROLE` | StakingRouter | Aragon Agent | [DepositSecurityModule](/contracts/deposit-security-module) ([`0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fD`](https://etherscan.io/address/0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fD)) | +| Module unvetting | `decreaseStakingModuleVettedKeysCountByNodeOperator()` | `STAKING_MODULE_UNVETTING_ROLE` | StakingRouter | Aragon Agent | [DepositSecurityModule](/contracts/deposit-security-module/) ([`0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fD`](https://etherscan.io/address/0xfFA96D84dEF2EA035c7AB153D8B991128e3d72fD)) | ### Active staking modules @@ -117,7 +117,7 @@ Key levers on [StakingRouter](/contracts/staking-router) ([`0xFdDf38947aFB03C621 ## Withdrawals -Key levers on [WithdrawalQueueERC721](/contracts/withdrawal-queue-erc721) ([`0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1`](https://etherscan.io/address/0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1)): +Key levers on [WithdrawalQueueERC721](/contracts/withdrawal-queue-erc721/) ([`0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1`](https://etherscan.io/address/0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1)): | Lever | Mutators | Role | Role registry | Role admin | Holder | | ----------- | ------------------ | ------------- | --------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -129,7 +129,7 @@ Key levers on [WithdrawalQueueERC721](/contracts/withdrawal-queue-erc721) ([`0x8 ### VaultHub -Key levers on [VaultHub](/contracts/vault-hub) ([`0x1d201BE093d847f6446530Efb0E8Fb426d176709`](https://etherscan.io/address/0x1d201BE093d847f6446530Efb0E8Fb426d176709)): +Key levers on [VaultHub](/contracts/vault-hub/) ([`0x1d201BE093d847f6446530Efb0E8Fb426d176709`](https://etherscan.io/address/0x1d201BE093d847f6446530Efb0E8Fb426d176709)): | Lever | Mutators | Role | Role registry | Role admin | Holder | | ----------------- | ------------------------------------------------------ | ------------------------ | ------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -142,7 +142,7 @@ Key levers on [VaultHub](/contracts/vault-hub) ([`0x1d201BE093d847f6446530Efb0E8 ### OperatorGrid -Key levers on [OperatorGrid](/contracts/operator-grid) ([`0xC69685E89Cefc327b43B7234AC646451B27c544d`](https://etherscan.io/address/0xC69685E89Cefc327b43B7234AC646451B27c544d)): +Key levers on [OperatorGrid](/contracts/operator-grid/) ([`0xC69685E89Cefc327b43B7234AC646451B27c544d`](https://etherscan.io/address/0xC69685E89Cefc327b43B7234AC646451B27c544d)): | Lever | Mutators | Role | Role registry | Role admin | Holder | | ------------------ | -------------------------------------------- | --------------- | ------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -165,11 +165,11 @@ Lido V3 includes a Dual Governance system allowing stETH holders to veto DAO dec ## References -- [Deployed contracts (mainnet)](/deployed-contracts) -- [AccountingOracle](/contracts/accounting-oracle) -- [OracleReportSanityChecker](/contracts/oracle-report-sanity-checker) -- [StakingRouter](/contracts/staking-router) -- [WithdrawalQueueERC721](/contracts/withdrawal-queue-erc721) -- [VaultHub](/contracts/vault-hub) -- [OperatorGrid](/contracts/operator-grid) -- [Emergency Brakes Multisigs](/multisigs/emergency-brakes) +- [Deployed contracts (mainnet)](/deployed-contracts/) +- [AccountingOracle](/contracts/accounting-oracle/) +- [OracleReportSanityChecker](/contracts/oracle-report-sanity-checker/) +- [StakingRouter](/contracts/staking-router/) +- [WithdrawalQueueERC721](/contracts/withdrawal-queue-erc721/) +- [VaultHub](/contracts/vault-hub/) +- [OperatorGrid](/contracts/operator-grid/) +- [Emergency Brakes Multisigs](/multisigs/emergency-brakes/) diff --git a/docs/guides/reward-distributor-bot.md b/docs/guides/reward-distributor-bot.md index b834dab81..0c5f974d0 100644 --- a/docs/guides/reward-distributor-bot.md +++ b/docs/guides/reward-distributor-bot.md @@ -2,8 +2,8 @@ ## Introduction -Permissionless reward distribution bot for Lido staking modules. Operates with smart contract based on the [Node Operator Registry](/contracts/node-operators-registry) smart contract. -After the [Accounting Oracle](/guides/oracle-spec/accounting-oracle) completes the third phase, anyone can initiate reward distribution to allocate rewards among Node Operators in the Staking Module, unless the oracle sends the next frame report. +Permissionless reward distribution bot for Lido staking modules. Operates with smart contract based on the [Node Operator Registry](/contracts/node-operators-registry/) smart contract. +After the [Accounting Oracle](/guides/oracle-spec/accounting-oracle/) completes the third phase, anyone can initiate reward distribution to allocate rewards among Node Operators in the Staking Module, unless the oracle sends the next frame report. ## Requirements @@ -20,8 +20,8 @@ After the [Accounting Oracle](/guides/oracle-spec/accounting-oracle) completes t Every epoch daemon checks the staking modules provided in environment. If a module has a non-distributed rewards, the bot pulls the trigger and distributes rewards between Node Operators inside this module. -Basically bot is watching [RewardDistributionState](/contracts/node-operators-registry#getrewarddistributionstate) of module. -If module has `ReadyForDistribution` state, bot triggers [distributeReward](/contracts/node-operators-registry#distributereward) method to distribute rewards. +Basically bot is watching [RewardDistributionState](/contracts/node-operators-registry/#getrewarddistributionstate) of module. +If module has `ReadyForDistribution` state, bot triggers [distributeReward](/contracts/node-operators-registry/#distributereward) method to distribute rewards. ### Envs @@ -55,7 +55,7 @@ poetry run python src/main.py ### Docker -Docker image could be found [here](https://docs.lido.fi/guides/tooling#reward-distribution-bot). +Docker image could be found [here](https://docs.lido.fi/guides/tooling/#reward-distribution-bot). ## Monitoring diff --git a/docs/guides/tooling.md b/docs/guides/tooling.md index a37e8b415..5a457ce0a 100644 --- a/docs/guides/tooling.md +++ b/docs/guides/tooling.md @@ -11,7 +11,7 @@ Oracle daemon for Lido decentralized staking service. - **Commit hash**: [lidofinance/lido-oracle@b2e9296](https://github.com/lidofinance/lido-oracle/commit/b2e92969fd35b2a1838667a290ded649ca33fbf5) - **Last update date**: 10 March 2026 - [**Repository**](https://github.com/lidofinance/lido-oracle/tree/7.1.0) -- [**Documentation**](/guides/oracle-operator-manual) +- [**Documentation**](/guides/oracle-operator-manual/) - [**Audit Report for v7.0.0 (Certora)**](https://github.com/lidofinance/audits/blob/main/Certora%20Lido%20V3%20Oracle%20V7%20Audit%20Report%20-%2012-2025.pdf) - [**Audit Report for v7.0.0 (Composable Security)**](https://github.com/lidofinance/audits/blob/main/Composable%20Security%20Lido%20V3%20Oracle%20V7%20Audit%20Report%20-%2012-2025.pdf) - [**Audit Report for v7.1.0 (Composable Security)**](https://github.com/lidofinance/audits/blob/main/Composable%20Security%20Lido%20Oracle%20V7_1%20Audit%20Report.pdf) @@ -25,7 +25,7 @@ Daemon service which loads LidoOracle events for validator exits and sends out e - **Commit hash**: [lidofinance/validator-ejector@28ae303](https://github.com/lidofinance/validator-ejector/commit/28ae303c3306fa9808b3bcfb8ec6a8ab6af06d02) - **Last update date**: 21 Aug, 2025 - [**Repository**](https://github.com/lidofinance/validator-ejector/tree/1.9.0#readme) -- [**Documentation**](/guides/validator-ejector-guide) +- [**Documentation**](/guides/validator-ejector-guide/) ## Council daemon @@ -36,7 +36,7 @@ The Lido Council Daemon monitors deposit contract keys. - Commit hash: [lidofinance/lido-council-daemon@03f4325d](https://github.com/lidofinance/lido-council-daemon/commit/3f4325d6ecd95b54ab3db730878be2ff288e33bc) - **Last update date**: 2 April, 2026 - [**Repository**](https://github.com/lidofinance/lido-council-daemon/tree/3.7.0) -- [**Documentation**](/guides/deposit-security-manual) +- [**Documentation**](/guides/deposit-security-manual/) ## Keys API @@ -47,4 +47,4 @@ Lido keys HTTP API. - **Commit hash**: [lidofinance/lido-keys-api@99d4d4d](https://github.com/lidofinance/lido-keys-api/commit/99d4d4d99878a192028bb391251976d7fce53ba8) - **Last update date**: 1 April, 2025 - [**Repository**](https://github.com/lidofinance/lido-keys-api/tree/2.2.1) -- [**Documentation**](/guides/kapi-guide) +- [**Documentation**](/guides/kapi-guide/) diff --git a/docs/guides/validator-ejector-guide.md b/docs/guides/validator-ejector-guide.md index d4beeb233..404ee15a2 100644 --- a/docs/guides/validator-ejector-guide.md +++ b/docs/guides/validator-ejector-guide.md @@ -128,7 +128,7 @@ docker run \ node /app/dist/encryptor/encrypt.js ``` -You can find a recommended version's hash [here](/guides/tooling). +You can find a recommended version's hash [here](/guides/tooling/). For platforms with a different architecture but with emulation/transpilation support eg macOS on M processors, additionally specify: @@ -148,7 +148,7 @@ Address of the Consensus Node. ### LOCATOR_ADDRESS -Address of the [LidoLocator](https://github.com/lidofinance/lido-dao/blob/feature/shapella-upgrade/contracts/0.8.9/LidoLocator.sol) contract: [Holešky](https://docs.lido.fi/deployed-contracts/holesky) / [Mainnet](https://docs.lido.fi/deployed-contracts/) +Address of the [LidoLocator](https://github.com/lidofinance/lido-dao/blob/feature/shapella-upgrade/contracts/0.8.9/LidoLocator.sol) contract: [Holešky](https://docs.lido.fi/deployed-contracts/holesky/) / [Mainnet](https://docs.lido.fi/deployed-contracts/) ### STAKING_MODULE_ID diff --git a/docs/guides/verify-steth-on-optimism-upgrade-manual.md b/docs/guides/verify-steth-on-optimism-upgrade-manual.md index 38210fa43..e0b9c7dbd 100644 --- a/docs/guides/verify-steth-on-optimism-upgrade-manual.md +++ b/docs/guides/verify-steth-on-optimism-upgrade-manual.md @@ -15,13 +15,13 @@ This document covers incremental changes proposed with the stETH on Optimism dep ### LidoLocator :::info -A new implementation containing the address of a new `TokenRateNotifier` instance for [`postTokenRebaseReceiver`](https://docs.lido.fi/contracts/lido-locator#posttokenrebasereceiver) +A new implementation containing the address of a new `TokenRateNotifier` instance for [`postTokenRebaseReceiver`](https://docs.lido.fi/contracts/lido-locator/#posttokenrebasereceiver) ::: ### TokenRateNotifier :::info -A standalone (non-proxy) contract proposed to plug to the protocol as a new [token rebase receiver](/contracts/lido-locator#posttokenrebasereceiver). +A standalone (non-proxy) contract proposed to plug to the protocol as a new [token rebase receiver](/contracts/lido-locator/#posttokenrebasereceiver). The contract maintains token rate observers that needs to be notified about token rate changes. @@ -52,7 +52,7 @@ observers[0]=0xd54c1c6413caac3477AC14b2a80D5398E3c32FfE ### OpStackTokenRatePusher :::info -A standalone (non-proxy) contract to be a receiver for the `TokenRateNotifier` contract above, and allowing to push an up-to-date wstETH/stETH [token rate](/contracts/wsteth#stethpertoken) as a part of the `AccountingOracle` report [processing](/contracts/accounting-oracle#report-processing). +A standalone (non-proxy) contract to be a receiver for the `TokenRateNotifier` contract above, and allowing to push an up-to-date wstETH/stETH [token rate](/contracts/wsteth/#stethpertoken) as a part of the `AccountingOracle` report [processing](/contracts/accounting-oracle/#report-processing). The rate gets pushed to an `TokenRateOracle` instance on Optimism. ::: diff --git a/docs/multisigs/committees.md b/docs/multisigs/committees.md index 2496539a4..5ecb99aae 100644 --- a/docs/multisigs/committees.md +++ b/docs/multisigs/committees.md @@ -956,7 +956,7 @@ A Committee without multisig. **Address:** [`0xA1E2CD361e17ba10DCfAe3aA33f463DcB53a2Ffd`](https://app.safe.global/settings/setup?safe=eth:0xA1E2CD361e17ba10DCfAe3aA33f463DcB53a2Ffd) -**Purpose of the multisig:** A short-lived, DAO-mandated working group established solely to manage the [Safe Harbor](https://docs.lido.fi/security/safeharbor) Agreement Details during the audit and rollout, ensuring changes to the allowlist are aligned with DAO intent. This committee will maintain the list by making necessary additions and updates to the set of contracts in scope for Safe Harbor until ownership is handed over to Lido DAO governance. The committee will not manage or custody any funds. +**Purpose of the multisig:** A short-lived, DAO-mandated working group established solely to manage the [Safe Harbor](https://docs.lido.fi/security/safeharbor/) Agreement Details during the audit and rollout, ensuring changes to the allowlist are aligned with DAO intent. This committee will maintain the list by making necessary additions and updates to the set of contracts in scope for Safe Harbor until ownership is handed over to Lido DAO governance. The committee will not manage or custody any funds. **Quorum:** 4/5 diff --git a/docs/multisigs/emergency-brakes.md b/docs/multisigs/emergency-brakes.md index 226897b29..cbfe30d1a 100644 --- a/docs/multisigs/emergency-brakes.md +++ b/docs/multisigs/emergency-brakes.md @@ -4,7 +4,7 @@ **Address:** [`0x8772E3a2D86B9347A2688f9bc1808A6d8917760C`](https://app.safe.global/settings/setup?safe=eth:0x8772E3a2D86B9347A2688f9bc1808A6d8917760C) -**Purpose of the multisig:** The GateSeal Committee is authorized to trigger designated GateSeal contracts to pause selected core protocol sealable smart contracts for a limited period. The pause right is single-use and automatically expires on the respective GateSeal expiration date. The full list of GateSeal contracts is provided [here](/contracts/gate-seal). +**Purpose of the multisig:** The GateSeal Committee is authorized to trigger designated GateSeal contracts to pause selected core protocol sealable smart contracts for a limited period. The pause right is single-use and automatically expires on the respective GateSeal expiration date. The full list of GateSeal contracts is provided [here](/contracts/gate-seal/). **Quorum:** 3/6