- validators
- blockchain
- validator kit
Validator & Operator Guide
This guide covers the essentials for running a Lumen node in production or staging environments.
Building the Binary
Release artifacts contain Linux amd64/arm64 and macOS arm64 binaries plus SHA256SUMS.
Systemd Service
Generate or install the unit file using the helper script:
The default unit starts the node with:
--minimum-gas-prices 0ulmn(gasless operation)- REST (
:2327), gRPC (:9190), and gRPC-Web enabled on localhost - Rate-limit env vars exported to the process (see below)
Rate-Limit Environment Variables
Set these before launching lumend (or edit the systemd unit environment block):
| Variable | Default | Meaning |
|----------|---------|---------|
| LUMEN_RL_PER_BLOCK | 5 | Max gasless transactions per block per sender |
| LUMEN_RL_PER_WINDOW | 20 | Max gasless transactions within the sliding window |
| LUMEN_RL_WINDOW_SEC | 10 | Sliding-window length in seconds |
Example overrides:
Useful REST Queries
Networking & Security
- Ports: CometBFT listens on
26656(P2P),26657(RPC),2327(REST),9190(gRPC),9091(gRPC-Web). Only expose what you need;26657and REST can stay behind a reverse proxy if you prefer. - Firewalls: allow
26656/tcpfrom peers/seeds, block public access to26657and2327unless protected by HTTPS + rate limiting. - IPv4/IPv6: configure
persistent_peerswith dual-stack entries and ensure every peer advertises itsexternal_address. For IPv6-only peers use[addr]:port. - Soft DoS controls: keep
--minimum-gas-prices 0ulmn(the rate-limit decorator handles it) and front public endpoints with nginx/Caddy + TLS and fail2ban/limit_req. - SSH access: disable root logins, enforce UFW
default deny, prefer IPv6, and restrict admin hosts. - Keys: prefer encrypted keyrings (file/os) or HSMs. The
testbackend is only acceptable for labs.
Automated Validator Bootstrap
To chain init + Ed25519 key + PQC + gentx + systemd, run
devtools/scripts/bootstrap_validator.sh:
The script:
- runs
lumend init, creates thevalidatorkey, and credits the account in genesis; - generates a local Dilithium key (encrypted if
--pqc-passphrase-fileis provided) and writes it intogenesis.json; - creates the
gentxand runscollect-gentxs; - optionally installs the systemd service (
--install-service).
Store the Ed25519 mnemonic and PQC passphrase printed by the script securely.
Full bootstrap on a root server
To provision a bare host (systemd unit already installed, PQC keys coming from HSM/offline), run devtools/scripts/bootstrap_validator_node.sh as root:
The script:
- detects the service
--homeand user automatically (or honorsLUMEN_HOME/LUMEN_USER); - stops the service, wipes
$LUMEN_HOME, runslumend init, enforcesminimum-gas-prices = "0ulmn"inapp.toml, and creates thevalidatorkey (keyringtest); - credits the address (
GENESIS_BALANCE, default1000000000000ulmn), generates thegentx(GENTX_AMOUNT), patchesdelegator_addressif needed, and re-signs offline; - imports your Dilithium pair (
PQC_PUB_FILE,PQC_PRIV_FILE,PQC_PASSPHRASE_FILE), links PQC to the Ed25519 address, and injects the Genesis entry; - validates genesis, restores ownership to
LUMEN_USER, restartssystemctl restart lumend, and writes~/mnemo(mnemonic) plus~/wallet(address/valoper).
Useful env vars: MONIKER, CHAIN_ID, KEY_NAME, PQC_KEY_NAME, GENESIS_BALANCE, GENTX_AMOUNT, MNEMO_FILE, WALLET_FILE, MIN_GAS_PRICE. PQC files must exist (hex format, mode 600). After the run, monitor journalctl -fu lumend to ensure the node is producing blocks with no “validator set is empty” errors.
Backup & Restore
Keep offline (encrypted USB, safe) the following files:
config/priv_validator_key.jsonconfig/node_key.jsonconfig/priv_validator_state.json(re-creatable but useful to resume without double-signing)pqc_keys/keys.jsonandpqc_keys/links.jsonplus the passphrase- Wallet exports (
lumend keys exportor a secure keyring)
To restore a node:
- Prepare a new
$HOME(e.g./var/lib/lumen), runlumend initto create folders. - Replace the files above with the backups (keep 600 permissions).
- Verify
lumend keys show validatorreturns the expected address. - If the PQC keystore is encrypted, re-provide the passphrase via
--pqc-passphrase-file. - Restart the service (
systemctl restart lumend) and monitor the logs to confirm no PQC errors remain.
Losing the PQC key or the Ed25519 key makes recovery impossible; maintain at least two encrypted, tested copies of these critical artifacts.
Upgrades & Releases
- Use
make build-releaseto produce reproducible artifacts. - Tag releases (
git tag vX.Y.Z && git push origin vX.Y.Z) after running the validation checklist indocs/releases.md. - Update operators with parameter changes from governance proposals (see
docs/params.md).