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.
An Issue Note represents the issuance of a value of one Custom Asset to one recipient. It is a tuple
of type
with the following components.
The pair is the recipient’s address, of the type of the Ironwood Guide’s Construction “Diversified address”: the diversifier and the diversified transmission key , a point other than the identity (ZIP 227 types it in , protocol specification, §“Orchard Key Components”).
The value counts units of the Asset. The lengths and are the constants and of the protocol specification, §“Constants”.
The point is the Asset Base of the Custom Asset issued (Construction 2.10).
The note seed is a -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 (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.
The OrchardZSA note of an Issue Note is , with and derived from as in Definition 3.5. With and ,
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.
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 .
The recipient needs the same to open the commitment when it spends the note, in condition A1′ of Definition 4.6.
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)”.)
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”).
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 of its choice, in particular to addresses of the key, each published in full as issuance publishes it, together with elements and of its choice, such that the elements are pairwise distinct and the OrchardZSA commitments of the notes are not . In the real game it receives the nullifier that a later spend of the note publishes by condition A5′ with ; in the ideal game it receives for independent uniform . 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 , so a spend’s nullifier does not link it to its issuance for any party without , the issuer included. The statement holds for every and every , in particular for the derived and for any value that a future lead byte gives ; 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.
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 , with a point other than and the pairwise distinct: the hops to change the key material only, the hop uses the distinctness of the for the lazily sampled random function, and the hop and the final statement use only as a point to which or 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 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, 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. □
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).
Let
the fields of an Issue Note without its Asset Base.
An Issuance Action is a triple , where the hash 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.
The pair is an Asset Identifier and determines by Construction 2.10. With it, each element of determines the Issue Note 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- 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”).
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”).
An Issue Note is created outside any Action, so the Ironwood Guide’s Construction “Chaining rule” (§“Nullifier chaining”) gives it no .
Define
by
with the Ironwood Guide’s Construction “Expansion function” and its Definition “Field reductions”. The expansion input after the key has bytes. The element of the Issue Note at zero-based position of the Issuance Action at zero-based position of the Issuance Bundle is
where 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”:
| Key | Remainder | Output | Section | ||
|---|---|---|---|---|---|
| §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.
For each fixed -byte personalisation , the function is a random oracle with -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.
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 .
Under Assumption 6.8, consider an execution in which at most 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 elements of notes created by Actions and fixed before the query that yields it, is at most
With no query beyond the issued values, .
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.
(a) Within a transaction the key is one and the index pairs differ. Across transactions of a valid chain the keys differ: 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 is injective on . The oracle input is the -byte key followed by the remainder. Every key of is a -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 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 -bit string, independent of all earlier values. The map takes each value of on at most strings, so the fresh output equals a value fixed before the query with probability at most . Every issued is the reduced output of one of the queries. A union bound over the at most pairs of queries and the 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 and . □
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 , the Asset Base of that Asset, and recipient the default diversified address, of diversifier index , of the all-zero Orchard spending key . 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: ; ; and the incoming viewing key of its internal key (ZIP 32, “Orchard internal key derivation”) is not in , the condition of the protocol specification, §“Orchard Key Components”. At index the diversified base is not the identity. The raw encoding of the address, (protocol specification, §“Orchard Raw Payment Addresses”), is the -byte string, given in ZIP 227, “Reference Notes”, as
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.
Let be the reference note of a Custom Asset with Asset Base , its extracted commitment a leaf of the note commitment tree.
Any party can construct a Split Action (Definition 4.2) whose Split Input copies , with a witness of Definition 4.6 and a spend-authorisation signature that verifies under its , for a created note of Asset Base and value to any receiver of its choice. Proposition 4.12 therefore imposes nothing on , whose recipient key is public by construction.
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 has , every created note of Asset Base has value , and the burn set has no pair of Asset Base .
Hence serves exactly the created notes of that a party holding no note of 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.
(a) The construction is explicit. The all-zero spending key is accepted (Definition 6.10), so its , , and are public constants. The note 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 and ; it sets , and , which satisfy C1 to C3 since ; it draws and computes the split nullifier of A5′ with the public ; it creates a note of base , value and any receiver, whose commitment satisfies A2′, and takes any for A4′, which reads and . Conditions A6 and A7 hold with the public , from which the reference address is derived; A8 holds since , and A9 since . 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 , read from the extracted witnesses, sum as integers to the burnt amount , which is if is not burnt. Every such Action has , so its value is by the notation of Definition 4.6, and the sum is . A burn pair has by rule (B2) of Definition 5.1, so . Both sides therefore vanish: every of base is , and excludes a pair of base . □
For a transaction that contains an Issuance Bundle :
It MUST contain an OrchardZSA Action Group; by Definition 4.13 it contains exactly one.
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 bytes (Definition 2.4).
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- 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).
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
the effecting data of the Issuance Bundle: , the number and order of the Issuance Actions, and, per Issuance Action, , and every field of every Issue Note;
the burn set; or
the published data of the Actions of the Action Group, in particular .
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- digest of ZIP 229 does not meet (i).
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
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”).
Every of an Issue Note is a function of (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”).
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:
every Issuance Bundle whose is of belongs to a transaction whose the issuer signed;
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.
(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 . 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 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. □