diff --git a/protocol/Makefile b/protocol/Makefile index 3f3cabeb..fc946cc9 100644 --- a/protocol/Makefile +++ b/protocol/Makefile @@ -18,10 +18,10 @@ NOCRUFT?=|awk '{gsub(/[({<][/][^ ]* ?/,"")}1' |sed '/name{index:.*} has been ref .PHONY: all-specs all all-specs: .Makefile.uptodate - $(MAKE) nufour.pdf heartwood.pdf blossom.pdf sapling.pdf sprout.pdf + $(MAKE) canopy.pdf heartwood.pdf blossom.pdf sapling.pdf sprout.pdf all: .Makefile.uptodate - $(MAKE) nufour heartwood blossom sapling sprout + $(MAKE) canopy heartwood blossom sapling sprout .Makefile.uptodate: Makefile $(MAKE) clean @@ -39,8 +39,8 @@ blossom.pdf: protocol.tex zcash.bib incremental_merkle.png key_components_saplin heartwood.pdf: protocol.tex zcash.bib incremental_merkle.png key_components_sapling.png $(MAKE) heartwood -nufour.pdf: protocol.tex zcash.bib incremental_merkle.png key_components_sapling.png - $(MAKE) nufour +canopy.pdf: protocol.tex zcash.bib incremental_merkle.png key_components_sapling.png + $(MAKE) canopy .PHONY: auxsprout auxsprout: @@ -91,17 +91,17 @@ heartwood: mv -f aux/heartwood.pdf . cp -f heartwood.pdf protocol.pdf -.PHONY: auxnufour -auxnufour: - printf '\\toggletrue{isnufour}\n\\renewcommand{\\docversion}{Version %s [\\NufourSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver +.PHONY: auxcanopy +auxcanopy: + printf '\\toggletrue{iscanopy}\n\\renewcommand{\\docversion}{Version %s [\\CanopySpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver mkdir -p aux - rm -f aux/nufour.* - $(LATEXMK) -jobname=nufour -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT) + rm -f aux/canopy.* + $(LATEXMK) -jobname=canopy -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT) -.PHONY: nufour -nufour: - $(MAKE) auxnufour - mv -f aux/nufour.pdf . +.PHONY: canopy +canopy: + $(MAKE) auxcanopy + mv -f aux/canopy.pdf . .PHONY: nolatexmk-sprout nolatexmk-sprout: @@ -152,18 +152,18 @@ nolatexmk-heartwood: sh mymakeindex.sh -o heartwood.ind heartwood.idx $(LATEX) -jobname=heartwood protocol.tex || { touch incremental_merkle.png; exit 1; } -.PHONY: nolatexmk-nufour -nolatexmk-nufour: - printf '\\toggletrue{isnufour}\n\\renewcommand{\\docversion}{Version %s [\\NufourSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver +.PHONY: nolatexmk-canopy +nolatexmk-canopy: + printf '\\toggletrue{iscanopy}\n\\renewcommand{\\docversion}{Version %s [\\CanopySpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver # If $(LATEX) fails, touch an input so that 'make' won't think it is up-to-date next time. - rm -f nufour.aux nufour.bbl nufour.blg nufour.brf nufour.bcf - $(LATEX) -jobname=nufour protocol.tex || { touch incremental_merkle.png; exit 1; } - biber nufour - $(LATEX) -jobname=nufour protocol.tex || { touch incremental_merkle.png; exit 1; } - $(LATEX) -jobname=nufour protocol.tex || { touch incremental_merkle.png; exit 1; } - sh mymakeindex.sh -o nufour.ind nufour.idx - $(LATEX) -jobname=nufour protocol.tex || { touch incremental_merkle.png; exit 1; } + rm -f canopy.aux canopy.bbl canopy.blg canopy.brf canopy.bcf + $(LATEX) -jobname=canopy protocol.tex || { touch incremental_merkle.png; exit 1; } + biber canopy + $(LATEX) -jobname=canopy protocol.tex || { touch incremental_merkle.png; exit 1; } + $(LATEX) -jobname=canopy protocol.tex || { touch incremental_merkle.png; exit 1; } + sh mymakeindex.sh -o canopy.ind canopy.idx + $(LATEX) -jobname=canopy protocol.tex || { touch incremental_merkle.png; exit 1; } .PHONY: clean clean: - rm -f aux/* html/* protocol.ver protocol.pdf + rm -f aux/* html/* protocol.ver protocol.pdf canopy.pdf heartwood.pdf blossom.pdf sapling.pdf sprout.pdf diff --git a/protocol/protocol.tex b/protocol/protocol.tex index 1f67b0b8..4d994c62 100644 --- a/protocol/protocol.tex +++ b/protocol/protocol.tex @@ -468,15 +468,15 @@ \newcommand{\SaplingSpec}{Overwinter+Sapling} \newcommand{\BlossomSpec}{Overwinter+Sapling+Blossom} \newcommand{\HeartwoodSpec}{Overwinter+Sapling+Blossom+Heartwood} -\newcommand{\NufourSpec}{Overwinter+Sapling+Blossom+Heartwood+NU4} +\newcommand{\CanopySpec}{Overwinter+Sapling+Blossom+Heartwood+Canopy} \newtoggle{issapling} \togglefalse{issapling} \newtoggle{isblossom} \togglefalse{isblossom} \newtoggle{isheartwood} \togglefalse{isheartwood} -\newtoggle{isnufour} -\togglefalse{isnufour} +\newtoggle{iscanopy} +\togglefalse{iscanopy} \InputIfFileExists{protocol.ver}{}{} \newcommand{\doctitle}{Zcash Protocol Specification} @@ -509,22 +509,22 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg \newcommand{\blossomcolorname}{\blossomcolor} \newcommand{\heartwoodcolor}{red!30!orange} \newcommand{\heartwoodcolorname}{orange} -\newcommand{\nufourcolor}{red!50!blue!85} -\newcommand{\nufourcolorname}{purple} +\newcommand{\canopycolor}{red!50!blue!85} +\newcommand{\canopycolorname}{purple} \newcommand{\labelcolor}{yellow!20} -\iftoggle{isnufour}{ - \providecommand{\baseurl}{https://zips.z.cash/protocol/nufour.pdf} +\iftoggle{iscanopy}{ + \providecommand{\baseurl}{https://zips.z.cash/protocol/canopy.pdf} \toggletrue{isheartwood} - \newcommand{\setnufour}{\color{\nufourcolor}} - \newcommand{\nufour}[1]{\texorpdfstring{{\setnufour{#1}}}{#1}} - \newcommand{\notnufour}[1]{} - \newcommand{\notbeforenufour}[1]{#1} + \newcommand{\setcanopy}{\color{\canopycolor}} + \newcommand{\canopy}[1]{\texorpdfstring{{\setcanopy{#1}}}{#1}} + \newcommand{\notcanopy}[1]{} + \newcommand{\notbeforecanopy}[1]{#1} } { - \newcommand{\setnufour}{} - \newcommand{\nufour}[1]{} - \newcommand{\notnufour}[1]{#1} - \newcommand{\notbeforenufour}[1]{} + \newcommand{\setcanopy}{} + \newcommand{\canopy}[1]{} + \newcommand{\notcanopy}[1]{#1} + \newcommand{\notbeforecanopy}[1]{} } \iftoggle{isheartwood}{ @@ -644,8 +644,8 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg \newcommand{\BlossomText}{\textbf{Blossom}} \newcommand{\Heartwood}{\termbf{Heartwood}} \newcommand{\HeartwoodText}{\textbf{Heartwood}} -\newcommand{\Nufour}{\termbf{NU4}} -\newcommand{\NufourText}{\textbf{NU4}} +\newcommand{\Canopy}{\termbf{Canopy}} +\newcommand{\CanopyText}{\textbf{Canopy}} \newcommand{\Bitcoin}{\termbf{Bitcoin}} \newcommand{\BitcoinText}{\textbf{Bitcoin}} \newcommand{\CryptoNote}{\termbf{CryptoNote}} @@ -2016,8 +2016,8 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg \newcommand{\consensusrule}[1]{\needspace{4ex}\vspace{2ex}\callout{}{Consensus rule:}{#1}} \newenvironment{consensusrules}{\introlist\callout{}{Consensus rules:}\begin{itemize}}{\end{itemize}} -\newcommand{\prenufouritem}[1]{\item \prenufour{#1}} -\newcommand{\nufouronwarditem}[1]{\nufour{\item {[\Nufour onward]}\, {#1}}} +\newcommand{\precanopyitem}[1]{\item \precanopy{#1}} +\newcommand{\canopyonwarditem}[1]{\canopy{\item {[\Canopy onward]}\, {#1}}} \newcommand{\preheartwooditem}[1]{\item \preheartwood{#1}} \newcommand{\heartwoodonwarditem}[1]{\heartwood{\item {[\Heartwood onward]}\, {#1}}} \newcommand{\preblossomitem}[1]{\item \preblossom{#1}} @@ -2030,8 +2030,8 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg \newcommand{\overwinteronwarditem}[1]{\overwinter{\item {[\Overwinter onward]}\, {#1}}} \newcommand{\sproutspecificitem}[1]{\item \sproutspecific{#1}} -\newcommand{\prenufour}[1]{\notbeforenufour{\nufour{[Pre-\Nufour\!]\,}} {#1}} -\newcommand{\nufouronward}[1]{\nufour{[\Nufour onward]\, {#1}}} +\newcommand{\precanopy}[1]{\notbeforecanopy{\canopy{[Pre-\Canopy\!]\,}} {#1}} +\newcommand{\canopyonward}[1]{\canopy{[\Canopy onward]\, {#1}}} \newcommand{\preheartwood}[1]{\notbeforeheartwood{\heartwood{[Pre-\Heartwood\!]\,}} {#1}} \newcommand{\heartwoodonward}[1]{\heartwood{[\Heartwood onward]\, {#1}}} \newcommand{\preblossom}[1]{\notbeforeblossom{\blossom{[Pre-\Blossom\!]\,}} {#1}} @@ -2052,7 +2052,7 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg \newcommand{\nnote}[1]{\needspace{4ex}\vspace{2ex}\callout{}{Non-normative note:}{#1}} \newenvironment{nnotes}{\introlist\callout{}{Non-normative notes:}\begin{itemize}}{\end{itemize}} -\newcommand{\prenufourpnote}[1]{\callout{\notbeforenufour{\nufour{[Pre-\Nufour\!]\,\,}}}{Note:}{#1}} +\newcommand{\precanopypnote}[1]{\callout{\notbeforecanopy{\canopy{[Pre-\Canopy\!]\,\,}}}{Note:}{#1}} \newcommand{\preheartwoodpnote}[1]{\callout{\notbeforeheartwood{\heartwood{[Pre-\Heartwood\!]\,\,}}}{Note:}{#1}} \newcommand{\presaplingpnote}[1]{\callout{\notsprout{\sapling{[Pre-\Sapling\!]\,\,}}}{Note:}{#1}} \newcommand{\preoverwinterpnote}[1]{\callout{\notsprout{\overwinter{[Pre-\Overwinter\!]\,\,}}}{Note:}{#1}} @@ -2109,13 +2109,13 @@ Protocol differences from \Zerocash and \Bitcoin are also explained.}} at launch, and after each of the upgrades codenamed \Overwinter, \Sapling, and \Blossom. It is a work in progress. Protocol differences from \Zerocash and \Bitcoin are also explained.}} -\notnufour{\heartwood{\noindent This specification defines the \Zcash consensus protocol +\notcanopy{\heartwood{\noindent This specification defines the \Zcash consensus protocol at launch, and after each of the upgrades codenamed \Overwinter, \Sapling, \Blossom, and \Heartwood. It is a work in progress. Protocol differences from \Zerocash and \Bitcoin are also explained.}} -\nufour{\noindent This specification defines the \Zcash consensus protocol +\canopy{\noindent This specification defines the \Zcash consensus protocol at launch, and after each of the upgrades codenamed \Overwinter, \Sapling, \Blossom, -\Heartwood, and \Nufour. It is a work in progress. Protocol differences from \Zerocash and +\Heartwood, and \Canopy. It is a work in progress. Protocol differences from \Zerocash and \Bitcoin are also explained.} \sprout{\vspace{1ex}}\notsprout{\vspace{2.5ex}} @@ -2170,8 +2170,8 @@ are highlighted in \blossom{\blossomcolorname}.} \notbeforeheartwood{Changes specific to the \Heartwood upgrade following \Blossom are highlighted in \heartwood{\heartwoodcolorname}.} -\notbeforenufour{Changes specific to the \Nufour upgrade following \Heartwood -are highlighted in \nufour{\nufourcolorname}.} +\notbeforecanopy{Changes specific to the \Canopy upgrade following \Heartwood +are highlighted in \canopy{\canopycolorname}.} All of these are also changes from \Zerocash. The name \Sprout is used for the \Zcash protocol prior to \Sapling @@ -2200,7 +2200,7 @@ This specification is structured as follows: \item Concrete Protocol — how the functions and encodings of the abstract protocol are instantiated; \notsprout{ - \item Network Upgrades — the strategy for upgrading to \Overwinter and then \Sapling; + \item Network Upgrades — the strategy for upgrading the \Zcash protocol. } \item Consensus Changes from \Bitcoin — how \Zcash differs from \Bitcoin at the consensus layer, including the Proof of Work; @@ -8629,8 +8629,9 @@ at block height $419200$ \cite{Hamdon2018}. A third upgrade, called \Blossom, activated on the production network on 11 December 2019 at block height $653600$ \cite{Zcash-Blossom}. -This section summarizes the strategy for upgrading from \Sprout to \Overwinter then \Sapling -then \Blossom then \Heartwood\notbeforenufour{ then \Nufour}, and for future upgrades. +This section summarizes the strategy for upgrading from \Sprout to subsequent versions +of the protocol (\Overwinter, \Sapling, \Blossom, \Heartwood, and \Canopy), and for +future upgrades. \defining{The \networkUpgrade mechanism is described in \cite{ZIP-200}.} @@ -8646,8 +8647,8 @@ then \Blossom then \Heartwood\notbeforenufour{ then \Nufour}, and for future upg \heartwood{The specifications of the \Heartwood upgrade are described in this document, \cite{ZIP-250}, \cite{ZIP-213}, and \cite{ZIP-221}.} -\nufour{The specifications of the \Nufour upgrade are described in this document, -\cite{ZIP-251}, \cite{ZIP-207}, and \cite{ZIP-214}.} +\canopy{The specifications of the \Canopy upgrade are described in this document, +\cite{ZIP-251}, \cite{ZIP-207}, \cite{ZIP-211}, \cite{ZIP-212}, \cite{ZIP-214}, and \cite{ZIP-215}.} \vspace{1ex} \introlist @@ -8687,9 +8688,6 @@ validated according to the pre-upgrade rules, and upgrade-supporting nodes \MUST allow for this. %\todo{how upgrade-dependent rules are described in this specification.} - -%For the \Sapling upgrade, a new \nullifierSet and \noteCommitmentTree -%are created for use by \Sapling \transactions. } %notsprout @@ -8834,7 +8832,7 @@ $\versionField \geq 4$ and $\nShieldedSpend + \nShieldedOutput > 0$. } \item A \transaction{} \MUSTNOT spend a \transparent output of a \coinbaseTransaction from a \block less than 100 \blocks prior to the spend. Note that \transparent outputs of - \coinbaseTransactions include \foundersReward outputs \nufour{and \transparent \fundingStream outputs}. + \coinbaseTransactions include \foundersReward outputs \canopy{and \transparent \fundingStream outputs}. \overwinteronwarditem{\nExpiryHeight{} \MUST be less than or equal to 499999999.} \overwinteronwarditem{If a \transaction is not a \coinbaseTransaction and its \nExpiryHeight{} field is nonzero, then it \MUSTNOT be mined at a \blockHeight greater than its \nExpiryHeight.} @@ -10391,10 +10389,14 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}. \intropart \lsection{Change History}{changehistory} -\historyentry{2020.1.4}{} +\historyentry{2020.1.4}{2020-05-27} \begin{itemize} \item Reference \cite{BIP-32} and \cite{ZIP-32} when describing keys and their encodings. + \item Network Upgrade 4 has been given the name \Canopy. +\canopy{ + \item Reference \cite{ZIP-211}, \cite{ZIP-212}, and \cite{ZIP-215} for the \Canopy upgrade. +} \item Improve LaTeX portability of this specification. \end{itemize} @@ -10407,8 +10409,8 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}. \heartwood{ \item Minor wording clarifications. } -\nufour{ - \item Reference \cite{ZIP-251}, \cite{ZIP-207}, and \cite{ZIP-214} for the \Nufour upgrade. +\canopy{ + \item Reference \cite{ZIP-251}, \cite{ZIP-207}, and \cite{ZIP-214} for the \Canopy upgrade. } \end{itemize} @@ -10424,7 +10426,7 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}. } \item Remove ``pvc'' \Makefile targets. \item Make the \Heartwood specification the default. - \item Add macros and \Makefile support for building the \Nufour specification. + \item Add macros and \Makefile support for building the \Canopy specification. \end{itemize} diff --git a/protocol/zcash.bib b/protocol/zcash.bib index 4538337b..f7f77f41 100644 --- a/protocol/zcash.bib +++ b/protocol/zcash.bib @@ -918,6 +918,24 @@ Last revised February~5, 2018.} urldate={2019-08-28} } +@misc{ZIP-211, + presort={ZIP-0211}, + author={Daira Hopwood}, + title={Disabling Addition of New Value to the Sprout Value Pool}, + howpublished={Draft Zcash Improvement Proposal 211. Created March~29, 2019.}, + url={https://github.com/zcash/zips/pull/214}, + urldate={2020-05-27} +} + +@misc{ZIP-212, + presort={ZIP-0212}, + author={Sean Bowe}, + title={Allow recipient to derive Sapling ephemeral secret from note plaintext}, + howpublished={Draft Zcash Improvement Proposal 212. Created March~31, 2019.}, + url={https://github.com/zcash/zips/pull/222}, + urldate={2020-05-27} +} + @misc{ZIP-213, presort={ZIP-0213}, author={Jack Grigg}, @@ -936,6 +954,15 @@ Last revised February~5, 2018.} urldate={2020-03-24} } +@misc{ZIP-215, + presort={ZIP-0215}, + author={Henry de Valance}, + title={Modifying Ed25519 validation rules to allow batch verification}, + howpublished={Draft Zcash Improvement Proposal 215. Created April~27, 2020.}, + url={https://github.com/zcash/zips/pull/355}, + urldate={2020-05-27} +} + @misc{ZIP-221, presort={ZIP-0221}, author={Jack Grigg},