Skip to content

NethermindEth/zinc-plus

Zinc+: SNARKs for Polynomial Rings

Docs Lint Build Dependencies UB Coverage Rust License

Warning

This project hasn't undergone an audit. It is intended for research and educational purposes only. The code is provided "AS IS" without any representation or warranty.

Zinc+ is a performance-oriented SNARK framework designed to handle computations across multiple mathematical domains without the "witness inflation" overhead typical of traditional arithmetization.

Traditional SNARKs are restricted to a single finite field, forcing complex bitwise logic and non-native modular arithmetic to be emulated, which often bloats the witness by orders of magnitude. Zinc+ resolves this by allowing constraints to be expressed directly and simultaneously over rational ($\mathbb{Q}[X]$), integer ($\mathbb{Z}[X]$), and multiple finite field ($\mathbb{F}_{q_i}[X]$) polynomial rings.

Important

For benchmark results of Sha256 and ECDSA, see README in main-beta branch.

Benchmarks

Available benchmarks:

Benchmark What it measures
zip_benches PCS-level operations (encode, Merkle tree, commit, prove, verify) using scalar evaluations with IPRS codes. Uses i32 evaluations
zip_plus_benches Same PCS-level operations using polynomial evaluations (degree 32 & 64) with both RAA and IPRS codes. Uses {0,1}^D evaluations.
e2e Full Zinc+ SNARK prove & verify on several test AIRs (NoMult, BinaryDecomposition, BigLinear, BigLinearPI) at varying sizes.

To run benchmarks, use

RUSTFLAGS="-C target-cpu=native" cargo bench \
  --features "simd parallel unchecked" \
  --bench BENCH_NAME

Flags & features

Flag / Feature What it does
-C target-cpu=native Lets the compiler emit platform-specific instructions (NEON, AVX-512, etc.). Required for simd.
simd Bit-packs binary polynomials into u64s and uses hand-written NEON / AVX-512 intrinsics for key operations (widening, inner products).
parallel Enables rayon-based multi-threaded execution across the whole stack (sumcheck, encoding, commitment, etc.).
unchecked Replaces checked_add / checked_mul with plain arithmetic, removing overflow guards. Only affects integer-typed computations; field arithmetic is unaffected.

AI tools disclosure

The content published here may have been refined/augmented by the use of large language models (LLM), computer programs designed to comprehend and generate human language. However, any output refined/generated with the assistance of such programs has been reviewed, edited and revised by Nethermind.

License

Apache 2.0

Would like to contribute?

see Contributing.

About

Zinc+ is a performance-oriented SNARK framework designed to handle computations across multiple mathematical domains without the "witness inflation" overhead typical of traditional arithmetization.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Contributors

Languages