Operations
Day-to-day operations, chain upgrades, monitoring, and troubleshooting for a Lumera testnet validator.
Double-signing is unrecoverable. If two processes ever sign at the same height with your consensus key, the network permanently tombstones your validator and slashes your stake. Before you start any node, confirm the previous one is fully stopped. This is the single most expensive mistake a validator can make.
Quick Reference
Two addresses come up in almost every command. Set them once per shell session.
If you open a new terminal later, run those two lines again before using $VAL or $ACC.
Staking Operations
Delegate more stake.
Withdraw rewards and commission.
Check what is claimable first.
Always leave enough LUME in the account to cover future fees. A validator that cannot pay for an unjail transaction stays jailed.
Edit validator metadata. Omit any flag you do not want to change.
To change only commission.
Setting a Keybase identity makes your logo appear in explorers and delegation dashboards. It is worth doing before you solicit delegation. Commission changes are capped by commission-max-change-rate and allowed once per 24 hours.
Unjail after downtime.
Check the tombstoned field before you unjail. Tombstoning results from double-signing and is permanent. The validator can never rejoin the active set, and unjail will fail. Fix the root cause before you unjail after downtime, or you will simply be jailed again.
Governance
Validators are expected to vote. Delegators who do not vote inherit your vote. Abstaining silently moves their stake too.
Valid options are yes, no, abstain, and no_with_veto.
Chain Upgrades
Upgrades pass through governance and halt the chain at a set height until validators run the new binary. Missing one means downtime, and eventually a jail and slash.
Watch for pending upgrades.
Note the plan name and height. Both matter below.
Option A: Cosmovisor (recommended)
Cosmovisor swaps the binary automatically at the upgrade height without causing any downtime.
Install Cosmovisor. It is a prebuilt binary, so no Go is required.
Initialise the layout with your current binary as the genesis version.
Point systemd at Cosmovisor.
Stage the upgrade binary. The directory name must exactly match the upgrade plan name, for example v1.20.1.
Verify the staged binary before the upgrade height arrives.
DAEMON_ALLOW_DOWNLOAD_BINARIES=false is deliberate. Letting a node download and run a binary named in an on-chain proposal is a serious security risk. Always stage binaries yourself and verify the checksum.
Each Lumera release ships an updated libwasmvm.x86_64.so. Cosmovisor swaps only lumerad. Copy the new shared library into /usr/lib as shown above. Skipping this is a common cause of a node failing to restart right after an upgrade, exactly when you can least afford it.
Option B: Manual swap
If you are not using Cosmovisor, you must be present when the chain halts at the upgrade height.
Always stop the node before you replace the binary. Never start a second instance while the first is running. Two processes using the same priv_validator_key.json cause double-signing and permanent tombstoning.
Monitoring
Health checks.
Compare against the live chain.
What to alert on.
| Metric | Alert threshold |
|---|---|
| Block signing rate | Below 95 percent in the signing window |
catching_up | true for more than 5 minutes |
| Peer count | Below 5 |
| Free disk | Below 20 percent |
missed_blocks_counter | Any sustained increase |
| Block time lag | More than 30 seconds behind wall clock |
| Process restarts | Any unexpected restart |
| Pending upgrade plan | Any non-empty query upgrade plan |
With prometheus = true in config.toml, metrics are served on localhost:26660/metrics. Scrape them with Prometheus and build alerts in Grafana. Purpose-built options include tenderduty and cosmos-validator-watcher. Both page you on missed blocks directly.
Treat alerting as important even on testnet. At minimum, page a human on missed blocks. Catching downtime in minutes instead of hours is the difference between a warning and a slash.
Routine maintenance.
| Cadence | Task |
|---|---|
| Daily | Check signing rate, sync status, disk headroom |
| Weekly | Apply OS security patches. Verify key backups are intact |
| Monthly | Test restoring keys from backup. Review commission and metadata |
| Per release | Stage the new binary in Cosmovisor before the upgrade height |
Troubleshooting
| Symptom | Cause and fix |
|---|---|
error while loading shared libraries: libwasmvm.x86_64.so | The CosmWasm library is missing or stale. Copy libwasmvm.x86_64.so from the extracted release to /usr/lib and run sudo ldconfig. |
upgrade plan "vX.Y.Z" is scheduled at height N but not registered in this binary | Your binary is older than the chain. Install the latest release. This panic happens before the SDK reads --unsafe-skip-upgrades, so that flag will not get you past it. |
| Keyring command hangs on a headless server | The os backend has no daemon. Use lumerad config set client keyring-backend test --skip-validate. |
insufficient fees; got 5000ulume | Raise the fee to --fees=10000ulume, or use --gas-prices=0.025ulume. |
create-validator rejects --amount or --pubkey | Cosmos SDK v0.50 requires a JSON file. See Create Validator. |
| Zero peers right after start | Normal for 2 to 3 minutes. If it persists, read the logs before changing your firewall. |
Couldn't connect to any seeds / Error dialing seed ... connection refused | The seed node is down. connection refused is the remote host rejecting you, so this is not your firewall. Stop the node, run curl -fsSL -o ~/.lumera/config/addrbook.json https://snapshots.polkachu.com/testnet-addrbook/lumera/addrbook.json, then start it. A running node rewrites addrbook.json from memory, so it has to be stopped first. |
Node stuck at catching_up: true | Usually disk I/O or too few peers. Check df -h, peer count, and consider re-syncing from a fresh snapshot. |
| State sync stuck on "discovering snapshots" | No peer is serving snapshots. Fall back to the snapshot method in Node Setup. |
Validator shows BOND_STATUS_UNBONDED | Expected until your stake is large enough to enter the capped active set. It is not an error. |
| Jailed after a restart | Confirm the node resumed signing, then submit tx slashing unjail. Check tombstoned first. |
Re-syncing From Scratch
If state becomes corrupted, wipe and re-sync. Your keys are untouched by this.
unsafe-reset-all deletes chain data and resets the private validator state file. It never touches priv_validator_key.json or node_key.json. Your validator identity survives.
Migrating to a New Server
The dangerous part is the window where both machines could sign.
- Set up the new server completely and sync it, without copying the consensus key.
- Stop the old node with
sudo systemctl stop lumeraand confirm withsystemctl is-active lumera. - Confirm the old node has stopped producing signatures in the explorer.
- Only then copy
priv_validator_key.jsonto the new server and start it. - Delete the key from the old server and disable its service with
sudo systemctl disable --now lumera.
Never shortcut step 3. Missing a few blocks during a clean cutover costs almost nothing. Double-signing during a sloppy one ends the validator permanently.
Useful Links
- Lumera Releases
- Network Configurations
- Validator Operations Manual
- SuperNode Operator Guide
- Testnet Explorer
- Testnet Snapshots
- Discord