# Run a Validator

### How to Run a Validator Node on BitNet

This section provides a step-by-step guide for setting up and running a validator node on BitNet.

#### Prerequisites

Before you begin, review the **Validator Overview** and **Validator Security Guidelines**. Ensure your system is configured in **UTC timezone** to avoid consensus errors like `LastResultsHash` mismatches that may halt your node.

#### Step 1: Generate Your Validator Key

Your validator's consensus public key is required to register a validator on the BitNet network. To retrieve this key, run:

```bash
bitnetd tendermint show-validator
```

{% hint style="danger" %}
**Important**: Do not use testnet keying backends for generating mainnet keys. This can expose your validator to critical security risks, including unauthorized access to signing keys via RPC endpoints.
{% endhint %}

#### Step 2: Create the Validator

To register your validator on the network, use the command below. Adjust values based on your validator’s intended settings:

```bash
bitnetd tx staking create-validator \
  --amount=1000000abnc \
  --pubkey=$(bitnetd tendermint show-validator) \
  --moniker="YourValidatorName" \
  --chain-id=bitnet-mainnet \
  --commission-rate="0.05" \
  --commission-max-rate="0.10" \
  --commission-max-change-rate="0.01" \
  --min-self-delegation="1000000" \
  --gas="auto" \
  --gas-prices="0.025abnc" \
  --from=<wallet_name>
```

* **Commission Parameters** define validator earnings.
* **Min Self-Delegation** enforces a minimum stake the validator must maintain at all times.
* Validators must rank in the top active set to start validating blocks.

#### Step 3: Add Public Description

You can personalize your validator by providing a public-facing profile:

```bash
bitnetd tx staking edit-validator \
  --moniker="YourValidatorName" \
  --website="https://yourdomain.com" \
  --identity=YOUR_KEYBASE_ID \
  --details="Trusted validator focused on uptime and security." \
  --chain-id=bitnet-mainnet \
  --from=<wallet_name>
```

{% hint style="success" %}
Use [Keybase](https://keybase.io/) to add a verifiable identity and profile image to your validator. This helps build credibility and trust with delegators.
{% endhint %}

#### Step 4: Check Validator Status

Confirm your validator’s registration:

```bash
bitnetd query staking validator <your_validator_address>
```

You may also track your validator’s block-signing activity using:

```bash
bitnetd query slashing signing-info <validator_pubkey>
```

#### Step 5: Unjail If Slashed

If your validator was jailed (due to downtime or misbehavior), you can rejoin the active set using:

```bash
bitnetd tx slashing unjail --from=<wallet_name> --chain-id=bitnet-mainnet
```

Ensure your node is synced before sending the unjail transaction.

#### Step 6: Halt Gracefully (Optional)

For planned upgrades or maintenance, halt your validator gracefully at a specific height:

```bash
bitnetd start --halt-height=<desired_height>
```

#### Common Issues

* **Zero Voting Power?**
  * You may be jailed. Restart your node and submit an `unjail` transaction.
* **Too Many Open Files?**
  * Increase file limit:

    ```bash
    ulimit -n 4096
    ```
  * For systemd:

    ```ini
    [Service]
    LimitNOFILE=4096
    ```
