Validator Node
A validator participates in PoVERA consensus — producing commerce blocks at 3-second cadence and security blocks at 9-minute cadence. This guide covers everything you need to launch an independent validator on any Linux server.
Why Run a Validator?
Omne is a Layer 1 blockchain built on PoVERA consensus — a dual-layer architecture where commerce blocks finalize every 3 seconds and security blocks anchor state every 9 minutes. Every validator that joins the network directly strengthens both layers.
What: You run a node that produces blocks, validates transactions, and earns rewards. How: Install the binary, generate keys, connect to the network, and run as a service. Why: More independent validators mean a stronger, more decentralized, more resilient network. Early validators on Ignis devnet are stress-testing consensus under real conditions — shaping the protocol before testnet and mainnet.
What a validator does
- Produces commerce blocks at 3-second cadence — instant finality for transactions
- Participates in security commits at 9-minute cadence — Bitcoin-inspired anchoring of commerce state
- Validates and propagates transactions — verifies every transaction, forwards valid ones to peers
- Contributes to network resilience — geographic and infrastructure diversity makes the network harder to disrupt
How it works
Install omne-node on a Linux server, generate encrypted validator keys, configure bootstrap peers, and run as a systemd service. The binary handles consensus, P2P networking, block production, and RPC. Once running, the node dials into the peer network, begins producing blocks, and earns rewards based on your stake and uptime.
The --role validator flag is equivalent to omne-node validator start. Both set the node to validator mode. Use --role compute for dedicated OON compute nodes that do not participate in consensus.
Hardware Requirements
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2+ vCPU |
| RAM | 1 GB | 4 GB |
| Disk | 20 GB SSD | 80 GB NVMe |
| Network | 100 Mbps | 1 Gbps |
Omne is designed for low-barrier validator participation. A 1-vCPU / 1 GB VPS is sufficient for devnet and early testnet.
Launch Guide
Install Dependencies
Update packages and install runtime libraries:
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl libssl3Install the Binary
Place the omne-node binary in the system path:
sudo cp omne-node /usr/local/bin/omne-node
sudo chmod +x /usr/local/bin/omne-node
omne-node --versionCreate a Service User
Run the node under a dedicated unprivileged user:
sudo useradd --system --no-create-home --shell /usr/sbin/nologin omne
sudo mkdir -p /var/lib/omne/{data,keys}
sudo mkdir -p /var/log/omne
sudo chown -R omne:omne /var/lib/omne /var/log/omneInitialize the Chain
Generate the genesis manifest and configuration template:
sudo omne-node init --network ignis --data-dir /var/lib/omne/data
sudo chown -R omne:omne /var/lib/omne/dataConfigure the Node
Edit /var/lib/omne/data/config.toml:
Set the bootstrap peer (in the [p2p] section):
[p2p]
bootstrap_peers = [
"/ip4/64.176.197.30/tcp/30303"
]Enable validator mode (in the [validator] section):
[validator]
is_validator = true
validator_stake = 22The stake value must be within the network’s allowed range — currently 15–28 OGT for Ignis devnet.
Generate Validator Keys
Generate the controller and consensus keypairs:
omne-node validator keys generate \
--output-dir /var/lib/omne/keys \
--label "my-validator"You will be prompted for an encryption passphrase.
Secure the key file:
sudo chown omne:omne /var/lib/omne/keys/*.json
sudo chmod 600 /var/lib/omne/keys/*.jsonKey archives are encrypted with ChaCha20-Poly1305 (Argon2id KDF). Never commit the passphrase to version control. In production, use a secrets manager.
Create a systemd Service
Create /etc/systemd/system/omne-validator.service:
[Unit]
Description=Omne Validator Node
After=network-online.target
Wants=network-online.target
StartLimitIntervalSec=300
StartLimitBurst=5
[Service]
Type=simple
User=omne
Group=omne
Environment=OMNE_KEY_PASS=your-strong-passphrase
ExecStart=/usr/local/bin/omne-node validator start \
--network ignis \
--data-dir /var/lib/omne/data \
--bind 0.0.0.0:9944 \
--p2p-port 30303 \
--validator-stake 22 \
--storage rocksdb \
--bootstrap-peers "/ip4/64.176.197.30/tcp/30303"
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=omne-validator
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/omne /var/log/omne
PrivateTmp=true
[Install]
WantedBy=multi-user.targetFor production, use an EnvironmentFile instead of inline secrets:
sudo mkdir -p /etc/omne
sudo bash -c 'echo "OMNE_KEY_PASS=your-strong-passphrase" > /etc/omne/validator.env'
sudo chmod 600 /etc/omne/validator.envThen replace Environment= with EnvironmentFile=/etc/omne/validator.env in the service file.
Start the Validator
sudo systemctl daemon-reload
sudo systemctl enable omne-validator
sudo systemctl start omne-validatorWatch the log stream:
journalctl -u omne-validator -fA successful start shows:
🚀 Initializing Omne Blockchain Node...
Network: ignis (id 7)
⚡ Starting Omne Blockchain Node...
🔗 Starting P2P networking on port 30303...
🔗 Dialing bootstrap peer: /ip4/64.176.197.30/tcp/30303
✅ Omne Blockchain Node is running!
🔐 Validator Mode: Active (Stake: 22 OGT)
📈 Dual-Layer Consensus Active:
Commerce Layer: 3-second blocks (instant finality)
Security Layer: 9-minute blocks (Bitcoin-inspired security)
✅ Connected to peer: 12D3KooW...Verify Connectivity
Node status
curl -s http://127.0.0.1:9944/status | python3 -m json.toolKey fields:
| Field | Expected |
|---|---|
network.peer_count | ≥ 1 |
network.node_role | "validator" |
consensus.commerce_height | Incrementing every ~3s |
consensus.security_height | Incrementing every ~60s (devnet) |
Validator-specific telemetry
omne-node validator status --rpc-endpoint http://127.0.0.1:9944Reward forecast
omne-node validator rewards \
--rpc-endpoint http://127.0.0.1:9944 \
--lookahead 10Firewall Rules
sudo ufw allow 30303/tcp comment "Omne P2P" # Required
sudo ufw allow 9944/tcp comment "Omne RPC" # Optional
sudo ufw allow 22/tcp comment "SSH"
sudo ufw enableIf you don’t need external RPC access, bind to localhost: --bind 127.0.0.1:9944. P2P must remain publicly accessible.
Flag Reference
| Flag | Purpose | Default |
|---|---|---|
--data-dir | RocksDB state, blocks, and receipts | ~/.omne |
--network | Network profile (devnet, ignis) | devnet |
--bind | RPC listen address (JSON-RPC 2.0) | 0.0.0.0:9944 |
--p2p-port | libp2p listen port | 30303 |
--validator-stake | OGT stake amount (15–28 range) | 22 |
--storage | rocksdb (persistent) or memory (ephemeral) | rocksdb |
--bootstrap-peers | Comma-separated multiaddrs | — |
--revenue-smoothing-window | Security blocks in smoothing window | 12 |
--baseline-mode | Revenue forecast baseline | rolling-average |
--receipt-archive | Store commerce receipts indefinitely | false |
Log Verbosity
RUST_LOG=info omne-node validator start ...Available levels: error, warn, info, debug, trace.
Stake Planning
Project validator economics over time:
omne-node validator stake \
--network ignis \
--amount 22 \
--horizon-days 45 \
--label pilot-phaseOutput includes: allowed stake range, estimated network issuance per day, per-validator share, and estimated breakeven in days.
Key Rotation
Rotate keys periodically (recommended every 90 days):
omne-node validator keys rotate \
--output-dir /var/lib/omne/keys \
--label "my-validator"
sudo systemctl restart omne-validatorTroubleshooting
| Symptom | Cause | Fix |
|---|---|---|
Exits with Missing genesis.toml | Chain not initialized | Run omne-node init --network ignis --data-dir /var/lib/omne/data |
Permission denied | Wrong file ownership | sudo chown -R omne:omne /var/lib/omne |
Address already in use | Port conflict | Check with ss -tlnp | grep 30303 |
OMNE_KEY_PASS is not set | Missing env var | Add to systemd service or env file |
| No peers connecting | Firewall or wrong bootstrap IP | Verify port 30303 is open, check config.toml bootstrap_peers |
| Commerce height stuck | Not connected to network | Check peer_count in /status |
| Security height stuck | Normal on devnet | Security blocks are produced every 60s (devnet) or 540s (mainnet) |