NetZero Chain

Run a Validator

A validator holds one of the ten seats. It seals blocks in turn, votes on every block it imports, and earns 10% of the fees of the blocks it seals. During years 1–5 all seats are operated by Net Zero Company AB; from year six seats open to election (schedule). This page documents how a seat node runs, whether company-operated or elected.

Requirements

Value
CPU / RAM / disk2 cores, 4 GB, 50 GB SSD
NetworkStatic public IP or stable NAT mapping for port 30303; low latency to other seats
ClockNTP, monitored. Drift is the most common cause of missed slots
KeyThe seat's signing key, in the node's keystore (mainnet: hardware-backed)
UptimeMissing more than 5% of slots in an epoch loses an elected seat

Start a seat node

./build/bin/netzero --http \
  --mine --miner.etherbase 0xSeatAddress \
  --unlock 0xSeatAddress --password /secure/password.txt --allow-insecure-unlock \
  --gcmode archive
  • --mine with the seat's address as etherbase turns on block production and voting. The etherbase must be the seat's address; the node authorises it with the keystore.
  • Keep HTTP on loopback. A validator never serves public RPC; run a separate full node for that.
  • --gcmode archive so a crash never rewinds state.

nzc_status reports seat (0–9) once authorised; -1 means the address is not in the current seat list.

What the node does

  • In turn: builds the block at its slot, waits for votes on the parent (up to 1.5 s), includes them, signs and broadcasts.
  • Out of turn: if the in-turn seat is silent for a full slot, seals after a random additional delay so that two seats rarely collide.
  • Votes: signs every block it imports as head, exactly once per height, and gossips the vote over nzc/1. The last voted height is persisted so a restart never double-votes.

Rules that are enforced

RuleConsequence
A seat seals two of the last six blocksSecond block is invalid
Two votes from one seat at one heightProvable double-sign; slashing on mainnet
Block timestamp more than 2 s ahead of verifiers' clocksBlock rejected until time catches up
Block conflicts with a finalised blockRejected by every node

Key rotation

Company seats: through the ValidatorSet contract with a 24-hour delay and an on-chain event (mainnet design). Testnet: the seat list is fixed in genesis; rotating a key means restarting the testnet.

Monitoring

Alert on: finalityLag above 2 for more than a minute, missed in-turn slots (Successfully sealed absent at your turn), peer count below 5, clock offset above 500 ms.