This repository was originally for Plonky2, a SNARK implementation based on techniques from PLONK and FRI. It has since expanded to include tools such as Starky, a highly performant STARK implementation.
For more details about the Plonky2 argument system, see this writeup.
Plonky2 requires a recent nightly toolchain, although we plan to transition to stable in the future.
To use a nightly toolchain for Plonky2 by default, you can run
rustup override set nightly
in the Plonky2 directory.
To see recursion performance, one can run this bench, which generates a chain of three recursion proofs:
RUSTFLAGS=-Ctarget-cpu=native cargo run --release --example bench_recursion -- -vv
Plonky2 prefers the Jemalloc memory allocator due to its superior performance. To use it, include jemallocator = "0.3.2"
inCargo.toml
and add the following lines
to your main.rs
:
use jemallocator::Jemalloc;
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;
Jemalloc is known to cause crashes when a binary compiled for x86 is run on an Apple silicon-based Mac under Rosetta 2. If you are experiencing crashes on your Apple silicon Mac, run rustc --print target-libdir
. The output should contain aarch64-apple-darwin
. If the output contains x86_64-apple-darwin
, then you are running the Rust toolchain for x86; we recommend switching to the native ARM version.
As this is a monorepo, see the individual crates within for license information.
This code has not yet been audited, and should not be used in any production systems.