Node OperationsValidator Node

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

ResourceMinimumRecommended
CPU1 vCPU2+ vCPU
RAM1 GB4 GB
Disk20 GB SSD80 GB NVMe
Network100 Mbps1 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 libssl3

Install 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 --version

Create 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/omne

Initialize 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/data

Configure 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 = 22
💡

The 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/*.json
🚫

Key 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.target

For 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.env

Then 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-validator

Watch the log stream:

journalctl -u omne-validator -f

A 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.tool

Key fields:

FieldExpected
network.peer_count≥ 1
network.node_role"validator"
consensus.commerce_heightIncrementing every ~3s
consensus.security_heightIncrementing every ~60s (devnet)

Validator-specific telemetry

omne-node validator status --rpc-endpoint http://127.0.0.1:9944

Reward forecast

omne-node validator rewards \
  --rpc-endpoint http://127.0.0.1:9944 \
  --lookahead 10

Firewall 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 enable
💡

If you don’t need external RPC access, bind to localhost: --bind 127.0.0.1:9944. P2P must remain publicly accessible.

Flag Reference

FlagPurposeDefault
--data-dirRocksDB state, blocks, and receipts~/.omne
--networkNetwork profile (devnet, ignis)devnet
--bindRPC listen address (JSON-RPC 2.0)0.0.0.0:9944
--p2p-portlibp2p listen port30303
--validator-stakeOGT stake amount (15–28 range)22
--storagerocksdb (persistent) or memory (ephemeral)rocksdb
--bootstrap-peersComma-separated multiaddrs
--revenue-smoothing-windowSecurity blocks in smoothing window12
--baseline-modeRevenue forecast baselinerolling-average
--receipt-archiveStore commerce receipts indefinitelyfalse

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-phase

Output 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-validator

Troubleshooting

SymptomCauseFix
Exits with Missing genesis.tomlChain not initializedRun omne-node init --network ignis --data-dir /var/lib/omne/data
Permission deniedWrong file ownershipsudo chown -R omne:omne /var/lib/omne
Address already in usePort conflictCheck with ss -tlnp | grep 30303
OMNE_KEY_PASS is not setMissing env varAdd to systemd service or env file
No peers connectingFirewall or wrong bootstrap IPVerify port 30303 is open, check config.toml bootstrap_peers
Commerce height stuckNot connected to networkCheck peer_count in /status
Security height stuckNormal on devnetSecurity blocks are produced every 60s (devnet) or 540s (mainnet)