Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/staking-modules/csm/intro.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
6 changes: 3 additions & 3 deletions docs/staking-modules/csm/join-csm.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion docs/staking-modules/csm/penalties.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`).

Expand Down
2 changes: 1 addition & 1 deletion docs/staking-modules/csm/rewards.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
6 changes: 3 additions & 3 deletions docs/staking-modules/csm/validator-exits.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
[Eridian Alerting and Monitoring Docs](https://docs.eridian.xyz/infrastructure-docs/alerting-and-monitoring)
4 changes: 2 additions & 2 deletions run-on-lido/csm/best-practices/slashing-prevention.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.**

Expand All @@ -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.
:::
:::
Original file line number Diff line number Diff line change
Expand Up @@ -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/)

</TabItem>
<TabItem value="ethpillar" label="EthPillar">
Expand Down Expand Up @@ -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/)

</TabItem>
</Tabs>
Original file line number Diff line number Diff line change
Expand Up @@ -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/)

</TabItem>
</Tabs>
</Tabs>
4 changes: 2 additions & 2 deletions run-on-lido/csm/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/)<br /> [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. |
| Community Lifeguards Telegram: [@entigd](https://t.me/entigd) | DM directly for feedback. |
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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).
Penalties are lifted when there are no more `Stuck Keys`. More details [here](https://operatorportal.lido.fi/modules/community-staking-module#block-0ed61a4c0a5a439bbb4be20e814b4e38).
4 changes: 2 additions & 2 deletions run-on-lido/csm/lido-csm-widget/rewards-and-bonds.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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 |
| [Bond Penalties](https://operatorportal.lido.fi/modules/community-staking-module#block-3951aa72ba1e471bafe95b40fef65d2b) | CSM Operator Portal: "Penalties" sub-section |
Loading
Loading