Zcash Protocol Specification
Version 2018.0-beta-21-130-gf6f47a [Overwinter+Sapling]
Daira Hopwood
Sean Bowe
Taylor Hornby
Nathan Wilcox
October 17, 2018
1
Abstract. Zcash is an implementation of the Decentralized Anonymous Payment scheme Zerocash,
with security fixes and improvements to performance and functionality. It bridges the existing trans-
parent payment scheme used by Bitcoin with a
shielded
payment scheme secured by zero-knowledge
succinct non-interactive arguments of knowledge (zk-SNARKs). It attempted to address the problem
of mining centralization by use of the Equihash memory-hard proof-of-work algorithm.
This specification defines the Zcash consensus protocol at launch; after the upgrade codenamed Over-
winter; and after the subsequent upgrade codenamed Sapling. It is a work in progress. Protocol dif-
ferences from Zerocash and Bitcoin are also explained.
Keywords: anonymity, applications, cryptographic protocols, electronic commerce and payment,
financial privacy, proof of work, zero knowledge.
Contents 1
1 Introduction 7
1.1 Caution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 High-level Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Zerocoin Electric Coin Company
1
Jubjub bird image credit: Peter Newell 1902; Daira Hopwood 2018.
1
2 Notation 9
3 Concepts 11
3.1 Payment Addresses and Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2.1 Note Plaintexts and Memo Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.3 The Block Chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.4 Transactions and Treestates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.5 JoinSplit Transfers and Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.6 Spend Transfers, Output Transfers, and their Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.7 Note Commitment Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.8 Nullifier Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.9 Block Subsidy and Founders’ Reward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.10 Coinbase Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4 Abstract Protocol 17
4.1 Abstract Cryptographic Schemes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1.1 Hash Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1.2 Pseudo Random Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.1.3 Authenticated One-Time Symmetric Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.4 Key Agreement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.5 Key Derivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.6 Signature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1.6.1 Signature with Re-Randomizable Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.1.6.2 Signature with Private Key to Public Key Homomorphism . . . . . . . . . . . . . . . 22
4.1.7 Commitment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.8 Represented Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.1.9 Hash Extractor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.1.10 Group Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.11 Represented Pairing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.12 Zero-Knowledge Proving System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2 Key Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.1 Sprout Key Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.2 Sapling Key Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 JoinSplit Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4 Spend Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.5 Output Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.6 Sending Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.6.1 Sending Notes (Sprout) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.6.2 Sending Notes (Sapling) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.7 Dummy Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.7.1 Dummy Notes (Sprout) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.7.2 Dummy Notes (Sapling) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.8 Merkle path validity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.9 SIGHASH Transaction Hashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2
4.10 Non-malleability (Sprout) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.11 Balance ( Sprout) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.12 Balance and Binding Signature (Sapling) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.13 Spend Authorization Signature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.14 Note Commitments and Nullifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.15 Zk-SNARK Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.15.1 JoinSplit Statement (Sprout) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.15.2 Spend Statement (Sapling) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.15.3 Output Statement (Sapling) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .