diff --git a/Makefile b/Makefile index e32d73bd..143061e8 100644 --- a/Makefile +++ b/Makefile @@ -11,13 +11,15 @@ index.html: README.rst $(eval TITLE::=$(shell echo '$(basename $<)' | sed -r 's|zip-0{0,3}|ZIP |'): $(shell grep -E '^(\.\.)?\s*Title:' $< |sed 's|.*Title:\s*||')) rst2html5 -v --title="$(TITLE)" $< >$@ sed -i 's|||' $@ + sed -i 's|||' $@ %.html: %.rst $(eval TITLE::=$(shell echo '$(basename $<)' | sed -r 's|zip-0{0,3}|ZIP |'): $(shell grep -E '^(\.\.)?\s*Title:' $< |sed 's|.*Title:\s*||')) rst2html5 -v --title="$(TITLE)" $< >$@ sed -i 's|||' $@ + sed -i 's|||' $@ -README.rst: makeindex.sh README.template +README.rst: makeindex.sh README.template $(filter-out README.rst,$(wildcard *.rst)) ./makeindex.sh | cat README.template - >README.rst .PHONY: clean diff --git a/README.rst b/README.rst index ff8a832f..56baeaf7 100644 --- a/README.rst +++ b/README.rst @@ -9,6 +9,9 @@ cryptocurrency `__. Participation in the Zcash project is subject to a `Code of Conduct `__. +The ZIP process is documented in `ZIP 0 `__. + + NU3 ZIPs for consideration -------------------------- @@ -63,20 +66,33 @@ Index of ZIPs - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ZIP Title Status
0 ZIP Process Active
32 Shielded Hierarchical Deterministic Wallets Final
143 Transaction Signature Verification for Overwinter Final
200 Network Upgrade Mechanism Final
201 Network Peer Management for Overwinter Final
202 Version 3 Transaction Format for Overwinter Final
203 Transaction Expiry Final
205 Deployment of the Sapling Network Upgrade Final
206 Deployment of the Blossom Network Upgrade Draft
207 Split Founders' Reward Withdrawn
208 Shorter Block Target Spacing Implemented
209 Prohibit Negative Shielded Value Pool Final
210 Sapling Anchor Deduplication within Transactions Draft
243 Transaction Signature Verification for Sapling Final
308 Sprout to Sapling Migration Final
guide {Something Short and To the Point} Draft
0 ZIP Process Active
32 Shielded Hierarchical Deterministic Wallets Final
143 Transaction Signature Verification for Overwinter Final
200 Network Upgrade Mechanism Final
201 Network Peer Management for Overwinter Final
202 Version 3 Transaction Format for Overwinter Final
203 Transaction Expiry Final
205 Deployment of the Sapling Network Upgrade Final
206 Deployment of the Blossom Network Upgrade Draft
207 Split Founders' Reward Withdrawn
208 Shorter Block Target Spacing Implemented
209 Prohibit Negative Shielded Value Pool Final
210 Sapling Anchor Deduplication within Transactions Draft
243 Transaction Signature Verification for Sapling Final
308 Sprout to Sapling Migration Final
401 Addressing mempool denial-of-service Final
1001 Keep the Block Distribution as Initially Defined — 90% to Miners Draft
1002 Opt-in Donation Feature Draft
1003 20% Split Evenly Between the ECC and the Zcash Foundation, and a Voting System Mandate Draft
1004 Miner-Directed Dev Fund Draft
1005 Zcash Community Funding System Draft
1006 Development Fund of 10% to a 2-of-3 Multisig with Community-Involved Third Entity Draft
1007 Enforce Development Fund Commitments with a Legal Charter Draft
1008 Fund ECC for Two More Years Draft
1009 Five-Entity Strategic Council Draft
1010 Compromise Dev Fund Proposal With Diverse Funding Streams Draft
1011 Decentralize the Dev Fee Draft
1013 Keep It Simple, Zcashers: 10% to ECC, 10% to ZF Draft
guide {Something Short and To the Point} Draft
diff --git a/README.template b/README.template index 834cc200..83458292 100644 --- a/README.template +++ b/README.template @@ -9,6 +9,9 @@ cryptocurrency `__. Participation in the Zcash project is subject to a `Code of Conduct `__. +The ZIP process is documented in `ZIP 0 `__. + + NU3 ZIPs for consideration -------------------------- diff --git a/assets/css/style.css b/assets/css/style.css index 3e3467a5..a25d3344 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -1 +1 @@ -@import url("https://fonts.googleapis.com/css?family=Chivo:900");.highlight table td{padding:5px}.highlight table pre{margin:0}.highlight,.highlight .w{color:#d0d0d0}.highlight .err{color:#151515;background-color:#ac4142}.highlight .c,.highlight .cd,.highlight .cm,.highlight .c1,.highlight .cs{color:#888}.highlight .cp{color:#f4bf75}.highlight .nt{color:#f4bf75}.highlight .o,.highlight .ow{color:#d0d0d0}.highlight .p,.highlight .pi{color:#d0d0d0}.highlight .gi{color:#90a959}.highlight .gd{color:#ac4142}.highlight .gh{color:#6a9fb5;font-weight:bold}.highlight .k,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kv{color:#aa759f}.highlight .kc{color:#d28445}.highlight .kt{color:#d28445}.highlight .kd{color:#d28445}.highlight .s,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .s2,.highlight .sh,.highlight .sx,.highlight .s1{color:#90a959}.highlight .sr{color:#75b5aa}.highlight .si{color:#8f5536}.highlight .se{color:#8f5536}.highlight .nn{color:#f4bf75}.highlight .nc{color:#f4bf75}.highlight .no{color:#f4bf75}.highlight .na{color:#6a9fb5}.highlight .m,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .il,.highlight .mo,.highlight .mb,.highlight .mx{color:#90a959}.highlight .ss{color:#90a959}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{padding:0;margin:0;font:inherit;font-size:100%;vertical-align:baseline;border:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}table{border-spacing:0;border-collapse:collapse}body{font-family:'Helvetica Neue', Helvetica, Arial, serif;font-size:1em;line-height:1.5;color:#6d6d6d;text-shadow:0 1px 0 rgba(255,255,255,0.8);background:#e7e7e7 url(../images/body-bg.png) 0 0 repeat}a{color:#d5000d}a:hover{color:#c5000c}header{padding-top:35px;padding-bottom:25px}header h1{font-family:'Chivo', 'Helvetica Neue', Helvetica, Arial, serif;font-size:48px;font-weight:900;line-height:1.2;color:#303030;letter-spacing:-1px}header h2{font-size:24px;font-weight:normal;line-height:1.3;color:#aaa;letter-spacing:-1px}#container{min-height:595px;background:transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat}.inner{width:620px;margin:0 auto}#container .inner img{max-width:100%}#downloads{margin-bottom:40px}a.button{display:block;float:left;width:179px;padding:12px 8px 12px 8px;margin-right:14px;font-size:15px;font-weight:bold;line-height:25px;color:#303030;background:#fdfdfd;background:-moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fdfdfd), color-stop(100%, #f2f2f2));background:-webkit-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%);background:-o-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%);background:-ms-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%);background:linear-gradient(to top, #fdfdfd 0%, #f2f2f2 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 );border-top:solid 1px #cbcbcb;border-right:solid 1px #b7b7b7;border-bottom:solid 1px #b3b3b3;border-left:solid 1px #b7b7b7;border-radius:30px;-webkit-box-shadow:10px 10px 5px #888;-moz-box-shadow:10px 10px 5px #888;box-shadow:0px 1px 5px #e8e8e8;-moz-border-radius:30px;-webkit-border-radius:30px}a.button:hover{background:#fafafa;background:-moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fdfdfd), color-stop(100%, #f6f6f6));background:-webkit-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%);background:-o-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%);background:-ms-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%);background:linear-gradient(to top, #fdfdfd 0%, #f6f6f6, 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 );border-top:solid 1px #b7b7b7;border-right:solid 1px #b3b3b3;border-bottom:solid 1px #b3b3b3;border-left:solid 1px #b3b3b3}a.button span{display:block;height:23px;padding-left:50px}#download-zip span{background:transparent url(../images/zip-icon.png) 12px 50% no-repeat}#download-tar-gz span{background:transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat}#view-on-github span{background:transparent url(../images/octocat-icon.png) 12px 50% no-repeat}#view-on-github{margin-right:0}code,pre{margin-bottom:30px;font-family:Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;font-size:14px;color:#222}code{padding:0 3px;background-color:#f2f2f2;border:solid 1px #ddd}pre{padding:20px;overflow:auto;color:#f2f2f2;text-shadow:none;background:#303030}pre code{padding:0;color:#f2f2f2;background-color:#303030;border:none}ul,ol,dl{margin-bottom:20px}hr{height:1px;padding-bottom:1em;margin-top:1em;line-height:1px;background:transparent url("../images/hr.png") 50% 0 no-repeat;border:none}strong{font-weight:bold}em{font-style:italic}table{width:100%;border:1px solid #ebebeb}th{font-weight:500}td{font-weight:300;text-align:center;border:1px solid #ebebeb}form{padding:20px;background:#f2f2f2}h1{font-size:32px}h2{margin-bottom:8px;font-size:22px;font-weight:bold;color:#303030}h3{margin-bottom:8px;font-size:18px;font-weight:bold;color:#d5000d}h4{font-size:16px;font-weight:bold;color:#303030}h5{font-size:1em;color:#303030}h6{font-size:.8em;color:#303030}p{margin-bottom:20px;font-weight:300}a{text-decoration:none}p a{font-weight:400}blockquote{padding:0 0 0 30px;margin-bottom:20px;font-size:1.6em;border-left:10px solid #e9e9e9}ul li{list-style-position:inside;list-style:disc;padding-left:20px}ol li{list-style-position:inside;list-style:decimal;padding-left:3px}dl dt{color:#303030}footer{padding-top:20px;padding-bottom:30px;margin-top:40px;font-size:13px;color:#aaa;background:transparent url("../images/hr.png") 0 0 no-repeat}footer a{color:#666}footer a:hover{color:#444}.clearfix:after{display:block;height:0;clear:both;visibility:hidden;content:'.'}.clearfix{display:inline-block}* html .clearfix{height:1%}.clearfix{display:block}@media only screen and (max-width: 767px){header{padding-top:10px;padding-bottom:10px}#downloads{margin-bottom:25px}#download-zip,#download-tar-gz{display:none}.inner{width:94%;margin:0 auto}} +@import url("https://fonts.googleapis.com/css?family=Chivo:900");.highlight table td{padding:5px}.highlight table pre{margin:0}.highlight,.highlight .w{color:#d0d0d0}.highlight .err{color:#151515;background-color:#ac4142}.highlight .c,.highlight .cd,.highlight .cm,.highlight .c1,.highlight .cs{color:#888}.highlight .cp{color:#f4bf75}.highlight .nt{color:#f4bf75}.highlight .o,.highlight .ow{color:#d0d0d0}.highlight .p,.highlight .pi{color:#d0d0d0}.highlight .gi{color:#90a959}.highlight .gd{color:#ac4142}.highlight .gh{color:#6a9fb5;font-weight:bold}.highlight .k,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kv{color:#aa759f}.highlight .kc{color:#d28445}.highlight .kt{color:#d28445}.highlight .kd{color:#d28445}.highlight .s,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .s2,.highlight .sh,.highlight .sx,.highlight .s1{color:#90a959}.highlight .sr{color:#75b5aa}.highlight .si{color:#8f5536}.highlight .se{color:#8f5536}.highlight .nn{color:#f4bf75}.highlight .nc{color:#f4bf75}.highlight .no{color:#f4bf75}.highlight .na{color:#6a9fb5}.highlight .m,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .il,.highlight .mo,.highlight .mb,.highlight .mx{color:#90a959}.highlight .ss{color:#90a959}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{padding:0;margin:0;font:inherit;font-size:100%;vertical-align:baseline;border:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}table{border-spacing:0;border-collapse:collapse}body{font-family:'Helvetica Neue', Helvetica, Arial, serif;font-size:1em;line-height:1.5;color:#6d6d6d;text-shadow:0 1px 0 rgba(255,255,255,0.8);background:#f2f2f2 url(../images/body-bg.png) 0 0 repeat}a{color:#d5000d}a:hover{color:#c5000c}header{padding-top:35px;padding-bottom:25px}header h1{font-family:'Chivo', 'Helvetica Neue', Helvetica, Arial, serif;font-size:48px;font-weight:900;line-height:1.2;color:#303030;letter-spacing:-1px}header h2{font-size:24px;font-weight:normal;line-height:1.3;color:#aaa;letter-spacing:-1px}#container{min-height:595px;background:transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat}.inner{width:620px;margin:0 auto}#container .inner img{max-width:100%}#downloads{margin-bottom:40px}a.button{display:block;float:left;width:179px;padding:12px 8px 12px 8px;margin-right:14px;font-size:15px;font-weight:bold;line-height:25px;color:#303030;background:#fdfdfd;background:-moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fdfdfd), color-stop(100%, #f2f2f2));background:-webkit-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%);background:-o-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%);background:-ms-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%);background:linear-gradient(to top, #fdfdfd 0%, #f2f2f2 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 );border-top:solid 1px #cbcbcb;border-right:solid 1px #b7b7b7;border-bottom:solid 1px #b3b3b3;border-left:solid 1px #b7b7b7;border-radius:30px;-webkit-box-shadow:10px 10px 5px #888;-moz-box-shadow:10px 10px 5px #888;box-shadow:0px 1px 5px #e8e8e8;-moz-border-radius:30px;-webkit-border-radius:30px}a.button:hover{background:#fafafa;background:-moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fdfdfd), color-stop(100%, #f6f6f6));background:-webkit-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%);background:-o-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%);background:-ms-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%);background:linear-gradient(to top, #fdfdfd 0%, #f6f6f6, 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 );border-top:solid 1px #b7b7b7;border-right:solid 1px #b3b3b3;border-bottom:solid 1px #b3b3b3;border-left:solid 1px #b3b3b3}a.button span{display:block;height:23px;padding-left:50px}#download-zip span{background:transparent url(../images/zip-icon.png) 12px 50% no-repeat}#download-tar-gz span{background:transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat}#view-on-github span{background:transparent url(../images/octocat-icon.png) 12px 50% no-repeat}#view-on-github{margin-right:0}code,pre{margin-bottom:30px;font-family:Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;font-size:14px;color:#222}code{padding:0 3px;background-color:#f2f2f2;border:solid 1px #ddd}pre{padding:20px;overflow:auto;color:#f2f2f2;text-shadow:none;background:#303030}pre code{padding:0;color:#f2f2f2;background-color:#303030;border:none}ul,ol,dl{margin-bottom:20px}hr{height:1px;padding-bottom:1em;margin-top:1em;line-height:1px;background:transparent url("../images/hr.png") 50% 0 no-repeat;border:none}strong{font-weight:bold}em{font-style:italic}table{width:100%;border:1px solid #ebebeb}th{font-weight:500}td{font-weight:300;text-align:center;border:1px solid #ebebeb}form{padding:20px;background:#f2f2f2}h1{font-size:32px}h2{margin-bottom:8px;font-size:22px;font-weight:bold;color:#303030}h3{margin-bottom:8px;font-size:18px;font-weight:bold;color:#d5000d}h4{font-size:16px;font-weight:bold;color:#303030}h5{font-size:1em;color:#303030}h6{font-size:.8em;color:#303030}p{margin-bottom:20px;font-weight:300}a{text-decoration:none}p a{font-weight:400}blockquote{padding:0 0 0 30px;margin-bottom:20px;font-size:1.6em;border-left:10px solid #e9e9e9}ul li{list-style-position:inside;list-style:disc;padding-left:20px}ol li{list-style-position:inside;list-style:decimal;padding-left:3px}dl dt{color:#303030}footer{padding-top:20px;padding-bottom:30px;margin-top:40px;font-size:13px;color:#aaa;background:transparent url("../images/hr.png") 0 0 no-repeat}footer a{color:#666}footer a:hover{color:#444}.clearfix:after{display:block;height:0;clear:both;visibility:hidden;content:'.'}.clearfix{display:inline-block}* html .clearfix{height:1%}.clearfix{display:block}@media only screen and (max-width: 767px){header{padding-top:10px;padding-bottom:10px}#downloads{margin-bottom:25px}#download-zip,#download-tar-gz{display:none}.inner{width:94%;margin:0 auto}} diff --git a/css/zip-style.css b/css/zip-style.css index f5e41c8b..9eff893e 100644 --- a/css/zip-style.css +++ b/css/zip-style.css @@ -18,3 +18,6 @@ tr:hover { background-color: #f5f5f5; } #references th::before { content: "["; } #references th::after { content: "]"; } #references td { text-align: left !important; padding: 0 !important; border: 0 !important; } +.editor-note { color: #800000; } +.editor-note::before { content: "[Editor note: "; } +.editor-note::after { content: "]"; } diff --git a/index.html b/index.html index 310d5705..7ae4db49 100644 --- a/index.html +++ b/index.html @@ -10,6 +10,7 @@

Specifications and Zcash Improvement Proposals for the Zcash cryptocurrency.

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

+

The ZIP process is documented in ZIP 0.

NU3 ZIPs for consideration

This is the list of ZIPs that were under consideration for the NU3 upgrade (around ~April 2020).

@@ -80,6 +81,19 @@ 210 Sapling Anchor Deduplication within Transactions Draft 243 Transaction Signature Verification for Sapling Final 308 Sprout to Sapling Migration Final + 401 Addressing mempool denial-of-service Final + 1001 Keep the Block Distribution as Initially Defined — 90% to Miners Draft + 1002 Opt-in Donation Feature Draft + 1003 20% Split Evenly Between the ECC and the Zcash Foundation, and a Voting System Mandate Draft + 1004 Miner-Directed Dev Fund Draft + 1005 Zcash Community Funding System Draft + 1006 Development Fund of 10% to a 2-of-3 Multisig with Community-Involved Third Entity Draft + 1007 Enforce Development Fund Commitments with a Legal Charter Draft + 1008 Fund ECC for Two More Years Draft + 1009 Five-Entity Strategic Council Draft + 1010 Compromise Dev Fund Proposal With Diverse Funding Streams Draft + 1011 Decentralize the Dev Fee Draft + 1013 Keep It Simple, Zcashers: 10% to ECC, 10% to ZF Draft guide {Something Short and To the Point} Draft
diff --git a/makeindex.sh b/makeindex.sh index 663ccc3b..06d65b64 100755 --- a/makeindex.sh +++ b/makeindex.sh @@ -11,10 +11,11 @@ Index of ZIPs ZIP Title Status EndOfHeader for zipfile in zip-*.rst; do + echo Adding $zipfile to index. >/dev/stderr if grep -E '^\s*Status:\s*(Withdrawn|Rejected|Obsolete)' $zipfile >/dev/null; then - echo " `basename $zipfile .rst | sed -r 's@zip-0{0,3}@@'` `grep '^\s*Title:' $zipfile | sed 's@\s*Title:\s*@@'` `grep '^\s*Status:' $zipfile | sed 's@\s*Status:\s*@@'`" + echo " `basename $zipfile .rst | sed -r 's@zip-0{0,3}@@'` `grep '^\s*Title:' $zipfile | sed 's@\s*Title:\s*@@'` `grep '^\s*Status:' $zipfile | sed 's@\s*Status:\s*@@'`" else - echo " `basename $zipfile .rst | sed -r 's@zip-0{0,3}@@'` `grep '^\s*Title:' $zipfile | sed 's@\s*Title:\s*@@'` `grep '^\s*Status:' $zipfile | sed 's@\s*Status:\s*@@'`" + echo " `basename $zipfile .rst | sed -r 's@zip-0{0,3}@@'` `grep '^\s*Title:' $zipfile | sed 's@\s*Title:\s*@@'` `grep '^\s*Status:' $zipfile | sed 's@\s*Status:\s*@@'`" fi done echo " " diff --git a/zip-0000.html b/zip-0000.html index 33f001d3..d727d49d 100644 --- a/zip-0000.html +++ b/zip-0000.html @@ -9,7 +9,9 @@
ZIP: 0
 Title: ZIP Process
 Owners: Daira Hopwood <daira@electriccoin.co>
-        Josh Cincinnati <josh@zfnd.org>
+        George Tankersley <george@zfnd.org>
+Original-Authors: Daira Hopwood <daira@electriccoin.co>
+                  Josh Cincinnati <josh@zfnd.org>
 Credits: Luke Dashjr
 Status: Active
 Category: Process
@@ -268,7 +270,7 @@ Updates:
2 - ZIP 200: Network Upgrade Activation Mechanism + ZIP 200: Network Upgrade Activation Mechanism diff --git a/zip-0000.rst b/zip-0000.rst index 6f7c6ca4..c3b84b18 100644 --- a/zip-0000.rst +++ b/zip-0000.rst @@ -3,7 +3,9 @@ ZIP: 0 Title: ZIP Process Owners: Daira Hopwood - Josh Cincinnati + George Tankersley + Original-Authors: Daira Hopwood + Josh Cincinnati Credits: Luke Dashjr Status: Active Category: Process @@ -596,7 +598,7 @@ References ========== .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ .. [#conduct] `Zcash Code of Conduct `_ .. [#rst] `reStructuredText documentation `_ .. [#latex] `LaTeX -- a document preparation system `_ diff --git a/zip-0032.html b/zip-0032.html index 50c37bac..312aeb34 100644 --- a/zip-0032.html +++ b/zip-0032.html @@ -20,7 +20,7 @@ License: MIT

Terminology

The key words "MUST", "MUST NOT", and "MAY" in this document are to be interpreted as described in RFC 2119. 1

-

"Jubjub" refers to the elliptic curve defined in 8 section 5.4.8.3.

+

"Jubjub" refers to the elliptic curve defined in 12.

Abstract

@@ -49,14 +49,14 @@ License: MIT
  • LEOS2IPl(S) is the integer in range {0..2l-1} represented in little-endian order by the byte sequence S of length l/8.
  • I2LEBSPl(k) is the sequence of l bits representing k in little-endian order.
  • LEBS2OSPl(B) is defined as follows when l is a multiple of 8: convert each group of 8 bits in B to a byte value with the least significant bit first, and concatenate the resulting bytes in the same order as the groups.
  • -
  • repr𝕁(P) is the representation of the Jubjub elliptic curve point P as a bit sequence, defined in 8 section 5.4.8.3.
  • +
  • repr𝕁(P) is the representation of the Jubjub elliptic curve point P as a bit sequence, defined in 12.
  • BLAKE2b-256(p, x) refers to unkeyed BLAKE2b-256 in sequential mode, with an output digest length of 32 bytes, 16-byte personalization string p, and input x.
  • BLAKE2b-512(p, x) refers to unkeyed BLAKE2b-512 in sequential mode, with an output digest length of 64 bytes, 16-byte personalization string p, and input x.
  • PRFexpand(sk, t) := BLAKE2b-512("Zcash_ExpandSeed", sk || t)
  • ToScalar(x) := LEOS2IP512(x) (mod r𝕁), where r𝕁 is the order of the Jubjub large prime subgroup.
  • -
  • DiversifyHash(d) maps a diversifier d to a base point on the Jubjub elliptic curve, or to ⊥ if the diversifier is invalid. It is instantiated in 8 section 5.4.1.6.
  • +
  • DiversifyHash(d) maps a diversifier d to a base point on the Jubjub elliptic curve, or to ⊥ if the diversifier is invalid. It is instantiated in 10.
  • -

    The following algorithm standardized in 10 is used:

    +

    The following algorithm standardized in 16 is used:

    • FF1-AES256.Encrypt(key, tweak, x) refers to the FF1 encryption algorithm using AES with a 256-bit key, and parameters radix = 2, minlen = 88, maxlen = 88. It will be used only with the empty string "" as the tweak. x is a sequence of 88 bits, as is the output.
    @@ -139,7 +139,7 @@ License: MIT

    Deriving a child extended full viewing key

    -

    Let 𝓖 be as defined in 8 section 5.4.6.1 and let 𝓗 be as defined in 9.

    +

    Let 𝓖 be as defined in 11 and let 𝓗 be as defined in 9.

    CDKfvk((akpar, nkpar, ovkpar, dkpar, cpar), i) → (aki, nki, ovki, dki, ci)

    • Check whether i ≥ 231 (whether the child is a hardened key). @@ -184,7 +184,7 @@ License: MIT

    Sprout helper functions

    -

    Let EncodeASK(ask) be the 32-byte encoding of ask in the raw encoding of a Sprout spending key (excluding lead bytes) as specified in 8 section 5.6.8.

    +

    Let EncodeASK(ask) be the 32-byte encoding of ask in the raw encoding of a Sprout spending key (excluding lead bytes) as specified in 15.

    Let DecodeASK(ASK) be the result of clearing the 4 most significant bits of the first byte of ASK, and decoding the 32-byte result according to the inverse of EncodeASK.

    @@ -246,7 +246,7 @@ License: MIT

    Specification: Fingerprints and Tags

    Sapling Full Viewing Key Fingerprints and Tags

    -

    A "Sapling full viewing key fingerprint" of a full viewing key with raw encoding FVK (as specified in 8 section 5.6.7) is given by:

    +

    A "Sapling full viewing key fingerprint" of a full viewing key with raw encoding FVK (as specified in 14) is given by:

    BLAKE2b-256("ZcashSaplingFVFP", FVK)

    @@ -255,7 +255,7 @@ License: MIT

    Sprout Address Fingerprints and Tags

    -

    A "Sprout address fingerprint" of a Sprout payment address with raw encoding ADDR (as specified in 8 section 5.6.3, including the lead bytes) is given by:

    +

    A "Sprout address fingerprint" of a Sprout payment address with raw encoding ADDR (as specified in 13, including the lead bytes) is given by:

    BLAKE2b-256("Zcash_Sprout_AFP", ADDR)

    @@ -378,7 +378,7 @@ License: MIT 8 - Zcash Protocol Specification, Version 2018.0-beta-25 or later [Overwinter+Sapling] + Zcash Protocol Specification, Version 2019.0.8 or later [Overwinter+Sapling+Blossom] @@ -386,14 +386,62 @@ License: MIT 9 - Section 4.2.2: Sapling Key Components. Zcash Protocol Specification, Version 2018.0-beta-25 or later [Overwinter+Sapling] + Zcash Protocol Specification, Section 4.2.2 Sapling Key Components + + + + + + + + + + +
    10Zcash Protocol Specification, Section 5.4.1.6 DiversifyHash Hash Function
    + + + + + + + +
    11Zcash Protocol Specification, Section 5.4.6.1 Spend Authorization Signature
    + + + + + + + +
    12Zcash Protocol Specification, Section 5.4.8.3 Jubjub
    + + + + + + + +
    13Zcash Protocol Specification, Section 5.6.3 Sprout Shielded Payment Addresses
    + + + + + + + +
    14Zcash Protocol Specification, Section 5.6.7 Sapling Full Viewing Keys
    + + + + +
    15Zcash Protocol Specification, Section 5.6.8 Sprout Spending Keys
    - + diff --git a/zip-0032.rst b/zip-0032.rst index 5a945cb1..3a344a48 100644 --- a/zip-0032.rst +++ b/zip-0032.rst @@ -19,7 +19,7 @@ Terminology The key words "MUST", "MUST NOT", and "MAY" in this document are to be interpreted as described in RFC 2119. [#RFC2119]_ -"Jubjub" refers to the elliptic curve defined in [#sapling-spec]_ section 5.4.8.3. +"Jubjub" refers to the elliptic curve defined in [#sapling-jubjub]_. Abstract @@ -81,7 +81,7 @@ Most of the notation and functions used in this ZIP are defined in the Sapling p same order as the groups. - repr\ :sub:`𝕁`\ (*P*) is the representation of the Jubjub elliptic curve point *P* as a bit sequence, - defined in [#sapling-spec]_ section 5.4.8.3. + defined in [#sapling-jubjub]_. - BLAKE2b-256(*p*, *x*) refers to unkeyed BLAKE2b-256 in sequential mode, with an output digest length of 32 bytes, 16-byte personalization string *p*, and input *x*. @@ -95,7 +95,7 @@ Most of the notation and functions used in this ZIP are defined in the Sapling p of the Jubjub large prime subgroup. - DiversifyHash(*d*) maps a diversifier *d* to a base point on the Jubjub elliptic curve, or to ⊥ if the - diversifier is invalid. It is instantiated in [#sapling-spec]_ section 5.4.1.6. + diversifier is invalid. It is instantiated in [#sapling-diversifyhash]_. The following algorithm standardized in [#NIST-SP-800-38G]_ is used: @@ -205,7 +205,7 @@ CDKsk((*ask*\ :sub:`par`\ , *nsk*\ :sub:`par`\ , *ovk*\ :sub:`par`\ , *dk*\ :sub Deriving a child extended full viewing key `````````````````````````````````````````` -Let 𝓖 be as defined in [#sapling-spec]_ section 5.4.6.1 and let 𝓗 be as defined in [#sapling-key-components]_. +Let 𝓖 be as defined in [#sapling-spendauthsig]_ and let 𝓗 be as defined in [#sapling-key-components]_. CDKfvk((*ak*\ :sub:`par`\ , *nk*\ :sub:`par`\ , *ovk*\ :sub:`par`\ , *dk*\ :sub:`par`\ , *c*\ :sub:`par`\ ), *i*) → (*ak*\ :sub:`i`\ , *nk*\ :sub:`i`\ , *ovk*\ :sub:`i`\ , *dk*\ :sub:`i`\ , *c*\ :sub:`i`\ ) @@ -265,7 +265,7 @@ Sprout helper functions ----------------------- Let EncodeASK(*a*\ :sub:`sk`) be the 32-byte encoding of *a*\ :sub:`sk` in the raw encoding of a Sprout -spending key (excluding lead bytes) as specified in [#sapling-spec]_ section 5.6.8. +spending key (excluding lead bytes) as specified in [#sprout-spending-keys]_. Let DecodeASK(*ASK*) be the result of clearing the 4 most significant bits of the first byte of *ASK*, and decoding the 32-byte result according to the inverse of EncodeASK. @@ -364,7 +364,7 @@ Sapling Full Viewing Key Fingerprints and Tags ---------------------------------------------- A "Sapling full viewing key fingerprint" of a full viewing key with raw encoding *FVK* (as specified -in [#sapling-spec]_ section 5.6.7) is given by: +in [#sapling-full-viewing-keys]_) is given by: BLAKE2b-256("ZcashSaplingFVFP", *FVK*) @@ -378,7 +378,7 @@ Sprout Address Fingerprints and Tags ------------------------------------ A "Sprout address fingerprint" of a Sprout payment address with raw encoding *ADDR* (as specified in -[#sapling-spec]_ section 5.6.3, including the lead bytes) is given by: +[#sprout-shielded-addresses]_, including the lead bytes) is given by: BLAKE2b-256("Zcash_Sprout_AFP", *ADDR*) @@ -481,7 +481,13 @@ References .. [#bip-0044] `BIP 44: Multi-Account Hierarchy for Deterministic Wallets `_ .. [#slip-0044] `SLIP 44: Registered coin types for BIP-0044 `_ .. [#bip-0173] `BIP 173: Base32 address format for native v0-16 witness outputs `_ -.. [#sapling-spec] `Zcash Protocol Specification, Version 2018.0-beta-25 or later [Overwinter+Sapling] `_ -.. [#sapling-key-components] `Section 4.2.2: Sapling Key Components. Zcash Protocol Specification, Version 2018.0-beta-25 or later [Overwinter+Sapling] `_ +.. [#sapling-spec] `Zcash Protocol Specification, Version 2019.0.8 or later [Overwinter+Sapling+Blossom] `_ +.. [#sapling-key-components] `Zcash Protocol Specification, Section 4.2.2 Sapling Key Components `_ +.. [#sapling-diversifyhash] `Zcash Protocol Specification, Section 5.4.1.6 DiversifyHash Hash Function `_ +.. [#sapling-spendauthsig] `Zcash Protocol Specification, Section 5.4.6.1 Spend Authorization Signature `_ +.. [#sapling-jubjub] `Zcash Protocol Specification, Section 5.4.8.3 Jubjub `_ +.. [#sprout-shielded-addresses] `Zcash Protocol Specification, Section 5.6.3 Sprout Shielded Payment Addresses `_ +.. [#sapling-full-viewing-keys] `Zcash Protocol Specification, Section 5.6.7 Sapling Full Viewing Keys `_ +.. [#sprout-spending-keys] `Zcash Protocol Specification, Section 5.6.8 Sprout Spending Keys `_ .. [#NIST-SP-800-38G] `NIST Special Publication 800-38G -- Recommendation for Block Cipher Modes of Operation: Methods for Format-Preserving Encryption `_ diff --git a/zip-0143.html b/zip-0143.html index 75849670..77e14d46 100644 --- a/zip-0143.html +++ b/zip-0143.html @@ -388,7 +388,7 @@ sighash: 23652e76cb13b85a0e3363bb5fca061fa791c40c533eccee899364e6e60bb4f7 - +
    1016 NIST Special Publication 800-38G -- Recommendation for Block Cipher Modes of Operation: Methods for Format-Preserving Encryption
    3Zcash Protocol Specification, Section 4.6Zcash Protocol Specification, Section 4.6 Sending Notes
    @@ -450,7 +450,7 @@ sighash: 23652e76cb13b85a0e3363bb5fca061fa791c40c533eccee899364e6e60bb4f7 10 - ZIP 200: Network Upgrade Mechanism + ZIP 200: Network Upgrade Mechanism @@ -458,7 +458,7 @@ sighash: 23652e76cb13b85a0e3363bb5fca061fa791c40c533eccee899364e6e60bb4f7 11 - ZIP 201: Network Peer Management for Overwinter + ZIP 201: Network Peer Management for Overwinter @@ -466,7 +466,7 @@ sighash: 23652e76cb13b85a0e3363bb5fca061fa791c40c533eccee899364e6e60bb4f7 12 - ZIP 202: Version 3 Transaction Format for Overwinter + ZIP 202: Version 3 Transaction Format for Overwinter @@ -474,7 +474,7 @@ sighash: 23652e76cb13b85a0e3363bb5fca061fa791c40c533eccee899364e6e60bb4f7 13 - ZIP 203: Transaction Expiry + ZIP 203: Transaction Expiry diff --git a/zip-0143.rst b/zip-0143.rst index b4d75574..815a9b47 100644 --- a/zip-0143.rst +++ b/zip-0143.rst @@ -451,7 +451,7 @@ References .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ .. [#wiki-checksig] https://en.bitcoin.it/wiki/OP_CHECKSIG -.. [#zcash-protocol] `Zcash Protocol Specification, Section 4.6 `_ +.. [#zcash-protocol] `Zcash Protocol Specification, Section 4.6 Sending Notes `_ .. [#quadratic] * `CVE-2013-2292 `_ * `New Bitcoin vulnerability: A transaction that takes at least 3 minutes to verify `_ @@ -463,9 +463,9 @@ References .. [#01-change] In the original algorithm, a ``uint256`` of ``0x0000......0001`` is committed if the input index for a ``SINGLE`` signature is greater than or equal to the number of outputs. In this ZIP a ``0x0000......0000`` is commited, without changing the semantics. -.. [#zip-0200] `ZIP 200: Network Upgrade Mechanism `_ -.. [#zip-0201] `ZIP 201: Network Peer Management for Overwinter `_ -.. [#zip-0202] `ZIP 202: Version 3 Transaction Format for Overwinter `_ -.. [#zip-0203] `ZIP 203: Transaction Expiry `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Mechanism `_ +.. [#zip-0201] `ZIP 201: Network Peer Management for Overwinter `_ +.. [#zip-0202] `ZIP 202: Version 3 Transaction Format for Overwinter `_ +.. [#zip-0203] `ZIP 203: Transaction Expiry `_ .. [#test-vectors] `ZIP 143 Test Vectors `_ .. [#sighash-tests] `SignatureHash Test Vectors `_ diff --git a/zip-0200.html b/zip-0200.html index bc9942b6..eb528b7f 100644 --- a/zip-0200.html +++ b/zip-0200.html @@ -165,7 +165,7 @@ License: MIT 4 - ZIP 143: Transaction Signature Verification for Overwinter + ZIP 143: Transaction Signature Verification for Overwinter @@ -173,7 +173,7 @@ License: MIT 5 - ZIP 201: Network Peer Management for Overwinter + ZIP 201: Network Peer Management for Overwinter @@ -181,7 +181,7 @@ License: MIT 6 - ZIP 202: Version 3 Transaction Format for Overwinter + ZIP 202: Version 3 Transaction Format for Overwinter diff --git a/zip-0200.rst b/zip-0200.rst index 27ffbd6d..fcf3f6e5 100644 --- a/zip-0200.rst +++ b/zip-0200.rst @@ -224,6 +224,6 @@ References .. [#release-lifecycle] - https://electriccoin.co/blog/release-cycle-and-lifetimes/ - https://electriccoin.co/blog/release-cycle-update/ -.. [#zip-0143] `ZIP 143: Transaction Signature Verification for Overwinter `_ -.. [#zip-0201] `ZIP 201: Network Peer Management for Overwinter `_ -.. [#zip-0202] `ZIP 202: Version 3 Transaction Format for Overwinter `_ +.. [#zip-0143] `ZIP 143: Transaction Signature Verification for Overwinter `_ +.. [#zip-0201] `ZIP 201: Network Peer Management for Overwinter `_ +.. [#zip-0202] `ZIP 202: Version 3 Transaction Format for Overwinter `_ diff --git a/zip-0201.html b/zip-0201.html index c4ab5812..90706ca7 100644 --- a/zip-0201.html +++ b/zip-0201.html @@ -208,7 +208,7 @@ if (nActivationHeight > 0 && 2 - ZIP 143: Transaction Signature Verification for Overwinter + ZIP 143: Transaction Signature Verification for Overwinter @@ -216,7 +216,7 @@ if (nActivationHeight > 0 && 3 - ZIP 200: Network Upgrade Activation Mechanism + ZIP 200: Network Upgrade Activation Mechanism @@ -224,7 +224,7 @@ if (nActivationHeight > 0 && 4 - ZIP 202: Version 3 Transaction Format for Overwinter + ZIP 202: Version 3 Transaction Format for Overwinter @@ -232,7 +232,7 @@ if (nActivationHeight > 0 && 5 - ZIP 203: Transaction Expiry + ZIP 203: Transaction Expiry diff --git a/zip-0201.rst b/zip-0201.rst index f452c84c..f7c43892 100644 --- a/zip-0201.rst +++ b/zip-0201.rst @@ -244,10 +244,10 @@ References ========== .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#zip-0143] `ZIP 143: Transaction Signature Verification for Overwinter `_ -.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ -.. [#zip-0202] `ZIP 202: Version 3 Transaction Format for Overwinter `_ -.. [#zip-0203] `ZIP 203: Transaction Expiry `_ +.. [#zip-0143] `ZIP 143: Transaction Signature Verification for Overwinter `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ +.. [#zip-0202] `ZIP 202: Version 3 Transaction Format for Overwinter `_ +.. [#zip-0203] `ZIP 203: Transaction Expiry `_ .. [#bip-0111] `BIP 111: NODE_BLOOM service bit `_ .. [#bitcoin-verson] https://en.bitcoin.it/wiki/Protocol_documentation#version .. [#bitcoin-version-handshake] https://en.bitcoin.it/wiki/Version_Handshake diff --git a/zip-0202.html b/zip-0202.html index f0f65b33..dfa8fce4 100644 --- a/zip-0202.html +++ b/zip-0202.html @@ -359,7 +359,7 @@ License: MIT 2 - ZIP 143: Transaction Signature Verification for Overwinter + ZIP 143: Transaction Signature Verification for Overwinter @@ -367,7 +367,7 @@ License: MIT 3 - ZIP 200: Network Upgrade Activation Mechanism + ZIP 200: Network Upgrade Activation Mechanism @@ -375,7 +375,7 @@ License: MIT 4 - ZIP 201: Network Handshaking for Overwinter + ZIP 201: Network Handshaking for Overwinter @@ -383,7 +383,7 @@ License: MIT 5 - ZIP 203: Transaction Expiry + ZIP 203: Transaction Expiry diff --git a/zip-0202.rst b/zip-0202.rst index a2364ec2..8634a5b0 100644 --- a/zip-0202.rst +++ b/zip-0202.rst @@ -255,8 +255,8 @@ References ========== .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#zip-0143] `ZIP 143: Transaction Signature Verification for Overwinter `_ -.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ -.. [#zip-0201] `ZIP 201: Network Handshaking for Overwinter `_ -.. [#zip-0203] `ZIP 203: Transaction Expiry `_ +.. [#zip-0143] `ZIP 143: Transaction Signature Verification for Overwinter `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ +.. [#zip-0201] `ZIP 201: Network Handshaking for Overwinter `_ +.. [#zip-0203] `ZIP 203: Transaction Expiry `_ .. [#versiongroupid] `OVERWINTER_VERSION_GROUP_ID `_ diff --git a/zip-0203.html b/zip-0203.html index f8e61dee..3e1308ef 100644 --- a/zip-0203.html +++ b/zip-0203.html @@ -70,7 +70,7 @@ License: MIT 1 - ZIP 201: Network Peer Management for Overwinter + ZIP 201: Network Peer Management for Overwinter diff --git a/zip-0203.rst b/zip-0203.rst index 099de5a4..24002f87 100644 --- a/zip-0203.rst +++ b/zip-0203.rst @@ -94,4 +94,4 @@ https://github.com/zcash/zcash/pull/2874 References ========== -.. [#zip-0201] `ZIP 201: Network Peer Management for Overwinter `_ +.. [#zip-0201] `ZIP 201: Network Peer Management for Overwinter `_ diff --git a/zip-0205.html b/zip-0205.html index 3d87fd19..655bd1c3 100644 --- a/zip-0205.html +++ b/zip-0205.html @@ -85,7 +85,7 @@ static const int NETWORK_UPGRADE_PEER_PREFERENCE_BLOCK_PERIOD = 24 * 24 * 3; 1 - Zcash Protocol Specification, Version 2018.0-beta-37 [Overwinter+Sapling] + Zcash Protocol Specification, Version 2018.0-beta-37 [Overwinter+Sapling] @@ -101,7 +101,7 @@ static const int NETWORK_UPGRADE_PEER_PREFERENCE_BLOCK_PERIOD = 24 * 24 * 3; 3 - ZIP 200: Network Upgrade Activation Mechanism + ZIP 200: Network Upgrade Activation Mechanism @@ -109,7 +109,7 @@ static const int NETWORK_UPGRADE_PEER_PREFERENCE_BLOCK_PERIOD = 24 * 24 * 3; 4 - ZIP 201: Network Peer Management for Overwinter + ZIP 201: Network Peer Management for Overwinter @@ -117,7 +117,7 @@ static const int NETWORK_UPGRADE_PEER_PREFERENCE_BLOCK_PERIOD = 24 * 24 * 3; 5 - ZIP 243: Transaction Signature Verification for Sapling + ZIP 243: Transaction Signature Verification for Sapling diff --git a/zip-0205.rst b/zip-0205.rst index 0de278ae..dce25fd5 100644 --- a/zip-0205.rst +++ b/zip-0205.rst @@ -140,8 +140,8 @@ version 170007. References ========== -.. [#protocol] `Zcash Protocol Specification, Version 2018.0-beta-37 [Overwinter+Sapling] `_ +.. [#protocol] `Zcash Protocol Specification, Version 2018.0-beta-37 [Overwinter+Sapling] `_ .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ -.. [#zip-0201] `ZIP 201: Network Peer Management for Overwinter `_ -.. [#zip-0243] `ZIP 243: Transaction Signature Verification for Sapling `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ +.. [#zip-0201] `ZIP 201: Network Peer Management for Overwinter `_ +.. [#zip-0243] `ZIP 243: Transaction Signature Verification for Sapling `_ diff --git a/zip-0206.html b/zip-0206.html index 5fda99ae..611d1922 100644 --- a/zip-0206.html +++ b/zip-0206.html @@ -82,7 +82,7 @@ static const int NETWORK_UPGRADE_PEER_PREFERENCE_BLOCK_PERIOD = 24 * 24 * 3; 1 - Zcash Protocol Specification, Version 2019.0.4 or later [Overwinter+Sapling+Blossom] + Zcash Protocol Specification, Version 2019.0.4 or later [Overwinter+Sapling+Blossom] @@ -98,7 +98,7 @@ static const int NETWORK_UPGRADE_PEER_PREFERENCE_BLOCK_PERIOD = 24 * 24 * 3; 3 - ZIP 200: Network Upgrade Activation Mechanism + ZIP 200: Network Upgrade Activation Mechanism @@ -106,7 +106,7 @@ static const int NETWORK_UPGRADE_PEER_PREFERENCE_BLOCK_PERIOD = 24 * 24 * 3; 4 - ZIP 201: Network Peer Management for Overwinter + ZIP 201: Network Peer Management for Overwinter @@ -114,7 +114,7 @@ static const int NETWORK_UPGRADE_PEER_PREFERENCE_BLOCK_PERIOD = 24 * 24 * 3; 5 - ZIP 208: Shorter Block Target Spacing + ZIP 208: Shorter Block Target Spacing diff --git a/zip-0206.rst b/zip-0206.rst index 03385cab..376f876d 100644 --- a/zip-0206.rst +++ b/zip-0206.rst @@ -121,8 +121,8 @@ implemented in ``zcashd`` version 2.1.0, which will advertise protocol version 1 References ========== -.. [#protocol] `Zcash Protocol Specification, Version 2019.0.4 or later [Overwinter+Sapling+Blossom] `_ +.. [#protocol] `Zcash Protocol Specification, Version 2019.0.4 or later [Overwinter+Sapling+Blossom] `_ .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ -.. [#zip-0201] `ZIP 201: Network Peer Management for Overwinter `_ -.. [#zip-0208] `ZIP 208: Shorter Block Target Spacing `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ +.. [#zip-0201] `ZIP 201: Network Peer Management for Overwinter `_ +.. [#zip-0208] `ZIP 208: Shorter Block Target Spacing `_ diff --git a/zip-0207.html b/zip-0207.html index 9a725f32..d1bde966 100644 --- a/zip-0207.html +++ b/zip-0207.html @@ -562,7 +562,7 @@ Address(height) = FundingStream[FUND].Addresses[FundingStream[FUND].AddressIndex 2 - Section 7.7: Calculation of Block Subsidy and Founders' Reward. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] + Section 7.7: Calculation of Block Subsidy and Founders' Reward. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] @@ -578,7 +578,7 @@ Address(height) = FundingStream[FUND].Addresses[FundingStream[FUND].AddressIndex 4 - ZIP 208: Shorter Block Target Spacing + ZIP 208: Shorter Block Target Spacing @@ -586,7 +586,7 @@ Address(height) = FundingStream[FUND].Addresses[FundingStream[FUND].AddressIndex 5 - Section 7.8: Payment of Founders' Reward. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] + Section 7.8: Payment of Founders' Reward. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] @@ -594,7 +594,7 @@ Address(height) = FundingStream[FUND].Addresses[FundingStream[FUND].AddressIndex 6 - Section 5.3: Constants. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] + Section 5.3: Constants. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] @@ -602,7 +602,7 @@ Address(height) = FundingStream[FUND].Addresses[FundingStream[FUND].AddressIndex 7 - ZIP 206: Blossom Network Upgrade + ZIP 206: Blossom Network Upgrade diff --git a/zip-0207.rst b/zip-0207.rst index c3f5ddc0..06df9d82 100644 --- a/zip-0207.rst +++ b/zip-0207.rst @@ -485,9 +485,9 @@ References ========== .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#block-subsidy] `Section 7.7: Calculation of Block Subsidy and Founders' Reward. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] `_ +.. [#block-subsidy] `Section 7.7: Calculation of Block Subsidy and Founders' Reward. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] `_ .. [#continued-funding] `Continued Funding and Transparency `_ -.. [#zip-0208] `ZIP 208: Shorter Block Target Spacing `_ -.. [#original-fr-consensus-rule] `Section 7.8: Payment of Founders' Reward. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] `_ -.. [#protocol-constants] `Section 5.3: Constants. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] `_ -.. [#zip-0206] `ZIP 206: Blossom Network Upgrade `_ +.. [#zip-0208] `ZIP 208: Shorter Block Target Spacing `_ +.. [#original-fr-consensus-rule] `Section 7.8: Payment of Founders' Reward. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] `_ +.. [#protocol-constants] `Section 5.3: Constants. Zcash Protocol Specification, Version 2018.0-beta-33 or later [Overwinter+Sapling] `_ +.. [#zip-0206] `ZIP 206: Blossom Network Upgrade `_ diff --git a/zip-0208.html b/zip-0208.html index d5e6ff9f..e605929e 100644 --- a/zip-0208.html +++ b/zip-0208.html @@ -215,7 +215,7 @@ static const unsigned int MIN_BLOCKS_TO_KEEP = 288; 1 - Zcash Protocol Specification, Version 2019.0.1 or later [Overwinter+Sapling+Blossom] + Zcash Protocol Specification, Version 2019.0.1 or later [Overwinter+Sapling+Blossom] @@ -239,7 +239,7 @@ static const unsigned int MIN_BLOCKS_TO_KEEP = 288; 4 - ZIP 200: Network Upgrade Mechanism + ZIP 200: Network Upgrade Mechanism @@ -247,7 +247,7 @@ static const unsigned int MIN_BLOCKS_TO_KEEP = 288; 5 - ZIP 205: Deployment of the Sapling Network Upgrade + ZIP 205: Deployment of the Sapling Network Upgrade @@ -255,7 +255,7 @@ static const unsigned int MIN_BLOCKS_TO_KEEP = 288; 6 - ZIP 206: Deployment of the Blossom Network Upgrade + ZIP 206: Deployment of the Blossom Network Upgrade diff --git a/zip-0208.rst b/zip-0208.rst index ab0fb777..de2a7713 100644 --- a/zip-0208.rst +++ b/zip-0208.rst @@ -364,11 +364,11 @@ https://github.com/zcash/zcash/pull/4025 References ========== -.. [#latest-protocol] `Zcash Protocol Specification, Version 2019.0.1 or later [Overwinter+Sapling+Blossom] `_ +.. [#latest-protocol] `Zcash Protocol Specification, Version 2019.0.1 or later [Overwinter+Sapling+Blossom] `_ .. [#preblossom-protocol] `Zcash Protocol Specification, Version 2018.0-beta-37 (exactly) [Overwinter+Sapling] `_ .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#zip-0200] `ZIP 200: Network Upgrade Mechanism `_ -.. [#zip-0205] `ZIP 205: Deployment of the Sapling Network Upgrade `_ -.. [#zip-0206] `ZIP 206: Deployment of the Blossom Network Upgrade `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Mechanism `_ +.. [#zip-0205] `ZIP 205: Deployment of the Sapling Network Upgrade `_ +.. [#zip-0206] `ZIP 206: Deployment of the Blossom Network Upgrade `_ .. [#slowfastblocks] `On Slow and Fast Block Times `_ diff --git a/zip-0209.html b/zip-0209.html index 49079941..41560e76 100644 --- a/zip-0209.html +++ b/zip-0209.html @@ -53,7 +53,7 @@ License: MIT 2 - Zcash Protocol Specification, Version 2019.0-beta-37 [Overwinter+Sapling] + Zcash Protocol Specification, Version 2019.0-beta-37 [Overwinter+Sapling] @@ -61,7 +61,7 @@ License: MIT 3 - ZIP 200: Network Upgrade Mechanism + ZIP 200: Network Upgrade Mechanism diff --git a/zip-0209.rst b/zip-0209.rst index f7e38503..8fcfc77a 100644 --- a/zip-0209.rst +++ b/zip-0209.rst @@ -60,5 +60,5 @@ References ========== .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#protocol] `Zcash Protocol Specification, Version 2019.0-beta-37 [Overwinter+Sapling] `_ -.. [#zip-0200] `ZIP 200: Network Upgrade Mechanism `_ +.. [#protocol] `Zcash Protocol Specification, Version 2019.0-beta-37 [Overwinter+Sapling] `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Mechanism `_ diff --git a/zip-0210.html b/zip-0210.html index 6a609495..d229b1af 100644 --- a/zip-0210.html +++ b/zip-0210.html @@ -67,7 +67,7 @@ License: MIT 2 - ZIP 200: Network Upgrade Activation Mechanism + ZIP 200: Network Upgrade Activation Mechanism @@ -75,7 +75,7 @@ License: MIT 3 - ZIP 205: Deployment of the Sapling Network Upgrade + ZIP 205: Deployment of the Sapling Network Upgrade @@ -83,7 +83,7 @@ License: MIT 4 - Section 7.1: Encoding of Transactions. Zcash Protocol Specification, Version 2019.0-beta-37 [Overwinter+Sapling] + Section 7.1: Encoding of Transactions. Zcash Protocol Specification, Version 2019.0-beta-37 [Overwinter+Sapling] diff --git a/zip-0210.rst b/zip-0210.rst index 19c7916b..2b14e302 100644 --- a/zip-0210.rst +++ b/zip-0210.rst @@ -105,6 +105,6 @@ References ========== .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ -.. [#zip-0205] `ZIP 205: Deployment of the Sapling Network Upgrade `_ -.. [#v4-tx] `Section 7.1: Encoding of Transactions. Zcash Protocol Specification, Version 2019.0-beta-37 [Overwinter+Sapling] `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Activation Mechanism `_ +.. [#zip-0205] `ZIP 205: Deployment of the Sapling Network Upgrade `_ +.. [#v4-tx] `Section 7.1: Encoding of Transactions. Zcash Protocol Specification, Version 2019.0-beta-37 [Overwinter+Sapling] `_ diff --git a/zip-0243.html b/zip-0243.html index 35ba893e..2aec39dc 100644 --- a/zip-0243.html +++ b/zip-0243.html @@ -473,7 +473,7 @@ vJoinSplit: 00 2 - Zcash Protocol Specification, Version 2018.0-beta-37 [Overwinter+Sapling] + Zcash Protocol Specification [Overwinter+Sapling] @@ -489,7 +489,7 @@ vJoinSplit: 00 4 - ZIP 143: Transaction Signature Verification for Overwinter + ZIP 143: Transaction Signature Verification for Overwinter @@ -497,7 +497,7 @@ vJoinSplit: 00 5 - ZIP 200: Network Upgrade Mechanism + ZIP 200: Network Upgrade Mechanism @@ -505,7 +505,7 @@ vJoinSplit: 00 6 - ZIP 205: Deployment of the Sapling Network Upgrade + ZIP 205: Deployment of the Sapling Network Upgrade diff --git a/zip-0243.rst b/zip-0243.rst index 384a3afa..7844c460 100644 --- a/zip-0243.rst +++ b/zip-0243.rst @@ -525,10 +525,10 @@ References ========== .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#protocol] `Zcash Protocol Specification, Version 2018.0-beta-37 [Overwinter+Sapling] `_ +.. [#protocol] `Zcash Protocol Specification [Overwinter+Sapling] `_ .. [#BLAKE2-personalization] `"BLAKE2: simpler, smaller, fast as MD5", Section 2.8 `_ -.. [#zip-0143] `ZIP 143: Transaction Signature Verification for Overwinter `_ -.. [#zip-0200] `ZIP 200: Network Upgrade Mechanism `_ -.. [#zip-0205] `ZIP 205: Deployment of the Sapling Network Upgrade `_ +.. [#zip-0143] `ZIP 143: Transaction Signature Verification for Overwinter `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Mechanism `_ +.. [#zip-0205] `ZIP 205: Deployment of the Sapling Network Upgrade `_ .. [#test-vectors] `ZIP 243 Test Vectors `_ .. [#sighash-tests] `SignatureHash Test Vectors `_ diff --git a/zip-0308.html b/zip-0308.html index c2538d3d..e5e965ea 100644 --- a/zip-0308.html +++ b/zip-0308.html @@ -243,7 +243,7 @@ License: MIT 1 - Zcash Protocol Specification, Version 2018.0-beta-33 [Overwinter+Sapling]; sections 3.4, 4.11 and 4.12 + Zcash Protocol Specification, Version 2018.0-beta-33 [Overwinter+Sapling]; sections 3.4, 4.11 and 4.12 @@ -259,7 +259,7 @@ License: MIT 3 - ZIP 32: Shielded Hierarchical Deterministic Wallets + ZIP 32: Shielded Hierarchical Deterministic Wallets @@ -267,7 +267,7 @@ License: MIT 4 - ZIP 205: Deployment of the Sapling Network Upgrade + ZIP 205: Deployment of the Sapling Network Upgrade diff --git a/zip-0308.rst b/zip-0308.rst index 30561444..c8d3b9a5 100644 --- a/zip-0308.rst +++ b/zip-0308.rst @@ -401,8 +401,8 @@ The following PRs implement this specification: References ========== -.. [#transparent-value-pool] `Zcash Protocol Specification, Version 2018.0-beta-33 [Overwinter+Sapling]; sections 3.4, 4.11 and 4.12 `_ +.. [#transparent-value-pool] `Zcash Protocol Specification, Version 2018.0-beta-33 [Overwinter+Sapling]; sections 3.4, 4.11 and 4.12 `_ .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#zip-0032] `ZIP 32: Shielded Hierarchical Deterministic Wallets `_ -.. [#zip-0205] `ZIP 205: Deployment of the Sapling Network Upgrade `_ +.. [#zip-0032] `ZIP 32: Shielded Hierarchical Deterministic Wallets `_ +.. [#zip-0205] `ZIP 205: Deployment of the Sapling Network Upgrade `_ .. [#migration-simulator] `Sprout -> Sapling migration simulation `_ diff --git a/zip-0401.html b/zip-0401.html new file mode 100644 index 00000000..a2ee5d93 --- /dev/null +++ b/zip-0401.html @@ -0,0 +1,117 @@ + + + + ZIP 401: Addressing mempool denial-of-service + + + +
    +
    ZIP: 401
    +Title: Addressing mempool denial-of-service
    +Owners: Daira Hopwood <daira@electriccoin.co>
    +Status: Final
    +Category: Network
    +Created: 2019-09-09
    +License: MIT
    +
    +

    Terminology

    +

    The key words "MUST", "SHOULD", and "MAY" in this document are to be interpreted as described in RFC 2119. 1

    +
    +
    +

    Abstract

    +

    This proposal specifies a change to the behaviour of zcashd nodes intended to mitigate denial-of-service from transaction flooding.

    +
    +
    +

    Motivation

    +

    Adoption of this proposal would increase robustness of Zcash nodes against denial-of-service attack, in particular attacks that attempt to exhaust node memory.

    +

    Bitcoin Core added size limitation for the mempool in version 0.12 3, defaulting to 300 MB. This was after Zcash forked from Bitcoin Core.

    +
    +
    +

    Requirements

    +

    The memory usage of a node’s mempool should be bounded.

    +

    The eviction policy should as far as possible not be “gameable” by an adversary, i.e. an adversary should not be able to cause legitimate transactions (that do not themselves present any denial-of-service problem) to be preferentially evicted relative to its own transactions.

    +

    Any configuration options should have reasonable defaults, i.e. without changing relevant configuration, a node should be adequately protected from denial-of-service via mempool memory exhaustion.

    +
    +
    +

    Non-requirements

    +

    The current architecture of Zcash imposes fundamental limits on scaling of transaction throughput. This proposal does not increase the aggregate transaction capacity of the network. (The Blossom upgrade does increase transaction capacity, by a factor of two 2.)

    +

    Denial-of-service issues in the messaging layer of the peer-to-peer protocol are out of scope for this proposal.

    +

    This proposal is focused primarily on memory exhaustion attacks. It does not attempt to use fees to make denial-of-service economically prohibitive, since that is unlikely to be feasible while maintaining low fees for legitimate users. It does not preclude changes in fee policy.

    +
    +
    +

    Specification

    +

    This specification describes the intended behaviour of zcashd nodes. Other node implementations MAY implement the same or similar behaviour, but this is not a requirement of the network protocol. Thus, RFC 2119 conformance keywords below are to be interpreted only as placing requirements on the zcashd implementation (and potentially other implementations that have adopted this specification in full).

    +

    The mempool of a node holds a set of transactions. Each transaction has a cost, which is an integer defined as:

    +
    +

    max(serialized transaction size in bytes, 4000)

    +
    +

    Each transaction also has an eviction weight, which is cost + low_fee_penalty, where low_fee_penalty is 16000 if the transaction pays a fee less than 10000 zatoshi, otherwise 0.

    +

    Each node also MUST hold a FIFO queue RecentlyEvicted of pairs (txid, time), where the time indicates when the given txid was evicted. This SHOULD be empty on node startup. The size of RecentlyEvicted SHOULD never exceed eviction_memory_entries entries, which is the constant 40000.

    +

    There MUST be a configuration option mempooltxcostlimit, which SHOULD default to 80000000.

    +

    There MUST be a configuration option mempoolevictionmemoryminutes, which SHOULD default to 60.

    +

    On receiving a transaction:

    +
      +
    • If it is in RecentlyEvicted, the transaction MUST be dropped.
    • +
    • Calculate its cost. If the total cost of transactions in the mempool including this one would exceed mempooltxcostlimit, then the node MUST repeatedly call EvictTransaction (with the new transaction included as a candidate to evict) until the total cost does not exceed mempooltxcostlimit.
    • +
    +

    EvictTransaction MUST do the following:

    +
      +
    • Select a random transaction to evict, with probability in direct proportion to eviction weight.
    • +
    • Add the txid and the current time to RecentlyEvicted, dropping the oldest entry in RecentlyEvicted if necessary to keep it to at most eviction_memory_entries entries.
    • +
    • Remove it from the mempool.
    • +
    +

    Nodes SHOULD remove transactions from RecentlyEvicted that were evicted more than mempoolevictionmemoryminutes minutes ago. This MAY be done periodically, and/or just before RecentlyEvicted is accessed when receiving a transaction.

    +
    +
    +

    Rationale

    +

    The accounting for transaction size should include some overhead per transaction, to reflect the cost to the network of processing them (proof and signature verification; networking overheads; size of in-memory data structures). The implication of not including overhead is that a denial-of-service attacker would be likely to use minimum-size transactions so that more of them would fit in a block, increasing the unaccounted-for overhead. A possible counterargument would be that the complexity of accounting for this overhead is unwarranted given that the format of a transaction already imposes a minimum size. However, the proposed cost function is almost as simple as using transaction size directly.

    +

    The threshold 4000 for the cost function is chosen so that the size in bytes of a typical fully shielded Sapling transaction (with, say, 2 shielded outputs and up to 5 shielded inputs) will fall below the threshold. This has the effect of ensuring that such transactions are not evicted preferentially to typical transparent transactions because of their size.

    +

    The proposed eviction policy differs significantly from that of Bitcoin Core 3, which is primarily fee-based. This reflects differing philosophies about the motivation for fees and the level of fee that legitimate users can reasonably be expected to pay. The proposed eviction weight function does involve a penalty for transactions with a fee lower than the standard (0.0001 ZEC) value, but since there is no further benefit to increasing the fee above the standard value, it creates no pressure toward escalating fees. For transactions up to 4000 bytes, this penalty makes a transaction that pays less than the standard fee value five times as likely to be chosen for eviction (because 4000 + 16000 = 20000 = 4000 * 5).

    +

    The fee penalty is not included in the cost that determines whether the mempool is considered full. This ensures that a DoS attacker does not have an incentive to pay less than the standard fee in order to cause the mempool to be considered full sooner.

    +

    The default value of 80000000 for mempooltxcostlimit represents no more than 40 blocks’ worth of transactions in the worst case, which is the default expiration height after the Blossom network upgrade 2. It would serve no purpose to make it larger.

    +

    The mempooltxcostlimit is a per-node configurable parameter in order to provide flexibility for node operators to change it either in response to attempted denial-of-service attacks, or if needed to handle spikes in transaction demand. It may also be useful for nodes running in memory-constrained environments to reduce this parameter.

    +

    The limit of eviction_memory_entries = 40000 entries in RecentlyEvicted bounds the memory needed for this data structure. Since a txid is 32 bytes and a timestamp 8 bytes, 40000 entries can be stored in ~1.6 MB, which is small compared to other node memory usage (in particular, small compared to the maximum memory usage of the mempool itself under the default mempooltxcostlimit). eviction_memory_entries entries should be sufficient to mitigate any performance loss caused by re-accepting transactions that were previously evicted. In particular, since a transaction has a minimum cost of 4000, and the default mempooltxcostlimit is 80000000, at most 20000 transactions can be in the mempool of a node using the default parameters. While the number of transactions “in flight” or across the mempools of all nodes in the network could exceed this number, we believe that is unlikely to be a problem in practice.

    +

    Note that the RecentlyEvicted queue is intended as a performance optimization under certain conditions, rather than as a DoS-mitigation measure in itself.

    +

    The default expiry of 40 blocks after Blossom activation represents an expected time of 50 minutes. Therefore (even if some blocks are slow), most legitimate transactions are expected to expire within 60 minutes. Note however that an attacker’s transactions cannot be relied on to expire.

    +
    +
    +

    Deployment

    +

    This specification is proposed to be implemented in zcashd v2.1.0. It is independent of the Blossom network upgrade.

    +
    +
    +

    Reference implementation

    + +
    +
    +

    References

    + + + + + + + +
    1Key words for use in RFCs to Indicate Requirement Levels
    + + + + + + + +
    2Shorter Block Target Spacing
    + + + + + + + +
    3Bitcoin Core PR 6722: Limit mempool by throwing away the cheapest txn and setting min relay fee to it
    +
    +
    + + \ No newline at end of file diff --git a/zip-0401.rst b/zip-0401.rst new file mode 100644 index 00000000..314fee48 --- /dev/null +++ b/zip-0401.rst @@ -0,0 +1,207 @@ +:: + + ZIP: 401 + Title: Addressing mempool denial-of-service + Owners: Daira Hopwood + Status: Final + Category: Network + Created: 2019-09-09 + License: MIT + + +Terminology +=========== + +The key words "MUST", "SHOULD", and "MAY" in this document are to be interpreted +as described in RFC 2119. [#RFC2119]_ + + +Abstract +======== + +This proposal specifies a change to the behaviour of ``zcashd`` nodes intended to +mitigate denial-of-service from transaction flooding. + + +Motivation +========== + +Adoption of this proposal would increase robustness of Zcash nodes against +denial-of-service attack, in particular attacks that attempt to exhaust node +memory. + +Bitcoin Core added size limitation for the mempool in version 0.12 +[#BitcoinCore-PR6722]_, defaulting to 300 MB. This was after Zcash forked from +Bitcoin Core. + + +Requirements +============ + +The memory usage of a node’s mempool should be bounded. + +The eviction policy should as far as possible not be “gameable” by an adversary, +i.e. an adversary should not be able to cause legitimate transactions (that do not +themselves present any denial-of-service problem) to be preferentially evicted +relative to its own transactions. + +Any configuration options should have reasonable defaults, i.e. without changing +relevant configuration, a node should be adequately protected from denial-of-service +via mempool memory exhaustion. + + +Non-requirements +================ + +The current architecture of Zcash imposes fundamental limits on scaling of +transaction throughput. This proposal does not increase the aggregate transaction +capacity of the network. (The Blossom upgrade does increase transaction capacity, +by a factor of two [#zip-0208]_.) + +Denial-of-service issues in the messaging layer of the peer-to-peer protocol are +out of scope for this proposal. + +This proposal is focused primarily on memory exhaustion attacks. It does not +attempt to use fees to make denial-of-service economically prohibitive, since that +is unlikely to be feasible while maintaining low fees for legitimate users. It +does not preclude changes in fee policy. + + +Specification +============= + +This specification describes the intended behaviour of ``zcashd`` nodes. Other node +implementations MAY implement the same or similar behaviour, but this is not a +requirement of the network protocol. Thus, RFC 2119 conformance keywords below are +to be interpreted only as placing requirements on the ``zcashd`` implementation (and +potentially other implementations that have adopted this specification in full). + +The mempool of a node holds a set of transactions. Each transaction has a *cost*, +which is an integer defined as: + + max(serialized transaction size in bytes, 4000) + +Each transaction also has an *eviction weight*, which is *cost* + *low_fee_penalty*, +where *low_fee_penalty* is 16000 if the transaction pays a fee less than +10000 zatoshi, otherwise 0. + +Each node also MUST hold a FIFO queue RecentlyEvicted of pairs (txid, time), where +the time indicates when the given txid was evicted. This SHOULD be empty on node +startup. The size of RecentlyEvicted SHOULD never exceed ``eviction_memory_entries`` +entries, which is the constant 40000. + +There MUST be a configuration option ``mempooltxcostlimit``, which SHOULD default +to 80000000. + +There MUST be a configuration option ``mempoolevictionmemoryminutes``, which +SHOULD default to 60. + +On receiving a transaction: + +* If it is in RecentlyEvicted, the transaction MUST be dropped. +* Calculate its cost. If the total cost of transactions in the mempool including + this one would exceed ``mempooltxcostlimit``, then the node MUST repeatedly + call EvictTransaction (with the new transaction included as a candidate to evict) + until the total cost does not exceed ``mempooltxcostlimit``. + +EvictTransaction MUST do the following: + +* Select a random transaction to evict, with probability in direct proportion to + eviction weight. +* Add the txid and the current time to RecentlyEvicted, dropping the oldest entry + in RecentlyEvicted if necessary to keep it to at most ``eviction_memory_entries`` + entries. +* Remove it from the mempool. + +Nodes SHOULD remove transactions from RecentlyEvicted that were evicted more than +``mempoolevictionmemoryminutes`` minutes ago. This MAY be done periodically, +and/or just before RecentlyEvicted is accessed when receiving a transaction. + + +Rationale +========= + +The accounting for transaction size should include some overhead per transaction, +to reflect the cost to the network of processing them (proof and signature +verification; networking overheads; size of in-memory data structures). The +implication of not including overhead is that a denial-of-service attacker would +be likely to use minimum-size transactions so that more of them would fit in a +block, increasing the unaccounted-for overhead. A possible counterargument would +be that the complexity of accounting for this overhead is unwarranted given that +the format of a transaction already imposes a minimum size. However, the proposed +cost function is almost as simple as using transaction size directly. + +The threshold 4000 for the cost function is chosen so that the size in bytes of a +typical fully shielded Sapling transaction (with, say, 2 shielded outputs and up +to 5 shielded inputs) will fall below the threshold. This has the effect of +ensuring that such transactions are not evicted preferentially to typical +transparent transactions because of their size. + +The proposed eviction policy differs significantly from that of Bitcoin Core +[#BitcoinCore-PR6722]_, which is primarily fee-based. This reflects differing +philosophies about the motivation for fees and the level of fee that legitimate +users can reasonably be expected to pay. The proposed eviction weight function +does involve a penalty for transactions with a fee lower than the standard +(0.0001 ZEC) value, but since there is no further benefit to increasing the fee +above the standard value, it creates no pressure toward escalating fees. For +transactions up to 4000 bytes, this penalty makes a transaction that pays less +than the standard fee value five times as likely to be chosen for eviction +(because 4000 + 16000 = 20000 = 4000 \* 5). + +The fee penalty is not included in the cost that determines whether the mempool +is considered full. This ensures that a DoS attacker does not have an incentive +to pay less than the standard fee in order to cause the mempool to be considered +full sooner. + +The default value of 80000000 for ``mempooltxcostlimit`` represents no more +than 40 blocks’ worth of transactions in the worst case, which is the default +expiration height after the Blossom network upgrade [#zip-0208]_. It would serve +no purpose to make it larger. + +The ``mempooltxcostlimit`` is a per-node configurable parameter in order to +provide flexibility for node operators to change it either in response to +attempted denial-of-service attacks, or if needed to handle spikes in transaction +demand. It may also be useful for nodes running in memory-constrained environments +to reduce this parameter. + +The limit of ``eviction_memory_entries`` = 40000 entries in RecentlyEvicted bounds +the memory needed for this data structure. Since a txid is 32 bytes and a +timestamp 8 bytes, 40000 entries can be stored in ~1.6 MB, which is small compared +to other node memory usage (in particular, small compared to the maximum memory +usage of the mempool itself under the default ``mempooltxcostlimit``). +``eviction_memory_entries`` entries should be sufficient to mitigate any +performance loss caused by re-accepting transactions that were previously evicted. +In particular, since a transaction has a minimum cost of 4000, and the default +``mempooltxcostlimit`` is 80000000, at most 20000 transactions can be in the +mempool of a node using the default parameters. While the number of transactions +“in flight” or across the mempools of all nodes in the network could exceed this +number, we believe that is unlikely to be a problem in practice. + +Note that the RecentlyEvicted queue is intended as a performance optimization +under certain conditions, rather than as a DoS-mitigation measure in itself. + +The default expiry of 40 blocks after Blossom activation represents an expected +time of 50 minutes. Therefore (even if some blocks are slow), most legitimate +transactions are expected to expire within 60 minutes. Note however that an +attacker’s transactions cannot be relied on to expire. + + +Deployment +========== + +This specification is proposed to be implemented in ``zcashd`` v2.1.0. It is +independent of the Blossom network upgrade. + + +Reference implementation +======================== + +* `PR 4145: Implementation `_ +* `PR 4166: macOS compliation fix `_ + +References +========== + +.. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ +.. [#zip-0208] `Shorter Block Target Spacing `_ +.. [#BitcoinCore-PR6722] `Bitcoin Core PR 6722: Limit mempool by throwing away the cheapest txn and setting min relay fee to it `_ diff --git a/zip-1001.html b/zip-1001.html new file mode 100644 index 00000000..1f4971df --- /dev/null +++ b/zip-1001.html @@ -0,0 +1,123 @@ + + + + ZIP 1001: Keep the Block Distribution as Initially Defined — 90% to Miners + + + +
    +
    ZIP: 1001
    +Title: Keep the Block Distribution as Initially Defined — 90% to Miners
    +Owner: mistfpga (zcash forums) <steve@mistfpga.net>
    +Status: Draft
    +Category: Consensus
    +Created: 2019-08-01
    +License: CC BY-SA 4.0 <https://creativecommons.org/licenses/by-sa/4.0/>
    +Discussions-To: <https://forum.zcashcommunity.com/t/zip-proposal-keep-the-block-distribution-as-initaly-defined-90-to-miners/33843>
    +
    +

    Terminology

    +

    The key words "MUST", "MUST NOT", "SHOULD", and "SHOULD NOT" in this document are to be interpreted as described in RFC 2119. 2

    +

    For clarity this ZIP defines these terms:

    +
      +
    • Mining software in the context of this ZIP refers to pool software, local mining software, or staking software.
    • +
    • Mining is defined as the action of processing transactions, so this would include proof of stake, if Zcash would switch to that.
    • +
    • Mining coins transferred via fees are considered rewards (infinite), coins generated via block generation are considered distribution (finite).
    • +
    • Block distribution is defined as the block reward minus transaction fees. the protocol specification uses "block subsidy".
    • +
    • Spirit is defined as what is the intended outcome of the ZIP. 1
    • +
    • Initial promise is non-neutral language referencing the block distribution rules as initially set out. 3
    • +
    + + + + + + + +
    1If there is contradiction between Spirit and any other part of the proposal that needs to be addressed, in the event it is not addressed Spirit is assumed to overrule all.
    +
    +
    +

    Abstract

    +

    The spirit of this ZIP is to is to ensure that the Founders’ Reward ends. It is not the intention of this ZIP to stop protocol-based donations.

    +

    It is a simple short ZIP.

    +

    Hopefully it will be compatible with a number of other ZIPs and can be worked into them.

    +
    +
    +

    Out of Scope for this Proposal

    +
      +
    • Governance on how decisions are made; this ZIP is not meant to be used as a form of governance.
    • +
    • Future funding.
    • +
    • It does not cover other donations or revenue streams.
    • +
    +
    +
    +

    Motivation

    +
      +
    • The Founders’ Reward is set to expire in 2020.
    • +
    • To honour the initial promise of giving 90% of total block distribution to miners. Therefore the protocol will give them 100% of the block distribution after the first halving.
    • +
    +
    +
    +

    Requirements

    +
      +
    • The Founders’ Reward MUST end at the first halving in October 2020.
    • +
    • This ZIP does not preclude the Electric Coin Company from sourcing funding elsewhere, or from donations.
    • +
    +
    +
    +

    Specification

    +
      +
    • The existing Founders’ Reward consensus rules 4 5 MUST be preserved.
    • +
    • Specifically, FoundersReward(height) MUST equal 0 if Halving(height) >= 1. (For clarity once the halving happens the Founders’ Reward stops, as per the rules outlined in 4 and 5.)
    • +
    • This specification is only meant to stop the Founders’ Reward, not protocol-based donations.
    • +
    • Enforcing some kind of mandatory donation via whatever mechanism would be seen as continuation of the Founders’ Reward.
    • +
    +
    +
    +

    Implications to other users

    +
      +
    • Block distribution payouts to Founders’ Reward addresses will cease at the first halving.
    • +
    • Pools and other software need to take this into account.
    • +
    +
    +
    +

    Technical implementation

    +

    This ZIP requires no changes to current consensus implementations.

    +
    +
    +

    References

    + + + + + + + +
    2Key words for use in RFCs to Indicate Requirement Levels
    + + + + + + + +
    3Zcash blog: Funding, Incentives, and Governance. February 1, 2016
    + + + + + + + +
    4Zcash Protocol Specification, Version 2019.0.8 exactly. Section 7.7: Calculation of Block Subsidy and Founders Reward
    + + + + + + + +
    5Zcash Protocol Specification, Version 2019.0.8 exactly. Section 7.8: Payment of Founders’ Reward
    +
    +
    + + \ No newline at end of file diff --git a/zip-1001.rst b/zip-1001.rst new file mode 100644 index 00000000..f1155bb0 --- /dev/null +++ b/zip-1001.rst @@ -0,0 +1,113 @@ +:: + + ZIP: 1001 + Title: Keep the Block Distribution as Initially Defined — 90% to Miners + Owner: mistfpga (zcash forums) + Status: Draft + Category: Consensus + Created: 2019-08-01 + License: CC BY-SA 4.0 + Discussions-To: + + +Terminology +=========== + +.. role:: editor-note + +The key words "MUST", "MUST NOT", "SHOULD", and "SHOULD NOT" in this document +are to be interpreted as described in RFC 2119. [#RFC2119]_ + +For clarity this ZIP defines these terms: + +* Mining software in the context of this ZIP refers to pool software, local + mining software, or staking software. +* Mining is defined as the action of processing transactions, so this would + include proof of stake, if Zcash would switch to that. +* Mining coins transferred via fees are considered rewards (infinite), coins + generated via block generation are considered distribution (finite). +* Block distribution is defined as the block reward minus transaction fees. + :editor-note:`the protocol specification uses "block subsidy".` +* Spirit is defined as what is the intended outcome of the ZIP. [#spirit]_ +* Initial promise is non-neutral language referencing the block distribution + rules as initially set out. [#funding]_ + +.. [#spirit] If there is contradiction between Spirit and any other part of + the proposal that needs to be addressed, in the event it is not addressed + Spirit is assumed to overrule all. + + +Abstract +======== + +The spirit of this ZIP is to is to ensure that the Founders’ Reward ends. +It is not the intention of this ZIP to stop protocol-based donations. + +It is a simple short ZIP. + +Hopefully it will be compatible with a number of other ZIPs and can be +worked into them. + + +Out of Scope for this Proposal +============================== + +* Governance on how decisions are made; this ZIP is not meant to be used as + a form of governance. +* Future funding. +* It does not cover other donations or revenue streams. + + +Motivation +========== + +* The Founders’ Reward is set to expire in 2020. +* To honour the initial promise of giving 90% of total block distribution to + miners. Therefore the protocol will give them 100% of the block distribution + after the first halving. + + +Requirements +============ + +* The Founders’ Reward MUST end at the first halving in October 2020. +* This ZIP does not preclude the Electric Coin Company from sourcing funding + elsewhere, or from donations. + + +Specification +============= + +* The existing Founders’ Reward consensus rules [#spec-subsidies]_ + [#spec-foundersreward]_ MUST be preserved. +* Specifically, ``FoundersReward(height)`` MUST equal ``0`` if + ``Halving(height) >= 1``. (For clarity once the halving happens the + Founders’ Reward stops, as per the rules outlined in [#spec-subsidies]_ + and [#spec-foundersreward]_.) +* This specification is only meant to stop the Founders’ Reward, not + protocol-based donations. +* Enforcing some kind of mandatory donation via whatever mechanism would + be seen as continuation of the Founders’ Reward. + + +Implications to other users +=========================== + +* Block distribution payouts to Founders’ Reward addresses will cease at + the first halving. +* Pools and other software need to take this into account. + + +Technical implementation +======================== + +This ZIP requires no changes to current consensus implementations. + + +References +========== + +.. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ +.. [#funding] `Zcash blog: Funding, Incentives, and Governance. February 1, 2016 `_ +.. [#spec-subsidies] `Zcash Protocol Specification, Version 2019.0.8 exactly. Section 7.7: Calculation of Block Subsidy and Founders Reward `_ +.. [#spec-foundersreward] `Zcash Protocol Specification, Version 2019.0.8 exactly. Section 7.8: Payment of Founders’ Reward `_ diff --git a/zip-1002.html b/zip-1002.html new file mode 100644 index 00000000..5793cfff --- /dev/null +++ b/zip-1002.html @@ -0,0 +1,161 @@ + + + + ZIP 1002: Opt-in Donation Feature + + + +
    +
    ZIP: 1002
    +Title: Opt-in Donation Feature
    +Owner: mistfpga (zcash forums) <steve@mistfpga.net>
    +Status: Draft
    +Category: Standards Track
    +Created: 2019-07-17
    +License: CC BY-SA 4.0 <https://creativecommons.org/licenses/by-sa/4.0/>
    +Discussions-To: <https://forum.zcashcommunity.com/t/zip-proposal-a-genuine-opt-in-protocol-level-development-donation-option/33846>
    +
    +

    Terminology

    +

    The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" in this document are to be interpreted as described in RFC 2119. 3

    +

    This ZIP defines these terms:

    +
      +
    • Signalling is defined as expressing a voice through whatever mechanism is implemented or sought for that decision. In the context of this ZIP it primarily refers to signalling what to do with funds. This could be done by miners, straw poll, coinbase, proof of value, some internet poll thing, etc.
    • +
    • Mining software in the context of this ZIP refers to pool software, local mining software, or staking software.
    • +
    • Custodial services include any service in which a party controls the private keys of another party; mining pools and online wallets are examples.
    • +
    • Mining is defined as the action of processing transactions, so this would include proof of stake, if Zcash would switch to that.
    • +
    • User is defined as anyone that uses ZEC or another coin that adopts this ZIP.
    • +
    • Mining coins transferred via fees are considered rewards (infinite), coins generated via block generation are considered distribution (finite).
    • +
    • Opt-in vs opt-out - Opting out is a purely selfish act in the context of this ZIP. They do not burn the coins therefore giving everyone value. They keep them.
    • +
    • Burning coins is purposefully taking them out of circulation forever at the protocol block distribution level.
    • +
    • Initial promise is defined as complete honour of distributing all rewards to the miner. - This is a non neutral phrase. I accept that.
    • +
    • Transaction sender is defined as anyone who sends a transaction across the Zcash network, be it t-t, z-z, t-z, z-t.
    • +
    • Fee is the standard transaction fee that a sender puts on a transaction to get it included into a block and that is collected by the miner of that block.
    • +
    • Transaction donation is an optional signalling string that creates a payment to the coins base donations.
    • +
    • Block Reward is defined as block distribution plus mining fees.
    • +
    • Spirit is defined as what is the intended outcome of the ZIP. 1
    • +
    + + + + + + + +
    1If there is contradiction between Spirit and any other part of the proposal that needs to be addressed, in the event it is not addressed Spirit is assumed to overrule all.
    +
    +
    +

    Out of Scope for this Proposal

    +

    Governance on how decisions are made. This ZIP is not meant to be used as a form of governance. It is a protocol-level opt-in for supporting the Zcash network development (like the Founders’ Reward, just with opt-out).

    +

    Signalling. Whilst a lot of the ZIP relies on the ability to signal intent in one way or another, it does not put forward such a mechanism and is designed to work with various form of signalling, or potentially without signalling at all.

    +
    +
    +

    Abstract

    +

    The spirit of this ZIP is:

    +
      +
    • To allow continual funding of the Electric Coin Company, the Zcash Foundation, or some combination of these should a user choose to do so.
    • +
    • To add a genuine opt-in feature, which is done at the user's choice.
    • +
    +
    +
    +

    Motivation

    +

    Technology changes, and it changes fast. What works now, may be easily breakable in 10 years, 20 years and certainly 50 years.

    +

    To help ensure ZEC can keep up with these changes, now and in 50 or 500 years' time, there needs to be a continual funding for research into new technology and financial stability in order to attract new talent.

    +

    The only source of indefinite wealth transfer is transaction fees or donations. This ZIP is specifically about voluntary donations (including via mining fees).

    +
    +
    +

    Requirements

    +
      +
    • An additional opt-in mechanism, baked into the protocol. This is a condition of the Zcash Foundation too. 2
    • +
    • Give an alterative to redistribution of either the current block distribution structure or the emission curve.
    • +
    • The funding received by the Electric Coin Company and/or Zcash Foundation under this proposal MUST only be used to fund ZEC development for the lifetime of their receipt of it.
    • +
    • To give a strong indication to the community and users that they have freedom to decide what they do with their coins and donations.
    • +
    • Bake the addresses into the node codebase, in order that the wallet software or pool software does not need to keep track of donation addresses.
    • +
    • Prevent users from sending donations to old addresses.
    • +
    • Make it easier for pools to add support and prove that they are actually donating the percentage they say they are.
    • +
    • Users MUST NOT be forced to signal.
    • +
    + + + + + + + +
    2The Zcash Foundation has stated (later clarified in 4) that the Foundation would only support proposals that: a) don’t rely on the Foundation being a single gatekeeper of funds; b) don’t change the upper bound of ZEC supply; and c) have some kind of opt-in mechanism for choosing to disburse funds (from miners and/or users).
    +
    +
    +

    Specification

    +
      +
    • This ZIP MUST enforce the initial promise as defined by default.
    • +
    • The official client MUST default to be counted as initial promise.
    • +
    • No signal MUST be counted as whatever the pool is signalling for, when using a pool.
    • +
    • Security MUST NOT be lessened.
    • +
    • This ZIP MAY be set to opt-in via a user set flag.
    • +
    • This ZIP MUST contain donation addresses in the coinbase, in a similar fashion to the current FR.
    • +
    • When sending transactions the sender MAY signal their donation.
    • +
    • A signal from a transaction sender MUST NOT override the default transaction processor signal for that transaction.
    • +
    • A transaction sender MAY elect to include separate donation fees which MUST NOT be overridden by the transaction processor if this used or not.
    • +
    +

    this proposal is being published as a ZIP for the purpose of discussion and for the Zcash Foundation's sentiment collection process, despite significant issues with lack of clarity in the above specification.

    +
    +
    +

    Raised objections and issues so far

    +
      +
    • This adds complexity to the protocol, which is technically not needed and generally a bad idea.
    • +
    • This does not add anything that cannot already be done under the current protocol by users manually, although not to the same extent.
    • +
    • Block sizes, this may impact the motivation to increase block sizes should that need arise.
    • +
    • Signalling from shielded addresses to donations at taddresses?
    • +
    • Once zcash goes full z address, how will transparency of donations be proven?
    • +
    • ZEC is designed to not have high transaction fees or a secondary transaction fee market. Is this a core principle?
    • +
    • A similar goal can be achieved without initial promise and just burn - mistfpga: I dislike taking coins out of circulation intentionally - it is an attempt to avoid that.
    • +
    • Further note: If burn must be an option I would like to use something like the "rolling burn" option. this is not defined; it was intended that another ZIP be written to define it, but that has not been done.
    • +
    +
    +
    +

    Implications to other users

    +
      +
    • Wallet development will need to be considered. Hopefully the requirements will lessen this impact after the first initial change.
    • +
    • What happens if the Electric Coin Company and/or the Zcash Foundation close down, will the donations: +
        +
      • go to into the mining fee
      • +
      • get burnt
      • +
      • get sent as change to the original sender
      • +
      • be distributed via some other mechanism?
      • +
      +
    • +
    +
    +
    +

    Technical implementation

    +

    Stuff that is already implemented in some form or another:

    +
      +
    • Optional fees are already implemented in some wallet software.
    • +
    • Optional fees already cannot be overridden by miners.
    • +
    • Hardcoded donation addresses are already baked into the protocol so it should be minor work to adjust them to the signalling addresses.
    • +
    • Hardcoded donation address already cannot be changed by pools or software.
    • +
    • Signalling could be handled at the pool level
    • +
    • Pools already add their own addresses to the coinbase, including donations.
    • +
    +
    +
    +

    References

    + + + + + + + +
    3Key words for use in RFCs to Indicate Requirement Levels
    + + + + + + + +
    4Zcash Foundation Guidance on Dev Fund Proposals. Zcash Foundation blog, August 6, 2019.
    +
    +
    + + \ No newline at end of file diff --git a/zip-1002.rst b/zip-1002.rst new file mode 100644 index 00000000..8f052dfa --- /dev/null +++ b/zip-1002.rst @@ -0,0 +1,200 @@ +:: + + ZIP: 1002 + Title: Opt-in Donation Feature + Owner: mistfpga (zcash forums) + Status: Draft + Category: Standards Track + Created: 2019-07-17 + License: CC BY-SA 4.0 + Discussions-To: + + +Terminology +=========== + +The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" in this +document are to be interpreted as described in RFC 2119. [#RFC2119]_ + +This ZIP defines these terms: + +* Signalling is defined as expressing a voice through whatever mechanism is + implemented or sought for that decision. In the context of this ZIP it + primarily refers to signalling what to do with funds. This could be done + by miners, straw poll, coinbase, proof of value, some internet poll thing, + etc. +* Mining software in the context of this ZIP refers to pool software, local + mining software, or staking software. +* Custodial services include any service in which a party controls the + private keys of another party; mining pools and online wallets are examples. +* Mining is defined as the action of processing transactions, so this would + include proof of stake, if Zcash would switch to that. +* User is defined as anyone that uses ZEC or another coin that adopts this + ZIP. +* Mining coins transferred via fees are considered rewards (infinite), coins + generated via block generation are considered distribution (finite). +* Opt-in vs opt-out - Opting out is a purely selfish act in the context of + this ZIP. They do not burn the coins therefore giving everyone value. They + keep them. +* Burning coins is purposefully taking them out of circulation forever at the + protocol block distribution level. +* Initial promise is defined as complete honour of distributing all rewards to + the miner. - This is a non neutral phrase. I accept that. +* Transaction sender is defined as anyone who sends a transaction across the + Zcash network, be it t-t, z-z, t-z, z-t. +* Fee is the standard transaction fee that a sender puts on a transaction to + get it included into a block and that is collected by the miner of that + block. +* Transaction donation is an optional signalling string that creates a payment + to the coins base donations. +* Block Reward is defined as block distribution plus mining fees. +* Spirit is defined as what is the intended outcome of the ZIP. [#spirit]_ + +.. [#spirit] If there is contradiction between Spirit and any other part of + the proposal that needs to be addressed, in the event it is not addressed + Spirit is assumed to overrule all. + + +Out of Scope for this Proposal +============================== + +Governance on how decisions are made. This ZIP is not meant to be used as a +form of governance. It is a protocol-level opt-in for supporting the Zcash +network development (like the Founders’ Reward, just with opt-out). + +Signalling. Whilst a lot of the ZIP relies on the ability to signal intent in +one way or another, it does not put forward such a mechanism and is designed +to work with various form of signalling, or potentially without signalling at +all. + + +Abstract +======== + +The spirit of this ZIP is: + +* To allow continual funding of the Electric Coin Company, the Zcash Foundation, + or some combination of these should a user choose to do so. +* To add a genuine opt-in feature, which is done at the user's choice. + + +Motivation +========== + +Technology changes, and it changes fast. What works now, may be easily breakable +in 10 years, 20 years and certainly 50 years. + +To help ensure ZEC can keep up with these changes, now and in 50 or 500 years' +time, there needs to be a continual funding for research into new technology and +financial stability in order to attract new talent. + +The only source of indefinite wealth transfer is transaction fees or donations. +This ZIP is specifically about voluntary donations (including via mining fees). + + +Requirements +============ + +.. role:: editor-note + +* An additional opt-in mechanism, baked into the protocol. This is a condition + of the Zcash Foundation too. [#foundation]_ +* Give an alterative to redistribution of either the current block distribution + structure or the emission curve. +* The funding received by the Electric Coin Company and/or Zcash Foundation under + this proposal MUST only be used to fund ZEC development for the lifetime of + their receipt of it. +* To give a strong indication to the community and users that they have freedom + to decide what they do with their coins and donations. +* Bake the addresses into the node codebase, in order that the wallet software + or pool software does not need to keep track of donation addresses. +* Prevent users from sending donations to old addresses. +* Make it easier for pools to add support and prove that they are actually + donating the percentage they say they are. +* Users MUST NOT be forced to signal. + +.. [#foundation] The Zcash Foundation has stated (later clarified in + [#zfnd-guidance]_) that the Foundation would only support proposals that: + a) don’t rely on the Foundation being a single gatekeeper of funds; + b) don’t change the upper bound of ZEC supply; and + c) have some kind of opt-in mechanism for choosing to disburse funds + (from miners and/or users). + + +Specification +============= + +* This ZIP MUST enforce the initial promise as defined by default. +* The official client MUST default to be counted as initial promise. +* No signal MUST be counted as whatever the pool is signalling for, when using + a pool. +* Security MUST NOT be lessened. +* This ZIP MAY be set to opt-in via a user set flag. +* This ZIP MUST contain donation addresses in the coinbase, in a similar fashion + to the current FR. +* When sending transactions the sender MAY signal their donation. +* A signal from a transaction sender MUST NOT override the default transaction + processor signal for that transaction. +* A transaction sender MAY elect to include separate donation fees which MUST NOT + be overridden by the transaction processor if this used or not. + +:editor-note:`this proposal is being published as a ZIP for the purpose of +discussion and for the Zcash Foundation's sentiment collection process, +despite significant issues with lack of clarity in the above specification.` + + +Raised objections and issues so far +=================================== + +* This adds complexity to the protocol, which is technically not needed + and generally a bad idea. +* This does not add anything that cannot already be done under the current protocol + by users manually, although not to the same extent. +* Block sizes, this may impact the motivation to increase block sizes should that + need arise. +* Signalling from shielded addresses to donations at taddresses? +* Once zcash goes full z address, how will transparency of donations be proven? +* ZEC is designed to not have high transaction fees or a secondary transaction fee + market. *Is this a core principle?* +* A similar goal can be achieved without initial promise and just burn - + mistfpga: I dislike taking coins out of circulation intentionally - it is an + attempt to avoid that. +* Further note: If burn must be an option I would like to use something like the + "rolling burn" option. :editor-note:`this is not defined; it was intended that + another ZIP be written to define it, but that has not been done.` + + +Implications to other users +=========================== + +* Wallet development will need to be considered. Hopefully the requirements will + lessen this impact after the first initial change. + +* What happens if the Electric Coin Company and/or the Zcash Foundation close down, + will the donations: + + - go to into the mining fee + - get burnt + - get sent as change to the original sender + - be distributed via some other mechanism? + + +Technical implementation +======================== + +Stuff that is already implemented in some form or another: + +* Optional fees are already implemented in some wallet software. +* Optional fees already cannot be overridden by miners. +* Hardcoded donation addresses are already baked into the protocol so it + should be minor work to adjust them to the signalling addresses. +* Hardcoded donation address already cannot be changed by pools or software. +* Signalling could be handled at the pool level +* Pools already add their own addresses to the coinbase, including donations. + + +References +========== + +.. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ +.. [#zfnd-guidance] `Zcash Foundation Guidance on Dev Fund Proposals. Zcash Foundation blog, August 6, 2019. `_ diff --git a/zip-1003.html b/zip-1003.html new file mode 100644 index 00000000..9aa4f9b0 --- /dev/null +++ b/zip-1003.html @@ -0,0 +1,127 @@ + + + + ZIP 1003: 20% Split Evenly Between the ECC and the Zcash Foundation, and a Voting System Mandate + + + +
    +
    ZIP: 1003
    +Title: 20% Split Evenly Between the ECC and the Zcash Foundation, and a Voting System Mandate
    +Owner: aristarchus (zcash forums)
    +Status: Draft
    +Category: Consensus / Process
    +Created: 2019-06-19
    +License: MIT
    +Discussions-To: <https://forum.zcashcommunity.com/t/dev-fund-proposal-20-split-between-the-ecc-and-the-foundation/33862>
    +
    +

    Terminology

    +

    The key words "MUST", "MUST NOT", "SHOULD", and "SHOULD NOT" in this document are to be interpreted as described in RFC 2119. 1

    +

    For clarity in this ZIP I define these terms:

    +
    +
    2nd Halvening period
    +
    the 4-year period of time, roughly from October 2020 to October 2024, during which at most 5,250,000 ZEC will be minted.
    +
    3rd Halvening period
    +
    the 4-year period of time roughly from October 2024 to October 2028.
    +
    DF%
    +
    Dev Fund Percentage, the portion of newly minted ZEC in each block reserved for a development fund.
    +
    +
    +
    +

    Abstract

    +

    This proposal would allocate a 20% Dev Fund Percentage to be split evenly between the Electric Coin Company (ECC) and the Zcash Foundation during the 2nd Halvening period. This proposal aims to be simple to implement, without a single point of failure, and comes with mandates for transparency, accountability and a mandate to build a development fund voting mechanism to be used during the 3rd Halvening period. This proposal is designed to strike a balance between ensuring that high quality development work can continue uninterrupted, with the need to further decentralize Zcash development funding as soon as possible.

    +
    +
    +

    Motivation

    +

    Strengths of this proposal:

    +
      +
    1. Simple to implement. I would rather developers spend time scaling Zcash rather than implementing the development funding mechanism.
    2. +
    3. Developers will have several years to work on a great decentralized development funding voting mechanism.
    4. +
    5. 20% is a large enough percentage that there should be enough development funding for many different ZEC price scenarios. To those who want to decrease this percentage: Overpaying for security is a gift to miners, to the detriment of every other stakeholder in the Zcash community. I will even make the strong statement that intentionally overpaying the miners for security is stealing from the other stakeholders.
    6. +
    7. With two entities receiving funds there is no single point of failure.
    8. +
    +
    +
    +

    Requirements and Specification

    +
      +
    1. DF% MUST be 20 percent, split evenly between ECC and the Zcash Foundation during the 2nd Halvening period.
    2. +
    3. The Dev Fund MUST only be spent on research, development and adoption of Zcash.
    4. +
    5. A voting system for development funding MUST be built and implemented in order to be used during the 3rd Halvening period.
    6. +
    +
    +

    Voting System Requirements

    +

    Here are the general properties of the mandated voting mechanism. I don’t want to specify the technical implementation details, since I believe this is a job suited for the engineers building this system.

    +
      +
    1. Voting SHOULD be private.
    2. +
    3. Only ZEC holders can vote.
    4. +
    5. Voting should happen on-chain.
    6. +
    7. In order to vote, you must lock your ZEC so it cannot be spent for a period of time. This is to force the voters to have ‘skin in the game’ and prevent someone nefarious from buying a lot of ZEC just before an election and then dumping it immediately after.
    8. +
    9. Voters can choose how long to lock their ZEC, and their voting power is proportional to the time that the ZEC is locked. For example, someone who votes with 10 ZEC and locks it for 6 months would have the same voting power as someone who votes with 20 ZEC and locks it for 3 months. Of course there must be a maximum lock time, perhaps a year, to prevent anyone from getting ‘infinite’ voting power by locking their ZEC permanently.
    10. +
    11. The final results of the vote should be transparent to and verifiable by everyone.
    12. +
    13. The system should be totally open and allow anyone/any organization to compete for funding to develop Zcash.
    14. +
    +
    +
    +

    Transparency and Accountability for the ECC and the Zcash Foundation

    +

    These requirements would apply to both ECC and the Zcash Foundation. The mandate is to adhere to these accountability requirements originally put forward by the Foundation:

    +
      +
    • Monthly public developer calls, detailing current technical roadmap and updates.
    • +
    • Quarterly technology roadmap reports and updates.
    • +
    • Quarterly financial reports, detailing spending levels/burn rate and cash/ZEC on hand.
    • +
    • A yearly, audited financial report akin to the Form 990 for US-based nonprofits.
    • +
    • Yearly reviews of organization performance, along the lines of the State of the Zcash Foundation report 2.
    • +
    +
    +
    +

    Requirements Specifically for the ECC

    +

    Motivated by the Zcash Foundation’s proposal that the ECC become a non-profit 3, I am going to list general requirements for the ECC to abide by if they choose to receive funds and work on behalf of ZEC holders.

    +
      +
    1. Because I share the Foundation’s concern that the ECC could be “beholden to its shareholders”, I am mandating that the ECC should be working in the service of the Zcash community and shall serve no other masters. The original investors/founders who are not still working in the service of the Zcash community SHOULD NOT have control over the use of the new development funds.
    2. +
    3. The revenue received from the Dev Fund SHOULD NOT be used to give further rewards to, even indirectly, the investors, founders, or shareholders of the ECC, who are not working on Zcash after the first halving. They have already received the Founders’ Reward and this new development fund is not supposed to further benefit them.
    4. +
    5. The ECC SHOULD offer competitive pay and a stake in upside of the success of Zcash as a way to attract the best and brightest. I do want the ECC be able to maintain a world class team capable of competing with the tech giants of the world (Google, Apple etc.).
    6. +
    7. The ECC SHOULD continue to engage with regulators and advocate for privacy preserving technology. The legal structure of the ECC must not hamper these critical efforts in any way.
    8. +
    +

    I am not mandating non-profit status for the ECC. Maybe that is the best legal structure, maybe something else is better.

    +

    Finally, in the event that the voting system isn’t implemented by the start of the 3rd Halvening period, the 20% of funds intended to go to the ‘voting development fund’ should instead not be minted.

    +
    +
    +
    +

    References

    + + + + + + + +
    1Key words for use in RFCs to Indicate Requirement Levels
    + + + + + + + +
    2The State of the Zcash Foundation in 2019. Zcash Foundation blog, January 31, 2019.
    + + + + + + + +
    3Zcash Foundation Guidance on Dev Fund Proposals. Zcash Foundation blog, August 6, 2019.
    +
    +
    +

    Change Log

    +
      +
    • 2019-06-19 Initial post
    • +
    • 2019-26-07 Listed three strengths of this proposal
    • +
    • 2019-08-13 Voting System Requirements
    • +
    • 2019-08-20 Requirements Specifically for the ECC
    • +
    • 2019-08-29 Update to be more like a ZIP draft.
    • +
    +
    +
    + + \ No newline at end of file diff --git a/zip-1003.rst b/zip-1003.rst new file mode 100644 index 00000000..a94bb5f7 --- /dev/null +++ b/zip-1003.rst @@ -0,0 +1,171 @@ +:: + + ZIP: 1003 + Title: 20% Split Evenly Between the ECC and the Zcash Foundation, and a Voting System Mandate + Owner: aristarchus (zcash forums) + Status: Draft + Category: Consensus / Process + Created: 2019-06-19 + License: MIT + Discussions-To: + + +Terminology +=========== + +The key words "MUST", "MUST NOT", "SHOULD", and "SHOULD NOT" in this document +are to be interpreted as described in RFC 2119. [#RFC2119]_ + +For clarity in this ZIP I define these terms: + +2nd Halvening period + the 4-year period of time, roughly from October 2020 to October 2024, + during which at most 5,250,000 ZEC will be minted. +3rd Halvening period + the 4-year period of time roughly from October 2024 to October 2028. +DF% + Dev Fund Percentage, the portion of newly minted ZEC in each block + reserved for a development fund. + + +Abstract +======== + +This proposal would allocate a 20% Dev Fund Percentage to be split evenly +between the Electric Coin Company (ECC) and the Zcash Foundation during the +2nd Halvening period. This proposal aims to be simple to implement, without +a single point of failure, and comes with mandates for transparency, +accountability and a mandate to build a development fund voting mechanism +to be used during the 3rd Halvening period. This proposal is designed to +strike a balance between ensuring that high quality development work can +continue uninterrupted, with the need to further decentralize Zcash +development funding as soon as possible. + + +Motivation +========== + +Strengths of this proposal: + +1. Simple to implement. I would rather developers spend time scaling Zcash + rather than implementing the development funding mechanism. +2. Developers will have several years to work on a great decentralized + development funding voting mechanism. +3. 20% is a large enough percentage that there should be enough development + funding for many different ZEC price scenarios. To those who want to + decrease this percentage: Overpaying for security is a gift to miners, + to the detriment of every other stakeholder in the Zcash community. + I will even make the strong statement that intentionally overpaying the + miners for security is stealing from the other stakeholders. +4. With two entities receiving funds there is no single point of failure. + + +Requirements and Specification +============================== + +1. DF% MUST be 20 percent, split evenly between ECC and the Zcash Foundation + during the 2nd Halvening period. +2. The Dev Fund MUST only be spent on research, development and adoption of + Zcash. +3. A voting system for development funding MUST be built and implemented in + order to be used during the 3rd Halvening period. + + +Voting System Requirements +-------------------------- + +Here are the general properties of the mandated voting mechanism. I don’t +want to specify the technical implementation details, since I believe this +is a job suited for the engineers building this system. + +1. Voting SHOULD be private. +2. Only ZEC holders can vote. +3. Voting should happen on-chain. +4. In order to vote, you must lock your ZEC so it cannot be spent for a + period of time. This is to force the voters to have ‘skin in the game’ + and prevent someone nefarious from buying a lot of ZEC just before an + election and then dumping it immediately after. +5. Voters can choose how long to lock their ZEC, and their voting power is + proportional to the time that the ZEC is locked. For example, someone + who votes with 10 ZEC and locks it for 6 months would have the same + voting power as someone who votes with 20 ZEC and locks it for 3 months. + Of course there must be a maximum lock time, perhaps a year, to prevent + anyone from getting ‘infinite’ voting power by locking their ZEC + permanently. +6. The final results of the vote should be transparent to and verifiable by + everyone. +7. The system should be totally open and allow anyone/any organization to + compete for funding to develop Zcash. + + +Transparency and Accountability for the ECC and the Zcash Foundation +-------------------------------------------------------------------- + +These requirements would apply to both ECC and the Zcash Foundation. The +mandate is to adhere to these accountability requirements originally put +forward by the Foundation: + +* Monthly public developer calls, detailing current technical roadmap and + updates. +* Quarterly technology roadmap reports and updates. +* Quarterly financial reports, detailing spending levels/burn rate and + cash/ZEC on hand. +* A yearly, audited financial report akin to the Form 990 for US-based + nonprofits. +* Yearly reviews of organization performance, along the lines of the + State of the Zcash Foundation report [#zfnd-state]_. + + +Requirements Specifically for the ECC +------------------------------------- + +Motivated by the Zcash Foundation’s proposal that the ECC become a non-profit +[#zfnd-guidance]_, I am going to list general requirements for the ECC to +abide by if they choose to receive funds and work on behalf of ZEC holders. + +1. Because I share the Foundation’s concern that the ECC could be “beholden + to its shareholders”, I am mandating that the ECC should be working in + the service of the Zcash community and **shall serve no other masters**. + The original investors/founders who are not still working in the service + of the Zcash community SHOULD NOT have control over the use of the new + development funds. +2. The revenue received from the Dev Fund SHOULD NOT be used to give further + rewards to, even indirectly, the investors, founders, or shareholders of + the ECC, who are not working on Zcash after the first halving. + **They have already received the Founders’ Reward and this new development + fund is not supposed to further benefit them.** +3. The ECC SHOULD offer competitive pay and **a stake in upside of the + success of Zcash as a way to attract the best and brightest**. I do want + the ECC be able to **maintain a world class team** capable of competing + with the tech giants of the world (Google, Apple etc.). +4. The ECC SHOULD **continue to engage with regulators** and advocate for + privacy preserving technology. The **legal structure of the ECC must not + hamper these critical efforts** in any way. + +I am not mandating non-profit status for the ECC. Maybe that is the best +legal structure, maybe something else is better. + +Finally, in the event that the voting system isn’t implemented by the start +of the 3rd Halvening period, the 20% of funds intended to go to the ‘voting +development fund’ should instead not be minted. + + +References +========== + +.. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ +.. [#zfnd-state] `The State of the Zcash Foundation in 2019. Zcash Foundation blog, January 31, 2019. `_ +.. [#zfnd-guidance] `Zcash Foundation Guidance on Dev Fund Proposals. Zcash Foundation blog, August 6, 2019. `_ + +.. raw:: html + +
    + +Change Log +========== + +* 2019-06-19 Initial post +* 2019-26-07 Listed three strengths of this proposal +* 2019-08-13 Voting System Requirements +* 2019-08-20 Requirements Specifically for the ECC +* 2019-08-29 Update to be more like a ZIP draft. diff --git a/zip-1004.html b/zip-1004.html new file mode 100644 index 00000000..dad2e93a --- /dev/null +++ b/zip-1004.html @@ -0,0 +1,158 @@ + + + + ZIP 1004: Miner-Directed Dev Fund + + + +
    +
    ZIP: 1004
    +Title: Miner-Directed Dev Fund
    +Owner: Andrew Miller (@amiller on zcash forums)
    +Status: Draft
    +Category: Consensus
    +Created: 2019-06-19
    +License: public domain
    +Discussions-To: <https://forum.zcashcommunity.com/t/dev-fund-proposal-miner-directed-dev-fund-was-20-to-any-combination-of-ecc-zfnd-parity-or-burn/33864>
    +
    +

    Terminology

    +

    The key words "MUST", "SHOULD", and "MAY" in this document are to be interpreted as described in RFC 2119. 1

    +

    For clarity, this ZIP defines these terms:

    +
    +
    2nd Halvening Period
    +
    the 4-year period of time, roughly from October 2020 - October 2024, during which at most 5,250,000 ZEC will be minted.
    +
    DF%
    +
    Dev Fund Percentage, the portion of newly minted ZEC in each block reserved for a development fund.
    +
    MR%
    +
    Miner Reward Percentage, the portion of newly minted ZEC in each block given to miners (so that DF% + MR% = 100%).
    +
    +
    +
    +

    Abstract

    +

    This proposal reserves a portion (20%) of the newly minted coins in each block for the development fund. A fixed set of developer entities would be eligible to receive these funds. The fund would be miner-directed in the sense that the miner of each block can determine how to allocate these funds to eligible developers.

    +
    +
    +

    Out of Scope for this proposal

    +
      +
    • This proposal does not (currently) specify any process for reaching agreement on or modifying the fixed set of development entities.
    • +
    • This proposal does not specify how miners should reach a decision on how to direct the development fund, or how developers should appeal to miners to do so. Other development fund proposals include specific processes for accountability and to support community decision making, such as monthly developer calls, lists of planned features and goals, etc. Any of these can be compatible with this proposal as well, by providing non-binding advice to miners, by reaching agreement on implementation defaults, by guiding the choice of the fixed set of developers, etc.
    • +
    • This proposal only provides a guideline for the 2nd Halvening Period.
    • +
    +
    +
    +

    Motivation

    +

    Like most development fund proposals, this is motivated by the potential value to the Zcash community of using newly minted coins to hire developers to continue improving Zcash. 2

    +

    Unlike most other development fund proposals, this proposal is distinct in providing a fine-grained “opt-in” 3 feature, since miners have the choice to provide a small amount of development funding or none at all.

    +
    +
    +

    Requirements

    +
      +
    • Simplicity: A design goal of this proposal is to be simple to define and implement, without specifying much process for on-chain or off-chain governance.
    • +
    • Opt-in: The proposed development fund is not mandatory, since miners can decide not to allocate any funds at all to the developer entities.
    • +
    • Incentive-compatible: Miners cannot directly pay the development fund to themselves.
    • +
    +
    +
    +

    Specification

    +

    During the 2nd Halvening Period, a fixed portion (DF% = 20%) of the newly minted coins in each block are reserved for a Miner-Directed Dev Fund (MDDF). A hardcoded set of developer entities (e.g., Electric Coin Company, Zcash Foundation, Parity, or others), represented in the code by their t-address or z-address public keys, are eligible to receive funding from the MDDF. The fund is “miner-directed” in the sense that the miner in each block chooses how to allocate the MDDF coins among the developer entities, simply by creating outputs in the coinbase transaction. The DF% is a maximum — miners can also “opt out” by minting a lower number of coins for the MDDF, or none at all.

    +

    This proposal is explicitly limited in scope to the 2nd Halvening Period. After the end of this period, the entire block reward in each block is awarded to the miner. The upper bound on the rate of newly minted coins MUST remain the same as before this proposal (i.e., at most 25 ZEC minted per 10 minutes during the 2nd Halvening Period).

    +

    Implementations MAY define a default opt-in allocation (e.g., DF%/2 to the Electric Coin Company and DF%/2 to the Zcash Foundation).

    +

    Implementations SHOULD support changing the allocation (overriding any such default) through a configuration option.

    +
    +

    Examples

    +

    The following examples illustrate how miners can build the outputs of the coinbase transactions to allocate the MDDF to eligible developers. Assume Dev1, Dev2 are the hardcoded addresses of eligible developers, and Miner is the address of the mining pool mining this block. Assume that the total newly minted coins are 3.125 ZEC per block during the 2nd Halvening Period (this takes into account the change to a 75-second block target spacing after the Blossom Network Upgrade 5), and that DF% = 20%, MR% = 80%.

    +

    Example 1: Split equally between two developers

    +

    The transaction outputs of the coinbase transaction are as follows:

    +
      +
    • 2.5 ZEC to Miner
    • +
    • 0.3125 ZEC to Dev1
    • +
    • 0.3125 ZEC to Dev2.
    • +
    +

    Example 2: Opt-out of the development fund

    +

    The transaction outputs of the coinbase transaction are as follows:

    +
      +
    • 2.5 ZEC to Miner.
    • +
    +
    +
    +
    +

    Issues and Further Discussion

    +

    Raised objections and issues so far:

    +
      +
    • Miners may have adverse incentives, such as: +
        +
      • Stonewalling any development of Proof-of-Work alternatives, such as GPU-friendly variants or Proof-of-Stake.
      • +
      • Extortion for more funds. To illustrate: "We’ll direct all 20% of the development fund to DeveloperX, but only if they promise to keep just 5% and pass 15% back to the mining pool.”
      • +
      • Blocking the development fund out of greed.
      • +
      +
    • +
    • This proposal modifies the terms of what some may consider a social contract: given the original code in Zcash implementations, by the end of the issuance schedule when all 21 million ZEC have been minted, a total of 90% of all minted coins would have originally been awarded to miners. Under this proposal, less reward would be available to miners, than would be available to them according to the original minting schedule.
    • +
    • Several others, notably the Blocktown Capital proposal 4, have suggested that a 20% development fund would set a precedent for a perpetual 20% development fund. This proposal is explicitly limited in scope to the 2nd Halvening Period. Thus adopting this proposal on its own, if there are no further updates, would result in the the development fund ending in 2024.
    • +
    +
    +
    +

    References

    + + + + + + + +
    1Key words for use in RFCs to Indicate Requirement Levels
    + + + + + + + +
    2Notes on reaching agreement about a potential Zcash development fund. Andrew Miller, June 3, 2019.
    + + + + + + + +
    3Comment on a post “The future of Zcash in the year 2020” in the Zcash Community Forum. Josh Cincinnati, June 3, 2019.
    + + + + + + + +
    4Executive Summary: Blocktown Proposal for Zcash 2020 Network Upgrade. Blocktown Capital, August 15, 2019.
    + + + + + + + +
    5ZIP 208: Shorter Block Target Spacing
    +
    +
    +

    Change Log

    +
      +
    • 2019-06-19 Initial post
    • +
    • 2019-08-28 +
        +
      • Update to be more like a ZIP draft
      • +
      • Renamed to Miner-Directed Dev Fund
      • +
      • Removed references to “Burn”, instead opt-out is in terms of coins never being minted in the first place
      • +
      +
    • +
    • 2019-08-29 +
        +
      • Address informal pre-ZIP feedback
      • +
      • Add example, requirements, fix incomplete sentence about default allocations
      • +
      +
    • +
    • 2019-09-15 Move to GitHub
    • +
    +
    +
    + + \ No newline at end of file diff --git a/zip-1004.rst b/zip-1004.rst new file mode 100644 index 00000000..849da472 --- /dev/null +++ b/zip-1004.rst @@ -0,0 +1,194 @@ +:: + + ZIP: 1004 + Title: Miner-Directed Dev Fund + Owner: Andrew Miller (@amiller on zcash forums) + Status: Draft + Category: Consensus + Created: 2019-06-19 + License: public domain + Discussions-To: + + +Terminology +=========== + +The key words "MUST", "SHOULD", and "MAY" in this document are to be +interpreted as described in RFC 2119. [#RFC2119]_ + +For clarity, this ZIP defines these terms: + +2nd Halvening Period + the 4-year period of time, roughly from October 2020 - October 2024, + during which at most 5,250,000 ZEC will be minted. +DF% + Dev Fund Percentage, the portion of newly minted ZEC in each block + reserved for a development fund. +MR% + Miner Reward Percentage, the portion of newly minted ZEC in each block + given to miners (so that DF% + MR% = 100%). + + +Abstract +======== + +This proposal reserves a portion (20%) of the newly minted coins in each +block for the development fund. A fixed set of developer entities would be +eligible to receive these funds. The fund would be miner-directed in the +sense that the miner of each block can determine how to allocate these funds +to eligible developers. + + +Out of Scope for this proposal +============================== + +* This proposal does not (currently) specify any process for reaching + agreement on or modifying the fixed set of development entities. +* This proposal does not specify how miners should reach a decision on how + to direct the development fund, or how developers should appeal to miners + to do so. Other development fund proposals include specific processes for + accountability and to support community decision making, such as monthly + developer calls, lists of planned features and goals, etc. Any of these + can be compatible with this proposal as well, by providing non-binding + advice to miners, by reaching agreement on implementation defaults, by + guiding the choice of the fixed set of developers, etc. +* This proposal only provides a guideline for the 2nd Halvening Period. + + +Motivation +========== + +Like most development fund proposals, this is motivated by the potential +value to the Zcash community of using newly minted coins to hire developers +to continue improving Zcash. [#amiller-notes]_ + +Unlike most other development fund proposals, this proposal is distinct in +providing a fine-grained “opt-in” [#acityinohio-comment]_ feature, since +miners have the choice to provide a small amount of development funding or +none at all. + + +Requirements +============ + +* Simplicity: A design goal of this proposal is to be simple to define and + implement, without specifying much process for on-chain or off-chain + governance. +* Opt-in: The proposed development fund is not mandatory, since miners can + decide not to allocate any funds at all to the developer entities. +* Incentive-compatible: Miners cannot directly pay the development fund to + themselves. + + +Specification +============= + +During the 2nd Halvening Period, a fixed portion (DF% = 20%) of the newly +minted coins in each block are reserved for a Miner-Directed Dev Fund (MDDF). +A hardcoded set of developer entities (e.g., Electric Coin Company, Zcash +Foundation, Parity, or others), represented in the code by their t-address +or z-address public keys, are eligible to receive funding from the MDDF. +The fund is “miner-directed” in the sense that the miner in each block +chooses how to allocate the MDDF coins among the developer entities, simply +by creating outputs in the coinbase transaction. The DF% is a maximum — +miners can also “opt out” by minting a lower number of coins for the MDDF, +or none at all. + +This proposal is explicitly limited in scope to the 2nd Halvening Period. +After the end of this period, the entire block reward in each block is +awarded to the miner. The upper bound on the rate of newly minted coins MUST +remain the same as before this proposal (i.e., at most 25 ZEC minted per +10 minutes during the 2nd Halvening Period). + +Implementations MAY define a default opt-in allocation (e.g., DF%/2 to the +Electric Coin Company and DF%/2 to the Zcash Foundation). + +Implementations SHOULD support changing the allocation (overriding any such +default) through a configuration option. + + +Examples +-------- + +The following examples illustrate how miners can build the outputs of the +coinbase transactions to allocate the MDDF to eligible developers. Assume +``Dev1``, ``Dev2`` are the hardcoded addresses of eligible developers, and +``Miner`` is the address of the mining pool mining this block. Assume that +the total newly minted coins are 3.125 ZEC per block during the 2nd Halvening +Period (this takes into account the change to a 75-second block target +spacing after the Blossom Network Upgrade [#zip-0208]_), and that DF% = 20%, +MR% = 80%. + +**Example 1: Split equally between two developers** + +The transaction outputs of the coinbase transaction are as follows: + +* 2.5 ZEC to ``Miner`` +* 0.3125 ZEC to ``Dev1`` +* 0.3125 ZEC to ``Dev2``. + +**Example 2: Opt-out of the development fund** + +The transaction outputs of the coinbase transaction are as follows: + +* 2.5 ZEC to ``Miner``. + + +Issues and Further Discussion +============================= + +Raised objections and issues so far: + +* Miners may have adverse incentives, such as: + + - Stonewalling any development of Proof-of-Work alternatives, such as + GPU-friendly variants or Proof-of-Stake. + - Extortion for more funds. To illustrate: "We’ll direct all 20% of the + development fund to DeveloperX, but only if they promise to keep just + 5% and pass 15% back to the mining pool.” + - Blocking the development fund out of greed. + +* This proposal modifies the terms of what some may consider a social + contract: given the original code in Zcash implementations, by the end + of the issuance schedule when all 21 million ZEC have been minted, a + total of 90% of all minted coins would have originally been awarded to + miners. Under this proposal, less reward would be available to miners, + than would be available to them according to the original minting schedule. + +* Several others, notably the Blocktown Capital proposal [#blocktown-summary]_, + have suggested that a 20% development fund would set a precedent for a + perpetual 20% development fund. This proposal is explicitly limited in + scope to the 2nd Halvening Period. Thus adopting this proposal on its + own, if there are no further updates, would result in the the development + fund ending in 2024. + + +References +========== + +.. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ +.. [#amiller-notes] `Notes on reaching agreement about a potential Zcash development fund. Andrew Miller, June 3, 2019. `_ +.. [#acityinohio-comment] `Comment on a post “The future of Zcash in the year 2020” in the Zcash Community Forum. Josh Cincinnati, June 3, 2019. `_ +.. [#blocktown-summary] `Executive Summary: Blocktown Proposal for Zcash 2020 Network Upgrade. Blocktown Capital, August 15, 2019. `_ +.. [#zip-0208] `ZIP 208: Shorter Block Target Spacing `_ + +.. raw:: html + +
    + +Change Log +========== + +* 2019-06-19 Initial post +* 2019-08-28 + + - Update to be more like a ZIP draft + - Renamed to Miner-Directed Dev Fund + - Removed references to “Burn”, instead opt-out is in terms of coins never being minted in the first place + +* 2019-08-29 + + - Address informal pre-ZIP feedback + - Add example, requirements, fix incomplete sentence about default allocations + +* 2019-09-15 Move to GitHub diff --git a/zip-1005.html b/zip-1005.html new file mode 100644 index 00000000..7965895a --- /dev/null +++ b/zip-1005.html @@ -0,0 +1,75 @@ + + + + ZIP 1005: Zcash Community Funding System + + + +
    +
    ZIP: 1005
    +Title: Zcash Community Funding System
    +Owner: Dimitris Apostolou <dimitris.apostolou@icloud.com>
    +Status: Draft
    +Category: Consensus
    +Created: 2019-06-23
    +License: MIT
    +Discussions-To: <https://forum.zcashcommunity.com/t/zip-proposal-zcfs-zcash-community-funding-system/33898>
    +
    +

    Abstract

    +

    This proposal introduces a new funding mechanism called the Zcash Community Funding System (ZCFS).

    +
    +
    +

    Motivation

    +

    The motivations for ZCFS are:

    +
      +
    • The Founders’ Reward is set to expire in 2020.
    • +
    • The Founders’ Reward has caused significant friction in the Zcash community and sparked forks due to disagreement with its very existence.
    • +
    • There needs to be a more fair and decentralized funding mechanism.
    • +
    +
    +
    +

    Specification

    +

    This specification is a modification of the Monero Community Crowdfunding System (CCS) and is defined as follows:

    +
      +
    1. The Founders’ Reward ends in October 2020 as specified by the current consensus rules.
    2. +
    3. An individual, team or company (for-profit or non-profit), henceforth ‘proposer’, has an idea to improve the Zcash ecosystem that requires funds.
    4. +
    5. The proposer creates a ZCFS proposal in a modified version of the existing ZF Grants website, to be called the ZCFS website. The ZF Grants website already has the basic infrastructure for this mechanism and needs to be tweaked in order to facilitate this specification. The ZF Grants website will continue to operate in its current form.
    6. +
    7. Upon activation of this proposal, the Zcash Foundation is put in charge of the ZCFS.
    8. +
    9. The Zcash Foundation is required to make ZCFS proposals for its own funding. If the community decides not to fund it, then the ownership of the ZCFS is transferred to the proposer who is instead funded by the community for that matter. the meaning of "the proposer" here is unclear.
    10. +
    11. After a ZCFS proposal has been created, the community discusses the pros and cons of the proposal, and offers feedback and critique.
    12. +
    13. The proposer changes the proposal (if necessary), utilizing the feedback and critique of the community.
    14. +
    15. Repeat steps 6 and 7 as needed.
    16. +
    17. After the Zcash Foundation (or whoever has ownership of the ZCFS at the time) has determined that the community has reached loose consensus, the funding begins by ZEC holders who wish to donate.
    18. +
    19. Once fully funded (not guaranteed), the proposer begins on the work, if they haven’t already.
    20. +
    21. Milestones are completed and funds are disbursed upon their completion.
    22. +
    23. After all milestones are completed, the proposal is locked and all information is retained for posterity.
    24. +
    +
    +
    +

    Rules and Expectations

    +

    The ZCFS is intentionally left as informal as possible. This allows for flexibility of the system, and keeps things from being red-taped into oblivion. However, there are some things you should understand, things that will be expected of you, as either a proposer or a donor, and a recommended way of structuring a proposal for maximum likelihood that your project will be funded.

    +
    +

    For Donors

    +
      +
    1. The ZCFS is escrowed by the Zcash Foundation (or whoever has ownership of the ZCFS at the time). When you make a donation, you are releasing funds to them to disburse when they deem the community agrees that a milestone is complete. They do not do the work to verify donors, and the final decision for all disputes falls with them, although they do their best to follow community sentiment.
    2. +
    3. In the event that a proposal is overfunded, unable to be completed, or otherwise put in a state where donated money will not be disbursed to the proposer, the default is that the remaining ZEC will be put in the ZF Grants fund.
    4. +
    5. Refunds are extraordinarily rare. Donate accordingly.
    6. +
    7. If the proposer disappears, no problem, someone else can pick up from their last milestone.
    8. +
    9. Milestone and payout structures vary per proposal based on the proposer’s wishes. It is up to the donor to do their due diligence in whether or not they support the proposal in its entirety.
    10. +
    +
    +
    +

    For Proposers

    +
      +
    1. There is no guarantee that your project will get past the community feedback stage, and if it does, there is no guarantee that it will be funded.
    2. +
    3. You have to drum up support for your proposal during the feedback and funding stages. Do not expect others (especially the Zcash Foundation or other trusted members of the community) to do it for you. Others may share and support if they are excited about your project, but ultimately it is nobody’s responsibility but your own.
    4. +
    5. It is expected that you provide updates on the progress of your proposal to the community. For every milestone completed there should be a written report put into your ZCFS proposal announcing its completion and the work done, but depending on the timeline of your project, it may be wise to update the community more frequently.
    6. +
    7. All work must be licensed permissively at all stages of the proposal. There is no time where your work can be licensed under a restrictive license (even as you’re working on it). Your proposal will be terminated if this is not remedied.
    8. +
    9. You may NOT under any circumstances include a donation address directly in your proposal. This circumvents the ZCFS, and can lead to scams.
    10. +
    11. Your work on the project can begin before the proposal is fully funded but disbursement of funds is done only upon completion of milestones and only if the proposal is fully funded.
    12. +
    +
    +
    +
    + + \ No newline at end of file diff --git a/zip-1005.rst b/zip-1005.rst new file mode 100644 index 00000000..8fbe9478 --- /dev/null +++ b/zip-1005.rst @@ -0,0 +1,125 @@ +:: + + ZIP: 1005 + Title: Zcash Community Funding System + Owner: Dimitris Apostolou + Status: Draft + Category: Consensus + Created: 2019-06-23 + License: MIT + Discussions-To: + + +Abstract +======== + +This proposal introduces a new funding mechanism called the Zcash Community +Funding System (ZCFS). + + +Motivation +========== + +The motivations for ZCFS are: + +* The Founders’ Reward is set to expire in 2020. +* The Founders’ Reward has caused significant friction in the Zcash community + and sparked forks due to disagreement with its very existence. +* There needs to be a more fair and decentralized funding mechanism. + + +Specification +============= + +.. role:: editor-note + +This specification is a modification of the Monero Community Crowdfunding +System (CCS) and is defined as follows: + +1. The Founders’ Reward ends in October 2020 as specified by the current + consensus rules. +2. An individual, team or company (for-profit or non-profit), henceforth + ‘proposer’, has an idea to improve the Zcash ecosystem that requires funds. +3. The proposer creates a ZCFS proposal in a modified version of the existing + `ZF Grants website `_, to be called the ZCFS + website. The ZF Grants website already has the basic infrastructure for + this mechanism and needs to be tweaked in order to facilitate this + specification. The ZF Grants website will continue to operate in its + current form. +4. Upon activation of this proposal, the Zcash Foundation is put in charge of + the ZCFS. +5. The Zcash Foundation is required to make ZCFS proposals for its own + funding. If the community decides not to fund it, then the ownership of + the ZCFS is transferred to the proposer who is instead funded by the + community for that matter. :editor-note:`the meaning of "the proposer" + here is unclear.` +6. After a ZCFS proposal has been created, the community discusses the pros + and cons of the proposal, and offers feedback and critique. +7. The proposer changes the proposal (if necessary), utilizing the feedback + and critique of the community. +8. Repeat steps 6 and 7 as needed. +9. After the Zcash Foundation (or whoever has ownership of the ZCFS at the + time) has determined that the community has reached loose consensus, the + funding begins by ZEC holders who wish to donate. +10. Once fully funded (not guaranteed), the proposer begins on the work, if + they haven’t already. +11. Milestones are completed and funds are disbursed upon their completion. +12. After all milestones are completed, the proposal is locked and all + information is retained for posterity. + + +Rules and Expectations +====================== + +The ZCFS is intentionally left as informal as possible. This allows for +flexibility of the system, and keeps things from being red-taped into +oblivion. However, there are some things you should understand, things that +will be expected of you, as either a proposer or a donor, and a recommended +way of structuring a proposal for maximum likelihood that your project will +be funded. + +For Donors +---------- + +1. The ZCFS is escrowed by the Zcash Foundation (or whoever has ownership of + the ZCFS at the time). When you make a donation, you are releasing funds + to them to disburse when they deem the community agrees that a milestone + is complete. They do not do the work to verify donors, and the final + decision for all disputes falls with them, although they do their best to + follow community sentiment. +2. In the event that a proposal is overfunded, unable to be completed, or + otherwise put in a state where donated money will not be disbursed to the + proposer, the default is that the remaining ZEC will be put in the + ZF Grants fund. +3. Refunds are extraordinarily rare. Donate accordingly. +4. If the proposer disappears, no problem, someone else can pick up from + their last milestone. +5. Milestone and payout structures vary per proposal based on the proposer’s + wishes. It is up to the donor to do their due diligence in whether or not + they support the proposal in its entirety. + +For Proposers +------------- + +1. There is no guarantee that your project will get past the community + feedback stage, and if it does, there is no guarantee that it will be + funded. +2. You have to drum up support for your proposal during the feedback and + funding stages. Do not expect others (especially the Zcash Foundation + or other trusted members of the community) to do it for you. Others may + share and support if they are excited about your project, but ultimately + it is nobody’s responsibility but your own. +3. It is expected that you provide updates on the progress of your proposal + to the community. For every milestone completed there should be a written + report put into your ZCFS proposal announcing its completion and the work + done, but depending on the timeline of your project, it may be wise to + update the community more frequently. +4. All work must be licensed permissively at all stages of the proposal. + There is no time where your work can be licensed under a restrictive + license (even as you’re working on it). Your proposal will be terminated + if this is not remedied. +5. You may NOT under any circumstances include a donation address directly + in your proposal. This circumvents the ZCFS, and can lead to scams. +6. Your work on the project can begin before the proposal is fully funded + but disbursement of funds is done only upon completion of milestones and + only if the proposal is fully funded. diff --git a/zip-1006.html b/zip-1006.html new file mode 100644 index 00000000..853e40bb --- /dev/null +++ b/zip-1006.html @@ -0,0 +1,211 @@ + + + + ZIP 1006: Development Fund of 10% to a 2-of-3 Multisig with Community-Involved Third Entity + + + +
    +
    ZIP: 1006
    +Title: Development Fund of 10% to a 2-of-3 Multisig with Community-Involved Third Entity
    +Owners: James Todaro <james@blocktown.capital>
    +        Joseph Todaro <joseph@blocktown.capital>
    +Credits: Mario Laul <mario@placeholder.vc>
    +         Chris Burniske <chris@placeholder.vc>
    +Status: Draft
    +Category: Consensus / Process
    +Created: 2019-08-31
    +License: MIT
    +Discussions-To: <https://forum.zcashcommunity.com/t/blocktown-development-fund-proposal-10-to-a-2-of-3-multisig-with-community-involved-third-entity/34782>
    +
    +

    Terminology

    +

    The key words “MUST”, “SHOULD”, “SHOULD NOT”, and “MAY” in this document are to be interpreted as described in RFC 2119. 1

    +

    The additional terms below are to be interpreted as follows:

    +
    +
    Mining
    +
    The actions of processing transactions, which include processing transactions in a Proof-of-Stake or Proof-of-Work/Proof-of-Stake hybrid system, in the event Zcash implements either at a future date.
    +
    Mining software
    +
    Pool software, local mining software or staking software.
    +
    Mining rewards / Block rewards
    +
    Network transaction fees and/or coinbase rewards (e.g. newly issued ZEC associated with block generation).
    +
    Network Upgrade
    +
    Any consensus rule change to the Zcash protocol, introduced as part of the standard Zcash Network Upgrade Pipeline 9 or otherwise.
    +
    Founder’s Reward
    +
    The 20% ZEC from mined blocks allocated to the Electric Coin Company (ECC), Zcash Foundation (ZF), employees, investors and/or other entities prior to the expected first halving in October 2020.
    +
    Zcash Development Fund
    +
    Transparent address(es) controlled jointly by the Electric Coin Company, Zcash Foundation, and a “Third Entity”. The fund is intended for research, development, maintenance, and other technical work directly connected to the Zcash protocol, as well as non-technical initiatives (including design, marketing, events, regulatory outreach, education, governance, and any other form of business or community development) that contribute to the long-term success of the Zcash network. In the context of this proposal, the Zcash Development Fund consists of 10% of newly issued ZEC from block rewards between the first and second halvings of the Zcash network.
    +
    Applicant
    +
    Any individual, group, or entity that seeks funding from the Zcash Development Fund.
    +
    Recipient
    +
    Any individual, group, or entity that receives funding from the Zcash Development Fund.
    +
    +
    +
    +

    Abstract

    +

    This proposal puts forward the financing mechanism and fundamental rules of governance for the creation of a Zcash Development Fund.

    +
    +
    +

    Specification

    +
    +

    Funding mechanism of the Zcash Development Fund

    +
      +
    • This funding mechanism MUST be hard-coded so that 10% of newly issued ZEC from block rewards are automatically directed to the transparent address(es) of the Zcash Development Fund.
    • +
    • The above requirement MUST be met between the first halving and second halving. Upon the second halving, future governance decisions MAY result in a further decrease of the Zcash Development Fund to 5% of newly issued ZEC from block rewards, or alternatively MAY result in another percent allocation which includes the possibility of a system whereby 100% of block rewards go to miners.
    • +
    • The two aforementioned requirements above MUST remain regardless of any additional Network Upgrades or changes to mining or mining software prior to the second halving.
    • +
    • The Zcash Development Fund MAY outlive the period of its initial funding mechanism, either through the appreciation in the price of ZEC, or from alternative funding sources upon the second halving in 2024.
    • +
    • The hard-coded transparent address(es) of the Zcash Development Fund MAY be periodically rotated for operational security purposes to decrease the risk of any potential loss of funds associated with the address(es). The ECC, ZF, and/or “Third Entity” described below SHOULD take any possible precautions within the confines of this Specification section to avoid loss of funds.
    • +
    +
    +
    +

    Governance of the Zcash Development Fund

    +
      +
    • Funds allocated to the Zcash Development Fund MUST be used only for their intended purpose as defined in the following Rationale section of this proposal.
    • +
    • The transparent address(es) of the Zcash Development Fund MUST be jointly controlled by the ECC, ZF, and Third Entity, and all funds transferred from the Zcash Development Fund MUST be publicly confirmed in an official manner by a majority decision among the ECC, ZF, and Third Entity–commonly referred to as “2-of-3 multisig”. That is, funding decisions MUST be put to an officially documented vote which MUST NOT pass unless at least 2 of the 3 entities above vote approvingly.
    • +
    • Prior to any movement of funds from the Zcash Development Fund, the ZF and ECC MUST coordinate with each other and the community to establish the Third Entity that will be involved in governance of the Zcash Development Fund. The process of determining the exact initial composition and rules of governance of the Third Entity MUST involve the Zcash community at large in a process similar to that outlined in the section "How the Foundation will select a particular proposal" in the ZF’s August 6, 2019 statement 2.
    • +
    +

    The governance rules of the Third Entity MUST include the following:

    +
      +
    • All decision-making and other governing processes of the Third Entity MUST be independent of the ECC and ZF, and MUST include measures that are necessary to avoid conflicts of interest in relation to the ECC and ZF.
    • +
    • At creation, the Third Entity MUST include an uneven number of at least 5 individuals with independent previous affiliations, each having a single vote. All such decisions MUST have majority support within the Third Entity to result in an overall approving vote by the Third Entity.
    • +
    • Once the Third Entity is established, it MAY decide to change its rules of governance (e.g. simple majority versus supermajority rules), but any such change MUST be preceded by the involvement of the Zcash community at large, similar to the process outlined in the ZF’s August 6, 2019 statement 2.
    • +
    • Once the Third Entity is established as a self-governing body, it SHOULD evolve toward a system whereby ZEC holders have a direct role in determining votes and internal governance of the Third Entity.
    • +
    • The Third Entity MAY apply for funding from the Zcash Development Fund, if deemed appropriate by its governing body. This would be subject to a majority vote by the ECC, ZF and Third Entity.
    • +
    +

    Prior to any transfer of funds from the Zcash Development Fund, the ECC, ZF, and Third Entity MUST specify, approve, and make public the final rules on applying for and receiving funding from the Zcash Development Fund, including the details of the decision-making process for approving or rejecting funding requests. These rules MUST apply equally to all Applicants, including the ECC, ZF, and Third Entity, and MUST include the following:

    +
      +
    • Funding from the Zcash Development Fund MUST be available to not only the ECC, ZF, and Third Entity but also to other individuals, groups, or entities that could make technical and/or non-technical contributions to Zcash as described in the Rationale section of this proposal.
    • +
    • To receive funding from the Zcash Development Fund, all Applicants MUST follow the rules described in the Specification section of this proposal and in final detail by the ECC, ZF, and Third Entity.
    • +
    • As part of an application, each Applicant MUST produce a public overview of the activities and projected costs for which they are seeking funds.
    • +
    • Each funding decision MUST be preceded by a community review period of reasonable length to be determined by the ECC, ZF and Third Entity in which Zcash stakeholders and community members can familiarize themselves with the Applicant’s request and make suggestions, or raise objections.
    • +
    • In situations of overwhelming opposition from Zcash stakeholders and community members to requests from Applicants, the ECC, ZF, and Third Entity SHOULD NOT approve the request before striving to address stakeholders and community concerns, and modifying the request, if appropriate, to assuage concerns.
    • +
    • Each funding decision MUST be accompanied by an easily referenced joint public statement by the ECC, ZF, and Third Entity, which MUST include the final tally of the relevant vote, as well as the votes of the three involved entities. As part of this statement, each of the three entities MUST provide explicit justification for its respective vote.
    • +
    • The ZF MUST ensure that all Zcash Development Fund votes and the accompanying justifications described previously remain archived and easily accessible online by Zcash community members, stakeholders and the general public.
    • +
    • The ECC, ZF, and Third Entity MAY approve funding requests on a rolling basis, but all funding requests MUST be revisited and voted on at a minimum of every 6 months to receive renewed approval.
    • +
    • Recipients MUST publicize at minimum quarterly progress updates on their activities funded from the Zcash Development Fund. In the case of short-term assignments (less than 6 months), a single report upon completion of the project is sufficient. Standard reporting requirements MUST be specified by the ECC, ZF, and Third Entity prior to any approved requests from the Zcash Development Fund and additional requirements MAY be introduced as needed.
    • +
    • Depending on the nature of each request, funds MAY be disbursed in a single payment or incrementally, subject to objective milestones and/or other performance metrics.
    • +
    +

    Any decision to alter the governance of the Zcash Development Fund as described in this proposal and in final detail by the ECC, ZF, and Third Entity MUST involve the Zcash community at large, similar to the process outlined in the ZF’s August 6, 2019 statement 2. All transfers from the Zcash Development Fund MUST be in full accordance with the requirements described in this proposal.

    +
    +
    +
    +

    Issues not addressed in this proposal/Out-of-Scope

    +
      +
    • Details of the decision-making process for supporting or rejecting this or other relevant proposals by the ECC, ZF, and/or other Zcash stakeholders. We do maintain, however, that any decision by the ECC and/or the ZF on the issue described in the Motivation section below SHOULD be preceded by the procedures for measuring community sentiment as outlined in the ZF’s August 6, 2019 statement 2.
    • +
    • Additional methods for measuring community sentiment MAY include a way for ZEC holders to signal their support of specific proposals.
    • +
    • The matter of whether the ECC should reorganize itself into a non-profit or remain for-profit, as addressed by the ZF in their August 6, 2019 statement 2. The current proposal is neutral on this matter, and funding from the Development Fund would be available for non-profit and/or for-profit entities. We consider the governance rules of the Development Fund outlined in this Specification section adequate for transparency and accountability.
    • +
    +
    +
    +

    Motivation

    +

    The Zcash network is scheduled to undergo its first halving in October 2020, per current protocol specifications. At the time of the first halving, the codebase dictates that the Founder’s Reward, which consists of 20% of the ZEC from every block reward, will be terminated. Without codebase modification, for example in the upcoming NU4 Network Upgrade, 100% of block rewards would be claimed by miners after the first halving.

    +

    The two organizations presently leading development and maintenance of the Zcash network receive funds from the Founder’s Reward. These organizations, the ECC and ZF, have recently requested a source of funding after the first halving in order to continue operations for the foreseeable future. The source of funds could theoretically be from either a modification to the codebase dictating a Zcash Development Fund from block rewards or, alternatively, from external sources. The ECC has indicated though that it would “wind down or pivot” rather than accept funding from any sources that would give “special interests” control over the ECC 3.

    +

    Based on the ECC’s demands, the block reward appears to be the most agreeable source of resources for a Zcash Development Fund.

    +

    This proposal, originally published in the Zcash Community Forum on August 14, 2019 4 and formalized further in a blog post on August 23, 2019 5, outlines the funding mechanism and governance of such a Zcash Development Fund. Herein, we propose a feature of NU4 whereby 10% of the ZEC from every new block reward between the first halving and second halving would be directly deposited in a Zcash Development Fund.

    +

    For the period between the launch of the Zcash network in 2016 and the first halving, there has been a centralized 20% fee known as the Founder’s Reward taken from the block reward. Other active ZIP drafts advocate a Zcash Development Fund of 20% allocation from the block reward after the first halving. We believe that a cumulative eight years of centralized fees from the block reward at the identical rate of 20% would ultimately result in a narrow community that accepts the likelihood of a perpetual 20% fee on the Zcash network.

    +

    With a Zcash Development Fund that is only 10% of the block reward, a precedent will be set that a large centralized fund is not indefinite and will decrease faster than simply the rate of block reward halvings. Although this proposal specifically addresses the period between the first and second halving, this proposed feature may set a precedent whereby the percent fee from block rewards allocated to a Zcash Development Fund continually decreases every halving, e.g. 20% (FR) from 2016-2020, 10% from 2020-2024, 5% from 2024-2028, 2.5% from 2028-2032 (effectively quartering the ZEC allocated to a development fund every four years). We believe that this social contract could restore the community’s faith in the decentralization of Zcash as the network incentives align more closely with that of Bitcoin’s over time. Alternatively, it is not unreasonable for the Zcash governance system to elect a 0% allocation for the Zcash Development Fund upon the second halving. For a more detailed exploration regarding the selection of 10%, please review the blog post ‘Proposal for 10% Dev Fund in Zcash 2020 Network Upgrade’ 6.

    +

    Of note, we are not suggesting or implying that the funding from the Founder’s Reward and a Zcash Development Fund would be managed in a similar way or have similar directives. The Zcash Development Fund feature that we propose for NU4 does not allocate any funds to former angel investors, VCs or vested employees. Furthermore, the Zcash Development Fund would be subject to more explicit and transparent rules of governance, as outlined in the Specification section of this proposal.

    +
    +
    +

    Rationale

    +

    The rationale behind this proposal is as follows:

    +
      +
    • To provide financial resources for research, development, and any other technical work connected to software upgrades/maintenance of the Zcash protocol, as well as non-technical initiatives including marketing, design, events, regulatory outreach, education, governance, and any other form of business that contribute to the success of the Zcash network.
    • +
    • To increase decentralization and network security of the Zcash network.
    • +
    • To increase decentralization through greater community involvement in Zcash governance and resource allocation.
    • +
    • To establish basic rules of governance and accountability regarding the deployment of funds in the Zcash Development Fund.
    • +
    • To encourage transparency and cooperation among Zcash stakeholders and strengthen the community’s governance capabilities moving forward.
    • +
    +
    +
    +

    Discussion

    +

    Recognized objections to this proposal include:

    +
      +
    • This proposal is not in accordance with the current Zcash protocol, which is programmed to allocate 100% of the coinbase to miners upon the first halving in 2020. However, at least during the next few years of Zcash’s infancy, we believe it is advantageous to have a funded and dedicated development team.
    • +
    • The funding mechanism in this proposal is a Zcash Development Fund consisting of 10% of newly issued ZEC from block rewards after the first halving. This is in contrast to other proposals that allocate 20% of the mining rewards to the Zcash Development Fund – presumably a popular selection because the original Founder’s Reward was also set at 20%. For reasons we have explored in depth 6 and summarized in 7, we believe 10% instead of 20% is superior for network security, decentralization, uniting the Zcash community and renewing interest in ZEC.
    • +
    • Various parameters of governance in approving Applicant requests for funding from the Zcash Development Fund.
    • +
    • The inclusion of a Third Entity in governance. One notable objection is the possibility of collusion between Third Entity and either the ECC or ZF that would result in a “usurped” Zcash Development Fund. We believe that the process for a community elected Third Entity, however, will mature over time – giving the community and Zcash stakeholders that important third opinion in deciding the proper allocation of funds. As demonstrated by the resilience of the Bitcoin network and community, well-formed communities tend to resist any collusion with corporations and controlling entities that do not promote the direct success of the network. Moreover, the inclusion of a Third Entity has the advantage of offering a “tie-breaker” in the event of a deadlock vote between the ECC and ZF and/or a situation where one entity holds the other hostage, which is a possible scenario in a 2-of-2 multisig agreement.
    • +
    • This proposal does not have a clause dictating that a Recipient must abstain from voting. If a Recipient must abstain from voting in a 2-of-3 multisig governance system, then this could –as in the case of 2-of-2 multisig– result in an entity holding another hostage. For example, if the ECC refuses to fund the ZF until the ZF complies with the ECC’s demands, then the ECC has the power to deadlock any vote to fund the ZF, which requires the ECC and Third Entity to both vote approvingly.
    • +
    +
    +
    +

    Acknowledgements

    +

    Aspects of this proposal, particularly the Terminology and Specification sections, were adapted and expanded definitions and concepts put forth in Placeholder’s dev fund proposal from August 22, 2019 8.

    +
    +
    +

    References

    + + + + + + + +
    1Key words for use in RFCs to Indicate Requirement Levels
    + + + + + + + +
    2Zcash Foundation Guidance on Dev Fund Proposals. Zcash Foundation blog, August 6, 2019.
    + + + + + + + +
    3ECC Initial Assessment of Community Proposals. Electric Coin Company blog, August 26, 2019.
    + + + + + + + +
    4Proposal for the Zcash 2020 Network Upgrade (topic on the Zcash community forum).
    + + + + + + + +
    5Blocktown Proposal for Zcash 2020 Network Upgrade. Blocktown Capital, August 23, 2019.
    + + + + + + + +
    6Proposal for 10% Dev Fund in Zcash 2020 Network Upgrade. Blocktown Capital, August 14, 2019.
    + + + + + + + +
    7Executive Summary: Blocktown Proposal for Zcash 2020 Network Upgrade. Blocktown Capital, August 15, 2019.
    + + + + + + + +
    8Dev Fund Proposal: 20% to a 2-of-3 multisig with community-involved governance (topic on the Zcash community forum).
    + + + + + + + +
    9The Zcash Network Upgrade Pipeline. Electric Coin Company blog, December 3, 2018.
    +
    +
    + + \ No newline at end of file diff --git a/zip-1006.rst b/zip-1006.rst new file mode 100644 index 00000000..a5014cf1 --- /dev/null +++ b/zip-1006.rst @@ -0,0 +1,376 @@ +:: + + ZIP: 1006 + Title: Development Fund of 10% to a 2-of-3 Multisig with Community-Involved Third Entity + Owners: James Todaro + Joseph Todaro + Credits: Mario Laul + Chris Burniske + Status: Draft + Category: Consensus / Process + Created: 2019-08-31 + License: MIT + Discussions-To: + + +Terminology +=========== + +The key words “MUST”, “SHOULD”, “SHOULD NOT”, and “MAY” in this document +are to be interpreted as described in RFC 2119. [#RFC2119]_ + +The additional terms below are to be interpreted as follows: + +Mining + The actions of processing transactions, which include processing + transactions in a Proof-of-Stake or Proof-of-Work/Proof-of-Stake + hybrid system, in the event Zcash implements either at a future date. +Mining software + Pool software, local mining software or staking software. +Mining rewards / Block rewards + Network transaction fees and/or coinbase rewards (e.g. newly issued + ZEC associated with block generation). +Network Upgrade + Any consensus rule change to the Zcash protocol, introduced as part + of the standard Zcash Network Upgrade Pipeline [#nu-pipeline]_ or + otherwise. +Founder’s Reward + The 20% ZEC from mined blocks allocated to the Electric Coin Company + (ECC), Zcash Foundation (ZF), employees, investors and/or other + entities prior to the expected first halving in October 2020. +Zcash Development Fund + Transparent address(es) controlled jointly by the Electric Coin + Company, Zcash Foundation, and a “Third Entity”. The fund is intended + for research, development, maintenance, and other technical work + directly connected to the Zcash protocol, as well as non-technical + initiatives (including design, marketing, events, regulatory + outreach, education, governance, and any other form of business or + community development) that contribute to the long-term success of + the Zcash network. In the context of this proposal, the Zcash + Development Fund consists of 10% of newly issued ZEC from block + rewards between the first and second halvings of the Zcash network. +Applicant + Any individual, group, or entity that seeks funding from the Zcash + Development Fund. +Recipient + Any individual, group, or entity that receives funding from the Zcash + Development Fund. + + +Abstract +======== + +This proposal puts forward the financing mechanism and fundamental rules +of governance for the creation of a Zcash Development Fund. + + +Specification +============= + +Funding mechanism of the Zcash Development Fund +----------------------------------------------- + +* This funding mechanism MUST be hard-coded so that 10% of newly issued + ZEC from block rewards are automatically directed to the transparent + address(es) of the Zcash Development Fund. +* The above requirement MUST be met between the first halving and + second halving. Upon the second halving, future governance decisions + MAY result in a further decrease of the Zcash Development Fund to 5% + of newly issued ZEC from block rewards, or alternatively MAY result + in another percent allocation which includes the possibility of a + system whereby 100% of block rewards go to miners. +* The two aforementioned requirements above MUST remain regardless of + any additional Network Upgrades or changes to mining or mining software + prior to the second halving. +* The Zcash Development Fund MAY outlive the period of its initial + funding mechanism, either through the appreciation in the price of ZEC, + or from alternative funding sources upon the second halving in 2024. +* The hard-coded transparent address(es) of the Zcash Development Fund + MAY be periodically rotated for operational security purposes to + decrease the risk of any potential loss of funds associated with the + address(es). The ECC, ZF, and/or “Third Entity” described below SHOULD + take any possible precautions within the confines of this Specification + section to avoid loss of funds. + + +Governance of the Zcash Development Fund +---------------------------------------- + +* Funds allocated to the Zcash Development Fund MUST be used only for + their intended purpose as defined in the following Rationale section of + this proposal. +* The transparent address(es) of the Zcash Development Fund MUST be + jointly controlled by the ECC, ZF, and Third Entity, and all funds + transferred from the Zcash Development Fund MUST be publicly confirmed + in an official manner by a majority decision among the ECC, ZF, and + Third Entity–commonly referred to as “2-of-3 multisig”. That is, funding + decisions MUST be put to an officially documented vote which MUST NOT + pass unless at least 2 of the 3 entities above vote approvingly. +* Prior to any movement of funds from the Zcash Development Fund, the ZF + and ECC MUST coordinate with each other and the community to establish + the Third Entity that will be involved in governance of the Zcash + Development Fund. The process of determining the exact initial + composition and rules of governance of the Third Entity MUST involve the + Zcash community at large in a process similar to that outlined in the + section "How the Foundation will select a particular proposal" in the + ZF’s August 6, 2019 statement [#zfnd-guidance]_. + +The governance rules of the Third Entity MUST include the following: + +* All decision-making and other governing processes of the Third Entity + MUST be independent of the ECC and ZF, and MUST include measures that + are necessary to avoid conflicts of interest in relation to the ECC and + ZF. +* At creation, the Third Entity MUST include an uneven number of at least + 5 individuals with independent previous affiliations, each having a + single vote. All such decisions MUST have majority support within the + Third Entity to result in an overall approving vote by the Third Entity. +* Once the Third Entity is established, it MAY decide to change its rules + of governance (e.g. simple majority versus supermajority rules), but + any such change MUST be preceded by the involvement of the Zcash + community at large, similar to the process outlined in the ZF’s + August 6, 2019 statement [#zfnd-guidance]_. +* Once the Third Entity is established as a self-governing body, it + SHOULD evolve toward a system whereby ZEC holders have a direct role in + determining votes and internal governance of the Third Entity. +* The Third Entity MAY apply for funding from the Zcash Development Fund, + if deemed appropriate by its governing body. This would be subject to a + majority vote by the ECC, ZF and Third Entity. + +Prior to any transfer of funds from the Zcash Development Fund, the ECC, +ZF, and Third Entity MUST specify, approve, and make public the final +rules on applying for and receiving funding from the Zcash Development +Fund, including the details of the decision-making process for approving +or rejecting funding requests. These rules MUST apply equally to all +Applicants, including the ECC, ZF, and Third Entity, and MUST include +the following: + +* Funding from the Zcash Development Fund MUST be available to not only + the ECC, ZF, and Third Entity but also to other individuals, groups, + or entities that could make technical and/or non-technical + contributions to Zcash as described in the Rationale section of this + proposal. +* To receive funding from the Zcash Development Fund, all Applicants + MUST follow the rules described in the Specification section of this + proposal and in final detail by the ECC, ZF, and Third Entity. +* As part of an application, each Applicant MUST produce a public + overview of the activities and projected costs for which they are + seeking funds. +* Each funding decision MUST be preceded by a community review period + of reasonable length to be determined by the ECC, ZF and Third Entity + in which Zcash stakeholders and community members can familiarize + themselves with the Applicant’s request and make suggestions, or + raise objections. +* In situations of overwhelming opposition from Zcash stakeholders and + community members to requests from Applicants, the ECC, ZF, and Third + Entity SHOULD NOT approve the request before striving to address + stakeholders and community concerns, and modifying the request, if + appropriate, to assuage concerns. +* Each funding decision MUST be accompanied by an easily referenced + joint public statement by the ECC, ZF, and Third Entity, which MUST + include the final tally of the relevant vote, as well as the votes of + the three involved entities. As part of this statement, each of the + three entities MUST provide explicit justification for its respective + vote. +* The ZF MUST ensure that all Zcash Development Fund votes and the + accompanying justifications described previously remain archived and + easily accessible online by Zcash community members, stakeholders and + the general public. +* The ECC, ZF, and Third Entity MAY approve funding requests on a + rolling basis, but all funding requests MUST be revisited and voted + on at a minimum of every 6 months to receive renewed approval. +* Recipients MUST publicize at minimum quarterly progress updates on + their activities funded from the Zcash Development Fund. In the case + of short-term assignments (less than 6 months), a single report upon + completion of the project is sufficient. Standard reporting + requirements MUST be specified by the ECC, ZF, and Third Entity prior + to any approved requests from the Zcash Development Fund and + additional requirements MAY be introduced as needed. +* Depending on the nature of each request, funds MAY be disbursed in a + single payment or incrementally, subject to objective milestones + and/or other performance metrics. + +Any decision to alter the governance of the Zcash Development Fund as +described in this proposal and in final detail by the ECC, ZF, and Third +Entity MUST involve the Zcash community at large, similar to the process +outlined in the ZF’s August 6, 2019 statement [#zfnd-guidance]_. +All transfers from the Zcash Development Fund MUST be in full accordance +with the requirements described in this proposal. + + +Issues not addressed in this proposal/Out-of-Scope +================================================== + +* Details of the decision-making process for supporting or rejecting + this or other relevant proposals by the ECC, ZF, and/or other Zcash + stakeholders. We do maintain, however, that any decision by the ECC + and/or the ZF on the issue described in the Motivation section below + SHOULD be preceded by the procedures for measuring community sentiment + as outlined in the ZF’s August 6, 2019 statement [#zfnd-guidance]_. +* Additional methods for measuring community sentiment MAY include a + way for ZEC holders to signal their support of specific proposals. +* The matter of whether the ECC should reorganize itself into a + non-profit or remain for-profit, as addressed by the ZF in their + August 6, 2019 statement [#zfnd-guidance]_. The current proposal is + neutral on this matter, and funding from the Development Fund would be + available for non-profit and/or for-profit entities. We consider the + governance rules of the Development Fund outlined in this Specification + section adequate for transparency and accountability. + + +Motivation +========== + +The Zcash network is scheduled to undergo its first halving in October +2020, per current protocol specifications. At the time of the first +halving, the codebase dictates that the Founder’s Reward, which consists +of 20% of the ZEC from every block reward, will be terminated. Without +codebase modification, for example in the upcoming NU4 Network Upgrade, +100% of block rewards would be claimed by miners after the first halving. + +The two organizations presently leading development and maintenance of +the Zcash network receive funds from the Founder’s Reward. These +organizations, the ECC and ZF, have recently requested a source of +funding after the first halving in order to continue operations for the +foreseeable future. The source of funds could theoretically be from +either a modification to the codebase dictating a Zcash Development Fund +from block rewards or, alternatively, from external sources. The ECC has +indicated though that it would “wind down or pivot” rather than accept +funding from any sources that would give “special interests” control +over the ECC [#ecc-assessment]_. + +Based on the ECC’s demands, the block reward appears to be the most +agreeable source of resources for a Zcash Development Fund. + +This proposal, originally published in the Zcash Community Forum on +August 14, 2019 [#blocktown-proposal]_ and formalized further in a +blog post on August 23, 2019 [#blocktown-blog]_, outlines the funding +mechanism and governance of such a Zcash Development Fund. Herein, we +propose a feature of NU4 whereby 10% of the ZEC from every new block +reward between the first halving and second halving would be directly +deposited in a Zcash Development Fund. + +For the period between the launch of the Zcash network in 2016 and the +first halving, there has been a centralized 20% fee known as the +Founder’s Reward taken from the block reward. Other active ZIP drafts +advocate a Zcash Development Fund of 20% allocation from the block +reward after the first halving. We believe that a cumulative eight years +of centralized fees from the block reward at the identical rate of 20% +would ultimately result in a narrow community that accepts the +likelihood of a perpetual 20% fee on the Zcash network. + +With a Zcash Development Fund that is only 10% of the block reward, a +precedent will be set that a large centralized fund is not indefinite +and will decrease faster than simply the rate of block reward halvings. +Although this proposal specifically addresses the period between the +first and second halving, this proposed feature may set a precedent +whereby the percent fee from block rewards allocated to a Zcash +Development Fund continually decreases every halving, e.g. 20% (FR) from +2016-2020, 10% from 2020-2024, 5% from 2024-2028, 2.5% from 2028-2032 +(effectively quartering the ZEC allocated to a development fund every +four years). We believe that this social contract could restore the +community’s faith in the decentralization of Zcash as the network +incentives align more closely with that of Bitcoin’s over time. +Alternatively, it is not unreasonable for the Zcash governance system to +elect a 0% allocation for the Zcash Development Fund upon the second +halving. For a more detailed exploration regarding the selection of 10%, +please review the blog post ‘Proposal for 10% Dev Fund in Zcash 2020 +Network Upgrade’ [#blocktown-10pc]_. + +Of note, we are not suggesting or implying that the funding from the +Founder’s Reward and a Zcash Development Fund would be managed in a +similar way or have similar directives. The Zcash Development Fund +feature that we propose for NU4 does not allocate any funds to former +angel investors, VCs or vested employees. Furthermore, the Zcash +Development Fund would be subject to more explicit and transparent +rules of governance, as outlined in the Specification section of this +proposal. + + +Rationale +========= + +The rationale behind this proposal is as follows: + +* To provide financial resources for research, development, and any + other technical work connected to software upgrades/maintenance of + the Zcash protocol, as well as non-technical initiatives including + marketing, design, events, regulatory outreach, education, + governance, and any other form of business that contribute to the + success of the Zcash network. +* To increase decentralization and network security of the Zcash + network. +* To increase decentralization through greater community involvement + in Zcash governance and resource allocation. +* To establish basic rules of governance and accountability regarding + the deployment of funds in the Zcash Development Fund. +* To encourage transparency and cooperation among Zcash stakeholders + and strengthen the community’s governance capabilities moving + forward. + + +Discussion +========== + +Recognized objections to this proposal include: + +* This proposal is not in accordance with the current Zcash protocol, + which is programmed to allocate 100% of the coinbase to miners upon + the first halving in 2020. However, at least during the next few + years of Zcash’s infancy, we believe it is advantageous to have a + funded and dedicated development team. +* The funding mechanism in this proposal is a Zcash Development Fund + consisting of 10% of newly issued ZEC from block rewards after the + first halving. This is in contrast to other proposals that allocate + 20% of the mining rewards to the Zcash Development Fund – presumably + a popular selection because the original Founder’s Reward was also + set at 20%. For reasons we have explored in depth [#blocktown-10pc]_ + and summarized in [#blocktown-summary]_, we believe 10% instead of + 20% is superior for network security, decentralization, uniting the + Zcash community and renewing interest in ZEC. +* Various parameters of governance in approving Applicant requests for + funding from the Zcash Development Fund. +* The inclusion of a Third Entity in governance. One notable objection + is the possibility of collusion between Third Entity and either the + ECC or ZF that would result in a “usurped” Zcash Development Fund. + We believe that the process for a community elected Third Entity, + however, will mature over time – giving the community and Zcash + stakeholders that important third opinion in deciding the proper + allocation of funds. As demonstrated by the resilience of the Bitcoin + network and community, well-formed communities tend to resist any + collusion with corporations and controlling entities that do not + promote the direct success of the network. Moreover, the inclusion of + a Third Entity has the advantage of offering a “tie-breaker” in the + event of a deadlock vote between the ECC and ZF and/or a situation + where one entity holds the other hostage, which is a possible + scenario in a 2-of-2 multisig agreement. +* This proposal does not have a clause dictating that a Recipient must + abstain from voting. If a Recipient must abstain from voting in a + 2-of-3 multisig governance system, then this could –as in the case of + 2-of-2 multisig– result in an entity holding another hostage. For + example, if the ECC refuses to fund the ZF until the ZF complies with + the ECC’s demands, then the ECC has the power to deadlock any vote to + fund the ZF, which requires the ECC and Third Entity to both vote + approvingly. + + +Acknowledgements +================ + +Aspects of this proposal, particularly the Terminology and Specification +sections, were adapted and expanded definitions and concepts put forth +in Placeholder’s dev fund proposal from August 22, 2019 [#placeholder-proposal]_. + + +References +========== + +.. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ +.. [#zfnd-guidance] `Zcash Foundation Guidance on Dev Fund Proposals. Zcash Foundation blog, August 6, 2019. `_ +.. [#ecc-assessment] `ECC Initial Assessment of Community Proposals. Electric Coin Company blog, August 26, 2019. `_ +.. [#blocktown-proposal] `Proposal for the Zcash 2020 Network Upgrade (topic on the Zcash community forum). `_ +.. [#blocktown-blog] `Blocktown Proposal for Zcash 2020 Network Upgrade. Blocktown Capital, August 23, 2019. `_ +.. [#blocktown-10pc] `Proposal for 10% Dev Fund in Zcash 2020 Network Upgrade. Blocktown Capital, August 14, 2019. `_ +.. [#blocktown-summary] `Executive Summary: Blocktown Proposal for Zcash 2020 Network Upgrade. Blocktown Capital, August 15, 2019. `_ +.. [#placeholder-proposal] `Dev Fund Proposal: 20% to a 2-of-3 multisig with community-involved governance (topic on the Zcash community forum). `_ +.. [#nu-pipeline] `The Zcash Network Upgrade Pipeline. Electric Coin Company blog, December 3, 2018. `_ diff --git a/zip-1007.html b/zip-1007.html new file mode 100644 index 00000000..5ad88cf3 --- /dev/null +++ b/zip-1007.html @@ -0,0 +1,113 @@ + + + + ZIP 1007: Enforce Development Fund Commitments with a Legal Charter + + + +
    +
    ZIP: 1007
    +Title: Enforce Development Fund Commitments with a Legal Charter
    +Owners: @lex-node (zcash forums)
    +        @mistfpga (zcash forums) <steve@mistfpga.net>
    +Status: Draft
    +Category: Process
    +Created: 2019-08-24
    +License: CC BY-SA 4.0 <https://creativecommons.org/licenses/by-sa/4.0/>
    +Discussions-To: <https://forum.zcashcommunity.com/t/dev-fund-supplemental-proposal-enforce-devfund-commitments-with-legal-charter/34709>
    +
    +

    Terminology

    +

    The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" in this document are to be interpreted as described in RFC 2119. 1

    +

    For clarity this ZIP defines these terms:

    +
      +
    • Covenant is defined as a legally binding agreement, upon which a specific aspect of development of the Zcash protocol and/or adoption is scheduled and agreed.
    • +
    +
    +
    +

    Abstract

    +

    A supplemental proposal to ensure feature selection and work is community-driven.

    +

    Hopefully it will be compatible with a number of other ZIPs and can be worked into them.

    +
    +
    +

    Out of Scope for this Proposal

    +
      +
    • This proposal does not address the merits, motivations or terms of any particular Development Funding Proposal.
    • +
    • Requirements and Implementation.
    • +
    +
    +
    +

    Motivation and Requirements

    +

    This proposal is supplemental to any Development Funding Proposal that places or purports to place conditions on how the Electric Coin Company (ECC) and the Zcash Foundation (ZF) use development funds, or take other related off-chain actions such as requirements and Covenants.

    +

    For example, the proposal 2 provides that “[f]unds accruing to the Zcash Development Fund MUST be used only for ... technical work directly connected to the various software implementations of the Zcash protocol.” However, once development funding is approved and implemented via a Network Upgrade, there will be no enforcement mechanism to ensure that the ZF and ECC abide by this requirement.

    +

    This proposal aims to provide such an enforcement mechanism. If this proposal is adopted, then the ECC and/or ZF, as applicable MUST enter into a legal agreement that would entitle ZEC holders to enforce ECC’s/ZF’s performance of any Covenants. For the purposes of this proposal we will refer to the legal agreement as the “DevFund Charter” or “Charter” for short, but it MAY also be styled in other ways – e.g. as a Constitution, Bylaws, Fund Governance Agreement, etc.

    +

    The DevFund Charter SHOULD be used to the benefit of all ZEC users, but the DevFund Charter MAY provide that an enforcement action requires the support of the holders of a plurality, majority or supermajority of ZEC. ZEC held by the ZF, ECC and their officers, directors, employees and/or affiliates SHOULD be excluded from the denominator in calculating the requisite plurality, majority or supermajority of ZEC.

    +

    a "plurality" in a vote means the option that received more votes than any other single option, but it is unclear how this applies to "a plurality of ZEC". Taking into account experience from stake-weighted voting in other cryptocurrencies, the threshold of a simple majority (50%), or more, of all *issued* ZEC voting for any enforcement action would seem to be an extremely high bar.

    +

    A quorum of yet-to-be-decided number of representatives from a number of groups specified by the DevFund Charter MAY provide that an enforcement action requires the support of the assigned representatives of each. One such mechanism SHOULD be ZEC balance, however this would require a 66% majority or a 85% supermajority. (These numbers are not binding and are up for discussion)

    +

    It is assumed that the Electric Coin Company, Zcash Foundation, or party with a direct conflict of interest SHOULD identify their vote/signal - which MAY be rejected from the vote.

    +

    Legal enforcement MAY occur in a court of law, non-binding mediation or binding arbitration. The DevFund Charter MAY also provide rights to other Zcash community constituencies, such as specified miners or the “Third Entity” contemplated by 2.

    +
    +
    +

    Rationale

    +

    Because ZEC holders do not have specific legal rights against the ECC or ZF, but MAY wish to condition renewed on-chain development funding on the ECC’s or ZF’s agreement to use the development funds in certain ways, ZEC holders should have the legal right to enforce ECC’s/ZF’s compliance with those agreements.

    +
    +
    +

    Specification

    +
      +
    • If a Development Funding Proposal receives sufficient community support and requires certain Covenants on the part of ECC or ZF, and there is also sufficient community support for using this enforcement mechanism as applied to that proposal, then one or more attorneys MUST be engaged to draft a Charter that reflects those Covenants, and the Charter MUST become legally effective and binding at the same time as the other aspects of the Development Funding Proposal are implemented on-chain (e.g., at the same time as activation of the corresponding Network Upgrade, if a Network Upgrade is is required to implement the Development Funding Proposal).
    • +
    • Each pending Development Funding Proposal SHOULD be amended to specifically describe any Covenants that the ECC, ZF or any other relevant person or entity would be required to agree to as part of such Development Funding Proposal.
    • +
    +
    +
    +

    Open Issues

    +
      +
    • Whether a plurality, majority or supermajority of ZEC are required to approve an enforcement action against ECC or ZF;
    • +
    • Logistics and technical implementation regarding the Charter, such as on-chain signalling/voting for enforcement;
    • +
    • Remedies under the Charter, such as “specific performance” (getting a court to order ZF or ECC to comply with a Covenant);
    • +
    • Discontinuation or reduction of development funding (which MAY occur by having Covenants that the ZF or ECC will prepare a Network Upgrade that discontinues or reduces development funding if so requested by holders of the requisite plurality, majority or supermajority of ZEC), etc.
    • +
    +
    +
    +

    Raised Concerns

    +
      +
    • “Code is Law; This is Just Law!” +
        +
      • Objection: Relying on off-chain legal mechanisms is contrary to the cypherpunk ethos and/or the mission/ethos of Zcash.
      • +
      • Answer: This is a values judgment that some people may reasonably hold. However, one should also consider that “don’t trust, verify” is also a cypherpunk principle and that the off-chain nature of some requirements means that a code-based solution is currently not possible; therefore, a legal enforcement mechanism, while imperfect, may be preferable to no enforcement mechanism.
      • +
      +
    • +
    • “Social Coordination Impracticality/Risk” +
        +
      • Objection: ZEC holders prize anonymity, but legal enforcement of breached Covenants will require social coordination (people must agree to enforce the action, and someone must actually get a lawyer and go to court). Therefore, this mechanism will not be valuable to ZEC holders and could lead them to compromise their anonymity and thus be worse than useless.
      • +
      • Answer: The community should further discuss how, in practice, ZEC holders might securely coordinate to bring an enforcement action against ECC and the ZF if it were needed. Additionally, it should be considered that the mere possibility of legal enforcement due to the clear terms of a Charter may dissuade ECC and ZF from violating Covenants and thus, paradoxically, having a Charter may also mean that no legal action ever becomes necessary. Additionally, the “class action” legal structure in some jurisdictions may mean that the ZEC holders' community could find a ‘champion’ in the form of a class-action attorney, without ZEC holders being required to personally become involved or ‘out themselves’ as ZEC holders (other than one willing ZEC holder as class representative).
      • +
      +
    • +
    • “This Will Just Waste Funding On Lawyers” +
        +
      • Objection: This Charter will be novel and bespoke, and lawyers may charge high fees to draft it and give assurances that it is enforceable. This wastes money that otherwise could be spent on Zcash development.
      • +
      • Answer: This is a valid concern. The Zcash community may be able to crowdsource an initial rough draft of the Charter from lawyers in the community or even non-lawyers who may be willing to do research and make an attempt at an initial draft. Lawyers could be involved primarily to issue-spot and formalize the initial draft. ECC and ZF may have law firms on retainer that could perform the work at favorable rates. Lawyers may be willing to work at discounted rates due to the unique opportunity and prestige of developing this innovative blockchain governance mechanism. Additionally, any legal fees may be small as a percentage of the overall value at stake, which may be considerable if a 5-20% development funding block reward is authorized.
      • +
      +
    • +
    +
    +
    +

    References

    + + + + + + + +
    1Key words for use in RFCs to Indicate Requirement Levels
    + + + + + + + +
    2Development Fund of 10% to a 2-of-3 Multisig with Community-Involved Third Entity
    +
    +
    + + \ No newline at end of file diff --git a/zip-1007.rst b/zip-1007.rst new file mode 100644 index 00000000..b2b76d27 --- /dev/null +++ b/zip-1007.rst @@ -0,0 +1,188 @@ +:: + + ZIP: 1007 + Title: Enforce Development Fund Commitments with a Legal Charter + Owners: @lex-node (zcash forums) + @mistfpga (zcash forums) + Status: Draft + Category: Process + Created: 2019-08-24 + License: CC BY-SA 4.0 + Discussions-To: + + +Terminology +=========== + +The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY" in this +document are to be interpreted as described in RFC 2119. [#RFC2119]_ + +For clarity this ZIP defines these terms: + +* Covenant is defined as a legally binding agreement, upon which a specific + aspect of development of the Zcash protocol and/or adoption is scheduled and + agreed. + + +Abstract +======== + +A supplemental proposal to ensure feature selection and work is community-driven. + +Hopefully it will be compatible with a number of other ZIPs and can be worked +into them. + + +Out of Scope for this Proposal +============================== + +* This proposal does not address the merits, motivations or terms of any particular + Development Funding Proposal. +* Requirements and Implementation. + + +Motivation and Requirements +=========================== + +.. role:: editor-note + +This proposal is supplemental to any Development Funding Proposal that places or +purports to place conditions on how the Electric Coin Company (ECC) and the Zcash +Foundation (ZF) use development funds, or take other related off-chain actions such +as requirements and Covenants. + +For example, the proposal [#zip-1006]_ provides that “[f]unds accruing to the +Zcash Development Fund MUST be used only for ... technical work directly connected +to the various software implementations of the Zcash protocol.” However, once +development funding is approved and implemented via a Network Upgrade, there will +be no enforcement mechanism to ensure that the ZF and ECC abide by this requirement. + +This proposal aims to provide such an enforcement mechanism. If this proposal is +adopted, then the ECC and/or ZF, as applicable MUST enter into a legal agreement +that would entitle ZEC holders to enforce ECC’s/ZF’s performance of any Covenants. +For the purposes of this proposal we will refer to the legal agreement as the +“DevFund Charter” or “Charter” for short, but it MAY also be styled in other ways – +e.g. as a Constitution, Bylaws, Fund Governance Agreement, etc. + +The DevFund Charter SHOULD be used to the benefit of all ZEC users, but the DevFund +Charter MAY provide that an enforcement action requires the support of the holders +of a plurality, majority or supermajority of ZEC. ZEC held by the ZF, ECC and their +officers, directors, employees and/or affiliates SHOULD be excluded from the +denominator in calculating the requisite plurality, majority or supermajority of ZEC. + +:editor-note:`a "plurality" in a vote means the option that received more votes than +any other single option, but it is unclear how this applies to "a plurality of ZEC". +Taking into account experience from stake-weighted voting in other cryptocurrencies, +the threshold of a simple majority (50%), or more, of all *issued* ZEC voting for +any enforcement action would seem to be an extremely high bar.` + +A quorum of yet-to-be-decided number of representatives from a number of groups +specified by the DevFund Charter MAY provide that an enforcement action requires +the support of the assigned representatives of each. One such mechanism SHOULD be +ZEC balance, however this would require a 66% majority or a 85% supermajority. +(These numbers are not binding and are up for discussion) + +It is assumed that the Electric Coin Company, Zcash Foundation, or party with a +direct conflict of interest SHOULD identify their vote/signal - which MAY be rejected +from the vote. + +Legal enforcement MAY occur in a court of law, non-binding mediation or binding +arbitration. The DevFund Charter MAY also provide rights to other Zcash community +constituencies, such as specified miners or the “Third Entity” contemplated by +[#zip-1006]_. + + +Rationale +========= + +Because ZEC holders do not have specific legal rights against the ECC or ZF, but +MAY wish to condition renewed on-chain development funding on the ECC’s or ZF’s +agreement to use the development funds in certain ways, ZEC holders should have +the legal right to enforce ECC’s/ZF’s compliance with those agreements. + + +Specification +============= + +* If a Development Funding Proposal receives sufficient community support and + requires certain Covenants on the part of ECC or ZF, and there is also sufficient + community support for using this enforcement mechanism as applied to that proposal, + then one or more attorneys MUST be engaged to draft a Charter that reflects those + Covenants, and the Charter MUST become legally effective and binding at the same + time as the other aspects of the Development Funding Proposal are implemented + on-chain (e.g., at the same time as activation of the corresponding Network Upgrade, + if a Network Upgrade is is required to implement the Development Funding Proposal). + +* Each pending Development Funding Proposal SHOULD be amended to specifically + describe any Covenants that the ECC, ZF or any other relevant person or entity + would be required to agree to as part of such Development Funding Proposal. + + +Open Issues +=========== + +* Whether a plurality, majority or supermajority of ZEC are required to approve an + enforcement action against ECC or ZF; +* Logistics and technical implementation regarding the Charter, such as on-chain + signalling/voting for enforcement; +* Remedies under the Charter, such as “specific performance” (getting a court to + order ZF or ECC to comply with a Covenant); +* Discontinuation or reduction of development funding (which MAY occur by having + Covenants that the ZF or ECC will prepare a Network Upgrade that discontinues or + reduces development funding if so requested by holders of the requisite plurality, + majority or supermajority of ZEC), etc. + + +Raised Concerns +=============== + +* “Code is Law; This is Just Law!” + + - Objection: Relying on off-chain legal mechanisms is contrary to the cypherpunk + ethos and/or the mission/ethos of Zcash. + - Answer: This is a values judgment that some people may reasonably hold. However, + one should also consider that “don’t trust, verify” is also a cypherpunk + principle and that the off-chain nature of some requirements means that a + code-based solution is currently not possible; therefore, a legal enforcement + mechanism, while imperfect, may be preferable to no enforcement mechanism. + +* “Social Coordination Impracticality/Risk” + + - Objection: ZEC holders prize anonymity, but legal enforcement of breached + Covenants will require social coordination (people must agree to enforce the + action, and someone must actually get a lawyer and go to court). Therefore, this + mechanism will not be valuable to ZEC holders and could lead them to compromise + their anonymity and thus be worse than useless. + - Answer: The community should further discuss how, in practice, ZEC holders might + securely coordinate to bring an enforcement action against ECC and the ZF if it + were needed. Additionally, it should be considered that the mere possibility of + legal enforcement due to the clear terms of a Charter may dissuade ECC and ZF + from violating Covenants and thus, paradoxically, having a Charter may also mean + that no legal action ever becomes necessary. Additionally, the “class action” + legal structure in some jurisdictions may mean that the ZEC holders' community + could find a ‘champion’ in the form of a class-action attorney, without ZEC + holders being required to personally become involved or ‘out themselves’ as + ZEC holders (other than one willing ZEC holder as class representative). + +* “This Will Just Waste Funding On Lawyers” + + - Objection: This Charter will be novel and bespoke, and lawyers may charge high + fees to draft it and give assurances that it is enforceable. This wastes money + that otherwise could be spent on Zcash development. + - Answer: This is a valid concern. The Zcash community may be able to crowdsource + an initial rough draft of the Charter from lawyers in the community or even + non-lawyers who may be willing to do research and make an attempt at an initial + draft. Lawyers could be involved primarily to issue-spot and formalize the + initial draft. ECC and ZF may have law firms on retainer that could perform the + work at favorable rates. Lawyers may be willing to work at discounted rates due + to the unique opportunity and prestige of developing this innovative blockchain + governance mechanism. Additionally, any legal fees may be small as a percentage + of the overall value at stake, which may be considerable if a 5-20% development + funding block reward is authorized. + + +References +========== + +.. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ +.. [#zip-1006] `Development Fund of 10% to a 2-of-3 Multisig with Community-Involved Third Entity `_ diff --git a/zip-1008.html b/zip-1008.html new file mode 100644 index 00000000..9bc1dcf4 --- /dev/null +++ b/zip-1008.html @@ -0,0 +1,107 @@ + + + + ZIP 1008: Fund ECC for Two More Years + + + +
    +
    ZIP: 1008
    +Title: Fund ECC for Two More Years
    +Owners: @kek (zcash forums)
    +        @mistfpga (zcash forums) <steve@mistfpga.net>
    +Status: Draft
    +Category: Consensus
    +Created: 2019-09-02
    +License: CC BY-SA 4.0 <https://creativecommons.org/licenses/by-sa/4.0/>
    +Discussions-To: <https://forum.zcashcommunity.com/t/kek-s-proposal-fund-ecc-for-2-more-years/34778>
    +
    +

    Terminology

    +

    The key words "MUST" and "MUST NOT" in this document are to be interpreted as described in RFC 2119. 2

    +

    For clarity this ZIP defines these terms:

    +
      +
    • Spirit is defined as what is the intended outcome of the ZIP. 1
    • +
    + + + + + + + +
    1If there is contradiction between Spirit and any other part of the proposal that needs to be addressed, in the event it is not addressed Spirit is assumed to overrule all.
    +
    +
    +

    Out of Scope for this Proposal

    +

    Everything except moving the development fund end date.

    +
    +
    +

    Abstract

    +

    The spirit of this proposal is to keep to the current structure of the Electric Coin Company (ECC) receiving funding from the block distribution for two years' worth of blocks after the first halving in October 2020.

    +
    +
    +

    Motivation

    +

    To give more time to work out the full ramifications of any potential pivot / slow down, yet keep "all in on ZEC" for two more years with as little disruption as possible.

    +
    +
    +

    Requirements

    +

    Nothing about distribution recipients changes.

    +

    The current distribution of the Founders’ Reward is dependent on arrangements between the participants that will, if not explicitly renewed, expire at the first halving. There are currently direct and indirect recipients other than the ECC and Zcash Foundation. It is unclear whether funding of the ECC and Foundation is intended to continue at the current absolute ZEC rate, or at the same rate relative to the block subsidy which halves in October 2020. Further specification would be needed in order to fulfil and clarify the spirit of the proposal.

    +
    +
    +

    Specification

    +
      +
    • The ECC's portion of block subsidy MUST be capped at their projected 1.1m USD costs a month.
    • +
    • The ECC's portion of block subsidy MUST NOT be greater than 10% of total block subsidy of any one block.
    • +
    • This MUST end at a block height corresponding to two years after the first halving, i.e. October 2022.
    • +
    +

    The 1.1m USD cap cannot be specified as a consensus rule since there is no on-chain oracle for the USD price.

    +
    +

    Rationale

    +

    Provisions that referred to specific block heights have been revised since they were inconsistent with the change in block target spacing 4 that will occur with the Blossom Network Upgrade 3; and even if recalculated, fixed block heights would potentially be inconsistent with future changes in target block spacing.

    +
    +
    +
    +

    Raised objections and issues so far

    +
      +
    • This is just kicking the can down the road.
    • +
    • The Zcash Foundation has raised objections to a single point of failure in the ECC.
    • +
    +
    +
    +

    Implications to other users

    +
      +
    • The knock-on impact of this ZIP to exchanges and wallet developers may be nontrivial.
    • +
    • The economics of doing this have not been calculated.
    • +
    +
    +
    +

    References

    + + + + + + + +
    2Key words for use in RFCs to Indicate Requirement Levels
    + + + + + + + +
    3ZIP 206: Deployment of the Blossom Network Upgrade
    + + + + + + + +
    4ZIP 208: Shorter Block Target Spacing
    +
    +
    + + \ No newline at end of file diff --git a/zip-1008.rst b/zip-1008.rst new file mode 100644 index 00000000..cc5ffd7b --- /dev/null +++ b/zip-1008.rst @@ -0,0 +1,112 @@ +:: + + ZIP: 1008 + Title: Fund ECC for Two More Years + Owners: @kek (zcash forums) + @mistfpga (zcash forums) + Status: Draft + Category: Consensus + Created: 2019-09-02 + License: CC BY-SA 4.0 + Discussions-To: + + +Terminology +=========== + +The key words "MUST" and "MUST NOT" in this document are to be interpreted as +described in RFC 2119. [#RFC2119]_ + +For clarity this ZIP defines these terms: + +* Spirit is defined as what is the intended outcome of the ZIP. [#spirit]_ + +.. [#spirit] If there is contradiction between Spirit and any other part of + the proposal that needs to be addressed, in the event it is not addressed + Spirit is assumed to overrule all. + + +Out of Scope for this Proposal +============================== + +Everything except moving the development fund end date. + + +Abstract +======== + +The spirit of this proposal is to keep to the current structure of the +Electric Coin Company (ECC) receiving funding from the block distribution for +two years' worth of blocks after the first halving in October 2020. + + +Motivation +========== + +To give more time to work out the full ramifications of any potential pivot / +slow down, yet keep "all in on ZEC" for two more years with as little +disruption as possible. + + +Requirements +============ + +.. role:: editor-note + +Nothing about distribution recipients changes. + +:editor-note:`The current distribution of the Founders’ Reward is dependent +on arrangements between the participants that will, if not explicitly renewed, +expire at the first halving. There are currently direct and indirect recipients +other than the ECC and Zcash Foundation. It is unclear whether funding of the +ECC and Foundation is intended to continue at the current absolute ZEC rate, +or at the same rate relative to the block subsidy which halves in October 2020. +Further specification would be needed in order to fulfil and clarify the spirit +of the proposal.` + + +Specification +============= + +* The ECC's portion of block subsidy MUST be capped at their projected 1.1m USD + costs a month. +* The ECC's portion of block subsidy MUST NOT be greater than 10% of total block + subsidy of any one block. +* This MUST end at a block height corresponding to two years after the first + halving, i.e. October 2022. + +:editor-note:`The 1.1m USD cap cannot be specified as a consensus rule since +there is no on-chain oracle for the USD price.` + +Rationale +--------- + +Provisions that referred to specific block heights have been revised since they +were inconsistent with the change in block target spacing [#zip-0208]_ that will +occur with the Blossom Network Upgrade [#zip-0206]_; and even if recalculated, +fixed block heights would potentially be inconsistent with future changes in +target block spacing. + + +Raised objections and issues so far +=================================== + +* This is just kicking the can down the road. +* The Zcash Foundation has raised objections to a single point of failure in the + ECC. + + +Implications to other users +=========================== + +* The knock-on impact of this ZIP to exchanges and wallet developers may be + nontrivial. +* The economics of doing this have not been calculated. + + +References +========== + +.. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ +.. [#zip-0206] `ZIP 206: Deployment of the Blossom Network Upgrade `_ +.. [#zip-0208] `ZIP 208: Shorter Block Target Spacing `_ diff --git a/zip-1009.html b/zip-1009.html new file mode 100644 index 00000000..328477c4 --- /dev/null +++ b/zip-1009.html @@ -0,0 +1,161 @@ + + + + ZIP 1009: Five-Entity Strategic Council + + + +
    +
    ZIP: 1009
    +Title: Five-Entity Strategic Council
    +Owner: Avichal Garg <avichalgarg@electriccapital.com>
    +Status: Draft
    +Category: Process
    +Created: 2019-08-28
    +License: MIT
    +Discussions-To: <https://forum.zcashcommunity.com/t/dev-fund-proposal-5-entity-strategic-council-approach/34801>
    +
    +

    Terminology

    +

    Key terms

    +
    +
    Developer Fund
    +
    20% of the mined ZEC in the four-year period from approximately October 2020 to October 2024, during which at most 5,250,000 ZEC will be minted.
    +
    Strategic Council
    +
    A five-person committee that determines how to allocate the Developer Fund. Held accountable to the community via regular elections.
    +
    Executor
    +
    An individual, group, company, or other organization that receives funding from the Strategic Council. They are responsible for excellent execution and held accountable by the Strategic Council.
    +
    +
    +
    +

    Abstract

    +

    This proposal reserves 20% of newly minted coins in each block for a Developer Fund. A five-person Strategic Council would be elected by the community every two years. The Strategic Council would determine the high level strategy, goals, and metrics to evaluate progress for the ecosystem on a six-month cadence. The Strategic Council would be responsible for allocating funding to Executors for the subsequent six months and summarizing the performance of Executors in the prior six months. Executors would submit proposals to the Strategic Council on a six-month cadence, including project plans, funding plans, and how they will measure success on a scale from 1-10. At the end of six months, Executors will grade themselves and the Strategic Council will summarize what was accomplished with a target of 7/10 in every quarter on a roll-up basis (a simple average of all of the outstanding projects for that six months).

    +
    +
    +

    Out of Scope for this Proposal

    +
      +
    • How to do 1 person = 1 vote (and perhaps we cannot or should not do this).
    • +
    • How to structure the Strategic Council legally, i.e. should it be a Swiss Foundation and what sorts of legally binding responsibilities do the Strategic Council members have?
    • +
    +
    +
    +

    Motivation and Requirements

    +

    This is an attempt to put on my startup CEO hat and address the strategic and execution challenges I believe have held back Zcash from realizing its full potential.

    +

    Principles & Observations Based on My Experiences (a.k.a. Biases?)

    +

    Because layer 1 protocols are network-effect driven, without a quickly growing network-effect in miners, developers, users, and liquidity, a layer 1 protocol will ultimately collapse.

    +

    The primary driver of success in a network-effect business is how quickly you grow the network effects.

    +

    To grow a network effect, you must have both the correct strategy and excellent execution. If your strategy is not correct, no matter how well you execute, you will fail. If your execution is not excellent, you will not be able to assess whether lack of progress is due to poor execution or poor strategy.

    +

    Thus, to build the network effects Zcash needs to succeed, we must answer five questions:

    +
      +
    1. Who determines the strategy?
    2. +
    3. How do they decide on the strategy?
    4. +
    5. How are they held accountable to having the correct strategy?
    6. +
    7. Who executes?
    8. +
    9. How are Executors held accountable to excellent execution?
    10. +
    +

    1. Who determines the strategy?

    +
      +
    • Volunteer-based approaches require the ability for individuals or entities to accumulate significant quantities of the underlying coin. Bitcoin did this through obscurity and Grin is accomplishing this through extremely high inflation in the early years. Zcash has moved beyond this phase and thus I do not believe a volunteer-based approach could be effective. Thus, a developer fund (or similar approach) is the only realistic option for Zcash today.
    • +
    • Independent, high-quality governance enables better decisions and higher quality execution.
    • +
    • We should ideally have the recipients of the funds be different entities than the governance body that allocates funds to avoid conflicts.
    • +
    • Too few people in a decision-making process and people can collude. Too many and nothing gets done.
    • +
    • Good governance and leadership is a significant time commitment and requires significant support/resources.
    • +
    • There are a variety of perspectives that should be represented, including miners, developers, regulators, and users.
    • +
    +

    2. How do they decide on the strategy?

    +
      +
    • Flexibility in how funds are used is important. Strategies and markets change over time and we should be able to evolve. Thus, we should not constrain how funds are used up front.
    • +
    • There should be no constraint to using all of the funds in any given time frame.
    • +
    • Creating and fostering decentralized ecosystem of miners and developers is important for the long-term health of the ecosystem.
    • +
    • A regular and predictable cadence in planning and goal setting makes it easy for teams to build, ship, and recharge between intense periods of building.
    • +
    • Transparency in the strategy, decision making of fund recipients, and how funds are distributed is paramount.
    • +
    +

    3. How are they held accountable to having the correct strategy?

    +
      +
    • No organization or individual should have a permanent seat on a decision-making body. Regular elections enforce good behavior.
    • +
    • Third-party audits of financial behavior enforce good behavior and create transparency.
    • +
    • Bad actors should be able to be removed from any decision-making body for egregious violations of trust or misbehavior.
    • +
    +

    4. Who executes?

    +
      +
    • Anyone should be able to participate in the execution.
    • +
    • Over time the best executors should have reputation accrue and be able to receive more funds.
    • +
    • There is value in having Executors distributed across geographies and across entities.
    • +
    • There is value in identifying Executors who have long-term commitments to Zcash and will be available for long-term support and maintenance of their work.
    • +
    +

    5. How are Executors held accountable to excellent execution?

    +
      +
    • Excellent execution comes from having verifiable hypotheses, backed up with data, and clear milestones.
    • +
    • Executors need to submit concrete plans, with clear goals and metrics, and be judged according to both whether or not the goals were reasonable and whether they accomplished those goals (ideally in a measurable way using metrics).
    • +
    • Execution is best measured by pre-defining success and failure criteria, prior to having been influenced by the challenges of the task at hand.
    • +
    +
    +
    +

    Specification

    +

    1. Who determines strategy?

    +
      +
    • A five-person/entity board -- Five people is better than three to minimize collusion.
    • +
    • Strategic Council should get two-year term so we can pivot people in the middle if necessary. No permanent seats.
    • +
    • For the purposes of voting to determine seats (not having seats vote on issues): one of the five seats should be allocated for miners and signaled through nodes. One of the five should be weighted by ZEC holding so 1 ZEC = 1 vote. Three of the five should be 1 person = 1 vote.
    • +
    • Elections should be open such that any person or entity can run for a seat.
    • +
    • The board is a paid position from Dev Fund emissions. Compensation TBD.
    • +
    +

    2. How do they decide?

    +
      +
    • 20% of block rewards are allocated for the Developer Fund.
    • +
    • There should not be any limit up front on where money can go. Perhaps one year it makes sense to invest entirely in protocol and another year it makes sense to invest in user adoption via content marketing, SEO, SEM, etc.
    • +
    • Every six months, the board has a responsibility to publish an update to the strategy, key metrics that are being tracked, and key metrics to hit as goals in the next six months. This will require feedback from the community but ultimately the board needs to decide on and own the strategy.
    • +
    • Every six months, the board runs a process whereby anyone can submit proposals for how they would best accomplish these strategic objectives and hit those metrics and milestones.
    • +
    • No more than 33% of funds can go to one entity for development purposes. This enforces broad decentralization and encourages the ecosystem to identify new participants.
    • +
    +

    How are they held accountable for having the correct strategy?

    +
      +
    • Elections every two years from the community.
    • +
    • All decisions and finances are audited by a third-party audit firm.
    • +
    • There is an annual meeting of all stakeholders (perhaps at Zcon?) for feedback, Q and A of the board, and a walk through of what has been accomplished in the last six months and what the proposals are for the next six months for feedback. The other six-month cadence meeting for the Strategic Council to present its plans and receive feedback can be virtual.
    • +
    +

    4. Who executes?

    +
      +
    • Individuals, teams, or companies from anywhere can submit a proposal that aligns with the strategy (or doesn’t), a budget for what they want to do, and their success criteria on a scale of 1-10 (see below).
    • +
    • Executing Entities can submit plans that may take longer than 6 months to complete as the reality of hiring and funding employees may dictate longer term financing commitment. The Strategic Committee should have discretion to allow for these sorts of investments but should require intermediate milestones and grading on the 6-month time horizon as well.
    • +
    • Companies that have sustainable business models and can support or subsidize engineers to work on Zcash or that have adjacent businesses that would benefit from investment in this technology should be encouraged to participate, i.e. the way Square is supporting Bitcoin we should have companies supporting Zcash.
    • +
    • Ideally the board also encourages non-technical execution such as education, video series, regulatory progress, etc.
    • +
    +

    5. How are they held accountable to excellent execution?

    +
      +
    • At the end of six months all proposals are graded 1-10. Each team would pre-agree to what would would result in a 0, 3, 7, 10/10 and then they can move it up or down a little once results are due in 6 months. If they pre-agreed to some definition of results that is a 3 and then tried to give themselves an 8, it would look fishy and could impact future funding.
    • +
    • The Strategic Council should target an average score of 7/10 for that six months across all Executors. If we score too high, we are not being ambitious enough in our goals. If we score too low, we were trying to do too much or had a fundamental misunderstanding of our goals.
    • +
    • Over time the Strategic Council decides who gets funds so under-performers will be culled. Thus Executors are held accountable by the board and the board is held accountable by the community.
    • +
    +
    +
    +

    Issues & Further Discussion

    +

    Raised objections, issues, and open questions:

    +
      +
    • How might we create a process to amending this process? We may want 4/5 of the Strategic Council to approve changes or 2/3 of ZEC holders to be able to amend the Strategic Council’s charter.
    • +
    • How do we recall or impeach the members of the Strategic Committee prior to the end of their term if necessary?
    • +
    • I’m sure there are many other points of ambiguity and improvements we could make. There may even be critical design flaws or failures in this system. Feedback is appreciated.
    • +
    +
    +
    +

    References / Background

    + +

    these should be made into inline references.

    +
    +
    +

    Change Log

    +
      +
    • 2019-08-27 Initial draft - thanks to @jubos, @puntium, @zooko, @joshs, and Jack Gavigan for helping me more clearly articulating my ideas and helping get them formatted properly for a ZIP. These ideas are solely mine and were not influenced by any of these individuals.
    • +
    • 2019-08-28 Updated to be in ZIP format.
    • +
    • 2019-09-15 Finally turned in to a pull request on GitHub and incorporated feedback from @daira and @str4d.
    • +
    +
    +
    + + \ No newline at end of file diff --git a/zip-1009.rst b/zip-1009.rst new file mode 100644 index 00000000..fa07e96c --- /dev/null +++ b/zip-1009.rst @@ -0,0 +1,272 @@ +:: + + ZIP: 1009 + Title: Five-Entity Strategic Council + Owner: Avichal Garg + Status: Draft + Category: Process + Created: 2019-08-28 + License: MIT + Discussions-To: + + +Terminology +=========== + +*Key terms* + +Developer Fund + 20% of the mined ZEC in the four-year period from approximately October 2020 + to October 2024, during which at most 5,250,000 ZEC will be minted. + +Strategic Council + A five-person committee that determines how to allocate the Developer Fund. + Held accountable to the community via regular elections. + +Executor + An individual, group, company, or other organization that receives funding + from the Strategic Council. They are responsible for excellent execution + and held accountable by the Strategic Council. + + +Abstract +======== + +This proposal reserves 20% of newly minted coins in each block for a Developer +Fund. A five-person Strategic Council would be elected by the community every +two years. The Strategic Council would determine the high level strategy, +goals, and metrics to evaluate progress for the ecosystem on a six-month +cadence. The Strategic Council would be responsible for allocating funding to +Executors for the subsequent six months and summarizing the performance of +Executors in the prior six months. Executors would submit proposals to the +Strategic Council on a six-month cadence, including project plans, funding +plans, and how they will measure success on a scale from 1-10. At the end of +six months, Executors will grade themselves and the Strategic Council will +summarize what was accomplished with a target of 7/10 in every quarter on a +roll-up basis (a simple average of all of the outstanding projects for that +six months). + + +Out of Scope for this Proposal +============================== + +* How to do 1 person = 1 vote (and perhaps we cannot or should not do this). +* How to structure the Strategic Council legally, i.e. should it be a Swiss + Foundation and what sorts of legally binding responsibilities do the + Strategic Council members have? + + +Motivation and Requirements +=========================== + +This is an attempt to put on my startup CEO hat and address the strategic and +execution challenges I believe have held back Zcash from realizing its full +potential. + +**Principles & Observations Based on My Experiences (a.k.a. Biases?)** + +Because layer 1 protocols are network-effect driven, without a quickly growing +network-effect in miners, developers, users, and liquidity, a layer 1 protocol +will ultimately collapse. + +The primary driver of success in a network-effect business is how quickly you +grow the network effects. + +To grow a network effect, you must have both the correct strategy and +excellent execution. If your strategy is not correct, no matter how well you +execute, you will fail. If your execution is not excellent, you will not be +able to assess whether lack of progress is due to poor execution or poor +strategy. + +Thus, to build the network effects Zcash needs to succeed, we must answer five +questions: + +1. Who determines the strategy? +2. How do they decide on the strategy? +3. How are they held accountable to having the correct strategy? +4. Who executes? +5. How are Executors held accountable to excellent execution? + +*1. Who determines the strategy?* + +* Volunteer-based approaches require the ability for individuals or entities + to accumulate significant quantities of the underlying coin. Bitcoin did + this through obscurity and Grin is accomplishing this through extremely + high inflation in the early years. Zcash has moved beyond this phase and + thus I do not believe a volunteer-based approach could be effective. Thus, + a developer fund (or similar approach) is the only realistic option for + Zcash today. +* Independent, high-quality governance enables better decisions and higher + quality execution. +* We should ideally have the recipients of the funds be different entities + than the governance body that allocates funds to avoid conflicts. +* Too few people in a decision-making process and people can collude. Too + many and nothing gets done. +* Good governance and leadership is a significant time commitment and requires + significant support/resources. +* There are a variety of perspectives that should be represented, including + miners, developers, regulators, and users. + +*2. How do they decide on the strategy?* + +* Flexibility in how funds are used is important. Strategies and markets + change over time and we should be able to evolve. Thus, we should not + constrain how funds are used up front. +* There should be no constraint to using all of the funds in any given time + frame. +* Creating and fostering decentralized ecosystem of miners and developers is + important for the long-term health of the ecosystem. +* A regular and predictable cadence in planning and goal setting makes it + easy for teams to build, ship, and recharge between intense periods of + building. +* Transparency in the strategy, decision making of fund recipients, and how + funds are distributed is paramount. + +*3. How are they held accountable to having the correct strategy?* + +* No organization or individual should have a permanent seat on a + decision-making body. Regular elections enforce good behavior. +* Third-party audits of financial behavior enforce good behavior and create + transparency. +* Bad actors should be able to be removed from any decision-making body for + egregious violations of trust or misbehavior. + +*4. Who executes?* + +* Anyone should be able to participate in the execution. +* Over time the best executors should have reputation accrue and be able to + receive more funds. +* There is value in having Executors distributed across geographies and + across entities. +* There is value in identifying Executors who have long-term commitments to + Zcash and will be available for long-term support and maintenance of their + work. + +*5. How are Executors held accountable to excellent execution?* + +* Excellent execution comes from having verifiable hypotheses, backed up + with data, and clear milestones. +* Executors need to submit concrete plans, with clear goals and metrics, and + be judged according to both whether or not the goals were reasonable and + whether they accomplished those goals (ideally in a measurable way using + metrics). +* Execution is best measured by pre-defining success and failure criteria, + prior to having been influenced by the challenges of the task at hand. + + +Specification +============= + +*1. Who determines strategy?* + +* A five-person/entity board -- Five people is better than three to minimize + collusion. +* Strategic Council should get two-year term so we can pivot people in the + middle if necessary. No permanent seats. +* For the purposes of voting to determine seats (not having seats vote on + issues): one of the five seats should be allocated for miners and signaled + through nodes. One of the five should be weighted by ZEC holding so + 1 ZEC = 1 vote. Three of the five should be 1 person = 1 vote. +* Elections should be open such that any person or entity can run for a seat. +* The board is a paid position from Dev Fund emissions. Compensation TBD. + +*2. How do they decide?* + +* 20% of block rewards are allocated for the Developer Fund. +* There should not be any limit up front on where money can go. Perhaps one + year it makes sense to invest entirely in protocol and another year it + makes sense to invest in user adoption via content marketing, SEO, SEM, + etc. +* Every six months, the board has a responsibility to publish an update to + the strategy, key metrics that are being tracked, and key metrics to hit + as goals in the next six months. This will require feedback from the + community but ultimately the board needs to decide on and own the strategy. +* Every six months, the board runs a process whereby anyone can submit + proposals for how they would best accomplish these strategic objectives + and hit those metrics and milestones. +* No more than 33% of funds can go to one entity for development purposes. + This enforces broad decentralization and encourages the ecosystem to + identify new participants. + +*How are they held accountable for having the correct strategy?* + +* Elections every two years from the community. +* All decisions and finances are audited by a third-party audit firm. +* There is an annual meeting of all stakeholders (perhaps at Zcon?) for + feedback, Q and A of the board, and a walk through of what has been + accomplished in the last six months and what the proposals are for the + next six months for feedback. The other six-month cadence meeting for + the Strategic Council to present its plans and receive feedback can be + virtual. + +*4. Who executes?* + +* Individuals, teams, or companies from anywhere can submit a proposal that + aligns with the strategy (or doesn’t), a budget for what they want to do, + and their success criteria on a scale of 1-10 (see below). +* Executing Entities can submit plans that may take longer than 6 months + to complete as the reality of hiring and funding employees may dictate + longer term financing commitment. The Strategic Committee should have + discretion to allow for these sorts of investments but should require + intermediate milestones and grading on the 6-month time horizon as well. +* Companies that have sustainable business models and can support or + subsidize engineers to work on Zcash or that have adjacent businesses + that would benefit from investment in this technology should be encouraged + to participate, i.e. the way Square is supporting Bitcoin we should have + companies supporting Zcash. +* Ideally the board also encourages non-technical execution such as education, + video series, regulatory progress, etc. + +*5. How are they held accountable to excellent execution?* + +* At the end of six months all proposals are graded 1-10. Each team would + pre-agree to what would would result in a 0, 3, 7, 10/10 and then they + can move it up or down a little once results are due in 6 months. If they + pre-agreed to some definition of results that is a 3 and then tried to + give themselves an 8, it would look fishy and could impact future funding. +* The Strategic Council should target an average score of 7/10 for that + six months across all Executors. If we score too high, we are not being + ambitious enough in our goals. If we score too low, we were trying to do + too much or had a fundamental misunderstanding of our goals. +* Over time the Strategic Council decides who gets funds so under-performers + will be culled. Thus Executors are held accountable by the board and the + board is held accountable by the community. + +Issues & Further Discussion +=========================== + +*Raised objections, issues, and open questions:* + +* How might we create a process to amending this process? We may want 4/5 + of the Strategic Council to approve changes or 2/3 of ZEC holders to be + able to amend the Strategic Council’s charter. +* How do we recall or impeach the members of the Strategic Committee prior + to the end of their term if necessary? +* I’m sure there are many other points of ambiguity and improvements we + could make. There may even be critical design flaws or failures in this + system. Feedback is appreciated. + +References / Background +======================= + +.. role:: editor-note + +* https://www.zfnd.org/blog/multisig-governance/ +* https://forum.zcashcommunity.com/t/placeholder-considerations-resources-governance-and-legitimacy-in-nu4/34045 +* https://electriccoin.co/blog/ecc-initial-assessment-of-community-proposals/ +* https://medium.com/@socrates1024/here-are-a-couple-of-points-on-framing-the-discussion-of-a-potential-new-dev-fund-in-zcash-c13bcbf4ed5b +* https://www.grin-forum.org/t/solved-early-disappointments/3682 +* https://www.electriccapital.com/ (for disclosure of investments we’ve made). + +:editor-note:`these should be made into inline references.` + +Change Log +========== + +* 2019-08-27 Initial draft - thanks to @jubos, @puntium, @zooko, @joshs, and + Jack Gavigan for helping me more clearly articulating my ideas and helping + get them formatted properly for a ZIP. These ideas are solely mine and were + not influenced by any of these individuals. +* 2019-08-28 Updated to be in ZIP format. +* 2019-09-15 Finally turned in to a pull request on GitHub and incorporated + feedback from @daira and @str4d. diff --git a/zip-1010.html b/zip-1010.html new file mode 100644 index 00000000..676d666d --- /dev/null +++ b/zip-1010.html @@ -0,0 +1,216 @@ + + + + ZIP 1010: Compromise Dev Fund Proposal With Diverse Funding Streams + + + +
    +
    ZIP: 1010
    +Title: Compromise Dev Fund Proposal With Diverse Funding Streams
    +Owner: Josh Cincinnati <josh@zfnd.org>
    +Credits: Matt Luongo
    +         Eran Tromer
    +         Andrew Miller
    +         mistfpga
    +         lex-node
    +         and many others
    +Status: Draft
    +Category: Consensus
    +Created: 2019-08-31
    +License: MIT
    +Discussions-To: <https://forum.zcashcommunity.com/t/a-grand-compromise-synthesis-zip-proposal/34812/>
    +
    +

    Terminology

    +

    The key words "MUST", "MUST NOT", "SHOULD", and "SHOULD NOT" 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

    +
    +
    +

    Abstract

    +

    I try to put the best pieces of various proposals together. A 20% of the block reward for a 4-year development fund that disburses to a trust controlled by both the Electric Coin Company (ECC) and Zcash Foundation (ZF), but with stringent controls on how funds may be allocated. It sidesteps code complexity in implementation by off-loading disbursements to a legal trust; funds the ECC/ZF; ECC stays a for-profit with restrictions; funds external parties through ZF Grants; all while carving out a limited-scoped opportunity for extending governance to more groups than the ECC/ZF.

    +
    +
    +

    Motivation and Requirements

    +

    Zcash won't thrive without a dev fund. I wish this wasn't true (I really do), and for the longest time I was against the idea. But I've come to fear the alternative without one; I fear the privacy technology pioneered by Zcash may never reach its true potential — not just for our community, but for others interested in novel approaches to private money.

    +

    The Foundation, ECC, and broader community has offered many suggestions and guidelines for a potential dev fund, below is my attempt at synthesizing them into a compromise that's greater than the sum of its parts:

    +
      +
    • The ECC and Zcash Foundation shouldn't get a blank check; accountability is a prerequisite for any disbursement, based on the Foundation's statement 3 and other proposals being suggested.
    • +
    • It's possible for the ECC to remain a for-profit, but with (legally enforced) restrictions that ensure accountability and add teeth to their claim that no early investors are enriched by a new dev fund / no new investors are beneficiaries.
    • +
    • A nontrivial portion of the funds should be directed to users/organisations outside of the ECC/Zcash Foundation, and the ECC/Zcash Foundation should be in the minority in deciding how these funds are disbursed (e.g. through some process with broader input beyond ECC/Zcash Foundation employees, like a more constrained version of Placeholder or Blocktower's "third party" proposals).
    • +
    • The actual code changes for the NU4 network upgrade should be minimal and the "governance complexity" should be offloaded to legal agreements, not engineering hours. The dev fund would be deposited into a single address for the fund (ideally shielded with a viewing key) controlled through a trust (originally Andrew Miller’s idea), disbursed quarterly based on the accountability requirements and shielded adoption metrics described below. Trustees will be mutually agreed upon by the ECC and Zcash Foundation, and the Zcash Foundation will bear the cost of operating the trust.
    • +
    • The gross amount of the dev fund should still be 20% of the block reward, and it should end in 4 years. (Unless we go through another process like this one to extend it, though I personally hope we don’t.)
    • +
    +

    for security reasons, it may be useful to refine the "single address" to a list of rolling addresses as described in section 7.8 of the current protocol specification. Other references to a "single address" in this document have not been changed.

    +

    Please note: a previous version of this proposal included a portion of the funds being tied to shielded adoption, based on ideas brought forward by Eran Tromer in 4. After many discussions I came to worry about the gameability of the metric and decided to drop it entirely.

    +
    +
    +

    Specification

    +

    Upon the NU4 network activation, 20% of the mining reward (post-Blossom / post-halvening = 0.625 ZEC per block) MUST go to a single shielded address with a viewing key widely distributed and known to the community and controlled by a trust established by the ECC and Zcash Foundation. If the trust and associated address aren't established by the NU4 activation deadline, then there MUST NOT be any change to the mining reward. Every quarter-year (105,000 blocks at the post-Blossom rate), until 4 years after NU4 activation (1,680,000 blocks at the post-Blossom rate), the trust SHOULD disburse funds the following way, requiring a public report with every disbursement:

    +
      +
    • 30% of the fund to the ECC, if they meet the accountability requirements set by the trust/described below;
    • +
    • 30% of the fund to the Zcash Foundation, if they meet the accountability requirements set by the trust/described below;
    • +
    • 40% of the fund to the Zcash Foundation as a RESTRICTED donation 5 purely for disbursement through ZF Grants 6, with additional restrictions and stipulations described below.
    • +
    +

    When this proposal was written it was expected that NU4 activation would correspond exactly to the first (October 2019) halvening. Since that may not be the case, I have resolved a potential ambiguity in the original wording by specifying that the trust disburses funds for 4 years, rather than that it disburses funds until the second (October 2020) halvening.

    +
    +

    Example disbursements by the trust for a hypothetical 105000-block period

    +

    0.625 ZEC * 105000 = 65625 ZEC accrued in the trust every quarter. If both the ECC and Zcash Foundation met the accountability requirements set by the trust, then disbursements would look like this:

    +
      +
    • 19687.5 ZEC to the ECC for meeting accountability requirements.
    • +
    • 19687.5 ZEC to the Zcash Foundation for meeting accountability requirements.
    • +
    • 26250 ZEC to ZF Grants to be disbursed to external individuals and organizations (via the Zcash Foundation as a restricted donation, but determined by an independent body to both organizations).
    • +
    +

    This example assumes no change to target block spacing.

    +
    +
    +

    The trust's accountability requirements

    +

    Here I'm borrowing from the Foundation's guidance 3 but adding some stipulations to cement the Foundation's independence, prevent the Foundation from hoarding its endowment, and handle the ECC as a for-profit. Before disbursing funds each quarter, the trust MUST validate that both the ECC and Zcash Foundation:

    +
      +
    • Published quarterly technical roadmap reports and financial reports, detailing spending levels/burn rate and cash/ZEC on hand;
    • +
    • (if the first disbursement in a calendar year) Published a yearly review of organization performance, along the lines of the Zcash Foundation's "State of the Foundation" report 7.
    • +
    +

    For the Zcash Foundation, the trust MUST further require:

    +
      +
    • No board member may have an interest in the ECC (current board members with an interest would need to divest of their ECC holdings prior to the beginning of this dev fund or leave the board);
    • +
    • Excluding money restricted for ZF Grants, the Foundation's total assets MUST stay below $100mm (if its assets ever exceeded this amount from a disbursement, the trust could direct the funds toward an additional restricted ZF Grants donation).
    • +
    +

    Additionally, for the ECC, the trust MUST validate the following before each disbursement:

    +
      +
    • (if the first disbursement in a fiscal year) The ECC published yearly audited financial statements at the same level of detail as a public company (to mirror the Foundation's Form 990 requirement as 501(c)(3));
    • +
    • No outside investment was received while they are obligatory recipients of this dev fund;
    • +
    • No portion of the dev fund went to dividends, profit-sharing, or share/equity buybacks while they are obligatory recipients of this dev fund;
    • +
    • No dilution of ECC's equity except in the case of options/RSUs for new/existing employees while they are obligatory recipients of this dev fund;
    • +
    • There's no change-of-control (majority control changes) at the ECC while they are obligatory recipients of this dev fund;
    • +
    +

    The ECC MUST share necessary information with the trust to ascertain no violations of the above, but the information itself (i.e. cap table and detailed financials) SHOULD remain private between the ECC and the trustees unless there is a violation that is not cured.

    +
    +
    +

    What happens in the case of a violation

    +

    The violating party has 30 days to attempt to cure the violation (if it's possible). If they cannot, future funds MUST be redirected to ZF Grants via a restricted donation to the Zcash Foundation. (That is, not usable by either the Zcash Foundation or ECC, more on that below.)

    +
    +
    +

    The ZF Grants portion

    +

    A portion of the dev fund goes to the Foundation but with the express (and restricted) purpose of being distributed via ZF Grants (a restriction that MUST be legally enforced by the trust). The Foundation would continue to administer ZF Grants and distribute funds, but it SHOULD NOT decide where those funds go and would not allowed to be recipients of these funds; instead, the trust MUST demand that the ZF Grants process include broader input in the manner described below. In the discussions around the various "third party" proposals, some have suggested a 3-of-5 approach where the ECC and Zcash Foundation are in the minority; I think that structure would work well for these funds. It's not the full dev fund so we are limiting the downside risk of selecting the "wrong" third parties, which also means we can give those third parties more voice (by making them outnumber the ECC/Zcash Foundation). The Foundation MAY also chose to fund ZF Grants beyond the restricted donations from the trust, but doing so would be at their discretion.

    +

    Thanks to the discussion on Matt Luongo's proposal there's a good blueprint for how this group would work. I'm borrowing some comments I made on Matt's proposal thread 8 and modifying them to apply to a ZF Grants-specific Grant Review Committee, rather than the Foundation's board.

    +

    The ZF Grant Review Committee would be compromised of five members, voted on in the following manner:

    +
      +
    • 1 seat for the ECC. Though the appointed member may change, they retain power to choose the seat for 4 years.
    • +
    • 1 seat for the Zcash Foundation. Though the appointed member may change, they retain power to choose the seat for 4 years.
    • +
    • 2 seats voted on by ZEC holders directly, elected every year. There would be open elections held by the Foundation similar to the 2018 advisory process which resulted in Ian and Amber’s election, except using a ZEC coin-staked vote directly.
    • +
    • 1 seat held by a technical member, elected every year. This member would be selected by the combined group (2 coin-staked seats + ZF seat + ECC seat) with an express focus on ability to evaluate technical proposals.
    • +
    +

    The group would meet biweekly to make funding decisions, the results of which will be made public on ZF Grants. Taking a note from Eran Tromer's recent proposal, the group would have a goal of making at least two "Large Grants" every year. A "Large Grant" would have an expected scope of six months and 1/4th to 1/3rd of the total ZF Grants yearly budget, with the goal of getting more dedicated external teams involved.

    +
    +
    +
    +

    Rationale

    +

    There are scores of great ideas on the forums, and I took the (subjective, mind you) best parts of each into a proposal that hopefully meets the standards of the ECC, the Zcash Foundation, and the broader community.

    +
    +

    A word on the enigmatic "third party" floating around

    +

    With all due respect to the proposers behind some variant of a "2-of-3 multisig" decision-making process for all disbursement decisions: I think this is a bad idea. To quote a previous forum post of mine:

    +
    +

    ...2-of-3 multisig [is] better if we find the right third party. That in and of itself requires an additional process/mutual agreement between the three parties (which is much more difficult than a bilateral agreement), and as I’ve mentioned before in presentations in the past, 2-of-2 with known entities dedicated to Zcash is better than jumping straight to 2-of-3 with a third party hastily decided or staying with 1-of-1 entity trademarks and software development processes.

    +

    As for why 2-of-2 is still strictly better than 1-of-1: in the case of cryptocurrency governance, I believe that inaction in the case of disagreement is a better outcome than one party unilaterally exercising power.

    +
    +

    More to the point, I worry that the "third party" in question is being idolized into some Platonic ideal, and in reality either the ECC or the Zcash Foundation would spend a great deal of their time currying favor in either the process or selection of the party in question in the limited time between now and that party's selection. Given that the Zcash Foundation is charged with representing community interests, I'm not sure why another community-focused representative would really make sense from the ECC's perspective — they'd be constantly outvoted if interests clashed, so from a balance of power perspective I'm not sure why the ECC would find that tenable. And I'm not sure the community would want the "third party" to be another profit-generating enterprise, like a VC or another startup, which would tip power another way.

    +

    The crux of this proposal still centers around the idea that the Zcash Foundation and ECC share responsibility for protocol development, which is now bolstered by the 2-of-2 agreement on the trademark. It assumes and expects that both continue developing consensus-compatible node software that interacts with the Zcash network. But it mandates accountability for disbursement of funds to the ECC/Zcash Foundation, and expands outside stakeholder input on funds that wouldn't be earmarked for the ECC/Zcash Foundation (similar to Placeholder's earlier version of their proposal and Matt Luongo's current proposal), while it doesn’t preclude the possibility of migrating to broader "2-of-3" later on future governance decisions.

    +
    +
    +

    Why a trust?

    +

    The main reason: reducing complexity creep in consensus code. Rather than try to incorporate some complex mechanism for dev fund disbursements on-chain, we can meet the NU4 with the simplest possible code-change and spend more time ironing out the details of the trust "off-chain." Since both the ECC and the Zcash Foundation are based in the US, using a trust with well-specified criteria for disbursements is a reasonable path. This also fits in nicely with lex-node's proposal 9 for legal covenants on funding.

    +
    +
    +
    +

    Security and Privacy Considerations

    +

    The biggest issue is custody of the funds under the trust's control, but I suspect this can be managed with a partnership with a custody partner. There's also the issue that non-public information would need to be verified and validated by the trust, but I view this as a net positive for the community ("transparency for organizations, privacy for individuals").

    +
    +
    +

    Reference implementation

    +

    TBD, but it should be relatively simple to code in both zebra and zcashd.

    +
    +
    +

    Issues and further discussion

    +
      +
    • What are the tax implications for setting up the trust?
    • +
    • Are the amounts reasonable? Should the dev fund be less than 20% in aggregate?
    • +
    • Should this or other proposals seek to change the ECC and Zcash Foundation's board/makeup, or should we keep those organizations running as they are and sandbox a new process to a specific disbursement of the dev fund? (This proposal assumes the latter via ZF Grants.)
    • +
    +
    +
    +

    References

    + + + + + + + +
    1Key words for use in RFCs to Indicate Requirement Levels
    + + + + + + + +
    2ZIP 200: Network Upgrade Mechanism
    + + + + + + + +
    3Zcash Foundation Guidance on Dev Fund Proposals. Zcash Foundation blog, August 6, 2019.
    + + + + + + + +
    4Comment on a post “How to hire ECC” in the Zcash Community Forum. Eran Tromer, August 11, 2019.
    + + + + + + + +
    5“What Are Restricted Funds?” Foundation Group, last modified December 7, 2018.
    + + + + + + + +
    6ZF Grants — Funding for Zcash ecosystem projects
    + + + + + + + +
    7The State of the Zcash Foundation in 2019. Zcash Foundation blog, January 31, 2019.
    + + + + + + + +
    8Comment on a post “Decentralizing the Dev Fee” in the Zcash Community Forum. Josh Cincinnati, October 27, 2019.
    + + + + + + + +
    9ZIP 1007: Enforce Development Fund Commitments with a Legal Charter
    +
    +
    + + \ No newline at end of file diff --git a/zip-1010.rst b/zip-1010.rst new file mode 100644 index 00000000..b50849c7 --- /dev/null +++ b/zip-1010.rst @@ -0,0 +1,353 @@ +:: + + ZIP: 1010 + Title: Compromise Dev Fund Proposal With Diverse Funding Streams + Owner: Josh Cincinnati + Credits: Matt Luongo + Eran Tromer + Andrew Miller + mistfpga + lex-node + and many others + Status: Draft + Category: Consensus + Created: 2019-08-31 + License: MIT + Discussions-To: + + +Terminology +=========== + +The key words "MUST", "MUST NOT", "SHOULD", and "SHOULD NOT" in this document +are to be interpreted as described in RFC 2119. [#RFC2119]_ + +The term "network upgrade" in this document is to be interpreted as described +in ZIP 200. [#zip-0200]_ + + +Abstract +======== + +I try to put the best pieces of various proposals together. A 20% of the block +reward for a 4-year development fund that disburses to a trust controlled by +both the Electric Coin Company (ECC) and Zcash Foundation (ZF), but with +stringent controls on how funds may be allocated. It sidesteps code complexity +in implementation by off-loading disbursements to a legal trust; funds the +ECC/ZF; ECC stays a for-profit with restrictions; funds external parties +through ZF Grants; all while carving out a limited-scoped opportunity for +extending governance to more groups than the ECC/ZF. + + +Motivation and Requirements +=========================== + +.. role:: editor-note + +Zcash won't thrive without a dev fund. I wish this wasn't true (I really do), +and for the longest time I was against the idea. But I've come to fear the +alternative without one; I fear the privacy technology pioneered by Zcash may +never reach its true potential — not just for our community, but for others +interested in novel approaches to private money. + +The Foundation, ECC, and broader community has offered many suggestions and +guidelines for a potential dev fund, below is my attempt at synthesizing them +into a compromise that's greater than the sum of its parts: + +* The ECC and Zcash Foundation shouldn't get a blank check; accountability is + a prerequisite for any disbursement, based on the Foundation's statement + [#zfnd-guidance]_ and other proposals being suggested. +* It's possible for the ECC to remain a for-profit, but with (legally + enforced) restrictions that ensure accountability and add teeth to their + claim that no early investors are enriched by a new dev fund / no new + investors are beneficiaries. +* A nontrivial portion of the funds should be directed to users/organisations + outside of the ECC/Zcash Foundation, and the ECC/Zcash Foundation should be + in the minority in deciding how these funds are disbursed (e.g. through some + process with broader input beyond ECC/Zcash Foundation employees, like a + more constrained version of Placeholder or Blocktower's "third party" + proposals). +* The actual code changes for the NU4 network upgrade should be minimal and + the "governance complexity" should be offloaded to legal agreements, not + engineering hours. The dev fund would be deposited into a single address + for the fund (ideally shielded with a viewing key) controlled through a + trust (originally Andrew Miller’s idea), disbursed quarterly based on the + accountability requirements and shielded adoption metrics described below. + Trustees will be mutually agreed upon by the ECC and Zcash Foundation, and + the Zcash Foundation will bear the cost of operating the trust. +* The gross amount of the dev fund should still be 20% of the block reward, + and it should end in 4 years. (Unless we go through another process like + this one to extend it, though I personally hope we don’t.) + +:editor-note:`for security reasons, it may be useful to refine the +"single address" to a list of rolling addresses as described in +section 7.8 of the current protocol specification. Other references to +a "single address" in this document have not been changed.` + +*Please note: a previous version of this proposal included a portion of the +funds being tied to shielded adoption, based on ideas brought forward by +Eran Tromer in* [#tromer-comment]_. *After many discussions I came to worry +about the gameability of the metric and decided to drop it entirely.* + + +Specification +============= + +Upon the NU4 network activation, 20% of the mining reward (post-Blossom / +post-halvening = 0.625 ZEC per block) MUST go to a single shielded address +with a viewing key widely distributed and known to the community and +controlled by a trust established by the ECC and Zcash Foundation. If the +trust and associated address aren't established by the NU4 activation +deadline, then there MUST NOT be any change to the mining reward. Every +quarter-year (105,000 blocks at the post-Blossom rate), until 4 years after +NU4 activation (1,680,000 blocks at the post-Blossom rate), the trust SHOULD +disburse funds the following way, requiring a public report with every +disbursement: + +* 30% of the fund to the ECC, if they meet the accountability requirements + set by the trust/described below; + +* 30% of the fund to the Zcash Foundation, if they meet the accountability + requirements set by the trust/described below; + +* 40% of the fund to the Zcash Foundation as a RESTRICTED donation + [#restricted-funds]_ purely for disbursement through ZF Grants + [#zfnd-grants]_, with additional restrictions and stipulations described + below. + +:editor-note:`When this proposal was written it was expected that NU4 +activation would correspond exactly to the first (October 2019) halvening. +Since that may not be the case, I have resolved a potential ambiguity in +the original wording by specifying that the trust disburses funds for +4 years, rather than that it disburses funds until the second (October 2020) +halvening.` + +Example disbursements by the trust for a hypothetical 105000-block period +------------------------------------------------------------------------- + +0.625 ZEC * 105000 = 65625 ZEC accrued in the trust every quarter. If both +the ECC and Zcash Foundation met the accountability requirements set by the +trust, then disbursements would look like this: + +* 19687.5 ZEC to the ECC for meeting accountability requirements. + +* 19687.5 ZEC to the Zcash Foundation for meeting accountability requirements. + +* 26250 ZEC to ZF Grants to be disbursed to external individuals and + organizations (via the Zcash Foundation as a restricted donation, but + determined by an independent body to both organizations). + +This example assumes no change to target block spacing. + +The trust's accountability requirements +--------------------------------------- + +Here I'm borrowing from the Foundation's guidance [#zfnd-guidance]_ but +adding some stipulations to cement the Foundation's independence, prevent +the Foundation from hoarding its endowment, and handle the ECC as a +for-profit. Before disbursing funds each quarter, the trust MUST validate +that both the ECC and Zcash Foundation: + +* Published quarterly technical roadmap reports and financial reports, + detailing spending levels/burn rate and cash/ZEC on hand; + +* (if the first disbursement in a calendar year) Published a yearly + review of organization performance, along the lines of the Zcash + Foundation's "State of the Foundation" report [#zfnd-state]_. + +For the Zcash Foundation, the trust MUST further require: + +* No board member may have an interest in the ECC (current board members + with an interest would need to divest of their ECC holdings prior to + the beginning of this dev fund or leave the board); + +* Excluding money restricted for ZF Grants, the Foundation's total assets + MUST stay below $100mm (if its assets ever exceeded this amount from a + disbursement, the trust could direct the funds toward an additional + restricted ZF Grants donation). + +Additionally, for the ECC, the trust MUST validate the following before +each disbursement: + +* (if the first disbursement in a fiscal year) The ECC published yearly + audited financial statements at the same level of detail as a public + company (to mirror the Foundation's Form 990 requirement as 501(c)(3)); + +* No outside investment was received while they are obligatory recipients + of this dev fund; + +* No portion of the dev fund went to dividends, profit-sharing, or + share/equity buybacks while they are obligatory recipients of this dev + fund; + +* No dilution of ECC's equity except in the case of options/RSUs for + new/existing employees while they are obligatory recipients of this + dev fund; + +* There's no change-of-control (majority control changes) at the ECC + while they are obligatory recipients of this dev fund; + +The ECC MUST share necessary information with the trust to ascertain no +violations of the above, but the information itself (i.e. cap table and +detailed financials) SHOULD remain private between the ECC and the +trustees unless there is a violation that is not cured. + +What happens in the case of a violation +--------------------------------------- + +The violating party has 30 days to attempt to cure the violation (if it's +possible). If they cannot, future funds MUST be redirected to ZF Grants via +a restricted donation to the Zcash Foundation. (That is, not usable by either +the Zcash Foundation or ECC, more on that below.) + +The ZF Grants portion +--------------------- + +A portion of the dev fund goes to the Foundation but with the express (and +restricted) purpose of being distributed via ZF Grants (a restriction that +MUST be legally enforced by the trust). The Foundation would continue to +administer ZF Grants and distribute funds, but it SHOULD NOT decide where +those funds go and would not allowed to be recipients of these funds; +instead, the trust MUST demand that the ZF Grants process include broader +input in the manner described below. In the discussions around the various +"third party" proposals, some have suggested a 3-of-5 approach where the ECC +and Zcash Foundation are in the minority; I think that structure would work +well for these funds. It's not the full dev fund so we are limiting the +downside risk of selecting the "wrong" third parties, which also means we +can give those third parties more voice (by making them outnumber the +ECC/Zcash Foundation). The Foundation MAY also chose to fund ZF Grants +*beyond* the restricted donations from the trust, but doing so would be at +their discretion. + +Thanks to the discussion on Matt Luongo's proposal there's a good blueprint +for how this group would work. I'm borrowing some comments I made on Matt's +proposal thread [#acityinohio-comment]_ and modifying them to apply to a +ZF Grants-specific Grant Review Committee, rather than the Foundation's +board. + +The ZF Grant Review Committee would be compromised of five members, voted on +in the following manner: + +* 1 seat for the ECC. Though the appointed member may change, they retain + power to choose the seat for 4 years. +* 1 seat for the Zcash Foundation. Though the appointed member may change, + they retain power to choose the seat for 4 years. +* 2 seats voted on by ZEC holders directly, elected every year. There would + be open elections held by the Foundation similar to the 2018 advisory + process which resulted in Ian and Amber’s election, except using a ZEC + coin-staked vote directly. +* 1 seat held by a technical member, elected every year. This member would + be selected by the combined group (2 coin-staked seats + ZF seat + ECC + seat) with an express focus on ability to evaluate technical proposals. + +The group would meet biweekly to make funding decisions, the results of +which will be made public on ZF Grants. Taking a note from Eran Tromer's +recent proposal, the group would have a goal of making at least two +"Large Grants" every year. A "Large Grant" would have an expected scope of +six months and 1/4th to 1/3rd of the total ZF Grants yearly budget, with +the goal of getting more dedicated external teams involved. + + +Rationale +========= + +There are scores of great ideas on the forums, and I took the (subjective, +mind you) best parts of each into a proposal that hopefully meets the +standards of the ECC, the Zcash Foundation, and the broader community. + +A word on the enigmatic "third party" floating around +----------------------------------------------------- + +With all due respect to the proposers behind some variant of a "2-of-3 +multisig" decision-making process for *all* disbursement decisions: +I think this is a bad idea. To quote a previous forum post of mine: + + ...2-of-3 multisig [is] better if we find the right third party. + That in and of itself requires an additional process/mutual agreement + between the three parties (which is much more difficult than a bilateral + agreement), and as I’ve mentioned before in presentations in the past, + 2-of-2 with known entities dedicated to Zcash is better than jumping + straight to 2-of-3 with a third party hastily decided or staying with + 1-of-1 entity trademarks and software development processes. + + As for why 2-of-2 is still strictly better than 1-of-1: in the case of + cryptocurrency governance, I believe that inaction in the case of + disagreement is a better outcome than one party unilaterally exercising + power. + +More to the point, I worry that the "third party" in question is being +idolized into some Platonic ideal, and in reality either the ECC or the +Zcash Foundation would spend a great deal of their time currying favor in +either the process or selection of the party in question in the limited time +between now and that party's selection. Given that the Zcash Foundation is +charged with representing community interests, I'm not sure why another +community-focused representative would really make sense from the ECC's +perspective — they'd be constantly outvoted if interests clashed, so from +a balance of power perspective I'm not sure why the ECC would find that +tenable. And I'm not sure the community would want the "third party" to be +another profit-generating enterprise, like a VC or another startup, which +would tip power another way. + +The crux of this proposal still centers around the idea that the Zcash +Foundation and ECC share responsibility for protocol development, which +is now bolstered by the 2-of-2 agreement on the trademark. It assumes and +expects that both continue developing consensus-compatible node software +that interacts with the Zcash network. But it mandates accountability for +disbursement of funds to the ECC/Zcash Foundation, and expands outside +stakeholder input on funds that *wouldn't* be earmarked for the ECC/Zcash +Foundation (similar to Placeholder's earlier version of their proposal and +Matt Luongo's current proposal), while it doesn’t preclude the possibility +of migrating to broader "2-of-3" later on future governance decisions. + +Why a trust? +------------ + +The main reason: reducing complexity creep in consensus code. Rather than try +to incorporate some complex mechanism for dev fund disbursements on-chain, we +can meet the NU4 with the simplest possible code-change and spend more time +ironing out the details of the trust "off-chain." Since both the ECC and the +Zcash Foundation are based in the US, using a trust with well-specified +criteria for disbursements is a reasonable path. This also fits in nicely +with lex-node's proposal [#zip-1007]_ for legal covenants on funding. + + +Security and Privacy Considerations +=================================== + +The biggest issue is custody of the funds under the trust's control, but +I suspect this can be managed with a partnership with a custody partner. +There's also the issue that non-public information would need to be verified +and validated by the trust, but I view this as a net positive for the +community ("transparency for organizations, privacy for individuals"). + + +Reference implementation +======================== + +TBD, but it should be relatively simple to code in both zebra and zcashd. + + +Issues and further discussion +============================= + +* What are the tax implications for setting up the trust? +* Are the amounts reasonable? Should the dev fund be less than 20% in + aggregate? +* Should this or other proposals seek to change the ECC and Zcash + Foundation's board/makeup, or should we keep those organizations running + as they are and sandbox a new process to a specific disbursement of the + dev fund? (This proposal assumes the latter via ZF Grants.) + + +References +========== + +.. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ +.. [#zip-0200] `ZIP 200: Network Upgrade Mechanism `_ +.. [#zfnd-guidance] `Zcash Foundation Guidance on Dev Fund Proposals. Zcash Foundation blog, August 6, 2019. `_ +.. [#tromer-comment] `Comment on a post “How to hire ECC” in the Zcash Community Forum. Eran Tromer, August 11, 2019. `_ +.. [#restricted-funds] `“What Are Restricted Funds?” Foundation Group, last modified December 7, 2018. `_ +.. [#zfnd-grants] `ZF Grants — Funding for Zcash ecosystem projects `_ +.. [#zfnd-state] `The State of the Zcash Foundation in 2019. Zcash Foundation blog, January 31, 2019. `_ +.. [#acityinohio-comment] `Comment on a post “Decentralizing the Dev Fee” in the Zcash Community Forum. Josh Cincinnati, October 27, 2019. `_ +.. [#zip-1007] `ZIP 1007: Enforce Development Fund Commitments with a Legal Charter `_ diff --git a/zip-1011.html b/zip-1011.html new file mode 100644 index 00000000..9a9904f6 --- /dev/null +++ b/zip-1011.html @@ -0,0 +1,201 @@ + + + + ZIP 1011: Decentralize the Dev Fee + + + + +
    +
    ZIP: 1011
    +Title: Decentralize the Dev Fee
    +Owner: Matt Luongo <matt@thesis.co>
    +Status: Draft
    +Category: Process
    +Created: 2019-09-27
    +License: MIT
    +Discussions-To: <https://forum.zcashcommunity.com/t/decentralizing-the-dev-fee/35252>
    +
    +

    Abstract

    +

    This proposal describes a structure for Zcash governance, including funding and managing new Zcash development, decentralizing those development efforts, and resolving governance hangups between the Zcash Foundation and the Electric Coin Company.

    +

    These goals are accomplished via a 20% dev fee, enacted in NU4 and continuing for one halving period. This fee will fund a diverse group of development teams to ensure Zcash maintains best-in-class research and engineering talent while growing a robust ecosystem, funding the Zcash Foundation with 25% of the dev fee, and a newly established principal developer role with 35% of the dev fee.

    +
    +
    +

    Motivation

    +
    +

    Who am I?

    +

    My name is Matt Luongo. I'm an entrepreneur who's been full-time in the crypto space since 2014, co-founding Fold, a Bitcoin payments company, and more recently Keep, a private computation startup built on Ethereum. At Keep, we've done some work around Zcash, and our parent company, Thesis, is considering investing more heavily in Zcash development for our latest project.

    +

    I'm deeply interested in privacy tech. For me, privacy is about consent –consent to share my habits, beliefs, and preferences– and I see privacy as the inevitable next frontier in our pursuit of an economy that respects individual choice.

    +

    My perspective is as the founder of a for-profit company focused on building self-sovereign technology who wants to develop on Zcash. We work in this space ideologically, but our work isn't free; attracting and growing talent requires funding.

    +

    If you're interested in more on my background, I've introduced myself more properly on the forum.

    +
    +
    +

    What's this about?

    +

    Since Zcon1, I've been looking to fund work to build an Ethereum / Zcash bridge. I've spoken to the ECC, the Zcash Foundation, and a number of early Zcash community members on how best to move forward with this project, and in the process I've learned a lot about how the community works and dev governance has been structured thus far.

    +

    Inevitably, I've become interested in the community's proposals for a new dev fee, and thought about how the right structure might support work like ours.

    +

    I believe the Zcash community has an opportunity to deploy a new incentive structure that will attract companies like ours to build and improve Zcash, leading to a more resilient network, stronger technology, and wider usage.

    +
    +
    +

    The Zcash narrative

    +

    We're all here to build a robust, private, decentralized currency. But in the dev fee proposals I've seen so far, the idea of a Zcash narrative that distinguishes it from the competition is absent.

    +

    Of the slew of ZIPs addressing Zcash's future, there's only been one strong narrative case — the idea that Zcash exists purely as a hedge against Bitcoin's long-term privacy failure. Put simply, Zcash is "Bitcoin, but private".

    +

    Zcash should aim higher. Bitcoin is the only coin that has successfully made a store of value argument, which I like to call "worse is better". Don't upgrade the network –the argument goes– stability is more important than solving today's problems. Bitcoin is chasing the Lindy effect, where worse is better, and the network becomes stronger every day it survives. That's great for Bitcoin. For the rest of us, though, better is better. Zcash should be better.

    +

    Zcash is known for having the best tech in the space, built by one of the best teams in the space. We should lean in to that reputation, nurturing the best research and engineering talent to take Zcash to the next level, and leveraging a Zcash dev fee as a differentiator to build the world's best private medium of exchange.

    +
    +
    +

    Principles of cryptocurrency governance

    +

    To understand Zcash governance, it's worth reviewing "default" cryptocurrency governance. Most proof-of-work chains today have three major governing roles:

    +
      +
    1. Miners validate and secure the chain. They do some work to earn a reward. Miners are the first owners of newly minted coins, and are an integral part of network upgrades.
    2. +
    3. Users buy, hold, and spend the currency. In networks like Bitcoin, they also run full nodes, strengthening network resilience by decentralizing validation.
    4. +
    5. Developers maintain clients to power and interact with the network. They typically propose network upgrades.
    6. +
    +

    On a chain like Bitcoin, any of these roles can veto a network upgrade.

    +
      +
    1. Miners can veto activating a new fork by refusing to build off blocks using new network rules, orphaning a minority effort. They can also attack any fork attempt that doesn't change
    2. +
    3. Users can veto a fork by refusing to update their full nodes, rejecting blocks as invalid — as demonstrated in the UASF movement successfully countering the SegWit2x attempt to force a Bitcoin hardfork. Users can also vote with their dollars, acting as a fork resolution of last resort via market pressure.
    4. +
    5. Developers can refuse to update client codebases to follow a fork. While this might not seem like a strong veto, in practice that means any fork will need at least one additional development team, or the agreement of existing client software developers.
    6. +
    +

    These roles together form a balance of power that makes contentious forks difficult — any change that a large swath of users disapproves of could split the chain.

    +
    +
    +

    The state of play

    +

    In Zcash, the addition of the Electric Coin Company (ECC) and the Zcash Foundation skew this balance.

    +

    Both organizations are comprised of Zcash founders, developers, researchers, and privacy proponents who have driven this ecosystem forward and represent its values. Nevertheless, their mode of operation today skews a healthy balance of power in Zcash governance.

    +

    The mechanisms of that skew are the Zcash trademark, held jointly by the Foundation and the ECC, and primary client software development, now split between the ECC and the Foundation.

    +

    In a disagreement between miners, users, and developers, the Foundation and ECC have the option of enforcing the Zcash trademark, effectively allowing them to choose a winning fork against the will of users, miners, and other developers.

    +

    In addition, the Foundation's sole maintenance of the zebrad client allows them to "soft veto" a network upgrade.

    +

    Unfortunately, the Foundation and the ECC aren't organized as arms-length entities today.

    +

    This situation poses a number of problems for new and existing Zcash users, as well as both entities.

    +
      +
    • The threat of two entangled entities overriding (or being forced to override) the will of users undermines self-sovereignty.
    • +
    • The ECC and Foundation are both put at legal risk. As entangled entities, they're remarkably similar to a single entity when trying to minimize regulatory risk.
    • +
    +
    +
    +

    The "crowding out" problem

    +

    The Zcash ecosystem, as it exists today, leaves little incentive for outside developers to participate.

    +

    Zcash development has a high learning curve.

    +
      +
    • The reference client is a fork of the Bitcoin reference implementation, building on a decade of poorly written legacy code.
    • +
    • What Zcash brings to the table involves a greater understanding of applied cryptography than most projects. SNARKs are often still referred to as "moon math", after all.
    • +
    • As the recent network-level attack demonstrates, full-stack privacy is hard.
    • +
    +

    Most outside developers need to see a clear path to longer-term funding before they can commit to the cost of that curve.

    +

    Even those developers who already have the expertise to work on this system are frustrated by the lack of longer-term funding. For evidence, look at Parity's exit from Zcash after zebrad development, or Summa's struggles to work on Zcash.

    +

    Sustainably attracting talent to Zcash is critical to maintain innovation and build resilience.

    +
    +
    +
    +

    Requirements

    +

    The first requirement is a balanced governance structure. Developers should be rewarded, without rewarding governance capture. What's best for the chain and ZEC holders should always come before commercial interests.

    +

    The second, and secondary, requirement is funding Zcash development. While the chain shouldn't be run by a commercial entity, it will need to be supported by them.

    +

    The third requirement is the support of a more resilient ecosystem by:

    +
      +
    1. Ending the "crowding out" problem by paying development teams to work on and for Zcash.
    2. +
    3. Building a dev fee management structure that's resilient to the loss, capture, or compromise of the Zcash Foundation.
    4. +
    5. Ensuring the ecosystem can survive the loss, capture, or compromise of the ECC by encouraging developer diversity and strategic input.
    6. +
    +

    Finally, avoid introducing unnecessary additional entities into the governance process.

    +
    +
    +

    Non-requirements

    +

    General on-chain governance is outside the scope of this proposal. On-chain governance is an exciting idea -- what if we had an impartial arbiter funding development? My experience with on-chain governance to date, however, leads me to believe it's still a risky direction. Zcash should focus on what it's good at –privacy– and leave proving on-chain governance models to other projects.

    +

    While this proposal attempts to outline a long-term structure for Zcash funding and governance, specifying the structure beyond the next 4 years is out of scope. Much will have changed in 4 years. Perhaps this structure will be sufficient; perhaps we'll be battling the Third Crypto War, and need to go back to the drawing table.

    +
    +
    +

    Specification

    +

    The below proposal is an effort to cleanly resolve the problems with Zcash's current governance, while

    +
      +
    • maintaining a balance of power between stakeholders;
    • +
    • removing single points of failure / control;
    • +
    • growing development and usage of Zcash;
    • +
    • and supporting the best interests of miners, users, and developers today.
    • +
    +
    +

    Decentralizing development

    +

    A few proposals have suggested the introduction of a mysterious "third entity" to resolve disagreements between the Foundation and the ECC.

    +

    I prefer a different approach, refocusing the role of the Foundation and making room for the ECC to work with a robust developer ecosystem.

    +

    In this proposal, the Foundation shall support community development through running the forum and events, gathering community sentiment, managing short-term development grants, research and development, and conducting the diligence behind the assignment and disbursement of a development fee. This development fee shall be funded by 20% of the block reward, with as much as half of the fee burned in case of extraordinary growth in the price of ZEC.

    +

    The Foundation shall receive 25% of the dev fee. If the volume-weighted average price of ZEC over the month means the foundation would receive greater than $500k that month, the Foundation shall set aside enough ZEC such that their max monthly budget is

    +
    +

    + \(\mathsf{MaxBenefit}(\mathsf{RewardDollarAmount}) = \mathsf{Min}(500000, 500000 * \sqrt{\frac{\mathsf{RewardDollarAmount}}{500000}})\) +

    +
    +

    The excess ZEC should be purpose-restricted to the Foundation grants program, ensuring the funds are earmarked to grow outside community talent and involvement.

    +

    Capping the monthly expenses of the Foundation will limit growth, while encouraging fiscal discipline.

    +

    The remaining 75% of the dev fee shall be distributed between development teams working to maintain clients.

    +
      +
    • Up to 35% of the total fee shall be reserved for the role of the "principal developer", a developer with assured long-term alignment with the project.
    • +
    • The remaining 40% of the fee, called the "outside development fee", shall be distributed between at least two development teams, chosen semi-annually by the Foundation, coinciding with network upgrades.
    • +
    +

    Prior to each network upgrade, the Foundation shall recommend a list of addresses and a total number of ZEC per block each address is meant to receive from the dev fee. The recommendation will be "ratified" by the miners as the network upgrade activates.

    +
    +
    +

    The role of dev fee recipients

    +

    Dev fee recipients are distinguished from grant recipients in the scope and timelines of their work, as well as the specificity of direction. The intent is to allow teams to focus on a core competency, while encouraging research and adjacent work.

    +

    Dev fee recipients are chosen semi-annually by the Foundation based on their ability to move Zcash forward. Recipients will typically be development teams, though "full stack" teams that can communicate well with the community, expand Zcash usage, and widely share their work should be advantaged.

    +

    Recipients shall submit quarterly plans to the community for their efforts, as well as monthly progress updates.

    +

    All work funded by the dev fee will be open source, under licenses compatible with the existing Zcash clients.

    +

    Though the Foundation shall periodically judge the efficacy of dev fee recipients, deciding on and driving roadmaps for Zcash is the role of dev fee recipients, in partnership with the community. This role is neatly balanced by users running full nodes and miners, either of which can veto a network upgrade.

    +

    While dev fee recipients are not required to work exclusively on Zcash, considering the nature of their work, recipients must guarantee they aren't obliged to the interests of competing projects.

    +
    +
    +

    The role of the principal developer

    +

    The role of the principal developer is as a "first among equals" amongst the dev fee recipients.

    +

    The principal developer shall make a number of guarantees.

    +
      +
    1. Zcash shall be their exclusive focus, submitting financials periodically to the Foundation as assurance.
    2. +
    3. They shall maintain a well-run board and employ a qualified CFO.
    4. +
    5. In addition to the existing open-source requirements, they shall agree to assign any patents relevant to Zcash to the Foundation.
    6. +
    +

    In exchange, the principal developer is granted an indefinite minimum dev fee allocation of 20%, with a maximum allocation of 35% of the total fee, as recommended annually by the Foundation.

    +

    The principal developer will have a wide remit to pursue longer-term research relevant to Zcash, though it will submit the same plans required of other recipients. The principal developer will only be recommended for removal by the Foundation in extraordinary circumstances, including reneging on the above guarantees or extreme negligence.

    +
    +
    +

    Minimum viable Foundation

    +

    To manage the dev fee and fulfill its community and diligence duties, the Foundation shall maintain a board of 5 independent members. Rather than the structure in the current bylaws, the board will consist of

    +
      +
    • 1 seat voted on periodically by ZEC holders directly.
    • +
    • 1 seat representing a newly created research advisory board, whose primary role will be technical diligence of potential recipients of the dev fee.
    • +
    • 1 seat for a member of the investment community.
    • +
    • 2 seats elected by the board, as the board is currently selected according to the bylaws. The board's discretion here means these could be selected via a community election, or via the remaining 3 seats' direct vote.
    • +
    +

    The Foundation requires a professional board. Board member selection should heavily favor candidates with existing formal public or private sector board experience.

    +

    Board seats should rotate periodically, while maintaining long enough terms and overlap for consistent governance.

    +

    Each board member should bring a unique network and set of skills to bear to increase the impact of the Foundation.

    +

    No board members shall have an ongoing commercial interest in any recipients of the dev fee.

    +

    Considering their expertise, the Foundation shall deliver a transition plan, including a board election schedule and report on the feasibility of a future coin vote process to determine a board seat.

    +
    +
    +

    The ECC as the principal developer

    +

    I propose that the ECC be considered as the initial principal developer, receiving an indefinite dev fee allocation in exchange for their exclusive focus on Zcash research and development, and assigning all patents and marks relevant to Zcash to the Foundation.

    +

    I believe this arrangement is best for the Zcash ecosystem, and with proper management of funds, should satisfy the ongoing needs of the ECC.

    +
    +
    +

    The dev call

    +

    The Foundation shall organize a bi-weekly call for all dev fee recipients and other third party developers. The call will be live-streamed for community participation, though the speaking participants will be invite only. At a minimum, a single representative from each dev fee recipient should attend.

    +

    The Foundation shall also maintain a simple chat solution for development of the protocol. While the chat logs should be publicly viewable, it need not be open to public participation.

    +
    +
    +

    Moving forward

    +

    I believe this proposal can form the basis for a new way forward for Zcash — a robust, decentralized ecosystem with fair governance. I also hope it can bring together the stakeholders in this discussion, and allow us to get back to why we're all here — to protect the world's financial privacy.

    +

    I look forward to feedback on GitHub and the Zcash forum.

    +
    +
    +
    +

    Disclosures

    +

    In the interest of transparency, I'd like to make a few professional disclosures.

    +

    I'm the largest shareholder of Thesis, the parent company and studio behind Fold and Keep. Thesis is a for-profit company that might benefit from this proposal as a dev fee recipient. While today I maintain exclusive control of Thesis, the company has taken outside investment in the past.

    +

    As far as my financial interest in Zcash, I've held a small amount of ZEC since shortly after launch. I'm in the process of building my personal ZEC position, as well as a position at Thesis.

    +
    +
    +

    Acknowledgements

    +

    Thanks to my friends and colleagues Carolyn, Laura, Josh, James, Corbin, and Antonio for early review of the text this proposal.

    +

    Thanks to my fellow dev fund ZIP authors, Avichal Garg at Electric Capital, Antoinette Marie, Josh Cincinnati, ED at the Zcash Foundation, Jacob Phillips at Autonomous Partners, Andrew Miller, Chris Burniske, Eran Tromer, and the fellows at Blocktown, each of whose ideas influenced this proposal. And of course, thanks to Sonya Mann and the Foundation for coordinating discussions around these different proposals.

    +

    Outside ongoing discussions in the forum and with other ZIP authors, I've spoken with a number of prominent community members while developing this proposal, though none were provided early access to the text of the proposal. I appreciated the thoughtful discussions with Josh Cincinnati, Zooko Wilcox, Josh Swihart, Ian Miers, and others.

    +
    +
    + + \ No newline at end of file diff --git a/zip-1011.rst b/zip-1011.rst new file mode 100644 index 00000000..7615dee1 --- /dev/null +++ b/zip-1011.rst @@ -0,0 +1,467 @@ +:: + + ZIP: 1011 + Title: Decentralize the Dev Fee + Owner: Matt Luongo + Status: Draft + Category: Process + Created: 2019-09-27 + License: MIT + Discussions-To: + + +Abstract +======== + +This proposal describes a structure for Zcash governance, including funding +and managing new Zcash development, decentralizing those development efforts, +and resolving governance hangups between the Zcash Foundation and the Electric +Coin Company. + +These goals are accomplished via a 20% dev fee, enacted in NU4 and continuing +for one halving period. This fee will fund a diverse group of development +teams to ensure Zcash maintains best-in-class research and engineering talent +while growing a robust ecosystem, funding the Zcash Foundation with 25% of +the dev fee, and a newly established principal developer role with 35% of the +dev fee. + + +Motivation +========== + +Who am I? +--------- + +My name is Matt Luongo. I'm an entrepreneur who's been full-time in the crypto +space since 2014, co-founding Fold, a Bitcoin payments company, and more +recently Keep, a private computation startup built on Ethereum. At Keep, we've +done some `work around Zcash `_, +and our parent company, `Thesis`_, is considering investing more heavily in +Zcash development for our latest project. + +I'm deeply interested in privacy tech. For me, privacy is about consent +–consent to share my habits, beliefs, and preferences– and I see privacy as +the inevitable next frontier in our pursuit of an economy that respects +individual choice. + +My perspective is as the founder of a for-profit company focused on building +self-sovereign technology who wants to develop on Zcash. We work in this space +ideologically, but our work isn't free; attracting and growing talent requires +funding. + +If you're interested in more on my background, I've introduced myself more +`properly on the forum +`_. + +What's this about? +------------------ + +Since Zcon1, I've been looking to fund work to build an Ethereum / Zcash +bridge. I've spoken to the ECC, the Zcash Foundation, and a number of early +Zcash community members on how best to move forward with this project, and in +the process I've learned a lot about how the community works and dev +governance has been structured thus far. + +Inevitably, I've become interested in the community's proposals for a new dev +fee, and thought about how the right structure might support work like ours. + +I believe the Zcash community has an opportunity to deploy a new incentive +structure that will attract companies like ours to build and improve Zcash, +leading to a more resilient network, stronger technology, and wider usage. + +The Zcash narrative +------------------- + +We're all here to build a robust, private, decentralized currency. But in the +dev fee proposals I've seen so far, the idea of a Zcash narrative that +distinguishes it from the competition is absent. + +Of the slew of ZIPs addressing Zcash's future, there's only been one strong +narrative case — the idea that Zcash exists purely as a hedge against Bitcoin's +long-term privacy failure. Put simply, Zcash is "Bitcoin, but private". + +Zcash should aim higher. Bitcoin is the only coin that has successfully made a +store of value argument, which I like to call "worse is better". Don't upgrade +the network –the argument goes– stability is more important than solving +today's problems. Bitcoin is chasing the `Lindy effect +`_, where worse is better, and the +network becomes stronger every day it survives. That's great for Bitcoin. +For the rest of us, though, better is better. Zcash *should be better*. + +Zcash is known for having the best tech in the space, built by one of the best +teams in the space. We should lean in to that reputation, nurturing the best +research and engineering talent to take Zcash to the next level, and +leveraging a Zcash dev fee as a differentiator to build the world's best +private medium of exchange. + +Principles of cryptocurrency governance +--------------------------------------- + +To understand Zcash governance, it's worth reviewing "default" cryptocurrency +governance. Most proof-of-work chains today have three major governing roles: + +1. Miners validate and secure the chain. They do some work to earn a reward. + Miners are the first owners of newly minted coins, and are an integral part + of network upgrades. +2. Users buy, hold, and spend the currency. In networks like Bitcoin, they + also run full nodes, strengthening network resilience by decentralizing + validation. +3. Developers maintain clients to power and interact with the network. They + typically propose network upgrades. + +On a chain like Bitcoin, any of these roles can veto a network upgrade. + +1. Miners can veto activating a new fork by refusing to build off blocks using + new network rules, orphaning a minority effort. They can also attack any + fork attempt that doesn't change +2. Users can veto a fork by refusing to update their full nodes, rejecting + blocks as invalid — as demonstrated in the UASF movement successfully + countering the SegWit2x attempt to force a Bitcoin hardfork. Users can also + vote with their dollars, acting as a fork resolution of last resort via + market pressure. +3. Developers can refuse to update client codebases to follow a fork. While + this might not seem like a strong veto, in practice that means any fork + will need at least one additional development team, or the agreement of + existing client software developers. + +These roles together form a balance of power that makes contentious forks +difficult — any change that a large swath of users disapproves of could split +the chain. + +The state of play +----------------- + +In Zcash, the addition of the Electric Coin Company (ECC) and the Zcash +Foundation skew this balance. + +Both organizations are comprised of Zcash founders, developers, researchers, +and privacy proponents who have driven this ecosystem forward and represent +its values. Nevertheless, their mode of operation today skews a healthy +balance of power in Zcash governance. + +The mechanisms of that skew are the Zcash trademark, held jointly by the +Foundation and the ECC, and primary client software development, now split +between the ECC and the Foundation. + +In a disagreement between miners, users, and developers, the Foundation and +ECC have the option of enforcing the Zcash trademark, effectively allowing +them to choose a winning fork against the will of users, miners, and other +developers. + +In addition, the Foundation's sole maintenance of the ``zebrad`` client +allows them to "soft veto" a network upgrade. + +Unfortunately, the Foundation and the ECC aren't organized as arms-length +entities today. + +This situation poses a number of problems for new and existing Zcash users, +as well as both entities. + +* The threat of two entangled entities overriding (or being forced to + override) the will of users undermines self-sovereignty. +* The ECC and Foundation are both put at legal risk. As entangled entities, + they're remarkably similar to a single entity when trying to minimize + regulatory risk. + +The "crowding out" problem +-------------------------- + +The Zcash ecosystem, as it exists today, leaves little incentive for outside +developers to participate. + +Zcash development has a high learning curve. + +* The reference client is a fork of the Bitcoin reference implementation, + building on a decade of poorly written legacy code. +* What Zcash brings to the table involves a greater understanding of applied + cryptography than most projects. SNARKs are often still referred to as + "moon math", after all. +* As the recent network-level attack demonstrates, full-stack privacy is hard. + +Most outside developers need to see a clear path to longer-term funding before +they can commit to the cost of that curve. + +Even those developers who already have the expertise to work on this system +are frustrated by the lack of longer-term funding. For evidence, look at +Parity's exit from Zcash after ``zebrad`` development, or Summa's struggles +to work on Zcash. + +Sustainably attracting talent to Zcash is critical to maintain innovation and +build resilience. + + +Requirements +============ + +The first requirement is a balanced governance structure. Developers should be +rewarded, without rewarding governance capture. What's best for the chain and +ZEC holders should always come before commercial interests. + +The second, and secondary, requirement is funding Zcash development. While the +chain shouldn't be run by a commercial entity, it will need to be supported by +them. + +The third requirement is the support of a more resilient ecosystem by: + +1. Ending the "crowding out" problem by paying development teams to work on + and for Zcash. +2. Building a dev fee management structure that's resilient to the loss, + capture, or compromise of the Zcash Foundation. +3. Ensuring the ecosystem can survive the loss, capture, or compromise of the + ECC by encouraging developer diversity and strategic input. + +Finally, avoid introducing unnecessary additional entities into the governance +process. + + +Non-requirements +================ + +General on-chain governance is outside the scope of this proposal. On-chain +governance is an exciting idea -- what if we had an impartial arbiter funding +development? My experience with on-chain governance to date, however, leads +me to believe it's still a risky direction. Zcash should focus on what it's +good at –privacy– and leave proving on-chain governance models to other +projects. + +While this proposal attempts to outline a long-term structure for Zcash +funding and governance, specifying the structure beyond the next 4 years is +out of scope. Much will have changed in 4 years. Perhaps this structure will +be sufficient; perhaps we'll be battling the Third Crypto War, and need to go +back to the drawing table. + + +Specification +============= + +The below proposal is an effort to cleanly resolve the problems with Zcash's +current governance, while + +* maintaining a balance of power between stakeholders; +* removing single points of failure / control; +* growing development and usage of Zcash; +* and supporting the best interests of miners, users, and developers *today*. + +Decentralizing development +-------------------------- + +A few proposals have suggested the introduction of a mysterious "third entity" +to resolve disagreements between the Foundation and the ECC. + +I prefer a different approach, refocusing the role of the Foundation and +making room for the ECC to work with a robust developer ecosystem. + +In this proposal, the Foundation shall support community development through +running the forum and events, gathering community sentiment, managing +short-term development grants, research and development, and conducting the +diligence behind the assignment and disbursement of a development fee. This +development fee shall be funded by 20% of the block reward, with as much as +half of the fee burned in case of extraordinary growth in the price of ZEC. + +The Foundation shall receive 25% of the dev fee. If the volume-weighted +average price of ZEC over the month means the foundation would receive greater +than $500k that month, the Foundation shall set aside enough ZEC such that +their max monthly budget is + + :math:`\mathsf{MaxBenefit}(\mathsf{RewardDollarAmount}) = \mathsf{Min}(500000, 500000 * \sqrt{\frac{\mathsf{RewardDollarAmount}}{500000}})` + +The excess ZEC should be purpose-restricted to the Foundation grants program, +ensuring the funds are earmarked to grow outside community talent and +involvement. + +Capping the monthly expenses of the Foundation will limit growth, while +encouraging fiscal discipline. + +The remaining 75% of the dev fee shall be distributed between development +teams working to maintain clients. + +* Up to 35% of the total fee shall be reserved for the role of the "principal + developer", a developer with assured long-term alignment with the project. +* The remaining 40% of the fee, called the "outside development fee", shall + be distributed between at least two development teams, chosen semi-annually + by the Foundation, coinciding with network upgrades. + +Prior to each network upgrade, the Foundation shall recommend a list of +addresses and a total number of ZEC per block each address is meant to receive +from the dev fee. The recommendation will be "ratified" by the miners as the +network upgrade activates. + +The role of dev fee recipients +------------------------------ + +Dev fee recipients are distinguished from grant recipients in the scope and +timelines of their work, as well as the specificity of direction. The intent +is to allow teams to focus on a core competency, while encouraging research +and adjacent work. + +Dev fee recipients are chosen semi-annually by the Foundation based on their +ability to move Zcash forward. Recipients will typically be development teams, +though "full stack" teams that can communicate well with the community, expand +Zcash usage, and widely share their work should be advantaged. + +Recipients shall submit quarterly plans to the community for their efforts, as +well as monthly progress updates. + +All work funded by the dev fee will be open source, under licenses compatible +with the existing Zcash clients. + +Though the Foundation shall periodically judge the efficacy of dev fee +recipients, deciding on and driving roadmaps for Zcash is the role of dev fee +recipients, in partnership with the community. This role is neatly balanced +by users running full nodes and miners, either of which can veto a network +upgrade. + +While dev fee recipients are not required to work exclusively on Zcash, +considering the nature of their work, recipients must guarantee they aren't +obliged to the interests of competing projects. + +The role of the principal developer +----------------------------------- + +The role of the principal developer is as a "first among equals" amongst the +dev fee recipients. + +The principal developer shall make a number of guarantees. + +1. Zcash shall be their exclusive focus, submitting financials periodically to + the Foundation as assurance. +2. They shall maintain a well-run board and employ a qualified CFO. +3. In addition to the existing open-source requirements, they shall agree to + assign any patents relevant to Zcash to the Foundation. + +In exchange, the principal developer is granted an indefinite minimum dev fee +allocation of 20%, with a maximum allocation of 35% of the total fee, as +recommended annually by the Foundation. + +The principal developer will have a wide remit to pursue longer-term research +relevant to Zcash, though it will submit the same plans required of other +recipients. The principal developer will only be recommended for removal by +the Foundation in extraordinary circumstances, including reneging on the above +guarantees or extreme negligence. + +Minimum viable Foundation +------------------------- + +To manage the dev fee and fulfill its community and diligence duties, the +Foundation shall maintain a board of 5 independent members. Rather than the +structure in the current bylaws, the board will consist of + +* 1 seat voted on periodically by ZEC holders directly. +* 1 seat representing a newly created research advisory board, whose primary + role will be technical diligence of potential recipients of the dev fee. +* 1 seat for a member of the investment community. +* 2 seats elected by the board, as the board is currently selected according + to the bylaws. The board's discretion here means these could be selected via + a community election, or via the remaining 3 seats' direct vote. + +The Foundation requires a professional board. Board member selection should +heavily favor candidates with existing formal public or private sector board +experience. + +Board seats should rotate periodically, while maintaining long enough terms +and overlap for consistent governance. + +Each board member should bring a unique network and set of skills to bear to +increase the impact of the Foundation. + +No board members shall have an ongoing commercial interest in any recipients +of the dev fee. + +Considering their expertise, the Foundation shall deliver a transition plan, +including a board election schedule and report on the feasibility of a future +coin vote process to determine a board seat. + +The ECC as the principal developer +---------------------------------- + +I propose that the ECC be considered as the initial principal developer, +receiving an indefinite dev fee allocation in exchange for their exclusive +focus on Zcash research and development, and assigning all patents and marks +relevant to Zcash to the Foundation. + +I believe this arrangement is best for the Zcash ecosystem, and with proper +management of funds, should satisfy the ongoing needs of the ECC. + +The dev call +------------ + +The Foundation shall organize a bi-weekly call for all dev fee recipients and +other third party developers. The call will be live-streamed for community +participation, though the speaking participants will be invite only. At a +minimum, a single representative from each dev fee recipient should attend. + +The Foundation shall also maintain a simple chat solution for development of +the protocol. While the chat logs should be publicly viewable, it need not be +open to public participation. + +Moving forward +-------------- + +I believe this proposal can form the basis for a new way forward for Zcash — +a robust, decentralized ecosystem with fair governance. I also hope it can +bring together the stakeholders in this discussion, and allow us to get back +to why we're all here — to protect the world's financial privacy. + +I look forward to feedback on GitHub and the Zcash forum. + + +Disclosures +=========== + +In the interest of transparency, I'd like to make a few professional +disclosures. + +I'm the largest shareholder of Thesis_, the parent company and studio behind +Fold_ and Keep_. Thesis is a for-profit company that might benefit from this +proposal as a dev fee recipient. While today I maintain exclusive control of +Thesis, the company has taken outside investment in the past. + +As far as my financial interest in Zcash, I've held a small amount of ZEC +since shortly after launch. I'm in the process of building my personal ZEC +position, as well as a position at Thesis. + +.. _Thesis: https://thesis.co +.. _Fold: https://foldapp.com +.. _Keep: https://keep.network + + +Acknowledgements +================ + +Thanks to my friends and colleagues Carolyn_, Laura_, Josh_, James_, Corbin_, +and Antonio_ for early review of the text this proposal. + +.. _Carolyn: https://twitter.com/CReckhow +.. _Laura: https://twitter.com/LauraWallendal +.. _Josh: https://twitter.com/JoshSRosenblatt +.. _James: https://twitter.com/_prestwich +.. _Corbin: https://twitter.com/CorbinPon +.. _Antonio: https://github.com/shadowfiend + +Thanks to my fellow dev fund ZIP authors, `Avichal Garg`_ at Electric Capital, +`Antoinette Marie`_, `Josh Cincinnati, ED`_ at the Zcash Foundation, +`Jacob Phillips`_ at Autonomous Partners, `Andrew Miller`_, `Chris Burniske`_, +`Eran Tromer`_, and the fellows at `Blocktown`_, each of whose ideas +influenced this proposal. And of course, thanks to `Sonya Mann`_ and the +Foundation for coordinating discussions around these different proposals. + +.. _Avichal Garg: https://forum.zcashcommunity.com/t/dev-fund-proposal-5-entity-strategic-council-approach/34801 +.. _Antoinette Marie: https://forum.zcashcommunity.com/t/zcash-dev-fund-results-based-financing-equity-proposal-amendment/35052/31 +.. _Josh Cincinnati, ED: https://forum.zcashcommunity.com/t/a-grand-compromise-synthesis-zip-proposal/34812 +.. _Jacob Phillips: https://forum.zcashcommunity.com/t/asp-founders-reward-positioning-support-for-avichal-garg-s-proposal-with-amendments/35184 +.. _Andrew Miller: https://forum.zcashcommunity.com/t/dev-fund-proposal-miner-directed-dev-fund-was-20-to-any-combination-of-ecc-zfnd-parity-or-burn/33864 +.. _Blocktown: https://forum.zcashcommunity.com/t/blocktown-development-fund-proposal-10-to-a-2-of-3-multisig-with-community-involved-third-entity/34782 +.. _Chris Burniske: https://twitter.com/cburniske +.. _Eran Tromer: https://forum.zcashcommunity.com/t/dev-fund-proposal-dev-fund-to-ecc-zfnd-major-grants/35364/15 +.. _Sonya Mann: https://github.com/sonyamann + +Outside ongoing discussions in the forum and with other ZIP authors, I've +spoken with a number of prominent community members while developing this +proposal, though none were provided early access to the text of the proposal. +I appreciated the thoughtful discussions with `Josh Cincinnati`_, +`Zooko Wilcox`_, `Josh Swihart`_, `Ian Miers`_, and others. + +.. _Josh Cincinnati: https://twitter.com/acityinohio +.. _Zooko Wilcox: https://twitter.com/zooko +.. _Josh Swihart: https://twitter.com/jswihart +.. _Ian Miers: https://twitter.com/secparam diff --git a/zip-1013.html b/zip-1013.html new file mode 100644 index 00000000..3840404b --- /dev/null +++ b/zip-1013.html @@ -0,0 +1,89 @@ + + + + ZIP 1013: Keep It Simple, Zcashers: 10% to ECC, 10% to ZF + + + +
    +
    ZIP: 1013
    +Title: Keep It Simple, Zcashers: 10% to ECC, 10% to ZF
    +Owners: Gordon Mohr (@gojomo on relevant forums)
    +Status: Draft
    +Category: Consensus / Process
    +Created: 2019-11-14
    +License: Public Domain
    +Discussions-To: <https://forum.zcashcommunity.com/t/zip-keep-it-simple-zcashers-kisz-10-to-ecc-10-to-zfnd/35425>
    +
    +

    Terminology

    +

    The key words "MUST" and "SHOULD" in this document are to be interpreted as described in RFC 2119. 1

    +

    The terms below are to be interpreted as follows:

    +
    +
    ECC
    +
    Electric Coin Company, a US-based limited-liability corporation.
    +
    ZF
    +
    Zcash Foundation, a US-based non-profit corporation.
    +
    Halvening
    +
    a regularly-scheduled discontinuity where the rate of ZEC issuance halves, expected first in roughly October 2020 then next in roughly October 2024.
    +
    +
    +
    +

    Abstract

    +

    This ZIP proposes:

    +

    After the 1st Zcash Halvening, when the "Founders’ Reward" system- bootstrapping protocol-based development funding expires, continue to direct 20% of new ZEC issuance to development-related activities for ongoing research, development, innovation, and maintenance of Zcash.

    +

    Assign half of such funds to the ECC, and half to the ZF. Continue this allocation until the 2nd Halvening.

    +
    +
    +

    Motivation

    +

    There have been many proposals for potential allocations of Zcash block rewards (ZEC inflation) after the 1st Halvening. Many cluster around similar broad parameters:

    +
      +
    • 20% of block rewards for continuing development efforts;
    • +
    • provided to some combination of the Electric Coin Company (ECC), Zcash Foundation (ZF), and other named or to-be-determined entities;
    • +
    • conditioned on certain new allocation formulas or management practices, often involving novel entities, personnel, and feedback/deliberation processes.
    • +
    +

    However, no existing ZIPs explicitly propose the most simple variation on this theme - one that maintains maximal continuity with prior practice. This 'Keep It Simple, Zcashers' ZIP aims to fill that gap.

    +
    +
    +

    Requirements

    +

    This proposal intends to be easy to describe, understand, and implement.

    +
    +
    +

    Non-requirements

    +

    This proposal does not seek to propose any particular course of action past the 2nd Halvening.

    +
    +
    +

    Specification

    +

    To implement this ZIP, the Zcash protocol and compatible software MUST:

    +
      +
    • maintain a 20% allotment of new ZEC issuance to development activities through to the 2nd Halvening event (expected around October 2024);
    • +
    • formalize a 50-50 relative allocation between the ECC and ZF;
    • +
    • deliver these ZEC to addresses provided by the recipients, in a manner analogous to the original "Founders’ Reward" consensus-encoded block rewards, or any other technically- and/or legally- preferred method agreed to by the ECC & ZF.
    • +
    +

    This proposal specifically refrains from adding any new conditions or procedural formalities, technical or legal, on the delivery of development funds.

    +

    There is only the expectation that these recipients SHOULD continue the stated missions, practices of transparency, and responsiveness to community input that they have demonstrated thus far.

    +
    +
    +

    Discussion

    +

    This proposal primarily differs from similar proposals in two ways: (1) it places no new comditions/processes on the disbursement of ZEC development funds; (2) it specifies a fixed, 50-50 division-of-funds between the ECC and ZF.

    +

    These differences are motivated by a desire for simplicity and continuity. This allocation can be implemented technically without novel institutions, processes, or legal agreements.

    +

    Rather than relying on lists-of-conditions with underspecified enforcement or dispute-resolution mechanisms, the adequate performance of fund recipients is expected due to:

    +
      +
    • aligned incentives, especially the fact that the value of all funds received over 4 years depends completely on the continued health & growth of the Zcash ecosystem;
    • +
    • proven records of dedication to the Zcash project, and effective efforts on related projects, by receipient entities & personnel – even in the absence of formalized funding conditions.
    • +
    +

    From original "Founders’ Reward"-era development-funds, roughly 15% has been directed to the ZF. (Or, about 3 points of the full 20 points of bootstrap- funds.) However, from its later start, the ZF has recently grown its technical, grantmaking, and organizational capabilities, and wide sentiment in the Zcash community, ECC, and ZF desires the ZF grow to a role of equivalent or greater importance as the ECC for long-term Zcash evolution. Thus this proposal specifies a 50:50 split of future development funds, rather than continuing any prior proportions.

    +
    +
    +

    References

    + + + + + + + +
    1Key words for use in RFCs to Indicate Requirement Levels
    +
    +
    + + \ No newline at end of file diff --git a/zip-1013.rst b/zip-1013.rst new file mode 100644 index 00000000..86601208 --- /dev/null +++ b/zip-1013.rst @@ -0,0 +1,135 @@ +:: + + ZIP: 1013 + Title: Keep It Simple, Zcashers: 10% to ECC, 10% to ZF + Owners: Gordon Mohr (@gojomo on relevant forums) + Status: Draft + Category: Consensus / Process + Created: 2019-11-14 + License: Public Domain + Discussions-To: + + +Terminology +=========== + +The key words "MUST" and "SHOULD" in this document are to be interpreted as +described in RFC 2119. [#RFC2119]_ + + +The terms below are to be interpreted as follows: + +ECC + Electric Coin Company, a US-based limited-liability corporation. +ZF + Zcash Foundation, a US-based non-profit corporation. +Halvening + a regularly-scheduled discontinuity where the rate of ZEC issuance halves, + expected first in roughly October 2020 then next in roughly October 2024. + + +Abstract +======== + +This ZIP proposes: + +After the 1st Zcash Halvening, when the "Founders’ Reward" system- +bootstrapping protocol-based development funding expires, continue to +direct 20% of new ZEC issuance to development-related activities for ongoing +research, development, innovation, and maintenance of Zcash. + +Assign half of such funds to the ECC, and half to the ZF. Continue this +allocation until the 2nd Halvening. + + +Motivation +========== + +There have been many proposals for potential allocations of Zcash block +rewards (ZEC inflation) after the 1st Halvening. Many cluster around similar +broad parameters: + +* 20% of block rewards for continuing development efforts; +* provided to some combination of the Electric Coin Company (ECC), + Zcash Foundation (ZF), and other named or to-be-determined entities; +* conditioned on certain new allocation formulas or management practices, + often involving novel entities, personnel, and feedback/deliberation + processes. + +However, no existing ZIPs explicitly propose the most simple variation +on this theme - one that maintains maximal continuity with prior practice. +This 'Keep It Simple, Zcashers' ZIP aims to fill that gap. + + +Requirements +============ + +This proposal intends to be easy to describe, understand, and implement. + + +Non-requirements +================ + +This proposal does not seek to propose any particular course of action +past the 2nd Halvening. + + +Specification +============= + +To implement this ZIP, the Zcash protocol and compatible software MUST: + +* maintain a 20% allotment of new ZEC issuance to development activities + through to the 2nd Halvening event (expected around October 2024); +* formalize a 50-50 relative allocation between the ECC and ZF; +* deliver these ZEC to addresses provided by the recipients, in a manner + analogous to the original "Founders’ Reward" consensus-encoded block + rewards, or any other technically- and/or legally- preferred method + agreed to by the ECC & ZF. + +This proposal specifically refrains from adding any new conditions or +procedural formalities, technical or legal, on the delivery of development +funds. + +There is only the expectation that these recipients SHOULD continue the +stated missions, practices of transparency, and responsiveness to community +input that they have demonstrated thus far. + + +Discussion +========== + +This proposal primarily differs from similar proposals in two ways: (1) it +places no new comditions/processes on the disbursement of ZEC development +funds; (2) it specifies a fixed, 50-50 division-of-funds between the ECC and +ZF. + +These differences are motivated by a desire for simplicity and continuity. +This allocation can be implemented technically without novel institutions, +processes, or legal agreements. + +Rather than relying on lists-of-conditions with underspecified enforcement or +dispute-resolution mechanisms, the adequate performance of fund recipients is +expected due to: + +* aligned incentives, especially the fact that the value of all funds received + over 4 years depends completely on the continued health & growth of the Zcash + ecosystem; +* proven records of dedication to the Zcash project, and effective efforts on + related projects, by receipient entities & personnel – even in the absence + of formalized funding conditions. + +From original "Founders’ Reward"-era development-funds, roughly 15% has been +directed to the ZF. (Or, about 3 points of the full 20 points of bootstrap- +funds.) However, from its later start, the ZF has recently grown its +technical, grantmaking, and organizational capabilities, and wide sentiment in +the Zcash community, ECC, and ZF desires the ZF grow to a role of equivalent +or greater importance as the ECC for long-term Zcash evolution. Thus this +proposal specifies a 50:50 split of future development funds, rather than +continuing any prior proportions. + + +References +========== + +.. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ diff --git a/zip-guide.html b/zip-guide.html index 4d4eaea2..706758fc 100644 --- a/zip-guide.html +++ b/zip-guide.html @@ -97,7 +97,7 @@ sudo pip install rst2html5 2 - Zcash Protocol Specification, Version {...} or later [Overwinter+Sapling+Blossom] + Zcash Protocol Specification, Version {...} or later [Overwinter+Sapling+Blossom] @@ -105,7 +105,7 @@ sudo pip install rst2html5 3 - ZIP xxxx: Title + ZIP xxxx: Title diff --git a/zip-guide.rst b/zip-guide.rst index 9fe94f56..9ef85758 100644 --- a/zip-guide.rst +++ b/zip-guide.rst @@ -138,5 +138,5 @@ References ========== .. [#RFC2119] `Key words for use in RFCs to Indicate Requirement Levels `_ -.. [#protocol] `Zcash Protocol Specification, Version {...} or later [Overwinter+Sapling+Blossom] `_ -.. [#zip-xxxx] `ZIP xxxx: Title `_ +.. [#protocol] `Zcash Protocol Specification, Version {...} or later [Overwinter+Sapling+Blossom] `_ +.. [#zip-xxxx] `ZIP xxxx: Title `_