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).
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!
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
);
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
andStuckSigningKeysCountChanged
See corresponding docs for set up guide: