PoUW Prover Setup
Overview
PoUW (Proof-of-Useful-Work) provers generate zero-knowledge proofs for Rivellum batches. Provers run the rivellum-pouwd daemon, which claims jobs from the PoUW job queue and submits completed proofs for rewards.
Prerequisites
Hardware Requirements
| Component | Minimum | Recommended |
|---|---|---|
| CPU | 8 cores | 16+ cores (AVX2 support recommended) |
| RAM | 32 GB | 64+ GB |
| Storage | 100 GB SSD | 500 GB NVMe |
| Network | 100 Mbps | 1 Gbps |
ZK proof generation is CPU-intensive. More cores and faster clock speeds directly improve proof throughput.
Software Requirements
- Rust 1.78+ (for building from source)
- Linux (Ubuntu 22.04+ recommended)
- Network access to a Rivellum node
Installation
Build from Source
git clone https://github.com/rivellumlabs/rivellum.git
cd rivellum
cargo build --release --bin rivellum-pouwd
The binary will be at ./target/release/rivellum-pouwd.
Configuration
The prover daemon connects to a Rivellum node to claim and submit jobs:
rivellum-pouwd \
--node-url https://rpc.rivellum.network \
--concurrency 4 \
--poll-interval-ms 1000
Options
| Flag | Description | Default |
|---|---|---|
--node-url | URL of the Rivellum node RPC | Required |
--concurrency | Maximum concurrent proof jobs | 1 |
--poll-interval-ms | Polling interval for new jobs | 5000 |
How It Works
Worker Loop
- Daemon polls
GET /v1/pouw/jobs/pendingfor available jobs - Claims a job via
POST /v1/pouw/jobs/claim - Downloads the execution trace via the
trace_ref - Validates the trace hash locally (BLAKE3)
- Generates the ZK proof using the configured backend
- Submits the proof via
POST /v1/pouw/jobs/:id/submit - Renews the lease periodically if proof generation takes longer than expected
- On failure, reports via
POST /v1/pouw/jobs/:id/fail
Graceful Shutdown
The daemon uses a CancellationToken for clean shutdown. Send SIGTERM or SIGINT:
# Graceful shutdown
kill -TERM $(pidof rivellum-pouwd)
In-progress proofs will complete before the daemon exits.
Monitoring
Prover Metrics
# Check PoUW system status
curl https://rpc.rivellum.network/v1/pouw/system/status
# View your prover statistics
curl https://rpc.rivellum.network/v1/pouw/provers
# Check Prometheus metrics
curl https://rpc.rivellum.network/v1/pouw/metrics
Dead-Letter Queue
Failed jobs (after max_retries attempts) go to the dead-letter queue:
curl https://rpc.rivellum.network/v1/pouw/dead-letter
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| No jobs available | Network idle or all jobs claimed | Wait; check /v1/pouw/jobs/pending |
| Lease expired | Proof generation too slow | Increase concurrency; upgrade hardware |
| Proof rejected | Trace mismatch or invalid proof | Check trace hash; ensure compatible ZK backend |
| Connection refused | Node unreachable | Verify --node-url; check node is running |
For economic details on prover rewards, see PoUW Economics. For the technical specification, see PoUW Specification.