diff --git a/.gitignore b/.gitignore index aa5d76d21..58c8a585c 100644 --- a/.gitignore +++ b/.gitignore @@ -19,15 +19,11 @@ *.swp *.save *.save.* +*~ .Makefile.uptodate .zipfilelist.* .draftfilelist.* protocol/aux/ -protocol/html/ -protocol/saplinghtml/ - -protocol/heartwood.pdf protocol/protocol.ver -*~ diff --git a/Makefile b/Makefile index 67edd0845..91414311a 100644 --- a/Makefile +++ b/Makefile @@ -19,9 +19,15 @@ tag-release: protocol: $(MAKE) -C protocol protocol +protocol-dark: + $(MAKE) -C protocol protocol-dark + all-protocol: $(MAKE) -C protocol all +all-specs: all-zips + $(MAKE) -C protocol all-specs + discard: git checkout -- 'rendered/*.html' 'README.rst' 'rendered/protocol/*.pdf' diff --git a/README.rst b/README.rst index 2c2781f76..5b9b43435 100644 --- a/README.rst +++ b/README.rst @@ -26,7 +26,11 @@ to talk about your idea. Participation in the Zcash project is subject to a `Code of Conduct `__. -The Zcash protocol is documented in its `Protocol Specification `__. +.. raw:: html + +

The Zcash protocol is documented in its + Protocol Specification.

To start contributing, first read `ZIP 0 `__ which documents the ZIP process. Then clone `this repo `__ from GitHub, and start adding diff --git a/README.template b/README.template index 2c6f9219a..bc47c7050 100644 --- a/README.template +++ b/README.template @@ -26,7 +26,11 @@ to talk about your idea. Participation in the Zcash project is subject to a `Code of Conduct `__. -The Zcash protocol is documented in its `Protocol Specification `__. +.. raw:: html + +

The Zcash protocol is documented in its + Protocol Specification.

To start contributing, first read `ZIP 0 `__ which documents the ZIP process. Then clone `this repo `__ from GitHub, and start adding diff --git a/protocol/Makefile b/protocol/Makefile index 885396c7e..64f12fe3c 100644 --- a/protocol/Makefile +++ b/protocol/Makefile @@ -20,14 +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 protocol all-specs tag-release discard +.PHONY: all protocol protocol-dark all-specs tag-release discard all: .Makefile.uptodate - $(MAKE) $(PDFDIR)/protocol.pdf $(PDFDIR)/nu5.pdf $(PDFDIR)/canopy.pdf $(PDFDIR)/heartwood.pdf $(PDFDIR)/blossom.pdf $(PDFDIR)/sapling.pdf + $(MAKE) $(PDFDIR)/protocol.pdf $(PDFDIR)/protocol-dark.pdf $(PDFDIR)/nu5.pdf $(PDFDIR)/canopy.pdf $(PDFDIR)/heartwood.pdf $(PDFDIR)/blossom.pdf $(PDFDIR)/sapling.pdf protocol: $(PDFDIR)/protocol.pdf +protocol-dark: $(PDFDIR)/protocol-dark.pdf + all-specs: .Makefile.uptodate - $(MAKE) nu6 nu5 canopy heartwood blossom sapling + $(MAKE) nu6 nu6-dark nu5 canopy heartwood blossom sapling tag-release: ifeq ($(shell git tag --points-at HEAD |wc -l),0) @@ -67,9 +69,12 @@ $(PDFDIR)/nu5.pdf: protocol.tex zcash.bib jubjub.png key_components_sapling.png $(PDFDIR)/protocol.pdf: protocol.tex zcash.bib jubjub.png key_components_sapling.png key_components_orchard.png incremental_merkle.png $(MAKE) nu6 +$(PDFDIR)/protocol-dark.pdf: protocol.tex zcash.bib jubjub.png key_components_sapling.png key_components_orchard_dark.png incremental_merkle_dark.png + $(MAKE) nu6-dark + .PHONY: auxsapling sapling 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]}\n' "$$(git describe --tags --abbrev=6)" |tee protocol.ver mkdir -p aux rm -f aux/sapling.* cp mymakeindex.sh aux @@ -81,7 +86,7 @@ sapling: .PHONY: auxblossom blossom 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]}\n' "$$(git describe --tags --abbrev=6)" |tee protocol.ver mkdir -p aux rm -f aux/blossom.* cp mymakeindex.sh aux @@ -93,7 +98,7 @@ blossom: .PHONY: auxheartwood heartwood 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]}\n' "$$(git describe --tags --abbrev=6)" |tee protocol.ver mkdir -p aux rm -f aux/heartwood.* cp mymakeindex.sh aux @@ -105,7 +110,7 @@ heartwood: .PHONY: auxcanopy canopy 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]}\n' "$$(git describe --tags --abbrev=6)" |tee protocol.ver mkdir -p aux rm -f aux/canopy.* cp mymakeindex.sh aux @@ -117,7 +122,7 @@ canopy: .PHONY: auxnu5 nu5 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]}\n' "$$(git describe --tags --abbrev=6)" |tee protocol.ver mkdir -p aux rm -f aux/nu5.* cp mymakeindex.sh aux @@ -129,7 +134,7 @@ nu5: .PHONY: auxnu6 nu6 auxnu6: - printf '\\toggletrue{isnusix}\n\\renewcommand{\\docversion}{Version %s [\\NUSixSpec]}' "$$(git describe --tags --abbrev=6)" |tee protocol.ver + printf '\\toggletrue{isnusix}\n\\renewcommand{\\docversion}{Version %s [\\NUSixSpec]}\n' "$$(git describe --tags --abbrev=6)" |tee protocol.ver mkdir -p aux rm -f aux/nu6.* cp mymakeindex.sh aux @@ -139,6 +144,18 @@ nu6: $(MAKE) auxnu6 mv -f aux/nu6.pdf $(PDFDIR)/protocol.pdf +.PHONY: auxnu6-dark nu6-dark +auxnu6-dark: + printf '\\toggletrue{darkmode}\\toggletrue{isnusix}\n\\renewcommand{\\docversion}{Version %s [\\NUSixSpec]}\n' "$$(git describe --tags --abbrev=6)" |tee protocol.ver + mkdir -p aux + rm -f aux/nu6-dark.* + cp mymakeindex.sh aux + $(LATEXMK) -jobname=nu6-dark -auxdir=aux -outdir=aux $(EXTRAOPT) protocol $(NOCRUFT) + +nu6-dark: + $(MAKE) auxnu6-dark + mv -f aux/nu6-dark.pdf $(PDFDIR)/protocol-dark.pdf + .PHONY: clean clean: - rm -f aux/* 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)/protocol-dark.pdf $(PDFDIR)/nu5.pdf $(PDFDIR)/canopy.pdf $(PDFDIR)/heartwood.pdf $(PDFDIR)/blossom.pdf $(PDFDIR)/sapling.pdf diff --git a/protocol/incremental_merkle_dark.png b/protocol/incremental_merkle_dark.png new file mode 100644 index 000000000..4c6a9d3f2 Binary files /dev/null and b/protocol/incremental_merkle_dark.png differ diff --git a/protocol/incremental_merkle_dark.svg b/protocol/incremental_merkle_dark.svg new file mode 100644 index 000000000..d1c7cc09c --- /dev/null +++ b/protocol/incremental_merkle_dark.svg @@ -0,0 +1,1725 @@ + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + rt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +? +? +cm +0 +cm +1 +cm +2 +cm +3 +cm +4 + diff --git a/protocol/key_components_orchard.png b/protocol/key_components_orchard.png index abf007513..66f1464d0 100644 Binary files a/protocol/key_components_orchard.png and b/protocol/key_components_orchard.png differ diff --git a/protocol/key_components_orchard_dark.png b/protocol/key_components_orchard_dark.png new file mode 100644 index 000000000..b85a3a68d Binary files /dev/null and b/protocol/key_components_orchard_dark.png differ diff --git a/protocol/key_components_orchard_dark.svg b/protocol/key_components_orchard_dark.svg new file mode 100644 index 000000000..682ac8114 --- /dev/null +++ b/protocol/key_components_orchard_dark.svg @@ -0,0 +1,2241 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + ivk + dk + + + + + ovk + + + + + a + pk + pk + enc + + + + + a + sk + + + + + a + pk + enc + sk + + + + d + pk + d + + + + + + ivk + + + + + ak + nk + + + + nsk + ak + + + + sk + + + + ask + nsk + + + ovk + + + d + pk + d + + + + + ovk + + + + + ask + + + + + sk + + + + ak + nk + rivk + + Paying key + Spending key + Shielded payment address + Receivingkey + Incomingviewing key + Transmissionkey + Diversifier + Shielded payment address + Fullviewing key + Incomingviewing key + Spending key + Proof author-izing key + Expandedspending key + Transmissionkey + Transmissionkey + Diversifier + Shielded payment address + Fullviewing key + Orchard + Spending key + Outgoingviewing key + Outgoingviewing key + Sapling + Sprout + index + Incomingviewing key + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/protocol/protocol.tex b/protocol/protocol.tex index 03fc7f9c2..5f76e4b77 100644 --- a/protocol/protocol.tex +++ b/protocol/protocol.tex @@ -39,6 +39,7 @@ \usepackage[hang]{footmisc} \usepackage{xstring} \usepackage[dvipsnames]{xcolor} +\usepackage{pagecolor} \usepackage{etoolbox} \usepackage{subdepth} \usepackage{fix-cm} @@ -68,6 +69,41 @@ \newcommand*\nbh{\hbox{-}\nobreak\hskip\z@skip} \makeatother + +% Load version-specific properties from protocol.ver +\newcommand{\docversion}{Version unavailable (check protocol.ver)} +\newcommand{\SaplingSpec}{Overwinter+Sapling} +\newcommand{\BlossomSpec}{Overwinter+Sapling+Blossom} +\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} +\togglefalse{isblossom} +\newtoggle{isheartwood} +\togglefalse{isheartwood} +\newtoggle{iscanopy} +\togglefalse{iscanopy} +\newtoggle{isnufive} +\togglefalse{isnufive} +\newtoggle{isnusix} +\togglefalse{isnusix} +\newtoggle{darkmode} +\togglefalse{darkmode} +\InputIfFileExists{protocol.ver}{}{} + +\iftoggle{darkmode}{ + \colorlet{crossrefblue}{MidnightBlue} + \colorlet{citationpurple}{red!60!blue!95} + \colorlet{linkred}{black!25!BrickRed} +}{ + \colorlet{crossrefblue}{MidnightBlue} + \colorlet{citationpurple}{Plum} + \colorlet{linkred}{BrickRed} +} + % The destlabel option creates "destination names" in the PDF, which allows % linking to sections in URL fragments when viewing the PDF in a web browser: % @@ -83,8 +119,9 @@ % To preserve destination names through Ghostscript processing, extractpdfmark % would need to be used as described at . % -\usepackage[unicode,bookmarksnumbered,bookmarksopen,allbordercolors=MidnightBlue, - citebordercolor=Plum,urlbordercolor=BrickRed,pdfa,destlabel]{hyperref} +\usepackage[unicode,bookmarksnumbered,bookmarksopen, + allbordercolors=crossrefblue,citebordercolor=citationpurple,urlbordercolor=linkred, + pdfa,destlabel]{hyperref} \usepackage[amsmath,amsthm,thmmarks,hyperref]{ntheorem} @@ -546,27 +583,6 @@ \newcommand{\sbitbox}[2]{\bitbox{#1}{\strut #2}} -\newcommand{\docversion}{Version unavailable (check protocol.ver)} -\newcommand{\SaplingSpec}{Overwinter+Sapling} -\newcommand{\BlossomSpec}{Overwinter+Sapling+Blossom} -\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} -\togglefalse{isblossom} -\newtoggle{isheartwood} -\togglefalse{isheartwood} -\newtoggle{iscanopy} -\togglefalse{iscanopy} -\newtoggle{isnufive} -\togglefalse{isnufive} -\newtoggle{isnusix} -\togglefalse{isnusix} -\InputIfFileExists{protocol.ver}{}{} - \newcommand{\doctitle}{Zcash Protocol Specification} \newcommand{\leadauthor}{Daira-Emma Hopwood} \newcommand{\coauthora}{Sean Bowe} @@ -577,29 +593,61 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledge} +% Colors % -\newcommand{\todo}[1]{{\color{Sepia}\sf{TODO: #1}}} -\definecolor{green}{RGB}{0,100,10} +\iftoggle{darkmode}{ + % The colors need to be adjusted to maintain a comfortable contrast, saturation, + % and brightness in dark mode. + \definecolor{darkpage}{RGB}{30,30,30} + \definecolor{lighttext}{RGB}{220,220,220} + \definecolor{red}{RGB}{215,20,20} + \definecolor{green}{RGB}{10,175,20} + \definecolor{blue}{RGB}{65,65,245} + \definecolor{slateblue}{RGB}{98,139,190} + \colorlet{reddishorange}{red!30!orange} + \definecolor{purple}{RGB}{157,68,150} + \colorlet{pink}{magenta!70} + \definecolor{brown}{RGB}{160,50,50} + \colorlet{warningred}{BrickRed} + \colorlet{cream}{yellow!20} + + \pagecolor{darkpage} + \color{lighttext} + \newcommand{\imagesuffix}{_dark} +}{ + \definecolor{green}{RGB}{0,100,10} + \colorlet{slateblue}{black!25!blue!65!green!65} + \colorlet{reddishorange}{red!30!orange} + \colorlet{purple}{red!50!blue!85} + \colorlet{pink}{magenta!75} + \colorlet{brown}{Sepia} + \colorlet{warningred}{BrickRed} + \colorlet{cream}{yellow!20} + + \newcommand{\imagesuffix}{} +} + +\newcommand{\todo}[1]{{\color{brown}\sf{TODO: #1}}} -\newcommand{\vulncolor}{BrickRed} +\newcommand{\vulncolor}{warningred} \newcommand{\setwarning}{\color{\warningcolor}} -\newcommand{\warningcolor}{BrickRed} +\newcommand{\warningcolor}{warningred} \newcommand{\saplingcolor}{green} \newcommand{\saplingcolorname}{\saplingcolor} \newcommand{\overwintercolor}{blue} -\newcommand{\overwintercolorname}{\overwintercolor} +\newcommand{\overwintercolorname}{bright blue} \newcommand{\blossomcolor}{red} \newcommand{\blossomcolorname}{\blossomcolor} -\newcommand{\heartwoodcolor}{red!30!orange} +\newcommand{\heartwoodcolor}{reddishorange} \newcommand{\heartwoodcolorname}{orange} -\newcommand{\canopycolor}{red!50!blue!85} -\newcommand{\canopycolorname}{purple} -\newcommand{\nufivecolor}{black!25!blue!65!green!65} +\newcommand{\canopycolor}{purple} +\newcommand{\canopycolorname}{\canopycolor} +\newcommand{\nufivecolor}{slateblue} \newcommand{\nufivecolorname}{slate blue} -\newcommand{\nusixcolor}{magenta!75} -\newcommand{\nusixcolorname}{pink} -\newcommand{\labelcolor}{yellow!20} +\newcommand{\nusixcolor}{pink} +\newcommand{\nusixcolorname}{\nusixcolor} +\newcommand{\labelcolor}{cream} \iftoggle{isnusix}{ \providecommand{\baseurl}{https://zips.z.cash/protocol/protocol.pdf} @@ -3096,12 +3144,12 @@ abstractions. \readas{Image description: three diagrams showing the derivation of Sprout, Sapling, and Orchard key components. -The key components are shown by their mathematical abbreviations. They are collected into ovals for each named -abstraction, which are colour-coded from purple to green in the direction of derivation, or from more-secret to -less-secret values. The information in the diagram is otherwise mostly redundant with the textual description -of the key components and their derivation that follows it.}{\begin{center} +The key components are shown by their mathematical abbreviations. They are collected into rounded boxes for each named +abstraction, which are colour-coded from purple to green in the direction of derivation, or from more secret to +less secret values. The information in the diagram is otherwise mostly redundant with the textual description +of the key components and their derivation that follows it.}{\vspace{-2ex}\begin{center} \notnufive{\includegraphics[scale=.5]{key_components_sapling}} -\nufive{\includegraphics[scale=.385]{key_components_orchard}} +\nufive{\includegraphics[scale=.385]{key_components_orchard\imagesuffix}} \end{center}} \sproutspecific{ @@ -3791,7 +3839,7 @@ \vspace{-1ex} \begin{center} -\includegraphics[scale=.4]{incremental_merkle} +\includegraphics[scale=.4]{incremental_merkle\imagesuffix} \end{center} \vspace{-1ex} @@ -13987,7 +14035,7 @@ \consensusrule{\precanopy{ A \coinbaseTransaction at $\BlockHeight \in \range{1}{\FoundersRewardLastBlockHeight}$ \MUST include at least one output that pays exactly $\FoundersReward(\BlockHeight)$ \zatoshi -with a \standardPtoSHScript of the form $\ScriptOP{HASH160} \;\FounderRedeemScriptHash(\BlockHeight)\; \ScriptOP{EQUAL}$ +with a \standardPtoSHScript of the form $\ScriptOP{HASH160}$ $\FounderRedeemScriptHash(\BlockHeight)\; \ScriptOP{EQUAL}$ as its $\scriptPubKey$. }} @@ -15007,11 +15055,9 @@ \begin{itemize} \nusix{ - \item Clarify \crossref{transactions} taking into account \NUSix consensus changes from \cite{ZIP-236}. + \item Clarify \crossref{transactions}, taking into account the \NUSix consensus changes from \cite{ZIP-236}. } %nusix -\notnusix{ - \item No changes before \NUSix. -} %notnusix + \item Added dark mode rendering (\url{https://zips.z.cash/protocol/protocol-dark.pdf}). \end{itemize} diff --git a/rendered/css/style.css b/rendered/css/style.css index 77af4d69f..9cf20f050 100644 --- a/rendered/css/style.css +++ b/rendered/css/style.css @@ -45,11 +45,18 @@ color: #00455c; } blockquote { - background-color: #e0e0e0 + background-color: #e0e0e0; } } @media (prefers-color-scheme: dark) { + span.lightmode { + display: none; + } + span.darkmode { + display: inline !important; + } + body { background: #111111; color: #eeeeee; @@ -101,7 +108,7 @@ color: #90ffff; } blockquote { - background-color: #202020 + background-color: #202020; } } diff --git a/rendered/index.html b/rendered/index.html index 1b9686371..37f57886b 100644 --- a/rendered/index.html +++ b/rendered/index.html @@ -20,7 +20,9 @@

The authors of a ZIP are responsible for building consensus within the community and documenting / addressing dissenting opinions.

Anyone can write a ZIP! We encourage community contributions and decentralization of work on the Zcash protocol. If you’d like to bounce ideas off people before formally writing a ZIP, we encourage it! Visit the ZcashCommunity Discord chat to talk about your idea.

Participation in the Zcash project is subject to a Code of Conduct.

-

The Zcash protocol is documented in its Protocol Specification.

+

The Zcash protocol is documented in its +Protocol Specification.

To start contributing, first read ZIP 0 which documents the ZIP process. Then clone this repo from GitHub, and start adding your draft ZIP, formatted either as reStructuredText or as Markdown, into the zips/ directory.

For example, if using reStructuredText, use a filename matching zips/draft-*.rst. Use make to check that you are using correct reStructuredText or Markdown syntax, and double-check the generated rendered/draft-*.html file before filing a Pull Request. See here for the project dependencies.

diff --git a/rendered/protocol/blossom.pdf b/rendered/protocol/blossom.pdf index bd6601412..2da490627 100644 Binary files a/rendered/protocol/blossom.pdf and b/rendered/protocol/blossom.pdf differ diff --git a/rendered/protocol/canopy.pdf b/rendered/protocol/canopy.pdf index a2cc318da..f93649982 100644 Binary files a/rendered/protocol/canopy.pdf and b/rendered/protocol/canopy.pdf differ diff --git a/rendered/protocol/heartwood.pdf b/rendered/protocol/heartwood.pdf index a380d6cfa..48ddbef23 100644 Binary files a/rendered/protocol/heartwood.pdf and b/rendered/protocol/heartwood.pdf differ diff --git a/rendered/protocol/nu5.pdf b/rendered/protocol/nu5.pdf index f5a6655c1..2e3ba992d 100644 Binary files a/rendered/protocol/nu5.pdf and b/rendered/protocol/nu5.pdf differ diff --git a/rendered/protocol/protocol-dark.pdf b/rendered/protocol/protocol-dark.pdf new file mode 100644 index 000000000..fa1e45a63 Binary files /dev/null and b/rendered/protocol/protocol-dark.pdf differ diff --git a/rendered/protocol/protocol.pdf b/rendered/protocol/protocol.pdf index 0e58d8841..d9be9d18c 100644 Binary files a/rendered/protocol/protocol.pdf and b/rendered/protocol/protocol.pdf differ diff --git a/rendered/protocol/sapling.pdf b/rendered/protocol/sapling.pdf index 0939d0a14..d880c5c89 100644 Binary files a/rendered/protocol/sapling.pdf and b/rendered/protocol/sapling.pdf differ