# ZIP 227: Issuance of Zcash Shielded Assets

Status: Draft

Owners: Pablo Kogan, Vivek Arte, Daira-Emma Hopwood, Jack Grigg

Snapshot: a34cfc091434275120ff017c92c3b50d3cef623a

Source date: 2026-10-16T02:56:04+01:00

[Source revision](https://github.com/zcash/zips/commit/a34cfc091434275120ff017c92c3b50d3cef623a)

[Official source](https://zips.z.cash/zip-0227) · [Source file](https://github.com/zcash/zips/blob/a34cfc091434275120ff017c92c3b50d3cef623a/zips/zip-0227.rst) · [Discussion](https://github.com/zcash/zips/issues/618)

## Document parts

[Part 1](https://zip-tools-web.harpocrates.workers.dev/zip/227) · [Part 2](https://zip-tools-web.harpocrates.workers.dev/zip/227?part=2)

Reading part 2 of 2. Follow all parts for the complete proposal.

- A hash output (32 bytes per Issue Action) incurs lower average bandwidth costs in issuance transactions than the asset description (previously up to 512 bytes).

- The asset description can be longer than 512 bytes without incurring chain costs.

- Including an asset description byte string directly in issuance transactions does not ensure that the "user-visible" asset description is consensus-visible, because the byte string could itself be a hash of another off-chain description (even if the consensus rules had required it to be a Unicode string instead of only recommending it).

- The lack of key rotation in this issuance protocol means that it is not sufficient to mark an $\mathsf{issuer}$ as trusted and then accept whatever asset descriptions are issued by it. Each Asset Identifier needs to be independently verified, which requires some out-of-band protocol that can also convey the corresponding asset description.

- If issuance transactions include the asset descriptions directly, wallets will discover them during scanning. This is an "attractive nuisance" because it would result in wallets being more likely to expose the asset description directly to users without any verification that the received asset has the value that a user might expect from that description. By instead using a collision-resistant hash of an asset description, wallets are forced to look up the corresponding asset description when a payment is received in an unknown asset. That lookup can be mediated by a trusted party or common trusted registry of known assets, or else will need to be approved directly by a user who can personally assert their interest in that specific asset.

<a id="rationale-for-global-issuance-state"></a>

### Rationale for Global Issuance State

It is necessary to ensure that the balance of any issued Custom Asset never becomes negative within a shielded pool, along the lines of ZIP 209<a id="fnref37"></a>
[37](#fn37). However, unlike for the shielded ZEC pools, there is no individual transaction field that directly corresponds to both the issued and burnt amounts for a given Asset. Therefore, we require that all nodes maintain a record of the current amount in circulation for every issued Custom Asset, and update this record based on the issuance and burn transactions processed. This allows for efficient detection of balance violations for any Asset, in which case we specify a consensus rule to reject the transaction or block.

We limit the total issuance of any Asset to a maximum of $\mathsf{MAX\_ISSUE}$. This is a practical limit that also allows an issuer to issue the complete supply of an Asset in a single transaction.

Nodes also need to reject transactions that issue Custom Assets that have been previously finalized. The $\mathsf{issued\_assets}$ map allows nodes to store whether or not a given Asset has been finalized.

<a id="concrete-applications"></a>

### Concrete Applications

**Asset Features**

- By using the $\mathsf{finalize}$ boolean and the burning mechanism defined in<a id="fnref38"></a>
  [38](#fn38), issuers can control the supply production of any Asset associated to their issuer keys. For example,
  
  
  
  
  > - by setting $\mathsf{finalize} = 1$ from the first issuance action for that Asset Identifier, the issuer is in essence creating a one-time issuance transaction. This is useful when the max supply is capped from the beginning and the distribution is known in advance. All tokens are issued at once and distributed as needed.

- Issuers can also stop the existing supply production of any Asset associated to their issuer keys. This could be done by
  
  
  
  
  > - issuing a last set of tokens of that specific $\mathsf{AssetId}$, for which $\mathsf{finalize} = 1$, or by
  > 
  > - issuing a transaction with a single note in the issuance action pertaining to that $\mathsf{AssetId}$, where the note will contain a $\mathsf{value} = 0$. This can be used for application-specific purposes (NFT collections) or for security purposes to revoke the Asset issuance (see Security and Privacy Considerations).

- The issuance and burn mechanisms can be used in conjunction to determine the supply of Assets on the Zcash ecosystem. This allows for the bridging of Assets defined on other chains.

- Furthermore, NFT issuance is enabled by issuing in a single bundle several issuance actions, where each $\mathsf{AssetId}$ corresponds to $\mathsf{value} = 1$ at the fundamental unit level. Issuers and users should make sure that $\mathsf{finalize} = 1$ for each of the actions in this scenario.

<a id="modifications-relative-to-zip-244"></a>

## Modifications relative to ZIP 244<a id="fnref39"></a>
[39](#fn39)

Relative to the sighash algorithm defined in ZIP 244, the sighash algorithm that applies to v6 transactions differs by including the issuance bundle components within the tree hash. See ZIP 246<a id="fnref40"></a>
[40](#fn40) for details.

<a id="changes-to-zip-317"></a>

## Changes to ZIP 317<a id="fnref41"></a>
[41](#fn41)

The conventional fee in ZEC is altered to take into account both the presence of issuance actions within a transaction, and the creation of new Custom Assets within the global chain state. See the Fee calculation section of ZIP 317 <a id="fnref42"></a>
[42](#fn42) for details.

<a id="rationale-for-paying-fees-in-zec"></a>

### Rationale for paying fees in ZEC

Click to show/hide

We choose to maintain the native ZEC Asset as the primary token for the Zcash blockchain, similar to how ETH is needed for ERC20 transactions to the benefit of the Ethereum ecosystem.

An alternative proposal for the OrchardZSA fee mechanism that was not adopted was to adopt a new type of fee, denominated in the custom Asset being issued or transferred. In the context of transparent transactions, such a fee allows miners to “tap into” the ZSA value of the transactions, rather than the ZEC value of transactions. However when transactions are shielded, any design that lifts value from the transaction would also leak information about it.

<a id="security-and-privacy-considerations"></a>

## Security and Privacy Considerations

<a id="displaying-asset-identifier-information-to-users"></a>

### Displaying Asset Identifier information to users

Wallets need to communicate the names of the Assets in a non-confusing way to users, since the byte representation of the Asset Identifier would be hard to read for an end user. Possible solutions are provided in the [Specification: Asset Identifier, Asset Digest, and Asset Base](/zip/227#specification-asset-identifier-asset-digest-and-asset-base) section.

<a id="issuance-key-compromise"></a>

### Issuance Key Compromise

The design of this protocol does not currently allow for rotation of the issuance validating key that would allow for replacing the key of a specific Asset. In case of compromise, the following actions are recommended:

- If an issuer identifier is compromised, the $\mathsf{finalize}$ boolean for all the Assets issued with that key should be set to $1$; then the issuer should change to a new issuance authorizing key (hence a new issuer identifier), and issue new Assets, each with a new $\mathsf{AssetId}$.

<a id="bridging-assets"></a>

### Bridging Assets

For bridging purposes, the secure method of off-boarding Assets is to burn an Asset with the burning mechanism in ZIP 226<a id="fnref43"></a>
[43](#fn43). Users should be aware of issuers that demand the Assets be sent to a specific address on the Zcash chain to be redeemed elsewhere, as this may not reflect the real reserve value of the specific Asset.

<a id="other-considerations"></a>

## Other Considerations

<a id="implementing-zcash-nodes"></a>

### Implementing Zcash Nodes

Although not enforced in the global state, it is RECOMMENDED that Zcash full validators keep track of the total supply of Assets as a mutable mapping $\mathsf{issuanceSupplyInfoMap}$ from $\mathsf{AssetId}$ to $(\mathsf{totalSupply}, \mathsf{finalize})$ in order to properly keep track of the total supply for different Asset Identifiers. This is useful for wallets and other applications that need to keep track of the total supply of Assets.

<a id="test-vectors"></a>

## Test Vectors

- LINK TBD

<a id="reference-implementation"></a>

## Reference Implementation

- LINK TBD

- LINK TBD

<a id="deployment"></a>

## Deployment

TBD

<a id="references"></a>

## References

---

1. [Information on BCP 14 — "RFC 2119: Key words for use in RFCs to Indicate Requirement Levels" and "RFC 8174: Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words"](https://www.rfc-editor.org/info/bcp14)[↩︎](/zip/227#fnref1)

2. [ZIP 200: Network Upgrade Mechanism](/zip/200)[↩︎](/zip/227#fnref2)

3. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1] or later.](protocol/protocol.pdf)[↩︎](/zip/227#fnref3)

4. [ZIP 224: Orchard](/zip/224)[↩︎](/zip/227#fnref4)

5. [ZIP 226: Transfer and Burn of Zcash Shielded Assets](/zip/226)[↩︎](/zip/227#fnref5)

6. [ZIP 226: Transfer and Burn of Zcash Shielded Assets](/zip/226)[↩︎](/zip/227#fnref6)

7. [ZIP 226: Transfer and Burn of Zcash Shielded Assets](/zip/226)[↩︎](/zip/227#fnref7)

8. [ZIP 226: Transfer and Burn of Zcash Shielded Assets](/zip/226)[↩︎](/zip/227#fnref8)

9. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1]. Section 4.1.7: Signature](protocol/protocol.pdf#abstractsig)[↩︎](/zip/227#fnref9)

10. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1]. Section 2: Notation](protocol/protocol.pdf#notation)[↩︎](/zip/227#fnref10)

11. [ZIP 32: Shielded Hierarchical Deterministic Wallets — Specification: Hardened-only key derivation](/zip/32#specification-hardened-only-key-derivation)[↩︎](/zip/227#fnref11)

12. [ZIP 32: Shielded Hierarchical Deterministic Wallets — Hardened-only child key derivation](/zip/32#hardened-only-child-key-derivation)[↩︎](/zip/227#fnref12)

13. [ZIP 32: Shielded Hierarchical Deterministic Wallets — Orchard key path](/zip/32#orchard-key-path)[↩︎](/zip/227#fnref13)

14. [BIP 43: Purpose Field for Deterministic Wallets](https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki)[↩︎](/zip/227#fnref14)

15. [ZIP 32: Shielded Hierarchical Deterministic Wallets — Key path levels](/zip/32#key-path-levels)[↩︎](/zip/227#fnref15)

16. [BIP 340: Schnorr Signatures for secp256k1](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki)[↩︎](/zip/227#fnref16)

17. [ZIP 32: Shielded Hierarchical Deterministic Wallets](/zip/32)[↩︎](/zip/227#fnref17)

18. [BIP 340: Schnorr Signatures for secp256k1](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki)[↩︎](/zip/227#fnref18)

19. [BIP 340: Schnorr Signatures for secp256k1](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki)[↩︎](/zip/227#fnref19)

20. [An Introduction to Petname Systems. Marc Stiegler, updated June 2010.]()[↩︎](/zip/227#fnref20)

21. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1]. Section 5.4.9.8: Group Hash into Pallas and Vesta](protocol/protocol.pdf#concretegrouphashpallasandvesta)[↩︎](/zip/227#fnref21)

22. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1]. Section 5.3: Constants](protocol/protocol.pdf#constants)[↩︎](/zip/227#fnref22)

23. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1]. Section 3.2: Notes](protocol/protocol.pdf#notes)[↩︎](/zip/227#fnref23)

24. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1]. Section 3.2: Notes](protocol/protocol.pdf#notes)[↩︎](/zip/227#fnref24)

25. [ZIP 230: Version 6 Transaction Format — Issue Note Description (IssueNoteDescription)](/zip/230#issue-note-description-issuenotedescription)[↩︎](/zip/227#fnref25)

26. [ZIP 230: Version 6 Transaction Format — Issuance Action Description (IssueAction)](/zip/230#issuance-action-description-issueaction)[↩︎](/zip/227#fnref26)

27. [ZIP 230: Version 6 Transaction Format — Transaction Format](/zip/230#transaction-format)[↩︎](/zip/227#fnref27)

28. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1]. Section 4.2.3: Orchard Key Components](protocol/protocol.pdf#orchardkeycomponents)[↩︎](/zip/227#fnref28)

29. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1]. Section 5.4.2: Pseudo Random Functions](protocol/protocol.pdf#concreteprfs)[↩︎](/zip/227#fnref29)

30. [ZIP 230: Version 6 Transaction Format — Transaction Format](/zip/230#transaction-format)[↩︎](/zip/227#fnref30)

31. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1]. Section 4.2.3: Orchard Key Components](protocol/protocol.pdf#orchardkeycomponents)[↩︎](/zip/227#fnref31)

32. [Zcash Protocol Specification, Version 2025.6.2 [NU6.1]. Section 4.10: SIGHASH Transaction Hashing](protocol/protocol.pdf#sighash)[↩︎](/zip/227#fnref32)

33. [ZIP 226: Transfer and Burn of Zcash Shielded Assets — TxId Digest](/zip/226#txid-digest)[↩︎](/zip/227#fnref33)

34. [ZIP 226: Transfer and Burn of Zcash Shielded Assets — Additional Consensus Rules for the assetBurn set](/zip/226#additional-consensus-rules-for-the-assetburn-set)[↩︎](/zip/227#fnref34)

35. [ZIP 230: Version 6 Transaction Format — Issue Note Description (IssueNoteDescription)](/zip/230#issue-note-description-issuenotedescription)[↩︎](/zip/227#fnref35)

36. [ZIP 226: Transfer and Burn of Zcash Shielded Assets — Note Structure and Commitment](/zip/226#note-structure-and-commitment)[↩︎](/zip/227#fnref36)

37. [ZIP 209: Prohibit Out-of-Range Shielded Chain Value Pool Balances](/zip/209)[↩︎](#fnref37)

38. [ZIP 226: Transfer and Burn of Zcash Shielded Assets](/zip/226)[↩︎](#fnref38)

39. [ZIP 244: Transaction Identifier Non-Malleability](/zip/244)[↩︎](#fnref39)

40. [ZIP 246: Digests for the Version 6 Transaction Format](/zip/246)[↩︎](#fnref40)

41. [ZIP 317: Proportional Transfer Fee Mechanism](/zip/317)[↩︎](#fnref41)

42. [ZIP 317: Proportional Transfer Fee Mechanism — Fee calculation](/zip/317#fee-calculation)[↩︎](#fnref42)

43. [ZIP 226: Transfer and Burn of Zcash Shielded Assets](/zip/226)[↩︎](#fnref43)

## Citation relationships

Cites: [ZIP 32](https://zip-tools-web.harpocrates.workers.dev/zip/32), [ZIP 200](https://zip-tools-web.harpocrates.workers.dev/zip/200), [ZIP 209](https://zip-tools-web.harpocrates.workers.dev/zip/209), [ZIP 224](https://zip-tools-web.harpocrates.workers.dev/zip/224), [ZIP 226](https://zip-tools-web.harpocrates.workers.dev/zip/226), [ZIP 230](https://zip-tools-web.harpocrates.workers.dev/zip/230), [ZIP 244](https://zip-tools-web.harpocrates.workers.dev/zip/244), [ZIP 246](https://zip-tools-web.harpocrates.workers.dev/zip/246), [ZIP 317](https://zip-tools-web.harpocrates.workers.dev/zip/317)

Cited by: [ZIP 226](https://zip-tools-web.harpocrates.workers.dev/zip/226), [ZIP 228](https://zip-tools-web.harpocrates.workers.dev/zip/228), [ZIP 230](https://zip-tools-web.harpocrates.workers.dev/zip/230), [ZIP 233](https://zip-tools-web.harpocrates.workers.dev/zip/233), [ZIP 248](https://zip-tools-web.harpocrates.workers.dev/zip/248), [ZIP 317](https://zip-tools-web.harpocrates.workers.dev/zip/317), [ZIP 321](https://zip-tools-web.harpocrates.workers.dev/zip/321), [ZIP 2005](https://zip-tools-web.harpocrates.workers.dev/zip/2005)