Skip to main content

Subscribing to the important events

Some events in the CSM may occur on the protocol side, such as withdrawal requests, penalties, etc., which require specific actions from the Node Operator (NO).

info

If the guide seems too complicated, make sure to check out a community-developed tool: 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!

info

Check out the video guide by one of the Lido contributors, which explains how to subscribe to the events.

So, what exactly are the events that the NO has to follow?

Contract: VEBO

ValidatorExitRequest

ValidatorExitRequest is the most important event for key management. It requires sending a voluntary exit request using the key specified in the event. If the Node Operator doesn't do this in time, the key becomes stuck, and rewards for the current and upcoming frames until stuck keys are exited frame are zeroed. Following all the events filtered by stakingModuleId=3 (Mainnet), stakingModuleId=4 (Holesky) and nodeOperatorId is essential.

event ValidatorExitRequest(
uint256 indexed stakingModuleId,
uint256 indexed nodeOperatorId,
uint256 indexed validatorIndex,
bytes validatorPubkey,
uint256 timestamp
);
info

This event can be tracked using Ejector. In the case of Ejector usage, the requested validators will be exited automatically if the pre-signed messages for them are uploaded to the Ejector.

Contract: CSM

ELRewardsStealingPenaltyReported

The CSM Committee can report a potentially stolen amount of EL rewards. If so, the NO must either compensate or challenge the report.

event ELRewardsStealingPenaltyReported(
uint256 indexed nodeOperatorId,
bytes32 proposedBlockHash,
uint256 stolenAmount
);

VettedSigningKeysCountDecreased

The uploaded keys might be invalid, so the Node Operator has to remove invalid keys to prevent the others from stopping deposits.

event VettedSigningKeysCountDecreased(
uint256 indexed nodeOperatorId
);

StuckSigningKeysCountChanged

Stuck keys for the Node Operator mean no rewards for the current frame. It's too late already to exit these keys in the current frame, but it is still required to receive further rewards

event StuckSigningKeysCountChanged(
uint256 indexed nodeOperatorId,
uint256 stuckKeysCount
);

InitialSlashingSubmitted

Get notifications when slashing occurs and is reported

event InitialSlashingSubmitted(
uint256 indexed nodeOperatorId,
uint256 keyIndex
);

WithdrawalSubmitted

Information event that the key has been reported as withdrawn, so the required bond for this key is released.

event WithdrawalSubmitted(
uint256 indexed nodeOperatorId,
uint256 keyIndex,
uint256 amount
);

DepositedSigningKeysCountChanged

Information event that the keys have been deposited

event DepositedSigningKeysCountChanged(
uint256 indexed nodeOperatorId,
uint256 depositedKeysCount
);

Contract: CSFeeDistributor

DistributionDataUpdated

Notify when rewards for the current frame are available to claim

event DistributionDataUpdated(
uint256 totalClaimableShares,
bytes32 treeRoot,
string treeCid
);

3rd party notification providers

Node Operators can use OZ Defender or Tenderly as services that allow them to subscribe to the emitted events on the particular contracts and notify in the Telegram, Discord, Email, etc.

It is recommended to use OZ Defender - you can subscribe to all required events per contract in one Monitor using the free plan.

At the same time, Tenderly has some limitations:

  • Not allowed to filter events by two or more fields, so you cannot subscribe to ValidatorExitRequest properly.
  • Batches events and sends them every 15 minutes on the free plan. This is not a problem for CSM events, but you have to visit the app in the case of batch events to see them all.
  • Max 3 alerts per account, so the recommended events are: ELRewardsStealingPenaltyReported, DecreaseVettedSigningKeysCountReported and StuckSigningKeysCountChanged

See corresponding docs for set up guide: