Skip to content
Merged
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
66 changes: 66 additions & 0 deletions docs/guides/late-prover-bot.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Late Prover Bot

## Introduction

Late Prover Bot monitors the beacon chain for validator exit requests that have passed their required deadline. When a validator fails to exit on time, the bot generates a cryptographic Merkle proof of the delay and submits it to the `ValidatorExitDelayVerifier` smart contract, enabling penalty enforcement on the responsible node operator.

## Requirements

### Hardware

- 1-core CPU
- 8GB RAM

### Nodes

- Ethereum EL RPC service
- Ethereum CL API service (Beacon Node)

## How to use

The bot runs as a daemon, continuously processing finalized beacon chain roots. For each root, it discovers `ValidatorsExitBusOracle` events in the corresponding EL block range, groups validators by their exit deadline slot, and generates proofs for any that have exceeded their deadline. Proofs are submitted in batches via `verifyValidatorExitDelay()` (or `verifyHistoricalValidatorExitDelay()` for older roots).

### Envs

Required variables are (mainnet):
Comment thread
F4ever marked this conversation as resolved.

| Variable | Default | Description |
|---|---|---|
| `CHAIN_ID` | - | Ethereum chain ID. `1` for mainnet, `560048` for Hoodi |
| `EL_RPC_URLS` | - | Comma-separated list of EL RPC endpoints |
| `CL_API_URLS` | - | Comma-separated list of CL Beacon API endpoints |
| `LIDO_LOCATOR_ADDRESS` | - | Lido Locator contract address. Addresses for each network can be found [here](/deployed-contracts/) |
| `TX_SIGNER_PRIVATE_KEY` | - | Private key used to sign and submit transactions. Not required when `DRY_RUN=true` |
| `DRY_RUN` | `false` | If `true`, proofs are generated but transactions are not sent |

Optional variables can be found [here](https://github.com/lidofinance/late-prover-bot#readme).

## Running

### Source Code

1. Clone repository and install requirements:
```bash
git clone git@github.com:lidofinance/late-prover-bot.git
cd late-prover-bot
```
2. Install dependencies:
```bash
yarn install
yarn run typechain
yarn build
```
3. Run the bot:
```bash
yarn run start:prod
```

### Docker

Docker image can be found [here](/guides/tooling/#late-prover-bot).
Comment thread
F4ever marked this conversation as resolved.

## Monitoring

Prometheus metrics and health check are available on the same port:
- `http://localhost:${HTTP_PORT}/metrics`
- `http://localhost:${HTTP_PORT}/health`
22 changes: 22 additions & 0 deletions docs/guides/tooling.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,25 @@ Lido keys HTTP API.
- **Last update date**: 1 April, 2025
- [**Repository**](https://github.com/lidofinance/lido-keys-api/tree/2.2.1)
- [**Documentation**](/guides/kapi-guide/)

## Validator Exit Bot

Bot that automates triggering exits for Lido validators that have missed their exit deadline using [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) triggerable exits.

- **Version**: 1.0.1
- **Docker image**: sha256:0a649a5eff41a9c05ee82bc974ba4b40943ea2225c37568d52a9f3416f75f31c, [lidofinance/validator-exit-bot@sha256-0a649a5eff41a9c05ee82bc974ba4b40943ea2225c37568d52a9f3416f75f31c](https://hub.docker.com/layers/lidofinance/validator-exit-bot/1.0.1/images/sha256-0a649a5eff41a9c05ee82bc974ba4b40943ea2225c37568d52a9f3416f75f31c)
- **Commit hash**: [lidofinance/validator-exit-bot@edf5daf](https://github.com/lidofinance/validator-exit-bot/commit/edf5daf684f48f8a2b989e49dde0f2afc72565f8)
Comment thread
kate-aleksseeva marked this conversation as resolved.
- **Last update date**: 9 February 2026
- [**Repository**](https://github.com/lidofinance/validator-exit-bot/tree/1.0.1)
- [**Documentation**](/guides/validator-exit-bot)

## Late Prover Bot

Bot that monitors the beacon chain for validators that missed their exit deadline and submits Merkle proofs of the delay to the `ValidatorExitDelayVerifier` contract.

- **Version**: 1.0.5
- **Docker image**: sha256:eb23b4fb757dcdc9d2c418941a2a29ce3513a3800d20e3fa162a594519b7f52c, [lidofinance/late-prover-bot@sha256-eb23b4fb757dcdc9d2c418941a2a29ce3513a3800d20e3fa162a594519b7f52c](https://hub.docker.com/layers/lidofinance/late-prover-bot/1.0.5/images/sha256-eb23b4fb757dcdc9d2c418941a2a29ce3513a3800d20e3fa162a594519b7f52c)
- **Commit hash**: [lidofinance/late-prover-bot@59d102a](https://github.com/lidofinance/late-prover-bot/commit/59d102a25c096e21c76798d0bdae7cae0ba65f56)
- **Last update date**: 28 April 2026
- [**Repository**](https://github.com/lidofinance/late-prover-bot/tree/1.0.5)
- [**Documentation**](/guides/late-prover-bot)
63 changes: 63 additions & 0 deletions docs/guides/validator-exit-bot.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Validator Exit Bot

## Introduction

Validator Exit Bot automates triggering exits for Lido validators that have missed their exit deadline. The bot monitors the [ValidatorExitBusOracle](/guides/oracle-spec/validator-exit-bus) for exit requests, checks the current status of each validator on the beacon chain, and uses [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) triggerable exits to force the exit of any validator that has not exited on time. Exit trigger fees are paid from the bot's account and refunded by the withdrawal vault.

## Requirements

### Hardware

- 1-core CPU
- 1GB RAM

### Nodes

- Ethereum EL RPC service
- Ethereum CL API service (Beacon Node)

## How to use

On startup the bot fetches historical `ExitDataProcessing` events from the `ValidatorExitBusOracle` for the configured lookback period. It then runs in a continuous loop: for each validator in its state, the bot checks whether the validator has already exited on the CL, and if not, whether it has missed its exit deadline. Validators past their deadline are included in a batched `trigger_exits` transaction. The bot's address is set as the refund recipient to recover the per-validator withdrawal request fee.

### Envs

Required variables are (mainnet):

| Variable | Default | Description |
|---|---|---|
| `WEB3_RPC_ENDPOINTS` | - | Comma-separated list of EL RPC endpoints |
Comment thread
F4ever marked this conversation as resolved.
| `CONSENSUS_CLIENT_URL` | - | CL Beacon API endpoint |
| `WALLET_PRIVATE_KEY` | - | Private key used to send transactions. Omit to run in dry mode (no transactions sent) |
| `LIDO_LOCATOR` | `0xC1d0b3DE6792Bf6b4b37EccdcC24e45978Cfd2Eb` | Lido Locator address for Ethereum mainnet. Addresses for other supported networks can be found [here](/deployed-contracts/) |
| `DRY_RUN` | `false` | If `true`, transactions are built but not submitted |

Optional variables can be found [here](https://github.com/lidofinance/validator-exit-bot#readme).

## Running

### Source Code

1. Clone repository and install requirements:
```bash
git clone git@github.com:lidofinance/validator-exit-bot.git
cd validator-exit-bot
```
2. Install requirements:
```bash
poetry install
```
3. Run validator exit bot:
```bash
poetry run python -m src.main
```

### Docker

Docker image can be found [here](/guides/tooling/#validator-exit-bot).
Comment thread
F4ever marked this conversation as resolved.

## Monitoring

Prometheus metrics will be available on endpoint `http://localhost:${PROMETHEUS_PORT}/metrics`.

Health check endpoint: `http://localhost:${SERVER_PORT}/health`.
2 changes: 2 additions & 0 deletions sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ module.exports = {
'guides/kapi-guide',
'guides/reward-distributor-bot',
'guides/depositor-bot',
'guides/late-prover-bot',
'guides/validator-exit-bot',
],
},
'guides/protocol-levers',
Expand Down
Loading