Where Part 1 Left Off
Part 1 built Zinc-PIOP: a polynomial interactive oracle proof over for integer-arithmetic relations. It worked by lifting R1CS to (the R1CSℓ relation), then using a verifier-sampled random prime to project the constraint through and run a Spartan-shaped sum-check inside . Lemma 2.1 was the load-bearing piece — bounded-bit-size witnesses can fool only -many primes, so the random-prime sampling catches cheats with overwhelming probability.
But a PIOP isn’t a real argument. To compile, we need a polynomial commitment scheme that:
- Works over , not . The PIOP’s witness is a multilinear polynomial with rational coefficients.
- Extracts to bounded-bit-size rationals. Lemma 2.1’s preconditions need entry bit-sizes capped — a generic -PCS gives unbounded extraction, which kills soundness.
- Doesn’t use hidden-order groups. The whole point of Zinc was to dodge the RSA-style assumptions CHA24 inherits.
That PCS is Zip. It’s a Brakedown variant — Merkle commitments over rows of an encoded coefficient matrix — built around a new primitive: the IOP of Proximity to the Integers. Plus a new linear code, JEA (Juxtaposed Expand-Accumulate), specifically designed to survive the move from finite fields to .
In this part: what Zip’s contract looks like, the commit / test / eval phases, the two combinatorial lemmas (2.4 and 2.5) that drive its soundness, JEA codes, the extractor wrinkle, and how the whole pipeline compiles to a hash-only succinct argument via iCOS.
What Zip Has To Achieve
Zip is a multilinear PCS — committing to — with one notable asymmetry between completeness and soundness.
The contract:
- Honest provers commit polynomials with integer coefficients of bit-size , for some . Completeness only holds in this regime.
- The extractor pulls back any rational polynomial of bit-size . Soundness operates in this larger range.
This gap between and is governed by
where is the side-length of the coefficient matrix (we’ll see why this shape in a moment).
The IOP-of-Proximity-to-the-Integers analogy. The structure is exactly that of an IOPP-to-a-code. There, the honest prover sends a codeword, but the scheme only guarantees that a passing prover sent something close to a codeword — close enough that distance-decoding pins down a unique nearby codeword. Zip plays the same game with integers: the honest prover sends an integral polynomial in , but the scheme only guarantees that a passing prover sent something close to integral — close enough, where “close” means “rational with bounded bit-size.”
This dual nature matters because Zip is both an IOPP-to-a-code (in its underlying linear code over ) and an IOPP-to- (via the bit-size check). The two checks slot together cleanly, as we’ll see.
The Commit Phase
If you’ve worked with Brakedown, the commit phase is what you’d guess. Reshape the polynomial’s coefficients into a square matrix, encode each row with a linear code, Merkle-commit each encoded row independently. Done.
Setup. Take a multilinear polynomial with even and coefficients in . Set .
Step 1. Organize ‘s evaluations on the boolean hypercube into a matrix . Each row is a length- vector of entries. (This is the standard tensor split for multilinear polynomials: writing with each half of length , the evaluation factors as where are the equality-coefficient vectors and . See Spartan article for the underlying multilinear-extension machinery.)
Step 2. Encode each row with the underlying linear code over :
where is the code length. We’ll cover what code in §JEA — for now, treat it as a black box that takes a -vector and produces an -vector with good distance properties.
Step 3. Merkle-commit each encoded row independently. The commitment is the tuple
— separate Merkle roots.
The structural difference from Brakedown is that is a code over , not over . Everything else looks identical. Prover work is dominated by encoding rows; per-row encoding is a -by- generator-matrix multiplication.
The Testing Phase
Testing is where Zip earns the “IOP of Proximity to the Integers” name. The phase is Brakedown’s standard random-linear-combination check, with one new step: a bit-size + integrality check on the prover’s response.
Protocol 9 walkthrough.
- uniformly samples , where is a fixed, public prime of bits — distinct from the per-execution random prime that shows up later in the eval phase. (For exposition, think of the ‘s as -bit small integers; the prime-interval choice is a technical detail that makes a few lemmas cleaner.)
- sends .
- (The new step.) rejects if any entry is not an integer or has — i.e., it’s outside the allowed bit-size band.
- samples a random subset with . For each :
- Open the Merkle commitments at column , yielding . Reject if any is not an integer of the expected bit-size.
- Check .
Step 1, 2, 4 are exactly Brakedown. Step 3 is the addition.
What each step buys. Steps 1, 2, 4 are Brakedown’s correlated-agreement check: except with negligible probability (e.w.n.p.), they guarantee that every is -close to a unique codeword . So far, that’s just the usual “prover committed to some codeword in each row.”
Step 3 — the bit-size + integrality check — does the new work. It guarantees, e.w.n.p., that those underlying vectors are not just rationals but bounded rationals: . This is the IOPP-to- part of Zip.
By the time the testing phase passes, knows the prover is committed to bit-size-bounded rational row vectors. That’s exactly the precondition Lemma 2.1 (from Part 1) needs to upgrade -projected constraints into -level constraints during the eval phase. The two phases interlock.
Why The Bit-Size Check Works
The Step 3 check is a single integer comparison. It does most of Zip’s -soundness work. Why does so little buy so much? Two combinatorial lemmas about random rational linear combinations.
Lemma 2.4 (informally — “random LC of large rationals stays large”). Paper Lemma 5.7. Let , not all zero, let , and let be a positive integer. Sample uniformly from . Then
Translation: a random small-integer linear combination of rationals where one is large is unlikely to be small. The denominator dominates if is large.
Lemma 2.5 (informally — “random LC of fractions rarely lands on an integer”). Paper Lemma 5.8. Let , not all zero, where each in lowest form. Let , and assume some index has both and — one entry that is both nonzero and has a denominator exceeding . Then
Translation: a random LC of rationals where one has a large denominator rarely yields an integer.
How they combine. Step 3 demands the LC be both an integer and small. Lemma 2.5 says: if any entry has a denominator larger than , the LC is hardly ever an integer. So passing Step 3 forces denominators bounded by e.w.n.p. Given small denominators, Lemma 2.4 says: if any entry has a large numerator, the LC’s magnitude blows past . So passing Step 3 also forces numerators bounded.
Combine the two and entries are pinned to . This is what justifies the constant in the formula — the multiplicative slack absorbs the bit-size growth from Lemma 2.4’s combinatorial factor.
These are the -analogs of Brakedown’s correlated-agreement / proximity-gap lemmas. Brakedown needs random LCs of “close-to-codeword” words to remain close to a codeword. Zip needs random LCs of large rationals to remain large, and random LCs of fractions to rarely be integers. Same kind of combinatorial statement; different ring.
| Brakedown (over ) | Zip (over ) | |
|---|---|---|
| Soundness lever | Random LC of close-to-codeword stays close | Random LC of large rationals stays large (2.4) |
| Extra lever | (none — distance handles everything) | Random LC of fractions rarely integer (2.5) |
| Probability dominator | Field size $ | \mathbb F_q |
The Evaluation Phase
The eval phase proves a claim for a query point and value . The protocol is “Brakedown’s eval, but every check is done modulo a verifier-sampled random prime.”
Protocol 8 walkthrough.
- samples a random -bit prime and sends it to .
- Bad-denominator branch. If any has an entry whose denominator is divisible by — i.e., — aborts. (Same shape as Zinc-PIOP’s Step 2 from Part 1. The escape hatch is bounded by the same Lemma-2.1 logic: a fixed bit-size-bounded witness can have at most primes dividing any of its denominators, so this branch fires for only negligibly many random .)
- Otherwise, uses the tensor identity with , and sends the projected partial sum
- samples with . For each :
- Open the Merkle commitments at column , yielding . Reject if any is not an integer of the expected bit-size.
- Code-consistency check: , where is the projected code.
- Final eval check: .
Two soundness arguments. The code-consistency check, by Brakedown’s argument applied to the projected code , gives e.w.n.p. that . This is why the projected code needs good distance — JEA codes are designed for exactly this property (next section).
The final eval check then gives . To upgrade from “-equality for this particular ” to “-equality” — what we actually want — we invoke Lemma 2.1 from Part 1. That lemma needs bit-size-bounded entries. The testing phase delivers them. The two phases are interlocked: testing pins entry bit-sizes, eval rides Lemma 2.1 on top of that bound.
JEA Codes: A Linear Code That Survives Over
Every Brakedown-style PCS rests on a code with good distance and cheap encoding. Over that’s a solved problem — Brakedown’s recursive code, Basefold’s, Reed–Solomon. Over , the standard tricks fail.
Why standard codes break. Brakedown’s and Basefold’s codes are built recursively via iterative matrix multiplications, with random field elements at each level. Over , those are -bit. Naively translating to — replacing field elements with integers — produces matrices whose entries blow up to thousands of bits after a few recursion levels. Encoding then requires huge-integer multiplications, defeating the whole purpose.
Reed–Solomon works over any ring, but encoding is via FFT — fine for runtime but kills the linear-time-prover benefit Brakedown buys you.
JEA’s answer: keep the matrix sparse with small entries. Adapted from [BFK+24]‘s expand-accumulate codes, drawing randomness from instead of .
Picture two stacked sparse integer matrices: each row has only nonzero entries, all of which are small ( bits). Encoding becomes a sparse-matrix-vector multiply with bounded-bit numbers — no recursion, no field elements, no bit-size blowup.
Construction (Definition 6.1). Let . Let be the upper-triangular all-ones accumulator matrix. Let for some integer .
- : each row sampled from — uniformly from weight- vectors with nonzero entries in , where .
- : each entry sampled from a generalized Bernoulli, nonzero (drawn from ) with probability .
Form and . Two integer linear codes over . The JEA code is the concatenation:
Length , dimension .
Why this works over . and are sparse (because are), and nonzero entries have bits. Encoding a -bit-entry integer vector costs -bit-by--bit multiplications and -bit additions. No bit-size blowup.
Projection requirement. The eval phase calls — the code projected modulo a random . Brakedown’s column-consistency soundness relies on the projected code having good distance. Theorem 6.5 establishes this: as long as is large enough, the entries of projected mod look uniform in (e.w.n.p. over the choice of ). The projected code is then essentially a JEA code over , which is exactly what [BFK+24] analyzed.
The parameter . Per Remark 6.7, suffices. The factor comes from a Markov-bound chain in the projection-error analysis; Remark 6.8 conjectures it can be sharpened to or smaller via better concentration. Operationally, controls the bit-width of generator-matrix entries — bits is fine, would be tighter.
| Brakedown’s recursive | Basefold’s | Reed–Solomon | JEA (Zip) | |
|---|---|---|---|---|
| Encoding speed | Linear-time | Linear-time | Linear-time, sparse | |
| Matrix entries | Random | Random | Polynomial evals | bits |
| Survives ? | No — entries blow up | No — entries blow up | Yes, but slow | Yes |
The Extractor And The Expected-Polytime Wrinkle
Every PCS soundness story needs an extractor. Zip’s has a quirk that doesn’t show up in finite-field schemes.
The wrinkle. In any code-based PCS, a malicious prover can replace some entries of the committed word with arbitrary bit-strings — the Merkle tree commits to whatever bits the prover hashes in. Over a finite field , those bit-strings are at most bits, so the extractor reads the entire entry at unit cost. Over , the prover can write an arbitrarily long bit-string into a single entry. Reading it naively is not polynomial-time.
The fix (Protocol 11). The extractor reads at most a fixed number of bits per entry — specifically bits, where is the largest absolute value of any entry in the JEA generator matrix — and if the entry’s encoding exceeds that, it records the position as a ” disagreement” and moves on, instead of trying to read the rest.
Consequence. The extractor runs in expected polynomial time, not strict polynomial time. This is fine: by Lindell’s witness-extended emulation (Lin01), expected-polytime extraction is equivalent to standard knowledge soundness for our purposes, so the formal soundness statement still goes through.
The rest of the extractor is a standard rewinding-style PCS extractor: sample challenges , run the prover, retry on failure, build up linearly independent successful challenges, invert to recover the witness. Just over , with the bit-budget cap as the one new ingredient.
Compilation: The Pipeline
Two pieces left: turning the PIOP-plus-PCS into an IOP, then turning that IOP into a succinct argument.
PIOP → IOP. Replace each polynomial oracle in Zinc-PIOP with a Zip commitment — a tuple of Merkle roots over the encoded coefficient-matrix rows. Replace each polynomial-oracle query (which Zinc-PIOP issues during sum-check) with a Zip evaluation IOP execution (Protocol 8) certifying the queried value. Result: a regular hash-based IOP, no polynomial-oracle abstraction left.
IOP → succinct interactive argument via iCOS. The COS transformation [COS20] compiles an IOP into a SNARK by Merkle-committing every oracle and applying Fiat–Shamir. It requires the underlying IOP to satisfy state-restoration knowledge soundness. Zip provides only standard knowledge soundness (the stronger property is left as future work in the paper), so we use iCOS — the interactive variant of COS, which skips the Fiat–Shamir step. The result is succinct interactive, not non-interactive.
Beneath iCOS sits iBCS [CDGS23], the vector-commitment-based BCS variant. Both transformations are “Merkle-commit every oracle, answer queries via Merkle openings” — succinctness comes from Merkle path length being rather than .
The takeaway. From the engineer’s seat: “Zinc-PIOP → IOP via Zip → succinct interactive argument via iCOS → (eventually) SNARK via Fiat–Shamir.” The final non-interactive step is open work — the paper flags state-restoration soundness as the missing piece (Section 2.4).
What This Buys You
The full system, end-to-end:
- Hash-only. Every cryptographic primitive is collision-resistant hashing. No hidden-order groups, no RSA assumptions, no pairings. The random oracle for Fiat–Shamir is the only model dependency, and that’s standard for any hash-based SNARK.
- Plausibly post-quantum. Nothing in the security argument relies on group cryptography. Subject to the random oracle being instantiable, the construction has a path to PQ security.
- Multi-modulus over . From Part 1’s R1CSℓ structure. Zip plays no direct role here, but Zip is what unlocks it by removing the hidden-order-group dependency.
Concrete cost shape. No benchmarks have been published yet (Section 2.4 of the paper flags implementation as ongoing work), so this is the asymptotic profile:
- Commit: encodings of -length integer vectors with a sparse JEA generator matrix. Roughly small-integer operations where .
- Test: Merkle openings per row, plus the random-LC + bit-size check.
- Eval: Merkle openings, plus a -by- matrix-vector product modulo a random -bit prime.
- Bit-widths everywhere: all operations bounded to -bit or -bit integers. No thousand-bit arithmetic anywhere — that was the whole point.
Extending Part 1’s headline table:
| CHA24 (mod-AHP + BHR+21 PCS) | Zinc + Zip | |
|---|---|---|
| PCS family | Hidden-order group | Brakedown (hash + linear code) |
| Cryptographic assumption | RSA-style (groups of unknown order) | Collision-resistant hashing + ROM |
| Post-quantum | No | Plausibly yes |
| Multi-modulus per stmt | Yes | Yes |
| Arithmetization overhead | None | None |
| Underlying linear code | n/a | JEA (sparse, small-entry) |
What We Didn’t Cover
A short list of what’s in the paper but not in this walkthrough:
- Full state-restoration soundness analysis for Fiat–Shamir compilation — the paper calls this further work (§2.4). Without it, the final scheme is interactive, not non-interactive.
- Formal proofs of Lemmas 2.4 and 2.5 — paper §5.4.1.
- The general algebraic-relations machinery (§4) — Zinc-PIOP works for any algebraic indexed relation, not just R1CSℓ. We focused on R1CSℓ throughout.
- The full extractor analysis — Protocols 10 and 11 in §5.4.3, plus Lemma 5.24 on expected running time.
- JEA distance bounds — §6, Theorem 6.5 and the chain of lemmas underneath. We stated the result; the analysis is several pages of Markov-bound chasing.
- Implementation and benchmarking — flagged as ongoing in the paper.
Conclusion
Five core ideas drive Zinc + Zip:
- A Brakedown-style PCS over is possible if you’re careful about (a) what the prover commits to, (b) what the testing phase proves, (c) what code you use.
- The IOPP-to- abstraction — “prover knows a word close to integral” — slots cleanly into Brakedown’s existing IOPP-to-code abstraction. Zip is both at once.
- Two new combinatorial lemmas (2.4, 2.5) replace Brakedown’s correlated-agreement bounds in the setting. Easier to state than Brakedown’s, in fact.
- JEA codes — sparse generator matrix, small entries — are a linear code that survives translation from to without bit-size blowup. Most other linear codes don’t.
- iCOS is the standard Merkle compilation step. Fiat–Shamir for non-interactivity is open work.
What makes Zinc + Zip significant: it’s the first hash-only succinct argument for native integer-arithmetic statements, with multi-modulus support at zero arithmetization overhead, and a plausibly post-quantum path. The construction recipe — “hash + linear code over ” — is clean, and unlocks a class of relations that previously required RSA-style assumptions to handle efficiently.
The open theoretical question is sharpening the JEA projection-error analysis to drop from to (Remark 6.8) and shave constants. The open practical question is implementation — benchmarks against Brakedown over are what’ll show whether the bit-bookkeeping overhead is small enough in practice for the integer-arithmetic flexibility to pay off.
References
- Zinc (this paper): Garreta, A., Waldner, H., Hristova, K., Dall’Ava, L. (2025). “Zinc: Succinct Arguments with Small Arithmetization Overheads from IOPs of Proximity to the Integers.” Nethermind Research.
- Part 1 of this walkthrough: Zinc I: A PIOP Over the Rationals That Bypasses Arithmetization.
- CHA24 (mod-AHP): Campanelli, M., Hall-Andersen, M. (2024). “Fully-succinct arguments over the integers from first principles.” https://eprint.iacr.org/2024/1548
- Brakedown: Golovnev, A., Lee, J., Setty, S., Thaler, J., Wahby, R. S. (2023). “Brakedown: Linear-time and field-agnostic SNARKs for R1CS.” CRYPTO 2023.
- BFK+24 (EA codes over fields): Block, A. R., Fang, Z., Katz, J., Thaler, J., Waldner, H., Zhang, Y. (2024). “Field-agnostic SNARKs from expand-accumulate codes.” CRYPTO 2024.
- BHR+21 (integer PCS): Block, A. R., Holmgren, J., Rosen, A., Rothblum, R. D., Soni, P. (2021). “Time- and space-efficient arguments from groups of unknown order.” CRYPTO 2021.
- COS20 (COS transformation): Chiesa, A., Ojha, D., Spooner, N. (2020). “Fractal: Post-quantum and transparent recursive proofs from holography.” EUROCRYPT 2020.
- CDGS23 (iBCS): Chiesa, A., Dall’Agnol, M., Guan, Z., Spooner, N. (2023). “On the security of succinct interactive arguments from vector commitments.” https://eprint.iacr.org/2023/1737
- CY24: Chiesa, A., Yogev, E. “Building Cryptographic Proofs from Hash Functions.”
- Lin01 (witness-extended emulation): Lindell, Y. (2001). “Parallel Coin-Tossing and Constant-Round Secure Two-Party Computation.”
- BSBHR18 (IOPP): Ben-Sasson, E., Bentov, I., Horesh, Y., Riabzev, M. (2018). “Fast Reed-Solomon Interactive Oracle Proofs of Proximity.”