Repository navigation
Conversation
Signed-off-by: Arya Tabaie <arya.pourtabatabaie@gmail.com>
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
ivokub
self-requested a review
November 6, 2026 16:26
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR changes the wire format of the GKR proof by sending the polynomial$f\coloneqq c_0 + c_1X + \cdots + c_dX^d$ as $[c_1, \cdots, c_d]$ rather than $[f(1), \cdots, f(d)]$ . Interpolation thus falls on the prover rather than the verifier, which instead only computes $c_0$ and applies Horner to the completed polynomial at the round challenge point.
Benchmarked on an M5 laptop, native effects are minimal for$2^{20}$ Poseidon2 compressions over Koalabear:
TotalAllocThe projected recursive verifier savings are significant, however. A verifier that defers its hash computations, performs about$1040n$ extension-extension multiplications, where the number of instances is $2^n$ . This PR saves about $400n$ of that, roughly 38%. $6n$ divisions are also removed.
This is a breaking change as the proof is interpreted incompatibly with
master.Some of the documentation has been improved: equation superscripts are turned into unicode subscripts when possible.
Depends on a Consensys-Incorporated/gnark-crypto#938 pin.
Note
High Risk
Breaking proof wire semantics in the GKR sumcheck core affects soundness if prover/verifier math diverge; changes touch all curve implementations and verification paths.
Overview
Breaking change: GKR sumcheck rounds now serialize each round polynomial as coefficients c₁…c_d (constant c₀ is derived on both sides), instead of point values f(1)…f(d).
Proof.Flatten/ deserialization order is unchanged; only the meaning of those field elements changes.The prover runs
InterpolateOnRangeafter building full round data via a newevaluationAtZerohook onsumcheckClaims, then absorbs c₁…c_d into the Fiat–Shamir transcript. The verifier recovers c₀ from the round sum constraint and advances the claim with Horner-style evaluation on the coefficient slice, avoiding per-round interpolation on the verify path.foldClaims centralizes batching (folding coefficient squeeze + claimed sum from
r.proof) for prove and verify;resources.proofreplaces threadingProofthrough level helpers. Single-source zero-check paths use the same coefficient representation and updated c₀ math with stored evaluation point q.The same logic is mirrored across all curve packages and generator templates; gnark-crypto is bumped in
go.mod.Reviewed by Cursor Bugbot for commit a626294. Bugbot is set up for automated code reviews on this repo. Configure here.