Proof Types
There are a few different types of proofs that can be generated by the SP1 zkVM. Each proof type has its own tradeoffs in terms of proof generation time, verification cost, and proof size.
The ProverClient
follows a "builder" pattern that allows you to configure the proof type and other options after creating a ProverClient
and calling prove
on it.
For a full list of options, see the following docs.
Core (Default)
The default prover mode generates a list of STARK proofs that in aggregate have size proportional to the size of the execution. Use this in settings where you don't care about verification cost / proof size.
let client = ProverClient::new();
client.prove(&pk, stdin).run().unwrap();
Compressed
The compressed prover mode generates STARK proofs that have constant size. Use this in settings where you care about verification cost / proof size. This is useful for applications where you want to recursively verify SP1 proofs within SP1 (see the proof aggregation section).
let client = ProverClient::new();
client.prove(&pk, stdin).compressed().run().unwrap();
Groth16 (testnet only)
The Groth16 prover mode generate a SNARK proof with extremely small proof size and low verification cost. This mode generates proofs that can be verified onchain for around ~270k gas.
let client = ProverClient::new();
client.prove(&pk, stdin).groth16().run().unwrap();
PLONK
The Groth16 and PLONK prover modes generate a SNARK proof with extremely small proof size and low verification cost. This mode generates proofs that can be verified onchain for around ~300k gas.
let client = ProverClient::new();
client.prove(&pk, stdin).plonk().run().unwrap();