Devnet live · permissionless

Run a validator.
Verify. Earn.

Any laptop joins the consensus mesh. Validators verify Groth16 proofs in ~10 ms, vote in BFT consensus, and collect all withdrawal fees — no GPU, no datacenter.

~10 ms proof verification 1 SOL min. stake 7-of-10 BFT threshold 100% fees to validators
Start setup Source

Role

What a validator does

Validators are verify-only nodes. Proof generation stays with the user. Validators run the Groth16 verifier, vote in BFT consensus, and settle state on-chain.

Verify ZK proofs

Runs verify_withdrawal_parts and verify_transfer_parts on every submitted proof. Groth16 over BLS12-381 — ~10 ms per proof on a single CPU core. No GPU needed.

Vote in BFT consensus

Signs votes for valid proofs. A transfer or withdrawal settles only after a quorum of 7-of-10 validators vote it valid. Equivocation (double-voting) triggers on-chain slashing.

Earn withdrawal fees

The Solana program calls distribute_fee on the leader after consensus. 100% of fees credited to pending_rewards on the leader's account, claimable any time.

Permissionless join

Anyone with ≥ 1 SOL stake calls register_validator on-chain and connects to the Kademlia DHT mesh via the bootstrap anchor. No allowlist, no invitation required.

Maintain the shielded pool

Leader node appends output commitments to the Merkle tree after a settled transfer. The rest of the validator set syncs the tree state and nullifier set for double-spend prevention.

Operational endpoints

Every node exposes /health, /ready, and /metrics (Prometheus) on a separate port. Systemd unit and monitoring guide in the docs.


Requirements

Commodity hardware welcome

Proof generation stays with the user. Validators only verify — a single CPU core handles Groth16 in ~10 ms, so any modern machine qualifies.

Hardware

CPUAny modern x86_64 or ARM64
RAM4 GB minimum, 8 GB recommended
Disk20 GB SSD (RocksDB storage)
GPUNot required
OSLinux, macOS, Windows (WSL2)
NetworkStable internet, port 9300 open (TCP)

On-chain (devnet)

Stake≥ 1 SOL
Balance≥ 2 SOL total (stake + tx fees)
NetworkSolana Devnet
Program8gPsR…TWrP (devnet)
Faucetfaucet.solana.com — 2 SOL / 8 h
SlashingEquivocation + unavailability evidence
Devnet SOL is free. Run solana airdrop 2 <PUBKEY> --url https://api.devnet.solana.com to fund a keypair. Stake is locked on-chain; call claim_rewards any time to withdraw accumulated earnings.

Setup guide

From zero to live in 5 steps

Full guide with systemd unit, log monitoring, and common pitfalls in the validator docs.

01

Install system dependencies

Build toolchain and native libs for libp2p and zk-SNARKs. On Debian/Ubuntu:

# Debian / Ubuntu
sudo apt-get install -y build-essential pkg-config libssl-dev \
  protobuf-compiler clang libclang-dev cmake \
  libc++-dev libc++abi-dev libstdc++-12-dev

# macOS (Homebrew)
brew install protobuf cmake openssl
02

Build the unified CLI

Clone and build in release mode. The binary is target/release/occlude.

git clone https://github.com/occlude-labs/occlude-core.git
cd occlude-core
cargo build --release --bin occlude
03

Fund a Solana keypair on devnet

Generate a fresh keypair and airdrop 2 SOL. The faucet allows 2 SOL every 8 hours.

solana-keygen new --no-bip39-passphrase -o ~/.config/solana/occlude-validator.json

solana airdrop 2 \
  $(solana-keygen pubkey ~/.config/solana/occlude-validator.json) \
  --url https://api.devnet.solana.com
04

Stake 1 SOL and register on-chain

Calls register_validator on the Anchor program. Devnet RPC and the canonical program ID are defaults.

./target/release/occlude validator register \
  --keypair ~/.config/solana/occlude-validator.json

# Verify registration
./target/release/occlude validator status \
  --keypair ~/.config/solana/occlude-validator.json
05

Configure and start the node

Copy the devnet template, edit the marked paths, then start. The Kademlia DHT fans out automatically from the bootstrap anchor.

# Copy template (sets bootstrap + bridge defaults)
cp scripts/devnet/validator.toml.example ~/.occlude/validator.toml

# Edit ~/.occlude/validator.toml — set keypair_path and data_dir

# Start the node
./target/release/occlude validator start \
  --config ~/.occlude/validator.toml

# Bootstrap anchor (stable multiaddr)
# /ip4/67.205.142.8/tcp/9300/p2p/12D3KooWFf8xfNz77E9Ve4HnpyZkAHKAcUdw4LmagpFCYQD6R7WK
Check live validators any time: ./target/release/occlude validator list

Network · devnet

Protocol at a glance

Current devnet snapshot. Mainnet pending MPC ceremony + external audit.

~10 ms
Groth16 proof verification
7 / 10
BFT quorum threshold
192 B
Proof size (BLS12-381)
1 SOL
Minimum validator stake
100%
Fees distributed to validators
< 30 s
Coordinator failover RTO

FAQ

Common questions

Do validators see the amounts or recipients of shielded transfers?
No. Validators receive a Groth16 proof and verify it cryptographically. The proof asserts validity without revealing inputs, amounts, or addresses. The Poseidon commitment scheme hides values; nullifiers prevent double-spends without linking to identity.
What happens if my node goes offline?
Short downtime is tolerated — BFT consensus requires 7-of-10, so up to 3 nodes can be absent. Persistent unavailability accumulates a reputation penalty recorded on-chain. Extended absence can result in a slash_validator call burning 1–100% of stake. The active/passive coordinator failover keeps the mesh running with RTO under 30 s.
How do I claim my earned fees?
Fees accumulate in pending_rewards on your on-chain ValidatorAccount. Call claim_rewards via the CLI at any time to withdraw to your wallet:

./target/release/occlude validator claim --keypair ~/.config/solana/occlude-validator.json

Note: automated distribute_fee from the quorum daemon is tracked in #164 and not yet wired. Until it ships, distribution requires a manual instruction.
Can I run a validator on a Raspberry Pi or ARM board?
Yes — ARM64 is supported. Groth16 verification uses arkworks and runs on any SIMD-capable core. A Raspberry Pi 4 (4 GB) can serve as a verify-only validator; private compute (WASM execution with encrypted I/O) is opt-in and lighter nodes can skip it.
Is mainnet open yet?
Not yet. Devnet is stable on program ID 8gPsR…TWrP. The remaining gates to mainnet are: completion of the BGM17 multi-party ceremony (20–30 contributors), an external security audit, and final output-note plumbing for the private compute layer. Follow @occludelabs for updates.
Where do I get help or report issues?
Open an issue on GitHub. The troubleshooting guide (common errors, RocksDB recovery, peer discovery pitfalls) is in the docs.

Ready to run a node?

Devnet is live. Fund a keypair, stake 1 SOL, and join the validator mesh in minutes.