> For the complete documentation index, see [llms.txt](https://docs.espressosys.com/network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.espressosys.com/network/developer/operators/run-a-node.md).

# Run a Validator Node

Espresso is secured by a permissionless, delegated Proof of Stake validator set. To participate as an operator, you register your node in the stake table contract, have stake delegated to it, and run the Espresso node software pointed at the network of your choice.

This page is the starting point. Pick the network you're targeting below for the exact image tag, genesis file, and environment variables.

## Pick your network

| Network           | When to use it                                                                   | L1               | Operator guide                                                                                |
| ----------------- | -------------------------------------------------------------------------------- | ---------------- | --------------------------------------------------------------------------------------------- |
| **Mainnet**       | Production. Real ESP staking, real rewards, real users.                          | Ethereum mainnet | [Running a Mainnet Node](/network/developer/operators/run-a-node/running-a-mainnet-1-node.md) |
| **Decaf Testnet** | Test integrations and node setups before going to Mainnet. Limited operator set. | Ethereum Sepolia | [Running a Decaf Node](/network/developer/operators/run-a-node/running-a-node.md)             |

{% hint style="info" %}
**Decaf access is gated.** Decaf node operators are limited to a select group. If you're interested in running a node on a future Espresso release, [contact us](https://form.typeform.com/to/KgayxNsX?typeform-source=www.espressosys.com).
{% endhint %}

## What every operator does

Every Espresso validator node (regardless of network) goes through the same lifecycle. The per-network operator guide above gives the exact commands and contract addresses; this is the shape of the process:

1. **Generate consensus keys.** Each node needs a BLS staking key for consensus messages and a Schnorr state key for onchain state attestations.
2. **Register the validator.** Run `staking-cli register-validator` against the stake table contract on the target L1 (Ethereum for Mainnet, Sepolia for Decaf). The Ethereum account derived from `MNEMONIC` + `ACCOUNT_INDEX` becomes the validator address that receives commission.
3. **Get stake delegated.** Either delegate to yourself or attract third-party delegators. The minimum delegation is 1 ESP. Participation is currently limited to the top 100 nodes by delegated stake per epoch.
4. **Run the node.** Pull the network-specific Docker image, set the environment variables, and point it at the network's CDN, state relay, and L1 provider.
5. **Claim rewards.** Rewards do not auto-compound. Use `staking-cli claim-rewards` or the staking UI to claim and, if desired, re-delegate.

The CLI commands are the same shape across networks; only the contract addresses, image tag, and endpoints differ.

## Related references

* [Networks](/network/network/networks.md): public endpoints, contract addresses, block explorers for each network.
* [Stake Table Contract](/network/network/networks.md#mainnet): validator registration and stake delegation contract addresses on Ethereum.
* [Staking rewards](https://github.com/EspressoSystems/espresso-network/blob/main/staking-cli/README.md): how block rewards are distributed across validators and delegators.
* [Delegate $ESP](/network/developer/operators/run-a-node/delegation-ui.md): UI walkthrough for delegators (the other side of the staking relationship).
