Network Upgrade 4 is now called Canopy.

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
This commit is contained in:
Daira Hopwood 2020-05-27 17:21:31 +01:00
parent 092e6092ef
commit 66ba1aad3e
3 changed files with 93 additions and 64 deletions

View File

@ -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

View File

@ -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}

View File

@ -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},