This section states the relation that is proved for every Action. It fixes the bundle flags that enter the relation as public inputs, states the Action statement over the objects constructed in §2 to §8, pairs each condition with the requirement it serves and with the check outside the proof that completes it, and states the proof system together with the two assumptions on the Action proof that “Security” (§12) uses.
Each bundle carries one flags byte, present exactly when the bundle has at least one Action: for the Orchard-pool bundle of a version or version transaction, and for the Ironwood-pool bundle of a version transaction (ZIP 229, “Transaction Format”). Bits are numbered from the least significant, bit . In both bytes bit is and bit is . The consensus rules of ZIP 229, “Consensus Rules”, fix the remaining bits:
in , bit is , and bits to are reserved and must be ;
in , bits to are reserved and must be , in version and version transactions alike.
The format table of ZIP 229, “Transaction Format”, lists at bit of ; this contradicts the consensus rules of the same ZIP, which reserve that bit, and the volume follows the consensus rules. The two texts differ in the role of the bit, not in its value in a valid transaction: ZIP 258, “Consensus rules from NU6.3 activation”, requires every Orchard-pool Action to be created with .
Let a bundle have flags byte with . Its flag values, elements of , are
and . For an Orchard-pool bundle bit is reserved and , so every Orchard-pool Action has by encoding. The expanded receiver of a payment address is the pair with , the diversified base of “Diversified addresses” (§3.3); the expanded receiver of a note is that of its address. The flags have the following meaning (protocol specification, §“Action Descriptions”):
the value enables non-zero-valued spends in the bundle’s Actions;
the value enables non-zero-valued outputs in the bundle’s Actions;
the value enables the expanded receiver of an Action’s created note to differ from that of the note the same Action consumes.
The Action statement takes as its eighth primary input (same section). No normative text fixes the position of this input in the encoded instance, and none is asserted here.
ZIP 229 calls the normal case for Ironwood-pool Actions (Rationale, “enableCrossAddress polarity”); the value is not required. No consensus rule requires bit of to be . A bundle in which that bit is is admitted, and each of its Actions is then restricted, by condition A10 of Definition 9.2, to create its note at the expanded receiver of the note it consumes.
The flags are properties of the bundle. Encoded once in its flags byte, they are the same for every Action of the bundle (protocol specification, §“Action Descriptions”, note on the encoding of these components once per pool). The verifier reads them from the bundle and supplies , and as public inputs of each Action; they are not computed inside the proof. They enter the relation only through conditions A8, A9 and A10 of Definition 9.2.
The Action statement is a relation in the sense of the Crypto Guide’s Definition “Language, relation, witness” (§“Languages, relations, and witnesses”), with the primary input as instance and the auxiliary input as witness, each a tuple of the typed objects below, encoded as bit strings by the encodings of §2.1. Every condition is an equation over objects constructed in §2 to §8.
In this definition abbreviates the Pallas group , with identity , and . For let and , and let , so that for every (protocol specification, §“Coordinate Extractor for Pallas”). An integer that multiplies a point acts as its residue modulo (§2.1).
The relation is the set of pairs of a primary input
and an auxiliary input
that have the following types and satisfy conditions A1 to A10 below.
Primary input: , read as elements of ; ; and .
Auxiliary input: with every ; ; ; ; ; ; ; and .
Let , let , and let
the -bit messages of Definition 4.4, with the diversified bases witnessed. The conditions, all equations in or in , are:
Old note commitment integrity: .
New note commitment integrity: .
Merkle path validity: or some evaluation of in the fold, the root included, returns . Here is the result of the fold (2) of Proposition 5.9 with , siblings and the bits of as direction bits, in which the evaluation of at level encodes its left argument as , where if this integer is below and otherwise, and its right argument likewise with .
Value commitment integrity:
Nullifier integrity: , that is,
Spend authority: .
Diversified address integrity: with , either or .
Enable spend flag: .
Enable output flag: .
Cross-address restriction: the four equations
(Protocol specification, §“Action Statement (Orchard)”, for the typed inputs and conditions A1 to A9; §“Action Descriptions” for the eighth primary input and the meaning of that A10 formalises.)
The anchor is the bundle’s anchor (“Anchors”, §5.2). The rule of “Randomised validating keys” (§7.2) is checked outside the statement. The typing is part of the relation: the spend validating key , both diversified bases and both transmission keys are non-identity points (protocol specification, §“Action Statement (Orchard)”, note on types). The trapdoors , , and and the randomiser act only as scalars on points of order , and the statement does not require them to be below (same note). The created note’s element is not an auxiliary input; condition A2 fixes it. The relation is an NP-relation in the sense of the cited definition: its instances and witnesses have fixed length, and membership is decided by evaluating the typing and the ten conditions.
Points of the primary input enter the proof by their coordinates. The specification’s encoding note fixes the first seven primary inputs as the nine elements
of , in this order (protocol specification, §“Action Statement (Orchard)”, note on the encoding of primary inputs); the convention encodes . The eighth input, , is one further element of (§“Action Descriptions”); no normative text fixes its position, and the volume asserts none.
Conditions and the checks that complete them. Each condition is paired below with the requirement of “Requirements on a shielded payment” (§1.4) that it serves and, where one exists, with the check outside the proof that completes it; Table 5 collects the pairing and Figure 3 draws it.
Conditions A1 and A2 bind the consumed and the created note to the commitments and under , the Sinsemilla commitment with domain z.cash:Orchard-NoteCommit (Definition 4.4), whose binding is Proposition 4.5; they serve R1. Condition A2 fixes the created note’s to the nullifier that the same Action publishes for the note it consumes, the chaining rule of “Nullifier chaining” (§6.3). Its consequences for the uniqueness of and for the Faerie Gold attack are proved in “Double-spend resistance” (Corollary 12.7).
Condition A3 serves R2. Since (§2.1), the value is zero in only if it is the integer , and a field has no zero divisors. Hence, outside its case and with canonical encodings (), A3 holds if and only if or , the specification’s form: either , or is a valid path to in the sense of Proposition 5.9, with the layer-tagged hash of “The Merkle hash and the tree” (§5.1) and the paths of depth of “Authentication paths” (§5.3). A consumed note of value zero is therefore exempt from membership. The exemption lets an Action whose consumed side is a dummy note (“Actions, bundles, and dummy notes”, §4.4) create a real note without consuming a committed one. For the condition is membership of under , up to the two relaxations below; Proposition 5.9 gives its soundness together with the anchor rule of “Anchors”, the check outside the proof that completes A3.
The two relaxations are the circuit’s: it does not check that the encoding of each layer’s input is canonical, and its path check may pass when a hash on the path, the root included, is , which occurs only when returns (protocol specification, §“Merkle Path Validity”, notes on Orchard; §“Action Statement (Orchard)”, notes on the Merkle path validity check). Remark “-weakened conditions” below treats the case. The bits , absent from the specification’s auxiliary input, record the encodings that the circuit witnesses. Since is odd and has bit length (§2.1), , so the integers below congruent to an argument are and, when it is below , : the bits range over every encoding the circuit admits, and gives the canonical ones. Non-canonical encodings leave the extraction in the proof of Proposition 5.9(i) valid. At the least at which the fold agrees with the genuine chain of that proof, the running values at level differ as elements of , so no representative of the one equals a representative of the other, and the two -bit messages hashed there remain distinct with a common prefix. Parts (ii) and (iii) of the proposition therefore hold for the fold of A3.
Condition A4 serves R4. It is Definition 8.2: the integer , written as with and , acts as a scalar modulo . The specification requires the scalar multiplication to be correct on this whole signed range, which differs from the range of the balancing value (protocol specification, §“Action Statement (Orchard)”, note on the signed range). The binding signature of “The binding signature” (§8.3) is the check outside the proof that completes value conservation.
Condition A5 serves R3. It is Definition 6.3; the multiplier of is the integer in obtained by reducing the sum modulo . The nullifier-set rule of “Nullifier sets” (§6.2) is the check outside the proof that completes it.
Conditions A6 and A7 serve R5. Condition A6 is the re-randomisation of “Randomised validating keys” (§7.2), with . Condition A7 recomputes the incoming viewing key as the instance of “Viewing keys” (§3.2), under the domain z.cash:Orchard-CommitIvk, from the field element , not from the point; it ties the witnessed key components , and to the expanded receiver of the consumed note. Outside its case it forces , since , and the receiver determines , an integer below , since is a non-identity point of a group of prime order . The tie is the binding of to (Proposition “Binding of to ”, §3.2): under Assumptions 2.22 and 2.8, an efficient algorithm outputs two witnesses that satisfy A7 outside its case for one receiver, with distinct triples , only with negligible probability. The tie fixes the point only up to sign (Lemma 2.4); Lemma 12.5 and Theorem 12.9 use it. The spend-authorisation signature under , verified outside the proof (§7.2), completes both conditions.
Conditions A8 and A9 have the product form of A3. The values are below and the flags are bits, so A8 holds if and only if or , and A9 if and only if or , the specification’s forms. They tie the hidden values to the public flags of “Bundle flags” (§9.1).
Condition A10 also has the product form of A3: each of its equations is a public field element times a difference of witnessed values. The four points lie in , where the affine coordinates determine the point. For , A10 therefore holds if and only if , equality of the expanded receivers as points and not only of their -coordinates; for it is vacuous. Condition A10 formalises the meaning of stated in the protocol specification, §“Action Descriptions”. Every Orchard-pool Action has ; an Ironwood-pool Action has , normally (ZIP 229, Rationale, “enableCrossAddress polarity”). Conditions A8 to A10 serve no requirement of their own.
Condition A10 constrains each Action separately: when , the note an Action creates is at the expanded receiver of the note that same Action consumes. The consumed note may be a dummy of value , which A3 exempts from membership. Hence a bundle with can still create a note at any expanded receiver for which the transaction creator produces a dummy-spend Action in the same bundle. Such an Action has a witness: let its consumed note be a dummy of value at and its created note, of any value , be at the same receiver, and let be the key components of that receiver. Condition A3 holds because , A8 for either value of , A10 with because the two receivers agree, and A9 with when . Conditions A1, A2, A4 and A5 hold when , , and are computed from the witness by their definitions, and A6 and A7 hold for the key components of the receiver, whose address satisfies (§3.3). The Action also carries a valid spend-authorisation signature under its . By Theorem 12.9, in “Authorisation of spends”, for an honestly generated address with this requires that address’s spend authorising key , except with negligible probability. Consensus enforces no more than this per-Action restriction (ZIP 326, “Rationale for key-generation restrictions”).
For the Orchard pool, whose flag encoding forces , the pool-level effect is the one that ZIP 229, Abstract, states: outputs to the Orchard pool go to an address for which the transaction creator can authorise spends, which discourages economic activity between users within that pool. By the dummy-spend construction of the preceding remark, consensus does not prevent transfers between users within the Orchard pool (ZIP 326, “Rationale for key-generation restrictions”; ZIP 258, “Consensus rules from NU6.3 activation”, for the rule on Orchard-pool Actions).
The expanded receiver , the meaning of that A10 formalises, and the eight-input primary input with are specified in the protocol specification, §“Action Descriptions”; the flag encoding in ZIP 229; the Orchard-pool rule and the selection of the verifying key by upgrade in ZIP 258. The specification’s §“Action Statement (Orchard)” and the proof-validity rule of §“Action Descriptions” list the first seven primary inputs and conditions A1 to A9 only; Definition 9.2 follows §“Action Descriptions” for the rest. The specification names the conditions; the numbering A1 to A10 is this volume’s. ZIP 2006, to which the specification refers for the restriction, is a reserved number without content and is not cited for content.
The statement does not constrain the sign of the witnessed point . Condition A7 reads only , which is the same for and (Lemma 2.4), so the even- normalisation of key generation (“The spending key and the spend-side secrets”, §3.1) is not enforced by the proof (protocol specification, §“Action Statement (Orchard)”, note on the sign of the spend validating key). Theorem 12.9, in “Authorisation of spends”, treats both signs.
Conditions A1, A2, A3 and A7 are the specification’s -weakened forms: each holds when the Sinsemilla instance it evaluates, , the hash of or , returns on the witnessed input, for A3 on some input of the fold, because the circuit evaluates Sinsemilla with incomplete addition and cannot exclude its exceptional cases (protocol specification, §“Action Statement (Orchard)”, note on outputs and note on the Merkle path validity check; §“Merkle Path Validity”, notes on Orchard). The relation is therefore the disjunction, not the plain conjunction. The weakening costs a negligible term. A witness that satisfies A1 or A2 only through contains a -bit message, or , on which returns ; one that satisfies A3 only through contains a -bit message on which returns ; one that satisfies A7 only through contains the -bit message with the same property for the domain z.cash:Orchard-CommitIvk-M (§2.4). An efficient algorithm that runs an adversary together with the extractor of Assumption 9.11 and outputs such a message succeeds with negligible probability by Proposition 2.24(iii), which turns the message into a non-trivial discrete-logarithm relation among the generators, under Assumptions 2.22 and 2.8. For the witnesses extracted from accepted proofs, A1, A2, A3 and A7 therefore hold in their unweakened forms, without the case, except with negligible probability.
No condition involves . The point is computed at key generation, outside the statement, and is not a witness. Conditions A6 and A7 relate and the address to the witnessed , and the spend-authorisation signature under supplies knowledge of the signing key; Theorem 12.9 combines the two.
The trapdoors and and the elements and are free witnesses: no condition checks that and were derived from as in “The note seed” (§4.3). The sender computes that derivation; the recipient checks it, in “Trial decryption and note acceptance” (§10.4), and consensus checks it only for coinbase outputs (“Chain state and pool rules”, §11.4). Hence, in the deployed protocol, the hashed adds no binding: against an adversary able to compute discrete logarithms among the bases of , is not binding, and such an adversary can open one commitment to two distinct notes (ZIP 2005, Rationale, “Attacks against binding of note commitments”). The volume claims nothing further in that setting.
The statement reads none of the Action’s note-encryption fields, which “Note encryption” (§10) constructs; the specification records that the absence of a check on the ephemeral key is intentional (§“Action Statement (Orchard)”, note).
The statement takes the key components as witnesses and checks them only through A5, A6 and A7. It therefore applies equally to key components whose and come from the alternative source of ZIP 2005 (“Changes to the Protocol Specification”, §4.2.3 “Orchard Key Components”) cited in “The spending key and the spend-side secrets” (§3.1). The key-derived results of the volume, namely Proposition 3.18, Assumption 3.13, Propositions 3.17, 6.10 and 10.6, and the hypotheses on honest key generation of Theorems 12.9 and 12.12, remain restricted to keys with .
Table 5 is the requirement map of the volume. For each requirement of “Requirements on a shielded payment” (§1.4) it lists the soundness content, with the conditions, the checks outside the proof and the results that discharge it, and the hiding content, with the results that discharge it.
| Requirement | Soundness | Hiding |
|---|---|---|
| R1, hidden representation of value | A1 and A2 bind the consumed and the created note to their commitments (Proposition 4.5) | commitment hiding (Propositions 4.5 and 4.8); value-commitment hiding (§8.1); indistinguishability of real and dummy Actions (Theorem 12.12) |
| R2, membership without identification | A3 with the anchor rule of “Anchors” (Proposition 5.9) | zero knowledge of the proof (Assumption 9.14) with a locally computed authentication path (Lemma 5.15), composed in Theorem 12.12 |
| R3, no second consumption | A5 with the nullifier-set rule (Theorem 12.6) | nullifier unlinkability (Proposition 6.10) |
| R4, conservation | A4 with the binding signature (Theorem 12.4) | value-commitment hiding (Theorem 12.12) |
| R5, spend authority | A6 and A7 with the spend-authorisation signature (Theorem 12.9) and bundle binding (Proposition 11.10) | none: R5 has a soundness part only |
| Flags | A8 to A10 serve no requirement of their own: they tie the hidden values and receivers to the public flags of §9.1 | — |
The Action statement of Definition 9.2 is a relation and prescribes no computation. The post-NU6.3 Action circuit is one fixed PLONKish circuit (Halo 2 Guide, §“PLONKish arithmetisation”) whose constraints are designed to encode the typing and conditions A1 to A10; that every satisfying assignment yields a witness of is part of Assumption 9.11 below. The same circuit serves every Action. Its instance is the encoding of the eight primary inputs of Definition 9.2, bound to the proof as in the Halo 2 Guide, §“Instance columns and binding the public statement”; this instance is the only Orchard-specific part of the proof system constructed in this volume. Proofs are Halo 2 proofs (Halo 2 Guide, §“The Halo 2 proof system” and §“The complete Halo 2 protocol”; protocol specification, §“Zero-Knowledge Proving System”; ZIP 229, Abstract): a PLONKish polynomial interactive oracle proof compiled with the inner-product polynomial commitment and made non-interactive by the Fiat–Shamir transform, with no trusted setup.
The circuit’s native field is , the base field of the Pallas group, so the Pallas point operations of A1 to A10 are arithmetic in the native field. The proof’s polynomial commitments lie in the Vesta group , the group of points of the curve over , which has prime order (§2.1; Math Guide, §“Base fields, scalar fields, and the Pasta cycle”); the committed polynomials therefore have coefficients in . The Pallas group carries the protocol’s keys, commitments, signatures and note encryption; the Vesta group carries only the proof’s commitments.
The circuit has rows and a constraint-degree bound of across its gates and its permutation and lookup identities (Halo 2 Guide, §“From statement to circuit: arithmetisation in practice”). Both are cited constants; in this volume they enter only the Schwartz–Zippel term of the first supporting analysis below.
Every Action of either pool, whatever it consumes or creates, dummy sides included, is an instance of the same relation and circuit. The proofs of a bundle’s Actions are aggregated into one proof, encoded once per bundle, which the verifier checks against the primary inputs of all the bundle’s Actions and the verifying key; each Action carries its own spend-authorisation signature (protocol specification, §“Action Transfers and their Descriptions” and §“Action Descriptions”, note on proof aggregation; ZIP 229, “Transaction Format”). The verification procedure is stated in “Verification of a transaction” (§11.6).
Both pools use the post-NU6.3 circuit and its proving and verifying keys; the pools are distinguished by their note commitment trees, nullifier sets, value pool balances and component position in the transaction, not by circuits (ZIP 229, Abstract, and Rationale, “Reuse of the Orchard protocol with minimal changes”). Consensus selects the Action verifying key by network upgrade (protocol specification, §“Action Descriptions”, consensus rules). The key in force for every Action, in either pool and in version and version transactions alike, is the post-NU6.3 verifying key, named by upgrade and not by pool (ZIP 258, “Consensus rules from NU6.3 activation”).
For every classical probabilistic polynomial-time algorithm, given a generator of and for uniform in , the probability of outputting is negligible (Crypto Guide, §“Standing assumptions”, Remark “Standing assumptions for the sequel”, item 1, for the Vesta curve). Concretely, the best known classical attack costs about group operations (Crypto Guide, §“Instantiation on elliptic curves; the Pasta curves”, Proposition “The Pasta curves against the criteria”); the level is cited, not recomputed. The volume uses this assumption only in the extraction analysis of the inner-product commitment that supports Assumption 9.11 (the second supporting analysis below).
Let the hash of the Fiat–Shamir transform of the proof system be modelled as a random oracle. For every efficient adversary that outputs primary inputs and an aggregate proof , there is an efficient extractor , with access to and to its random-oracle queries, that outputs auxiliary inputs such that the probability of the event
| is accepted for under the post-NU6.3 verifying key | ||
is negligible. This is the knowledge-soundness clause of the Crypto Guide’s Definition “SNARK” (§“SNARKs: succinct non-interactive arguments of knowledge”) for the relation of Definition 9.2. It includes that every satisfying assignment of the post-NU6.3 circuit yields a witness of , for which the specification requires canonical decompositions of the scalar of A5 and of the scalar in (protocol specification, §“Action Statement (Orchard)”, note on canonical scalar decompositions).
Assumption 9.11 is an assumption, not a proved result. Its status is designed but unspecified: bounds exist for the analysed protocol, and no theorem carries them to the deployed Fiat–Shamir-compiled protocol (Halo 2 Guide, §“The algebraic group model”). The volume assumes the property, proves no bound and asserts no loss factor. The two supporting analyses that follow are cited, not re-proved, and not combined into a bound.
A non-zero gap polynomial over , fixed by the prover’s commitments before the challenge is drawn, vanishes at a uniform challenge with probability at most (Halo 2 Guide, §“Why checking one random point is a proof”). At the Orchard parameters, rows and constraint-degree bound , the constraint expression has degree below , and so does the committed quotient, of chunks of degree below , times the vanishing polynomial of degree (Halo 2 Guide, §“The complete Halo 2 protocol”, Phase 4). Hence , and the term is below . The term bounds one check at one challenge and is not a security level of the proof: the complete protocol has further randomised checks, and under the Fiat–Shamir transform an adversary may retry challenges, one hash query per retry (Halo 2 Guide, §“Removing the verifier: the Fiat–Shamir transform”).
The inner-product polynomial commitment, whose commitments lie in , has an interactive opening protocol that is knowledge-sound under the discrete-logarithm assumption in that group, Assumption 9.10, with an expected-polynomial-time tree extractor (Halo 2 Guide, §“The inner-product polynomial commitment”, Theorem “Knowledge soundness of the opening protocol”). The Fiat–Shamir-compiled argument inherits the interactive extraction bound only up to a loss in the adversary’s random-oracle query count (§“From the interactive extractor to the non-interactive argument”), and the tighter analyses in the algebraic group model are proved for the analysed protocol, not for the deployed transcript (§“The algebraic group model”). No loss factor is asserted.
Let the hash of the Fiat–Shamir transform be modelled as a programmable random oracle. There is an efficient simulator that, given only the primary inputs of a bundle and programming the random oracle, outputs an aggregate proof whose distribution is statistically indistinguishable from that of an honestly generated proof for any with for every : every distinguisher that makes polynomially many random-oracle queries, whatever its running time, has negligible advantage. This is zero knowledge of statistical grade in the non-interactive, random-oracle form of the Crypto Guide’s Definition “Zero knowledge” (§“The simulation paradigm and zero knowledge”).
Assumption 9.14 is an assumption, not a proved result. The Halo 2 Guide, §“Zero knowledge: hiding the witness in Halo 2”, records honest-verifier zero knowledge of the interactive protocol and zero knowledge of its Fiat–Shamir compilation in the programmable random-oracle model, subject to its composition and Fiat–Shamir hypotheses, without reproving it. Assumptions 9.11 and 9.14 are the two assumptions on the Action proof that “Security” (§12) composes with the propositions of the preceding sections.