SP1 zkVM lets you prove the execution of arbitrary Rust (or any LLVM-compiled) program. The Succinct Prover Network is a decentralized cloud that generates SP1 proofs for production workloads, including the Hypercube prover that targets real-time Ethereum proving.
- 01general-purpose ZK programs in Rust
- 02rollup / bridge proofs
- 03verifiable off-chain compute
- 04production proving without GPU ops
- 05Ethereum block proving
- curl -L https://sp1up.succinct.xyz | bash
- sp1up
- cargo prove new my-program
- cargo add sp1-sdk
| Variable | Scope | Description |
|---|---|---|
| SP1_PROVER | Server | Set to `network` to use the Succinct Prover Network, or `cpu`/`cuda` for local proving. |
| NETWORK_PRIVATE_KEY | Server | Private key registered with the Succinct Prover Network for submitting proof requests. |
| NETWORK_RPC_URL | Server | Optional override for the Succinct Prover Network RPC endpoint. |
Use Succinct SP1 to prove arbitrary Rust programs. Scaffold with `cargo prove new` to get a `program` (the guest, compiled to RISC-V) and a `script` (the host that drives proving). In the host, build a `ProverClient` via `ProverClient::from_env()`, write inputs into `SP1Stdin`, then call `client.prove(&pk, &stdin).run()` for a core proof or `.compressed()` / `.groth16()` / `.plonk()` for an on-chain-verifiable proof. For production, set `SP1_PROVER=network` and `NETWORK_PRIVATE_KEY` so proving runs on the Succinct Prover Network instead of the local CPU/GPU. Verify on-chain by deploying the generated `SP1VerifierGateway` consumer contract and calling `verifyProof(programVKey, publicValues, proofBytes)`.
- ⚑Local proving is GPU/RAM-hungry (Hypercube targets 16x RTX 5090s for real-time blocks); use the Prover Network unless you have serious hardware.
- ⚑Only Groth16/PLONK wrapped proofs are cheap to verify on-chain — core/compressed proofs are for off-chain or recursion only.
- ⚑Prover Network is a paid service; budget USD-per-proof and rate-limit user-driven proof requests.
- ⚑Pinning `sp1-sdk` and the toolchain version is critical — verifier vkeys change across SP1 releases and will reject proofs from a mismatched build.
- ⚑Guest programs cannot use threads, system time, or non-deterministic syscalls; use precompiles (`sp1_lib::*`) for keccak/secp256k1 to avoid huge cycle counts.