diff --git a/.github/workflows/render.yml b/.github/workflows/render.yml
index 11fbb8ccc..817429aaa 100644
--- a/.github/workflows/render.yml
+++ b/.github/workflows/render.yml
@@ -13,8 +13,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4.1.7
- with:
- token: ${{ secrets.CI_TOKEN }}
+ # with:
+ # token: ${{ secrets.CI_TOKEN }}
- name: Compile ZIPs and Zcash Protocol Specification
uses: ./.github/actions/render
diff --git a/Makefile b/Makefile
index 660e2d7aa..67edd0845 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/README.rst b/README.rst
index 6a9101c99..79183863e 100644
--- a/README.rst
+++ b/README.rst
@@ -72,7 +72,7 @@ Released ZIPs
211 | Disabling Addition of New Value to the Sprout Chain Value Pool | Final |
212 | Allow Recipient to Derive Ephemeral Secret from Note Plaintext | Final |
213 | Shielded Coinbase | Final |
-
214 | Consensus rules for a Zcash Development Fund | Final |
+
214 | Consensus rules for a Zcash Development Fund | Revision 0: Final, Revision 1: Draft |
215 | Explicitly Defining and Modifying Ed25519 Validation Rules | Final |
216 | Require Canonical Jubjub Point Encodings | Final |
221 | FlyClient - Consensus-Layer Changes | Final |
@@ -84,6 +84,7 @@ Released ZIPs
250 | Deployment of the Heartwood Network Upgrade | Final |
251 | Deployment of the Canopy Network Upgrade | Final |
252 | Deployment of the NU5 Network Upgrade | Final |
+
253 | Deployment of the NU6 Network Upgrade | Proposed |
300 | Cross-chain Atomic Transactions | Proposed |
301 | Zcash Stratum Protocol | Final |
308 | Sprout to Sapling Migration | Final |
@@ -93,6 +94,8 @@ Released ZIPs
321 | Payment Request URIs | Proposed |
401 | Addressing Mempool Denial-of-Service | Active |
1014 | Establishing a Dev Fund for ECC, ZF, and Major Grants | Active |
+
1015 | Block Reward Allocation for Non-Direct Development Funding | Proposed |
+
2001 | Lockbox Funding Streams | Proposed |
Draft ZIPs
@@ -124,9 +127,10 @@ written.
228 | Asset Swaps for Zcash Shielded Assets | Reserved |
230 | Version 6 Transaction Format | Draft |
231 | Decouple Memos from Transaction Outputs | Reserved |
+
233 | Establish the Zcash Sustainability Fund on the Protocol Level | Draft |
+
234 | Smooth Out The Block Subsidy Issuance | Draft |
236 | Blocks should balance exactly | Draft |
245 | Transaction Identifier Digests & Signature Validation for Transparent Zcash Extensions | Draft |
-
253 | Deployment of the NU6 Network Upgrade | Draft |
302 | Standardized Memo Field Format | Draft |
303 | Sprout Payment Disclosure | Reserved |
304 | Sapling Address Signatures | Draft |
@@ -150,7 +154,6 @@ written.
402 | New Wallet Database Format | Reserved |
403 | Verification Behaviour of zcashd | Reserved |
416 | Support for Unified Addresses in zcashd | Reserved |
-
2001 | Lockbox Funding Streams | Draft |
guide-markdown | {Something Short and To the Point} | Draft |
guide | {Something Short and To the Point} | Draft |
@@ -232,7 +235,7 @@ Index of ZIPs
211 | Disabling Addition of New Value to the Sprout Chain Value Pool | Final |
212 | Allow Recipient to Derive Ephemeral Secret from Note Plaintext | Final |
213 | Shielded Coinbase | Final |
-
214 | Consensus rules for a Zcash Development Fund | Final |
+
214 | Consensus rules for a Zcash Development Fund | Revision 0: Final, Revision 1: Draft |
215 | Explicitly Defining and Modifying Ed25519 Validation Rules | Final |
216 | Require Canonical Jubjub Point Encodings | Final |
217 | Aggregate Signatures | Reserved |
@@ -247,6 +250,8 @@ Index of ZIPs
228 | Asset Swaps for Zcash Shielded Assets | Reserved |
230 | Version 6 Transaction Format | Draft |
231 | Decouple Memos from Transaction Outputs | Reserved |
+
233 | Establish the Zcash Sustainability Fund on the Protocol Level | Draft |
+
234 | Smooth Out The Block Subsidy Issuance | Draft |
236 | Blocks should balance exactly | Draft |
239 | Relay of Version 5 Transactions | Final |
243 | Transaction Signature Validation for Sapling | Final |
@@ -255,7 +260,7 @@ Index of ZIPs
250 | Deployment of the Heartwood Network Upgrade | Final |
251 | Deployment of the Canopy Network Upgrade | Final |
252 | Deployment of the NU5 Network Upgrade | Final |
-
253 | Deployment of the NU6 Network Upgrade | Draft |
+
253 | Deployment of the NU6 Network Upgrade | Proposed |
300 | Cross-chain Atomic Transactions | Proposed |
301 | Zcash Stratum Protocol | Final |
302 | Standardized Memo Field Format | Draft |
@@ -302,7 +307,8 @@ Index of ZIPs
1012 | Dev Fund to ECC + ZF + Major Grants | Obsolete |
1013 | Keep It Simple, Zcashers: 10% to ECC, 10% to ZF | Obsolete |
1014 | Establishing a Dev Fund for ECC, ZF, and Major Grants | Active |
-
2001 | Lockbox Funding Streams | Draft |
+
1015 | Block Reward Allocation for Non-Direct Development Funding | Proposed |
+
2001 | Lockbox Funding Streams | Proposed |
guide-markdown | {Something Short and To the Point} | Draft |
guide | {Something Short and To the Point} | Draft |
diff --git a/protocol/Makefile b/protocol/Makefile
index 72b82bdab..c24798d95 100644
--- a/protocol/Makefile
+++ b/protocol/Makefile
@@ -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: 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; }
+.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)
+
+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
diff --git a/protocol/protocol.tex b/protocol/protocol.tex
index 53f3a283e..bf9e6c1cf 100644
--- a/protocol/protocol.tex
+++ b/protocol/protocol.tex
@@ -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 @@
\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 @@
\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 @@
\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 @@
\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 @@
\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 @@
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 @@
\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 @@
\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}.}
@@ -14811,7 +14829,7 @@
\intropart
\lsection{Change History}{changehistory}
-\historyentry{Unreleased}{2024-04-14}
+\historyentry{2024.5.0}{2024-08-28}
\begin{itemize}
\item Add the hyphen in \nh{Daira-Emma} Hopwood.
@@ -14819,6 +14837,7 @@
\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}
diff --git a/rendered/draft-noamchom67-manufacturing-consent.html b/rendered/draft-noamchom67-manufacturing-consent.html
index e5bdf1b9c..8a4bf2958 100644
--- a/rendered/draft-noamchom67-manufacturing-consent.html
+++ b/rendered/draft-noamchom67-manufacturing-consent.html
@@ -10,7 +10,7 @@
Title: Manufacturing Consent; Re-Establishing a Dev Fund for ECC, ZF, ZCG, Qedit, FPF, and ZecHub
Owner: Noam Chom <noamchom1967@gmail.com>
Credits: The ZIP-1014 Authors
-Status: Active
+Status: Withdrawn
Category: Consensus Process
Created: 2024-06-25
License: MIT
diff --git a/rendered/draft-nuttycom-funding-allocation.html b/rendered/draft-nuttycom-funding-allocation.html
index 873d30463..1f1c1a17b 100644
--- a/rendered/draft-nuttycom-funding-allocation.html
+++ b/rendered/draft-nuttycom-funding-allocation.html
@@ -14,7 +14,7 @@
Credits: Daira-Emma Hopwood
Jack Grigg
@Peacemonger (Zcash Forum)
-Status: Draft
+Status: Withdrawn
Category: Consensus
Created: 2024-07-03
License: MIT
diff --git a/rendered/draft-zf-community-dev-fund-2-proposal.html b/rendered/draft-zf-community-dev-fund-2-proposal.html
index 4fdd60eab..13c5b253e 100644
--- a/rendered/draft-zf-community-dev-fund-2-proposal.html
+++ b/rendered/draft-zf-community-dev-fund-2-proposal.html
@@ -10,7 +10,7 @@
Title: Establishing a Hybrid Dev Fund for ZF, ZCG and a Dev Fund Reserve
Owners: Jack Gavigan <jack@zfnd.org>
Credits: The ZIP 1014 Authors
-Status: Draft
+Status: Withdrawn
Category: Consensus Process
Created: 2024-07-01
License: MIT
diff --git a/rendered/index.html b/rendered/index.html
index 8ee5e0a9c..4837413ba 100644
--- a/rendered/index.html
+++ b/rendered/index.html
@@ -47,7 +47,7 @@
211 | Disabling Addition of New Value to the Sprout Chain Value Pool | Final |
212 | Allow Recipient to Derive Ephemeral Secret from Note Plaintext | Final |
213 | Shielded Coinbase | Final |
-
214 | Consensus rules for a Zcash Development Fund | Final |
+
214 | Consensus rules for a Zcash Development Fund | Revision 0: Final, Revision 1: Draft |
215 | Explicitly Defining and Modifying Ed25519 Validation Rules | Final |
216 | Require Canonical Jubjub Point Encodings | Final |
221 | FlyClient - Consensus-Layer Changes | Final |
@@ -59,6 +59,7 @@
250 | Deployment of the Heartwood Network Upgrade | Final |
251 | Deployment of the Canopy Network Upgrade | Final |
252 | Deployment of the NU5 Network Upgrade | Final |
+
253 | Deployment of the NU6 Network Upgrade | Proposed |
300 | Cross-chain Atomic Transactions | Proposed |
301 | Zcash Stratum Protocol | Final |
308 | Sprout to Sapling Migration | Final |
@@ -68,6 +69,8 @@
321 | Payment Request URIs | Proposed |
401 | Addressing Mempool Denial-of-Service | Active |
1014 | Establishing a Dev Fund for ECC, ZF, and Major Grants | Active |
+
1015 | Block Reward Allocation for Non-Direct Development Funding | Proposed |
+
2001 | Lockbox Funding Streams | Proposed |
Draft ZIPs
These are works-in-progress that have been assigned ZIP numbers. These will eventually become either Proposed (and thus Released), or one of Withdrawn, Rejected, or Obsolete.
@@ -89,9 +92,10 @@
228 | Asset Swaps for Zcash Shielded Assets | Reserved |
230 | Version 6 Transaction Format | Draft |
231 | Decouple Memos from Transaction Outputs | Reserved |
+
233 | Establish the Zcash Sustainability Fund on the Protocol Level | Draft |
+
234 | Smooth Out The Block Subsidy Issuance | Draft |
236 | Blocks should balance exactly | Draft |
245 | Transaction Identifier Digests & Signature Validation for Transparent Zcash Extensions | Draft |
-
253 | Deployment of the NU6 Network Upgrade | Draft |
302 | Standardized Memo Field Format | Draft |
303 | Sprout Payment Disclosure | Reserved |
304 | Sapling Address Signatures | Draft |
@@ -115,7 +119,6 @@
402 | New Wallet Database Format | Reserved |
403 | Verification Behaviour of zcashd | Reserved |
416 | Support for Unified Addresses in zcashd | Reserved |
-
2001 | Lockbox Funding Streams | Draft |
guide-markdown | {Something Short and To the Point} | Draft |
guide | {Something Short and To the Point} | Draft |
@@ -178,7 +181,7 @@
211 | Disabling Addition of New Value to the Sprout Chain Value Pool | Final |
212 | Allow Recipient to Derive Ephemeral Secret from Note Plaintext | Final |
213 | Shielded Coinbase | Final |
-
214 | Consensus rules for a Zcash Development Fund | Final |
+
214 | Consensus rules for a Zcash Development Fund | Revision 0: Final, Revision 1: Draft |
215 | Explicitly Defining and Modifying Ed25519 Validation Rules | Final |
216 | Require Canonical Jubjub Point Encodings | Final |
217 | Aggregate Signatures | Reserved |
@@ -193,6 +196,8 @@
228 | Asset Swaps for Zcash Shielded Assets | Reserved |
230 | Version 6 Transaction Format | Draft |
231 | Decouple Memos from Transaction Outputs | Reserved |
+
233 | Establish the Zcash Sustainability Fund on the Protocol Level | Draft |
+
234 | Smooth Out The Block Subsidy Issuance | Draft |
236 | Blocks should balance exactly | Draft |
239 | Relay of Version 5 Transactions | Final |
243 | Transaction Signature Validation for Sapling | Final |
@@ -201,7 +206,7 @@
250 | Deployment of the Heartwood Network Upgrade | Final |
251 | Deployment of the Canopy Network Upgrade | Final |
252 | Deployment of the NU5 Network Upgrade | Final |
-
253 | Deployment of the NU6 Network Upgrade | Draft |
+
253 | Deployment of the NU6 Network Upgrade | Proposed |
300 | Cross-chain Atomic Transactions | Proposed |
301 | Zcash Stratum Protocol | Final |
302 | Standardized Memo Field Format | Draft |
@@ -248,7 +253,8 @@
1012 | Dev Fund to ECC + ZF + Major Grants | Obsolete |
1013 | Keep It Simple, Zcashers: 10% to ECC, 10% to ZF | Obsolete |
1014 | Establishing a Dev Fund for ECC, ZF, and Major Grants | Active |
-
2001 | Lockbox Funding Streams | Draft |
+
1015 | Block Reward Allocation for Non-Direct Development Funding | Proposed |
+
2001 | Lockbox Funding Streams | Proposed |
guide-markdown | {Something Short and To the Point} | Draft |
guide | {Something Short and To the Point} | Draft |
diff --git a/rendered/protocol/blossom.pdf b/rendered/protocol/blossom.pdf
index 6ebbbe543..e8a948e4e 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 bd1cb8897..e8a9667ab 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 ba7423ba5..9faa3e3dc 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 6091c70e2..94332100c 100644
Binary files a/rendered/protocol/nu5.pdf and b/rendered/protocol/nu5.pdf differ
diff --git a/rendered/protocol/protocol.pdf b/rendered/protocol/protocol.pdf
index 6091c70e2..94332100c 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 8304c988d..ebed3fa37 100644
Binary files a/rendered/protocol/sapling.pdf and b/rendered/protocol/sapling.pdf differ
diff --git a/rendered/zip-0000.html b/rendered/zip-0000.html
index 83e34a33f..a0be30265 100644
--- a/rendered/zip-0000.html
+++ b/rendered/zip-0000.html
@@ -11,6 +11,7 @@
Owners: Jack Grigg <str4d@electriccoin.co>
Conrado Gouvêa <conrado@zfnd.org>
Arya <arya@zfnd.org>
+ Kris Nuttycombe <kris@nutty.land>
Original-Authors: Daira-Emma Hopwood
Josh Cincinnati
George Tankersley
@@ -60,7 +61,7 @@
ZIP Editors
The current ZIP Editors are:
- - Jack Grigg, associated with the Electric Coin Company;
+ - Jack Grigg and Kris Nuttycombe, associated with the Electric Coin Company;
- Conrado Gouvêa and Arya, associated with the Zcash Foundation.
All can be reached at zips@z.cash. The current design of the ZIP Process dictates that there are always at least two ZIP Editors: at least one from the Electric Coin Company and at least one from the Zcash Foundation.
diff --git a/rendered/zip-0214.html b/rendered/zip-0214.html
index 1e49cae61..be8647c76 100644
--- a/rendered/zip-0214.html
+++ b/rendered/zip-0214.html
@@ -9,44 +9,135 @@
ZIP: 214
Title: Consensus rules for a Zcash Development Fund
Owners: Daira-Emma Hopwood <daira-emma@electriccoin.co>
-Status: Final
+ Kris Nuttycombe <kris@nutty.land>
+Status: Revision 0: Final, Revision 1: Draft
Category: Consensus
Created: 2020-02-28
License: MIT
Discussions-To: <https://forum.zcashcommunity.com/t/community-sentiment-polling-results-nu4-and-draft-zip-1014/35560>
Terminology
The key words "MUST", "SHALL", "SHOULD", and "MAY" in this document are to be interpreted as described in BCP 14 when, and only when, they appear in all capitals.
- The term "Zcash" in this document is to be interpreted as described in the Zcash Trademark Donation and License Agreement ( or successor agreement).
+ The term "Zcash" in this document is to be interpreted as described in the Zcash Trademark Donation and License Agreement ( or successor agreement) while that agreement is in effect. On termination of that agreement, the term "Zcash" will refer to the continuations of the same Mainnet and Testnet block chains as determined by social consensus.
The term "network upgrade" in this document is to be interpreted as described in ZIP 200 and the Zcash Trademark Donation and License Agreement ( or successor agreement).
The term "block subsidy" in this document is to be interpreted as described in section 3.10 of the Zcash Protocol Specification .
The term "halving" in this document are to be interpreted as described in sections 7.8 of the Zcash Protocol Specification .
- The terms "Bootstrap Project" (or "BP"), "Electric Coin Company" (or "ECC"), "Zcash Foundation" (or "ZF"), "Major Grants", "BP slice", "ZF slice", and "MG slice" in this document are to be interpreted as described in ZIP 1014 .
- The terms "Testnet" and "Mainnet" are to be interpreted as described in section 3.12 of the Zcash Protocol Specification .
+ The terms "Bootstrap Project" (or "BP"), "Electric Coin Company" (or "ECC"), "Zcash Foundation" (or "ZF"), "Major Grants", "BP slice", "ZF slice", and "MG slice" in this document are to be interpreted as described in ZIP 1014 .
+ The terms "Zcash Community Grants (or "ZCG") and "Financial Privacy Foundation" (or "FPF") in this document are to be interpreted as described in ZIP 1015 .
+ The terms "Testnet" and "Mainnet" are to be interpreted as described in section 3.12 of the Zcash Protocol Specification .
"Canopy" is the code-name for the fifth Zcash network upgrade, also known as Network Upgrade 4.
+ "NU6" is the code-name for the seventh Zcash network upgrade, also known as Network Upgrade 6.
Abstract
- This ZIP describes consensus rule changes interpreting the proposed structure of the Zcash Development Fund, which is to be enacted in Network Upgrade 4 and last for 4 years.
+ Revision 0 of this ZIP describes consensus rule changes interpreting the proposed structure of the Zcash Development Fund, which is to be enacted in Network Upgrade 4 and last for 4 years.
+ Revision 1 of this ZIP describes consensus rule changes related to funding of Zcash development via block rewards, to be enacted at Network Upgrade 6 and lasting for 1 year.
Applicability
This ZIP concerns the Zcash Mainnet and Testnet, and is not intended to be applicable to other block chains using Zcash technology.
Motivation
- Motivation for the Zcash Development Fund itself is considered in ZIP 1014 , which gives a high-level description of the intended structure of the fund.
- An important motivation for describing the consensus rules in a separate ZIP is to avoid making unintended changes to ZIP 1014, which has already been agreed between ECC, ZF, and the Zcash community. This facilitates critically assessing whether the consensus rule changes accurately reflect the intent of ZIP 1014.
+ Motivation for the Zcash Development Fund itself is considered in ZIPs 1014 and 1015 , which give high-level descriptions of the intended structure of the funds.
+ An important motivation for describing the consensus rules in a separate ZIP is to avoid making unintended changes to ZIPs 1014 and 1015, which have already been agreed between ECC, ZF, and the Zcash community. This facilitates critically assessing whether the consensus rule changes accurately reflect the intent of ZIPs 1014 and 1015.
Requirements
- The primary requirement of this ZIP is to make changes to consensus rules necessary and sufficient to implement the intent of ZIP 1014.
+ The primary requirement of this ZIP is to make changes to consensus rules necessary and sufficient to implement the intent of ZIPs 1014 and 1015.
The Zcash Development Fund distributes funding in ZEC obtained from block subsidies on Mainnet. This ZIP should also specify corresponding rules, addresses, and activation height for Testnet, in order to allow testing and auditing of the design and implementation within sufficient lead time before activation on Mainnet.
Non-requirements
- This ZIP is not required to enforce provisions of ZIP 1014 that fall outside what is implementable by Zcash consensus rules.
+ This ZIP is not required to enforce provisions of ZIP 1014 or ZIP 1015 that fall outside what is implementable by Zcash consensus rules.
Specification
- The Blossom network upgrade changed the height of the first halving to block height 1046400 , as a consequence of reducing the block target spacing from 150 seconds to 75 seconds.
- Since ZIP 1014 specifies that the Zcash Development Fund starts at the first halving, the activation height of Canopy on Mainnet therefore SHALL be 1046400.
- ZIP 207 SHALL be activated in Canopy.
- The following funding streams are defined for Mainnet:
-
+ Revisions
+
+ - Revision 0: The initial version of this specification, as agreed upon by the Zcash community in ZIP 1014 .
+
+
+ - Revision 1: Funding streams defined to start at Zcash's second halving, and last for one year, as agreed upon in ZIP 1015 .
+
+
+ Activation
+ The Blossom network upgrade changed the height of the first halving to block height 1046400 , as a consequence of reducing the block target spacing from 150 seconds to 75 seconds.
+ Since ZIP 1014 specifies that the Zcash Development Fund starts at the first halving, the activation height of Canopy on Mainnet therefore SHALL be 1046400.
+ Revision 0 of ZIP 207 SHALL be activated in Canopy.
+ Since ZIP 1015 specifies that the specified funding streams start at the second halving, the activation height of NU6 on Mainnet therefore SHALL be 2726400.
+ Revision 1 of ZIP 207 SHALL be activated in NU6.
+ As specified in , a funding stream is active for a span of blocks that includes the block at its start height, but excludes the block at its end height.
+
+ Funding Streams
+ As of Revision 0, the following funding streams are defined for Mainnet:
+
+
+
+
+ Stream |
+ Numerator |
+ Denominator |
+ Start height |
+ End height |
+
+
+
+
+ FS_ZIP214_BP |
+ 7 |
+ 100 |
+ 1046400 |
+ 2726400 |
+
+
+ FS_ZIP214_ZF |
+ 5 |
+ 100 |
+ 1046400 |
+ 2726400 |
+
+
+ FS_ZIP214_MG |
+ 8 |
+ 100 |
+ 1046400 |
+ 2726400 |
+
+
+
+
+ As of Revision 0, the following funding streams are defined for Testnet:
+
+
+
+
+ Stream |
+ Numerator |
+ Denominator |
+ Start height |
+ End height |
+
+
+
+
+ FS_ZIP214_BP |
+ 7 |
+ 100 |
+ 1028500 |
+ 2796000 |
+
+
+ FS_ZIP214_ZF |
+ 5 |
+ 100 |
+ 1028500 |
+ 2796000 |
+
+
+ FS_ZIP214_MG |
+ 8 |
+ 100 |
+ 1028500 |
+ 2796000 |
+
+
+
+
+ As of Revision 1, the following additional streams are defined for Mainnet:
@@ -59,32 +150,22 @@
- FS_ZIP214_BP |
- 7 |
- 100 |
- 1046400 |
- 2726400 |
-
-
- FS_ZIP214_ZF |
- 5 |
+ FS_DEFERRED |
+ 12 |
100 |
- 1046400 |
2726400 |
+ 3146400 |
- FS_ZIP214_MG |
+ FS_FPF_ZCG |
8 |
100 |
- 1046400 |
2726400 |
+ 3146400 |
-
- As specified in , a funding stream is active for a span of blocks that includes the block at its start height, but excludes the block at its end height.
- The following funding streams are defined for Testnet:
-
+ As of Revision 1, the following additional streams are defined for Testnet:
@@ -97,50 +178,47 @@
- FS_ZIP214_BP |
- 7 |
+ FS_DEFERRED |
+ 12 |
100 |
- 1028500 |
- 2796000 |
+ 2976000 |
+ 3396000 |
- FS_ZIP214_ZF |
- 5 |
- 100 |
- 1028500 |
- 2796000 |
-
-
- FS_ZIP214_MG |
+ FS_FPF_ZCG |
8 |
100 |
- 1028500 |
- 2796000 |
+ 2976000 |
+ 3396000 |
-
- Notes:
-
- - The block heights of halvings are different between Testnet and Mainnet, as a result of different activation heights for the Blossom network upgrade (which changed the block target spacing). The end height of these funding streams corresponds to the second halving on each network.
- - On Testnet, the activation height of Canopy will be before the first halving. Therefore, the consequence of the above rules for Testnet is that the amount sent to each Zcash Development Fund recipient address will initially (before Testnet block height 1116000) be double the number of currency units as the corresponding initial amount on Mainnet. This reduces to the same number of currency units as on Mainnet, from Testnet block heights 1116000 (inclusive) to 2796000 (exclusive).
-
- Dev Fund Recipient Addresses
+ Notes for Revision 0:
+
+ - The block heights of halvings are different between Testnet and Mainnet, as a result of different activation heights for the Blossom network upgrade (which changed the block target spacing). The end height of these funding streams corresponds to the second halving on each network.
+ - On Testnet, the activation height of Canopy will be before the first halving. Therefore, the consequence of the above rules for Testnet is that the amount sent to each Zcash Development Fund recipient address will initially (before Testnet block height 1116000) be double the number of currency units as the corresponding initial amount on Mainnet. This reduces to the same number of currency units as on Mainnet, from Testnet block heights 1116000 (inclusive) to 2796000 (exclusive).
+
+ Notes for Revision 1:
+
+ - The new funding streams begin at the second halving for Mainnet, but the second halving on Testnet occurred prior to the introduction of the new funding streams. For both new funding streams on each network, the associated duration corresponds to approximately one year's worth of blocks.
+
+
+
+ Dev Fund Recipient Addresses for Revision 0
For each of Testnet and Mainnet, before deploying this ZIP in a node implementation with the activation height set for that network, each of the parties (ECC on behalf of BP; and ZF) SHALL generate sequences of recipient addresses to be used for each stream in each funding period:
- ECC SHALL generate the addresses for the
FS_ZIP214_BP
funding stream, which on Mainnet corresponds to the BP slice;
- ZF SHALL generate the addresses for the
FS_ZIP214_ZF
and FS_ZIP214_MG
funding streams, which on Mainnet correspond to the ZF slice and MG slice respectively.
Within each stream, the addresses MAY be independent, or MAY be repeated between funding periods. Each party SHOULD take account of operational security issues associated with potential compromise of the associated spending keys.
- Funds sent to each Mainnet funding stream SHALL be governed by all requirements on the corresponding slice specified in ZIP 1014 .
+ Funds sent to each Mainnet funding stream SHALL be governed by all requirements on the corresponding slice specified in ZIP 1014 .
No requirements are imposed on the use of funds sent to Testnet funding streams.
Direct-grant option
- ZIP 1014 specifies a "direct-grant option" by which, if agreed upon by both ECC and ZF before Canopy activation, some portion of the MG slice may be directly assigned to the grantee(s), rather than accepted and disbursed by ZF.
- The funding stream mechanism allows for this option by adding a funding stream corresponding to each direct grantee, with addresses generated by ZF. In this case the total value of funding streams assigned to direct grantees MUST be subtracted from the value of the funding stream for the remaining MG slice (or, if all Major Grants are direct, replace the funding stream for the MG slice).
- For each network upgrade after Canopy requiring modifications to the set of direct grantees, a separate ZIP SHOULD be published specifying those modifications.
+ ZIP 1014 specified a "direct-grant option" by which, if agreed upon by both ECC and ZF before Canopy activation, some portion of the MG slice may be directly assigned to the grantee(s), rather than accepted and disbursed by ZF. However, this option was never taken up.
- Mainnet Recipient Addresses
+
+ Mainnet Recipient Addresses for Revision 0
FS_ZIP214_BP.AddressList[0..47] = [
"t3LmX1cxWPPPqL4TZHx42HU3U5ghbFjRiif",
"t3Toxk1vJQ6UjWQ42tUJz2rV2feUWkpbTDs",
@@ -197,7 +275,12 @@
FS_ZIP214_MG.AddressList[0..47] = ["t3XyYW8yBFRuMnfvm5KLGFbEVz25kckZXym"] * 48
(i.e. FS_ZIP214_ZF.AddressList
and FS_ZIP214_MG.AddressList
for Mainnet each consist of 48 repetitions of the same address).
- Testnet Recipient Addresses
+
+ Mainnet Recipient Addresses for Revision 1
+ <TBD>
+
+
+ Testnet Recipient Addresses for Revision 0
FS_ZIP214_BP.AddressList[0..50] = [
"t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz",
"t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz",
@@ -257,14 +340,21 @@
FS_ZIP214_MG.AddressList[0..50] = ["t2Gvxv2uNM7hbbACjNox4H6DjByoKZ2Fa3P"] * 51
(i.e. FS_ZIP214_ZF.AddressList
and FS_ZIP214_MG.AddressList
for Testnet each consist of 51 repetitions of the same address).
+
+ Testnet Recipient Addresses for Revision 1
+
+ FS_FPF_ZCG.AddressList[0..12] = ["t2HifwjUj9uyxr9bknR8LFuQbc98c3vkXtu"] * 13
+
+
- Rationale
- The rationale for ZF generating the addresses for the FS_ZIP214_MG
funding stream is that ZF is the financial recipient of the MG slice as specified in ZIP 1014.
+
+
+ The rationale for ZF generating the addresses for the FS_ZIP214_MG
funding stream is that ZF is the financial recipient of the MG slice as specified in ZIP 1014.
Generation of recipient addresses for Testnet is specified to be done by the same parties as on Mainnet, in order to allow practicing each party's security procedures.
It was judged to be unnecessary to have a mechanism to update funding stream definitions (in case of security breach or changes to direct grant recipients) other than at network upgrades.
Deployment
- This proposal is intended to be deployed with Canopy.
+ Revision 0 of this proposal was deployed with Canopy. Revision 1 of this proposal is intended to be deployed with NU6.
References
@@ -287,7 +377,7 @@
3 |
- Zcash Protocol Specification, Version 2021.2.16. Section 3.10: Block Subsidy, Funding Streams, and Founders' Reward |
+ Zcash Protocol Specification, Version 2023.4.0 [NU5]. Section 3.10: Block Subsidy, Funding Streams, and Founders' Reward |
@@ -295,7 +385,7 @@
4 |
- Zcash Protocol Specification, Version 2021.2.16. Section 3.12: Mainnet and Testnet |
+ Zcash Protocol Specification, Version 2023.4.0 [NU5]. Section 3.12: Mainnet and Testnet |
@@ -303,7 +393,7 @@
5 |
- Zcash Protocol Specification, Version 2021.2.16. Section 7.8: Calculation of Block Subsidy, Funding Streams, and Founders' Reward |
+ Zcash Protocol Specification, Version 2023.4.0 [NU5]. Section 7.8: Calculation of Block Subsidy, Funding Streams, and Founders' Reward |
@@ -355,14 +445,30 @@
-
+ZIP: 233
+Title: Establish the Zcash Sustainability Fund on the Protocol Level
+Owners: Jason McGee <jason@shieldedlabs.com>
+ Mark Henderson <mark@equilibrium.co>
+ Tomek Piotrowski <tomek@eiger.co>
+ Mariusz Pilarek <mariusz@eiger.co>
+Original-Authors: Nathan Wilcox
+Credits:
+Status: Draft
+Category: Consensus / Ecosystem
+Created: 2023-08-16
+License: BSD-2-Clause
+Terminology
+The key words “MUST”, “SHOULD”, “SHOULD NOT”, “MAY”, “RECOMMENDED”,
+“OPTIONAL”, and “REQUIRED” in this document are to be interpreted as
+described in RFC 2119. [1]
+The term “network upgrade” in this document is to be interpreted as
+described in ZIP 200. [2]
+“Block Subsidy” - the algorithmic issuance of ZEC on block creation –
+part of the consensus rules. Split between the miner and the Dev Fund.
+Also known as Block Reward.
+“Issuance” - The method by which unmined or unissued ZEC is converted
+to ZEC available to users of the network
+“We” - the ZIP authors, owners listed in the above front matter
+“MAX_MONEY
” is the ZEC supply cap. For simplicity, this
+ZIP defines it to be 21,000,000 ZEC
, although this is
+slightly larger than the actual supply cap of the original ZEC issuance
+mechanism.
+Abstract
+This ZIP describes the motivation, the necessary changes for, and the
+implementation specifications for the Zcash Sustainability Fund (ZSF).
+The ZSF is a proposed alteration to the block rewards system and
+accounting of unmined ZEC that allows for other sources of funding
+besides unissued ZEC. This new mechanism for deposits – that new
+applications or protocol designs can use to strengthen the long-term
+sustainability of the network – will likely be an important step for
+future economic upgrades, such as a transition to Proof of Stake or
+Zcash Shielded Assets, and other potential protocol fees and user
+applications.
+The changes in this ZIP are ultimately minimal, only requiring for
+the node to track state in the form of a ZSF_BALANCE
, and
+for a new transaction field to be added, called
+ZSF_DEPOSIT
. While wallet developer would be encouraged to
+add the ZSF_DEPOSIT
field to their UIs, no changes or new
+behavior are absolutely required for developers or ZEC holders.
+This ZIP does not change the current ZEC block subsidy issuance
+schedule. Any additional amounts paid into the sustainability fund are
+reserved for use in future ZIPs.
+Motivation
+The Zcash network’s operation and development relies fundamentally on
+the block reward system inherited from Bitcoin. This system currently
+looks like this:
+
+- At Every New Block:
+
+- Miner and funding streams are rewarded a constant amount via
+unissued ZEC (this constant amount halves at specified heights)
+- Miner is rewarded via Transaction fees
+
(inputs - outputs)
+
+
+The Zcash Sustainability Fund is a proposed replacement to that
+payout mechanism, with the relevant parts in bold below:
+
+- Unmined ZEC is now accounted for as
+
ZSF_BALANCE
+- Transaction includes optional contributions to ZSF via a
+
ZSF_DEPOSIT
field
+- Thus, at Every New Block:
+
+- Miner and funding streams rewarded the same constant amount,
+but from
ZSF_BALANCE
(this constant amount
+still halves at specified heights)
+- Miner is rewarded via Transaction fees
+
(inputs - outputs)
, where outputs
+includes the ZSF_DEPOSIT
amount
+
+
+For example, an end-user wallet application could have an option to
+contribute a portion of a transaction to the ZSF, which would be
+included in a ZSF_DEPOSIT
field in the transaction, to be
+taken into account by the Zcash nodes.
+This quite simple alteration has – in our opinion – a multitude of
+benefits:
+
+- Long Term Consensus Sustainability: This mechanism
+supports long-term consensus sustainability by addressing concerns about
+the sustainability of the network design shared by Bitcoin-like systems
+through the establishment of deposits into the Sustainability Fund to
+augment block rewards, ensuring long-term sustainability as the issuance
+rate of Zcash drops and newly issued ZEC decreases over time.
+- Benefits to ZEC Holders: Deposits to the ZSF slow
+down the payout of ZEC, temporarily reducing its available supply,
+benefiting current holders of unencumbered active ZEC in proportion to
+their holdings without requiring them to opt into any scheme,
+introducing extra risk, active oversight, or accounting complexity.
+- Recovery of “Soft-Burned” Funds: In some instances,
+such as miners not claiming all available rewards, some ZEC goes
+unaccounted for, though not formally burned. This proposal would recover
+it through the
ZSF_BALANCE
mechanism described below.
+
+Specification
+In practice, The Zcash Sustainability Fund is a single global balance
+maintained by the node state and contributed to via a single transaction
+field. This provides the economic and security support described in the
+motivation section, while also importantly keeping the fund payouts
+extremely simple to describe and implement.
+The two modifications are: 1. The re-accounting of unmined ZEC as a
+node state field called ZSF_BALANCE
2. The addition of a
+transaction field called ZSF_DEPOSIT
+ZSF_BALANCE
+The ZEC issuance mechanism is re-defined to remove funds from
+ZSF_BALANCE
, which is initially set to
+MAX_MONEY
at the genesis block.
+Consensus nodes are then required to track new per-block state:
+
+ZSF_BALANCE[height] : u64 [zatoshi]
+
+The state is a single 64 bit integer (representing units of
+zatoshi
) at any given block height, height, representing the Sustainability Fund
+balance at that height. The ZSF_BALANCE
can be calculated
+using the following formula:
+$\mathsf{ZsfBalanceAfter}(\mathsf{height})
+= \mathsf{MAX\_MONEY} + \sum_{h = 0}^{\mathsf{height}}
+(\mathsf{ZsfDeposit}(h) + \mathsf{Unclaimed}(h) -
+\mathsf{BlockSubsidy}(h))$
+where Unclaimed(height) is the
+portion of the block subsidy and miner fees that are unclaimed for the
+block at the given height.
+The block at height height commits
+to ZsfBalanceAfter(height) as part of a
+new block commitment in the block header, at the end of the
+hashBlockCommitments
chain in ZIP-244.
+TODO ZIP editors: consider introducing a chain state commitment hash
+tree. (When we get closer to the network upgrade, we will have a better
+idea what commitments that network upgrade needs.)
+Deposits into the
+Sustainability Fund
+Sustainability fund deposits can be made via the new
+zsfDeposit
field. This can be done by: - ZEC fund holders,
+in non-coinbase transactions; - Zcash miners, in coinbase
+transactions.
+In transaction versions without this new field: - unclaimed miner
+fees and rewards in coinbase transactions are
+re-defined as deposits into the sustainability fund, and - there are no
+sustainability fund deposits from non-coinbase transactions.
+Note: older transaction versions can continue to be supported after a
+network upgrade. For example, NU5 supports both v4 and v5 transaction
+formats, for both coinbase and non-coinbase transactions.
+zsfDeposit
+fields in transactions
+Each transaction can dedicate some of its excess funds to the ZSF,
+and the remainder becomes the miner fee, with any excess miner
+fee/reward going to the ZSF
+This is achieved by adding a new field to the common transaction
+fields [#zip-0225-transaction-format]:
+
+zsfDeposit : u64 [zatoshi]
+
+The ZSF_BALANCE[H]
for a block at height H
+can be calculated given a value of ZSF_BALANCE[H-1]
and the
+set of transactions contained in that block. First, the
+ZSF_DEPOSIT[H]
is calculated based solely on
+ZSF_BALANCE[H-1]
. This is subtracted from the previous
+block’s balance to be distributed as part of the block reward. Second,
+the sum of all the ZSF_DEPOSIT
fields of all transactions
+in the block is added to the balance.
+Non-Coinbase Transactions
+If the ZSF_DEPOSIT
field is not present in an older
+transaction version, it is defined to be zero for non-coinbase
+transactions.
+Consensus Rule Changes
+
+- Transparent inputs to a transaction insert value into a transparent
+transaction value pool associated with the transaction. Transparent
+outputs and sustainability fund deposits remove value
+from this pool.
+
+Coinbase Transactions
+Any excess miner fee/reward is sent to the ZSF.
+In new blocks, this deposit is tracked via the
+ZSF_DEPOSIT
field in coinbase transactions.
+If the ZSF_DEPOSIT
field is not present in a coinbase
+transaction with an older transaction version, it is defined as the
+value of any unspent miner fee and miner reward. This re-defines these
+previously unspendable funds as ZSF deposits.
+Consensus Rule Changes
+
+- The remaining value in the transparent transaction value pool of a
+coinbase transaction is deposited in the sustainability
+fund.
+
+ZSF_DEPOSIT
+Requirements
+
+- ZIP 230 [3] must be updated to include
+
ZSF_DEPOSIT
.
+- ZIP 244 [4] must be updated as well to include
+
ZSF_DEPOSIT
.
+
+Rationale
+All technical decisions in this ZIP are balanced between the
+necessary robustness of the ZSF mechanics, and simplicity of
+implementation.
+ZSF_BALANCE
as node
+state
+Tracking the ZSF_BALANCE
value as a node state using the
+above formula is very simple in terms of implementation, and should work
+correctly given that the node implementations calculate the value
+according to the specifications.
+ZSF_DEPOSIT
+as explicit transaction field
+An explicit value distinguishes the ZEC destined to Sustainability
+Fund deposits from the implicit transaction fee. Explicitness also
+ensures any arithmetic flaws in any implementations are more likely to
+be observed and caught immediately.
+Deployment
+This ZIP is proposed to activate with Network Upgrade (TODO ZIP
+editors).
+References
+[1]: Key words for use in
+RFCs to Indicate Requirement Levels
+[2]: ZIP 200: Network
+Upgrade Mechanism
+[3]: ZIP
+230: v6 transactions, including ZSAs
+[4]: ZIP 244:
+Transaction Identifier Non-Malleability
+
diff --git a/rendered/zip-0233.html b/rendered/zip-0233.html
new file mode 100644
index 000000000..e9c1b5254
--- /dev/null
+++ b/rendered/zip-0233.html
@@ -0,0 +1,243 @@
+
+
+