> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Validator Installation

Setting up a validator is very similar to setting up a full node with a few extra steps.

Start by configuring a node according to the full node installation
[instructions](/node-ops/full-node-installation).

When the full node is fully operational and synced to the network tip, you can register your node
as a prospective validator by calling
[`addValidator`](/reference/staking/api#addvalidator) on the staking
precompile. This function requires passing at least `MIN_VALIDATE_STAKE = 100_000 MON` (the
minimum self-stake).

After registering, your validator must also satisfy the following conditions, described in
greater depth in the staking [docs](/monad-arch/consensus/staking):

1. Must have a total stake of at least `ACTIVE_VALIDATOR_STAKE = 10_000_000 MON`
2. Must be in the top `ACTIVE_VALSET_SIZE = 200` validators by stake weight
3. Must continue to have a self-stake of `MIN_VALIDATE_STAKE = 100_000 MON`

When all three conditions are achieved, the validator will become active in the next epoch.

## Staking CLI

[`staking-sdk-cli`](https://github.com/monad-developers/staking-sdk-cli) is an open-source
staking CLI tool for interfacing with the staking precompile. Start with the
[onboarding workflow](https://github.com/monad-developers/staking-sdk-cli/blob/main/docs/validator-onboarding.md).

## Configure `node.toml`

When following the full node instructions, when you got to
[this section](/node-ops/full-node-installation#download-a-collection-of-chain-related-configuration-files-and-scripts)
you should have downloaded the Validator-themed `node.toml`.

From that template, the following should be configured:

1. (Important) Review the `beneficiary` address. This is the address that will receive block rewards.
   ```toml theme={null}
   beneficiary = "0x<INSERT_BENEFICIARY_ADDRESS>"
   ```

2. (Optional) - Double check `node_name` makes sense after transition from full node (for example,
   remove any `full_` prefix). Please choose a unique identifier to avoid confusion.

3. (Optional) - Configure [dedicated](/node-ops/full-node-block-delivery#dedicated-upstream) or [prioritized](/node-ops/full-node-block-delivery#prioritized-secondary-raptorcast-inclusion) connections:

   * **Dedicated full node**
     ```toml theme={null}
     # Use the following to broadcast blocks to downstream full nodes
     # [[bootstrap.peers]]
     # address = "<ip>:<port>"
     # record_seq_num = "<record_seq_num>"
     # name_record_sig = "<name_record_sig>"
     # secp256k1_pubkey = "<full node pubkey>"
     # [[fullnode_dedicated.identities]]
     # secp256k1_pubkey = "<full node pubkey>"
     ```

   * **Prioritized full node**
     ```toml theme={null}
     # Use the following to broadcast blocks to downstream full nodes
     # [[bootstrap.peers]]
     # address = "<ip>:<port>"
     # record_seq_num = "<record_seq_num>"
     # name_record_sig = "<name_record_sig>"
     # secp256k1_pubkey = "<full node pubkey>"
     # [[fullnode_raptorcast.full_nodes_prioritized.identities]]
     # secp256k1_pubkey = "<full node pubkey>"
     ```

   To apply these full node configuration changes without restarting `monad-bft`, run the following command:

   ```bash theme={null}
   monad-debug-node --control-panel-ipc-path /home/monad/monad-bft/controlpanel.sock reload-config
   ```
