Skip to content

Releases: Consensys/gnark

v0.15.0

13 May 22:44
18368a5

Choose a tag to compare

What's Changed

  • fix: KZG proof verification for edge cases by @ivokub in #1567
  • fix: add G1 membership for ML and FE in bls precompile by @ivokub in #1591
  • feat: correct curve names in error messages and vector type by @Vap0RSh4wN in #1587
  • fix: bit/byte shift in random bound by @radik878 in #1590
  • Fix logic mismatch in newR1C for better Groth16 optimization by @tomasandroil in #1482
  • perf(bls12-381/map-to-g1): use triple in mul by seed by @yelhousni in #1604
  • feat: pointeval precompile circuit for failing inputs by @ivokub in #1572
  • feat: implement BLS signature verification (minimal public key) by @ivokub in #1473
  • chore: collect small contributions for next release v0.15 by @ivokub in #1606
  • fix: use the little-endian representation for serialized values in KZG Pointeval precompile by @ivokub in #1614
  • chore: use standard lib testing environment detection by @ivokub in #1631
  • feat: allow taking benchmarking instance in NewAssert by @ivokub in #1607
  • feat: add Grumpkin elliptic curve (native 2-cycle with BN254) by @yelhousni in #1409
  • chore: small cleanup in pairings by @ivokub in #1621
  • feat: add BLS12-377, BLS12-381 and BW6-761 GPU acceleration support for Groth16 by @ivokub in #1625
  • build(deps): bump github.com/consensys/gnark-crypto from 0.19.0 to 0.19.1 in the go_modules group across 1 directory by @dependabot[bot] in #1636
  • refactor: PLONK commitment input and output registration by @ivokub in #1642
  • Feat/recursive groth16 conditional check by @ivokub in #1647
  • test: refactor crumb test to standard path by @ivokub in #1648
  • fix: handle OR call for constant inputs by @ivokub in #1592
  • fix: avoid MulAcc overwriting constants by @ivokub in #1632
  • chore: use self hosted runners by @waskow-consensys in #1633
  • chore: regenerate tinyfield by @ivokub in #1602
  • test: handle gnark-crypto not returning malleable signatures anymore by @ivokub in #1601
  • build(deps): bump golang.org/x/crypto from 0.41.0 to 0.45.0 in the go_modules group across 1 directory by @dependabot[bot] in #1652
  • feat: EIP-7951 for ECDSA on P-256 curve by @yelhousni in #1649
  • perf: use generic hint mechanism for bls12-381 map to G1/G2 hints by @ivokub in #1653
  • feat: add example for printing constraints by @hawkadrian in #1643
  • perf(sw/emulated): use fakeGLV and remove scalarMulGeneric by @yelhousni in #1654
  • perf: save 1 inverse in P256Verify circuit by @yelhousni in #1656
  • doc: added zkBTC to gnark known users by @weijiguo in #1658
  • ci: enable security code scanner by @witmicko in #1655
  • refactor: support dynamic emulation parameters for ecrec by @ivokub in #1660
  • build: updated to latest gnark crypto api change (code gen) by @gbotrel in #1668
  • feat: Enable multiple GKR sub-circuits by @Tabaie in #1661
  • perf: deduplicate commitment copy constraints in PLONK by @ivokub in #1670
  • test: add small field test in checkcircuit by @ivokub in #1671
  • feat: add internal Koalabear E4 extension for field emulation and logderivative argument by @ivokub in #1672
  • feat: implement log-derivative argument over small fields by @ivokub in #1673
  • Feat: GKR-Hashers by @Tabaie in #1512
  • [Feat] - Add dynamic chain config to template by @thedarkjester in #1663
  • ICICLE: MSM chunking, safety on proof generation and GPU memory reduction by @p4u in #1665
  • fix: handle uints8 Long addition even in small field by @ivokub in #1674
  • feat: better emulation for small fields in large fields by @gbotrel in #1682
  • perf: optimize rangecheck recomposition for PlonK backend by @gbotrel in #1683
  • Ignore Claude Code settings by @Tabaie in #1675
  • fix: EdDSA strict equality check for s by @ivokub in #1684
  • feat: clean up interface assertions in circuits by @ivokub in #1685
  • feat: Compiled Gates for GKR by @Tabaie in #1676
  • perf: improve compile time by 20% by @gbotrel in #1686
  • feat: emulated arithmetic bound optimization by @ivokub in #1688
  • feat: add PointEval precompiles for 16-bit limbs by @ivokub in #1689
  • small fixes v15 by @ivokub in #1646
  • perf: optimize scs constraints for bls12377 poseidon2 permutation by @gbotrel in #1690
  • feat: add new api to profile package to capture virtual constraints by @gbotrel in #1696
  • feat: Test engine to store elements in Montgomery format by @Tabaie in #1695
  • perf: use known base length for small field emulation by @ivokub in #1693
  • perf: optimize smallmul zero check by @ivokub in #1694
  • perf: optimize range checks for small number of small field ops by @ivokub in #1699
  • perf: windowed-4 ModExp precompile by @yelhousni in #1700
  • refactor: remove bls24-315, bls24-317, and bw6-633 by @gbotrel in #1708
  • chore: update CI workflows to go 1.25 by @gbotrel in #1710
  • Perf(native/BLS12-377): Torus optimal ate pairing check by @yelhousni in #1702
  • docs: update README.md by @gbotrel in #1712
  • fix: fix cursor bot comments by @gbotrel in #1713
  • chore: add dependabot configuration for GitHub Actions updates by @eloi010 in #1714
  • Refactor/gkr/blueprints by @Tabaie in #1691
  • Feat/solidity verifier bls12381 by @ThomasPiellard in #1554
  • perf: optimize emulated multi-miller loops via sparse×sparse line multiplications for 0-bits by @yelhousni in #1701
  • perf(plonk): reduce LRO commitment MSM size via s0-padding identity by @gbotrel in #1716
  • perf(Mux): shared selector decomposition and ±Y symmetry optimization in emulated MSM by @yelhousni in #1704
  • fix: register gates in GKR Poseidon by @ivokub in #1719
  • perf: optimize LogUp for constant single-column tables (range checks) by @yelhousni in #1717
  • perf: optimize emulated ToBits and ToBitsCanonical by @yelhousni in #1707
  • Eliminate the Gate Registry by @Tabaie in #1718
  • perf: emulated Eval support negative coefficients by @ivokub in #1727
  • chore: golangcilint update by @ivokub in #1726
  • fix: non-native constant ops fast paths by @ivokub in #1730
  • perf: solver optimizations by @ivokub in #1728
  • feat: add grumpkin curve support by @yelhousni in #1729
  • fix: DivUnchecked consistency by @ivokub in #1734
  • fix: BLS12-381 Solidity contract init and proof marshaling by @ivokub in #1732
  • fix: emulated package tests failing with 1 constraint with PLONK backend by @ivokub in #1733
  • perf: GKR Levels by @Tabaie in #1735
  • fix: initialize in-circuit KZG SRS at compile time by @ivokub in #1738
  • feat: allow replacing hints in test engine by @ivokub in #1737
  • fix: add proof commitment length check for better error messages by @ivokub in #1739
  • feat(poseidon2): support BN254 widths t=4,8,12,16; fix matMulExternal indexi...
Read more

v0.14.0

22 Aug 19:23

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.13.0...v0.14.0

v0.13.0

12 Jun 18:02

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.12.0...v0.13.0

v0.12.0

24 Jan 00:42
eb18763

Choose a tag to compare

NB! This release fixes security advisory GHSA-cph5-3pgr-c82g (OOM on specially crafted inputs).

What's Changed

New Contributors

Full Changelog: v0.11.0...v0.12.0

v0.11.0

06 Sep 08:47
dc04a1d

Choose a tag to compare

NB! This releases fixes GHSA-9xcg-3q8v-7fq6 and GHSA-q3hw-3gm4-w5cr. Additionally, gnark has undergone several audits. We have implemented many performance improvements. See the full list of changes below!

Thanks for all the external and core contributors!

What's Changed

New Contributors

Full Changelog: v0.10.0...v0.11.0

v0.10.0

22 Apr 14:04
b2dfec7

Choose a tag to compare

What's Changed

TLDR;

Breaking changes

  • PlonK was updated to latest paper version and is incompatible with previous gnark version
  • gnark now supports efficient PlonK recursion with 2-chains (bls12-377 / bw6-761)
  • Groth16 solidity verifier now supports commitments
  • Addition of a "decompression" component in gnark/std
  • Experimental GPU support
  • Many performance improvements

  • feat: BW6-761 emulated pairing by @yelhousni in #846
  • Feat: BW6-761 KZG gadget by @yelhousni in #866
  • Fix: edge cases in the Karabina cyclotomic square decompression by @yelhousni in #868
  • chore: avoid nonnative dereferences by @ivokub in #861
  • feat: allow custom hash function in backends by @ivokub in #873
  • chore: cleanup documentation examples by @ivokub in #878
  • Refactor(BW6-761): use revisited Ate pairing instead of Tate by @yelhousni in #876
  • Fix sw_emulated test by @secure12 in #889
  • feat: add short-hash wrappers for recursion by @ivokub in #884
  • Feat/marshal g1 scalar by @ThomasPiellard in #891
  • perf: lookup blueprint compile time improvement by @gbotrel in #899
  • FEAT: Add experimental support for Icicle GPU acceleration behind build tag by @jeremyfelder in #844
  • feat: Fiat-Shamir transcript using a short hash by @ivokub in #900
  • refactor: use emulated.FieldParams as type parameter to generic Curve and Pairing by @ivokub in #901
  • fix: non-native arithmetic autoreduction for division, inversion and sqrt by @ivokub in #870
  • feat: batched KZG by @ivokub in #908
  • fix: use platform independent method for counting new multiplication overflow from result limb count by @ivokub in #916
  • feat: cache lookup blueprint entries in solving phase by @gbotrel in #915
  • feat: make gkr hash registries private and threadsafe by @gbotrel in #920
  • refactor: simplify hint overloading for api.Commit by @gbotrel in #919
  • Perf/multisymbol 4bw by @Tabaie in #912
  • fix: missing wait on channel in plonk prover by @gbotrel in #926
  • Feat/bypass compression by @Tabaie in #924
  • perf: if we don't compress, no need to index dict. by @gbotrel in #929
  • Perf: optimize addition chains in BW6-761 final exponentiation by @yelhousni in #931
  • Perf: variant of the Karabina cyclotomic squaring by @yelhousni in #933
  • feat: add PLONK in-circuit verifier by @ivokub in #880
  • perf: use G2 precomputed lines for Miller loop by @ivokub in #930
  • perf: bounded scalar multiplication by @ivokub in #934
  • Chore/compression v1 by @Tabaie in #940
  • perf: non-native modular multiplication by @ivokub in #749
  • fix: several typos in the documentation by @tudorpintea999 in #943
  • feat: exit when condition is not filled by @ThomasPiellard in #928
  • refactor: use external compressor repo by @Tabaie in #942
  • fix: #951 plonk verifier checks witness length by @gbotrel in #952
  • refactor: plonk.Setup takes kzg srs in canonical and lagrange form by @gbotrel in #953
  • Perf: plonk verifier gadget by @yelhousni in #949
  • Perf: KZG verify gadget by @yelhousni in #874
  • Feat/plonk verifier batching by @ThomasPiellard in #960
  • chore(deps): bump golang.org/x/crypto from 0.12.0 to 0.17.0 by @dependabot in #973
  • perf(ecdsa): use GLV in JointScalarMulBase by @yelhousni in #975
  • chore: adapt changes from native Fiat-Shamir transcript by @ivokub in #974
  • perf,memory: lighter plonk ProvingKey (no trace) by @gbotrel in #957
  • perf: mark the result of builder.IsZero as boolean to save constraints when used in future by @winderica in #977
  • feat: update compress version; failing test by @gbotrel in #979
  • fix: typos by @GoodDaisy in #992
  • Feat/variable dict by @Tabaie in #989
  • Fix std/recursion/plonk native and emulated examples by @wzmuda in #968
  • feat: some todos and dead code by @yelhousni in #993
  • fix IsZero bug in std/math/emulated/field_assert.go by @readygo67 in #1002
  • perf(ecmul): use GLV with safe handling of edge cases in EVM ecmul by @yelhousni in #976
  • fix: remove shorthash override for same field by @ivokub in #1008
  • Refac/compress packing by @Tabaie in #1007
  • feat: different PLONK circuit verification by @ivokub in #1010
  • feat: adds plonk.SRSSize helper method by @gbotrel in #1012
  • perf: groth16 verifier circuit uses precomputed lines for all curves by @yelhousni in #1016
  • docs: describe that hint inputs and outputs are init-ed by @ivokub in #1003
  • fix: assign baseChallenge correctly while verifying gkr solution by @ahmetyalp in #1020
  • feat: use n-bit mux for switching PLONK verification keys by @ivokub in #1017
  • fix: Decompressor to return -1 when output doesn't fit by @Tabaie in #1022
  • Fix: edge cases in std/algebra elliptic curve arithmetic circuit (emulated and 2-chains) by @yelhousni in #1023
  • fix: use subtraction with reduce in AssertIsEqual by @ivokub in #1026
  • feat: plonk verifier options by @ivokub in #1028
  • build: update compress to latest version by @gbotrel in #1032
  • test: add emulated pairing circuits to stats by @yelhousni in #1031
  • fix: use G1 generator from SRS by @ivokub in #1035
  • fix: another occurence of G1 in SRS by @ivokub in #1036
  • fix: organize std packages hints registrations by @ivokub in #1043
  • perf(sw_emulated): optimize jointScalarMulGeneric by @yelhousni in #1049
  • feat: subgroup G1/G2 membership BW6-761 and BLS12-377 by @yelhousni in #1030
  • Refac/blob decompressor mirror by @Tabaie in #1047
  • chore: remove committed profiles by @ivokub in #1053
  • feat: stabilize anonymous hint function names by @ivokub in #1054
  • feat: add option for enforcing number of goroutines for the solver by @ivokub in #1052
  • feat: verify commitments in groth16 recursion verifier by @ahmetyalp in #1057
  • feat: non-native sumcheck verifier by @ivokub in #1042
  • fix: scs add/mul when recorded constraint is 0 by @yelhousni in #1068
  • perf: emulated equality assertion by @ivokub in #1064
  • refactor: kill backend.PLONK_FRI by @gbotrel in #1075
  • Faster cubic 01 01 mul by @shramee in #1076
  • Faster cubic 012 mul 01 by @shramee in #1077
  • feat: add hint calling with either native inputs or outputs by @ivokub in #1080
  • fix: emulated hint tests by @ivokub in #1083
  • Perf: optimize EC arithmetic by @yelhousni in #1061
  • feat: add MulNoReduce and Sum methods in field emulation by @ivokub in #1072
  • Perf: optimize scalar multiplication for 2-chains by @yelhousni in #1085
  • perf/fix: assume variable as zero constant when subtracting from itself by @ivokub in #1089
  • feat: add range check selector retrieval by @ivokub in https://github.com/Consensys...
Read more

v0.9.1

16 Oct 18:34
3421eaa

Choose a tag to compare

What's Changed

Fixes

New Contributors

Full Changelog: v0.9.0...v0.9.1

v0.9.0

26 Sep 14:01
59a4087

Choose a tag to compare

What's Changed

Features

Core

  • feat: Groth16 MPC setup by @HSG88 in #515
  • feat: BSB22 commitments PlonK by @Tabaie in #586
  • feat: add simple key-value store to the builders by @ivokub in #480
  • refactor: define Committer interface for builders by @ivokub in #481
  • feat: add defer to the Compiler interface by @ivokub in #483
  • feat: PlonK frontend filter common cases of duplicate constraints by @gbotrel in #539
  • perf: various performance improvements for PlonK prover by @gbotrel in #593
  • feat, perf: introduce constraint blueprints. improve memory usage for constraint systems by @gbotrel in #641
  • perf: reduce mem allocs in scs frontend by @gbotrel in #654
  • feat: PlonK multicommit by @Tabaie in #668
  • feat: Groth16 Multicommits by @Tabaie in #702
  • feat: change opening order kzg by @ThomasPiellard in #694
  • feat: adds GKR api by @Tabaie in #443
  • feat: optimized PlonK solidity verifier for BN254 by @ThomasPiellard
  • perf, feat: assert.CheckCircuit(...) by @gbotrel in #825
  • Optimized BN254 Groth16 Solidity template with compressed proof support by @recmo in #810

Circuit

Fixes

  • fix: scs.MarkBoolean missing return w/ constant by @gbotrel in #491
  • fix: closes #509 api did not handle AssertIsLessOrEqual with constant as first param by @gbotrel in #511
  • fix: restrict constants in field emulation to width by @ivokub in #518
  • fix: subtraction overflow computation bug by @ivokub in #579
  • fix(emulated pairing): edge cases in torus-based final exp by @yelhousni in #613
  • fix: serializeCommitment by @SherLzp in #651
  • fix race condition when compiling circuits in parallel by @gbotrel in #676
  • fix: emulated ToBits by @ivokub in #731
  • fix: do not accumulate terms with zero coefficient for addition by @ivokub in #763
  • fix: assert that the binary decomposition of a variable is less than the modulus by @ivokub in #835

Refactor

  • refactor: PlonK uses constraint/ and couple of fixes closes #467 by @gbotrel in #493
  • refactor: std/algebra by @yelhousni in #526
  • refactor: expose all typed backends in gnark/backend (moved from internal/) by @gbotrel in #561
  • refactor: based on #515 generify groth16 MPC setup for all curves, flatten packages+ refactor by @gbotrel in #563
  • refactor: Minimize Commitment info in PlonK vk by @Tabaie in #633
  • refactor: hint name options by @Tabaie in #666
  • refactor, perf: 2-chains pairing + groth16 API by @yelhousni in #664

New Contributors

Full Changelog: v0.8.1...v0.9.0

What's Changed

  • fix: Plonk Fiat-Shamir Challenges with BSB22 by @Tabaie in #812
  • Perf: save some negations in emulated pairings by @yelhousni in #816

v0.9.0-alpha

18 Aug 15:43
f9dfb87

Choose a tag to compare

v0.9.0-alpha Pre-release
Pre-release

What's Changed

Features

Core

  • feat: Groth16 MPC setup by @HSG88 in #515
  • feat: BSB22 commitments PlonK by @Tabaie in #586
  • feat: add simple key-value store to the builders by @ivokub in #480
  • refactor: define Committer interface for builders by @ivokub in #481
  • feat: add defer to the Compiler interface by @ivokub in #483
  • feat: PlonK frontend filter common cases of duplicate constraints by @gbotrel in #539
  • perf: various performance improvements for PlonK prover by @gbotrel in #593
  • feat, perf: introduce constraint blueprints. improve memory usage for constraint systems by @gbotrel in #641
  • perf: reduce mem allocs in scs frontend by @gbotrel in #654
  • feat: PlonK multicommit by @Tabaie in #668
  • feat: Groth16 Multicommits by @Tabaie in #702
  • feat: change opening order kzg by @ThomasPiellard in #694
  • feat: adds GKR api by @Tabaie in #443
  • feat: optimized PlonK solidity verifier for BN254 by @ThomasPiellard

Circuit

Fixes

  • fix: scs.MarkBoolean missing return w/ constant by @gbotrel in #491
  • fix: closes #509 api did not handle AssertIsLessOrEqual with constant as first param by @gbotrel in #511
  • fix: restrict constants in field emulation to width by @ivokub in #518
  • fix: subtraction overflow computation bug by @ivokub in #579
  • fix(emulated pairing): edge cases in torus-based final exp by @yelhousni in #613
  • fix: serializeCommitment by @SherLzp in #651
  • fix race condition when compiling circuits in parallel by @gbotrel in #676
  • fix: emulated ToBits by @ivokub in #731
  • fix: do not accumulate terms with zero coefficient for addition by @ivokub in #763

Refactor

  • refactor: PlonK uses constraint/ and couple of fixes closes #467 by @gbotrel in #493
  • refactor: std/algebra by @yelhousni in #526
  • refactor: expose all typed backends in gnark/backend (moved from internal/) by @gbotrel in #561
  • refactor: based on #515 generify groth16 MPC setup for all curves, flatten packages+ refactor by @gbotrel in #563
  • refactor: Minimize Commitment info in PlonK vk by @Tabaie in #633
  • refactor: hint name options by @Tabaie in #666
  • refactor, perf: 2-chains pairing + groth16 API by @yelhousni in #664

New Contributors

Full Changelog: v0.8.1...v0.9.0-alpha

v0.8.1

11 Jul 15:42
165b49a

Choose a tag to compare

Security

Update gnark-crypto dependency to include security fix.

What's Changed

Full Changelog: v0.8.0...v0.8.1