PerformanceBlog
Tempo MCP serverGive agents search and read tools for Tempo docs
Skip to content
LogoLogo

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:

# 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

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.

Managing your validator

The lifecycle commands below submit transactions to the validator contract. The transaction signer must control the validator operator address, but it does not need to be a plaintext EOA key. Use the CLI signer backend that matches your custody setup; see validator operator address custody.

Rotate validator identity

The ed25519 key can be changed while keeping your validator index stable. This is useful for key rotation or recovery without leaving and re-joining the committee. Generate a new signing key first.

:::

tempo consensus rotate-validator \
  --validator-address <YOUR_VALIDATOR_ADDRESS> \
  --public-key <NEW_PUBLIC_KEY> \
  --ingress <NEW_IP:PORT> \
  --egress <NEW_IP> \
  --signing-key <NEW_PRIVATE_KEY_PATH> \
  --rpc-url https://rpc.tempo.xyz

If self-service rotation is not yet enabled for your validator, use tempo consensus create-rotate-validator-signature to generate the signature and provide it to the Tempo team.

After rotation, your validator goes through the standard state transitions with the new identity.

Update IP addresses

If your node's network endpoints change, update them on-chain. The change takes effect at the next finalized block.

tempo consensus set-validator-ip-address <address/pubkey/index> \
  --ingress <NEW_IP:NEW_PORT> \
  --egress <NEW_IP> \
  --rpc-url https://rpc.tempo.xyz

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.

tempo consensus set-validator-fee-recipient <address/pubkey/index> \
  --fee-recipient <ETHEREUM_ADDRESS> \
  --rpc-url https://rpc.tempo.xyz

Transfer validator ownership

Rebind your validator entry to a new control address:

tempo consensus transfer-validator-ownership <address/pubkey/index> \
  --rpc-url https://rpc.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.

tempo consensus deactivate-validator <address/pubkey/index> \
  --rpc-url https://rpc.tempo.xyz

Exit timeline

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

EpochStateis_dealeris_playerin_committee
E (deactivation)Activetruetruetrue
E+1Exitingtruefalsetrue
E+2Exitedfalsefalsefalse

Keep your node running until your validator shows in_committee: false. Use validator lookup to check — it is safe to shut down the node at that point.