Merge pull request #744 from nuttycom/protocol_nu6_boilerplate

Protocol spec: Add macro and Makefile support for NU6
This commit is contained in:
Daira-Emma Hopwood 2024-08-28 15:42:51 +01:00 committed by GitHub
commit 11e3fab0ee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 91 additions and 115 deletions

View File

@ -1,6 +1,6 @@
# Dependencies: see zip-guide.rst and protocol/README.rst # 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 all-zips: .Makefile.uptodate
echo "$(patsubst zips/%,%,$(sort $(wildcard zips/zip-*.rst) $(wildcard zips/zip-*.md)))" >.zipfilelist.new 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 diff .zipfilelist.current .zipfilelist.new || cp -f .zipfilelist.new .zipfilelist.current
@ -11,13 +11,16 @@ all-zips: .Makefile.uptodate
$(MAKE) README.rst $(MAKE) README.rst
$(MAKE) rendered/index.html $(addprefix rendered/,$(addsuffix .html,$(basename $(patsubst zips/%,%,$(sort $(wildcard zips/*.rst) $(wildcard zips/*.md)))))) $(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: tag-release:
$(MAKE) -C protocol tag-release $(MAKE) -C protocol tag-release
protocol: protocol:
$(MAKE) -C protocol $(MAKE) -C protocol protocol
all-protocol:
$(MAKE) -C protocol all
discard: discard:
git checkout -- 'rendered/*.html' 'README.rst' 'rendered/protocol/*.pdf' 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) 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 ./makeindex.sh | cat README.template - >README.rst
.PHONY: linkcheck .PHONY: linkcheck clean all-clean
linkcheck: all-zips linkcheck: all
$(MAKE) -C protocol all-specs ./links_and_dests.py --check $(filter-out $(wildcard rendered/draft-*.html),$(wildcard rendered/*.html)) $(filter-out rendered/protocol/sprout.pdf,$(wildcard rendered/protocol/*.pdf))
./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: clean
clean: clean:
rm -f .zipfilelist.* README.rst rendered/index.html $(addprefix rendered/,$(addsuffix .html,$(basename $(patsubst zips/%,%,$(sort $(wildcard zips/*.rst) $(wildcard zips/*.md)))))) 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". # 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. # 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 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 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: tag-release:
ifeq ($(shell git tag --points-at HEAD |wc -l),0) ifeq ($(shell git tag --points-at HEAD |wc -l),0)
@ -47,22 +51,25 @@ discard:
$(MAKE) clean $(MAKE) clean
touch .Makefile.uptodate 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 $(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 $(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 $(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 $(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 $(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: auxsapling:
printf '\\toggletrue{issapling}\n\\renewcommand{\\docversion}{Version %s [\\SaplingSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver printf '\\toggletrue{issapling}\n\\renewcommand{\\docversion}{Version %s [\\SaplingSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux mkdir -p aux
@ -70,12 +77,11 @@ auxsapling:
cp mymakeindex.sh aux cp mymakeindex.sh aux
$(LATEXMK) -jobname=sapling -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT) $(LATEXMK) -jobname=sapling -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: sapling
sapling: sapling:
$(MAKE) auxsapling $(MAKE) auxsapling
mv -f aux/sapling.pdf $(PDFDIR) mv -f aux/sapling.pdf $(PDFDIR)
.PHONY: auxblossom .PHONY: auxblossom blossom
auxblossom: auxblossom:
printf '\\toggletrue{isblossom}\n\\renewcommand{\\docversion}{Version %s [\\BlossomSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver printf '\\toggletrue{isblossom}\n\\renewcommand{\\docversion}{Version %s [\\BlossomSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux mkdir -p aux
@ -83,12 +89,11 @@ auxblossom:
cp mymakeindex.sh aux cp mymakeindex.sh aux
$(LATEXMK) -jobname=blossom -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT) $(LATEXMK) -jobname=blossom -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: blossom
blossom: blossom:
$(MAKE) auxblossom $(MAKE) auxblossom
mv -f aux/blossom.pdf $(PDFDIR) mv -f aux/blossom.pdf $(PDFDIR)
.PHONY: auxheartwood .PHONY: auxheartwood heartwood
auxheartwood: auxheartwood:
printf '\\toggletrue{isheartwood}\n\\renewcommand{\\docversion}{Version %s [\\HeartwoodSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver printf '\\toggletrue{isheartwood}\n\\renewcommand{\\docversion}{Version %s [\\HeartwoodSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux mkdir -p aux
@ -96,12 +101,11 @@ auxheartwood:
cp mymakeindex.sh aux cp mymakeindex.sh aux
$(LATEXMK) -jobname=heartwood -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT) $(LATEXMK) -jobname=heartwood -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: heartwood
heartwood: heartwood:
$(MAKE) auxheartwood $(MAKE) auxheartwood
mv -f aux/heartwood.pdf $(PDFDIR) mv -f aux/heartwood.pdf $(PDFDIR)
.PHONY: auxcanopy .PHONY: auxcanopy canopy
auxcanopy: auxcanopy:
printf '\\toggletrue{iscanopy}\n\\renewcommand{\\docversion}{Version %s [\\CanopySpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver printf '\\toggletrue{iscanopy}\n\\renewcommand{\\docversion}{Version %s [\\CanopySpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux mkdir -p aux
@ -109,12 +113,11 @@ auxcanopy:
cp mymakeindex.sh aux cp mymakeindex.sh aux
$(LATEXMK) -jobname=canopy -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT) $(LATEXMK) -jobname=canopy -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: canopy
canopy: canopy:
$(MAKE) auxcanopy $(MAKE) auxcanopy
mv -f aux/canopy.pdf $(PDFDIR) mv -f aux/canopy.pdf $(PDFDIR)
.PHONY: auxnu5 .PHONY: auxnu5 nu5
auxnu5: auxnu5:
printf '\\toggletrue{isnufive}\n\\renewcommand{\\docversion}{Version %s [\\NUFiveSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver printf '\\toggletrue{isnufive}\n\\renewcommand{\\docversion}{Version %s [\\NUFiveSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver
mkdir -p aux mkdir -p aux
@ -122,73 +125,22 @@ auxnu5:
cp mymakeindex.sh aux cp mymakeindex.sh aux
$(LATEXMK) -jobname=nu5 -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT) $(LATEXMK) -jobname=nu5 -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
.PHONY: nu5
nu5: nu5:
$(MAKE) auxnu5 $(MAKE) auxnu5
mv -f aux/nu5.pdf $(PDFDIR) mv -f aux/nu5.pdf $(PDFDIR)
cp -f $(PDFDIR)/nu5.pdf $(PDFDIR)/protocol.pdf
.PHONY: nolatexmk-sapling .PHONY: auxnu6 nu6
nolatexmk-sapling: auxnu6:
printf '\\toggletrue{issapling}\n\\renewcommand{\\docversion}{Version %s [\\SaplingSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver printf '\\toggletrue{isnusix}\n\\renewcommand{\\docversion}{Version %s [\\NUSixSpec]}' "$$(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. mkdir -p aux
rm -f sapling.aux sapling.bbl sapling.blg sapling.brf sapling.bcf rm -f aux/nu6.*
$(LATEX) -jobname=sapling protocol.tex || { touch incremental_merkle.png; exit 1; } cp mymakeindex.sh aux
biber sapling $(LATEXMK) -jobname=nu6 -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT)
$(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: nolatexmk-blossom nu6:
nolatexmk-blossom: $(MAKE) auxnu6
printf '\\toggletrue{isblossom}\n\\renewcommand{\\docversion}{Version %s [\\BlossomSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver mv -f aux/nu6.pdf $(PDFDIR)
# 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; }
.PHONY: clean .PHONY: clean
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{\HeartwoodSpec}{Overwinter+Sapling+Blossom+Heartwood}
\newcommand{\CanopySpec}{Overwinter+Sapling+Blossom+Heartwood+Canopy} \newcommand{\CanopySpec}{Overwinter+Sapling+Blossom+Heartwood+Canopy}
\newcommand{\NUFiveSpec}{NU5} \newcommand{\NUFiveSpec}{NU5}
\newcommand{\NUSixSpec}{NU6}
\newtoggle{issapling} \newtoggle{issapling}
\togglefalse{issapling} \togglefalse{issapling}
\newtoggle{isblossom} \newtoggle{isblossom}
@ -562,6 +563,8 @@
\togglefalse{iscanopy} \togglefalse{iscanopy}
\newtoggle{isnufive} \newtoggle{isnufive}
\togglefalse{isnufive} \togglefalse{isnufive}
\newtoggle{isnusix}
\togglefalse{isnusix}
\InputIfFileExists{protocol.ver}{}{} \InputIfFileExists{protocol.ver}{}{}
\newcommand{\doctitle}{Zcash Protocol Specification} \newcommand{\doctitle}{Zcash Protocol Specification}
@ -594,10 +597,26 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg
\newcommand{\canopycolorname}{purple} \newcommand{\canopycolorname}{purple}
\newcommand{\nufivecolor}{black!25!blue!65!green!65} \newcommand{\nufivecolor}{black!25!blue!65!green!65}
\newcommand{\nufivecolorname}{slate blue} \newcommand{\nufivecolorname}{slate blue}
\newcommand{\nusixcolor}{magenta!75}
\newcommand{\nusixcolorname}{pink}
\newcommand{\labelcolor}{yellow!20} \newcommand{\labelcolor}{yellow!20}
\iftoggle{isnufive}{ \iftoggle{isnusix}{
\providecommand{\baseurl}{https://zips.z.cash/protocol/protocol.pdf} \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} \toggletrue{iscanopy}
\newcommand{\setnufive}{\color{\nufivecolor}} \newcommand{\setnufive}{\color{\nufivecolor}}
\newcommand{\nufive}[1]{\texorpdfstring{{\setnufive{#1}}}{#1}} \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{\Sprout}{\termbf{Sprout}}
\newcommand{\SproutText}{\textbf{Sprout}} \newcommand{\SproutText}{\textbf{Sprout}}
\newcommand{\Overwinter}{\termbf{Overwinter}} \newcommand{\Overwinter}{\termbf{Overwinter}}
\newcommand{\OverwinterText}{\textbf{Overwinter}}
\newcommand{\Sapling}{\termbf{Sapling}} \newcommand{\Sapling}{\termbf{Sapling}}
\newcommand{\SaplingText}{\textbf{Sapling}} \newcommand{\SaplingText}{\textbf{Sapling}}
\newcommand{\Blossom}{\termbf{Blossom}} \newcommand{\Blossom}{\termbf{Blossom}}
\newcommand{\BlossomText}{\textbf{Blossom}}
\newcommand{\Heartwood}{\termbf{Heartwood}} \newcommand{\Heartwood}{\termbf{Heartwood}}
\newcommand{\HeartwoodText}{\textbf{Heartwood}}
\newcommand{\Canopy}{\termbf{Canopy}} \newcommand{\Canopy}{\termbf{Canopy}}
\newcommand{\CanopyText}{\textbf{Canopy}}
\newcommand{\NUFive}{\readasunicode{004e200b0055200b0035}{\termbf{NU5}}\xspace} \newcommand{\NUFive}{\readasunicode{004e200b0055200b0035}{\termbf{NU5}}\xspace}
%\newcommand{\NUFiveText}{\textbf{NU5}} \newcommand{\NUSix}{\readasunicode{004e200b0055200b0036}{\termbf{NU6}}\xspace}
\newcommand{\Orchard}{\termbf{Orchard}} \newcommand{\Orchard}{\termbf{Orchard}}
\newcommand{\OrchardText}{\textbf{Orchard}} \newcommand{\OrchardText}{\textbf{Orchard}}
\newcommand{\SaplingOrOrchard}{\Sapling{}\nufive{ or \Orchard{}}\xspace} \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}} \newcommand{\consensusrule}[1]{\needspace{4ex}\vspace{2ex}\callout{}{Consensus rule:}{#1}}
\newenvironment{consensusrules}{\introlist\callout{}{Consensus rules:}\begin{itemize}}{\end{itemize}} \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{\prenufiveitem}[1]{\item \prenufive{#1}}
\newcommand{\nufiveonwarditem}[1]{\nufive{\item {[\NUFive onward]}\, {#1}}} \newcommand{\nufiveonwarditem}[1]{\nufive{\item {[\NUFive onward]}\, {#1}}}
\newcommand{\precanopyitem}[1]{\item \precanopy{#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{\overwinterprenufiveitem}[1]{\overwinter{\item \overwinterprenufive{#1}}}
\newcommand{\sproutspecificitem}[1]{\item \sproutspecific{#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{\prenufive}[1]{\notbeforenufive{\nufive{[Pre-\NUFive\!]\,}} {#1}}
\newcommand{\nufiveonward}[1]{\nufive{[\NUFive onward]\, {#1}}} \newcommand{\nufiveonward}[1]{\nufive{[\NUFive onward]\, {#1}}}
\newcommand{\precanopy}[1]{\notbeforecanopy{\canopy{[Pre-\Canopy\!]\,}} {#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}} \newcommand{\nnote}[1]{\needspace{4ex}\vspace{2ex}\callout{}{Non-normative note:}{#1}}
\newenvironment{nnotes}{\introlist\callout{}{Non-normative notes:}\begin{itemize}}{\end{itemize}} \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{\nufiveonwardnnote}[1]{\nufive{\callout{[\NUFive onward]\,\,}{Non-normative note:}{#1}}}
\newcommand{\nufiveonwardpnote}[1]{\nufive{\callout{[\NUFive onward]\,\,}{Note:}{#1}}} \newcommand{\nufiveonwardpnote}[1]{\nufive{\callout{[\NUFive onward]\,\,}{Note:}{#1}}}
\newcommand{\canopyonwardnnote}[1]{\canopy{\callout{[\Canopy onward]\,\,}{Non-normative 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. memory-hard \proofOfWork algorithm.
\vspace{1.5ex} \vspace{1.5ex}
\notblossom{\sapling{\noindent This specification defines the \Zcash consensus protocol \newcommand{\thisspecdefines}[1]{This specification defines the \Zcash consensus protocol at launch, and after each of the upgrades codenamed {#1}.}
at launch; after the upgrade codenamed \Overwinter; and after the \noindent \notblossom{\sapling{\thisspecdefines{\Overwinter and \Sapling}}}%
subsequent upgrade codenamed \Sapling. It is a work in progress. \notheartwood{\blossom{\thisspecdefines{\Overwinter, \Sapling, and \Blossom}}}%
Protocol differences from \Zerocash and \Bitcoin are also explained.}} \notcanopy{\heartwood{\thisspecdefines{\Overwinter, \Sapling, \Blossom, and \Heartwood}}}%
\notheartwood{\blossom{\noindent This specification defines the \Zcash consensus protocol \notnufive{\canopy{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, and \Canopy}}}%
at launch, and after each of the upgrades codenamed \Overwinter, \Sapling, and \notnusix{\nufive{\thisspecdefines{\Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, and \NUFive}}}%
\Blossom. It is a work in progress. Protocol differences from \Zerocash and \nusix{This specification defines the \Zcash consensus protocol at launch; after each of the upgrades
\Bitcoin are also explained.}} codenamed \Overwinter, \Sapling, \Blossom, \Heartwood, \Canopy, and \NUFive; and proposed changes for \NUSix.} %
\notcanopy{\heartwood{\noindent This specification defines the \Zcash consensus protocol It is a work in progress. Protocol differences from \Zerocash and \Bitcoin are also explained.
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.}
\vspace{2.5ex} \vspace{2.5ex}
\noindent \textbf{Keywords:}~ \StrSubstitute[0]{\keywords}{,}{, }. \noindent \textbf{Keywords:}~ \StrSubstitute[0]{\keywords}{,}{, }.
@ -2632,6 +2642,9 @@ are highlighted in \canopy{\canopycolorname}.}
\notbeforenufive{Changes specific to the \NUFive upgrade following \Canopy \notbeforenufive{Changes specific to the \NUFive upgrade following \Canopy
are highlighted in \nufive{\nufivecolorname}.} 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. All of these are also changes from \Zerocash.
The name \Sprout is used for the \Zcash protocol prior to \Sapling The name \Sprout is used for the \Zcash protocol prior to \Sapling
(both before and after \Overwinter), and in particular its shielded protocol. (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}. \cite{ZIP-212}, \cite{ZIP-213}, and \cite{ZIP-221}.
Additional information and rationale is given in \cite{Zcash-Orchard} and \cite{Zcash-halo2}.} 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 \introlist
\vspace{1ex} \vspace{1ex}
This section summarizes the strategy for upgrading from \Sprout to subsequent versions 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. and for future upgrades.
\defining{The \networkUpgrade mechanism is described in \cite{ZIP-200}.} \defining{The \networkUpgrade mechanism is described in \cite{ZIP-200}.}
@ -14811,7 +14829,7 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}.
\intropart \intropart
\lsection{Change History}{changehistory} \lsection{Change History}{changehistory}
\historyentry{Unreleased}{2024-04-14} \historyentry{2024.5.0}{2024-08-28}
\begin{itemize} \begin{itemize}
\item Add the hyphen in \nh{Daira-Emma} Hopwood. \item Add the hyphen in \nh{Daira-Emma} Hopwood.
@ -14819,6 +14837,7 @@ Peter Newell's illustration of the Jubjub bird, from \cite{Carroll1902}.
\item Prevent incorrect line-breaking on hyphens. \item Prevent incorrect line-breaking on hyphens.
\item In \crossref{concretesinsemillahash}, declare use of $\LEBStoIP{}$ instead of $\LEOStoIP{}$. \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 an acknowledgement to Conrado Gouvea for discussions on the Zcash protocol.
\item Add boilerplate support for \NUSix.
\end{itemize} \end{itemize}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.