From caeee308ab57838b8ec08def6140356eeb1d3200 Mon Sep 17 00:00:00 2001 From: cakeinpanic Date: Tue, 19 May 2026 15:48:50 +0300 Subject: [PATCH] fix: update 301 links with trailing slash in csm pages --- docs/staking-modules/csm/intro.md | 2 +- docs/staking-modules/csm/join-csm.md | 6 +++--- docs/staking-modules/csm/penalties.md | 2 +- docs/staking-modules/csm/rewards.md | 2 +- docs/staking-modules/csm/validator-exits.md | 6 +++--- .../csm/alerts-and-monitoring/expert-custom-alerts.md | 4 ++-- run-on-lido/csm/best-practices/slashing-prevention.md | 4 ++-- .../key-generation-for-mainnet/index.md | 4 ++-- .../key-generation-for-testnet.md | 4 ++-- run-on-lido/csm/index.md | 4 ++-- .../csm/lido-csm-widget/exiting-csm-validators/index.md | 4 ++-- run-on-lido/csm/lido-csm-widget/rewards-and-bonds.md | 4 ++-- .../lido-csm-widget/upload-remove-view-validator-keys.md | 2 +- run-on-lido/csm/node-setup/DVT-setup/obol.md | 4 ++-- run-on-lido/csm/node-setup/DVT-setup/ssv.md | 6 +++--- run-on-lido/csm/node-setup/advanced/eth-docker.md | 6 +++--- run-on-lido/csm/node-setup/advanced/ethereum-on-arm.md | 6 +++--- run-on-lido/csm/node-setup/advanced/sedge.md | 4 ++-- run-on-lido/csm/node-setup/advanced/systemd/index.md | 2 +- run-on-lido/csm/node-setup/beginner/dappnode.md | 8 ++++---- run-on-lido/csm/node-setup/index.md | 4 ++-- run-on-lido/csm/node-setup/intermediate/ethpillar.md | 4 ++-- run-on-lido/csm/node-setup/intermediate/stereum.md | 4 ++-- run-on-lido/csm/troubleshooting/mev-stealing.md | 6 +++--- run-on-lido/csm/troubleshooting/unbonded-validators.md | 6 +++--- run-on-lido/csm/useful-tools/extra-resources.md | 2 +- 26 files changed, 55 insertions(+), 55 deletions(-) diff --git a/docs/staking-modules/csm/intro.md b/docs/staking-modules/csm/intro.md index 02b04c0cf..927ce4c3d 100644 --- a/docs/staking-modules/csm/intro.md +++ b/docs/staking-modules/csm/intro.md @@ -27,7 +27,7 @@ Community Staking Module (CSM) is a permissionless staking module aimed at attra - `DepositContract` is the official Ethereum deposit contract for validator deposits; - `DepositSecurityModule` or [**DSM**](/guides/deposit-security-manual.md) is a set of smart contract and off-chain parts mitigating the [deposit front-run vulnerability](/guides/deposit-security-manual.md#the-vulnerability); - A validator is considered to be [**“unbonded”**](/staking-modules/csm/join-csm.md#unbonded-validators) when the current Node Operator [bond](./join-csm#bond) is not sufficient to cover this validator; -- The **Curated module** is the first Lido staking module previously referred to as [Node Operators Registry](/contracts/node-operators-registry); +- The **Curated module** is the first Lido staking module previously referred to as [Node Operators Registry](/contracts/node-operators-registry/); - **Easy Track** is a suite of smart contracts and an alternative veto-based voting model that streamlines routine DAO operations; - [**Accounting Oracle**](/contracts/accounting-oracle.md) is a contract which collects information submitted by the off-chain oracles about state of the Lido-participating validators and their balances, the amount of funds accumulated on the protocol vaults (i.e., withdrawal and execution layer rewards vaults), the number of exited validators, the number of withdrawal requests the protocol can process and distributes node-operator rewards and performs `stETH` token rebase; - [**VEBO**](/contracts/validators-exit-bus-oracle.md) or Validators Exit Bus Oracle is a contract that implements an on-chain "source of truth" message bus between the protocol's off-chain oracle and off-chain observers, with the main goal of delivering validator exit requests to the Lido-participating Node Operators. diff --git a/docs/staking-modules/csm/join-csm.md b/docs/staking-modules/csm/join-csm.md index 538ee7b65..ff01eb814 100644 --- a/docs/staking-modules/csm/join-csm.md +++ b/docs/staking-modules/csm/join-csm.md @@ -10,11 +10,11 @@ To become a Node Operator in CSM or register new validators for an existing Node Operator, at least one [`validator pubkey`](https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/phase0/beacon-chain.md#validator), corresponding [`deposit signature`](https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/phase0/beacon-chain.md#signingdata), and the corresponding [bond](./join-csm#bond) amount should be provided. ## Deposit data preparation and upload -CSM accepts deposit data in the same [format](/contracts/node-operators-registry#addsigningkeys) (`validator pubkey` + `deposit signature`) as the [Curated module](/contracts/node-operators-registry.md). The main difference is that the bond must be submitted prior to or alongside the deposit data upload. +CSM accepts deposit data in the same [format](/contracts/node-operators-registry/#addsigningkeys) (`validator pubkey` + `deposit signature`) as the [Curated module](/contracts/node-operators-registry.md). The main difference is that the bond must be submitted prior to or alongside the deposit data upload. [`deposit signature`](https://github.com/ethereum/consensus-specs/blob/v1.4.0/specs/phase0/beacon-chain.md#signingdata) **must** sign the root of the `(deposit_message, domain)`. Where a `domain` is used to identify the chain, and `deposit_message` has the form of the following tuple: - `validator pubkey`; -- `withdrawal_credentials` with the actual [`Lido Withdrawal Vault contract`](/contracts/withdrawal-vault) address. Should be retrieved from [Staking Router](/contracts/staking-router.md#getwithdrawalcredentials); +- `withdrawal_credentials` with the actual [`Lido Withdrawal Vault contract`](/contracts/withdrawal-vault/) address. Should be retrieved from [Staking Router](/contracts/staking-router.md#getwithdrawalcredentials); - `32 ETH amount`; ## Bond @@ -47,7 +47,7 @@ Any unbonded validators are requested to exit. Unbonded but not deposited keys a ::: ### Possible negative stETH rebase consequences -With the [bond](./join-csm#bond) being stored in stETH, there is a risk of a reduction in the [bond](./join-csm#bond) amount due to a negative stETH rebase. This might result in some Node Operators being unable to claim rewards (due to the actual [bond](./join-csm#bond) being lower than required) or even validators becoming unbonded. This problem is described in detail in [Bond Mechanics in Lido ADR](https://hackmd.io/@lido/BJqWx7P0p). For this document, it is worth mentioning that no additional actions are required for CSM due to the low probability of the negative stETH rebase and a dedicated [insurance fund](/contracts/insurance) at the Lido DAO's disposal for possible use as cover. +With the [bond](./join-csm#bond) being stored in stETH, there is a risk of a reduction in the [bond](./join-csm#bond) amount due to a negative stETH rebase. This might result in some Node Operators being unable to claim rewards (due to the actual [bond](./join-csm#bond) being lower than required) or even validators becoming unbonded. This problem is described in detail in [Bond Mechanics in Lido ADR](https://hackmd.io/@lido/BJqWx7P0p). For this document, it is worth mentioning that no additional actions are required for CSM due to the low probability of the negative stETH rebase and a dedicated [insurance fund](/contracts/insurance/) at the Lido DAO's disposal for possible use as cover. ## Deposit data validation and invalidation (aka vetting and unvetting) CSM utilizes an [optimistic vetting](https://hackmd.io/@lido/ryw2Qo5ia) approach. Uploaded deposit data will be treated as valid unless DSM reports it is not. In case of invalid deposit data detection, DSM calls [`decreaseVettedSigningKeysCount`](/staking-modules/csm/contracts/CSModule.md#decreasevettedsigningkeyscount) to set `vettedKeys` pointer to the deposit data prior to the first invalid deposit data. In this case a Node Operator should remove invalid keys to resume stake allocation to the valid non-deposited keys. diff --git a/docs/staking-modules/csm/penalties.md b/docs/staking-modules/csm/penalties.md index 2c8798824..e088dd400 100644 --- a/docs/staking-modules/csm/penalties.md +++ b/docs/staking-modules/csm/penalties.md @@ -31,7 +31,7 @@ Separating these two roles ensures that a penalty can only be applied when two i ## Mechanics There are two mechanics related to Node Operator [bond](./join-csm#bond) penalization. -The first one is burning stETH shares using the [Burner](/contracts/burner) contract. Once confiscated shares are burnt, the total amount of stETH shares decreases. Hence, `shareRate` increases, effectively distributing all burned stETH value between other stETH holders. +The first one is burning stETH shares using the [Burner](/contracts/burner/) contract. Once confiscated shares are burnt, the total amount of stETH shares decreases. Hence, `shareRate` increases, effectively distributing all burned stETH value between other stETH holders. The second mechanic is transferring confiscated stETH to the [Lido DAO Treasury](https://etherscan.io/address/0x3e40D73EB977Dc6a537aF587D48316feE66E9C8c). This approach is applied to penalties that are used to address protocol operational costs (e.g., `keyRemovalCharge`). diff --git a/docs/staking-modules/csm/rewards.md b/docs/staking-modules/csm/rewards.md index 366aca7e0..ae658a5ad 100644 --- a/docs/staking-modules/csm/rewards.md +++ b/docs/staking-modules/csm/rewards.md @@ -8,7 +8,7 @@ There are two types of rewards for CSM Node Operators: ## Node Operator rewards -Node Operator rewards come from the LoE protocol's share of the Consensus and Execution layers' rewards. These rewards are calculated as a percentage of the rewards of a full 32 ETH validator. Node Operator rewards are distributed between all staking modules in the same [way](/contracts/staking-router#fee-distribution) (proportionally based on the number of active validators per module, where `active == deposited - exited`). Each [Accounting Oracle](/contracts/accounting-oracle.md) report allocates a new portion of staking rewards to CSM. Allocated rewards are stored on the module. Then, the allocation of the Node Operator rewards for CSM Node Operators using a Merkle tree is provided by [CSM Performance Oracle](#performance-oracle) once per `frame`, making a new portion of the rewards available for claim. +Node Operator rewards come from the LoE protocol's share of the Consensus and Execution layers' rewards. These rewards are calculated as a percentage of the rewards of a full 32 ETH validator. Node Operator rewards are distributed between all staking modules in the same [way](/contracts/staking-router/#fee-distribution) (proportionally based on the number of active validators per module, where `active == deposited - exited`). Each [Accounting Oracle](/contracts/accounting-oracle.md) report allocates a new portion of staking rewards to CSM. Allocated rewards are stored on the module. Then, the allocation of the Node Operator rewards for CSM Node Operators using a Merkle tree is provided by [CSM Performance Oracle](#performance-oracle) once per `frame`, making a new portion of the rewards available for claim. ## Bond rewards diff --git a/docs/staking-modules/csm/validator-exits.md b/docs/staking-modules/csm/validator-exits.md index 69bd3dec4..40f12709e 100644 --- a/docs/staking-modules/csm/validator-exits.md +++ b/docs/staking-modules/csm/validator-exits.md @@ -11,7 +11,7 @@ Exiting validators using [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) is ::: ## Protocol-initiated exits -For consistency with the core protocol and other staking modules, CSM uses [VEBO](/contracts/validators-exit-bus-oracle) to request or trigger validator exits. Details about the overall processes and mechanisms through which validator exits are requested by the protocol and why, including how these rules apply to CSM, are explained in the Lido on Ethereum Validator Exits SNOP 3.0 ([IPFS](https://ipfs.io/ipfs/QmW9kE61zC61PcuikCQRwn82aoTCj9yPuENGNPML9QLkSM), [GitHub](https://github.com/lidofinance/documents-and-policies/blob/main/Lido%20on%20Ethereum%20Standard%20Node%20Operator%20Protocol%20-%20Validator%20Exits.md)) +For consistency with the core protocol and other staking modules, CSM uses [VEBO](/contracts/validators-exit-bus-oracle/) to request or trigger validator exits. Details about the overall processes and mechanisms through which validator exits are requested by the protocol and why, including how these rules apply to CSM, are explained in the Lido on Ethereum Validator Exits SNOP 3.0 ([IPFS](https://ipfs.io/ipfs/QmW9kE61zC61PcuikCQRwn82aoTCj9yPuENGNPML9QLkSM), [GitHub](https://github.com/lidofinance/documents-and-policies/blob/main/Lido%20on%20Ethereum%20Standard%20Node%20Operator%20Protocol%20-%20Validator%20Exits.md)) From the core protocol side, validator exit can be requested to cover withdrawal requests from stETH holders or according to the DAO's decision. @@ -20,10 +20,10 @@ From CSM side, validator exits can be requested or triggered for: - Validators with an excessive number of [bad performance strikes](penalties.md#bad-performance-strikes). These exits are triggered via the permissionless method on the [CSStrikes](./contracts/CSStrikes.md) contract. :::info -`targetLimitMode = 2` (forced mode) was introduced within the updated version of [Staking Router](https://hackmd.io/@lido/BJXRTxMRp#Forced-Exit-Requests1). In short, it is similar to the existing `targetLimit` but exits for the validators above `targetLimit` with `targetLimitMode = 2` (forced mode) can be requested within the next [VEBO](/contracts/validators-exit-bus-oracle) report, even without a need to fulfill withdrawal requests from stETH holders. +`targetLimitMode = 2` (forced mode) was introduced within the updated version of [Staking Router](https://hackmd.io/@lido/BJXRTxMRp#Forced-Exit-Requests1). In short, it is similar to the existing `targetLimit` but exits for the validators above `targetLimit` with `targetLimitMode = 2` (forced mode) can be requested within the next [VEBO](/contracts/validators-exit-bus-oracle/) report, even without a need to fulfill withdrawal requests from stETH holders. ::: -Node Operators should follow [VEBO](/contracts/validators-exit-bus-oracle) events (for example, by using the [Ejector](https://github.com/lidofinance/validator-ejector)) to ensure they exit validators on time. The following penalties and limiting measures should be applied if the Node Operator fails to exit requested validators after in time: +Node Operators should follow [VEBO](/contracts/validators-exit-bus-oracle/) events (for example, by using the [Ejector](https://github.com/lidofinance/validator-ejector)) to ensure they exit validators on time. The following penalties and limiting measures should be applied if the Node Operator fails to exit requested validators after in time: 1. VEBO will trigger exits for the delayed validators; 2. CSM will penalize the Node Operator's [bond](./join-csm#bond) tokens for the delayed exits; 3. CSM will confiscate `withdrawalRequestFee` paid by the protocol to trigger delayed validator exits from the Node Operator's [bond](./join-csm#bond) tokens; diff --git a/run-on-lido/csm/alerts-and-monitoring/expert-custom-alerts.md b/run-on-lido/csm/alerts-and-monitoring/expert-custom-alerts.md index 5464faaa8..24990b5a8 100644 --- a/run-on-lido/csm/alerts-and-monitoring/expert-custom-alerts.md +++ b/run-on-lido/csm/alerts-and-monitoring/expert-custom-alerts.md @@ -18,7 +18,7 @@ So, what exactly are the events that the operator has to follow? If the guide seems too complicated, make sure to check out a community-developed tool: [CSM Sentinel](https://github.com/skhomuti/csm-sentinel). This is a Telegram bot that you can run on your own or use one of the community-supported instances. Note that community-supported instances come with no guarantee! ::: -## Contract: [VEBO](/contracts/validators-exit-bus-oracle) +## Contract: [VEBO](/contracts/validators-exit-bus-oracle/) - [Mainnet](https://etherscan.io/address/0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e) - [Hoodi](https://hoodi.etherscan.io/address/0x8664d394C2B3278F26A1B44B967aEf99707eeAB2) @@ -142,4 +142,4 @@ See corresponding docs for set up guide: ### Eridian's Pager Duty Setup -[Eridian Alerting and Monitoring Docs](https://docs.eridian.xyz/infrastructure-docs/alerting-and-monitoring) \ No newline at end of file +[Eridian Alerting and Monitoring Docs](https://docs.eridian.xyz/infrastructure-docs/alerting-and-monitoring) diff --git a/run-on-lido/csm/best-practices/slashing-prevention.md b/run-on-lido/csm/best-practices/slashing-prevention.md index 1d12aae34..d8a122b1b 100644 --- a/run-on-lido/csm/best-practices/slashing-prevention.md +++ b/run-on-lido/csm/best-practices/slashing-prevention.md @@ -37,7 +37,7 @@ A typical total slashing penalty is **~0.3 ETH** ## What are the consequences of slashing for the CSM validators? -Once the slashing period has ended and the validator is reported as withdrawn the **difference between the withdrawal balance and 32 ETH is [confiscated](/staking-modules/csm/penalties#reasons) from the Node Operator's bond.** +Once the slashing period has ended and the validator is reported as withdrawn the **difference between the withdrawal balance and 32 ETH is [confiscated](/staking-modules/csm/penalties/#reasons) from the Node Operator's bond.** So, **CSM will confiscate all slashing-related penalties from the Node Operator's bond.** @@ -63,4 +63,4 @@ Forced key migration might be required if your existing setup has hardware issue :::info Note that your malfunctioning setup might return back to normal without you noticing. So, disconnecting it from the network is crucial to avoid slashing. -::: \ No newline at end of file +::: diff --git a/run-on-lido/csm/generating-validator-keys/key-generation-for-mainnet/index.md b/run-on-lido/csm/generating-validator-keys/key-generation-for-mainnet/index.md index bde4dd3d4..c224101f0 100644 --- a/run-on-lido/csm/generating-validator-keys/key-generation-for-mainnet/index.md +++ b/run-on-lido/csm/generating-validator-keys/key-generation-for-mainnet/index.md @@ -191,7 +191,7 @@ Go to **Stakers → Ethereum** in Dappnode UI, click **Upload Keystores**. Import your keystores and enter passwords. Tag them “Lido”; fee recipient set to `0x388C818CA8B9251b393131C08a736A67ccB19297`. -[Import guide →](/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys) +[Import guide →](/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys/) @@ -239,7 +239,7 @@ ethd keys import Refer to **Advanced → Systemd → Method 2** for systemd instructions: -[Systemd Method 2 Guide](/run-on-lido/csm/node-setup/advanced/systemd/method-2-configure-csm-fee-recipient-on-separate-validator-client) +[Systemd Method 2 Guide](/run-on-lido/csm/node-setup/advanced/systemd/method-2-configure-csm-fee-recipient-on-separate-validator-client/) diff --git a/run-on-lido/csm/generating-validator-keys/key-generation-for-testnet.md b/run-on-lido/csm/generating-validator-keys/key-generation-for-testnet.md index 5f88543f7..603bac627 100644 --- a/run-on-lido/csm/generating-validator-keys/key-generation-for-testnet.md +++ b/run-on-lido/csm/generating-validator-keys/key-generation-for-testnet.md @@ -160,7 +160,7 @@ ethd keys import Refer to **Advanced → Systemd → Method 2**: -[Method 2 Systemd Guide](/run-on-lido/csm/node-setup/advanced/systemd/method-2-configure-csm-fee-recipient-on-separate-validator-client) +[Method 2 Systemd Guide](/run-on-lido/csm/node-setup/advanced/systemd/method-2-configure-csm-fee-recipient-on-separate-validator-client/) - \ No newline at end of file + diff --git a/run-on-lido/csm/index.md b/run-on-lido/csm/index.md index 0e4b6f208..b1a112034 100644 --- a/run-on-lido/csm/index.md +++ b/run-on-lido/csm/index.md @@ -12,7 +12,7 @@ We recommend that you first understand the **concepts and requirements** of part | Link | Details | | ---- | ------- | | [Lido CSM Operator Portal](https://operatorportal.lido.fi/modules/community-staking-module) | Concepts and requirements of participating in the Lido CSM. Useful for getting up to speed quickly for new CSM operators. | -| [Lido CSM Documentation](https://docs.lido.fi/staking-modules/csm/intro) | Contracts and detailed specifications of the Lido CSM and guides for advanced users. | +| [Lido CSM Documentation](https://docs.lido.fi/staking-modules/csm/intro/) | Contracts and detailed specifications of the Lido CSM and guides for advanced users. | | [CSM UI on Mainnet](https://csm.lido.fi/)
[CSM UI on Hoodi Testnet](https://csm.testnet.fi/) | This is where you connect your wallet, upload keys, provide and withdraw bonds, and claim rewards. | | [Lido Discord](https://discord.com/invite/lido) | Get support in the `csm-mainnet` and `csm-testnet` channels. Tag `@eenti`, or `@community-validator-support` for technical assistance. | -| Community Lifeguards Telegram: [@entigd](https://t.me/entigd) | DM directly for feedback. | \ No newline at end of file +| Community Lifeguards Telegram: [@entigd](https://t.me/entigd) | DM directly for feedback. | diff --git a/run-on-lido/csm/lido-csm-widget/exiting-csm-validators/index.md b/run-on-lido/csm/lido-csm-widget/exiting-csm-validators/index.md index 360fcfd9d..863ad8cd3 100644 --- a/run-on-lido/csm/lido-csm-widget/exiting-csm-validators/index.md +++ b/run-on-lido/csm/lido-csm-widget/exiting-csm-validators/index.md @@ -18,7 +18,7 @@ If the operator does not exit their validators after the protocol request, the f 1. Exclude the Node Operator from the CSM deposit queue until the issue is resolved. 2. Exclude the Node Operator from the Node Operator rewards allocation cycle. -You can read more about exits [here](/staking-modules/csm/validator-exits). +You can read more about exits [here](/staking-modules/csm/validator-exits/). ### Notifications for exit requests @@ -58,4 +58,4 @@ The 32 ETH deposited to activate each validator key will return to the Lido Pr 1. New validator keys of the CSM operator will not be deposited 2. New Node Operator rewards stop accruing for the CSM operator -Penalties are lifted when there are no more `Stuck Keys`. More details [here](https://operatorportal.lido.fi/modules/community-staking-module#block-0ed61a4c0a5a439bbb4be20e814b4e38). \ No newline at end of file +Penalties are lifted when there are no more `Stuck Keys`. More details [here](https://operatorportal.lido.fi/modules/community-staking-module#block-0ed61a4c0a5a439bbb4be20e814b4e38). diff --git a/run-on-lido/csm/lido-csm-widget/rewards-and-bonds.md b/run-on-lido/csm/lido-csm-widget/rewards-and-bonds.md index 86585dbf1..f6425b615 100644 --- a/run-on-lido/csm/lido-csm-widget/rewards-and-bonds.md +++ b/run-on-lido/csm/lido-csm-widget/rewards-and-bonds.md @@ -19,7 +19,7 @@ sidebar_position: 1 Here, you will see your net rewards and bond claimable in aggregate and broken down into its individual parts. Note that `Locked bond` is also deducted from your aggregate rewards here. -You will also be able to claim your net rewards + bond in total or in individual parts if you wish, and select among 3 token types to receive: ETH (in the form of a [Withdrawal NFT](/guides/lido-tokens-integration-guide#unsteth)) / stETH / wstETH. +You will also be able to claim your net rewards + bond in total or in individual parts if you wish, and select among 3 token types to receive: ETH (in the form of a [Withdrawal NFT](/guides/lido-tokens-integration-guide/#unsteth)) / stETH / wstETH. ### Add Bond tab @@ -56,4 +56,4 @@ This tab allows you to replenish your **Locked bonds** due to MEV theft and resu | Category | Navigation | | ------------------------------------------------------------------------------------------------- | ---------------------------------------------- | | [Bond & Rewards](https://operatorportal.lido.fi/modules/community-staking-module#block-88e6d7eca6364a758541dc1ee66a278f) | CSM Operator Portal: "Economics" section | -| [Bond Penalties](https://operatorportal.lido.fi/modules/community-staking-module#block-3951aa72ba1e471bafe95b40fef65d2b) | CSM Operator Portal: "Penalties" sub-section | \ No newline at end of file +| [Bond Penalties](https://operatorportal.lido.fi/modules/community-staking-module#block-3951aa72ba1e471bafe95b40fef65d2b) | CSM Operator Portal: "Penalties" sub-section | diff --git a/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys.md b/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys.md index 51ceb9af2..2b1d838c1 100644 --- a/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys.md +++ b/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys.md @@ -78,7 +78,7 @@ More details [here](https://operatorportal.lido.fi/modules/community-staking-mod ![Remove keys](/img/csm-guide/keys-3.png) -Once your keys have been removed, the associated bond amounts that you deposited earlier will be available for claiming under the **Bond & Rewards** tab. You can learn more at the [Rewards & Bonds page of this guide](/run-on-lido/csm/lido-csm-widget/rewards-and-bonds). +Once your keys have been removed, the associated bond amounts that you deposited earlier will be available for claiming under the **Bond & Rewards** tab. You can learn more at the [Rewards & Bonds page of this guide](/run-on-lido/csm/lido-csm-widget/rewards-and-bonds/). :::warning Keys that have been deposited cannot be removed and can only be manually exited from the Consensus Layer or ejected via triggerable withdrawal requests to the protocol. diff --git a/run-on-lido/csm/node-setup/DVT-setup/obol.md b/run-on-lido/csm/node-setup/DVT-setup/obol.md index 6fea74c46..b9c17059e 100644 --- a/run-on-lido/csm/node-setup/DVT-setup/obol.md +++ b/run-on-lido/csm/node-setup/DVT-setup/obol.md @@ -115,10 +115,10 @@ Execution & consensus clients will sync. Charon + validator client will wait for ## 8. Upload keys To upload keys to Lido CSM as an Obol DV cluster, do the following: -1. **Create a Node Operator** in the Lido CSM Widget using **Extended Mode** (as described [here](/run-on-lido/csm/lido-csm-widget/operator-roles#extended-mode)). +1. **Create a Node Operator** in the Lido CSM Widget using **Extended Mode** (as described [here](/run-on-lido/csm/lido-csm-widget/operator-roles/#extended-mode)). - **Manager Address** → your **Safe** multi-sig - **Rewards Address** → your **Splitter** contract -2. **Upload `deposit_data.json`** for the validators and provide the required **bond** as described [in this section of the guide](/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys#upload-keys). +2. **Upload `deposit_data.json`** for the validators and provide the required **bond** as described [in this section of the guide](/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys/#upload-keys). ## 9. Exit Validators If you want to exit one or all of the validators in the cluster, the majority of the cluster needs to run the following commands: diff --git a/run-on-lido/csm/node-setup/DVT-setup/ssv.md b/run-on-lido/csm/node-setup/DVT-setup/ssv.md index f8d26d6ef..8a6570d6c 100644 --- a/run-on-lido/csm/node-setup/DVT-setup/ssv.md +++ b/run-on-lido/csm/node-setup/DVT-setup/ssv.md @@ -97,7 +97,7 @@ Then start the service docker compose --profile dkg up -d ``` -To complete the DKG setup make sure to open the port `3030` and edit your operator metadata with the DKG endpoint as shown [here](https://docs.ssv.network/operators/operator-management/setting-operator-metadata). +To complete the DKG setup make sure to open the port `3030` and edit your operator metadata with the DKG endpoint as shown [here](https://docs.ssv.network/operators/operator-management/setting-operator-metadata/). --- ## 5. Create the Cluster Management Contracts @@ -132,10 +132,10 @@ Once all the members have registered their operators and activated DKG we can pr To use your SSV validator(s) with Lido CSM: -1. **Create a Node Operator** in the Lido CSM Widget using **Extended Mode** (as described [here](/run-on-lido/csm/lido-csm-widget/operator-roles#extended-mode)). +1. **Create a Node Operator** in the Lido CSM Widget using **Extended Mode** (as described [here](/run-on-lido/csm/lido-csm-widget/operator-roles/#extended-mode)). - **Manager Address** → your **Safe** multi-sig - **Rewards Address** → your **Splitter** contract -2. **Upload `deposit_data.json`** for the validators and provide the required **bond** as described [in this section of the guide](/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys#upload-keys). +2. **Upload `deposit_data.json`** for the validators and provide the required **bond** as described [in this section of the guide](/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys/#upload-keys). --- diff --git a/run-on-lido/csm/node-setup/advanced/eth-docker.md b/run-on-lido/csm/node-setup/advanced/eth-docker.md index 2bf5bddd0..6a9ea2826 100644 --- a/run-on-lido/csm/node-setup/advanced/eth-docker.md +++ b/run-on-lido/csm/node-setup/advanced/eth-docker.md @@ -59,7 +59,7 @@ ethd config 1. Choose **Mainnet** or **Hoodi** → **Lido-compatible node (Community Staking / Simple DVT)** → **\[Community Staking] CSM node** 2. Select your consensus and execution clients -3. Use default **Checkpoint Sync URL**, **yes** for MEV Boost, **select all** relays (Learn more about CSM relay requirements [here](/run-on-lido/csm/troubleshooting/mev-install#eth-docker)), **yes** for Grafana dashboards, and set optional graffiti +3. Use default **Checkpoint Sync URL**, **yes** for MEV Boost, **select all** relays (Learn more about CSM relay requirements [here](/run-on-lido/csm/troubleshooting/mev-install/#eth-docker)), **yes** for Grafana dashboards, and set optional graffiti 4. **\[For Testnet only]** **yes** to generate validator keys: set quantity, password, save mnemonic, verify fee recipient on [CSM Operator Portal](https://operatorportal.lido.fi/modules/community-staking-module) 5. **\[For Mainnet]** **no** to generate keys here (use secure workflow in [Key Generation for Mainnet guide](/run-on-lido/csm/generating-validator-keys/key-generation-for-mainnet/)) @@ -100,7 +100,7 @@ ethd keys import ### Upload deposit data -Copy the deposit data generated by the command below for [uploading onto the Lido CSM Widget](/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys#upload-keys). +Copy the deposit data generated by the command below for [uploading onto the Lido CSM Widget](/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys/#upload-keys). ```bash cat ~/eth-docker/.eth/validator_keys/deposit*json @@ -131,4 +131,4 @@ ethd terminate # delete and reinstall ``` ### Keep your clients up to date -To keep your clients and other packages up to date for network upgrades, security releases or minor improvements please follow [this guide](/run-on-lido/csm/updates-and-maintenance/client-updates). \ No newline at end of file +To keep your clients and other packages up to date for network upgrades, security releases or minor improvements please follow [this guide](/run-on-lido/csm/updates-and-maintenance/client-updates/). diff --git a/run-on-lido/csm/node-setup/advanced/ethereum-on-arm.md b/run-on-lido/csm/node-setup/advanced/ethereum-on-arm.md index 553b73c7e..237688b55 100644 --- a/run-on-lido/csm/node-setup/advanced/ethereum-on-arm.md +++ b/run-on-lido/csm/node-setup/advanced/ethereum-on-arm.md @@ -105,7 +105,7 @@ You need to run a Full or Archive Ethereum node. This follows the standard proce :::warning - Ensure you use the service name with the `-mev` suffix (e.g., `lighthouse-beacon-mev`, `prysm-beacon-mev`, `teku-beacon-mev`) to enable MEV, which is required for running CSM validators. Learn more about CSM relay requirements [here](/run-on-lido/csm/troubleshooting/mev-install#ethereum-on-arm). + Ensure you use the service name with the `-mev` suffix (e.g., `lighthouse-beacon-mev`, `prysm-beacon-mev`, `teku-beacon-mev`) to enable MEV, which is required for running CSM validators. Learn more about CSM relay requirements [here](/run-on-lido/csm/troubleshooting/mev-install/#ethereum-on-arm). ::: 3. **Start MEV Boost**: @@ -211,7 +211,7 @@ For more details on importing keys, refer to the [Ethereum on ARM Validator Clie ## Create and Activate the CSM Validator -For instructions on how to upload your deposit data and activate your validator, please refer to the [CSM Activation](/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys) guide. +For instructions on how to upload your deposit data and activate your validator, please refer to the [CSM Activation](/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys/) guide. ## Running CSM on Hoodi Testnet @@ -293,7 +293,7 @@ You can test the setup on the Hoodi testnet as well. The process is the same, yo ``` 2. **Generate Keys for Hoodi**: - Follow the testnet instructions in the [Key Generation guide](/run-on-lido/csm/generating-validator-keys/key-generation-for-testnet) (selecting Hoodi network). + Follow the testnet instructions in the [Key Generation guide](/run-on-lido/csm/generating-validator-keys/key-generation-for-testnet/) (selecting Hoodi network). 3. **Import and Start on Testnet**: diff --git a/run-on-lido/csm/node-setup/advanced/sedge.md b/run-on-lido/csm/node-setup/advanced/sedge.md index 6f64247c7..99b339566 100644 --- a/run-on-lido/csm/node-setup/advanced/sedge.md +++ b/run-on-lido/csm/node-setup/advanced/sedge.md @@ -54,7 +54,7 @@ Follow the terminal UI prompts to: 5. Use default **Checkpoint Sync** and **No** for **expose all ports**. 6. Choose **Create** for **JWT Source** and **yes** for the monitoring stack. -The MEV-Boost service is configured with designated relays. Learn more about CSM relay requirements [here](/run-on-lido/csm/troubleshooting/mev-install#sedge). +The MEV-Boost service is configured with designated relays. Learn more about CSM relay requirements [here](/run-on-lido/csm/troubleshooting/mev-install/#sedge). ### Generate & Import Validator Keys @@ -134,4 +134,4 @@ sedge monitoring init lido --node-operator-id --network This will install Grafana, Prometheus, Node Exporter, and Lido Exporter with CSM dashboards. Access at `INTERNAL_IP:3000`. ### Keep your clients up to date -To keep your clients and other packages up to date for network upgrades, security releases or minor improvements please follow [this guide](/run-on-lido/csm/updates-and-maintenance/client-updates). \ No newline at end of file +To keep your clients and other packages up to date for network upgrades, security releases or minor improvements please follow [this guide](/run-on-lido/csm/updates-and-maintenance/client-updates/). diff --git a/run-on-lido/csm/node-setup/advanced/systemd/index.md b/run-on-lido/csm/node-setup/advanced/systemd/index.md index 98102b338..bba4fa653 100644 --- a/run-on-lido/csm/node-setup/advanced/systemd/index.md +++ b/run-on-lido/csm/node-setup/advanced/systemd/index.md @@ -7,7 +7,7 @@ sidebar_position: 4 This section of the guide focuses on helping CSM Operators run CSM validator keys on their existing validator node setup. :::info -Your relay configuration must comply with [CSM requirements](/run-on-lido/csm/troubleshooting/mev-install#systemd). +Your relay configuration must comply with [CSM requirements](/run-on-lido/csm/troubleshooting/mev-install/#systemd). ::: For an end-to-end setup of your validator node from scratch, refer to these community guides: diff --git a/run-on-lido/csm/node-setup/beginner/dappnode.md b/run-on-lido/csm/node-setup/beginner/dappnode.md index b7b71f582..17d4e8280 100644 --- a/run-on-lido/csm/node-setup/beginner/dappnode.md +++ b/run-on-lido/csm/node-setup/beginner/dappnode.md @@ -24,8 +24,8 @@ For Testnet setups, replace all Holesky references with Hoodi. Dappnode sells ready-to-use machines, like the [Lido edition](https://dappnode.com/collections/frontpage/products/home-lido). For a DIY install, you can either: -- Use the [ISO installer](https://docs.dappnode.io/docs/user/install/iso) (Debian + Dappnode bundled). -- Install Debian manually and run the [Dappnode install script](https://docs.dappnode.io/docs/user/install/script). +- Use the [ISO installer](https://docs.dappnode.io/docs/user/install/iso/) (Debian + Dappnode bundled). +- Install Debian manually and run the [Dappnode install script](https://docs.dappnode.io/docs/user/install/script/). You’ll manage Dappnode via its web UI. To access it remotely, set up a VPN: @@ -36,7 +36,7 @@ You’ll manage Dappnode via its web UI. To access it remotely, set up a VPN: ### Setting up the Full Node -With your VPN active, visit [http://my.dappnode/](http://my.dappnode/) → **Stakers** tab. Then select your network (Mainnet or Hoodi), pick execution & consensus clients, enable Web3signer, and choose MEV-Boost relays. Learn more about [CSM relay requirements](/run-on-lido/csm/troubleshooting/mev-install#dappnode). +With your VPN active, visit [http://my.dappnode/](http://my.dappnode/) → **Stakers** tab. Then select your network (Mainnet or Hoodi), pick execution & consensus clients, enable Web3signer, and choose MEV-Boost relays. Learn more about [CSM relay requirements](/run-on-lido/csm/troubleshooting/mev-install/#dappnode). ![Chain syncing on Dashboard](/img/csm-guide/dappnode-1.png) @@ -57,4 +57,4 @@ This gives you the local CSM widget plus extra features: - Configure Telegram alerts in Notifications. ### Keep your clients up to date -To keep your clients and other packages up to date for network upgrades, security releases or minor improvements please follow [this guide](/run-on-lido/csm/updates-and-maintenance/client-updates). \ No newline at end of file +To keep your clients and other packages up to date for network upgrades, security releases or minor improvements please follow [this guide](/run-on-lido/csm/updates-and-maintenance/client-updates/). diff --git a/run-on-lido/csm/node-setup/index.md b/run-on-lido/csm/node-setup/index.md index b4d6f6cd0..e543f7d2b 100644 --- a/run-on-lido/csm/node-setup/index.md +++ b/run-on-lido/csm/node-setup/index.md @@ -22,6 +22,6 @@ Each track includes guides tailored to different node management tools and prefe ## Additional Guides -Regardless of which setup path you choose, there are a few key steps every operator must complete to ensure their validator functions correctly within the Community Staking Module, and [avoid being penalized](/run-on-lido/csm/troubleshooting/mev-stealing). Don’t skip these: +Regardless of which setup path you choose, there are a few key steps every operator must complete to ensure their validator functions correctly within the Community Staking Module, and [avoid being penalized](/run-on-lido/csm/troubleshooting/mev-stealing/). Don’t skip these: -[**Setting the fee recipient for CSM validators →**](/run-on-lido/csm/troubleshooting/setting-the-fee-recipient-for-csm-validators) \ No newline at end of file +[**Setting the fee recipient for CSM validators →**](/run-on-lido/csm/troubleshooting/setting-the-fee-recipient-for-csm-validators/) diff --git a/run-on-lido/csm/node-setup/intermediate/ethpillar.md b/run-on-lido/csm/node-setup/intermediate/ethpillar.md index 6700edd26..b95209195 100644 --- a/run-on-lido/csm/node-setup/intermediate/ethpillar.md +++ b/run-on-lido/csm/node-setup/intermediate/ethpillar.md @@ -22,7 +22,7 @@ Go to the [Coincashew website](https://www.coincashew.com/coins/overview-eth/eth Next, type and enter `ethpillar` to launch the terminal UI and: -1. Sync an execution client and a consensus + validator client. The MEV Boost service is installed with pre-configured relays. Learn more about CSM relay requirements [here](/run-on-lido/csm/troubleshooting/mev-install#ethpillar). +1. Sync an execution client and a consensus + validator client. The MEV Boost service is installed with pre-configured relays. Learn more about CSM relay requirements [here](/run-on-lido/csm/troubleshooting/mev-install/#ethpillar). 2. **\[For Testnet only]** select **Generate validator keys**, choose how many to generate, set a password, and save your 24-word mnemonic. 3. **\[For Mainnet]** select **No** for key generation here (use a secure process in the [Key Generation for Mainnet guide](/run-on-lido/csm/generating-validator-keys/key-generation-for-mainnet/)). 4. Verify the fee recipient and withdrawal address below or on the [CSM Operator Portal](https://operatorportal.lido.fi/modules/community-staking-module). @@ -104,4 +104,4 @@ This lets you attach a new validator client to an existing beacon node, with a s ### Keep your clients up to date -To keep your clients and other packages up to date for network upgrades, security releases or minor improvements please follow [this guide](/run-on-lido/csm/updates-and-maintenance/client-updates). \ No newline at end of file +To keep your clients and other packages up to date for network upgrades, security releases or minor improvements please follow [this guide](/run-on-lido/csm/updates-and-maintenance/client-updates/). diff --git a/run-on-lido/csm/node-setup/intermediate/stereum.md b/run-on-lido/csm/node-setup/intermediate/stereum.md index 9921979cf..b7ab40b15 100644 --- a/run-on-lido/csm/node-setup/intermediate/stereum.md +++ b/run-on-lido/csm/node-setup/intermediate/stereum.md @@ -58,7 +58,7 @@ Select **Ethereum** → **CSM** as your use case (we recommend testing on a test ![Select Use Case](/img/csm-guide/stereum-4.png) -Next, pick execution, consensus, and validator clients, as well as a sync mode (Checkpoint Sync is recommended) and MEV-Boost relays (Learn more about CSM relay requirements [here](/run-on-lido/csm/troubleshooting/mev-install#stereum)): +Next, pick execution, consensus, and validator clients, as well as a sync mode (Checkpoint Sync is recommended) and MEV-Boost relays (Learn more about CSM relay requirements [here](/run-on-lido/csm/troubleshooting/mev-install/#stereum)): ![Services Installation Options](/img/csm-guide/stereum-5.png) @@ -100,4 +100,4 @@ After import, you’ll see your validator in the UI: Follow the [Generating Validator Keys guide](/run-on-lido/csm/generating-validator-keys/) and ensure you set the correct withdrawal address. ### Keep your clients up to date -To keep your clients and other packages up to date for network upgrades, security releases or minor improvements please follow [this guide](/run-on-lido/csm/updates-and-maintenance/client-updates). \ No newline at end of file +To keep your clients and other packages up to date for network upgrades, security releases or minor improvements please follow [this guide](/run-on-lido/csm/updates-and-maintenance/client-updates/). diff --git a/run-on-lido/csm/troubleshooting/mev-stealing.md b/run-on-lido/csm/troubleshooting/mev-stealing.md index 81c27b069..57e779007 100644 --- a/run-on-lido/csm/troubleshooting/mev-stealing.md +++ b/run-on-lido/csm/troubleshooting/mev-stealing.md @@ -10,11 +10,11 @@ sidebar_position: 2 ## How does CSM react to MEV stealing? -Once such a block is detected, the MEV Stealing Detection Committee (dev EOA on the testnet and CSM Multisig on the mainnet) reports this fact on-chain using the [`reportELRewardsStealingPenalty`](/staking-modules/csm/contracts/CSModule#reportelrewardsstealingpenalty) method. Call of the method results in a lock of the stolen amount + fixed stealing fine (0.1 ETH). Locked funds have not yet been burned, but will be accounted for during the required [bond](/staking-modules/csm/join-csm#bond) calculation. +Once such a block is detected, the MEV Stealing Detection Committee (dev EOA on the testnet and CSM Multisig on the mainnet) reports this fact on-chain using the [`reportELRewardsStealingPenalty`](/staking-modules/csm/contracts/CSModule/#reportelrewardsstealingpenalty) method. Call of the method results in a lock of the stolen amount + fixed stealing fine (0.1 ETH). Locked funds have not yet been burned, but will be accounted for during the required [bond](/staking-modules/csm/join-csm/#bond) calculation. Right after that, a challenge period starts. During this period, Node Operators can: - **Reach out to the Lido DAO** using a [dedicated section on the research forum](https://research.lido.fi/c/csm-support/21) (or to the Dev team in Discord for the testnet) if you disagree with the report. For example, they think the detection was incorrect and all MEV + base rewards were properly allocated. If so, the MEV Stealing Detection Committee can cancel the penalty. - **Compensate for the stolen funds + stealing fine** using the bond unlock tab ([mainnet link](https://csm.lido.fi/bond/unlock), [testnet link](https://csm.testnet.fi/bond/unlock)) on CSM UI. This is the best option! -- **Top-up bond to compensate for the bond lock** using the top-up bond tab ([mainnet link](https://csm.lido.fi/bond/add), [testnet link](https://csm.testnet.fi/bond/add)) on CSM UI. In this case, the penalty would still be applied later, but no [unbonded](/staking-modules/csm/join-csm#unbonded-validators) validators would appear if the top-up were sufficient. This case is a slightly worse option since the beneficial bond curve will be reset after the penalty confirmation, but it is still acceptable. -- **Do nothing.** In this case, a penalty would be proposed to the Lido DAO for confirmation via an EasyTrack motion. If the LDO holders do not object to the motion, the MEV detection committee will enact it, and bond tokens will be burned. If, after the burn, the bond is not sufficient to cover all uploaded keys, either new deposits to the [unbonded keys](/staking-modules/csm/join-csm#unbonded-validators) will be suspended, or, if all of the keys are already deposited, unbonded validators will be requested to exit. You can read more on the measures applied in case of not exiting the validators [here](/staking-modules/csm/validator-exits#protocol-initiated-exits). \ No newline at end of file +- **Top-up bond to compensate for the bond lock** using the top-up bond tab ([mainnet link](https://csm.lido.fi/bond/add), [testnet link](https://csm.testnet.fi/bond/add)) on CSM UI. In this case, the penalty would still be applied later, but no [unbonded](/staking-modules/csm/join-csm/#unbonded-validators) validators would appear if the top-up were sufficient. This case is a slightly worse option since the beneficial bond curve will be reset after the penalty confirmation, but it is still acceptable. +- **Do nothing.** In this case, a penalty would be proposed to the Lido DAO for confirmation via an EasyTrack motion. If the LDO holders do not object to the motion, the MEV detection committee will enact it, and bond tokens will be burned. If, after the burn, the bond is not sufficient to cover all uploaded keys, either new deposits to the [unbonded keys](/staking-modules/csm/join-csm/#unbonded-validators) will be suspended, or, if all of the keys are already deposited, unbonded validators will be requested to exit. You can read more on the measures applied in case of not exiting the validators [here](/staking-modules/csm/validator-exits/#protocol-initiated-exits). diff --git a/run-on-lido/csm/troubleshooting/unbonded-validators.md b/run-on-lido/csm/troubleshooting/unbonded-validators.md index 1633ea35c..d569cb6ee 100644 --- a/run-on-lido/csm/troubleshooting/unbonded-validators.md +++ b/run-on-lido/csm/troubleshooting/unbonded-validators.md @@ -3,13 +3,13 @@ sidebar_position: 3 --- # ⚠️ Unbonded validators -To [upload](/staking-modules/csm/join-csm#deposit-data-preparation-and-upload) validator keys to CSM, Node Operators must provide a corresponding [bond](/staking-modules/csm/join-csm#bond) amount. The Node Operator creation and upload keys methods ensure that the bond amount provided is sufficient to cover all uploaded validator keys. However, Node Operators' bond might be penalized if they misbehave. +To [upload](/staking-modules/csm/join-csm/#deposit-data-preparation-and-upload) validator keys to CSM, Node Operators must provide a corresponding [bond](/staking-modules/csm/join-csm/#bond) amount. The Node Operator creation and upload keys methods ensure that the bond amount provided is sufficient to cover all uploaded validator keys. However, Node Operators' bond might be penalized if they misbehave. -If the penalty is applied, [unbonded validators](/staking-modules/csm/join-csm#unbonded-validators) might appear. As the documentation [describes](/staking-modules/csm/join-csm#unbonded-validators), any new unbonded validators will be requested to exit during the upcoming [VEBO](/contracts/validators-exit-bus-oracle) reports. Let's dig deeper into the process of handling unbonded validators to find out what Node Operators can do to prevent the emergence of unbonded validators and what they should do if some of their validators become unbonded. +If the penalty is applied, [unbonded validators](/staking-modules/csm/join-csm/#unbonded-validators) might appear. As the documentation [describes](/staking-modules/csm/join-csm/#unbonded-validators), any new unbonded validators will be requested to exit during the upcoming [VEBO](/contracts/validators-exit-bus-oracle/) reports. Let's dig deeper into the process of handling unbonded validators to find out what Node Operators can do to prevent the emergence of unbonded validators and what they should do if some of their validators become unbonded. ## Unbonded validators and how they appear -[Unbonded validators](/staking-modules/csm/join-csm#unbonded-validators) appear if the Node Operator's [bond](/staking-modules/csm/join-csm#bond) is no longer sufficient to cover all of the validator keys uploaded to CSM by the Node Operator. +[Unbonded validators](/staking-modules/csm/join-csm/#unbonded-validators) appear if the Node Operator's [bond](/staking-modules/csm/join-csm/#bond) is no longer sufficient to cover all of the validator keys uploaded to CSM by the Node Operator. ![unbonded-1](/img/csm-guide/unbonded-1.png) diff --git a/run-on-lido/csm/useful-tools/extra-resources.md b/run-on-lido/csm/useful-tools/extra-resources.md index cbd5063ae..5f5f822c9 100644 --- a/run-on-lido/csm/useful-tools/extra-resources.md +++ b/run-on-lido/csm/useful-tools/extra-resources.md @@ -5,7 +5,7 @@ sidebar_position: 1 # 📚 Extra Resources * Lido [Discord](https://discord.gg/lido) -* Lido [Documentation](https://docs.lido.fi/staking-modules/csm/intro) +* Lido [Documentation](https://docs.lido.fi/staking-modules/csm/intro/) * Lido [Node Operator Portal](https://operatorportal.lido.fi/) * [CSM Rewards Calculator](https://www.nodeop.info/) * Ethstaker [Discord](https://discord.gg/krrwKQSV) and [Reddit](https://www.reddit.com/r/ethstaker/)