DocsValidators
Validators

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.

Advanced13 min read
What the role does

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.

Specifications

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.

text
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 possible
No GPU required
QuanChain consensus is not proof-of-work. Composite verification is CPU-bound but single-threaded per signature, and the verification rate of a modern server already exceeds the network's signature throughput.
Step 1

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

bash
# 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,2

On 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.

Step 2

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.

typescript
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.

Step 3

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.

Updates land via Channel 2
Protocol upgrades go through a governance vote, then activate at a pre-announced epoch. The node binary auto-detects activation and switches behaviour — no manual upgrade is required for soft-fork changes.
Earnings

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).

text
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%.
Penalties

Slashing

Slashing is bounded: honest mistakes cost a small fraction of stake. Demonstrable equivocation costs the full stake of the offending node.

text
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 ban
Lifecycle

Upgrades, 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:

bash
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

Want help?

Join the developer Discord, open a GitHub issue, or read the whitepaper.