The Zcash ArboretumThe Complete Arboretum PDF

6 Issuance of Custom Assets

This section constructs the objects of ZIP 227 that create value of a Custom Asset: the Issue Note and the rule by which validators compute its commitment (§6.1); the Issuance Action and the Issuance Bundle that carry Issue Notes (§6.2); the element ρ of an Issue Note, derived from the first nullifier of the Action Group (§6.3); the reference note (§6.4); and the rules and the digest hypothesis that bind an Issuance Bundle to its issuer and to one transaction (§6.5). Issuance is public. The one privacy property that it keeps, the unlinkability of a later spend of an Issue Note, is proved in §6.1. The rules that update the global issuance state are those of “The global issuance state” (§7). Every construction of the section is taken from ZIP 227, which is Draft, together with the objects of ZIP 226 that it uses.

6.1 Issue Notes

Definition 6.1 (Issue Note).

An Issue Note represents the issuance of a value v of one Custom Asset to one recipient. It is a tuple

(d,𝗉𝗄𝖽,v,𝖠𝗌𝗌𝖾𝗍𝖡𝖺𝗌𝖾,ρ,𝗋𝗌𝖾𝖾𝖽)

of type

𝖭𝗈𝗍𝖾𝖨𝗌𝗌𝗎𝖾:= {0,1}88×(ℰ⁢(𝔽p𝖯𝖺𝗅𝗅𝖺𝗌)∖{𝒪})×{0,…,264−1}
×ℰ∗×𝔽p𝖯𝖺𝗅𝗅𝖺𝗌×𝔹𝕐⁢[32],

with the following components.

  1. 1.

    The pair (d,𝗉𝗄𝖽) is the recipient’s address, of the type of the Ironwood Guide’s Construction “Diversified address”: the diversifier d and the diversified transmission key 𝗉𝗄𝖽, a point other than the identity (ZIP 227 types it in 𝖪𝖠𝖮𝗋𝖼𝗁𝖺𝗋𝖽.𝖯𝗎𝖻𝗅𝗂𝖼, protocol specification, §“Orchard Key Components”).

  2. 2.

    The value v counts units of the Asset. The lengths 88 and 64 are the constants ℓ𝖽 and ℓ𝗏𝖺𝗅𝗎𝖾 of the protocol specification, §“Constants”.

  3. 3.

    The point 𝖠𝗌𝗌𝖾𝗍𝖡𝖺𝗌𝖾∈ℰ∗ is the Asset Base of the Custom Asset issued (Construction 2.10).

  4. 4.

    The element ρ is fixed by Construction 6.7, in “Computation of ρ for Issue Notes” (§6.3).

  5. 5.

    The note seed 𝗋𝗌𝖾𝖾𝖽 is a 32-byte string that the issuer MUST sample uniformly at random.

An Issue Note carries no ψ and no 𝗋𝖼𝗆; both are to be derived from 𝗋𝗌𝖾𝖾𝖽 (Remark 6.2). ZIP 227 writes the fourth and fifth factors of the type as ℙ∗ and 𝔽qℙ (Table 1; ZIP 227, “Issue Note”). Class: specified.

Commitments of Issue Notes. No note commitment of an Issue Note is transmitted. Every validator MUST compute the commitment 𝖼𝗆 of each Issue Note by 𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝖮𝗋𝖼𝗁𝖺𝗋𝖽𝖹𝖲𝖠 (Definition 3.2), exactly as for an OrchardZSA note with the same fields, and, when the transaction is included in the block chain, append its extracted form 𝖼𝗆𝗑 to the note commitment tree after the commitments of the Action Group’s Actions. The order is Definition 7.4, in “State transition of a transaction” (§7.2), and the tree is the one that Remark 1.7 leaves open (ZIP 227, “Issue Note”, “Specification: Consensus Rule Changes” and “Addition to the Note Commitment Tree”). Class: specified; its evaluability is qualified by Remark 6.2.

Remark 6.2 (Commitment inputs of an Issue Note).

The OrchardZSA note of an Issue Note (d,𝗉𝗄𝖽,v,𝖠𝗌𝗌𝖾𝗍𝖡𝖺𝗌𝖾,ρ,𝗋𝗌𝖾𝖾𝖽) is (d,𝗉𝗄𝖽,v,𝖠𝗌𝗌𝖾𝗍𝖡𝖺𝗌𝖾,ρ,ψ,𝗋𝖼𝗆), with ψ and 𝗋𝖼𝗆 derived from 𝗋𝗌𝖾𝖾𝖽 as in Definition 3.5. With ρ¯:=𝖨𝟤𝖫𝖤𝖮𝖲𝖯256⁢(ρ) and 𝗀𝖽:=𝖣𝗂𝗏𝖾𝗋𝗌𝗂𝖿𝗒𝖧𝖺𝗌𝗁⁢(d),

ψ :=ToBase⁢(𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽𝗋𝗌𝖾𝖾𝖽⁢([𝟶⁢𝚡⁢𝟶𝟿]∥ρ¯)),
𝗋𝖼𝗆 :=𝖣𝖾𝗋𝗂𝗏𝖾⁢_⁢𝗋𝖼𝗆𝗋𝗌𝖾𝖾𝖽⁢(𝗅𝖾𝖺𝖽𝖡𝗒𝗍𝖾,𝗀𝖽⋆,𝗉𝗄𝖽⋆,v,ρ¯,ψ).

The derivation of ψ does not depend on the lead byte and is specified. The derivation of 𝗋𝖼𝗆 is designed but unspecified, and the value of its lead byte is an open problem (Remark 3.6). An Issue Note has no plaintext that could carry a lead byte. Three consequences follow.

  1. (a)

    Until the value is assigned, the commitment that every validator MUST compute is not computable from live text. The gap is at consensus level. For the created note of a transfer the same gap binds only sender and recipient, since consensus sees only 𝖼𝗆𝗑.

  2. (b)

    The recipient needs the same 𝗋𝖼𝗆 to open the commitment when it spends the note, in condition A1′ of Definition 4.6.

  3. (c)

    The Ironwood Guide’s Proposition “Hiding under the derived trapdoor” does not transfer to Issue Notes. Hiding plays no role for them: every field, 𝗋𝗌𝖾𝖾𝖽 included, is public (Remark 6.6).

(ZIP 227, “Issue Note” and “Specification: Consensus Rule Changes”; ZIP 226, “Note Structure and Commitment”; ZIP 2005, “Changes to the Protocol Specification”, amending the protocol specification’s §“Sending Notes (Orchard)”.)

Remark 6.3 (Commitment ⊥ for an Issue Note).

The commitment 𝖭𝗈𝗍𝖾𝖢𝗈𝗆𝗆𝗂𝗍𝖮𝗋𝖼𝗁𝖺𝗋𝖽𝖹𝖲𝖠 may return ⊥. For a note created by an Action, the sender repeats the derivation with a new 𝗋𝗌𝖾𝖾𝖽 when the extracted commitment is ⊥ (protocol specification, §“Sending Notes (Orchard)”). ZIP 227 states no rule for an Issue Note whose commitment is ⊥, and no text proposes one: the consequence for the transaction is an open problem. An Issue Note is in the custom branch of Definition 3.2, its Asset Base being a derived one (Proposition 2.13), where the commitment is ⊥ only if the hash point is; for uniform 𝗋𝗌𝖾𝖾𝖽 the event therefore has negligible probability, by Proposition 3.3(c) (ZIP 227, “Issue Note” and “Specification: Consensus Rule Changes”).

Proposition 6.4 (Unlinkability of spends of Issue Notes).

Let a key be generated with 𝗎𝗌𝖾⁢_⁢𝗊𝗌𝗄=𝖿𝖺𝗅𝗌𝖾 from a uniform spending key, with nullifier deriving key 𝗇𝗄. Consider the game of the Ironwood Guide’s Proposition “Nullifier unlinkability”, modified as follows. The adversary, which receives (𝖽𝗄,𝗂𝗏𝗄) and 𝖺𝗄ℙ but not 𝗇𝗄, submits adaptively Issue Notes ni of its choice, in particular to addresses of the key, each published in full as issuance publishes it, together with elements ψi∈𝔽p𝖯𝖺𝗅𝗅𝖺𝗌 and 𝗋𝖼𝗆i∈𝔽p𝖵𝖾𝗌𝗍𝖺 of its choice, such that the elements ρi are pairwise distinct and the OrchardZSA commitments 𝖼𝗆i of the notes (di,𝗉𝗄𝖽,i,vi,𝖠𝗌𝗌𝖾𝗍𝖡𝖺𝗌𝖾i,ρi,ψi,𝗋𝖼𝗆i) are not ⊥. In the real game it receives the nullifier 𝖣𝖾𝗋𝗂𝗏𝖾𝖭𝗎𝗅𝗅𝗂𝖿𝗂𝖾𝗋𝗇𝗄⁢(ρi,ψi,𝖼𝗆i) that a later spend of the note publishes by condition A5′ with 𝗌𝗉𝗅𝗂𝗍⁢_⁢𝖿𝗅𝖺𝗀=0; in the ideal game it receives 𝖤𝗑𝗍𝗋𝖺𝖼𝗍ℙ⁢([ui]⁢K𝖮𝗋𝖼𝗁𝖺𝗋𝖽+𝖼𝗆i) for independent uniform ui∈𝔽p𝖵𝖾𝗌𝗍𝖺. Then its distinguishing advantage is at most the bound of the cited proposition, which is negligible under the assumptions that proposition names, the Ironwood Guide’s Assumption “Poseidon is a PRF” among them.

The ideal answers are independent of the published notes when K𝖮𝗋𝖼𝗁𝖺𝗋𝖽≠𝒪, so a spend’s nullifier does not link it to its issuance for any party without 𝗇𝗄, the issuer included. The statement holds for every ψi and every 𝗋𝖼𝗆i, in particular for the derived ψi and for any value that a future lead byte gives 𝗋𝖼𝗆i; it is therefore independent of the open lead byte. It concerns the nullifier only; the other published components of the spending Action are treated in “Hiding of the Asset type” (§9.5). It fails for the reference note (Definition 6.10), whose recipient key is the all-zero spending key: its 𝗇𝗄 is public, and its nullifier is computable by anyone. Status (Definition 1.3): proved here for the specified construction; conditional on the assumptions of the cited proposition. ZIP 227, “Issue Note”, states the property as rationale.

Proof.

The proof is that of the Ironwood Guide’s Proposition “Nullifier unlinkability”. Its game already lets the adversary choose every field of every submitted note, so publishing an Issue Note in full, 𝗋𝗌𝖾𝖾𝖽 included, gives the adversary nothing that it does not hold. Its hybrids use a submitted note only through the triple (ρi,ψi,𝖼𝗆i), with 𝖼𝗆i a point other than ⊥ and the ρi pairwise distinct: the hops H1 to H3 change the key material only, the hop H4 uses the distinctness of the ρi for the lazily sampled random function, and the hop H5 and the final statement use 𝖼𝗆i only as a point to which [si]⁢K𝖮𝗋𝖼𝗁𝖺𝗋𝖽 or [ui]⁢K𝖮𝗋𝖼𝗁𝖺𝗋𝖽 is added. The nullifier of an OrchardZSA note is 𝖣𝖾𝗋𝗂𝗏𝖾𝖭𝗎𝗅𝗅𝗂𝖿𝗂𝖾𝗋 of the Ironwood Guide’s Definition “Nullifier” with the OrchardZSA commitment in place of the Orchard one (ZIP 226, “Note Structure and Commitment”; §4.2). Every hybrid and every bound therefore carries over verbatim. The hypothesis that the ρi are pairwise distinct is supplied, for the Issue Notes of a valid chain, by Proposition 6.9, except with negligible probability.

For the reference note, 𝗇𝗄:=ToBase⁢(𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽𝗌𝗄⁢([𝟶⁢𝚡⁢𝟶𝟽])) with 𝗌𝗄 the all-zero string (Ironwood Guide, §“The spending key and the spend-side secrets”) is a public constant, so the real answer is computable from public data and differs from the ideal one. □

6.2 Issuance Actions and Issuance Bundles

ZIP 227 specifies issuance through three components: the Issuance Bundle of a transaction, in which a publicly named issuer creates Issue Notes; the flag 𝖿𝗂𝗇𝖺𝗅𝗂𝗓𝖾 of each Issuance Action, which, once set, ends issuance of its Asset permanently; and the global issuance state kept by every node, constructed in “The global issuance state” (§7).

Definition 6.5 (Issuance Action and Issuance Bundle).

Let

𝖨𝗌𝗌𝗎𝖾𝖭𝗈𝗍𝖾𝖥𝗂𝖾𝗅𝖽𝗌:={0,1}88×(ℰ⁢(𝔽p𝖯𝖺𝗅𝗅𝖺𝗌)∖{𝒪})×{0,…,264−1}×𝔽p𝖯𝖺𝗅𝗅𝖺𝗌×𝔹𝕐⁢[32],

the fields (d,𝗉𝗄𝖽,v,ρ,𝗋𝗌𝖾𝖾𝖽) of an Issue Note without its Asset Base.

  1. 1.

    An Issuance Action is a triple (𝖺𝗌𝗌𝖾𝗍𝖣𝖾𝗌𝖼𝖧𝖺𝗌𝗁,𝗏𝖭𝗈𝗍𝖾𝗌,𝖿𝗅𝖺𝗀𝗌𝖨𝗌𝗌𝗎𝖺𝗇𝖼𝖾), where the hash 𝖺𝗌𝗌𝖾𝗍𝖣𝖾𝗌𝖼𝖧𝖺𝗌𝗁∈𝔹𝕐⁢[32] is the description hash of Definition 2.6; 𝗏𝖭𝗈𝗍𝖾𝗌 is a finite sequence of elements of 𝖨𝗌𝗌𝗎𝖾𝖭𝗈𝗍𝖾𝖥𝗂𝖾𝗅𝖽𝗌, the unencrypted Issue Notes of the Asset; and 𝖿𝗅𝖺𝗀𝗌𝖨𝗌𝗌𝗎𝖺𝗇𝖼𝖾 is a byte that carries the Boolean 𝖿𝗂𝗇𝖺𝗅𝗂𝗓𝖾, which the issuer sets to signal that no further issuance of the Asset will occur.

  2. 2.

    An Issuance Bundle is a triple (𝗂𝗌𝗌𝗎𝖾𝗋,𝗏𝖨𝗌𝗌𝗎𝖾𝖠𝖼𝗍𝗂𝗈𝗇𝗌,𝗂𝗌𝗌𝗎𝖾𝖠𝗎𝗍𝗁𝖲𝗂𝗀), where 𝗂𝗌𝗌𝗎𝖾𝗋=𝗂𝗄⁢_⁢𝖾𝗇𝖼𝗈𝖽𝗂𝗇𝗀∈𝔹𝕐⁢[33] is the issuer identifier of Definition 2.4; 𝗏𝖨𝗌𝗌𝗎𝖾𝖠𝖼𝗍𝗂𝗈𝗇𝗌 is a finite sequence of Issuance Actions; and 𝗂𝗌𝗌𝗎𝖾𝖠𝗎𝗍𝗁𝖲𝗂𝗀=[𝟶⁢𝚡⁢𝟶𝟶]∥σ encodes a signature σ by 𝗂𝗌𝗄 on the transaction’s 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 (Definition 6.12).

The pair (𝗂𝗌𝗌𝗎𝖾𝗋,𝖺𝗌𝗌𝖾𝗍𝖣𝖾𝗌𝖼𝖧𝖺𝗌𝗁) is an Asset Identifier and determines 𝖠𝗌𝗌𝖾𝗍𝖡𝖺𝗌𝖾 by Construction 2.10. With it, each element (d,𝗉𝗄𝖽,v,ρ,𝗋𝗌𝖾𝖾𝖽) of 𝗏𝖭𝗈𝗍𝖾𝗌 determines the Issue Note (d,𝗉𝗄𝖽,v,𝖠𝗌𝗌𝖾𝗍𝖡𝖺𝗌𝖾,ρ,𝗋𝗌𝖾𝖾𝖽) of Definition 6.1 completely. The commitment is omitted, because every validator recomputes it (ZIP 227, “Issuance Action”, “Issuance Bundle”, “Issue Note” and “Issuance Protocol”). Class: specified.

Encoding status. The byte encoding of the Issuance Bundle and of the Issuance Action exists only in withdrawn ZIP 230 and is designed but unspecified; it is not the version-6 format of ZIP 229 (Remark 8.1; ZIP 227, “Issuance Action” and “Issuance Bundle”).

Issuance Actions without notes. The rules of ZIP 227 place no requirement on the number of Issue Notes of an Issuance Action. Withdrawn ZIP 230 admits an Issuance Action with none, so that an issuer can finalise an issued Asset without issuing more of it. The validity of such an action for an Asset without an entry in the issuance state is the open case of Remark 7.5, in “State transition of a transaction” (§7.2) (ZIP 227, “Specification: Consensus Rule Changes”; ZIP 230, “Issuance Action Description”).

Remark 6.6 (Public issuance).

ZIP 227 enables only public issuance, so that the supply of each Asset can be tracked (ZIP 227, “Motivation”; “Requirements”: the issuance mechanism should enable public tracking of the supply). The Issue Notes are unencrypted. The issuer, the Asset (through 𝖺𝗌𝗌𝖾𝗍𝖣𝖾𝗌𝖼𝖧𝖺𝗌𝗁, from which anyone recomputes 𝖠𝗌𝗌𝖾𝗍𝖡𝖺𝗌𝖾), every value, every recipient address, every ρ and 𝗋𝗌𝖾𝖾𝖽, and every flag 𝖿𝗂𝗇𝖺𝗅𝗂𝗓𝖾 are public, so issuance publicly links each recipient address to an Asset and an amount. Since 𝗋𝗌𝖾𝖾𝖽 is public, so is ψ, and so, once the lead byte is assigned, are the commitment and the leaf of each Issue Note. With the public burn set (Definition 5.1), the amount of each Asset in circulation, issued less burnt, is a public function of the chain, which ZIP 227 records as the balance of the global issuance state (“Global Issuance State”). The later use of an Issue Note remains private, to the extent of Proposition 6.4. In this volume issuance is called public and Issue Notes unencrypted (ZIP 227, “Issuance Action”).

6.3 Computation of ρ for Issue Notes

An Issue Note is created outside any Action, so the Ironwood Guide’s Construction “Chaining rule” (§“Nullifier chaining”) gives it no ρ.

Construction 6.7 (Derivation of issued rho values).

Define

𝖣𝖾𝗋𝗂𝗏𝖾𝖨𝗌𝗌𝗎𝖾𝖽𝖱𝗁𝗈:𝔽p𝖯𝖺𝗅𝗅𝖺𝗌×{0,…,232−1}×{0,…,232−1}→𝔽p𝖯𝖺𝗅𝗅𝖺𝗌

by

𝖣𝖾𝗋𝗂𝗏𝖾𝖨𝗌𝗌𝗎𝖾𝖽𝖱𝗁𝗈⁢(𝗇𝖿,iA,iN)
:=ToBase⁢(𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽𝖨𝟤𝖫𝖤𝖮𝖲𝖯256⁢(𝗇𝖿)⁢([𝟶⁢𝚡⁢𝟾𝟺]⁢‖𝖨𝟤𝖫𝖤𝖮𝖲𝖯32⁢(iA)‖⁢𝖨𝟤𝖫𝖤𝖮𝖲𝖯32⁢(iN))),

with 𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽 the Ironwood Guide’s Construction “Expansion function” and ToBase its Definition “Field reductions”. The expansion input after the key has 1+4+4=9 bytes. The element ρ of the Issue Note at zero-based position iN of the Issuance Action at zero-based position iA of the Issuance Bundle is

ρ:=𝖣𝖾𝗋𝗂𝗏𝖾𝖨𝗌𝗌𝗎𝖾𝖽𝖱𝗁𝗈⁢(𝗇𝖿0,0,iA,iN),

where 𝗇𝖿0,0 is the nullifier published by the first Action of the transaction’s Action Group (Definition 4.13), whatever the kind of its consumed note. The definition presupposes an Action Group, which rule (I1) of Definition 6.12 enforces. The derivation adds one row to the Ironwood Guide’s Construction “Domain bytes of PRF expansion”:

b Key κ Remainder t′ f Output Section
𝟶⁢𝚡⁢𝟾𝟺 𝖨𝟤𝖫𝖤𝖮𝖲𝖯256⁢(𝗇𝖿0,0) 𝖨𝟤𝖫𝖤𝖮𝖲𝖯32⁢(iA)∥𝖨𝟤𝖫𝖤𝖮𝖲𝖯32⁢(iN) ToBase ρ §6.3

The key is a public nullifier. No other ZIP and no section of the protocol specification uses the byte 𝟶⁢𝚡⁢𝟾𝟺, and no registry of a lower volume lists it. Because the key is public, neither the Ironwood Guide’s Assumption “Pseudorandomness of PRF expansion” nor its Lemma “Independence of domain-separated expansions” applies (ZIP 227, “Computation of ρ”; protocol specification, §“Pseudo Random Functions” and §“Orchard Key Components”). Class: specified.

Assumption 6.8 (BLAKE2b-512 as a random oracle).

For each fixed 16-byte personalisation P, the function x↦𝖡𝖫𝖠𝖪𝖤𝟤𝖻⁢-⁢𝟧𝟣𝟤⁢(P,x) is a random oracle with 512-bit output in the sense of the Crypto Guide’s Definition “Random oracle” (§“The random oracle model”), independent of the oracles of the other personalisations. It is used for the personalisation Zcash_ExpandSeed of 𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽, where the key of Construction 6.7 is public. For a secret uniform key and an adversary that makes polynomially many oracle queries, it implies the Ironwood Guide’s Assumption “Pseudorandomness of PRF expansion”. Its uses in this volume are Proposition 6.9 and Lemma 9.6, whose proof programs one query of the oracle.

Proposition 6.9 (Uniqueness of issued rho values).
  1. (a)

    The expansion inputs, key and remainder, of the Issue Notes of a valid chain are pairwise distinct, and each differs from the input of every other row of 𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽.

  2. (b)

    Under Assumption 6.8, consider an execution in which at most q queries in total are made to the oracle of personalisation Zcash_ExpandSeed. The probability that two Issue Notes of the chain have equal ρ, or that the ρ of an Issue Note equals one of M elements ρ of notes created by Actions and fixed before the query that yields it, is at most

    (q⁢(q−1)2+q⁢M)⁢(1p𝖯𝖺𝗅𝗅𝖺𝗌+2−512)≤(q+M)2p𝖯𝖺𝗅𝗅𝖺𝗌.

    With no query beyond the N issued values, q=N.

Literal uniqueness is not claimed, nor distinctness from the ρ of notes created by later Actions, which the derivation does not control. Distinct OrchardZSA notes have distinct commitments by Proposition 3.3(b). The proof of the Ironwood Guide’s Proposition “Nullifier uniqueness” then applies with the hash base and message of each note’s branch of Definition 3.2, which unfold as in the proof of Proposition 4.5(i). So distinct notes have distinct nullifiers whatever their ρ, and a collision can affect only notes equal in every field. The proposition extends to Issue Notes part (a) of the Ironwood Guide’s Corollary “Faerie Gold resistance”, which covers only notes created by Actions. Status (Definition 1.3): proved here for the specified derivation; conditional on Assumption 6.8.

Proof.

(a) Within a transaction the key is one and the index pairs (iA,iN) differ. Across transactions of a valid chain the keys 𝖨𝟤𝖫𝖤𝖮𝖲𝖯256⁢(𝗇𝖿0,0) differ: 𝗇𝖿0,0 is a published nullifier, and the nullifier-set rule forbids a nullifier to repeat within a pool (Ironwood Guide, §“Nullifier sets”; the pool is that of Remark 1.7), and 𝖨𝟤𝖫𝖤𝖮𝖲𝖯256 is injective on 𝔽p𝖯𝖺𝗅𝗅𝖺𝗌. The oracle input is the 32-byte key followed by the remainder. Every key of 𝖯𝖱𝖥𝖾𝗑𝗉𝖺𝗇𝖽 is a 32-byte string (Ironwood Guide, Construction “Expansion function”), so the byte after the key is the lead byte, and 𝟶⁢𝚡⁢𝟾𝟺 differs from the lead byte of every other row.

(b) By (a) each issued ρ is ToBase of the oracle value at an input of its own. In the lazy form of the Crypto Guide’s Definition “Random oracle”, the first query at an input returns a fresh uniform 512-bit string, independent of all earlier values. The map ToBase takes each value of 𝔽p𝖯𝖺𝗅𝗅𝖺𝗌 on at most ⌈2512/p𝖯𝖺𝗅𝗅𝖺𝗌⌉ strings, so the fresh output equals a value fixed before the query with probability at most ⌈2512/p𝖯𝖺𝗅𝗅𝖺𝗌⌉/2512<1/p𝖯𝖺𝗅𝗅𝖺𝗌+2−512. Every issued ρ is the reduced output of one of the q queries. A union bound over the at most q⁢(q−1)/2 pairs of queries and the q⁢M pairs of a query and a fixed value (Math Guide, §“The union bound and a birthday calculation”, Theorem “Union bound / Boole’s inequality” and Proposition “Birthday bound”) gives the first bound. The second follows from 2⁢(q⁢(q−1)/2+q⁢M)≤(q+M)2 and 1+p𝖯𝖺𝗅𝗅𝖺𝗌⁢ 2−512<2. □

6.4 Reference notes

Definition 6.10 (Reference note).

The first Issue Note of the Issuance Action in which a Custom Asset is issued for the first time MUST be a reference note: an Issue Note with v=0, the Asset Base of that Asset, and recipient (d,𝗉𝗄𝖽) the default diversified address, of diversifier index 0, of the all-zero Orchard spending key 𝗌𝗄=[𝟶⁢𝚡⁢𝟶𝟶]32. The address is derived by the Ironwood Guide’s constructions of §“The spending key and the spend-side secrets”, §“Viewing keys” and Construction “Diversified address”. The all-zero key passes every acceptance condition of key generation: 𝖺𝗌𝗄≠0; 𝗂𝗏𝗄∉{0,⊥}; and the incoming viewing key of its internal key (ZIP 32, “Orchard internal key derivation”) is not in {0,⊥}, the condition of the protocol specification, §“Orchard Key Components”. At index 0 the diversified base 𝗀𝖽 is not the identity. The raw encoding of the address, 𝖫𝖤𝖡𝖲𝟤𝖮𝖲𝖯88⁢(d)∥𝖫𝖤𝖡𝖲𝟤𝖮𝖲𝖯256⁢(𝗉𝗄𝖽⋆) (protocol specification, §“Orchard Raw Payment Addresses”), is the 43-byte string, given in ZIP 227, “Reference Notes”, as

( 204,54,96,25,89,33,59,107,12,219,150,167,92,23,195,166,
104,169,127,13,106,140,92,225,100,165,24,234,155,169,165,
14,167,81,145,253,134,27,15,241,14,98,176).

Recomputing the address and every acceptance check from the cited constructions reproduces this array. Validators enforce the rule and store the reference note as 𝗇𝗈𝗍𝖾𝗋𝖾𝖿 in the global issuance state, by rule (I5) of Construction 7.3, in “State transition of a transaction” (§7.2) (ZIP 227, “Reference Notes” and “Specification: Consensus Rule Changes”). Class: specified; the reference note is mandated and stored in consensus state, and no section of ZIP 227 states its purpose.

Proposition 6.11 (Reference notes as universal Split Inputs).

Let n𝗋𝖾𝖿 be the reference note of a Custom Asset with Asset Base B, its extracted commitment a leaf of the note commitment tree.

  1. (a)

    Any party can construct a Split Action (Definition 4.2) whose Split Input copies n𝗋𝖾𝖿, with a witness of Definition 4.6 and a spend-authorisation signature that verifies under its 𝗋𝗄, for a created note of Asset Base B and value 0 to any receiver of its choice. Proposition 4.12 therefore imposes nothing on n𝗋𝖾𝖿, whose recipient key is public by construction.

  2. (b)

    Let an efficient adversary output OrchardZSA bundles of valid blocks whose Action proofs and binding signatures verify and whose witnessed and burn-pair Asset Bases meet the premise on the bases of §5.3. Except with negligible probability, in every such bundle in which no extracted witness of Asset Base B has 𝗌𝗉𝗅𝗂𝗍⁢_⁢𝖿𝗅𝖺𝗀=0, every created note of Asset Base B has value 0, and the burn set has no pair of Asset Base B.

Hence n𝗋𝖾𝖿 serves exactly the created notes of B that a party holding no note of B can produce. Under Remark 1.7, a copy to a receiver other than that of the copied note would violate the cross-address rule if the notes were in the Orchard pool. Status (Definition 1.3): proved here for the specified constructions; part (a) is conditional on the open lead byte (Remark 6.2); part (b) is conditional on Assumption 4.9 through Proposition 5.6, and its premise on the bases is discharged for valid chains in “Security” (§9). The reading of the purpose is the volume’s; ZIP 227 states none.

Proof.

(a) The construction is explicit. The all-zero spending key is accepted (Definition 6.10), so its 𝖺𝗌𝗄, 𝗇𝗄, 𝗋𝗂𝗏𝗄 and 𝖺𝗄ℙ are public constants. The note n𝗋𝖾𝖿 is published unencrypted with ρ and 𝗋𝗌𝖾𝖾𝖽 (Remark 6.6), so ψ is public and, once the lead byte is assigned (Remark 6.2), so are 𝗋𝖼𝗆 and the commitment. The position of its leaf in the tree is public, by Definition 7.4. The party takes a valid anchor 𝑟𝑡 whose tree contains the leaf and computes its authentication path, which satisfies A3′; it opens A1′ with the fields of n𝗋𝖾𝖿 and v𝗈𝗅𝖽=0; it sets 𝗌𝗉𝗅𝗂𝗍⁢_⁢𝖿𝗅𝖺𝗀=1, 𝗂𝗌⁢_⁢𝗇𝖺𝗍𝗂𝗏𝖾⁢_⁢𝖺𝗌𝗌𝖾𝗍=0 and 𝖾𝗇𝖺𝖻𝗅𝖾𝖹𝖲𝖠=1, which satisfy C1 to C3 since B≠V𝖮𝗋𝖼𝗁𝖺𝗋𝖽; it draws ψ𝗇𝖿 and computes the split nullifier of A5′ with the public 𝗇𝗄; it creates a note of base B, value 0 and any receiver, whose commitment satisfies A2′, and takes any 𝗋𝖼𝗏 for A4′, which reads v′=0 and v𝗇𝖾𝗐=0. Conditions A6 and A7 hold with the public (𝖺𝗄,𝗇𝗄,𝗋𝗂𝗏𝗄), from which the reference address is derived; A8 holds since v𝗈𝗅𝖽=0, and A9 since v𝗇𝖾𝗐=0. The party signs under 𝗋𝗌𝗄=𝖺𝗌𝗄+α for its randomiser α, as any owner does.

(b) By Proposition 5.6(a), except with negligible probability, the net values of the Actions of base B, read from the extracted witnesses, sum as integers to the burnt amount vB, which is 0 if B is not burnt. Every such Action has 𝗌𝗉𝗅𝗂𝗍⁢_⁢𝖿𝗅𝖺𝗀=1, so its value v′ is 0 by the notation of Definition 4.6, and the sum is −∑ivi𝗇𝖾𝗐≤0. A burn pair has vB>0 by rule (B2) of Definition 5.1, so vB≥0. Both sides therefore vanish: every vi𝗇𝖾𝗐 of base B is 0, and vB=0 excludes a pair of base B. □

6.5 Issuance authorisation

Definition 6.12 (Issuance authorisation rules).

For a transaction that contains an Issuance Bundle (𝗂𝗌𝗌𝗎𝖾𝗋,𝗏𝖨𝗌𝗌𝗎𝖾𝖠𝖼𝗍𝗂𝗈𝗇𝗌,𝗂𝗌𝗌𝗎𝖾𝖠𝗎𝗍𝗁𝖲𝗂𝗀):

  1. (I1)

    It MUST contain an OrchardZSA Action Group; by Definition 4.13 it contains exactly one.

  2. (I2)

    The encoding 𝗂𝗄⁢_⁢𝖾𝗇𝖼𝗈𝖽𝗂𝗇𝗀 of the issuance validating key 𝗂𝗄 MUST be taken from the field 𝗂𝗌𝗌𝗎𝖾𝗋 and MUST start with the byte 𝟶⁢𝚡⁢𝟶𝟶, which indicates a BIP-340 public key; 𝗂𝗄 is the remaining 32 bytes (Definition 2.4).

  3. (I3)

    The first byte of 𝗂𝗌𝗌𝗎𝖾𝖠𝗎𝗍𝗁𝖲𝗂𝗀 MUST be 𝟶⁢𝚡⁢𝟶𝟶, and

    𝖨𝗌𝗌𝗎𝖾𝖠𝗎𝗍𝗁𝖲𝗂𝗀.𝖵𝖺𝗅𝗂𝖽𝖺𝗍𝖾⁢(𝗂𝗄,𝖲𝗂𝗀𝖧𝖺𝗌𝗁,σ)=1

    MUST hold for the 64-byte σ that follows it (Definition 2.2). ZIP 227 writes the rule with 𝗂𝗌𝗌𝗎𝖾𝖠𝗎𝗍𝗁𝖲𝗂𝗀 in place of σ; the scheme byte is stripped because 𝖵𝖺𝗅𝗂𝖽𝖺𝗍𝖾 is typed over 32-byte keys and 64-byte signatures.

For every Issuance Action the Issue Notes are then constructed from the elements of its 𝗏𝖭𝗈𝗍𝖾𝗌, with 𝖠𝗌𝗌𝖾𝗍𝖡𝖺𝗌𝖾 derived from its 𝖺𝗌𝗌𝖾𝗍𝖣𝖾𝗌𝖼𝖧𝖺𝗌𝗁 and from 𝗂𝗌𝗌𝗎𝖾𝗋 (Remark 6.14). The rules on the issuance state, (T1) to (T4) and (I4) to (I7), are Construction 7.3. The message 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 is the transaction’s signature digest (Ironwood Guide, Definition “Signature digest”), which ZIP 227 defines by the protocol specification’s §“SIGHASH Transaction Hashing” “with the modifications described in ZIP 226”, under 𝖲𝖨𝖦𝖧𝖠𝖲𝖧⁢_⁢𝖠𝖫𝖫. The cited section of ZIP 226 does not exist; ZIP 226, “Sighash modifications relative to ZIP 244”, defers to ZIP 246, which is Withdrawn; and the version-6 digest of ZIP 229 has no issuance child (ZIP 227, “Specification: Consensus Rule Changes” and “Issuance Authorization Signing and Validation”). Class: rules (I1) to (I3) specified; the signed message designed but unspecified (Remark 8.3).

Assumption 6.13 (Coverage of the signature digest).

The signature digest 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 of an OrchardZSA transaction is computed without any signature of the transaction: neither 𝗂𝗌𝗌𝗎𝖾𝖠𝗎𝗍𝗁𝖲𝗂𝗀, nor a spend-authorisation signature, nor the binding signature is an input. No efficient algorithm outputs, except with negligible probability, two transactions with equal 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 that differ in

  1. (i)

    the effecting data of the Issuance Bundle: 𝗂𝗌𝗌𝗎𝖾𝗋, the number and order of the Issuance Actions, and, per Issuance Action, 𝖺𝗌𝗌𝖾𝗍𝖣𝖾𝗌𝖼𝖧𝖺𝗌𝗁, 𝖿𝗂𝗇𝖺𝗅𝗂𝗓𝖾 and every field (d,𝗉𝗄𝖽,v,ρ,𝗋𝗌𝖾𝖾𝖽) of every Issue Note;

  2. (ii)

    the burn set; or

  3. (iii)

    the published data of the Actions of the Action Group, in particular 𝗇𝖿0,0.

This hypothesis (H-SIG) concerns a designed but unspecified object. “Transaction digests and the signature message” (§8.2) shows that the digest of withdrawn ZIP 246 meets it under the Ironwood Guide’s Assumption “Collision resistance of BLAKE2b”, and states it as the obligation on any future digest (Remark 8.2). The version-6 digest of ZIP 229 does not meet (i).

Remark 6.14 (Recomputation of issued Asset Bases).

Of the identity chain of Construction 2.10, consensus sees exactly two links on the issuance side: 𝗂𝗌𝗌𝗎𝖾𝗋 in the Issuance Bundle and 𝖺𝗌𝗌𝖾𝗍𝖣𝖾𝗌𝖼𝖧𝖺𝗌𝗁 in each Issuance Action. The Asset Identifier, the Asset Digest and the Asset Base of issued notes are never transmitted. Every validator derives

𝖠𝗌𝗌𝖾𝗍𝖡𝖺𝗌𝖾:=𝖹𝖲𝖠𝖵𝖺𝗅𝗎𝖾𝖡𝖺𝗌𝖾( 𝖡𝖫𝖠𝖪𝖤𝟤𝖻-𝟧𝟣𝟤(ZSA-Asset-Digest,
𝖤𝗇𝖼𝗈𝖽𝖾𝖠𝗌𝗌𝖾𝗍𝖨𝖽(𝗂𝗌𝗌𝗎𝖾𝗋,𝖺𝗌𝗌𝖾𝗍𝖣𝖾𝗌𝖼𝖧𝖺𝗌𝗁)))

by that construction. The same bytes 𝗂𝗌𝗌𝗎𝖾𝗋 name the Asset and yield, by (I2), the key under which (I3) verifies the signature; under Assumption 6.13(i), both 𝗂𝗌𝗌𝗎𝖾𝗋 and 𝖺𝗌𝗌𝖾𝗍𝖣𝖾𝗌𝖼𝖧𝖺𝗌𝗁 are in the signed message. The consequence for authority over issuance is Theorem 9.8, in “Authority over issuance” (§9.4) (ZIP 227, “Specification: Consensus Rule Changes” and “Issuance Bundle”).

Remark 6.15 (Signing order of an issuance bundle).

Every ρ of an Issue Note is a function of 𝗇𝖿0,0 (Construction 6.7), fixed once the first Action of the Action Group is fixed. Under Assumption 6.13 the signed digest covers every ρ and every other effecting field of the transaction. The issuer can therefore sign only after the nullifier of the first Action and all effecting data are fixed. Its message is the 𝖲𝖨𝖦𝖧𝖠𝖲𝖧⁢_⁢𝖠𝖫𝖫 digest that every spend-authorisation signature and the binding signature sign (Ironwood Guide, Definition “Signature digest”; ZIP 227, “Computation of ρ”, “Issuance Protocol” and “Specification: Consensus Rule Changes”).

Proposition 6.16 (Replay protection of issuance).

Let 𝗂𝗄 be the issuance validating key of an honest issuer, which signs only digests 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 of transactions it builds. Except with negligible probability, in a valid chain produced by an efficient adversary that obtains the honest issuer’s signatures:

  1. (a)

    every Issuance Bundle whose 𝗂𝗌𝗌𝗎𝖾𝗋 is 𝗂𝗄⁢_⁢𝖾𝗇𝖼𝗈𝖽𝗂𝗇𝗀 of 𝗂𝗄 belongs to a transaction whose 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 the issuer signed;

  2. (b)

    no transaction of the chain that contains an Issuance Bundle has the 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 of another transaction of the chain.

Hence each digest that the issuer signs authorises the issuance of at most one transaction of the chain. Rule (I1) is what makes (b) hold: without an Action Group, the digest of a transaction that carries only an Issuance Bundle depends on no value that the chain forbids to repeat, and a duplicate of the bundle in a transaction with the same remaining digest inputs has the same 𝖲𝗂𝗀𝖧𝖺𝗌𝗁, so its signature verifies again (ZIP 227, “Rationale”). Status (Definition 1.3): proved here for the specified rules (I1) to (I3); conditional on Assumption 6.13, a hypothesis on the designed but unspecified signed message, and on Assumption 2.3. ZIP 227, “Rationale”, states the replay argument informally.

Proof.

(a) An accepted bundle satisfies (I2) and (I3), so its signature verifies on the transaction’s 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 under the key whose encoding is 𝗂𝗌𝗌𝗎𝖾𝗋, which is 𝗂𝗄 by the injectivity of 𝗂𝗄↦𝗂𝗌𝗌𝗎𝖾𝗋 (Definition 2.4). A verifying signature on a digest that the issuer never signed is an existential forgery against Assumption 2.3: the reduction answers the adversary’s requests for the issuer’s signatures with its signing oracle and outputs the digest and the signature of the chain.

(b) By (I1) a transaction with an Issuance Bundle has an Action Group, and so a nullifier 𝗇𝖿0,0. Another transaction of the chain with equal 𝖲𝗂𝗀𝖧𝖺𝗌𝗁 has, by Assumption 6.13(iii), the same published Action data, except with negligible probability, since the chain is the output of an efficient algorithm; in particular it publishes 𝗇𝖿0,0 as well. The nullifier-set rule forbids a nullifier to repeat across the transactions of a valid chain (Ironwood Guide, §“Nullifier sets”), so no such transaction exists. By (a) and (b) the map from the transactions of the chain that carry a bundle under 𝗂𝗄 to the digests that the issuer signed is injective, which is the final claim. □