Validators

CLI Onboarding

Onboard a LITHO Mainnet validator using the lithod CLI.

Edit

Last reviewed: 2026-09-18

The CLI is the audited path for LITHO Mainnet validator activation. Run signing commands on the secure machine holding the operator wallet, never on a shared validator host, and never by sending the private key to another operator.

1. Verify the network and artifacts

curl -fsS https://rpc-mainnet.litho.ai/status | jq -r \
  '.result.node_info.network, .result.sync_info.catching_up'
sha256sum ./genesis.json ./lithod-mainnet-9005-r1-1f03146d

Expected chain ID: lithosphere_9005-1 Expected catching_up: false Expected genesis SHA-256: 13e4875b4a9dddc63bdfbd4968c7265f9bbc49218b59c5b49231a56fa313046f Expected binary SHA-256: 1f03146df86391715b86971b14b6074580b7efd06d7265a1725d90e426b8efbc

2. Obtain public node identity

On the validator host:

LITHOD=/usr/local/bin/lithod-mainnet-9005-r1-1f03146d
HOME_DIR=/var/lib/litho-mainnet-9005-val

$LITHOD tendermint show-node-id --home "$HOME_DIR"
$LITHOD tendermint show-validator --home "$HOME_DIR"

Share only the node ID and consensus public key. Never share priv_validator_key.json or wallet keys.

3. Prepare the validator input

Create validator.json with the approved public inputs. Convert the stake to ulitho exactly before signing.

{
  "pubkey": { "@type": "/cosmos.crypto.ed25519.PubKey", "key": "BASE64_CONSENSUS_PUBLIC_KEY" },
  "amount": "STAKE_IN_ULITHOulitho",
  "moniker": "VALIDATOR_NAME",
  "identity": "",
  "website": "",
  "security": "SECURITY_CONTACT",
  "details": "LITHO mainnet validator",
  "commission-rate": "0.05",
  "commission-max-rate": "0.20",
  "commission-max-change-rate": "0.01",
  "min-self-delegation": "1"
}

Commission and stake values must match the approved operator record.

4. Generate, review, sign, and broadcast

On the secure wallet machine:

LITHOD=./lithod-mainnet-9005-r1-1f03146d
RPC=https://rpc-mainnet.litho.ai
CHAIN_ID=lithosphere_9005-1
KEY_NAME=YOUR_LOCAL_OPERATOR_KEY_NAME

$LITHOD tx staking create-validator validator.json \
  --from "$KEY_NAME" \
  --chain-id "$CHAIN_ID" \
  --node "$RPC" \
  --gas auto \
  --gas-adjustment 1.3 \
  --gas-prices 0.0001ulitho \
  --generate-only > create-validator-unsigned.json

$LITHOD tx sign create-validator-unsigned.json \
  --from "$KEY_NAME" \
  --chain-id "$CHAIN_ID" \
  --node "$RPC" \
  --output-document create-validator-signed.json

$LITHOD tx broadcast create-validator-signed.json \
  --node "$RPC" \
  --broadcast-mode sync

Before signing, verify the chain ID, operator and consensus addresses, stake, commission, fee, gas, account number, and sequence. Review the decoded transaction before signing. Record the returned transaction hash and confirm its final success before proceeding to another validator.

5. Verify activation

$LITHOD query tx TRANSACTION_HASH --node "$RPC" --output json
$LITHOD query staking validator YOUR_LITHOVALOPER_ADDRESS \
  --node "$RPC" --output json
curl -fsS "$RPC/status" | jq '.result.validator_info'

Confirm successful transaction execution, the expected validator record, bonding status, and block signatures. Monitor peers, missed blocks, disk, process health, and alerts through the agreed canary period.

Security rules

  • Never share a mnemonic, private key, priv_validator_key.json, signing state, or wallet export.
  • Never reuse a consensus key or restore an older signing-state file over a newer one; either can cause double signing.
  • Activate validators one at a time and observe each before continuing.

See Validators for requirements, staking rules, and canonical network values.

On this page