<!-- tempo-docs-context -->
> Source: [/docs/guide/node/validator-lifecycle](https://tempo.xyz/developers/docs/guide/node/validator-lifecycle.md)
> Section: [Tempo EVM](https://tempo.xyz/developers/docs/development.md). Build on Tempo EVM: wallets and keys, payments, transactions and fees, TIP-20 Tokens, contracts, exchange, network details, nodes, protocol specifications, and changelog.
> [Documentation index](https://tempo.xyz/developers/llms.txt) · [Docs skill](https://tempo.xyz/developers/SKILL.md)

> Tempo MCP: Use `search`, `find_pages`, `read_page`, and `code` at `https://mcp.tempo.xyz` for Tempo and related documentation.
> If an indexed page is missing or reflects an older site, read this site’s [documentation index](https://tempo.xyz/developers/llms.txt) and Markdown pages directly.

# Controlling validator lifecycle

This guide covers operational actions for managing a Tempo validator — from initial registration to deactivation.

## Starting and stopping

Use `SIGINT` (Ctrl+C) or `SIGTERM` to gracefully stop the node:

```bash
# If running directly
kill -INT <pid>

# If running via systemd
sudo systemctl stop tempo
```

The node will finish processing the current block before shutting down. Avoid using `SIGKILL` as it may corrupt the database.

## Resetting your validator's data

:::danger
**You cannot reset a validator's data and continue with the same identity.** Doing so risks inconsistent voting, which can cause irrecoverable network safety failures.
:::

If you need to reset your validator's data, you must rotate to a new validator identity. This requires coordinating with the Tempo team to deactivate your old identity and register a new one. Don't hesitate to reach out — even with the Tempo team, this is a routine operation.

:::info
Self-service data resets are coming soon. Once available, you will be able to rotate to a new identity and reset your data without coordinating with the Tempo team. See [Rotate validator identity](https://tempo.xyz/developers/docs/guide/node/validator-lifecycle#rotate-validator-identity).
:::

## Managing your validator

ValidatorConfig operations below submit transactions from the validator operator address, which does not need to be a plaintext EOA key. Use the CLI signer backend that matches your custody setup; see [validator operator address custody](https://tempo.xyz/developers/docs/guide/node/validator-keys#validator-operator-address-custody). [Fee-token selection](https://tempo.xyz/developers/docs/guide/node/validator-lifecycle#choose-the-validator-fee-token) uses the fee-recipient address instead.

:::info[Preview or confirm transactions]
For `tempo consensus` commands, use `--dry-run` to print the target and calldata without signing or sending; it does not simulate execution. Use `--yes` to skip the confirmation prompt when sending.
:::

### Rotate validator identity

Follow [validator rotation](https://tempo.xyz/developers/docs/guide/node/validator-rotation#rotate-validator-identity) to change the signing public key while preserving your validator index. Keep the old validator running until its status shows `in_committee: false`.

### Update IP addresses

Follow [update IP addresses](https://tempo.xyz/developers/docs/guide/node/validator-rotation#update-ip-addresses) to change registered ingress or egress addresses while keeping the same public key.

### Update the fee recipient

The fee recipient used by your validator when constructing block proposals is managed on-chain. This can be updated and takes effect on the next finalized block.

:::code-group
```bash [Mainnet]
tempo consensus set-validator-fee-recipient <address/pubkey/index> \
  --fee-recipient <ETHEREUM_ADDRESS> \
  --rpc-url https://rpc.tempo.xyz
```

```bash [Testnet]
tempo consensus set-validator-fee-recipient <address/pubkey/index> \
  --fee-recipient <ETHEREUM_ADDRESS> \
  --rpc-url https://rpc.testnet.tempo.xyz
```
:::

### Choose the validator fee token

From [v1.12.0](https://github.com/tempoxyz/tempo/releases/tag/v1.12.0), `tempo consensus set-validator-token` lets you select the USD-denominated TIP-20 token used for validator fees. This calls the FeeManager and sets the preference for the **transaction sender**. Submit from your validator's configured fee-recipient address, which can differ from the validator operator address used by the other lifecycle commands.

List verified tokens on your network without a signer:

:::code-group
```bash [Mainnet]
tempo consensus set-validator-token --list --rpc-url https://rpc.tempo.xyz
```

```bash [Testnet]
tempo consensus set-validator-token --list --rpc-url https://rpc.testnet.tempo.xyz
```
:::

Preview a selection using a token address, symbol, or name from the list:

```bash
tempo consensus set-validator-token <TOKEN> \
  --rpc-url https://rpc.tempo.xyz \
  --dry-run
```

For a raw token address, `--no-fetch-verified-tokens` skips the metadata lookup; on-chain token validation still applies.

The token must be a deployed USD-denominated TIP-20. The FeeManager rejects a preference change in a block whose fee recipient is the caller. This command changes the preferred token, not the fee-recipient address; see [Update the fee recipient](https://tempo.xyz/developers/docs/guide/node/validator-lifecycle#update-the-fee-recipient) to change that address.

### Claim validator fees

Validator fees accumulate in the [FeeManager](https://tempo.xyz/developers/docs/protocol/fees/spec-fee-amm#key-functions) and must be claimed with `distributeFees` to reach your wallet. Use your configured fee-recipient address and the token address in which the fees accrued:

```bash
cast send 0xfeec000000000000000000000000000000000000 \
  "distributeFees(address,address)" \
  "<FEE_RECIPIENT_ADDRESS>" "<TOKEN_ADDRESS>" \
  --rpc-url https://rpc.tempo.xyz \
  --account "<KEYSTORE_ACCOUNT>"
```

### Transfer validator ownership

Rebind your validator entry to a new control address:

:::code-group
```bash [Mainnet]
tempo consensus transfer-validator-ownership <address/pubkey/index> \
  --rpc-url https://rpc.tempo.xyz \
  --new-private-key <PATH_TO_NEW_VALIDATOR_PRIVATE_KEY>
```

```bash [Testnet]
tempo consensus transfer-validator-ownership <address/pubkey/index> \
  --rpc-url https://rpc.testnet.tempo.xyz \
  --new-private-key <PATH_TO_NEW_VALIDATOR_PRIVATE_KEY>
```
:::

The `--new-private-key` argument is used to derive the replacement operator address. That new address must not already be used by another active validator.

### Deactivate your validator

Deactivate your validator when you want to leave the active set.

:::warning[Do not shut down your node immediately after deactivating]
Your validator remains a dealer in the committee for at least one more epoch after deactivation. Shutting it down early will degrade network liveness. See the [exit timeline](https://tempo.xyz/developers/docs/guide/node/validator-lifecycle#exit-timeline) below.
:::

:::code-group
```bash [Mainnet]
tempo consensus deactivate-validator <address/pubkey/index> \
  --rpc-url https://rpc.tempo.xyz
```

```bash [Testnet]
tempo consensus deactivate-validator <address/pubkey/index> \
  --rpc-url https://rpc.testnet.tempo.xyz
```
:::

#### Exit timeline

Deactivation is not instant — your validator is phased out over two epochs:

| Epoch | State | `is_dealer` | `is_player` | `in_committee` |
|-------|-------|:-----------:|:-----------:|:--------------:|
| **E** (deactivation) | Active | `true` | `true` | `true` |
| **E+1** | Exiting | `true` | `false` | `true` |
| **E+2** | Exited | `false` | `false` | `false` |

Keep your node running until your validator shows `in_committee: false`. Use [validator lookup](https://tempo.xyz/developers/docs/guide/node/validator-status#look-up-your-validator) to check — it is safe to shut down the node at that point.
