Run a validator
QuanChain's three-channel consensus needs operators on commodity hardware. Stake QCH, run a node, earn block rewards — slashing is bounded and reversible for honest mistakes.
The validator role
A validator produces blocks on one or more of the three channels and verifies the work of others. Block production is rotated by a deterministic schedule weighted by stake. A single physical node can serve one, two, or all three channels — operators choose based on bandwidth and CPU capacity.
Channel 1 producer
200 ms finality. Bandwidth-dominated. Requires steady low-latency uplink.
Channel 2 producer
2 s finality. EVM execution. CPU-heavy. Most rewarding for general-purpose nodes.
Channel 3 producer
10 s finality. Large blobs. Storage-dominated. Needs fast disks + bandwidth.
Hardware requirements
The reference node runs comfortably on a single-socket dedicated server. Cloud equivalents (Hetzner AX42, Latitude.sh c3.small, Vultr Bare Metal) are well-suited.
Minimum (single channel):
CPU: 8 modern cores (AVX2)
RAM: 32 GB
Disk: 1 TB NVMe (~2k IOPS sustained)
Network: 1 Gbps symmetric, < 50 ms to peers
Recommended (all three channels):
CPU: 16 cores
RAM: 64 GB
Disk: 2 TB NVMe + 4 TB SSD (Channel 3 blob store)
Network: 1 Gbps symmetric, dual-homed if possibleInstall the node
The node binary is published for Linux (amd64 + arm64), macOS (arm64), and as a Docker image. The install script handles systemd setup automatically.
# Linux (amd64)
curl -fsSL https://get.quanchain.ai/node | sudo bash
# Docker
docker pull quanchain/node:latest
docker run -d --restart unless-stopped \
-p 30303:30303 -p 8545:8545 \
-v $HOME/.quanchain:/data \
quanchain/node:latest \
--network testnet --channels 1,2On first start the node generates a node-key, syncs the chain history, and exposes a local RPC on port 8545. The default config produces blocks but does not yet register as a validator — that is a separate transaction.
Register and stake
Validator registration is a Channel 2 transaction signed by the operator's Level 20 parent. The transaction binds the node's public key to a stake balance.
import { QuanChain } from '@quanchain/sdk';
const chain = new QuanChain({ network: 'testnet' });
const wallet = await chain.wallet.fromSeed(process.env.SEED!);
const receipt = await chain.validators.register({
nodePubKey: '0xa9c...', // shown by 'quanchain-node id'
stake: '100000', // QCH
channels: [1, 2],
payoutAddress: wallet.parentAddress,
});
console.log('Validator id:', receipt.validatorId);The minimum stake on testnet is 100 QCH. On mainnet it will be governance-controlled and is expected to start at 100,000 QCH per channel served.
Day-to-day operation
Health endpoint
/healthz returns block height per channel, peer count, and last-produced-slot.
Metrics
Prometheus on :9100. Pre-built Grafana dashboards in the docs repo.
Logs
Structured JSON to stdout. journalctl-friendly. Errors flagged with severity tier.
Alerting
Watch missed-slot count + peer drop. Both feed the slashing pipeline if sustained.
Rewards
Validators earn three streams: block subsidy, transaction fees, and a uptime bonus paid out at the end of each epoch (12 hours on mainnet; 1 hour on testnet).
Per-block subsidy: 2.5 QCH on Channel 1
5.0 QCH on Channel 2
12.0 QCH on Channel 3
Transaction fees: 100% routed to producer (no burn).
Uptime bonus: +5% if uptime > 99%, scaling to +15% above 99.9%.Slashing
Slashing is bounded: honest mistakes cost a small fraction of stake. Demonstrable equivocation costs the full stake of the offending node.
Missed slot: 0.0 QCH (logged, counts toward uptime bonus only)
Sustained offline (1h+): 0.01% of stake per epoch
Invalid signature posted: 1% of stake
Double-sign / equivocate: 100% of stake + 30-day stake-key banUpgrades, exits, and re-stakes
Stake can be withdrawn after a 21-day cooldown. Channel membership can be changed without unstaking, at the cost of one epoch's rewards. The full lifecycle:
quanchain-node validator info # show current state
quanchain-node validator switch 1,3 # join channels 1 + 3
quanchain-node validator unstake # initiate exit; 21 days
quanchain-node validator withdraw # after cooldown, claim balance