DOCS / OPERATIONS / RUN A VALIDATOR
Run a validator
Validators produce blocks, vote on finality, and receive 100 % of transaction fees plus a share of inflation rewards. The slot-leader rotation is deterministic — every validator gets a turn.
Hardware sizing
| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 4 cores x86-64 with SHA-NI | 8 cores |
| RAM | 4 GB | 8 GB |
| Disk | 100 GB SSD | 500 GB NVMe |
| Network | 100 Mbit/s symmetric | 1 Gbit/s |
| Latency to peers | < 200 ms | < 80 ms |
| OS | Linux x86-64 (glibc ≥ 2.31) | Ubuntu 22.04 LTS |
Observed RSS plateau at ~290 MB per node across 4-h soaks at 10 TPS sustained + 5 K-50 K bursts. Scales sub-linearly with chain size on disk.
Becoming a validator
1 · Generate the validator key
./shardo-wallet --key-file validator.key keygen
./shardo-wallet --key-file validator.key pubkey
# → 0x59243b8c77659b8d...
2 · Stake the minimum
./shardo-wallet --key-file validator.key \
--rpc-url http://your-node:8547 --chain-id 590 \
stake 100000 --wait
3 · Apply to join the active set
./shardo-wallet --key-file validator.key \
validator-apply \
--pubkey 0xYOUR_VALIDATOR_PUBKEY \
--stake 100000 \
--wait
# → application TX hash
4 · Wait for governance vote
Existing validators must approve. Once 2f+1 approvals land, you're activated at the next epoch transition (~30 min on mainnet).
5 · Boot the node
./shardo-node \
--network testnet \
--validator \
--validator-key /path/to/validator.key \
--genesis /path/to/genesis-testnet.json \
--data-dir /var/lib/shardochain \
--external-ip YOUR_PUBLIC_IP \
--p2p-port 30303 \
--bootstrap "/ip4/51.178.27.105/udp/30303/quic-v1/p2p/12D3KooW..." \
--log-level info
systemd unit
[Unit]
Description=ShardoChain Validator Node
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=shardochain
WorkingDirectory=/opt/shardochain
ExecStart=/opt/shardochain/shardo-node \
--network testnet \
--validator \
--validator-key /opt/shardochain/keys/validator.key \
--genesis /opt/shardochain/config/genesis.json \
--data-dir /var/lib/shardochain \
--external-ip YOUR_IP \
--p2p-port 30303 \
--log-level info
Restart=always
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
Monitoring
The Prometheus metrics endpoint is on :9100.
Key gauges to alert on:
shardochain_block_height— local tip. Stalls indicate a sync or consensus issue.shardochain_best_peer_height— highest peer tip.peer - local> 50 → behind.shardochain_slots_since_last_produced— alert at > 30 (you missed a turn).shardochain_poh_clock_skew_slots— alert atabs() > 10sustained 30 s.shardochain_forks_detected— non-zero rate is news.shardochain_block_import_state_root_mismatch— should be 0 always; non-zero means execution divergence.
Slashing
- Equivocation (signing two blocks at the same slot/height): −5 % of stake. Caught automatically by the
vote_guard+ on-chain evidence. - Downtime (consecutive offline epochs): per-permille slash, capped at 5 %.
- Jail after 3 consecutive offline epochs. Auto-removal at 7. Unjail cooldown 10 epochs.
Rewards
- 100 % of fees on the blocks you produce.
- Pro-rata share of inflation (400 M SHARD over 10 years, linear) by stake (own + delegated).
- Distributed every reward epoch (43 200 blocks ≈ 10 h on mainnet).
- Claim via
claim-rewardswallet command. - Jailed validators do not accumulate rewards.
Cross-DC operations (observed)
The current testnet runs N=7 across 4 OVH datacenters with cross-DC RTT 30-80 ms. Documented behaviour:
- 0 nodes offline → 1.43 b/s (theoretical max)
- 1 node offline → ~1 b/s sustained
- 2 nodes offline (28 %) → ~1 b/s sustained, chain still finalizing
- Restart 1 node mid-production → block produced immediately post-restart (vote_registry.bin restored)
- Add validator (N=5 → N=7) → ~12 min from foundation TX to active set