Boilerplate for NU6 (orginally based on Kris' branch 'protocol_nu6_boilerplate').

Author: Kris Nuttycombe <kris@nutty.land>
Co-authored-by: Daira-Emma Hopwood <daira@jacaranda.org>
This commit is contained in:
Daira-Emma Hopwood 2024-08-28 15:03:43 +01:00
commit a20fcbeff0
3 changed files with 90 additions and 114 deletions

View File

@ -1,6 +1,6 @@
# Dependencies: see zip-guide.rst and protocol/README.rst
.PHONY: all all-zips tag-release protocol discard
.PHONY: all-zips all tag-release protocol all-protocol discard
all-zips: .Makefile.uptodate
echo "$(patsubst zips/%,%,$(sort $(wildcard zips/zip-*.rst) $(wildcard zips/zip-*.md)))" >.zipfilelist.new
diff .zipfilelist.current .zipfilelist.new || cp -f .zipfilelist.new .zipfilelist.current
@ -11,13 +11,16 @@ all-zips: .Makefile.uptodate
$(MAKE) README.rst
$(MAKE) rendered/index.html $(addprefix rendered/,$(addsuffix .html,$(basename $(patsubst zips/%,%,$(sort $(wildcard zips/*.rst) $(wildcard zips/*.md))))))
all: all-zips protocol
all: all-zips all-protocol
tag-release:
$(MAKE) -C protocol tag-release
protocol:
$(MAKE) -C protocol
$(MAKE) -C protocol protocol
all-protocol:
$(MAKE) -C protocol all
discard:
git checkout -- 'rendered/*.html' 'README.rst' 'rendered/protocol/*.pdf'
@ -50,11 +53,13 @@ rendered/%.html: zips/%.md edithtml.sh
README.rst: .zipfilelist.current .draftfilelist.current makeindex.sh README.template $(wildcard zips/zip-*.rst) $(wildcard zips/zip-*.md) $(wildcard zips/draft-*.rst) $(wildcard zips/draft-*.md)
./makeindex.sh | cat README.template - >README.rst
.PHONY: linkcheck
linkcheck: all-zips
$(MAKE) -C protocol all-specs
./links_and_dests.py --check $(filter-out $(wildcard rendered/draft-*.html),$(wildcard rendered/*.html)) rendered/protocol/protocol.pdf rendered/protocol/canopy.pdf rendered/protocol/heartwood.pdf rendered/protocol/blossom.pdf rendered/protocol/sapling.pdf
.PHONY: linkcheck clean all-clean
linkcheck: all
./links_and_dests.py --check $(filter-out $(wildcard rendered/draft-*.html),$(wildcard rendered/*.html)) $(filter-out rendered/protocol/sprout.pdf,$(wildcard rendered/protocol/*.pdf))
.PHONY: clean
clean:
rm -f .zipfilelist.* README.rst rendered/index.html $(addprefix rendered/,$(addsuffix .html,$(basename $(patsubst zips/%,%,$(sort $(wildcard zips/*.rst) $(wildcard zips/*.md))))))
all-clean:
$(MAKE) clean
$(MAKE) -C protocol clean

View File

@ -20,12 +20,16 @@ PDFDIR=../rendered/protocol
# Use EXTRAOPT=-pvc for "continuous preview" mode. For example, "make auxblossom EXTRAOPT=-pvc".
# In this case the updated .pdf will be in the aux/ directory.
.PHONY: all all-specs release discard
.PHONY: all protocol all-specs tag-release discard
all: .Makefile.uptodate
$(MAKE) nu5 canopy heartwood blossom sapling
$(MAKE) $(PDFDIR)/nu6.pdf $(PDFDIR)/nu5.pdf $(PDFDIR)/canopy.pdf $(PDFDIR)/heartwood.pdf $(PDFDIR)/blossom.pdf $(PDFDIR)/sapling.pdf
$(MAKE) protocol
protocol: $(PDFDIR)/nu5.pdf
cp -f $(PDFDIR)/nu5.pdf $(PDFDIR)/protocol.pdf
all-specs: .Makefile.uptodate
$(MAKE) $(PDFDIR)/nu5.pdf $(PDFDIR)/canopy.pdf $(PDFDIR)/heartwood.pdf $(PDFDIR)/blossom.pdf $(PDFDIR)/sapling.pdf
$(MAKE) nu6 nu5 canopy heartwood blossom sapling
tag-release:
ifeq ($(shell git tag --points-at HEAD |wc -l),0)
@ -47,22 +51,25 @@ discard:
$(MAKE) clean
touch .Makefile.uptodate
$(PDFDIR)/sapling.pdf: protocol.tex zcash.bib incremental_merkle.png key_components_sapling.png
$(PDFDIR)/sapling.pdf: protocol.tex zcash.bib jubjub.png key_components_sapling.png key_components_orchard.png incremental_merkle.png
$(MAKE) sapling
$(PDFDIR)/blossom.pdf: protocol.tex zcash.bib incremental_merkle.png key_components_sapling.png
$(PDFDIR)/blossom.pdf: protocol.tex zcash.bib jubjub.png key_components_sapling.png key_components_orchard.png incremental_merkle.png
$(MAKE) blossom
$(PDFDIR)/heartwood.pdf: protocol.tex zcash.bib incremental_merkle.png key_components_sapling.png
$(PDFDIR)/heartwood.pdf: protocol.tex zcash.bib jubjub.png key_components_sapling.png key_components_orchard.png incremental_merkle.png
$(MAKE) heartwood
$(PDFDIR)/canopy.pdf: protocol.tex zcash.bib incremental_merkle.png key_components_sapling.png
$(PDFDIR)/canopy.pdf: protocol.tex zcash.bib jubjub.png key_components_sapling.png key_components_orchard.png incremental_merkle.png
$(MAKE) canopy
$(PDFDIR)/nu5.pdf: protocol.tex zcash.bib incremental_merkle.png key_components_sapling.png
$(PDFDIR)/nu5.pdf: protocol.tex zcash.bib jubjub.png key_components_sapling.png key_components_orchard.png incremental_merkle.png
$(MAKE) nu5
.PHONY: auxsapling
$(PDFDIR)/nu6.pdf: protocol.tex zcash.bib jubjub.png key_components_sapling.png key_components_orchard.png incremental_merkle.png
$(MAKE) nu6
.PHONY: auxsapling sapling
auxsapling:
printf '\\toggletrue{issapling}\n\\renewcommand{\\docversion}{Version %s [\\SaplingSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux
@ -70,12 +77,11 @@ auxsapling:
cp mymakeindex.sh aux
$(LATEXMK) -jobname=sapling -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: sapling
sapling:
$(MAKE) auxsapling
mv -f aux/sapling.pdf $(PDFDIR)
.PHONY: auxblossom
.PHONY: auxblossom blossom
auxblossom:
printf '\\toggletrue{isblossom}\n\\renewcommand{\\docversion}{Version %s [\\BlossomSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux
@ -83,12 +89,11 @@ auxblossom:
cp mymakeindex.sh aux
$(LATEXMK) -jobname=blossom -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: blossom
blossom:
$(MAKE) auxblossom
mv -f aux/blossom.pdf $(PDFDIR)
.PHONY: auxheartwood
.PHONY: auxheartwood heartwood
auxheartwood:
printf '\\toggletrue{isheartwood}\n\\renewcommand{\\docversion}{Version %s [\\HeartwoodSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux
@ -96,12 +101,11 @@ auxheartwood:
cp mymakeindex.sh aux
$(LATEXMK) -jobname=heartwood -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: heartwood
heartwood:
$(MAKE) auxheartwood
mv -f aux/heartwood.pdf $(PDFDIR)
.PHONY: auxcanopy
.PHONY: auxcanopy canopy
auxcanopy:
printf '\\toggletrue{iscanopy}\n\\renewcommand{\\docversion}{Version %s [\\CanopySpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux
@ -109,12 +113,11 @@ auxcanopy:
cp mymakeindex.sh aux
$(LATEXMK) -jobname=canopy -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: canopy
canopy:
$(MAKE) auxcanopy
mv -f aux/canopy.pdf $(PDFDIR)
.PHONY: auxnu5
.PHONY: auxnu5 nu5
auxnu5:
printf '\\toggletrue{isnufive}\n\\renewcommand{\\docversion}{Version %s [\\NUFiveSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux
@ -122,73 +125,22 @@ auxnu5:
cp mymakeindex.sh aux
$(LATEXMK) -jobname=nu5 -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: nu5
nu5:
$(MAKE) auxnu5
mv -f aux/nu5.pdf $(PDFDIR)
cp -f $(PDFDIR)/nu5.pdf $(PDFDIR)/protocol.pdf
.PHONY: nolatexmk-sapling
nolatexmk-sapling:
printf '\\toggletrue{issapling}\n\\renewcommand{\\docversion}{Version %s [\\SaplingSpec]}' "$$(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 sapling.aux sapling.bbl sapling.blg sapling.brf sapling.bcf
$(LATEX) -jobname=sapling protocol.tex || { touch incremental_merkle.png; exit 1; }
biber sapling
$(LATEX) -jobname=sapling protocol.tex || { touch incremental_merkle.png; exit 1; }
$(LATEX) -jobname=sapling protocol.tex || { touch incremental_merkle.png; exit 1; }
sh mymakeindex.sh -o sapling.ind sapling.idx
$(LATEX) -jobname=sapling protocol.tex || { touch incremental_merkle.png; exit 1; }
.PHONY: auxnu6 nu6
auxnu6:
printf '\\toggletrue{isnusix}\n\\renewcommand{\\docversion}{Version %s [\\NUSixSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux
rm -f aux/nu6.*
cp mymakeindex.sh aux
$(LATEXMK) -jobname=nu6 -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: nolatexmk-blossom
nolatexmk-blossom:
printf '\\toggletrue{isblossom}\n\\renewcommand{\\docversion}{Version %s [\\BlossomSpec]}' "$$(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 blossom.aux blossom.bbl blossom.blg blossom.brf blossom.bcf
$(LATEX) -jobname=blossom protocol.tex || { touch incremental_merkle.png; exit 1; }
biber blossom
$(LATEX) -jobname=blossom protocol.tex || { touch incremental_merkle.png; exit 1; }
$(LATEX) -jobname=blossom protocol.tex || { touch incremental_merkle.png; exit 1; }
sh mymakeindex.sh -o blossom.ind blossom.idx
$(LATEX) -jobname=blossom protocol.tex || { touch incremental_merkle.png; exit 1; }
cp -f blossom.pdf protocol.pdf
.PHONY: nolatexmk-heartwood
nolatexmk-heartwood:
printf '\\toggletrue{isheartwood}\n\\renewcommand{\\docversion}{Version %s [\\HeartwoodSpec]}' "$$(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 heartwood.aux heartwood.bbl heartwood.blg heartwood.brf heartwood.bcf
$(LATEX) -jobname=heartwood protocol.tex || { touch incremental_merkle.png; exit 1; }
biber heartwood
$(LATEX) -jobname=heartwood protocol.tex || { touch incremental_merkle.png; exit 1; }
$(LATEX) -jobname=heartwood protocol.tex || { touch incremental_merkle.png; exit 1; }
sh mymakeindex.sh -o heartwood.ind heartwood.idx
$(LATEX) -jobname=heartwood protocol.tex || { touch incremental_merkle.png; exit 1; }
.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 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: nolatexmk-nu5
nolatexmk-nu5:
printf '\\toggletrue{isnufive}\n\\renewcommand{\\docversion}{Version %s [\\NUFiveSpec]}' "$$(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 nu5.aux nu5.bbl nu5.blg nu5.brf nu5.bcf
$(LATEX) -jobname=nu5 protocol.tex || { touch incremental_merkle.png; exit 1; }
biber nu5
$(LATEX) -jobname=nu5 protocol.tex || { touch incremental_merkle.png; exit 1; }
$(LATEX) -jobname=nu5 protocol.tex || { touch incremental_merkle.png; exit 1; }
sh mymakeindex.sh -o nu5.ind nu5.idx
$(LATEX) -jobname=nu5 protocol.tex || { touch incremental_merkle.png; exit 1; }
nu6:
$(MAKE) auxnu6
mv -f aux/nu6.pdf $(PDFDIR)
.PHONY: clean
clean:
rm -f aux/* html/* protocol.ver $(PDFDIR)/protocol.pdf $(PDFDIR)/nu5.pdf $(PDFDIR)/canopy.pdf $(PDFDIR)/heartwood.pdf $(PDFDIR)/blossom.pdf $(PDFDIR)/sapling.pdf
rm -f aux/* protocol.ver $(PDFDIR)/protocol.pdf $(PDFDIR)/nu6.pdf $(PDFDIR)/nu5.pdf $(PDFDIR)/canopy.pdf $(PDFDIR)/heartwood.pdf $(PDFDIR)/blossom.pdf $(PDFDIR)/sapling.pdf

View File

@ -552,6 +552,7 @@
\newcommand{\HeartwoodSpec}{Overwinter+Sapling+Blossom+Heartwood}
\newcommand{\CanopySpec}{Overwinter+Sapling+Blossom+Heartwood+Canopy}
\newcommand{\NUFiveSpec}{NU5}
\newcommand{\NUSixSpec}{NU6}
\newtoggle{issapling}
\togglefalse{issapling}
\newtoggle{isblossom}
@ -562,6 +563,8 @@
\togglefalse{iscanopy}
\newtoggle{isnufive}
\togglefalse{isnufive}
\newtoggle{isnusix}
\togglefalse{isnusix}
\InputIfFileExists{protocol.ver}{}{}
\newcommand{\doctitle}{Zcash Protocol Specification}
@ -594,10 +597,26 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg
\newcommand{\canopycolorname}{purple}
\newcommand{\nufivecolor}{black!25!blue!65!green!65}
\newcommand{\nufivecolorname}{slate blue}
\newcommand{\nusixcolor}{magenta!75}
\newcommand{\nusixcolorname}{pink}
\newcommand{\labelcolor}{yellow!20}
\iftoggle{isnufive}{
\iftoggle{isnusix}{
\providecommand{\baseurl}{https://zips.z.cash/protocol/protocol.pdf}
\toggletrue{isnufive}
\newcommand{\setnusix}{\color{\nusixcolor}}
\newcommand{\nusix}[1]{\texorpdfstring{{\setnusix{#1}}}{#1}}
\newcommand{\notnusix}[1]{}
\newcommand{\notbeforenusix}[1]{#1}
} {
\newcommand{\setnusix}{}
\newcommand{\nusix}[1]{}
\newcommand{\notnusix}[1]{#1}
\newcommand{\notbeforenusix}[1]{}
}
\iftoggle{isnufive}{
\providecommand{\baseurl}{https://zips.z.cash/protocol/nu5.pdf}
\toggletrue{iscanopy}
\newcommand{\setnufive}{\color{\nufivecolor}}
\newcommand{\nufive}[1]{\texorpdfstring{{\setnufive{#1}}}{#1}}
@ -725,17 +744,13 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg
\newcommand{\Sprout}{\termbf{Sprout}}
\newcommand{\SproutText}{\textbf{Sprout}}
\newcommand{\Overwinter}{\termbf{Overwinter}}
\newcommand{\OverwinterText}{\textbf{Overwinter}}
\newcommand{\Sapling}{\termbf{Sapling}}
\newcommand{\SaplingText}{\textbf{Sapling}}
\newcommand{\Blossom}{\termbf{Blossom}}
\newcommand{\BlossomText}{\textbf{Blossom}}
\newcommand{\Heartwood}{\termbf{Heartwood}}
\newcommand{\HeartwoodText}{\textbf{Heartwood}}
\newcommand{\Canopy}{\termbf{Canopy}}
\newcommand{\CanopyText}{\textbf{Canopy}}
\newcommand{\NUFive}{\readasunicode{004e200b0055200b0035}{\termbf{NU5}}\xspace}
%\newcommand{\NUFiveText}{\textbf{NU5}}
\newcommand{\NUSix}{\readasunicode{004e200b0055200b0036}{\termbf{NU6}}\xspace}
\newcommand{\Orchard}{\termbf{Orchard}}
\newcommand{\OrchardText}{\textbf{Orchard}}
\newcommand{\SaplingOrOrchard}{\Sapling{}\nufive{ or \Orchard{}}\xspace}
@ -2451,6 +2466,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{\prenusixitem}[1]{\item \prenusix{#1}}
\newcommand{\nusixonwarditem}[1]{\nusix{\item {[\NUSix onward]}\, {#1}}}
\newcommand{\prenufiveitem}[1]{\item \prenufive{#1}}
\newcommand{\nufiveonwarditem}[1]{\nufive{\item {[\NUFive onward]}\, {#1}}}
\newcommand{\precanopyitem}[1]{\item \precanopy{#1}}
@ -2470,6 +2487,8 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg
\newcommand{\overwinterprenufiveitem}[1]{\overwinter{\item \overwinterprenufive{#1}}}
\newcommand{\sproutspecificitem}[1]{\item \sproutspecific{#1}}
\newcommand{\prenusix}[1]{\notbeforenusix{\nusix{[Pre-\NUSix\!]\,}} {#1}}
\newcommand{\nusixonward}[1]{\nusix{[\NUSix onward]\, {#1}}}
\newcommand{\prenufive}[1]{\notbeforenufive{\nufive{[Pre-\NUFive\!]\,}} {#1}}
\newcommand{\nufiveonward}[1]{\nufive{[\NUFive onward]\, {#1}}}
\newcommand{\precanopy}[1]{\notbeforecanopy{\canopy{[Pre-\Canopy\!]\,}} {#1}}
@ -2497,6 +2516,8 @@ 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{\nusixonwardnnote}[1]{\nusix{\callout{[\NUSix onward]\,\,}{Non-normative note:}{#1}}}
\newcommand{\nusixonwardpnote}[1]{\nusix{\callout{[\NUSix onward]\,\,}{Note:}{#1}}}
\newcommand{\nufiveonwardnnote}[1]{\nufive{\callout{[\NUFive onward]\,\,}{Non-normative note:}{#1}}}
\newcommand{\nufiveonwardpnote}[1]{\nufive{\callout{[\NUFive onward]\,\,}{Note:}{#1}}}
\newcommand{\canopyonwardnnote}[1]{\canopy{\callout{[\Canopy onward]\,\,}{Non-normative note:}{#1}}}
@ -2544,26 +2565,15 @@ It attempted to address the problem of mining centralization by use of the \Equi
memory-hard \proofOfWork algorithm.
\vspace{1.5ex}
\notblossom{\sapling{\noindent This specification defines the \Zcash consensus protocol
at launch; after the upgrade codenamed \Overwinter; and after the
subsequent upgrade codenamed \Sapling. It is a work in progress.
Protocol differences from \Zerocash and \Bitcoin are also explained.}}
\notheartwood{\blossom{\noindent This specification defines the \Zcash consensus protocol
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.}}
\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.}}
\notnufive{\canopy{\noindent This specification defines the \Zcash consensus protocol
at launch, and after each of the upgrades codenamed \Overwinter, \Sapling, \Blossom,
\Heartwood, and \Canopy. It is a work in progress. Protocol differences from \Zerocash and
\Bitcoin are also explained.}}
\nufive{\noindent This specification defines the \Zcash consensus protocol
at launch, and after each of the upgrades codenamed \Overwinter, \Sapling, \Blossom,
\Heartwood, \Canopy, and \NUFive. It is a work in progress. Protocol differences from
\Zerocash and \Bitcoin are also explained.}
\newcommand{\thisspecdefines}[1]{This specification defines the \Zcash consensus protocol at launch, and after each of the upgrades codenamed {#1}.}
\noindent \notblossom{\sapling{\thisspecdefines{\Overwinter and \Sapling}}}%
\notheartwood{\blossom{\thisspecdefines{\Overwinter, \Sapling, and \Blossom}}}%
\notcanopy{\heartwood{\thisspecdefines{\Overwinter, \Sapling, \Blossom, and \Heartwood}}}%
\notnufive{\canopy{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, and \Canopy}}}%
\notnusix{\nufive{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, and \NUFive}}}%
\nusix{This specification defines the \Zcash consensus protocol at launch; after each of the upgrades
codenamed \Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, and \NUFive; and proposed changes for \NUSix.} %
It is a work in progress. Protocol differences from \Zerocash and \Bitcoin are also explained.
\vspace{2.5ex}
\noindent \textbf{Keywords:}~ \StrSubstitute[0]{\keywords}{,}{, }.
@ -2632,6 +2642,9 @@ are highlighted in \canopy{\canopycolorname}.}
\notbeforenufive{Changes specific to the \NUFive upgrade following \Canopy
are highlighted in \nufive{\nufivecolorname}.}
\notbeforenusix{Changes specific to the proposed \NUSix upgrade following \NUFive
are highlighted in \nusix{\nusixcolorname}.}
All of these are also changes from \Zerocash.
The name \Sprout is used for the \Zcash protocol prior to \Sapling
(both before and after \Overwinter), and in particular its shielded protocol.
@ -12428,10 +12441,15 @@ at \blockHeight $1687104$ \cite{Zcash-Nu5}. Its specifications are described in
\cite{ZIP-212}, \cite{ZIP-213}, and \cite{ZIP-221}.
Additional information and rationale is given in \cite{Zcash-Orchard} and \cite{Zcash-halo2}.}
\nusix{
This draft specification describes the set of changes proposed for the \NUSix \networkUpgrade
(for which a \Mainnet activation height has not yet been set).
} %nusix
\introlist
\vspace{1ex}
This section summarizes the strategy for upgrading from \Sprout to subsequent versions
of the protocol (\Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, and \NUFive),
of the protocol (\Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, \NUFive, and \NUSix),
and for future upgrades.
\defining{The \networkUpgrade mechanism is described in \cite{ZIP-200}.}
@ -14819,6 +14837,7 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}.
\item Prevent incorrect line-breaking on hyphens.
\item In \crossref{concretesinsemillahash}, declare use of $\LEBStoIP{}$ instead of $\LEOStoIP{}$.
\item Add an acknowledgement to Conrado Gouvea for discussions on the Zcash protocol.
\item Add boilerplate support for \NUSix.
\end{itemize}