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 / disk | 2 cores, 4 GB, 50 GB SSD |
| Network | Static public IP or stable NAT mapping for port 30303; low latency to other seats |
| Clock | NTP, monitored. Drift is the most common cause of missed slots |
| Key | The seat's signing key, in the node's keystore (mainnet: hardware-backed) |
| Uptime | Missing 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--minewith 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 archiveso 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
| Rule | Consequence |
|---|---|
| A seat seals two of the last six blocks | Second block is invalid |
| Two votes from one seat at one height | Provable double-sign; slashing on mainnet |
| Block timestamp more than 2 s ahead of verifiers' clocks | Block rejected until time catches up |
| Block conflicts with a finalised block | Rejected 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.
