> For the complete documentation index, see [llms.txt](https://service.block-pro.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://service.block-pro.net/mainnet/monad/validator.md).

# Validator

Register a synchronized Monad node as a Mainnet validator.

**Mainnet · validator onboarding**

First synchronize your [Full Node](/mainnet/monad/full-node.md). Registration requires at least **100,000 MON self-stake** plus fees. Active participation additionally requires at least **10,000,000 MON total stake** and a position in the top **200** validators, while retaining the minimum self-stake. Confirm the staking requirements in the [official validator guide](https://docs.monad.xyz/node-ops/validator-installation) before registration.

## Configure validator operation

### Save the current node configuration

Keep your existing identity and discovery record.

```bash
sudo cp -p /home/monad/monad-bft/config/node.toml /home/monad/monad-bft/config/node.toml.before-validator
```

### Download the validator template

Save a separate file so current settings are not overwritten.

```bash
curl -fL https://bucket.monadinfra.com/config/mainnet/latest/node.toml -o "$HOME/monad-validator-template.toml"
```

### Review and apply settings

Compare the template with your node. Set a real beneficiary rewards address and retain your keystores and signed discovery record.

```bash
sudo nano /home/monad/monad-bft/config/node.toml
```

Restart according to the configuration change and verify synchronization before registering. A full node’s zero beneficiary should not remain in a validator configuration.

## Install the staking CLI

Use a trusted operator workstation for staking. The official CLI supports Ledger hardware wallets.

### Install Python tooling

Prepare an isolated Python environment.

```bash
sudo apt install -y git python3 python3-venv
```

### Clone the CLI

Download the official staking utility.

```bash
git clone https://github.com/monad-developers/staking-sdk-cli.git
```

### Open the repository

Run the remaining CLI commands here.

```bash
cd staking-sdk-cli
```

### Create an environment

Keep dependencies separate from system Python.

```bash
python3 -m venv cli-venv
```

### Activate

Use the isolated environment.

```bash
source cli-venv/bin/activate
```

### Install dependencies

Install the checked-out CLI package.

```bash
pip install .
```

### Copy its configuration

Create your local configuration.

```bash
cp staking-cli/config.toml.example config.toml
```

### Restrict configuration permissions

Keep wallet configuration private.

```bash
chmod 0600 config.toml
```

### Configure Mainnet and the signing wallet

Set the mainnet RPC (chain 143), funded signer and wallet option. Prefer the documented Ledger setup for production.

```bash
nano config.toml
```

## Register and verify

Recover the current node SECP and BLS keys using `monad-keystore recover` in a private operator session, as described in the [upstream onboarding workflow](https://github.com/monad-developers/staking-sdk-cli/blob/main/docs/validator-onboarding.md). Compare the derived public keys to the running node. Old recovery files can use an outdated keystore representation.

### Open interactive onboarding

Choose Add Validator and enter your node identity, authorized address and stake. Review the public-key match and transaction before confirming.

```bash
python staking-cli/main.py tui
```

The authorized address controls validator operations; it must be an address you control. Wait for transaction status 1, record the returned validator ID, and check the validator record and execution set through the CLI’s Query menu. Registration alone does not imply active-set membership.

[CLI reference](https://github.com/monad-developers/staking-sdk-cli) · [Validator onboarding](https://docs.monad.xyz/node-ops/validator-installation).
