|
2708 | 2708 | memory-hard \proofOfWork algorithm. |
2709 | 2709 |
|
2710 | 2710 | \vspace{1.5ex} |
2711 | | -\newcommand{\thisspecdefines}[1]{This specification defines the \Zcash consensus protocol at launch, and after each of the upgrades codenamed {#1}.} |
| 2711 | +\newcommand{\thisspecdefines}[1]{This specification defines the \Zcash consensus protocol at launch, and after each of the upgrades codenamed {#1}. } |
2712 | 2712 | \noindent \notblossom{\sapling{\thisspecdefines{\Overwinter and \Sapling}}}% |
2713 | 2713 | \notheartwood{\blossom{\thisspecdefines{\Overwinter, \Sapling, and \Blossom}}}% |
2714 | 2714 | \notcanopy{\heartwood{\thisspecdefines{\Overwinter, \Sapling, \Blossom, and \Heartwood}}}% |
2715 | 2715 | \notnufive{\canopy{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, and \Canopy}}}% |
2716 | 2716 | \notnusix{\nufive{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, and \NUFive}}}% |
2717 | 2717 | \notnusixone{\nusix{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, \NUFive, and \NUSix}}}% |
2718 | | -\nusixone{This specification defines the \Zcash consensus protocol at launch; after each of the upgrades |
2719 | | -codenamed \Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, \NUFive, and \NUSix; and proposed changes for \NUSixOne.} % |
| 2718 | +\nusixone{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, \NUFive, \NUSix, and \NUSixOne}}% |
2720 | 2719 | It is a work in progress. Protocol differences from \Zerocash and \Bitcoin are also explained. |
2721 | 2720 |
|
2722 | 2721 | \vspace{2ex} |
|
2790 | 2789 | \notbeforenusix{Changes specific to the \NUSix upgrade following \NUFive |
2791 | 2790 | are highlighted in \nusix{\nusixcolorname}.} |
2792 | 2791 |
|
2793 | | -\notbeforenusixone{Changes specific to the proposed \NUSixOne upgrade following \NUSix |
| 2792 | +\notbeforenusixone{Changes specific to the \NUSixOne upgrade following \NUSix |
2794 | 2793 | are highlighted in \nusixone{\nusixonecolorname}.} |
2795 | 2794 |
|
2796 | 2795 | All of these are also changes from \Zerocash. |
2797 | | -The name \Sprout is used for the \Zcash protocol prior to \Sapling |
2798 | | -(both before and after \Overwinter), and in particular its \shieldedProtocol. |
| 2796 | + |
| 2797 | +The name \Sprout is used for the \shieldedProtocol defined prior to the \Sapling upgrade. |
2799 | 2798 |
|
2800 | 2799 | \vspace{1ex} |
2801 | 2800 | \introlist |
|
2890 | 2889 |
|
2891 | 2890 | In each \shieldedTransfer, the \nullifiers of the input \notes are revealed (preventing |
2892 | 2891 | them from being spent again) and the commitments of the output \notes are revealed |
2893 | | -(allowing them to be spent in future). A \transaction also includes computationally sound |
2894 | | -\zkSNARK proofs and signatures, which prove that all of the following hold except |
2895 | | -with insignificant probability: |
| 2892 | +(allowing them to be spent in future). |
| 2893 | + |
| 2894 | +\introlist |
| 2895 | +A \transaction also includes computationally sound \zkSNARK proofs and signatures, |
| 2896 | +which prove that all of the following hold except with insignificant probability: |
2896 | 2897 |
|
2897 | 2898 | For each \shieldedInput, |
2898 | 2899 |
|
|
3212 | 3213 | \end{center}} |
3213 | 3214 |
|
3214 | 3215 | \sproutspecific{ |
3215 | | -\defining{The \receivingKey $\TransmitPrivate$, \incomingViewingKey |
| 3216 | +\defining{A \Sprout \receivingKey $\TransmitPrivate$, \incomingViewingKey |
3216 | 3217 | $\InViewingKey = (\AuthPublic, \TransmitPrivate)$, and \shieldedPaymentAddress |
3217 | 3218 | $\PaymentAddress = (\AuthPublic, \TransmitPublic)$ are derived from the |
3218 | 3219 | \spendingKey $\AuthPrivate$, as described in \crossref{sproutkeycomponents}.} |
3219 | 3220 | } %sproutspecific |
3220 | 3221 |
|
3221 | 3222 | \vspace{1ex} |
3222 | 3223 | \saplingonward{ |
3223 | | -\defining{An \expandedSpendingKey is composed of a \authSigningKey $\AuthSignPrivate$, |
| 3224 | +\defining{A \Sapling \expandedSpendingKey is composed of a \authSigningKey $\AuthSignPrivate$, |
3224 | 3225 | a \authNullifierKey $\AuthProvePrivate$, and an \outgoingViewingKey $\OutViewingKey$. |
3225 | 3226 | From these components we can derive a \authProvingKey $(\AuthSignPublic, \AuthProvePrivate)$, |
3226 | 3227 | a \fullViewingKey $(\AuthSignPublic, \NullifierKey, \OutViewingKey)$, |
|
3676 | 3677 | that potentially risks \Mainnet funds or displays \Mainnet \transaction information |
3677 | 3678 | to a user \MUST do so only for a \blockChain that includes the \activationBlock of |
3678 | 3679 | the most recent \settled \networkUpgrade, with the corresponding \activationBlock hash. |
3679 | | -Currently, there is social consensus that \NUSix has activated on the \Zcash \Mainnet |
| 3680 | +Currently, there is social consensus that \NUSixOne has activated on the \Zcash \Mainnet |
3680 | 3681 | and \Testnet with the \activationBlock hashes given in \crossref{networks}. |
3681 | 3682 |
|
3682 | 3683 | A \fullValidator \MAY impose a limit on the number of \blocks it will ``roll back'' when |
|
4025 | 4026 |
|
4026 | 4027 | \lsubsection{Mainnet and Testnet}{networks} |
4027 | 4028 |
|
4028 | | -The production \Zcash{} \defining{\network}, which supports the \ZEC token, is called \Mainnet. Governance of its |
4029 | | -protocol is by agreement between the Electric Coin Company and the Zcash Foundation \cite{ECCZF2019}. |
4030 | | -Subject to errors and omissions, each version of this document intends to describe some version |
4031 | | -(or planned version) of that agreed protocol. |
| 4029 | +The production \Zcash{} \defining{\network}, which supports the \ZEC token, is called \Mainnet. |
| 4030 | +Governance of its protocol is by social consensus on which \fullValidator implementations are |
| 4031 | +considered to be faithful implementations of the intended \Mainnet consensus rules (currently, |
| 4032 | +\zebra maintained by the Zcash Foundation, and \zcashd maintained by the Electric Coin Company), |
| 4033 | +and on how those implementations should be modified. Subject to errors and omissions, each version |
| 4034 | +of this document intends to describe some version (or planned version) of the \Zcash protocol. |
4032 | 4035 |
|
4033 | 4036 | \defining{All \blockHashes given in this section are in \rpcByteOrder (that is, byte-reversed |
4034 | 4037 | relative to the normal order for a $\SHAFull$ hash).} |
4035 | 4038 |
|
4036 | 4039 | \Mainnet \genesisBlock: $\mathtt{00040fe8ec8471911baa1db1266ea15dd06b4a8a5c453883c000b031973dce08}$ |
4037 | 4040 |
|
4038 | | -\Mainnet \NUSix \activationBlock: $\mathtt{000000000032935a403a29822df72549d9a201e08cfbd5b3c770bb0d66615247}$ |
| 4041 | +\Mainnet \NUSixOne \activationBlock: $\mathtt{0000000000b98a7d8f390793fa113bf6755935f0c14ea817af07d2c16f2c3ef4}$ |
4039 | 4042 |
|
4040 | 4043 | \introlist |
4041 | 4044 | There is also a public test \network called \Testnet. It supports a \TAZ token which is intended to |
|
4046 | 4049 |
|
4047 | 4050 | \Testnet \genesisBlock: $\mathtt{05a60a92d99d85997cce3b87616c089f6124d7342af37106edc76126334a2c38}$ |
4048 | 4051 |
|
4049 | | -\Testnet \NUSix \activationBlock: $\mathtt{0017d56ed80077f45eb88f11d50f4306ee1fbf95892c9a9cb7a9538e72ceabc1}$ |
| 4052 | +\Testnet \NUSixOne \activationBlock: $\mathtt{01b947c7556b23040dc6840e9d3e4c6d9478c67a87b9737a83be848729d6e0af}$ |
4050 | 4053 |
|
4051 | 4054 | We call the smallest units of currency (on either \network) \zatoshi.\footnote{\definingquotedterm{tazoshi} |
4052 | 4055 | may be used for the smallest units of currency on Testnet, but it is usually more convenient to use a |
|
15285 | 15288 | \intropart |
15286 | 15289 | \lsection{Change History}{changehistory} |
15287 | 15290 |
|
| 15291 | +\historyentry{2025.6.3}{2025-12-02} |
| 15292 | + |
| 15293 | +\begin{itemize} |
| 15294 | +\nusixone{ |
| 15295 | + \item Specify in \crossref{blockchain} that \NUSixOne is the most recent \settled \networkUpgrade |
| 15296 | + on \Testnet and \Mainnet. |
| 15297 | +} %nusixone |
| 15298 | + \item Update the description in \crossref{networks} of protocol governance. |
| 15299 | +\end{itemize} |
| 15300 | + |
15288 | 15301 |
|
15289 | 15302 | \historyentry{2025.6.2}{2025-11-11} |
15290 | 15303 |
|
|
16091 | 16104 | \item Add a caveat in \crossref{orchardkeycomponents} about reuse of $\CommitIvkRand$ |
16092 | 16105 | between $\PRFexpand{}$ and $\CommitIvk{}$. |
16093 | 16106 | \item Expand the set of ZIPs associated with \NUFive in \crossref{networkupgrades}, and |
16094 | | - reference \cite{Zcash-Orchard} and \cite{Zcash-halo2} there. |
| 16107 | + reference \cite{Zcash-halo2} and \cite{Zcash-Orchard} there. |
16095 | 16108 | \item Section \crossref{concreteorchardkdf} should be in \nufivecolorname. |
16096 | 16109 | \item Explicitly note that the end of the \cite{ZIP-212} grace period precedes \NUFive activation. |
16097 | 16110 | \item Change the condition for presence of $\anchorField{Sapling}$ in a version 5 \transaction |
|
16347 | 16360 | \item \textbf{Retrospective note:} |
16348 | 16361 | Changing $\KAPublicPrimeOrder{Sapling}$ to $\KA{Sapling}\mathsf{.PublicPrimeSubgroup}$ |
16349 | 16362 | was a mistake and has since been reverted in specification version \historyref{2025.6.0}. |
16350 | | - As discussed in notes added in \historyref{2023.4.0} at \crossref{decryptovk}, |
| 16363 | + As discussed in notes added in version \historyref{2023.4.0} at \crossref{decryptovk}, |
16351 | 16364 | \librustzcash changed in \cite{librustzcash-109} to enforce that $\DiversifiedTransmitPublic$ |
16352 | 16365 | is not $\ZeroJ$. \zcashd also used a different implementation for a consensus check on \shielded |
16353 | 16366 | coinbase outputs. The missing check on $\DiversifiedTransmitPublic$ for the latter was corrected |
|
0 commit comments