// the find
succinctlabs/sp1
SP1 is a zero‑knowledge virtual machine that proves the correct execution of programs compiled for the RISC-V architecture.
SP1 is a zkVM from Succinct Labs that lets you write programs in standard Rust and generate zero-knowledge proofs that the program ran correctly. It targets RISC-V, so anything LLVM can compile to that target works in theory — not just Rust. The audience is Ethereum protocol developers who need to verify computation off-chain (light clients, bridges, rollups) without trusting a centralized prover.
The precompile architecture is the real differentiator — instead of burying crypto acceleration inside the CPU chip, SP1 externalizes them as separate AIR tables (Keccak, SHA-256, secp256k1, ed25519, BN254, and more). You get native-speed cryptographic operations in your ZK program without hand-writing circuits. The JIT executor for x86_64 (crates/core/jit) is a genuine engineering win — it JIT-compiles RISC-V to native x86 for fast unconstrained execution, separate from the prover, which is how you keep iteration loops tolerable. The audit coverage is thorough: four separate firms including Cantina and Zellic, with reports committed directly to the repo — production deployments can actually point to something. The cargo-prove CLI and Docker-based hermetic toolchain builds make the setup reproducible, which matters more than it sounds for a system this sensitive to toolchain version drift.
You cannot use the system Rust toolchain — SP1 requires its own fork (borrowed from RISC0's approach), which means your Rust version is whatever Succinct ships and MSRV bumps are at their discretion, not yours. The circuit version (`SP1_CIRCUIT_VERSION`) is a hard break: proofs generated with one circuit version cannot be verified with another, and there is no graceful migration story visible in the repo. Recursive aggregation and Groth16 wrapping pull in a Go/gnark dependency via FFI (Dockerfile.gnark-ffi), adding a multi-language build chain that will cause pain in CI and in any environment that doesn't control its own Docker layer. Proving is still fundamentally expensive compute — the prover network abstracts it away, but if you want to self-host proofs at scale you will need serious hardware, and there is little guidance in the repo for what 'at scale' actually means in wall-clock or cost terms.