Skip to main content
A validator is a synced full node that has registered on-chain and bonded stake. You install and sync the node first, then register it by calling createValidator on the staking precompile (0x0000000000000000000000000000000000000800). This page covers the registration step. For the node itself, see Install a node and Node configuration.
Register only after your node is fully synced. A validator that signs before it has caught up can double-sign and be permanently removed from the set (tombstoned). Set double_sign_check_height = 2 or higher in config.toml before you start (see Node configuration). Setting it to 1 performs no check.

Prerequisites

  • A fully synced full node on Mainnet (Chain ID 988). See Install a node.
  • double_sign_check_height set to 2 or higher in ~/.stabled/config/config.toml.
  • Foundry installed for cast, used to call the precompile.
  • The staking amount funded on your validator’s EVM address, in USDT0.
Confirm the node has caught up before going further. catching_up must be false.

Step 1: prepare validator keys

Create the operator account, then read the two values createValidator needs: the consensus public key (base64) and the validator’s EVM address.
Back up ~/.stabled/config/priv_validator_key.json offline and never run two nodes with the same key. Two instances signing with one key is double-signing and results in a permanent slash.

Step 2: set up environment

Step 3: create the validator

Call createValidator on the staking precompile. The function takes a description tuple, a commissionRates tuple, the minimum self-delegation, the validator address, the consensus pubkey, and the bonded amount. Encode and send it with cast.
The commission tuple is (rate, maxRate, maxChangeRate), each scaled to 18 decimals. The example sets a 10% rate (100000000000000000), a 20% ceiling, and a 1% maximum daily change. maxRate and maxChangeRate are fixed at creation and cannot be edited later. A successful call emits a CreateValidator event. See the staking precompile reference for every field.

Step 4: verify

Confirm the validator is registered and bonded by reading it back from the staking precompile, then check it is signing blocks.

Add self-delegation

To bond more stake to your own validator after creation, call delegate on the same precompile.

After registration

Keep the validator healthy and ready for network upgrades:

Staking precompile reference

Look up the full createValidator, delegate, and editValidator signatures and structs.

Node configuration

Set double_sign_check_height and other validator-critical config before you register.

Monitor a node

Track signing, missed blocks, and resource usage so you catch problems before a slash.

Index validator data

Read your validator’s stake, uptime, and voting history on-chain once it is live.
Last modified on June 8, 2026