The Zcash ArboretumIronwood Guide PDF

8 Value commitments and the binding signature

This section constructs the net value commitment of an Action, defines the transparent transaction value pool, the balancing value of each pool and the fee, and constructs the binding signature. Proposition 8.10 keeps apart an algebraic identity, under which the binding validating key is a known multiple of the randomness base exactly when a pool balances modulo p𝖵𝖾𝗌𝗍𝖺, and a knowledge statement, under which a valid binding signature forces balance modulo p𝖵𝖾𝗌𝗍𝖺.

8.1 Value commitments

Remark 8.1 (Requirement R4).

Requirement R4 of “Requirements on a shielded payment” (§1.4) is met through the additive homomorphism of the Pedersen commitment (Crypto Guide, §“The Pedersen commitment”, Theorem “Additive homomorphism”). Each Action publishes a commitment to its net value; the group sum of a bundle’s commitments commits to the sum of the net values under the sum of the trapdoors, and a verifier compares that sum with the bundle’s public balancing value (§8.2) without learning any single value.

Definition 8.2 (Net value commitment).

Let an Action consume a note of value v𝗈𝗅𝖽 and create a note of value v𝗇𝖾𝗐, both in {0,…,264−1}, the value type of Definition “Note” (§4.1); a dummy side has value 0 (§4.4). The net value of the Action is the integer

v𝗇𝖾𝗍:=v𝗈𝗅𝖽−v𝗇𝖾𝗐∈{−264+1,…,264−1}.

The value base and the randomness base are

V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 :=𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁⁢(z.cash:Orchard-cv,v),
R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 :=𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁⁢(z.cash:Orchard-cv,r),

the value-commitment rows of Table 2. For a trapdoor 𝗋𝖼𝗏∈𝔽p𝖵𝖾𝗌𝗍𝖺, the net value commitment of the Action is the point

𝖼𝗏𝗇𝖾𝗍:=𝖵𝖺𝗅𝗎𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝗋𝖼𝗏𝖮𝗋𝖼𝗁𝖺𝗋𝖽(v𝗇𝖾𝗍):=[v𝗇𝖾𝗍modp𝖵𝖾𝗌𝗍𝖺]V𝖮𝗋𝖼𝗁𝖺𝗋𝖽+[𝗋𝖼𝗏]R𝖮𝗋𝖼𝗁𝖺𝗋𝖽∈ℰ(𝔽p𝖯𝖺𝗅𝗅𝖺𝗌)

(protocol specification, §“Homomorphic Pedersen commitments (Sapling and Orchard)”).

Both bases have order p𝖵𝖾𝗌𝗍𝖺: the protocol specification types them as points of order p𝖵𝖾𝗌𝗍𝖺 (§“Balance and Binding Signature (Orchard)”), a set that excludes 𝒪 (§“Pallas and Vesta”). The specification defines 𝖵𝖺𝗅𝗎𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝖮𝗋𝖼𝗁𝖺𝗋𝖽 on the signed integers

{−p𝖵𝖾𝗌𝗍𝖺−12,…,p𝖵𝖾𝗌𝗍𝖺−12}

(§“Commitment”), and a signed integer enters the scalar multiplication as its residue modulo p𝖵𝖾𝗌𝗍𝖺 (§2.1). Reduction modulo p𝖵𝖾𝗌𝗍𝖺 is injective on this domain, since two of its elements differ by at most p𝖵𝖾𝗌𝗍𝖺−1. The domain contains every net value, and every signed 64-bit integer, because p𝖵𝖾𝗌𝗍𝖺>2254 (§2.1) gives (p𝖵𝖾𝗌𝗍𝖺−1)/2≥2253.

Construction 8.3 (Value-commitment trapdoor).

For each Action the author of the transaction draws 𝗋𝖼𝗏 uniformly from 𝔽p𝖵𝖾𝗌𝗍𝖺, by 𝖵𝖺𝗅𝗎𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝖮𝗋𝖼𝗁𝖺𝗋𝖽.𝖦𝖾𝗇𝖳𝗋𝖺𝗉𝖽𝗈𝗈𝗋, independently of every other value (protocol specification, §“Sending Notes (Orchard)” and §“Homomorphic Pedersen commitments (Sapling and Orchard)”). Unlike 𝗋𝖼𝗆, ψ and 𝖾𝗌𝗄, which are derived from the note seed 𝗋𝗌𝖾𝖾𝖽 (§4.3), the trapdoor 𝗋𝖼𝗏 is derived from no note, and no note field, note plaintext (§10.1) or transaction field (§11.2) contains it. The author retains every 𝗋𝖼𝗏 of the bundle; together they determine the binding signing key (§8.3).

The specification types the trapdoor as an integer in {0,…,2255−1} (§“Commitment”). As for 𝗋𝖼𝗆 (§4.1), this volume types it in 𝔽p𝖵𝖾𝗌𝗍𝖺, the set that 𝖦𝖾𝗇𝖳𝗋𝖺𝗉𝖽𝗈𝗈𝗋 samples, since 𝗋𝖼𝗏 acts only as the scalar of [𝗋𝖼𝗏].

Lemma 8.4 (Hiding and binding of net value commitments).

With G:=V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 and H:=R𝖮𝗋𝖼𝗁𝖺𝗋𝖽, the map 𝖵𝖺𝗅𝗎𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝖮𝗋𝖼𝗁𝖺𝗋𝖽 is the Pedersen commitment of the Crypto Guide (§“The Pedersen commitment”, Construction “Pedersen commitment”), with messages the residues modulo p𝖵𝖾𝗌𝗍𝖺.

  1. (i)

    Perfect hiding: for 𝗋𝖼𝗏 uniform on 𝔽p𝖵𝖾𝗌𝗍𝖺 and independent of v𝗇𝖾𝗍, the commitment 𝖼𝗏𝗇𝖾𝗍 is uniform on ℰ⁢(𝔽p𝖯𝖺𝗅𝗅𝖺𝗌), whatever v𝗇𝖾𝗍 is.

  2. (ii)

    Computational binding: under Assumptions 2.22 and 2.8, no efficient algorithm outputs, except with negligible probability, pairs (v,𝗋𝖼𝗏) and (v′,𝗋𝖼𝗏′) of an integer and a trapdoor with v≢v′(modp𝖵𝖾𝗌𝗍𝖺) and [v]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽+[𝗋𝖼𝗏]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽=[v′]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽+[𝗋𝖼𝗏′]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽. On the domain of 𝖵𝖺𝗅𝗎𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝖮𝗋𝖼𝗁𝖺𝗋𝖽 distinct integers are distinct residues, so the same bound excludes openings of one point to two distinct net values.

Proof.

(i) This is the Crypto Guide’s Theorem “Perfect hiding” (§“The Pedersen commitment”). Since R𝖮𝗋𝖼𝗁𝖺𝗋𝖽≠𝒪 and the group has prime order, 𝗋𝖼𝗏↦[𝗋𝖼𝗏]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 is a bijection from 𝔽p𝖵𝖾𝗌𝗍𝖺 onto ℰ⁢(𝔽p𝖯𝖺𝗅𝗅𝖺𝗌); the uniform point [𝗋𝖼𝗏]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 stays uniform under translation by the fixed point [v𝗇𝖾𝗍modp𝖵𝖾𝗌𝗍𝖺]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽. (ii) The double-opening algebra of the Crypto Guide’s Theorem “Computational binding under DLog” (same section) gives

[v−v′]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽−[𝗋𝖼𝗏′−𝗋𝖼𝗏]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽=𝒪,

a relation with non-zero coefficient v−v′ on V𝖮𝗋𝖼𝗁𝖺𝗋𝖽. The two bases are values of 𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁 at distinct inputs; under Assumption 2.8 they replace the independent generators that the cited construction samples, and the lemma on relations among fixed generators (§2.4) excludes the relation except with negligible probability. The specification requires computational binding and states that the scheme is unconditionally hiding (protocol specification, §“Homomorphic Pedersen commitments (Sapling and Orchard)”). □

8.2 The balancing value

Definition 8.5 (Transparent transaction value pool).

Transparent inputs and transparent outputs are the cleartext value transfers of a transaction outside every shielded pool, with public amounts. Each transaction has a transparent transaction value pool: its transparent inputs add their values to it, and its transparent outputs remove theirs. The balancing value of each shielded pool, defined next for the two pools of the Orchard protocol, is also added to it (protocol specification, §“Transactions and Treestates”).

Definition 8.6 (Balancing value).

For each pool of the Orchard protocol, the Orchard pool or the Ironwood pool, the balancing value v𝑝𝑜𝑜𝑙𝖻𝖺𝗅𝖺𝗇𝖼𝖾 of a transaction is its declared net value, in zatoshi, of the notes of the pool that it consumes minus those that it creates: a signed integer in {−263,…,263−1}, encoded in cleartext as the two’s-complement 64-bit field valueBalanceOrchard or valueBalanceIronwood, of type int64. It is 0 when the transaction has no Action of the pool, and the field is then absent. A positive v𝑝𝑜𝑜𝑙𝖻𝖺𝗅𝖺𝗇𝖼𝖾 takes net value out of the pool and adds it to the transparent transaction value pool; a negative one takes value from the transparent transaction value pool into the pool (protocol specification, §“Balance and Binding Signature (Orchard)”; ZIP 229, “Transaction Format”).

In a correctly constructed transaction, v𝑝𝑜𝑜𝑙𝖻𝖺𝗅𝖺𝗇𝖼𝖾 equals the sum of the net values v𝗇𝖾𝗍 of the pool’s Actions. A verifier cannot check this equation directly, since each v𝗇𝖾𝗍 is hidden in its 𝖼𝗏𝗇𝖾𝗍; the binding signature (§8.3) enforces it.

The protocol specification, §“Transactions and Treestates”, states the consensus rule: the value remaining in the transparent transaction value pool must be non-negative. For a transaction other than a coinbase transaction (Definition “Coinbase transaction”, §11.2) the remaining value is the transaction fee (ibid.); no transaction field encodes it (ZIP 229, “Transaction Format” and “Non-requirements”). The pool of a coinbase transaction also receives, as implicit inputs, the block subsidy and the fees of the block’s other transactions, and its outputs must consume all of the value in it (protocol specification, §“Transactions and Treestates” and §“Transaction Consensus Rules”). ZIP 317, “Fee calculation”, specifies the conventional fee, which wallets SHOULD pay and which is not a consensus requirement:

𝑚𝑎𝑟𝑔𝑖𝑛𝑎𝑙⁢_⁢𝑓𝑒𝑒⋅max⁡(𝑔𝑟𝑎𝑐𝑒⁢_⁢𝑎𝑐𝑡𝑖𝑜𝑛𝑠,𝑙𝑜𝑔𝑖𝑐𝑎𝑙⁢_⁢𝑎𝑐𝑡𝑖𝑜𝑛𝑠)⁢ zatoshi,
𝑚𝑎𝑟𝑔𝑖𝑛𝑎𝑙⁢_⁢𝑓𝑒𝑒=5000,𝑔𝑟𝑎𝑐𝑒⁢_⁢𝑎𝑐𝑡𝑖𝑜𝑛𝑠=2,

where 𝑙𝑜𝑔𝑖𝑐𝑎𝑙⁢_⁢𝑎𝑐𝑡𝑖𝑜𝑛𝑠 is a sum of per-component contributions, in which each Ironwood-pool Action contributes one (the contribution 𝑛𝐴𝑐𝑡𝑖𝑜𝑛𝑠𝐼𝑟𝑜𝑛𝑤𝑜𝑜𝑑). The fee of the worked payment is computed in Example 11.16 (§11.5).

Remark 8.7 (Disclosure by the balancing value).

The balancing value is cleartext, so a negative one discloses the amount that enters the pool; the field names no receiving note or address.

8.3 The binding signature

Fix a pool of the Orchard protocol and a transaction whose bundle for that pool has n≥1 Actions, with net values vi𝗇𝖾𝗍, trapdoors 𝗋𝖼𝗏i and net value commitments 𝖼𝗏i𝗇𝖾𝗍 (i=1,…,n), and write v𝖻𝖺𝗅𝖺𝗇𝖼𝖾 for the pool’s balancing value.

Definition 8.8 (Binding signing key).

The binding signing key of the bundle is

𝖻𝗌𝗄:=𝗋𝖼𝗏1+⋯+𝗋𝖼𝗏n∈𝔽p𝖵𝖾𝗌𝗍𝖺

(protocol specification, §“Balance and Binding Signature (Orchard)”). By the additive homomorphism (Crypto Guide, §“The Pedersen commitment”, Theorem “Additive homomorphism”),

∑i=1n𝖼𝗏i𝗇𝖾𝗍=[∑i=1nvi𝗇𝖾𝗍]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽+[𝖻𝗌𝗄]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽, (6)

the integer sum entering as its residue modulo p𝖵𝖾𝗌𝗍𝖺.

Definition 8.9 (Binding validating key).

The verifier computes, from public fields only, the binding validating key

𝖻𝗏𝗄:=(∑i=1n𝖼𝗏i𝗇𝖾𝗍)−[v𝖻𝖺𝗅𝖺𝗇𝖼𝖾]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽,

where the subtracted point is 𝖵𝖺𝗅𝗎𝖾𝖢𝗈𝗆𝗆𝗂𝗍0𝖮𝗋𝖼𝗁𝖺𝗋𝖽⁢(v𝖻𝖺𝗅𝖺𝗇𝖼𝖾), the commitment with zero trapdoor, and v𝖻𝖺𝗅𝖺𝗇𝖼𝖾, an element of the domain of 𝖵𝖺𝗅𝗎𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝖮𝗋𝖼𝗁𝖺𝗋𝖽, enters as its residue modulo p𝖵𝖾𝗌𝗍𝖺. No transaction field encodes 𝖻𝗏𝗄 (protocol specification, §“Balance and Binding Signature (Orchard)”).

An opening of a net value commitment 𝖼𝗏i𝗇𝖾𝗍 is a pair (vi′,ri′) of an integer vi′ and a scalar ri′∈𝔽p𝖵𝖾𝗌𝗍𝖺 with 𝖼𝗏i𝗇𝖾𝗍=[vi′modp𝖵𝖾𝗌𝗍𝖺]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽+[ri′]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽. In the next proposition a binding signature under a point X is a signature valid under X in the binding-signature instance of RedPallas, with base R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 (§7.1); Construction “Binding signature” below fixes its use.

Proposition 8.10 (Balance and key knowledge).

For the bundle fixed above:

  1. (i)

    Identity. If 𝖼𝗏i𝗇𝖾𝗍=𝖵𝖺𝗅𝗎𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝗋𝖼𝗏i𝖮𝗋𝖼𝗁𝖺𝗋𝖽⁢(vi𝗇𝖾𝗍) for every i and 𝖻𝗌𝗄:=∑i𝗋𝖼𝗏i, then

    𝖻𝗏𝗄−[𝖻𝗌𝗄]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽=[∑i=1nvi𝗇𝖾𝗍−v𝖻𝖺𝗅𝖺𝗇𝖼𝖾]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽;

    hence 𝖻𝗏𝗄=[𝖻𝗌𝗄]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 if and only if ∑ivi𝗇𝖾𝗍≡v𝖻𝖺𝗅𝖺𝗇𝖼𝖾(modp𝖵𝖾𝗌𝗍𝖺).

  2. (ii)

    Knowledge. Let (vi′,ri′) be an opening of 𝖼𝗏i𝗇𝖾𝗍 for every i, and let b∈𝔽p𝖵𝖾𝗌𝗍𝖺 satisfy 𝖻𝗏𝗄=[b]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽. If D:=∑ivi′−v𝖻𝖺𝗅𝖺𝗇𝖼𝖾 is non-zero modulo p𝖵𝖾𝗌𝗍𝖺, then

    (b−∑i=1nri′)⁢D−1modp𝖵𝖾𝗌𝗍𝖺

    is the discrete logarithm of V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 to the base R𝖮𝗋𝖼𝗁𝖺𝗋𝖽, a relation between two values of 𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁.

Consequently, under Assumptions 2.22, 2.8 and 7.3, an efficient party that outputs the net value commitments and the balancing value of a bundle, openings (vi′,ri′) of every 𝖼𝗏i𝗇𝖾𝗍 and a binding signature under the resulting 𝖻𝗏𝗄 on a message of its choice satisfies ∑ivi′≡v𝖻𝖺𝗅𝖺𝗇𝖼𝖾(modp𝖵𝖾𝗌𝗍𝖺), except with negligible probability. The proposition holds for every message.

Proof.

(i) Expanding each 𝖼𝗏i𝗇𝖾𝗍 by Definition 8.2 and applying the additive homomorphism gives (6); subtracting [v𝖻𝖺𝗅𝖺𝗇𝖼𝖾]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 gives the identity. Since V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 has prime order p𝖵𝖾𝗌𝗍𝖺, the point [c]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 is 𝒪 if and only if c≡0(modp𝖵𝖾𝗌𝗍𝖺).

(ii) By the homomorphism, 𝖻𝗏𝗄=[D]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽+[∑iri′]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽. Equating with [b]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 gives

[D]⁢V𝖮𝗋𝖼𝗁𝖺𝗋𝖽=[b−∑i=1nri′]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽,

and D is invertible modulo the prime p𝖵𝖾𝗌𝗍𝖺. This is Part 2 of the proof of the Crypto Guide’s Theorem “The binding signature is a proof of knowledge of logP⁡B” (§“Binding signatures as a proof of knowledge of a discrete logarithm”), with P=R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 and the balancing value folded into the key as that section describes after the theorem.

Consequence. Let an efficient party 𝒜 output, with probability ϵ, a bundle’s net value commitments and balancing value, openings of every commitment, a message and a binding signature on it under the resulting 𝖻𝗏𝗄, with D non-zero modulo p𝖵𝖾𝗌𝗍𝖺; this event is efficiently decidable from the output. If 𝖻𝗏𝗄=𝒪, then b:=0 satisfies 𝖻𝗏𝗄=[b]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽. Otherwise Part 1 of the proof of the same theorem, special soundness with forking in the random-oracle model for 𝖧 (Assumption 7.3), rewinds 𝒜 to two accepting transcripts with a common first component and distinct challenges and extracts b with 𝖻𝗏𝗄=[b]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽. In this volume the extraction is steps (1) and (4) to (6) of the proof of Proposition 7.12, with no signing queries (qs=0), the base R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 in place of G𝖲𝗉𝖾𝗇𝖽𝖠𝗎𝗍𝗁 and 𝖻𝗏𝗄 in place of 𝗋𝗄∗. Key prefixing places the encoding of 𝖻𝗏𝗄 in the critical query, so both runs sign under the same 𝖻𝗏𝗄, and the openings and the balancing value of the first run satisfy the hypothesis of part (ii) for it. If ϵ is non-negligible, the extraction succeeds with non-negligible probability, and part (ii) then outputs the discrete logarithm of V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 to the base R𝖮𝗋𝖼𝗁𝖺𝗋𝖽: a non-trivial relation between values of 𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁 at distinct inputs, which the lemma on relations among fixed generators (§2.4) excludes except with negligible probability under Assumptions 2.8 and 2.22. No argument uses the value of the message, and no concrete bound is claimed. The security argument of the protocol specification, §“Balance and Binding Signature (Orchard)”, is the deployed counterpart. □

The openings are obtained, and the congruence is promoted to an equality of integers, in Lemma 12.3 and Theorem 12.4 (§12.1).

Construction 8.11 (Binding signature).

The binding signature scheme 𝖡𝗂𝗇𝖽𝗂𝗇𝗀𝖲𝗂𝗀𝖮𝗋𝖼𝗁𝖺𝗋𝖽 is the binding-signature instance of RedPallas (§7.1): RedPallas on the base R𝖮𝗋𝖼𝗁𝖺𝗋𝖽, without key re-randomisation; its base differs from the spend-authorisation base G𝖲𝗉𝖾𝗇𝖽𝖠𝗎𝗍𝗁. The author of the transaction computes 𝖻𝗌𝗄 from the trapdoors it retains and signs with it; the verifier recomputes 𝖻𝗏𝗄 from the public fields and validates the signature under it (protocol specification, §“Binding Signature (Sapling and Orchard)” and §“Balance and Binding Signature (Orchard)”). The signed message is the signature digest 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 constructed in “Transaction digests and signatures” (§11.3); which transaction data the signatures fix is stated there, in Proposition 11.10.

For an honestly constructed bundle with ∑ivi𝗇𝖾𝗍=v𝖻𝖺𝗅𝖺𝗇𝖼𝖾, Proposition 8.10(i) gives 𝖻𝗏𝗄=[𝖻𝗌𝗄]⁢R𝖮𝗋𝖼𝗁𝖺𝗋𝖽, so (𝖻𝗌𝗄,𝖻𝗏𝗄) is a key pair of the instance and the honest signature is accepted (§7.1). Under Assumption 7.3 a valid signature is a proof of knowledge of the discrete logarithm of 𝖻𝗏𝗄 to the base R𝖮𝗋𝖼𝗁𝖺𝗋𝖽 (Crypto Guide, §“Binding signatures as a proof of knowledge of a discrete logarithm”, Theorem “The binding signature is a proof of knowledge of logP⁡B”), so, for a party that also outputs openings of every net value commitment, the consequence stated in Proposition 8.10, under Assumptions 2.22, 2.8 and 7.3, makes it certify balance modulo p𝖵𝖾𝗌𝗍𝖺 without taking any net value as input: it is computed from 𝖻𝗌𝗄, the message and fresh randomness. What the public data of a bundle hide is stated in Theorem 12.12 (§12.4).

The construction runs once for each pool of the Orchard protocol. A transaction carries a balancing value and a binding signature, bindingSigOrchard or bindingSigIronwood, for each pool whose bundle has at least one Action. Each pool’s 𝖻𝗏𝗄 sums only that pool’s net value commitments and subtracts only that pool’s balancing value; both pools use 𝖵𝖺𝗅𝗎𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝖮𝗋𝖼𝗁𝖺𝗋𝖽 with the bases V𝖮𝗋𝖼𝗁𝖺𝗋𝖽 and R𝖮𝗋𝖼𝗁𝖺𝗋𝖽, and 𝖡𝗂𝗇𝖽𝗂𝗇𝗀𝖲𝗂𝗀𝖮𝗋𝖼𝗁𝖺𝗋𝖽. The consensus rule of the protocol specification, §“Transaction Consensus Rules” (ZIP 229, “Consensus Rules”), is: if a pool’s bundle has Actions, its binding signature must be a valid signature of 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 under that pool’s 𝖻𝗏𝗄. Validation rejects a non-canonical encoding of the signature’s point component (§7.1; protocol specification, §“RedDSA, RedJubjub, and RedPallas”).