The Zcash ArboretumThe Complete Arboretum PDF

4 Notes and note commitments

This section defines the note, its commitment and its extracted commitment, and proves their hiding and binding; it constructs the derivation of all randomness of a created note from one seed under the lead byte 𝟶⁢𝚡⁢𝟶𝟹, and defines the Action and the bundle as units of a transaction.

4.1 Notes

Definition 4.1 (Unit of value).

The zatoshi is the smallest unit of value; one ZEC, the unit of the native currency of Zcash, is 108 zatoshi (protocol specification, §“Shielded Pools and Notes” and §“Mainnet and Testnet”). Every value in this volume, note values included, is an integer number of zatoshi.

Definition 4.2 (Note).

A note is a tuple n=(𝖺𝖽𝖽𝗋,v,ρ,ψ,𝗋𝖼𝗆), where

  • •

    the address 𝖺𝖽𝖽𝗋=(d,𝗉𝗄𝖽) of the recipient, of the type constructed in §3.3: a diversifier d∈{0,1}88 and a transmission key 𝗉𝗄𝖽∈ℰ⁢(𝔽p𝖯𝖺𝗅𝗅𝖺𝗌)∖{𝒪};

  • •

    the value v∈{0,…,264−1}, in zatoshi;

  • •

    the elements ρ∈𝔽p𝖯𝖺𝗅𝗅𝖺𝗌 and ψ∈𝔽p𝖯𝖺𝗅𝗅𝖺𝗌;

  • •

    the commitment trapdoor 𝗋𝖼𝗆∈𝔽p𝖵𝖾𝗌𝗍𝖺

(protocol specification, §“Shielded Pools and Notes”; the lengths 88 and 64 are those of §“Constants”). The specification types 𝗋𝖼𝗆 as an integer in {0,…,2255−1} (§“Commitment”). This volume types it in 𝔽p𝖵𝖾𝗌𝗍𝖺, because every derivation of 𝗋𝖼𝗆 yields a reduced value and 𝗋𝖼𝗆 acts only as the scalar of [𝗋𝖼𝗆], which depends on 𝗋𝖼𝗆 modulo p𝖵𝖾𝗌𝗍𝖺 alone; this typing makes the binding of Proposition 4.5 a statement about notes. For a created note, ψ and 𝗋𝖼𝗆 are derived from its note seed, for an Ironwood-pool note in §4.3, and ρ is the nullifier of the note consumed in the same Action, a rule constructed in “Nullifier chaining” (§6.3).

A note is never published. A transaction that creates a note publishes its extracted note commitment 𝖼𝗆𝗑 (Definition 4.4) and a ciphertext of its note plaintext for the recipient, constructed in “Encryption to the recipient” (§10.2) (protocol specification, §“Note Commitments” and §“Sending Notes (Orchard)”). Of the fields of a created note, only ρ appears on chain in the clear: it equals the nullifier that the same Action publishes for its consumed note (“Nullifier chaining”, §6.3). This representation of value serves requirement R1 of §1.4; Propositions 4.5 and 4.8 state what the commitment hides.

Remark 4.3 (Roles of the fields).

The address and the value are the content of the note, its recipient and its amount; the trapdoor 𝗋𝖼𝗆 randomises its commitment; the elements ρ and ψ, which also enter the commitment, are the note-specific inputs of its nullifier, constructed in “The nullifier” (§6.1).

4.2 Note commitments

Definition 4.4 (Note commitment).

For a note n=((d,𝗉𝗄𝖽),v,ρ,ψ,𝗋𝖼𝗆) let 𝗀𝖽:=𝖣𝗂𝗏𝖾𝗋𝗌𝗂𝖿𝗒𝖧𝖺𝗌𝗁⁢(d) (§3.3) and

M⁢(n):=𝗀𝖽⋆⁢‖𝗉𝗄𝖽⋆‖⁢LE64⁢(v)⁢‖LE255⁢(ρ)‖⁢LE255⁢(ψ),

with ρ and ψ read as integers in {0,…,p𝖯𝖺𝗅𝗅𝖺𝗌−1}; the string M⁢(n) has the fixed length 1086 of Table 4. With D:=z.cash:Orchard-NoteCommit, the note commitment of n is

𝖼𝗆:=𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝗋𝖼𝗆⁢(M⁢(n)):=𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖢𝗈𝗆𝗆𝗂𝗍𝗋𝖼𝗆⁢(D,M⁢(n))∈ℰ⁢(𝔽p𝖯𝖺𝗅𝗅𝖺𝗌)∪{⊥}.

By the routing of §2.4, with the hash point and the blinding base

M^ :=𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖧𝖺𝗌𝗁𝖳𝗈𝖯𝗈𝗂𝗇𝗍⁢(z.cash:Orchard-NoteCommit-M,M⁢(n)),
HD :=𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁⁢(z.cash:Orchard-NoteCommit-r,ε),

the commitment is 𝖼𝗆=M^+[𝗋𝖼𝗆]⁢HD if M^≠⊥, and 𝖼𝗆=⊥ otherwise. The extracted note commitment is 𝖼𝗆𝗑:=𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⊥⁢(𝖼𝗆)∈𝔽p𝖯𝖺𝗅𝗅𝖺𝗌∪{⊥} (§2.1). The specification’s 𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍 takes the five encoded fields as separate arguments, in the order of their encodings in M⁢(n) (protocol specification, §“Sinsemilla commitments”, §“Sending Notes (Orchard)” and §“Coordinate Extractor for Pallas”).

A sender never publishes ⊥: it redraws the note seed (step (vi) of the derivation of §4.3). The extracted commitment 𝖼𝗆𝗑 is the value an Action publishes for its created note, and the leaf of that note in the pool’s note commitment tree of “The Merkle hash and the tree” (§5.1), whose nodes are elements of 𝔽p𝖯𝖺𝗅𝗅𝖺𝗌.

The blinding base HD is not 𝒪: the protocol specification, §“Sinsemilla commitments”, states that 𝖲𝗂𝗇𝗌𝖾𝗆𝗂𝗅𝗅𝖺𝖢𝗈𝗆𝗆𝗂𝗍 is perfectly hiding for a uniform trapdoor, for every domain, which holds only for a blinding base other than 𝒪 (as for 𝖢𝗈𝗆𝗆𝗂𝗍𝗂𝗏𝗄, §3.2).

Proposition 4.5 (Hiding and binding of note commitments).
  1. (a)

    Perfect hiding. Let 𝗋𝖼𝗆 be uniform on 𝔽p𝖵𝖾𝗌𝗍𝖺. For every note content (d,𝗉𝗄𝖽,v,ρ,ψ) whose message M⁢(n) has hash point M^≠⊥, the commitment 𝖼𝗆 is uniform on ℰ⁢(𝔽p𝖯𝖺𝗅𝗅𝖺𝗌). Hence the distributions of 𝖼𝗆 and of 𝖼𝗆𝗑 do not depend on (𝗀𝖽,𝗉𝗄𝖽,v,ρ,ψ), and 𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍 is perfectly hiding on messages without a ⊥ output, in the sense of the Crypto Guide’s Definition “Hiding game and hiding” (§“Hiding and binding”).

  2. (b)

    Binding of the extracted commitment. Under Assumptions 2.22 and 2.8, no efficient algorithm outputs, except with negligible probability, two notes n≠n′ with 𝖼𝗆𝗑⁢(n)=𝖼𝗆𝗑⁢(n′)≠⊥. In particular two distinct notes share no note commitment other than ⊥. With Proposition 2.24(iii), which excludes messages with output ⊥, part (b) gives computational binding in the sense of the Crypto Guide’s Definition “Binding game and binding” (same section), with the note content as the message and 𝗋𝖼𝗆 as the randomness, stated for notes and for the extracted value.

Proposition 4.8 states hiding for the trapdoor that a sender derives.

Proof.

(a) This is Lemma 2.26(i) for the domain D and the message length 1086, whose hypothesis HD≠𝒪 holds by the paragraph above; the value 𝖼𝗆𝗑 is a fixed function of 𝖼𝗆. Equal distributions for every pair of contents without a ⊥ output are perfect hiding by the Crypto Guide’s Proposition “Distributional characterisation of hiding” (§“Hiding and binding”).

(b) Step 1 reduces distinct notes to distinct openings. The map (𝗀𝖽,𝗉𝗄𝖽,v,ρ,ψ)↦M⁢(n) is injective: the string M⁢(n) concatenates fields of fixed lengths; the star encoding is injective (§2.1); the encoding LE64 is injective on {0,…,264−1}; and the encoding LE255 is injective on the representatives of 𝔽p𝖯𝖺𝗅𝗅𝖺𝗌, since p𝖯𝖺𝗅𝗅𝖺𝗌<2255 (§2.1). The map n↦(M⁢(n),𝗋𝖼𝗆) is therefore injective except on pairs of notes with d≠d′ and 𝖣𝗂𝗏𝖾𝗋𝗌𝗂𝖿𝗒𝖧𝖺𝗌𝗁⁢(d)=𝖣𝗂𝗏𝖾𝗋𝗌𝗂𝖿𝗒𝖧𝖺𝗌𝗁⁢(d′). Let T and T′ be the values of 𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁 at (z.cash:Orchard-gd,𝖫𝖤𝖡𝖲𝟤𝖮𝖲𝖯88⁢(d)) and at the corresponding input for d′, distinct inputs because 𝖫𝖤𝖡𝖲𝟤𝖮𝖲𝖯88 is injective. If T,T′≠𝒪, equal diversified bases give T−T′=𝒪; otherwise T=𝒪 or T′=𝒪. Each is a non-trivial relation among values of 𝖦𝗋𝗈𝗎𝗉𝖧𝖺𝗌𝗁 on distinct inputs, which the lemma on relations among fixed generators (§2.4) excludes except with negligible probability.

Step 2 treats distinct openings. Let 𝖼𝗆𝗑⁢(n)=𝖼𝗆𝗑⁢(n′)≠⊥. The lifting 𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⊥ maps only ⊥ to ⊥, so 𝖼𝗆 and 𝖼𝗆′ are points, and by Lemma 2.4 𝖼𝗆′=𝖼𝗆 or 𝖼𝗆′=−𝖼𝗆. The pairs (M⁢(n),𝗋𝖼𝗆) and (M⁢(n′),𝗋𝖼𝗆′) are openings of the instance 𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍 in {0,1}1086×𝔽p𝖵𝖾𝗌𝗍𝖺. By Proposition 2.24(ii), outputs with 𝖼𝗆′=−𝖼𝗆, or with 𝖼𝗆′=𝖼𝗆 and M⁢(n)≠M⁢(n′), have negligible probability (in the opposite case the relation in its proof has coefficient 2109+1 on the hash base, for a message of 109 chunks). In the remaining case 𝖼𝗆′=𝖼𝗆 and M⁢(n)=M⁢(n′), and outside the event of Step 1 the openings differ, so 𝗋𝖼𝗆≠𝗋𝖼𝗆′ in 𝔽p𝖵𝖾𝗌𝗍𝖺; then [𝗋𝖼𝗆−𝗋𝖼𝗆′]⁢HD=𝒪, impossible for HD≠𝒪 in a group of prime order p𝖵𝖾𝗌𝗍𝖺. A note commitment other than ⊥ shared by n≠n′ gives equal extracted commitments other than ⊥, which proves the particular case. □

4.3 The note seed: Ironwood derivations (lead byte 𝟶⁢𝚡⁢𝟶𝟹)

Definition 4.6 (Note seed and lead byte).

A created note reaches its recipient as a note plaintext, the byte string constructed in “The note plaintext” (§10.1) that the sender encrypts. Its first byte, the lead byte, names the format of the plaintext and selects the derivation of the note’s randomness. The sender draws one note seed 𝗋𝗌𝖾𝖾𝖽, a uniform 32-byte string, the key type of 𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽 (§2.3), which the plaintext carries. The values ψ and 𝗋𝖼𝗆 of the note and the ephemeral secret key 𝖾𝗌𝗄∈𝔽p𝖵𝖾𝗌𝗍𝖺 of “Encryption to the recipient” (§10.2) are all derived from it (protocol specification, §“Note Plaintexts and Memo Fields” and §“Sending Notes (Orchard)”).

Construction 4.7 (Derivations under lead byte 𝟶⁢𝚡⁢𝟶𝟹).

The input is an address (d,𝗉𝗄𝖽), a value v∈{0,…,264−1} and ρ∈𝔽p𝖯𝖺𝗅𝗅𝖺𝗌. Let 𝗀𝖽:=𝖣𝗂𝗏𝖾𝗋𝗌𝗂𝖿𝗒𝖧𝖺𝗌𝗁⁢(d) and ρ¯:=𝖨𝟤𝖫𝖤𝖮𝖲𝖯256⁢(ρ). For a point P=(x,y) the 32-byte string 𝖫𝖤𝖡𝖲𝟤𝖮𝖲𝖯256⁢(P⋆) equals 𝖨𝟤𝖫𝖤𝖮𝖲𝖯256⁢(x+2255⁢(ymod2)) (§2.1). The sender

  1. (i)

    checks that 𝗉𝗄𝖽≠𝒪;

  2. (ii)

    draws 𝗋𝗌𝖾𝖾𝖽 uniformly from the 32-byte strings;

  3. (iii)

    derives 𝖾𝗌𝗄:=ToScalar⁢(𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽𝗋𝗌𝖾𝖾𝖽⁢([𝟶⁢𝚡⁢𝟶𝟺]∥ρ¯))∈𝔽p𝖵𝖾𝗌𝗍𝖺, and returns to (ii) if 𝖾𝗌𝗄=0;

  4. (iv)

    derives ψ:=ToBase⁢(𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽𝗋𝗌𝖾𝖾𝖽⁢([𝟶⁢𝚡⁢𝟶𝟿]∥ρ¯))∈𝔽p𝖯𝖺𝗅𝗅𝖺𝗌;

  5. (v)

    derives 𝗋𝖼𝗆:=ToScalar⁢(𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽𝗋𝗌𝖾𝖾𝖽⁢(𝗉𝗋𝖾⁢_⁢𝗋𝖼𝗆))∈𝔽p𝖵𝖾𝗌𝗍𝖺, where

    𝗉𝗋𝖾⁢_⁢𝗋𝖼𝗆:=[𝟶⁢𝚡⁢𝟶⁢𝙱] ‖𝖫𝖤𝖡𝖲𝟤𝖮𝖲𝖯256⁢(𝗀𝖽⋆)‖⁢𝖫𝖤𝖡𝖲𝟤𝖮𝖲𝖯256⁢(𝗉𝗄𝖽⋆)
    ‖𝖨𝟤𝖫𝖤𝖮𝖲𝖯64⁢(v)‖⁢ρ¯∥𝖨𝟤𝖫𝖤𝖮𝖲𝖯256⁢(ψ),

    a string of 1+32+32+8+32+32=137 bytes;

  6. (vi)

    computes 𝖼𝗆𝗑 of the note n:=((d,𝗉𝗄𝖽),v,ρ,ψ,𝗋𝖼𝗆) by Definition 4.4, and returns to (ii) if 𝖼𝗆𝗑=⊥.

The output is the note n, its seed 𝗋𝗌𝖾𝖾𝖽 and 𝖾𝗌𝗄 (protocol specification, §“Sending Notes (Orchard)”; ZIP 2005, “Changes to the Protocol Specification”, §4.7.3).

The order is forced: the string 𝗉𝗋𝖾⁢_⁢𝗋𝖼𝗆 contains ψ, so 𝗋𝖼𝗆 is derived after ψ. The strings 𝗀𝖽⋆ and 𝗉𝗄𝖽⋆ in 𝗉𝗋𝖾⁢_⁢𝗋𝖼𝗆 are those of the message M⁢(n), packed into bytes, so 𝗋𝖼𝗆 is a function of 𝗋𝗌𝖾𝖾𝖽 and of every committed field (𝗀𝖽,𝗉𝗄𝖽,v,ρ,ψ). The leading bytes 𝟶⁢𝚡⁢𝟶𝟺, 𝟶⁢𝚡⁢𝟶𝟿 and 𝟶⁢𝚡⁢𝟶⁢𝙱 are rows of Table 3.

An Ironwood-pool note has the type of Definition “Note” (§4.1) and is committed by the same 𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍 (Definition 4.4). Every note created by an Ironwood-pool Action, a dummy created note included, has a plaintext with lead byte 𝟶⁢𝚡⁢𝟶𝟹 and the derivations above; no note created by an Orchard-pool Action does. This is the only note-level distinction between the two pools (ZIP 229, “Transaction Format”; ZIP 258, “ZIP 2005 activation”).

Proposition 4.8 (Hiding under the derived trapdoor).

An adversary chooses two tuples (d(i),𝗉𝗄𝖽(i),v(i),ρ(i)), i∈{0,1}, of the input type of the construction above, with 𝗉𝗄𝖽(i)≠𝒪. The challenger draws a uniform bit b, runs steps (ii) to (vi) of the construction on tuple b, and returns (𝖼𝗆b,𝖾𝗌𝗄b), the note commitment of the note it computes and its 𝖾𝗌𝗄; the adversary receives no other function of 𝗋𝗌𝖾𝖾𝖽 (the ciphertext that carries 𝗋𝗌𝖾𝖾𝖽 is treated in Theorem 12.12). It outputs a bit b′. Let the number ϵ𝖯𝖱𝖥 bound the advantage against Assumption 2.12 of each algorithm built from the adversary in the proof, each of which queries 𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽𝗋𝗌𝖾𝖾𝖽 on three inputs with pairwise distinct leading bytes; let δ<2−257 bound the distance of ToScalar from uniform (§2.3); and let ϵ⊥ be the largest, over i, of the sum of two probabilities that one pass through steps (ii) to (vi) on tuple i returns to step (ii), one with 𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽𝗋𝗌𝖾𝖾𝖽 as specified and one with its three outputs replaced by independent uniform strings. Then

|Pr⁢[b′=1∣b=0]−Pr⁢[b′=1∣b=1]|≤2⁢(ϵ𝖯𝖱𝖥+δ+ϵ⊥),

and ϵ𝖯𝖱𝖥 and ϵ⊥ are negligible under Assumptions 2.12, 2.22 and 2.8. The same bound holds with 𝖼𝗆𝗑b in place of 𝖼𝗆b.

Proof.

Fix the adversary’s tuples. One pass through steps (ii) to (vi) with a fresh 𝗋𝗌𝖾𝖾𝖽 is a trial; its output is (𝖼𝗆,𝖾𝗌𝗄), and it is accepted, event A, when 𝖾𝗌𝗄≠0 and M^≠⊥, since 𝖼𝗆𝗑=⊥ exactly when M^=⊥. Trials are independent and identically distributed, and the challenger returns the output of the first accepted one; so its answer Xi on tuple i is distributed as the output Yi of one trial conditioned on A. For a random variable Y and an event A with Pr⁢[¬A]=p<1, the statistical distance between Y and Y conditioned on A is at most p: for every set S,

Pr⁢[Y∈S]−Pr⁢[Y∈S∣A]=Pr⁢[Y∈S,¬A]−Pr⁢[Y∈S,A]⁢p1−p,

and both terms lie in [0,p].

Hybrid 1 replaces the outputs of 𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽𝗋𝗌𝖾𝖾𝖽 on [𝟶⁢𝚡⁢𝟶𝟺]∥ρ¯, [𝟶⁢𝚡⁢𝟶𝟿]∥ρ¯ and 𝗉𝗋𝖾⁢_⁢𝗋𝖼𝗆 by independent uniform u1,u2,u3∈{0,1}512, so that 𝖾𝗌𝗄=ToScalar⁢(u1), ψ=ToBase⁢(u2) and 𝗋𝖼𝗆=ToScalar⁢(u3). The three inputs have distinct leading bytes, the input 𝗉𝗋𝖾⁢_⁢𝗋𝖼𝗆 is chosen after the answer that determines ψ, and 𝗋𝗌𝖾𝖾𝖽 is used only as a key of 𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽. By Lemma 2.15 (Assumption 2.12), the probability that any efficient test outputs 1 on the trial’s output changes by at most ϵ𝖯𝖱𝖥. Hybrid 2 replaces 𝗋𝖼𝗆 by a uniform element of 𝔽p𝖵𝖾𝗌𝗍𝖺, independent of all else, at statistical cost δ. The event A does not involve 𝗋𝖼𝗆, so its probability is the same in both hybrids.

In Hybrid 2 the values 𝖾𝗌𝗄 and ψ are independent, A is the intersection of an event on 𝖾𝗌𝗄 and an event on ψ, and 𝗋𝖼𝗆 is uniform and independent of both. Conditioned on A, therefore, M^≠⊥ and 𝖼𝗆=M^+[𝗋𝖼𝗆]⁢HD is uniform on ℰ⁢(𝔽p𝖯𝖺𝗅𝗅𝖺𝗌) by Proposition 4.5(a), independently of 𝖾𝗌𝗄, and 𝖾𝗌𝗄 is distributed as ToScalar⁢(u1) conditioned on being non-zero. This distribution W does not depend on i.

For each i, the adversary’s output probability on Xi differs from that on W by at most the rejection probability of a trial as specified (Xi against Yi), plus ϵ𝖯𝖱𝖥+δ (Yi against its form in Hybrid 2), plus the rejection probability in Hybrid 2, which equals that with uniform strings (the unconditioned form in Hybrid 2 against W). The two rejection probabilities sum to at most ϵ⊥. Adding the bounds for i=0 and i=1 gives the stated bound. For 𝖼𝗆𝗑b, an adversary against 𝖼𝗆𝗑b is one against 𝖼𝗆b that first applies the fixed map 𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⊥.

Negligibility. With uniform strings, 𝖾𝗌𝗄=0 has probability at most 1/p𝖵𝖾𝗌𝗍𝖺+δ. The event M^=⊥ has the probability with which an efficient algorithm finds a message of hash point ⊥: the algorithm that runs the adversary’s choice of tuples, draws u2, and outputs M⁢(n) for tuple i with ψ=ToBase⁢(u2). That probability is negligible by Proposition 2.24(iii) under Assumptions 2.22 and 2.8. Rejection is efficiently decidable from the three outputs of 𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽𝗋𝗌𝖾𝖾𝖽, so the rejection probability as specified exceeds that with uniform strings by at most ϵ𝖯𝖱𝖥, negligible under Assumption 2.12. □

Remark 4.9 (Purpose of the hashed trapdoor).

Because 𝗋𝖼𝗆 is a hash of 𝗋𝗌𝖾𝖾𝖽 and of every committed field, Ironwood-pool notes are recoverable in the sense of ZIP 2005. That ZIP proposes, with details subject to change, a Recovery Protocol for recovering Ironwood-pool funds if the Orchard protocol must be disabled because discrete logarithms become computable; a recovery protocol whose statement recomputes 𝗋𝖼𝗆 by this derivation can bind a note even against an adversary able to compute discrete logarithms (ZIP 2005, Abstract; Rationale, “Proposed Recovery Protocol” and “Repairing note commitments”). Against such an adversary 𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍 alone is not binding: the discrete-logarithm relations between its bases give a linear equation over 𝔽p𝖵𝖾𝗌𝗍𝖺 with several solutions, hence two distinct notes that open one commitment (ZIP 2005, Rationale, “Attacks against binding of note commitments”). What the deployed protocol checks of the derivation is stated with the Action statement, defined in “The Action statement” (§9.2).

The specification defines, for each pool, the set 𝖺𝗅𝗅𝗈𝗐𝖾𝖽𝖫𝖾𝖺𝖽𝖡𝗒𝗍𝖾𝗌𝑝𝑜𝑜𝑙 of lead bytes allowed in a note plaintext of that pool. For every transaction that contains Actions of the pool, the set is {𝟶⁢𝚡⁢𝟶𝟹} for the Ironwood pool and {𝟶⁢𝚡⁢𝟶𝟸} for the Orchard pool (protocol specification, §“Note Plaintexts and Memo Fields”; ZIP 2005, “Changes to the Protocol Specification”, §3.2.1; ZIP 258, “ZIP 2005 activation”). The lead byte travels encrypted, and each decrypting party enforces the rule: decryption with an incoming viewing key, by the recipient, and decryption with an outgoing viewing key, by its holder, both return ⊥ when the lead byte is not allowed (§“Decryption using an Incoming Viewing Key (Sapling and Orchard)” and §“Decryption using an Outgoing Viewing Key (Sapling and Orchard)”). For an Ironwood-pool output this is check (i) of the acceptance procedure of “Trial decryption and note acceptance” (§10.4). The one consensus check of the lead byte is stated in “Chain state and pool rules” (§11.4).

4.4 Actions, bundles, and dummy notes

Definition 4.10 (Action).

An Action of a pool consumes one note n𝗈𝗅𝖽 and creates one note n𝗇𝖾𝗐 of that pool; it is the specification’s Action transfer, and every Action has both sides (protocol specification, §“Action Transfers and their Descriptions”). Its public data carry the extracted commitment 𝖼𝗆𝗑 of the created note (Definition 4.4), the nullifier of the consumed note (“The nullifier”, §6.1), a randomised validating key with a spend-authorisation signature (“Randomised validating keys”, §7.2), a net value commitment (“Value commitments”, §8.1), and the ciphertexts of “Encryption to the recipient” (§10.2). “Action descriptions and bundles” (§11.1) assembles them and redefines neither the Action nor the bundle. The relation that each Action must satisfy is the Action statement, defined in “The Action statement” (§9.2).

Definition 4.11 (Dummy notes).

Every Action has one consumed and one created note, so that its public fields are the same whether a side is real or not; a side that a payment does not use carries a dummy note, a note of value 0. A dummy consumed note is built as follows (protocol specification, §“Dummy Notes (Orchard)”; ZIP 2005, “Changes to the Protocol Specification”, §4.8.3):

  1. (i)

    draw a fresh spending key as in §3.1, and derive its key components and an address (d,𝗉𝗄𝖽) (§3.2, §3.3);

  2. (ii)

    set v:=0, draw 𝗋𝗌𝖾𝖾𝖽 uniformly, and set ρ:=𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢(P) for a uniform point P of ℰ⁢(𝔽p𝖯𝖺𝗅𝗅𝖺𝗌);

  3. (iii)

    derive ψ and 𝗋𝖼𝗆 under the lead byte chosen as for a created note of the pool (ZIP 2005, “Changes to the Protocol Specification”, §4.8.3); in the Ironwood pool the lead byte is 𝟶⁢𝚡⁢𝟶𝟹 and the derivations are steps (iv) and (v) of §4.3;

  4. (iv)

    compute 𝖼𝗆 by Definition 4.4, and repeat from the draw of 𝗋𝗌𝖾𝖾𝖽 with a fresh seed if 𝖼𝗆=⊥.

Its nullifier is computed as for any note (“The nullifier”, §6.1). For step (iii) the two sources differ: the specification’s section chooses the lead byte with the pool fixed to the Orchard pool, which gives 𝟶⁢𝚡⁢𝟶𝟸 also in the Ironwood pool, whereas ZIP 2005, §4.8.3, makes the choice identical for dummy and non-dummy notes. The volume follows the ZIP. No condition of the Action statement checks the derivation of 𝗋𝖼𝗆𝗈𝗅𝖽 (Definition 9.2, Remark “What the statement does not check”).

A dummy created note is a created note of value 0, built as any created note; in the Ironwood pool it therefore carries lead byte 𝟶⁢𝚡⁢𝟶𝟹. Its address depends on the flag 𝖾𝗇𝖺𝖻𝗅𝖾𝖢𝗋𝗈𝗌𝗌𝖠𝖽𝖽𝗋𝖾𝗌𝗌 of the bundle (“Bundle flags”, §9.1).

  • •

    When 𝖾𝗇𝖺𝖻𝗅𝖾𝖢𝗋𝗈𝗌𝗌𝖠𝖽𝖽𝗋𝖾𝗌𝗌=1, the dummy created note goes to a random address (protocol specification, §“Dummy Notes (Orchard)”).

  • •

    When 𝖾𝗇𝖺𝖻𝗅𝖾𝖢𝗋𝗈𝗌𝗌𝖠𝖽𝖽𝗋𝖾𝗌𝗌=0, as in every Orchard-pool bundle, condition A10 of Definition 9.2 places the note that an Action creates at the expanded receiver, defined in “Bundle flags”, of the note that the same Action consumes. A dummy created note then goes to the expanded receiver of that consumed note, real or dummy. In the Orchard pool, beside a real consumed note, the sender fills the component C𝖾𝗇𝖼 of the note ciphertext of the dummy created note (“Encryption to the recipient”, §10.2) with random bytes, not with an encryption of its plaintext (ZIP 326, “Fabricated same-address outputs and randomized note ciphertexts”). A dummy consumed note beside a real created note lies at the expanded receiver of that created note: in place of step (i) it takes the created note’s address and the key components of the key from which that address derives, and the Action’s spend-authorisation signature requires that key’s 𝖺𝗌𝗄 (Remark “Meaning of A10”, §9.2). A fresh key as in step (i) remains admissible when both sides of the Action are dummies at its address.

That the public data do not reveal which sides of an Action are real is part of Theorem 12.12 (§12.4).

Definition 4.12 (Bundle).

The bundle of a pool in a transaction, which ZIP 229 calls the pool’s component, is the sequence of that pool’s Actions in the transaction together with the bundle-level data that later sections attach: one anchor (“Anchors”, §5.2), one balancing value (“The balancing value”, §8.2), one binding signature (“The binding signature”, §8.3), the flags (“Bundle flags”, §9.1) and one proof for all its Actions (“The Action circuit and the Halo 2 proof”, §9.3). A transaction carries at most one bundle per pool (ZIP 229, “Transaction Format”).