Overview
Instead of running N separate sumcheck protocols, batched sumcheck:- Takes N parallel sumcheck claims
- Combines them using random linear combination
- Runs a single sumcheck over the batched polynomial
- Verifier checks one combined claim instead of N individual claims
Protocol Details
Batching Technique
Given N sumcheck instances with claimsclaim_1, ..., claim_N, the batched protocol:
- Prover sends all claims to the transcript (standard mode only)
- Verifier samples batching coefficients
β₁, ..., βₙfrom the transcript - Combined claim is computed as:
- Batched polynomial for each round is:
Handling Different Lengths
Sumcheck instances may have different numbers of variables. For instance:- Instance A:
claim_a = Σ_{x ∈ {0,1}^M} P(x) - Instance B:
claim_b = Σ_{x,y ∈ {0,1}^M × {0,1}^N} Q(x,y)
Dummy Rounds
When an instance has fewer variables thanmax_num_rounds, it contributes a constant polynomial during “dummy” rounds:
Implementation
Standard Mode (BatchedSumcheck::prove)
Location: jolt-core/src/subprotocols/sumcheck.rs:33
- Append all input claims to transcript
- Sample batching coefficients
- For each round:
- Compute individual univariate polynomials
H_i(x) - Combine:
H(x) = Σᵢ βᵢ · Hᵢ(x) - Compress and append to proof
- Sample challenge
r_j - Update individual claims:
claim_i ← Hᵢ(r_j)
- Compute individual univariate polynomials
- Cache polynomial openings for batch opening proof
Zero-Knowledge Mode (BatchedSumcheck::prove_zk)
Location: jolt-core/src/subprotocols/sumcheck.rs:197
Differences from standard mode:
- No cleartext claims appended — polynomial commitments provide binding
- Pedersen commitments to round polynomials instead of raw coefficients
- Stores commitments, coefficients, and blinding factors in
BlindFoldAccumulator
Performance Impact
Verifier Savings
| Aspect | Without Batching | With Batching |
|---|---|---|
| Fiat-Shamir hashing | N × (M rounds) | 1 × (M rounds) |
| Polynomial checks | N claims | 1 combined claim |
| Transcript size | N × proof_size | 1 × proof_size |
Prover Overhead
Batching adds minimal prover cost:- Linear combination of univariate polynomials (cheap)
- Single transcript update per round
- Net effect: Negligible overhead, massive verifier savings
Concrete Example: Jolt Stage 2
Stage 2 batches:- Bytecode read checking (1 instance)
- Instruction lookups read-RAF (N table instances)
- Total: ~10-20 instances → 1 batched proof
Security Considerations
Soundness
Batching relies on the Schwartz-Zippel lemma: if the prover cheats on any individual sumcheck, the batched polynomial is incorrect with high probability (≥1 - d/|F| where d is the degree).
Critical: Batching coefficients MUST be sampled after all claims are committed (via transcript in standard mode, or via polynomial commitments in ZK mode).
Zero-Knowledge
In ZK mode:- Pedersen commitments hide polynomial coefficients
- Blinding factors are uniformly random
- BlindFold proves committed values satisfy sumcheck without revealing them
Usage Example
Related Optimizations
- Batched Openings: Batch polynomial opening proofs
- EQ Optimizations: Fast EQ polynomial evaluation in sumcheck
- CompactPolynomial: Memory-efficient polynomial storage
References
- Perspectives on Sumcheck Batching by Jim Posen
- Jolt implements “front-loaded” batch sumcheck (batching coefficients sampled at the start)