Zinc+ is a performance-oriented SNARK framework designed to handle computations across multiple mathematical domains without the "witness inflation" overhead typical of traditional arithmetization.
See the code[!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.
Zinc+ is transparent (no trusted setup) and plausibly post-quantum.
[!IMPORTANT] For benchmark results of Sha256 and ECDSA, see README in main-beta branch.
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
| 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. |
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.
Apache 2.0
see Contributing.
Rust
99.8%
Zinc+ is a performance-oriented SNARK framework designed to handle computations across multiple mathematical domains without the "witness inflation" overhead typical of traditional arithmetization.
See the code[!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.
Zinc+ is transparent (no trusted setup) and plausibly post-quantum.
[!IMPORTANT] For benchmark results of Sha256 and ECDSA, see README in main-beta branch.
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
| 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. |
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.
Apache 2.0
see Contributing.
Rust
99.8%