Halo 2 Guide
The Halo 2 proof system, from arithmetisation to recursion
Abstract
This volume of The Zcash Arboretum develops the proof system that Orchard uses: Halo 2, the argument by which the author of a shielded Action convinces every validator that the Action is well formed while disclosing nothing about the note, the key, or the Merkle path behind it. It assumes the Math Guide, whose finite fields, polynomials and evaluation domains, elliptic curves, and probability are used throughout without re-derivation, and the Crypto Guide, whose definitions it instantiates rather than restates: arguments of knowledge and zero knowledge, the Fiat–Shamir transform, Pedersen vector commitments, and the polynomial-commitment interface with its compilation recipe.
The running example is knowledge of with over the field , a size at which every number of the example can be checked by hand; every number is computed by script. The volume reduces the example to a grid of gates, the grid to polynomials, the polynomials to a single identity, and the identity to one evaluation at a random point, at which the prover must open a commitment without sending the committed polynomial. The inner-product argument (IPA) that performs the opening has a section of its own: the problem stated without machinery, one fold written out step by step, the recursion from the prover’s and the verifier’s side, the verifier’s structured scalars, the extraction from three transcripts that proves the argument knowledge sound under the discrete-logarithm assumption on Vesta, with the hash that derives the generators modelled as a random oracle, the blinders and what they do not hide, and the running example opened on a curve of prime order . The deployed proof system follows: the Action circuit’s arithmetisation, the binding of the public statement, the Fiat–Shamir transcript, the reduction of many openings to one, the complete protocol, and its zero knowledge. The volume then analyses the knowledge soundness of the Fiat–Shamir-compiled argument, lists the verifier’s checks on the running example in the order he performs them, and closes with recursive composition and accumulation, which Orchard does not deploy.
Contents
- 1 Introduction
-
2 Arithmetisation: from a computation to committed polynomials
- 2.1 From computation to a grid of constraints
- 2.2 From the grid to polynomials
- 2.3 From vanishing to a single identity
- 2.4 Why checking one random point is a proof
- 2.5 PLONKish arithmetisation
- 2.6 Enforcing the wiring: the permutation argument
- 2.7 Proving a value sits in a table: lookups
- 2.8 The lookup argument
- 2.9 Why the prover cannot wriggle: binding commitments
-
3 The inner-product polynomial commitment
- 3.1 The problem: an inner product in fewer than group elements
- 3.2 One fold, every step written out
- 3.3 The recursion: rounds to a single scalar
- 3.4 The verifier’s work: structured scalars and the final generator
- 3.5 Why it is binding: extraction from three transcripts
- 3.6 Zero knowledge: what the blinders hide and what they do not
- 3.7 A complete toy opening, carried by script
- 3.8 Halo 2’s specifics: parameters, generators from a hash, the deferred multi-scalar multiplication, and the proof bytes
-
4 The Halo 2 proof system
- 4.1 From statement to circuit: arithmetisation in practice
- 4.2 Instance columns and binding the public statement
- 4.3 Removing the verifier: the Fiat–Shamir transform
- 4.4 The multipoint opening argument
- 4.5 The complete Halo 2 protocol
- 4.6 Zero knowledge: hiding the witness in Halo 2
- 4.7 Halo 2 as a compiled polynomial IOP
- 5 A rigorous treatment of knowledge soundness
- 6 The verifier’s decision and its implication chain
- 7 Recursive proof composition and accumulation schemes