The Zcash ArboretumHalo 2 Guide PDF

4 The Halo 2 proof system

This section defines the Halo 2 proof system as deployed for the Orchard Action statement: the Action circuit, the instance column, the transcript, the multipoint opening, the protocol, and its zero knowledge. It combines the arithmetisation of §2, which reduces a circuit to committed polynomials and identities among them (the gates, the permutation argument for the wiring, the lookup argument for table membership), with the polynomial commitment of §3, which opens a committed polynomial at a point in logarithmically many group elements and is binding under the discrete logarithm on Vesta. The abstractions the Crypto Guide owns, the non-interactive argument and the SNARK, the polynomial interactive oracle proof, the Fiat–Shamir transform and the polynomial-commitment interface, are recalled at the point of use. Halo 2 is a transparent PLONKish argument: the parameters of its commitment scheme are derived by hashing to the curve and carry no trapdoor (§3.8), and for the Orchard Action circuit its polynomial commitment works over Vesta. The protocol specification defines Action proofs as proofs of the Halo 2 proving system described in the halo2 book (protocol specification, § 5.4.10.3, “Halo 2”); this section cites the book, by chapter, as the specification of the protocol, and names an implementation only for a behaviour that neither document fixes.

The subsections treat, in order, the Action circuit as a PLONKish circuit (its gates, one gate in full, its lookup arguments and its column polynomials); the instance column; the Fiat–Shamir transform and the deployed transcript; the multipoint opening argument; the complete protocol in seven phases; its zero knowledge; and the compiled-polynomial-IOP pattern the protocol instantiates. Recursion is not deployed by Orchard and is treated in §7.

Notation.

The constraint degree is dmax, as Definition 2.7 fixed it; the letter d is the committed vector length of §3, which equals the row count n throughout this section. The letter H carries three meanings; two come from the sections this one joins: §2 writes H for the evaluation domain and §3 for the blinding generator of the Pedersen commitment. Here the domain appears only through its vanishing polynomial ZH⁢(X)=Xn−1, its Lagrange basis ℓj and its rows ωj; a bare H inside a commitment formula is the blinding generator, as in §3. In §4.3 and the security statements the letter H also names the transcript hash, modelled as a random oracle, as in the Crypto Guide; there it is applied to arguments, H⁢(⋅), or called the hash or the oracle. The letter x is the evaluation challenge of phase 5; the running example’s witness is written by its value 3 here and in §6.

4.1 From statement to circuit: arithmetisation in practice

Definition 2.7 says what a PLONKish circuit is; the deployed instance is the Orchard Action circuit. The protocol specification fixes the statement it proves, the Action statement (protocol specification, § 4.18.4, “Action Statement (Orchard)”), and requires every Action proof to verify under the verifying key identified by the current Orchard circuit version (protocol specification, § 4.6, “Action Descriptions”, consensus rules). No specification or ZIP fixes the parameters of the circuit behind that key; they are those of its implementation, orchard. As a PLONKish circuit in the sense of Definition 2.7 it has the field 𝔽p𝖯𝖺𝗅𝗅𝖺𝗌, n=211 rows, ten advice columns, one instance column and twenty-nine fixed columns, among them its selector columns and the three columns of its lookup table; the constraint-degree bound dmax=9; and three lookup arguments into that table, of 210 rows. Its custom gates encode the conditions of the Action statement, using among others complete and incomplete addition on Pallas, the distinction the Math Guide draws in §“Explicit affine formulas” (its remark on complete versus incomplete addition). This subsection gives the form of the gates, one gate in full, the three lookup arguments, and the column polynomials on which every argument of §2 operates.

Key and witness.

The verifying key is a deterministic function of the commitment parameters and the circuit description: the values of the fixed columns, the gates, the lookup arguments and the permutation σ of Definition 2.7. For the Action circuit it is a fixed consensus parameter, the key the consensus rule above identifies. The prover’s witness is the content of the advice columns. A copy constraint places two cells in one cycle of σ (Construction 2.10), and the public inputs are bound to advice cells in this way (§4.2).

4.1.1 Custom gates

Every custom gate of the deployed circuit, a gate in the sense of Definition 2.7, has the form

q⋅c⁢(v1⁢(ωr1⁢X),…,vs⁢(ωrs⁢X))=0,

where v1,…,vs are columns read at rotations r1,…,rs, c is a polynomial, and the selector q is a polynomial in the fixed columns that is zero on every row where the gate does not apply (the halo2 book’s PLONKish Arithmetization chapter). The gate is required to vanish at every row; on the rows where q is zero, the blinding rows among them, it holds whatever the cells contain. The universal gate of vanilla PLONK is the special case of §2.5.

4.1.2 The incomplete-addition gate

The incomplete-addition gate of the Action circuit constrains R=P+Q for affine points P=(xp,yp) and Q=(xq,yq) of Pallas with xp≠xq. It has one selector qadd and four equality-enabled advice columns xp, yp, xq⁢r and yq⁢r; it reads xp,yp,xq,yq at the current row and xr,yr at the next row of the same two columns xq⁢r, yq⁢r, so that Q occupies the selector row and R the row below it. Its two constraints are

qadd⋅((xr+xq+xp)⁢(xp−xq)2−(yp−yq)2) =0, (31)
qadd⋅((yr+yq)⁢(xp−xq)−(yp−yq)⁢(xq−xr)) =0 (32)

(the halo2 book’s Incomplete and complete addition chapter).

Theorem 4.1 (The gate is the chord formula with the slope eliminated).

Let P=(xp,yp) and Q=(xq,yq) be affine points of a short Weierstrass curve with xp≠xq, and set λ:=(yp−yq)/(xp−xq). For a pair (xr,yr)∈𝔽2 the following are equivalent:

  1. 1.

    the bracketed polynomials of (31) and (32) both vanish;

  2. 2.

    xr+xq+xp=λ2 and yr+yq=λ⁢(xq−xr);

  3. 3.

    (xr,yr)=P+Q by the chord formulas of the Math Guide (§“Explicit affine formulas”), xr=λ2−xp−xq and yr=λ⁢(xp−xr)−yp.

Proof.

(i)⇔(ii). Since xp−xq≠0, dividing the first bracket by (xp−xq)2 and the second by (xp−xq) are invertible operations: the first bracket vanishes exactly when xr+xq+xp=(yp−yq)2/(xp−xq)2=λ2, and the second exactly when yr+yq=λ⁢(xq−xr). The gate stores the cleared forms because a constraint must be a polynomial in the cells, and a division is not.

(ii)⇔(iii). The x-equations are the same equation rearranged. For the y-equations, the chord formula uses the slope of the line through P and Q, which is λ whichever endpoint is subtracted from which, and the identity λ⁢(xp−xq)=yp−yq gives λ⁢xp−yp=λ⁢xq−yq; hence λ⁢(xp−xr)−yp=λ⁢xq−yq−λ⁢xr=λ⁢(xq−xr)−yq, which is (ii)’s y-equation with yq moved across. □

On the 97-point toy curve of §3.7, y2=x3+3 over 𝔽79, the chord formulas give P+Q=(58,71) for P=(12,25) and Q=(71,53), and both brackets are 0 at (xr,yr)=(58,71). On Pallas, with P=(−1,2) and Q=[2]⁢P, both brackets are again 0 at the chord sum.

Degrees.

The bracket of (31) has degree three in the cells and that of (32) degree two; with a selector column taking values in {0,1} the constraints have degrees four and three. The deployed key combines selectors into shared fixed columns (the halo2 book’s Selector combining chapter), which can raise both degrees, keeping them within the deployed bound dmax=9.

Layout.

The selector qadd is 1 on row i, which holds P and Q, each coordinate copy-constrained to the cell it came from; row i+1 holds R (Table 9). The slope λ occupies no cell: the identities (31)–(32) verify the sum without it, which is what Theorem 4.1 says. By that theorem the two constraints force (xr,yr)=P+Q, a point of the curve, and R≠𝒪 because xp≠xq excludes Q=−P.

row xp yp xq⁢r yq⁢r qadd
i xp yp xq yq 1
i+1 – – xr yr –
Table 9: The cells of one incomplete addition: two rows of four advice columns and the selector. The four input cells xp,yp,xq,yq on the selector row i are copy-constrained to the cells they came from; the result cells xr,yr occupy the xq⁢r,yq⁢r columns of row i+1, where the gate’s next-rotation queries find them. Dashes mark cells the gate does not use. The gate does not read qadd on row i+1. When additions are chained, as in fixed-base scalar multiplication, row i+1 is the selector row of the next addition, and R is that addition’s Q.

The excluded inputs.

If Q=P, both brackets vanish identically, since every term carries a factor xp−xq or yp−yq, and (xr,yr) is unconstrained. If Q=−P≠𝒪, the bracket of (31) reduces to −(2⁢yp)2, which is nonzero because Pallas, of prime order, has no point of order two, and no assignment satisfies the gate. The Action circuit applies this gate only to non-identity inputs with xp≠xq: it sums the window multiples of fixed-base scalar multiplication for every window but the last, an offset in the window table excluding the identity and the doubling case there, and adds the last window, whose sum can be the identity or a doubling, with the complete-addition gate (the halo2 book’s Fixed-base scalar multiplication chapter).

4.1.3 Lookup arguments of the Action circuit

A gate asserts only polynomial identities. “This value has ten bits” and “this point is the j-th Sinsemilla generator” are set memberships, and §2.7 showed why no low-degree gate on the cell alone states them; the circuit states them as lookup arguments. Each is one instance of Construction 2.14, the input expressions playing A0,…,Am−1 and the table columns S0,…,Sm−1, compressed by the challenge θ as in (10) whenever m>1.

The table.

The Action circuit has three lookup arguments, one range check and two Sinsemilla generator lookups, and all three use one table. It holds, for 0≤j<210,

row j:(j,X(S[j]),Y(S[j])),S[j]:=𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁("z.cash:SinsemillaS",LE32(j)),

in three table columns (tidx,tx,ty), where LEℓ⁢(v) is the ℓ-bit little-endian encoding of the integer v, the generator table S is defined by the protocol specification (§ 5.4.1.9, “Sinsemilla Hash Function”), and the hash 𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁 that derives it is the Crypto Guide’s (§“Sinsemilla: an algebraic hash-based commitment”; the hash-to-curve pipeline is §“Hashing to a curve point”). The first two rows are:

row coordinates of S⁢[j], hexadecimal
j=0 X=𝟶⁢𝚍⁢𝚋⁢𝟻𝟸𝟷𝟾⁢𝚋⁢𝚎𝟼𝟾𝟾𝟷𝚏𝟶𝚏⁢ 1431⁢𝚍𝟺𝚎𝚊⁢ 7⁢𝚍𝟺𝚊𝚏𝚌𝟽𝚋⁢ 29⁢𝚊𝟶𝟻𝚋𝚊𝚏⁢𝚋𝚎𝚍𝚎𝟼𝟸𝚋𝟻⁢ 5⁢𝚊𝟿𝟷𝚎𝚋𝟿𝟷⁢ 2044⁢𝚎𝚊𝟻𝚏
Y=𝟸⁢𝚏⁢𝟶⁢𝚏⁢𝟺𝟶⁢𝚌⁢𝟸⁢𝚏𝟷𝟻𝟸𝚊𝟶𝟷𝚌⁢ 9⁢𝚌𝚊𝚏𝟼𝟼𝟸𝟿⁢ 8493⁢𝚍𝟻𝚍𝟶⁢ 944⁢𝚊𝟶𝟺𝟷𝚌⁢ 2⁢𝚎𝟼𝟻𝚋𝚊𝟶𝟷⁢ 17⁢𝚌𝟸𝟺𝚏𝟽𝟼⁢𝚋𝚏𝟾𝚎𝟼𝟺𝟾𝟹
j=1 X=𝟸𝟷𝟷𝟷𝟷𝟸⁢𝚋⁢𝟺⁢𝚋𝟹𝚎𝟷𝟿𝟻𝟷𝟾⁢𝚌𝟾𝚏𝚍𝟹𝟹𝚎𝚋⁢ 39175404⁢𝚎𝟼𝟽𝟽𝟶𝟶𝚌𝚊⁢ 24649⁢𝚋𝟾𝚏⁢𝚌𝚎𝟺𝚊𝚎𝟹𝟹𝚎⁢𝚊𝟷𝟶𝟾𝚊𝚏𝟿𝟷
Y=𝟶𝟼⁢𝚌⁢59939 93⁢𝚊𝚍𝚋𝟶𝟹𝚋⁢𝚊𝟹𝟾𝚊𝟹𝚎𝟽𝟿⁢𝚌𝚍𝟻𝚊𝟹𝟻𝚏𝚎⁢𝚋𝟺𝟹𝚌𝟽𝟺𝟺𝚊⁢ 670⁢𝚎𝟷𝟿𝚋𝚌⁢ 1⁢𝚍𝟾𝟹𝚌𝟸𝟿𝟹⁢𝚏𝟾𝟷𝟶𝚌𝟻𝚎𝚎

Unused table rows.

On every active row j≥210 (Remark 2.17), each of tidx, tx and ty holds its row-0 value, so that every active row of the table is a genuine entry, (0,X⁢(S⁢[0]),Y⁢(S⁢[0])) or (j,X⁢(S⁢[j]),Y⁢(S⁢[j])). Rows left at 0 would add the tuple (0,0,0), which is no entry, since row 0 is the only entry with index 0 and X⁢(S⁢[0])≠0, and which an input tuple could then match.

The range check.

The range-check lookup is

qlookup⋅(qrunning⋅(zi−210⁢zi+1)+(1−qrunning)⋅zi)⟼tidx, (33)

with zi and zi+1 the running-sum advice column at the current and next rotations. With qrunning=1 the input is a running-sum step: the prover witnesses zi+1=(zi−ai)⋅2−10 on successive rows, so the expression recovers the limb ai=zi−210⁢zi+1, and membership in tidx={0,…,210−1} asserts that each limb has ten bits. With qrunning=0 the cell itself is looked up. Every range check of the Action circuit is either an instance of this lookup, a limb of fewer than ten bits being looked up together with its shift to ten bits, or, for a range of R≤8 values, the gate q⋅w⁢(w−1)⁢⋯⁢(w−(R−1))=0; the three-bit windows of fixed-base scalar multiplication and the single bits use the gate (the halo2 book’s Decomposition chapter).

The Sinsemilla generator lookup.

The Sinsemilla lookup is the three-column instance

(qS⁢1⋅mi+1,qS⁢1⋅xp+(1−qS⁢1)⋅X⁢(S⁢[0]),qS⁢1⋅yp+(1−qS⁢1)⋅Y⁢(S⁢[0]))⟼(tidx,tx,ty), (34)

where mi+1=zi−210⋅qrun⋅zi+1 recovers the ten-bit message word from the hash’s own running-sum decomposition of its message, and qrun:=qS⁢2−qS⁢2⁢(qS⁢2−1)=qS⁢2⁢(2−qS⁢2) is an expression in a fixed column qS⁢2∈{0,1,2} that evaluates to 1 on the interior rows of a message piece and to 0 on its final row, where the trailing running sum is implicitly zero. The coordinate yp is not a cell but a polynomial expression in the queried cells equal to the y-coordinate of the generator added (the halo2 book’s Sinsemilla chapter).

Expression-valued inputs.

Lookup inputs may be arbitrary expressions over queried cells, not merely cells. The Sinsemilla lookup asserts that the generator added is S⁢[mi+1] with no advice cell holding that generator’s y-coordinate. The (1−qS⁢1) branches set the input tuple of every row with qS⁢1=0 to table row 0, so the assertion of Construction 2.14, that every active row’s input tuple appears in the table, holds with nothing to exempt.

4.1.4 Column polynomials and the quotient

Every column, advice, fixed and instance, is a vector of n=2k field elements, and its polynomial is its interpolant over the rows, of degree <n: the column polynomials of §2.5. The trailing rows of each advice column hold uniformly random field elements, the blinding rows of §4.6, on which every selector is zero and which Remark 2.17 exempts from the permutation and lookup arguments.

The quotient.

Each gate polynomial is evaluated with the committed column polynomials substituted for the queried cells, a query at rotation r reading v⁢(ωr⁢X), and the resulting polynomials, together with the permutation identities (7) and the lookup identities (9), are folded with powers of a challenge y and divided by ZH⁢(X)=Xn−1. The result is the quotient h⁢(X) of phase 4 of “The complete Halo 2 protocol” (§4.5), where the folding and the division are written out (the halo2 book’s Vanishing argument chapter).

The running example.

The running example of §2.2 stands at the same point: it interpolated a four-row trace into a,b,c, the five selector polynomials and PI, and assembled the one polynomial G⁢(X) of degree 9 whose divisibility by ZH=X4−1, with the quotient t of degree 5, the rest of the protocol certifies.

The deployed parameters.

For the Action circuit k=11, n=211=2048 and dmax=9, the bound holding for its gates and for its permutation and lookup identities. The quotient therefore splits into dmax−1=8 chunks of degree below n, derived in §4.5. The two arguments this construction leans on are the ones §2 proved: the permutation argument of §2.6 stands behind every copy constraint, and the lookup argument of §2.8 behind the lookups (33) and (34).

4.2 Instance columns and binding the public statement

Definition 2.7 lists instance columns beside fixed and advice columns, and the arguments of §2 treat them like any other column. This subsection states how the instance column binds a proof to its public statement.

The public input of the running example.

In the running example the target 35 is public, so it is not advice but instance data: it sits in the public-input polynomial PI⁢(X) of (2), which the verifier builds himself from the column (0,0,0,−35); its interpolant 64+50⁢X+33⁢X2+47⁢X3 of §2.2 takes the value −35=62 on row 3 and 0 elsewhere. A prover who claimed that X3+X+5=36 has a root would face a different G, one with −36 in place of −35, and her honest trace would no longer vanish on the rows: the fourth gate would read 30+5−36≠0. The public input enters the polynomial G whose divisibility Theorem 2.5 tests, and an accepted proof attests the statement for the verifier’s public values.

Definition 4.2 (Instance polynomial).

An instance column is a public-input column: its n entries 𝝅=(π0,…,πn−1)∈𝔽n are not part of the witness, and both parties agree on them before verification. Like every other column it is interpolated over the rows in the Lagrange basis,

π⁢(X):=∑j=0n−1πj⁢ℓj⁢(X)∈𝔽⁢[X],deg⁡π<n,

with ℓj⁢(ωj)=1 and ℓj⁢(ωj′)=0 for j′≠j (§2.5; the Math Guide, §“The Lagrange basis on H”). The public values occupy designated rows, and every other πj is 0.

Binding by copy constraints.

The deployed circuit binds the public values through the permutation argument of §2.6, not through a gate. The instance column is equality-enabled, so it participates in the permutation σ; it is one of the fifteen columns counted under “The deployed chunking” there, beside the ten advice and four fixed ones. Each designated instance cell is copy-constrained to an advice cell that the circuit’s constraints read (the halo2 book’s Permutation argument chapter for the mechanism), so a satisfying assignment exists only when those advice cells hold the public values the verifier supplied (Figure 10). The alternative, a dedicated gate q⁢(X)⁢(a⁢(X)−π⁢(X))≡0(modZH⁢(X)) with a selector q active exactly on the designated rows, is not used: the copy constraint reuses the permutation argument, at no extra gate degree.

Refer to caption
Figure 10: The instance column of the Action circuit. Rows 0 to 8 hold the primary input in the encoding of the protocol specification (§ 4.18.4), the curve points 𝖼𝗏net and 𝗋𝗄 as two coordinates each; the further input 𝖽𝗂𝗌𝖺𝖻𝗅𝖾𝖢𝗋𝗈𝗌𝗌𝖠𝖽𝖽𝗋𝖾𝗌𝗌 of § 4.6 occupies a row that no normative text fixes, drawn empty; every other row is 0. Each designated cell is copy-constrained to an advice cell the circuit’s constraints read; three such constraints are drawn (green double arrows): 𝗇𝖿 and 𝖼𝗆𝗑 are copied to the cells where the circuit computes them, rt to a cell that a gate ties to the computed Merkle root. The verifier commits to the column himself, with the fixed blinding factor 1, and absorbs that commitment before the first challenge.

The instance commitment.

The verifier does not take π⁢(X) from the prover. Both parties compute the commitment to each instance polynomial from the instance values (the halo2 book’s Circuit commitments chapter), with the public blinding factor 1 in place of a random one so that the two computations agree, and absorb it into the transcript before the first challenge is drawn, in phase 1 of §4.5; every Fiat–Shamir challenge thereby depends on the public input. The book fixes the factor 1 for the fixed columns only; for the instance columns it is the choice of the implementation, halo2_proofs. Thereafter the instance column is treated like any other: its claimed evaluation π⁢(x) appears among the phase-5 evaluations, enters the permutation identities as one of the vi of Construction 2.10, and the multipoint opening of phase 6 binds it to the instance commitment. Because the verifier computed that commitment himself, from the instance values he verifies against, the prover has no freedom over π: an evaluation inconsistent with the verifier’s own values fails the opening argument, by the evaluation binding recalled in §2.9.

The public input of the Action statement.

The Action statement’s public input is the tuple (rt,𝖼𝗏net,𝗇𝖿,𝗋𝗄,𝖼𝗆𝗑,𝖾𝗇𝖺𝖻𝗅𝖾𝖲𝗉𝖾𝗇𝖽𝗌,𝖾𝗇𝖺𝖻𝗅𝖾𝖮𝗎𝗍𝗉𝗎𝗍𝗌) (protocol specification, § 4.18.4, “Action Statement (Orchard)”): the anchor rt, the root of the note-commitment tree the spent note is proved against (the Crypto Guide, §“Append-only and incrementally updatable trees”); the net value commitment 𝖼𝗏net; the nullifier 𝗇𝖿; the randomised verification key 𝗋𝗄; the extracted commitment 𝖼𝗆𝗑=𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(𝖼𝗆) of the output note (the Crypto Guide, §“A shielded spend, end to end”); and the flags 𝖾𝗇𝖺𝖻𝗅𝖾𝖲𝗉𝖾𝗇𝖽𝗌 and 𝖾𝗇𝖺𝖻𝗅𝖾𝖮𝗎𝗍𝗉𝗎𝗍𝗌, which permit non-zero-valued spends and outputs. The primary-input note of the same section encodes the tuple as the sequence

[rt,x⁢(𝖼𝗏net),y⁢(𝖼𝗏net),𝗇𝖿,x⁢(𝗋𝗄),y⁢(𝗋𝗄),𝖼𝗆𝗑,𝖾𝗇𝖺𝖻𝗅𝖾𝖲𝗉𝖾𝗇𝖽𝗌,𝖾𝗇𝖺𝖻𝗅𝖾𝖮𝗎𝗍𝗉𝗎𝗍𝗌]∈𝔽9,

each integer read as an element of 𝔽=𝔽p𝖯𝖺𝗅𝗅𝖺𝗌. The Action description specifies the proof with an eighth component, 𝖽𝗂𝗌𝖺𝖻𝗅𝖾𝖢𝗋𝗈𝗌𝗌𝖠𝖽𝖽𝗋𝖾𝗌𝗌:=1−𝖾𝗇𝖺𝖻𝗅𝖾𝖢𝗋𝗈𝗌𝗌𝖠𝖽𝖽𝗋𝖾𝗌𝗌, where 𝖾𝗇𝖺𝖻𝗅𝖾𝖢𝗋𝗈𝗌𝗌𝖠𝖽𝖽𝗋𝖾𝗌𝗌 permits the output note’s receiver to differ from the input note’s (protocol specification, § 4.6, “Action Descriptions”); from NU6.3 the proof of every Action of either pool is verified with this further public input, which is 1 for every Orchard-pool Action (ZIP 258). Rows 0 to 8 of the instance column hold the nine values above; no normative text fixes the row of the further input, and every other row is 0 (Figure 10). Each is copy-constrained to an advice cell the circuit’s constraints read: 𝖼𝗏net, 𝗇𝖿, 𝗋𝗄 and 𝖼𝗆𝗑 to the cells where the circuit computes them; rt to a cell tied to the computed Merkle root by the gate vold⁢(root−rt)=0, which encodes the statement’s condition that vold=0 or the Merkle path is valid; the two enable flags to cells read by the gates vold⁢(1−𝖾𝗇𝖺𝖻𝗅𝖾𝖲𝗉𝖾𝗇𝖽𝗌)=0 and vnew⁢(1−𝖾𝗇𝖺𝖻𝗅𝖾𝖮𝗎𝗍𝗉𝗎𝗍𝗌)=0, which encode, for flags in {0,1}, the conditions vold=0 or 𝖾𝗇𝖺𝖻𝗅𝖾𝖲𝗉𝖾𝗇𝖽𝗌=1, and vnew=0 or 𝖾𝗇𝖺𝖻𝗅𝖾𝖮𝗎𝗍𝗉𝗎𝗍𝗌=1; and 𝖽𝗂𝗌𝖺𝖻𝗅𝖾𝖢𝗋𝗈𝗌𝗌𝖠𝖽𝖽𝗋𝖾𝗌𝗌 to a cell read by a gate that, when it is nonzero, equates the coordinates of the receivers (𝗀𝖽,𝗉𝗄𝖽) of the two notes. That condition is the meaning § 4.6 gives the flag; the list of conditions in § 4.18.4 does not yet include it.

Binding to the instance.

The verifier computes the instance commitment from the public values 𝝅 itself, and the copy constraints tie the designated cells to the advice cells the constraints read; so a witness extracted from an accepting proof satisfies the relation at 𝝅, not at other public values 𝝅′ the prover may target. The probabilistic conclusion, that a prover who knows no witness for 𝝅, whatever witnesses she holds for other instances, convinces the verifier with at most negligible probability, holds under the knowledge soundness whose status §5 classifies: designed-but-unspecified for the deployed transcript, resting on the discrete logarithm on Vesta or on the algebraic group model, with the transcript hash modelled as a random oracle. Under that hypothesis an Action proof that verifies against an anchor, a nullifier and a value commitment certifies knowledge of a witness consistent with those values.

4.3 Removing the verifier: the Fiat–Shamir transform

The protocols of §§2–3 are public-coin: every verifier message is uniformly random and independent of the prover’s messages, a field element (the point z of the random-point check, the pair β,γ of the permutation and lookup arguments, the challenges uj of each opening round) or, in Construction 3.2, the group element U; and the verifier’s decision is a deterministic function of the public input and the transcript. Their soundness requires only that each challenge be drawn after the commitments it tests are fixed.

The transform.

The Fiat–Shamir transform replaces the i-th challenge ci by

ci:=H⁢(𝗑,m1,c1,…,ci−1,mi),

the hash of the public statement 𝗑 and of the transcript prefix, the prover’s messages m1,…,mi and the earlier challenges, under a fixed hash function H (the Crypto Guide, §“The Fiat–Shamir transform: from interactive to non-interactive”). The ordering of §2.9 is enforced because each commitment is an input to the hash that derives the challenge testing it. The toy of §2.4 drew z=20 as an interactive challenge; the deployed prover derives every challenge from a hash. The two kinds of challenge are kept apart in what follows: the interactive one is uniform by assumption, the hashed one only in the model in which the hash is a random oracle.

Grinding.

A prover against the compiled argument may vary the inputs of H and inspect the resulting challenges. The bound on that freedom uses round-by-round soundness (Canetti, Chen, Holmgren, Lombardi, Rothblum, Rothblum and Wichs, Fiat–Shamir: From Practice to Theory), which Remark 4.11 recalls.

Proposition 4.3 (Fiat–Shamir of a round-by-round sound protocol).

Let Π be a public-coin interactive protocol whose partial transcripts for a false statement carry a doomed labelling with error ε: the empty transcript is doomed, a doomed complete transcript is rejected, and from a doomed partial transcript, whatever the prover’s next message, the next challenge leaves it doomed except with probability at most ε. With H modelled as a random oracle, a prover making at most Q distinct oracle queries, the verifier’s recomputations counted among them, makes the verifier of the Fiat–Shamir transform of Π accept with probability at most Q⁢ε.

Proof.

Each query is a transcript prefix followed by a prover message, and its answer is uniform and independent of everything before the query. The verifier accepts only a transcript that is not doomed, and the empty transcript is doomed, so acceptance requires some query on a doomed prefix whose answer leaves the doomed set; each query does so with probability at most ε, and the union bound over the at most Q queries gives Q⁢ε. □

The proposition has the form of the halo2 book’s extraction theorem (Protocol Description chapter, “Witness-extended Emulation”, its term q⁢ϵ) and of the state-restoration analysis of Ghoshal and Tessaro that §5 cites, where its application to the deployed transcript is classified. For the toy’s identity check, a single challenge with error 11/97 (§2.4), ten queries exhaust the bound. This volume establishes no round-by-round error for Halo 2, whose binding is computational. At Orchard scale the identity check’s term is about 2−240 (one Schwartz–Zippel term, in the sense §1.2 fixed), and budgets of 240, 264 and 280 queries multiply that term alone to 2−200, 2−176 and 2−160; these agree with the Q⁢εbad of the halo2 book’s algebraic-group-model bound quoted in §5.2, proved for the abstract protocol, whose transfer to the deployed transcript §5 classifies. The permutation argument’s term over (β,γ), 3⁢N/|𝔽| with N=15⋅2042 participating cells (Corollary 2.12), is larger, about 2−237.5.

The hash must take the whole transcript prefix as input: a statement or commitment left out can be chosen after the challenge is seen, the “weak Fiat–Shamir” failure the Crypto Guide records in §“The Fiat–Shamir transform: from interactive to non-interactive”. The bound holds with H modelled as a random oracle, a heuristic. The Crypto Guide proves the one-round theorem, with its forking-lemma extractor and its programmed-oracle simulator, and states that a multi-round protocol such as this one needs a multi-round theorem whose hypotheses match the protocol at hand; §5 weighs that theorem against the deployed transcript.

Non-interactivity.

The compiled argument is non-interactive: the proof is one static object, commitments, evaluations and the opening’s scalars, and verification recomputes the challenges by the same hash and runs the same checks. The protocol specification defines a Halo 2 proof as a byte sequence (protocol specification, § 5.4.10.3, “Halo 2”, and its “Encoding of Halo 2 Proofs”), so a full node verifies an Action proof from the transaction alone.

The deployed transcript.

Neither the protocol specification nor the halo2 book fixes the transcript that instantiates the transform; it is that of the implementation, halo2_proofs, and is as follows. The state is a BLAKE2b-512 hash state with the sixteen-byte personalisation Halo2-Transcript (the Crypto Guide, §“Domain separation and personalisation”). Absorbing a point P=(x,y)≠𝒪 of Vesta appends the bytes 𝟶⁢𝚡⁢𝟶𝟷⁢‖LE256⁢(x)‖⁢LE256⁢(y); the identity is not absorbable. Absorbing a scalar s∈𝔽 appends 𝟶⁢𝚡⁢𝟶𝟸∥LE256⁢(s). Squeezing a challenge appends 𝟶⁢𝚡⁢𝟶𝟶 to the state, which keeps it, and returns the 64-byte digest of the state read as a little-endian integer and reduced modulo p𝖯𝖺𝗅𝗅𝖺𝗌, with no rejection of any value (§3.8). The proof carries each point as its 32-byte compressed encoding, the x-coordinate with the parity of y in the top bit (protocol specification, § 5.4.9.6, “Pallas and Vesta”), and each scalar as LE256⁢(s). Before any prover message both parties absorb, as a scalar, a digest of the verifying key, its BLAKE2b hash reduced into 𝔽, and then the instance commitments of §4.2, which therefore never appear in the proof. Every prover message is then absorbed in the order the protocol fixes, and each challenge is squeezed at its prescribed point, after everything it must depend on. The proof is the sequence of the prover’s messages in the phase order of Table 10, counted by kind in Table 8; the verifier replays the absorptions and recomputes every challenge. Figure 12 in §4.5 draws the timeline.

4.4 The multipoint opening argument

When the verifier has drawn his evaluation point x, the prover has committed to several dozen polynomials and claimed their values at x and at rotations of x: a running product at x and ω⁢x, a permuted lookup input at x and ω−1⁢x, an advice column at every rotation its gates read. Opening each claim with the argument of §3 would cost 2⁢k+1=23 points per claim, and a one-Action proof makes 95 claims about 69 committed polynomials, the 94 evaluations at x and its rotations in Table 8 and the quotient’s (49⁢a+46 claims for a Actions). Halo 2 reduces all of them to a single opening of a single polynomial at a single point. The reduction combines random linear combinations, division by vanishing polynomials and one random-point check. The letters q and f below follow the halo2 book’s Multipoint opening argument chapter and are unrelated to the selector polynomials q∙ of §2, which are among the polynomials being folded; nor is this f the final blinder f of the deployed opening (§3.8), which phase 7 sends. The book’s Protocol Description chapter writes the values qi⁢(x3) as u, the letter this volume reserves for the round challenges of the inner-product argument; they are written q¯i here. The index i ranges over sets of query points, not over columns.

Construction 4.4 (Multipoint opening).

Let p1,…,pN be polynomials of degree <n with commitments C1,…,CN under Construction 3.2, each pν queried at a finite set Tν⊂𝔽 of points, and let p^ν⁢(t) for t∈Tν be the values the prover has claimed. Let T(1),…,T(m) be the distinct sets among the Tν and Ii:={ν:Tν=T(i)} the i-th group, enumerated as νi,0,νi,1,…; write Zi⁢(X):=∏t∈T(i)(X−t).

  1. 1.

    Fold each group (x1). The verifier sends x1∈𝔽. For each group i the prover forms qi⁢(X):=∑ex1e⁢pνi,e⁢(X), the verifier forms the same combination of commitments, Qi:=∑e[x1e]⁢Cνi,e, which commits to qi by linearity (Crypto Guide, §“Pedersen vector commitments”), and both form the combined claimed values q^i⁢(t):=∑ex1e⁢p^νi,e⁢(t) for t∈T(i). Both interpolate ri⁢(X), the unique polynomial of degree <|T(i)| with ri⁢(t)=q^i⁢(t) on T(i) (the Math Guide, §“Lagrange interpolation”); the verifier can do this from the claimed values alone.

  2. 2.

    Divide out the points (x2). The verifier sends x2∈𝔽. The prover forms the quotients fi⁢(X):=(qi⁢(X)−ri⁢(X))/Zi⁢(X), which are polynomials exactly when the combined values q^i⁢(t) equal qi⁢(t) for every t∈T(i), in particular when every claimed value is true, and combines them into

    f⁢(X):=∑i=1mx2i−1⁢fi⁢(X),

    samples a fresh blinder rf and sends F:=𝖢𝗈𝗆𝗆𝗂𝗍⁢(f;rf).

  3. 3.

    A fresh point (x3). The verifier sends x3∈𝔽. The prover sends q¯i:=qi⁢(x3) for i=1,…,m.

  4. 4.

    The value f must take. The verifier computes

    vf:=∑i=1mx2i−1⁢q¯i−ri⁢(x3)Zi⁢(x3),

    the value of f⁢(x3) if every fi is a polynomial and every q¯i is honest; he can, since ri and Zi are his to evaluate, and he rejects if some Zi⁢(x3) is 0.

  5. 5.

    One polynomial (x4). The verifier sends x4∈𝔽. Both parties form

    f∗⁢(X):=f⁢(X)+∑i=1mx4i⁢qi⁢(X),F∗:=F+∑i=1m[x4i]⁢Qi,v∗:=vf+∑i=1mx4i⁢q¯i,

    and run one opening of Construction 3.2 on the statement (F∗,x3,v∗), the prover’s witness being the coefficient vector of f∗ and the blinder rf+∑ix4i⁢rQi, where rQi is the blinder of Qi, the x1-combination of the blinders of the polynomials in group i. The verifier accepts the original claims if and only if that opening accepts.

Two remarks on the shape. Nothing is sent between x1 and x2, so the deployed transcript squeezes them back to back; they are two challenges because they play two roles, one keeping the polynomials of a group linearly independent and one keeping the quotients of different groups independent. And the reduction is free for the verifier in group operations except for the combinations of commitments, which are a few scalar multiplications per committed polynomial; the one expensive step, the final multi-scalar multiplication, is paid once, inside the single opening. Figure 11 draws the data flow.

Refer to caption
Figure 11: The multipoint reduction of Construction 4.4. Committed polynomials are grouped by the set of points at which they are queried (blue), folded within each group by x1 into qi, quotiented by the group’s vanishing factor into fi, combined across groups by x2 into f, which is committed as F; after the fresh point x3 the prover sends the qi⁢(x3), and x4 folds f and the qi into f∗ (red), whose single opening at x3 discharges every original claim. Challenges are amber.

Completeness.

If every claimed value is true, then qi−ri vanishes on T(i) and is divisible by Zi (the Math Guide, §“Roots and the factor theorem”), each fi is a polynomial of degree <n, so is f, and f⁢(x3)=vf whenever no Zi⁢(x3) is 0; f∗⁢(x3)=v∗ then holds, and the honest opening of §3 accepts. The verifier’s rejection when x3 is one of the query points, an event of probability at most |⋃iT(i)|/|𝔽|, is the reduction’s only completeness defect.

Lemma 4.5 (Soundness of the multipoint reduction).

In Construction 4.4, let the committed polynomials pν and the claimed values be fixed before x1 is drawn, let f^ be a polynomial of degree <n committed in F, fixed before x3 is drawn, let x1,…,x4 be independent and uniform in 𝔽, and let Z⁢(X):=∏t∈⋃iT(i)(X−t). If some claimed value is false, p^ν0⁢(t0)≠pν0⁢(t0) with ν0 in group i0, then the probability that the verifier computes vf and the polynomial f^+∑ix4i⁢qi committed in F∗ takes the value v∗ at x3 is at most

|Ii0|+2⁢m+n−1+deg⁡Z|𝔽|.
Proof.

The argument takes one Schwartz–Zippel term per challenge (the Math Guide, §“The Schwartz–Zippel lemma”). The fold. The difference q^i0⁢(t0)−qi0⁢(t0)=∑ex1e⁢(p^νi0,e⁢(t0)−pνi0,e⁢(t0)) is a nonzero polynomial in x1 of degree below |Ii0|, fixed before x1 is drawn, so except with probability |Ii0|/|𝔽| the folded claim is false: ri0⁢(t0)≠qi0⁢(t0). The combination. Each T(i) is contained in ⋃i′T(i′), so each Z/Zi is a polynomial. The polynomial

M⁢(X):=f^⁢(X)⁢Z⁢(X)−∑i=1mx2i−1⁢(qi⁢(X)−ri⁢(X))⁢Z⁢(X)Zi⁢(X)

is fixed once x2 is drawn and F is sent, before x3. At t0 the term f^⁢(t0)⁢Z⁢(t0) and every term with t0∉T(i) vanish, and

M⁢(t0)=−∑i:t0∈T(i)x2i−1⁢(qi⁢(t0)−ri⁢(t0))⁢∏t∉T(i)(t0−t),

the product over t∈⋃i′T(i′)∖T(i): a polynomial in x2 of degree below m, fixed before x2 is drawn, whose coefficient at x2i0−1 is nonzero. Except with probability m/|𝔽| over x2, then, M⁢(t0)≠0 and M is a nonzero polynomial of degree at most n−1+deg⁡Z. The last fold. Acceptance means (f^⁢(x3)−vf)+∑ix4i⁢(qi⁢(x3)−q¯i)=0, a polynomial equation in x4 of degree at most m whose coefficients are fixed before x4 is drawn. Unless every coefficient is zero, that is, unless f^⁢(x3)=vf and q¯i=qi⁢(x3) for every i, a uniform x4 satisfies it with probability at most m/|𝔽|. The fresh point. If f^⁢(x3)=vf and every q¯i=qi⁢(x3), then, since vf is computed only when Z⁢(x3)≠0, multiplying the first equation by Z⁢(x3) gives M⁢(x3)=0, which a uniform x3 achieves for a nonzero M with probability at most (n−1+deg⁡Z)/|𝔽|. A union bound over the four terms gives the stated bound. □

The bound is one more Schwartz–Zippel allowance, of the order of n/|𝔽|. The opening’s own knowledge error, O⁢(log⁡d/|𝔽|) by Corollary 3.13, lies below it, and that corollary’s witness-or-relation form supplies the binding opening the lemma assumes.

The deployed instance.

In the Action circuit the point sets are five. Every fixed, instance and permuted-label polynomial, the random polynomial of phase 4 and the collapsed quotient are queried at {x}; the advice columns, five at {x,ω⁢x} and five at {ω−1⁢x,x,ω⁢x}, according to the rotations their gates read; the permuted lookup input A′ at {x,ω−1⁢x} and the permuted table S′ at {x}; the lookup running products and the last permutation running product at {x,ω⁢x}; and the first two permutation running products at {x,ω⁢x,ω−6⁢x}, the last rotation reaching the boundary row of Remark 2.17 that chains one product into the next. The sets {x}, {x,ω⁢x}, {x,ω−1⁢x}, {ω−1⁢x,x,ω⁢x} and {x,ω⁢x,ω−6⁢x} give the five values q¯i, the multipoint evaluations of Table 8, and the whole reduction adds one point and five scalars to the proof.

4.5 The complete Halo 2 protocol

The pieces are now assembled into the Halo 2 protocol (the halo2 book’s Protocol Description chapter, instantiated with the arguments of its Proving system chapters), in seven phases. Throughout, 𝔽 is the constraint field, 𝔽p𝖯𝖺𝗅𝗅𝖺𝗌 for Orchard; 𝔾 is the commitment group, the Vesta curve, whose order is p𝖯𝖺𝗅𝗅𝖺𝗌 (§3.8); the rows are ω0,…,ωn−1 for a primitive n-th root of unity ω, with n=2k; and every commitment is 𝖢𝗈𝗆𝗆𝗂𝗍⁢(p;r)=⟨𝐩,𝐆⟩+[r]⁢H of Construction 3.2, H the blinding generator. The protocol has a preprocessed setup and seven phases: (1) advice commitments; (2) lookup compression, challenge θ; (3) running products, challenges β,γ; (4) the quotient, challenge y; (5) the evaluation challenge x; (6) the multipoint opening, challenges x1,x2,x3,x4; (7) the inner-product opening. Every challenge is squeezed from the transcript of §4.3 at the point named; “the verifier sends” below means that. Table 10 lists the messages with their Orchard counts and Figure 12 draws the timeline.

Setup.

The circuit fixes the columns, gates, lookup arguments and the equality permutation σ, as §4.1 described; its selectors and lookup tables are fixed columns. Key generation interpolates every fixed column and every permuted-label polynomial si⁢(X) of Construction 2.10 and commits to them with the fixed blinding factor 1 (for the fixed columns, the halo2 book’s Circuit commitments chapter); these commitments, with the circuit description, form the verifying key. The transparent parameters of the commitment scheme, the n generators 𝐆, the blinding generator H and the inner-product generator U hashed to the curve as §3.8 described, together with the domain data, are held separately. All of it is reproducible from public algorithms and the circuit; no secret setup trapdoor exists. Verification is a deterministic function of the parameters, the verifying key, the instance values and the proof.

Phase 1: advice commitments.

Both parties first absorb the digest of the verifying key and the instance commitments of §4.2 into the transcript, so that every subsequent challenge depends on the circuit and on the public input. The prover constructs the advice columns 𝐰1,…,𝐰na∈𝔽n, which with the fixed and instance columns form a satisfying assignment in the sense of Definition 2.7, fills the reserved trailing rows of each with uniformly random field elements, the blinding rows of §4.6, interpolates each to wi⁢(X) of degree <n, and sends 𝖢𝗈𝗆𝗆𝗂𝗍⁢(wi;ri) with fresh blinders ri. The verifier absorbs the commitments.

Phase 2: lookup compression, challenge θ.

The verifier sends θ. For each lookup the prover compresses the input expressions and table columns by powers of θ as in (10), forms the permuted columns A′ and S′ of Construction 2.14, and sends their two commitments; the verifier absorbs them.

Phase 3: running products, challenges β,γ.

The verifier sends β and γ. The prover commits to the permutation running products, one per chunk of dmax−2 columns as “The deployed chunking” in §2.6 described, and to one lookup running product Zlookup per lookup, and sends the commitments; the verifier absorbs them. The order is not a convenience. The permuted columns A′ and S′ must be fixed before the challenges that randomise the products are drawn, since Theorem 2.15 bounds the prover’s success probability only over challenges drawn after her columns; a prover who saw β,γ first could choose the permutation against them.

Phase 4: the quotient, challenge y.

Before y is drawn the prover commits to a uniformly random polynomial of degree <n, sends the commitment, and the verifier absorbs it; its role is the zero-knowledge one explained in §4.6. The verifier then sends y. The prover assembles the gate equation, one polynomial

C⁢(X):=∑t=0T−1yt⁢gt⁢(X),

the y-weighted combination of the T constraint polynomials gt of the circuit: each constraint of each custom gate with its selector factor, the permutation identities (7) and the chunk-boundary identities, the lookup identities (9), and the boundary identities of Remark 2.17, each masked by its active-row factor where that remark requires. If every constraint holds then every gt vanishes on the rows, so C does, and ZH∣C by (3): the quotient h⁢(X):=C⁢(X)/ZH⁢(X)=C⁢(X)/(Xn−1) is a polynomial. If some constraint fails at some row, Lemma 4.6 bounds the probability that C nonetheless vanishes on the rows, since y is drawn after every polynomial in the gt is committed and after θ, β and γ.

Lemma 4.6 (Batching by y).

Let g0,…,gT−1∈𝔽⁢[X] be fixed, and let y be uniform in 𝔽. If some gt does not vanish on the rows, then C=∑t=0T−1yt⁢gt vanishes on the rows with probability at most (T−1)/|𝔽|.

Proof.

Let gt0⁢(ωj)≠0. Then C⁢(ωj)=∑tyt⁢gt⁢(ωj) is a polynomial in y of degree at most T−1 with the nonzero coefficient gt0⁢(ωj), so it vanishes for at most T−1 values of y (the Math Guide, §“The Schwartz–Zippel lemma”). □

Theorem 4.7 (Degree of the quotient).

Let every column polynomial and every permuted-label polynomial si have degree <n, and every constraint polynomial degree at most dmax, counting as degree one each column polynomial at a rotation, each si, each of ℓ0, ℓlast and ℓblind, and X (as in “The deployed chunking” of §2.6). Then

deg⁡h≤dmax⁢(n−1)−n=(dmax−1)⁢(n−1)−1.
Proof.

A constraint of degree at most dmax is a sum of products of at most dmax such factors, each of degree at most n−1 (rotations do not change degrees); so deg⁡gt≤dmax⁢(n−1) and deg⁡C≤dmax⁢(n−1). Division by ZH, of degree n, subtracts n. The two forms agree since (dmax−1)⁢(n−1)−1=dmax⁢(n−1)−(n−1)−1=dmax⁢(n−1)−n. □

For the deployed dmax=9 and n=2048 the bound is deg⁡h≤16375, far above the degree bound n−1=2047 that the commitment of Construction 3.2 supports with d=n generators, so h cannot be committed as one polynomial. The prover therefore uses a fixed proof shape of dmax−1 chunks h0,…,hdmax−2, each of degree <n, with

h⁢(X)=∑i=0dmax−2Xn⁢i⁢hi⁢(X),

retaining leading zero chunks when the actual degree is smaller, and commits to each chunk separately with its own blinder; there are 8 chunks for Orchard. The count is right because h has at most (dmax−1)⁢(n−1)=(dmax−1)⁢n−(dmax−1)<(dmax−1)⁢n coefficients. Once the evaluation point x is drawn, the verifier recombines the chunk commitments, weighted by powers of xn, into one commitment ∑i[xn⁢i]⁢𝖢𝗈𝗆𝗆𝗂𝗍⁢(hi) to the polynomial ∑ixn⁢i⁢hi⁢(X), whose value at x is h⁢(x); no chunk is ever opened on its own (the halo2 book’s Protocol Description chapter, steps 5 to 8, and note 1 of its “Zero-knowledge and Completeness”).

Phase 5: the evaluation challenge x.

The verifier sends x. The prover evaluates every committed polynomial the verifier’s identities query, except the quotient chunks, at x and at the rotated points the identities reference, ω⁢x for the running products and for any gate reading the next row, ω−1⁢x for the permuted lookup input A′ and for gates reading the previous row, and ω−6⁢x, the deployed boundary row, for all but the last permutation product, and sends the claimed values as field elements. The deployed proof also carries the evaluations at x of the fixed columns and of the permuted-label polynomials, which the same opening binds to the verifying key’s commitments, and of the random polynomial, bound to its phase-4 commitment. No evaluation of h is sent: the verifier computes the expected quotient value C⁢(x)/(xn−1) from the sent evaluations, evaluating ℓ0, ℓlast, ℓblind and ZH at x himself, and enforces it against the collapsed chunk commitment inside the multipoint opening of phases 6 and 7, where the claimed evaluations themselves are bound to their commitments as well. The gate equation is thus checked as the identity C⁢(x)=h⁢(x)⁢ZH⁢(x), the deployed form of (5).

Phase 6: the multipoint opening, challenges x1,…,x4.

The parties run Construction 4.4 on every committed polynomial with a claimed evaluation: the advice columns, the instance column, the fixed and permuted-label polynomials, the permuted lookup columns, the running products, the random polynomial, and the collapsed quotient with its expected value, the last two joining the {x} group. The prover sends the commitment F after x1,x2 and the five values q¯i after x3; after x4 both parties hold the statement (F∗,x3,v∗).

Phase 7: the inner-product opening.

The parties execute the deployed opening of §3.8, the masked argument in the normalisation of Remark 3.9, on (F∗,x3,v∗). The prover sends the mask commitment S; the verifier sends ξ and ζ; then for k=11 rounds the prover sends the pair (Lj,Rj) and the verifier answers with uj; finally the prover sends the scalars c and f. The verifier accepts if and only if the deployed equation (29) holds with P:=F∗, v:=v∗ and x:=x3, its one multi-scalar multiplication of length n included. Its symmetric counterpart is the masked check (24), which differs from it by the three changes of that remark: the fold normalisation, a change of variables; the factor ζ on U; and the value carried as +[v]⁢U rather than −[v]⁢G0. Neither it nor (15) is the deployed equation. This is the proof’s end; Table 8 counts its bytes by kind, and nothing else is sent.

Accumulation, not deployed.

In the recursive variant of Halo 2 the verifier is itself a circuit, and that circuit defers the one expensive step of phase 7, the claim G(0)=⟨𝐬,𝐆⟩=𝖢𝗈𝗆𝗆𝗂𝗍⁢(gdep; 0) of (29), the deployed form (Remark 3.9) of the claim G(0)=𝖢𝗈𝗆𝗆𝗂𝗍⁢(g; 0) of §3.4, into an accumulator folded with the accumulators of earlier proofs; a single decider at the end verifies all accumulated claims. Orchard does not do this. The protocol specification uses Halo 2 only to prove and verify Action statements and composes no proofs (protocol specification, § 4.1.13, “Zero-Knowledge Proving System”), the Orchard design proposal states that it makes no use of the recursion (ZIP 224), and the verifier pays every deferred multiplication itself; several proofs may share it by the randomised batch check of Lemma 3.14. The variant is developed as the coda of §7.

Costs.

The prover computes one multi-scalar multiplication of length n per commitment she sends before the opening, 22⁢a+10 for a bundle of a Actions: per Action the ten advice columns, the six permuted lookup columns and the three permutation and three lookup products; shared, the random polynomial, the eight quotient chunks and the multipoint polynomial f. She also computes the a instance commitments, as the verifier does (§4.2). The opening adds one of length n, for its mask commitment S, and the 2⁢k cross terms of its rounds, two in each, of lengths n/2,n/4,…,1 in successive rounds. The verifier performs O⁢(a+log⁡n) field and group operations for a proof of a Actions: he commits to the a instance columns (at most ten nonzero values each), recomputes the challenges, evaluates each Action’s gate equation at x, combines the 23⁢a+46 commitments of phase 6, and runs the k rounds of phase 7; to this he adds the single deferred multi-scalar multiplication of length n, which is the linear term that §3.8.1 discussed and that a batch verifier amortises across proofs with fresh random scalars; that batching is distinct from the accumulation above.

phase prover sends verifier squeezes Orchard count
before 1 — (both absorb the key digest and the instance commitments) — 0 bytes
1 advice commitments — 10 points per Action
2 after θ, the A′ and S′ commitments, per lookup θ 3+3 points per Action
3 after β, γ, the permutation products and the lookup products β, γ 3+3 points per Action
4 random polynomial commitment; then, after y, the quotient chunks y 1+8 points, shared
5 after x, the claimed evaluations at x and its rotations x 49 scalars per Action; 45 shared
6 after x1, x2, the commitment F; then, after x3, the values q¯i x1, x2; x3; then x4 1 point, 5 scalars, shared
7 S; then, after ξ, ζ, the pairs (Lj,Rj) for j=k,…,1, each followed by uj; then c, f ξ, ζ; uj after each pair 1+22 points, 2 scalars, shared
Table 10: The seven phases as absorb-and-squeeze events, with the Orchard counts of Table 8. Each challenge is listed in the phase that draws it, and the prover column states which messages follow it. The per-Action messages repeat for each of the a Actions of a bundle and the shared ones appear once, giving 2720+2272⁢a bytes. The phase-5 scalars per Action are the instance evaluation, 25 advice evaluations, 8 permutation-product and 15 lookup evaluations; the shared 45 are 29 fixed, 15 permuted-label and 1 random-polynomial evaluation.
Refer to caption
Figure 12: The transcript of §4.3 as a timeline. Prover messages (blue, staggered for legibility) are absorbed above the line; the data both parties hold in advance (green) is absorbed but never sent; challenges (amber) are squeezed below the line, each after everything it must depend on; dashed lines separate the phases of Table 10. The proof is the sequence of blue boxes read left to right.

4.6 Zero knowledge: hiding the witness in Halo 2

Knowledge soundness, classified in §5, concerns what a convincing prover knows; zero knowledge concerns what the proof reveals. Halo 2 is zero-knowledge through two devices, hiding commitments and blinded polynomials, assembled into a simulator. This subsection states what each device achieves on its own, and states the claim for the whole protocol as a cited proposition with its hypotheses.

Evaluations of the running example.

The prover of the running example sends commitments and the evaluations a⁢(20),b⁢(20),c⁢(20),t⁢(20) at the random point. An evaluation is a linear equation in the secret coefficients: a⁢(20)=90+61⋅20+22⋅202+24⋅203=59 is one equation in the four unknowns (90,61,22,24), and evaluations at four distinct points determine the column, hence the secret witness 3. Halo 2 therefore blinds: the witness trace reserves independent random rows, and every commitment carries an independent random blinding term. Adding random coefficients to a column polynomial would not do: a column polynomial is determined by its n row values, and a random coefficient on Xi changes every row, breaking the gates; a random multiple of the Lagrange polynomial ℓj of a reserved row changes row j alone, which is what a blinding row is. The random values violate no constraint: every selector is zero on the reserved rows, so the gates hold there, and the permutation and lookup identities carry the active-row factor of Remark 2.17. Each column’s openings are then uniform (Lemma 4.8); the joint statement is the proposition of “The simulator” below, whose simulator is one in the sense of the Crypto Guide (§“The simulation paradigm and zero knowledge”).

Hiding commitments.

The commitment of Construction 3.2 is perfectly hiding. The prover commits a polynomial p as

𝖢𝗈𝗆𝗆𝗂𝗍⁢(p;r)=⟨𝐩,𝐆⟩+[r]⁢H,r⁢ uniform in ⁢𝔽,

with 𝐩 the coefficient vector, 𝐆 the generator vector, and H the blinding generator of §3, of no known discrete-logarithm relation to 𝐆; the term [r]⁢H makes the commitment a uniform group element for every p, since H generates 𝔾, so a commitment by itself leaks nothing about what was committed. This is the perfect hiding of the Pedersen commitment, proved in the Crypto Guide (§“The Pedersen commitment” and §“Hiding and binding”) and recalled in §2.9. Every commitment the prover sends in phases 1 to 6, the advice columns, the permuted lookup columns A′ and S′, the permutation and lookup running products, the random polynomial, the quotient chunks and the multipoint polynomial f, has this form with a fresh r (the halo2 book’s Protocol Description chapter, which blinds every group element of the protocol, its note 4). The verifying key’s commitments and the instance commitments carry the fixed blinding factor 1 instead: they commit public data both parties recompute (§4.5, §4.2), so there is nothing to hide, and a random blinder would prevent the two computations from agreeing.

Blinding rows.

The prover opens commitments, and an opening reveals evaluations. To keep those evaluations from revealing the witness, the last nblind rows of the table, the blinding rows, carry no circuit data: no gate applies there, and each advice column holds uniformly random field elements on them. By Lemma 4.8 below, a column opened at m distinct points outside the rows needs nblind≥m. The halo2 book’s Protocol Description chapter accordingly requires ne+1 random evaluations of a polynomial opened at ne rotations of x, the extra one covering its opening at the point x3 of the multipoint reduction. In the Action circuit a polynomial is opened at most four times: at three rotations of x, for some advice columns and the first two permutation products, and at x3. The deployed circuit takes nblind=5, one more than that, a parameter fixed by the implementation, halo2_proofs; with the boundary row of Remark 2.17 its usable rows number n−(nblind+1)=2042. The permutation and lookup running products are blinded the same way, their trailing rows random, and the remark’s active-row factor exempts every one of those rows from every argument, so the random values do not violate a constraint (Figure 13; the halo2 book’s Permutation argument and Lookup argument chapters, their “Zero-knowledge adjustment” sections).

Lemma 4.8 (Openings of a column with blinding rows).

Let v⁢(X)=∑j=0n−1vj⁢ℓj⁢(X) be a column polynomial over the rows ω0,…,ωn−1, let B be a set of nblind row indices, the blinding rows, and let z1,…,zm∈𝔽 be distinct points, none of them a row. With the values on the other rows held fixed, the map (vj)j∈B↦(v⁢(z1),…,v⁢(zm)) from 𝔽nblind to 𝔽m is affine, and its linear part has rank min⁡(m,nblind) (Math Guide, §“Bases, dimension, and linear maps”). Consequently, if m≤nblind and the blinding values are uniform and independent, the m evaluations are jointly uniform on 𝔽m and independent of the values on the other rows.

Proof.

The map is v⁢(zi)=∑j∉Bvj⁢ℓj⁢(zi)+∑j∈Bvj⁢ℓj⁢(zi), a constant plus the linear map with matrix L:=[ℓj⁢(zi)]i≤m,j∈B. The Lagrange basis on the rows has the closed form ℓj⁢(X)=ωj⁢(Xn−1)/(n⁢(X−ωj)) (the Math Guide, §“The Lagrange basis on H”), so L=D1⁢K⁢D2 with D1:=diag⁡(zin−1), nonzero on the diagonal because no zi is a row, D2:=diag⁡(ωj/n), nonzero because n is invertible in 𝔽, and K:=[1/(zi−ωj)]. Hence rank⁡L=rank⁡K. Every square submatrix of K is nonsingular: take rows I and columns J with |I|=|J|=s, and suppose coefficients cj, j∈J, not all zero, satisfy ∑j∈Jcj/(zi−ωj)=0 for all i∈I. Over the common denominator, ∑j∈Jcj/(X−ωj)=N⁢(X)/∏j∈J(X−ωj) with N⁢(X):=∑j∈Jcj⁢∏j′∈J,j′≠j(X−ωj′) of degree <s; the polynomial N vanishes at the s distinct points zi, so it is the zero polynomial (the Math Guide, §“Roots and the factor theorem”), and then N⁢(ωj)=cj⁢∏j′≠j(ωj−ωj′)=0 forces cj=0 for every j∈J, since the rows are distinct: a contradiction. Thus K has an invertible square submatrix of size min⁡(m,nblind), and its rank, at most min⁡(m,nblind), equals min⁡(m,nblind).

If m≤nblind the linear part is onto 𝔽m, so the affine map is onto, and every fibre is a coset of the same kernel, of the same size |𝔽|nblind−m. A uniform point of 𝔽nblind therefore lands in each fibre with the same probability: the image is uniform on 𝔽m. The constant term depends on the other rows but not the distribution, so the evaluations are independent of them. □

Refer to caption
Figure 13: One column of the deployed table: the u=n−6=2042 active rows 0,…,u−1 (blue) on which every argument is checked, the boundary row u selected by ℓlast (amber) that pins the running products, and the nblind=5 blinding rows (red) selected by ℓblind, filled with uniform random values and exempted from every constraint by the active-row factor of Remark 2.17. Each opening of the column at a point outside the rows is a linear functional of all n row values, and Lemma 4.8 says the blinding rows alone make at most nblind such openings jointly uniform.

On the toy domain {1,22,96,75} of §2.2, the rank of the lemma’s map was computed for every choice of m≤3 distinct points among the 93 outside it and for 2000 random choices of four: with nblind=2 blinding rows the rank is 1 for one point and 2 for two, and the map is onto; for three points the rank stays 2 and it is not; with nblind=3 the ranks are 1,2,3 for one, two and three points, onto each time, and 3 for four points, no longer onto. The threshold is exact: the map is a bijection at m=nblind and fails first at m=nblind+1, so nblind≥m is the condition, and the deployed nblind=5 exceeds the at most m=4 openings of any column by one. One hypothesis of the lemma is that the points lie outside the rows: an opening at a row would return a cell, witness or blinder, and the halo2 book’s Protocol Description chapter accordingly excludes challenges in the domain (its note 5). The deployed transcript squeezes full field elements with no rejection, and Corollary 4.10 bounds the effect.

Scope of the lemma.

It is a marginal statement about one column. The proof opens many related polynomials under shared challenges, and the joint distribution of all their evaluations, subject to the public relations among them, the gate equation, the running-product updates, the lookup identities, is not a consequence of the lemma applied column by column. The composition is addressed under “The simulator” below, and its status is stated there.

The quotient and the random polynomial.

The quotient chunks admit no blinding-row treatment: C determines them entirely, and the rows of h mean nothing. Their commitment blinders, together with the blinding-row randomness they inherit through C, protect them instead, and their single collapsed opening at x is the publicly computable value C⁢(x)/(xn−1), which reveals nothing the verifier did not already hold. There is one more place the quotient could leak: the multipoint reduction evaluates its {x}-group polynomial q1 at the fresh point x3, and q1 contains the collapsed quotient, whose value at x3 is not a public function of anything. This is why phase 4 commits a uniformly random polynomial before y and opens it at x alongside the quotient: it joins the same group with the same x1-weighting, so q1⁢(x3) carries a uniform summand, and the value q¯1 the prover sends is uniform whatever the quotient’s value at x3 is. The protocol commits that random polynomial for this reason (the halo2 book’s Protocol Description chapter, step 3 and note 2).

Composition.

In each phase the verifier sees only two kinds of object: hiding commitments, which are uniform group elements, and a bounded number of evaluations of the committed polynomials at the transcript’s challenge points. The blinding rows supply randomness which, by Lemma 4.8, makes the openings of each column uniform on its own; a full composition proof must show that this randomness masks the joint evaluations subject to the public relations, and must account for the correlations among advice, products, quotient and multipoint polynomials. The final inner-product opening uses the deployed mask of §3.8, the random polynomial vanishing at x3 whose commitment S opens phase 7, in addition to the commitment and round blinders, because Remark 3.7 showed that a final commitment blinder alone would not hide the folded coefficient; the opening of one polynomial was proved statistically honest-verifier zero knowledge there, and that proof is one ingredient of the composition, not the composition.

The simulator.

Zero knowledge requires a simulator for the complete joint transcript, given only the public input. The usual proof samples suitably blinded commitments and evaluations satisfying the verifier’s equations and then programs the random oracle so that the Fiat–Shamir challenges come out as required, in the manner of the Crypto Guide’s one-round simulator (§“The Fiat–Shamir transform: from interactive to non-interactive”). For the interactive protocol the halo2 book exhibits such a simulator and claims the following; this volume records the claim and does not reprove it.

Proposition 4.9 (Zero knowledge of the interactive protocol, cited).

The interactive Halo 2 protocol is perfect special honest-verifier zero knowledge, the simulator being given the verifier’s challenges in advance (the Crypto Guide, §“Sigma-protocols”), for challenge tuples in which every challenge is nonzero and outside the rows and every factor 1+uℓ⁢x32ℓ−1 of gdep⁢(x3) in (26) is nonzero (the halo2 book’s Protocol Description chapter, “Zero-knowledge and Completeness”). The simulator commits to uniformly random polynomials in place of every polynomial the prover commits in phases 1 to 3 (the book’s ai: the advice columns, the permuted lookup columns and the running products), the quotient chunks and the multipoint polynomial, and uses its foreknowledge of ξ to choose the mask s⁢(X) so that p+ξ⁢s−v vanishes at x3.

Corollary 4.10 (Unrestricted challenges).

Let every challenge be uniform in 𝔽 with no value excluded, as the deployed transcript draws them. Then the transcripts of the interactive protocol and of the simulator of Proposition 4.9, run on the same challenges, are within statistical distance Nch⁢(n+2)/|𝔽|, where Nch=22 is the number of challenges, θ,β,γ,y,x,x1,…,x4,ξ,ζ and the k=11 values uℓ; for n=211 this is 45100/p𝖯𝖺𝗅𝗅𝖺𝗌≈2−238.5.

Proof.

Each challenge has at most n+2 excluded values: 0, the n rows, and, for uℓ, the value that makes its factor of gdep⁢(x3) zero. The challenges have the same distribution in both experiments; on the event that none takes an excluded value the two transcripts are identically distributed by Proposition 4.9, and by a union bound that event fails with probability at most Nch⁢(n+2)/|𝔽|, which therefore bounds the statistical distance. □

Perfect hiding of each commitment and Lemma 4.8 are ingredients of that argument, not by themselves a proof that the joint distribution matches a real execution. For the compiled argument, the Crypto Guide’s compilation recipe (Theorem “The compilation recipe, informal”, §“SNARKs: succinct non-interactive arguments of knowledge”) yields zero knowledge when the polynomial IOP is properly blinded and the corresponding simulation theorem applies; for a multi-round protocol that is a multi-round simulation theorem in the programmable random-oracle model, which this volume neither proves nor cites from a source that proves it for this protocol. Non-interactive zero knowledge of the deployed proof is therefore stated, not proved.

The three properties.

Subject to the hypotheses just named, Halo 2 targets three guarantees for the relation ℛ𝒞 of a PLONKish circuit (Definition 2.7), the three that §1.2 demanded of a proof. Overwhelming completeness: an honest prover holding a satisfying witness convinces the verifier except on negligible transcript degeneracies, a zero inner-product challenge (§3.8, probability 1/|𝔽| per challenge), a point x3 among the query points of the multipoint reduction (“Completeness” in §4.4), an evaluation point x on a row, where the verifier’s division by xn−1 in phase 5 is undefined (probability n/|𝔽|), or challenges β,γ at which a running-product denominator factor vanishes at an earlier row than any numerator factor does (Remark 2.17; probability at most N/|𝔽| for the permutation argument on N participating cells and 2⁢u/|𝔽| per lookup on u active rows). Knowledge soundness: an efficient extractor, given rewindable access to any prover the verifier accepts with non-negligible probability, outputs a satisfying witness, so that an accepted proof certifies that one is known. Corollary 3.13 supplies the extractor for the opening layer; §5 lifts it to the non-interactive argument, whose challenges are transcript hashes, and classifies what that lifting establishes. Zero knowledge: a witness-free simulator reproduces the proof, exactly for restricted challenges (Proposition 4.9) and within the distance of Corollary 4.10 for the deployed ones. Knowledge soundness is the property of Action proofs that the Orchard balance and nullifier arguments consume, together with the binding signature (protocol specification, § 4.14, “Balance and Binding Signature (Orchard)”) and the consensus nullifier rules (protocol specification, § 3.9, “Nullifier Sets”); zero knowledge is the property the privacy argument consumes.

4.7 Halo 2 as a compiled polynomial IOP

The protocol of §4.5 factors into two layers: a polynomial interactive oracle proof for the relation, and a polynomial commitment scheme, in the sense of the Crypto Guide (§“Polynomial commitment schemes”), that realises the proof’s oracles. Every phase of the protocol belongs to one of the two layers.

The polynomial IOP, recalled.

The Crypto Guide defines the object (§“SNARKs: succinct non-interactive arguments of knowledge”, under “Polynomial interactive oracle proofs”): a public-coin interactive protocol in which, in place of ordinary messages, the prover in each round sends one or more oracles for polynomials pi∈𝔽⁢[X] of bounded degree, the verifier answers with uniformly random field elements, and at the end the verifier queries each oracle at a small number of points, receiving the evaluations, and accepts or rejects as a deterministic function of the challenges, the evaluations and the public input. Completeness, soundness and knowledge soundness are those of interactive arguments, with oracle access in place of reading the messages, and the soundness analysis is purely algebraic, resting on the Schwartz–Zippel lemma. The one respect in which a polynomial IOP differs from a vanilla interactive argument is that the verifier never reads a prover message in full: it queries a few evaluations of each oracle. That is what renders the verifier succinct even when the polynomials have large degree; the message length is never read, only as many field elements as there are queries.

The compiler, recalled.

The Crypto Guide’s compilation recipe (the same section) turns a polynomial IOP into a non-interactive argument with a polynomial commitment scheme (𝖲𝖾𝗍𝗎𝗉,𝖢𝗈𝗆𝗆𝗂𝗍,𝖮𝗉𝖾𝗇,𝖤𝗏𝖺𝗅,𝖵𝖾𝗋𝗂𝖿𝗒) and a random oracle H. Setup runs the commitment scheme’s setup. The prover simulates the IOP, replacing each oracle message pi by its commitment Ci, derives every verifier challenge from the transcript by the Fiat–Shamir transform of §4.3, and supplies, for each of the IOP’s queries, the claimed evaluation together with an evaluation proof (𝖤𝗏𝖺𝗅). The verifier parses the transcript, recomputes the challenges, checks each evaluation proof (𝖵𝖾𝗋𝗂𝖿𝗒), and runs the IOP’s accept-or-reject check on the opened evaluations (Figure 14).

Refer to caption
Figure 14: The compiler. The polynomial IOP (blue) is the information-theoretic layer: oracles, public-coin challenges and evaluation queries, sound by the Schwartz–Zippel lemma alone. The cryptographic layer (red and amber) realises it: each oracle becomes a commitment, each challenge a transcript hash, each query an opening, and Halo 2 collapses every opening into one. The two layers are separable: the same IOP compiles with any commitment scheme meeting the hypotheses of Remark 4.11.

PLONK as a polynomial IOP.

The IOP that Halo 2 compiles is PLONK’s, in the PLONKish generality of §2.5. Its oracles, sent by the prover, are one polynomial per advice column; for each lookup, the two permuted columns A′ and S′; the permutation running products, one per chunk, and one lookup running product per lookup; and the quotient h, split into chunks below the degree bound. The fixed columns, the selectors among them, and the permuted-label polynomials are preprocessed, part of the verifying key rather than prover messages, which is why they are absent from the list. The verifier’s challenges, in order, are θ for the lookup compression, β and γ for the permutation and lookup products, y for the combination of all constraints into one gate equation, and x for the evaluation point. The final check is the gate equation C⁢(x)=h⁢(x)⁢ZH⁢(x), with C the y-combination of every gate, permutation and lookup constraint polynomial and ZH the vanishing polynomial of the rows, which the verifier evaluates from the oracles’ values at x and at the rotations its constraints read: ω⁢x or ω−1⁢x for an adjacent row, and ω−6⁢x, the rotation to the boundary row of Remark 2.17, for the chunk-boundary identities of the permutation argument.

The map onto the phases.

Phases 1 to 5 of §4.5 are this IOP compiled, with one addition: the commitments to the advice, the permuted lookup columns, the running products and the quotient chunks are the oracle messages replaced by commitments, and the random polynomial of phase 4, committed and evaluated at x, is the compiler’s addition for zero knowledge (§4.6), not an IOP message; the challenges are the IOP’s challenges squeezed from the transcript, and the claimed evaluations of phase 5 answer the IOP’s oracle queries. Phases 6 and 7 bind those answers to the commitments: the multipoint reduction of §4.4, with its challenges x1,…,x4 and combined polynomial f∗, followed by the single inner-product opening of f∗. That is the bridge between the abstract compiler and the concrete protocol, and the phase numbering is the one Table 10 uses. Under the hypotheses of the Crypto Guide’s compilation recipe (Theorem “The compilation recipe, informal”) and of Remark 4.11, the compiled protocol has the IOP’s relation and the commitment scheme’s assumptions, transparency, proof size and verifier cost.

Remark 4.11 (The compilation principle, and what it does not say).

Soundness of the compiled argument is not the sum of two numbers, and the notions under which it is proved deserve their names. A polynomial IOP is round-by-round knowledge sound, informally, when its partial transcripts admit a “doomed” labelling that a prover message cannot escape except with bounded probability over the next verifier challenge; a related state-restoration notion lets a prover restore an earlier verifier state and redraw its challenge, which is precisely what a prover attacking a transcript hash can do. Precise equivalence or implication theorems between the two notions require additional conditions on the protocol and on the extractor, and this volume does not identify them. The Crypto Guide’s compilation recipe (Theorem “The compilation recipe, informal”, §“SNARKs: succinct non-interactive arguments of knowledge”) assumes a complete, knowledge-sound public-coin polynomial IOP; a correct, evaluation-binding and extractable commitment scheme; compatible composition hypotheses; and a suitable multi-round Fiat–Shamir theorem in the random-oracle model. For a multi-round protocol such as Halo 2 this volume reads those hypotheses as three: the IOP has a round-by-round or state-restoration knowledge-soundness theorem; the commitment scheme is extractable and evaluation-binding in a form compatible with it; and the transcript satisfies the hypotheses of an appropriate multi-round Fiat–Shamir theorem. The conclusion is that the compiled protocol is a non-interactive argument of knowledge in the random-oracle model, by layered extraction: the commitment scheme’s extractor recovers the committed polynomials, converting the argument’s prover into an IOP prover; the multi-round Fiat–Shamir theorem transfers the round-by-round or state-restoration guarantee to the non-interactive setting; and evaluation binding ensures that the opened evaluations are those of the extracted polynomials. What it does not say is that the knowledge error is determined by two scalars, the IOP’s knowledge error and the commitment scheme’s extraction error, added together: the exact error and the query loss depend on the definitions and on the extraction model, and §5 names the theorems that fix them for the analysed protocol and classifies their instantiation to the deployed transcript.

Delegated results.

The subsection proves nothing afresh. The commitment interface (𝖲𝖾𝗍𝗎𝗉,𝖢𝗈𝗆𝗆𝗂𝗍,𝖮𝗉𝖾𝗇,𝖤𝗏𝖺𝗅,𝖵𝖾𝗋𝗂𝖿𝗒) with its hiding, binding and extraction properties is the Crypto Guide’s (§“Polynomial commitment schemes”); the Fiat–Shamir transform and its random-oracle security are the same volume’s (§“The Fiat–Shamir transform: from interactive to non-interactive”); the definitions of completeness, soundness and knowledge soundness for interactive arguments used above are its (§“Interactive proofs, zero knowledge, and SNARKs” and §“Knowledge soundness and extractors”); and the Schwartz–Zippel lemma and the vanishing polynomial of the rows are the Math Guide’s (§“The Schwartz–Zippel lemma” and §“The evaluation domain H and its vanishing polynomial”). The volume adds the instantiation: which oracles, which challenges, which openings, and the one commitment scheme that realises them.