Skip to content

the Plonky2 proof system

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

codex-storage/plonky2

 
 

Plonky2 & more

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.

Codex fork

This repo is Codex's fork of Polygon Zero's Plonky2 repository.

For now at least, our modifications are in the codex branch.

These include:

  • option to turn off randomizing unused wires
  • option to export the witness and related metadata
  • simple web-based tool to visualize the witness
  • tooling to analyze circuits
  • detailed documentation of how Plonky2 actually works
  • maybe some additional gates / gadgets
  • support for Poseidon2-Goldilocks hash
  • support for Poseidon2-BN254 hash (for more efficient BN254 wrapper)
  • support for Monolith hash (ideally also for recursion)
  • BN254 wrapper circuit (Groth16 and/or Plonk-KZG)

Documentation

For more details about the Plonky2 argument system, see this writeup.

Polymer Labs has written up a helpful tutorial here!

Examples

A good starting point for how to use Plonky2 for simple applications is the included examples:

  • factorial: Proving knowledge of 100!
  • fibonacci: Proving knowledge of the hundredth Fibonacci number
  • range_check: Proving that a field element is in a given range
  • square_root: Proving knowledge of the square root of a given field element
  • lookup: Proving that a few members of an arithmetic progression are all primes

To run an example, use

cargo run --example <example_name>

Building

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.

Running

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

Jemalloc

Plonky2 prefers the Jemalloc memory allocator due to its superior performance. To use it, include jemallocator = "0.5.0" in your Cargo.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.

Documentation

Generate documentation locally:

cargo doc --no-deps --open

Contributing guidelines

See CONTRIBUTING.md.

Licenses

All crates of this monorepo are licensed under either of

at your option.

Security

This code has not yet been audited, and should not be used in any production systems.

While Plonky2 is configurable, its defaults generally target 100 bits of security. The default FRI configuration targets 100 bits of conjectured security based on the conjecture in ethSTARK.

Plonky2's default hash function is Poseidon, configured with 8 full rounds, 22 partial rounds, a width of 12 field elements (each ~64 bits), and an S-box of x^7. BBLP22 suggests that this configuration may have around 95 bits of security, falling a bit short of our 100 bit target.

Links

Actively maintained

No longer maintained

  • System Zero, a zkVM built on top of Starky
  • Waksman, Plonky2 gadgets for permutation checking using Waksman networks
  • Insertion, Plonky2 gadgets for insertion into a list
  • u32, Plonky2 gadgets for u32 arithmetic
  • ECDSA, Plonky2 gadgets for the ECDSA algorithm

About

the Plonky2 proof system

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 98.3%
  • Other 1.7%