NethermindEth/zinc-plus

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

Rust

47

161 commits

updated Sep 8, 2026

See the code

README

Zinc+: transparent post-quantum 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.

Zinc+ is transparent (no trusted setup) and plausibly post-quantum.

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

Benchmarks

Available benchmarks:

BenchmarkWhat it measures
zip_benchesPCS-level operations (encode, Merkle tree, commit, prove, verify) using scalar evaluations with IPRS codes. Uses i32 evaluations
zip_plus_benchesSame PCS-level operations using polynomial evaluations (degree 32 & 64) with both RAA and IPRS codes. Uses {0,1}^D evaluations.
e2eFull 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 / FeatureWhat it does
-C target-cpu=nativeLets the compiler emit platform-specific instructions (NEON, AVX-512, etc.). Required for simd.
simdBit-packs binary polynomials into u64s and uses hand-written NEON / AVX-512 intrinsics for key operations (widening, inner products).
parallelEnables rayon-based multi-threaded execution across the whole stack (sumcheck, encoding, commitment, etc.).
uncheckedReplaces 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.

nethermind
post-quantum
post-quantum-cryptography
snark
snarks
transparent
zinc
zk
zk-snark

Contributors

frozenspider

95 commits

ElijahVlasov

40 commits

latifkasuli

9 commits

amit0365

8 commits

NethermindEth/zinc-plus

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

Rust

47

161 commits

updated Sep 8, 2026

See the code

README

Zinc+: transparent post-quantum 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.

Zinc+ is transparent (no trusted setup) and plausibly post-quantum.

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

Benchmarks

Available benchmarks:

BenchmarkWhat it measures
zip_benchesPCS-level operations (encode, Merkle tree, commit, prove, verify) using scalar evaluations with IPRS codes. Uses i32 evaluations
zip_plus_benchesSame PCS-level operations using polynomial evaluations (degree 32 & 64) with both RAA and IPRS codes. Uses {0,1}^D evaluations.
e2eFull 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 / FeatureWhat it does
-C target-cpu=nativeLets the compiler emit platform-specific instructions (NEON, AVX-512, etc.). Required for simd.
simdBit-packs binary polynomials into u64s and uses hand-written NEON / AVX-512 intrinsics for key operations (widening, inner products).
parallelEnables rayon-based multi-threaded execution across the whole stack (sumcheck, encoding, commitment, etc.).
uncheckedReplaces 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.

nethermind
post-quantum
post-quantum-cryptography
snark
snarks
transparent
zinc
zk
zk-snark

Contributors

frozenspider

95 commits

ElijahVlasov

40 commits

latifkasuli

9 commits

amit0365

8 commits

Languages

Rust

99.8%