Merge branch 'main' into jackgavigan:main

This commit is contained in:
Jack Grigg 2024-07-03 21:47:14 +00:00
commit 16d03a90b4
8 changed files with 313 additions and 188 deletions

1
.gitignore vendored
View File

@ -22,6 +22,7 @@
.Makefile.uptodate
.zipfilelist.*
.draftfilelist.*
protocol/aux/
protocol/html/

View File

@ -149,3 +149,18 @@ Index of ZIPs
<tr> <td>guide-markdown</td> <td class="left"><a href="zip-guide-markdown.md">{Something Short and To the Point}</a></td> <td>Draft</td>
<tr> <td>guide</td> <td class="left"><a href="zip-guide.rst">{Something Short and To the Point}</a></td> <td>Draft</td>
</table></embed>
Drafts without assigned ZIP numbers
-----------------------------------
These are works-in-progress, and may never be assigned ZIP numbers if their
ideas become obsoleted or abandoned. Do not assume that these drafts will exist
in perpetuity; instead assume that they will either move to a numbered ZIP, or
be deleted.
.. raw:: html
<embed><table>
<tr> <th>Title</th> </tr>
<tr> <td class="left"><a href="draft-nuttycom-lockbox-streams.rst">Lockbox for Decentralized Grants Allocation</a></td>
</table></embed>

View File

@ -0,0 +1,114 @@
<!DOCTYPE html>
<html>
<head>
<title>Draft nuttycom-lockbox-streams: Lockbox for Decentralized Grants Allocation</title>
<meta charset="utf-8" />
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js?config=TeX-AMS-MML_HTMLorMML"></script>
<meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="css/style.css"></head>
<body>
<section>
<pre>ZIP: Unassigned
Title: Lockbox for Decentralized Grants Allocation
Owners: Kris Nuttycombe &lt;kris@nutty.land&gt;
Original-Authors: Skylar Saveland &lt;skylar@free2z.com&gt;
Credits: Daira-Emma Hopwood &lt;daira-emma@electriccoin.co&gt;
Jack Grigg &lt;jack@electriccoin.co&gt;
Status: Draft
Category: Consensus
Created: 2024-07-02
License: MIT
Pull-Request: &lt;<a href="https://github.com/zcash/zips/pull/">https://github.com/zcash/zips/pull/</a>&gt;</pre>
<section id="terminology"><h2><span class="section-heading">Terminology</span><span class="section-anchor"> <a rel="bookmark" href="#terminology"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<p>The key words "MUST", "REQUIRED", "MUST NOT", "SHOULD", and "MAY" in this document are to be interpreted as described in BCP 14 <a id="footnote-reference-1" class="footnote_reference" href="#bcp14">1</a> when, and only when, they appear in all capitals.</p>
</section>
<section id="abstract"><h2><span class="section-heading">Abstract</span><span class="section-anchor"> <a rel="bookmark" href="#abstract"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<p>This ZIP specifies a change to the Zcash consensus protocol to define a pool of issued Zcash value to be used to fund future development efforts within the Zcash ecosystem.</p>
<p>This ZIP builds upon the funding stream mechanism defined in ZIP 207 <a id="footnote-reference-2" class="footnote_reference" href="#zip-0207">3</a>. It defines a new "DEFERRED_POOL" funding stream type such that portions of the block reward sent to a stream of this type are deposited directly into the deferred funding pool instead of being sent to a recipient address. Other ways of adding to the pool, such as allowing for direct deposits or fee value currently allocated to miners may be defined in the future.</p>
</section>
<section id="motivation"><h2><span class="section-heading">Motivation</span><span class="section-anchor"> <a rel="bookmark" href="#motivation"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<p>In accordance with ZIP 1014, <a id="footnote-reference-3" class="footnote_reference" href="#zip-1014">2</a> the Zcash block reward is allocated with 80% going to miners, and the remaining 20% distributed among the Major Grants Fund (8%), Electric Coin Company (ECC) (7%), and the Zcash Foundation (ZF) (5%). This funding structure supports various essential activities such as protocol development, security, marketing, and legal expenses. However, this model will expire in November 2024, leading to the entire block reward being allocated to miners if no changes are made.</p>
<p>Several draft ZIPs under consideration for replacing the existing direct allocation of block rewards suggest that part of the block reward be directed to a reserve, the distribution of which is to be determined via a future ZIP. This ZIP is intended to provide a common mechanism that can be used to implement these various proposals.</p>
</section>
<section id="requirements"><h2><span class="section-heading">Requirements</span><span class="section-anchor"> <a rel="bookmark" href="#requirements"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<p>The Zcash protocol will maintain a new Deferred chain pool value balance
<span class="math">\(\mathsf{PoolValue}_{Deferred}\)</span>
for the deferred funding pool, in much the same fashion as it maintains chain pool value balances for the transparent, Sprout, Sapling, and Orchard pools.</p>
<p>The funding stream mechanism defined in ZIP 207 <a id="footnote-reference-4" class="footnote_reference" href="#zip-0207">3</a> is modified such that a funding stream may deposit funds into the deferred pool.</p>
</section>
<section id="specification"><h2><span class="section-heading">Specification</span><span class="section-anchor"> <a rel="bookmark" href="#specification"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<section id="deferred-development-fund-chain-value-pool-balance"><h3><span class="section-heading">Deferred Development Fund Chain Value Pool Balance</span><span class="section-anchor"> <a rel="bookmark" href="#deferred-development-fund-chain-value-pool-balance"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h3>
<p>Full node implementations MUST track an additional
<span class="math">\(\mathsf{PoolValue}_{Deferred}\)</span>
chain value pool balance, in addition to the Sprout, Sapling, and Orchard chain value pool balances. This balance is set to zero prior to the activation of Network Upgrade 6.</p>
<p>ZIP 207 <a id="footnote-reference-5" class="footnote_reference" href="#zip-0207">3</a> is modified as follows:</p>
<p>In the section <strong>Funding streams</strong> <a id="footnote-reference-6" class="footnote_reference" href="#zip-0207-funding-streams">4</a>, instead of:</p>
<blockquote>
<p>Each funding stream has an associated sequence of recipient addresses, each of which MUST be either a transparent P2SH address or a Sapling address.</p>
</blockquote>
<p>it will be modified to read:</p>
<blockquote>
<p>Each funding stream has an associated sequence of recipients, each of which MUST be either a transparent P2SH address, a Sapling address, or the identifier <cite>DEFERRED_POOL</cite>.</p>
</blockquote>
<p>In the section <strong>Consensus rules</strong> <a id="footnote-reference-7" class="footnote_reference" href="#zip-0207-consensus-rules">5</a>, the following will be added:</p>
<blockquote>
<p>The "prescribed way" to pay to the <cite>DEFERRED_POOL</cite> is to add
<span class="math">\(\mathsf{FundingStream[FUND].Value}(\mathsf{height})\)</span>
to
<span class="math">\(\mathsf{PoolValue}_{Deferred}\)</span>
.</p>
</blockquote>
<p>The protocol specification is modified to define the "total issued supply" such that the total issued supply as of a given height is given by the function:</p>
<div class="math">\(\begin{array}{ll}
\mathsf{IssuedSupply}(\mathsf{height}) := &amp;\!\!\!\!\mathsf{PoolValue}_{Transparent}(\mathsf{height}) \\
&amp;+\;\; \mathsf{PoolValue}_{Sprout}(\mathsf{height}) \\
&amp;+\,\; \mathsf{PoolValue}_{Sapling}(\mathsf{height}) \\
&amp;+\,\; \mathsf{PoolValue}_{Orchard}(\mathsf{height}) \\
&amp;+\,\; \mathsf{PoolValue}_{Deferred}(\mathsf{height})
\end{array}\)</div>
</section>
</section>
<section id="references"><h2><span class="section-heading">References</span><span class="section-anchor"> <a rel="bookmark" href="#references"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<table id="bcp14" class="footnote">
<tbody>
<tr>
<th>1</th>
<td><a href="https://www.rfc-editor.org/info/bcp14">Information on BCP 14 — "RFC 2119: Key words for use in RFCs to Indicate Requirement Levels" and "RFC 8174: Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words"</a></td>
</tr>
</tbody>
</table>
<table id="zip-1014" class="footnote">
<tbody>
<tr>
<th>2</th>
<td><a href="zip-1014">ZIP 1014: Establishing a Dev Fund for ECC, ZF, and Major Grants</a></td>
</tr>
</tbody>
</table>
<table id="zip-0207" class="footnote">
<tbody>
<tr>
<th>3</th>
<td><a href="zip-0207">ZIP 207: Funding Streams</a></td>
</tr>
</tbody>
</table>
<table id="zip-0207-funding-streams" class="footnote">
<tbody>
<tr>
<th>4</th>
<td><a href="zip-0207#funding-streams">ZIP 207: Funding Streams. Section: Funding streams</a></td>
</tr>
</tbody>
</table>
<table id="zip-0207-consensus-rules" class="footnote">
<tbody>
<tr>
<th>5</th>
<td><a href="zip-0207#consensus-rules">ZIP 207: Funding Streams. Section: Consensus rules</a></td>
</tr>
</tbody>
</table>
</section>
</section>
</body>
</html>

View File

@ -0,0 +1,117 @@
::
ZIP: Unassigned
Title: Lockbox for Decentralized Grants Allocation
Owners: Kris Nuttycombe <kris@nutty.land>
Original-Authors: Skylar Saveland <skylar@free2z.com>
Credits: Daira-Emma Hopwood <daira-emma@electriccoin.co>
Jack Grigg <jack@electriccoin.co>
Status: Draft
Category: Consensus
Created: 2024-07-02
License: MIT
Pull-Request: <https://github.com/zcash/zips/pull/>
Terminology
===========
The key words "MUST", "REQUIRED", "MUST NOT", "SHOULD", and "MAY" in this
document are to be interpreted as described in BCP 14 [#BCP14]_ when, and only
when, they appear in all capitals.
Abstract
========
This ZIP specifies a change to the Zcash consensus protocol to define a pool
of issued Zcash value to be used to fund future development efforts within the
Zcash ecosystem.
This ZIP builds upon the funding stream mechanism defined in ZIP 207
[#zip-0207]_. It defines a new "DEFERRED_POOL" funding stream type such that
portions of the block reward sent to a stream of this type are deposited
directly into the deferred funding pool instead of being sent to a recipient
address. Other ways of adding to the pool, such as allowing for direct deposits
or fee value currently allocated to miners may be defined in the future.
Motivation
==========
In accordance with ZIP 1014, [#zip-1014]_ the Zcash block reward is allocated
with 80% going to miners, and the remaining 20% distributed among the Major
Grants Fund (8%), Electric Coin Company (ECC) (7%), and the Zcash Foundation
(ZF) (5%). This funding structure supports various essential activities such as
protocol development, security, marketing, and legal expenses. However, this
model will expire in November 2024, leading to the entire block reward being
allocated to miners if no changes are made.
Several draft ZIPs under consideration for replacing the existing direct
allocation of block rewards suggest that part of the block reward be directed
to a reserve, the distribution of which is to be determined via a future ZIP.
This ZIP is intended to provide a common mechanism that can be used to
implement these various proposals.
Requirements
============
The Zcash protocol will maintain a new Deferred chain pool value balance
:math:`\mathsf{PoolValue}_{Deferred}` for the deferred funding pool, in much
the same fashion as it maintains chain pool value balances for the transparent,
Sprout, Sapling, and Orchard pools.
The funding stream mechanism defined in ZIP 207 [#zip-0207]_ is modified such
that a funding stream may deposit funds into the deferred pool.
Specification
=============
Deferred Development Fund Chain Value Pool Balance
--------------------------------------------------
Full node implementations MUST track an additional
:math:`\mathsf{PoolValue}_{Deferred}` chain value pool balance, in addition to
the Sprout, Sapling, and Orchard chain value pool balances. This balance is
set to zero prior to the activation of Network Upgrade 6.
ZIP 207 [#zip-0207]_ is modified as follows:
In the section **Funding streams** [#zip-0207-funding-streams]_, instead of:
Each funding stream has an associated sequence of recipient addresses,
each of which MUST be either a transparent P2SH address or a Sapling address.
it will be modified to read:
Each funding stream has an associated sequence of recipients, each of which
MUST be either a transparent P2SH address, a Sapling address, or the identifier
`DEFERRED_POOL`.
In the section **Consensus rules** [#zip-0207-consensus-rules]_, the following
will be added:
The "prescribed way" to pay to the `DEFERRED_POOL` is to add
:math:`\mathsf{FundingStream[FUND].Value}(\mathsf{height})` to
:math:`\mathsf{PoolValue}_{Deferred}`.
The protocol specification is modified to define the "total issued supply" such
that the total issued supply as of a given height is given by the function:
.. math::
\begin{array}{ll}
\mathsf{IssuedSupply}(\mathsf{height}) := &\!\!\!\!\mathsf{PoolValue}_{Transparent}(\mathsf{height}) \\
&+\;\; \mathsf{PoolValue}_{Sprout}(\mathsf{height}) \\
&+\,\; \mathsf{PoolValue}_{Sapling}(\mathsf{height}) \\
&+\,\; \mathsf{PoolValue}_{Orchard}(\mathsf{height}) \\
&+\,\; \mathsf{PoolValue}_{Deferred}(\mathsf{height})
\end{array}
References
==========
.. [#BCP14] `Information on BCP 14 — "RFC 2119: Key words for use in RFCs to
Indicate Requirement Levels" and "RFC 8174: Ambiguity of Uppercase vs
Lowercase in RFC 2119 Key Words" <https://www.rfc-editor.org/info/bcp14>`_
.. [#zip-1014] `ZIP 1014: Establishing a Dev Fund for ECC, ZF, and Major Grants <zip-1014.rst>`_
.. [#zip-0207] `ZIP 207: Funding Streams <zip-0207.rst>`_
.. [#zip-0207-funding-streams] `ZIP 207: Funding Streams. Section: Funding streams <zip-0207.rst#funding-streams>`_
.. [#zip-0207-consensus-rules] `ZIP 207: Funding Streams. Section: Consensus rules <zip-0207.rst#consensus-rules>`_

View File

@ -34,6 +34,7 @@ EOF
fi
sed -i.sedbak 's|<a \(class=[^ ]* \)*href="\([^":]*\)\.rst\(\#[^"]*\)*">|<a \1href="\2\3">|g' "$2"
sed -i.sedbak 's|<a \(class=[^ ]* \)*href="\([^":]*\)\.md\(\#[^"]*\)*">|<a \1href="\2\3">|g' "$2"
sed -i.sedbak 's|&lt;\(https:[^&]*\)&gt;|\&lt;<a href="\1">\1</a>\&gt;|g' "$2"
perl -i.sedbak -p0e 's|<section id="([^"]*)">\s*.?\s*<h([1-9])>([^<]*(?:<code>[^<]*</code>[^<]*)?)</h([1-9])>|<section id="\1"><h\2><span class="section-heading">\3</span><span class="section-anchor"> <a rel="bookmark" href="#\1"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h\4>|g' "$2"

View File

@ -121,8 +121,14 @@
<tr> <td><strike>1012</strike></td> <td class="left"><strike><a href="zip-1012">Dev Fund to ECC + ZF + Major Grants</a></strike></td> <td>Obsolete</td>
<tr> <td><strike>1013</strike></td> <td class="left"><strike><a href="zip-1013">Keep It Simple, Zcashers: 10% to ECC, 10% to ZF</a></strike></td> <td>Obsolete</td>
<tr> <td>1014</td> <td class="left"><a href="zip-1014">Establishing a Dev Fund for ECC, ZF, and Major Grants</a></td> <td>Active</td>
<tr> <td>guide-markdown</td> <td class="left"><a href="zip-guide-markdown.md">{Something Short and To the Point}</a></td> <td>Draft</td>
<tr> <td>guide-markdown</td> <td class="left"><a href="zip-guide-markdown">{Something Short and To the Point}</a></td> <td>Draft</td>
<tr> <td>guide</td> <td class="left"><a href="zip-guide">{Something Short and To the Point}</a></td> <td>Draft</td>
</table></embed></section>
<section id="drafts-without-assigned-zip-numbers"><h2><span class="section-heading">Drafts without assigned ZIP numbers</span><span class="section-anchor"> <a rel="bookmark" href="#drafts-without-assigned-zip-numbers"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<p>These are works-in-progress, and may never be assigned ZIP numbers if their ideas become obsoleted or abandoned. Do not assume that these drafts will exist in perpetuity; instead assume that they will either move to a numbered ZIP, or be deleted.</p>
<embed><table>
<tr> <th>Title</th> </tr>
<tr> <td class="left"><a href="draft-nuttycom-lockbox-streams">Lockbox for Decentralized Grants Allocation</a></td>
</table></embed></section>
</section>
</body>

View File

@ -29,9 +29,9 @@ Discussions-To: &lt;<a href="https://github.com/zcash/zips/issues/400">https://g
<span class="math">\(u\!\)</span>
-coordinate is zero, there are two encodings that will be accepted:</p>
<pre data-language="rust"><span class="c1">// Fix the sign of `u` if necessary</span>
<span class="kd">let</span><span class="w"> </span><span class="n">flip_sign</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Choice</span>::<span class="n">from</span><span class="p">((</span><span class="n">u</span><span class="p">.</span><span class="n">to_bytes</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="n">sign</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="n">flip_sign</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Choice</span><span class="p">::</span><span class="n">from</span><span class="p">((</span><span class="n">u</span><span class="p">.</span><span class="n">to_bytes</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="n">sign</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="kd">let</span><span class="w"> </span><span class="n">u_negated</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="n">u</span><span class="p">;</span>
<span class="kd">let</span><span class="w"> </span><span class="n">final_u</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Fq</span>::<span class="n">conditional_select</span><span class="p">(</span><span class="o">&amp;</span><span class="n">u</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">u_negated</span><span class="p">,</span><span class="w"> </span><span class="n">flip_sign</span><span class="p">);</span></pre>
<span class="kd">let</span><span class="w"> </span><span class="n">final_u</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Fq</span><span class="p">::</span><span class="n">conditional_select</span><span class="p">(</span><span class="o">&amp;</span><span class="n">u</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">u_negated</span><span class="p">,</span><span class="w"> </span><span class="n">flip_sign</span><span class="p">);</span></pre>
<p>This code accepts either sign bit, because <code>u_negated == u</code>.</p>
<p>There are two points on the Jubjub curve with
<span class="math">\(u\!\)</span>

View File

@ -19,236 +19,107 @@ Created: yyyy-mm-dd
License: {usually MIT}
Pull-Request: &lt;<a href="https://github.com/zcash/zips/pull/???">https://github.com/zcash/zips/pull/???</a>&gt;</code></pre>
<h1 id="dont-panic">Dont Panic</h1>
<p>If this is your first time writing a ZIP, the structure and format
may look intimidating. But really, its just meant to reflect
common-sense practice and some technical conventions. Feel free to start
with a simple initial draft that gets ideas across, even if it doesnt
quite follow this format. The community and ZIP editors will help you
figure things out and get it into shape later.</p>
<p>If this is your first time writing a ZIP, the structure and format may look intimidating. But really, its just meant to reflect common-sense practice and some technical conventions. Feel free to start with a simple initial draft that gets ideas across, even if it doesnt quite follow this format. The community and ZIP editors will help you figure things out and get it into shape later.</p>
<p>{Delete this section.}</p>
<h1 id="terminology">Terminology</h1>
<p>{Edit this to reflect the key words that are actually used.} The key
words “MUST”, “REQUIRED”, “MUST NOT”, “SHOULD”, and “MAY” in this
document are to be interpreted as described in BCP 14 <a href="#fn1"
class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a>
when, and only when, they appear in all capitals.</p>
<p>{Avoid duplicating definitions from other ZIPs. Instead use wording
like this:}</p>
<p>The terms “Mainnet” and “Testnet” in this document are to be
interpreted as defined in the Zcash protocol specification <a
href="#fn2" class="footnote-ref" id="fnref2"
role="doc-noteref"><sup>2</sup></a>.</p>
<p>The term “full validator” in this document is to be interpreted as
defined in the Zcash protocol specification <a href="#fn3"
class="footnote-ref" id="fnref3"
role="doc-noteref"><sup>3</sup></a>.</p>
<p>{Edit this to reflect the key words that are actually used.} The key words “MUST”, “REQUIRED”, “MUST NOT”, “SHOULD”, and “MAY” in this document are to be interpreted as described in BCP 14 <a href="#fn1" class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a> when, and only when, they appear in all capitals.</p>
<p>{Avoid duplicating definitions from other ZIPs. Instead use wording like this:}</p>
<p>The terms “Mainnet” and “Testnet” in this document are to be interpreted as defined in the Zcash protocol specification <a href="#fn2" class="footnote-ref" id="fnref2" role="doc-noteref"><sup>2</sup></a>.</p>
<p>The term “full validator” in this document is to be interpreted as defined in the Zcash protocol specification <a href="#fn3" class="footnote-ref" id="fnref3" role="doc-noteref"><sup>3</sup></a>.</p>
<p>The terms below are to be interpreted as follows:</p>
<dl>
<dt>{Term to be defined}</dt>
<dd>
<p>{Definition.}</p>
<dd><p>{Definition.}</p>
</dd>
<dt>{Another term}</dt>
<dd>
<p>{Definition.}</p>
<dd><p>{Definition.}</p>
</dd>
</dl>
<h1 id="abstract">Abstract</h1>
<p>{Describe what this proposal does, typically in a few paragraphs.</p>
<p>The Abstract should only provide a summary of the ZIP; the ZIP should
remain complete without the Abstract.</p>
<p>Use links where applicable, e.g. <a href="#fn4" class="footnote-ref"
id="fnref4" role="doc-noteref"><sup>4</sup></a> <a href="#fn5"
class="footnote-ref" id="fnref5"
role="doc-noteref"><sup>5</sup></a>.}</p>
<p>The Abstract should only provide a summary of the ZIP; the ZIP should remain complete without the Abstract.</p>
<p>Use links where applicable, e.g. <a href="#fn4" class="footnote-ref" id="fnref4" role="doc-noteref"><sup>4</sup></a> <a href="#fn5" class="footnote-ref" id="fnref5" role="doc-noteref"><sup>5</sup></a>.}</p>
<h1 id="motivation">Motivation</h1>
<p>{Why is this proposal needed?</p>
<p>This is one of the most important sections of the ZIP, and should be
detailed and comprehensive. It shouldnt include any of the actual
specification dont put conformance requirements in this section.</p>
<p>Explain the status quo, why the status quo is in need of improvement,
and if applicable, the history of how this area has changed. Then
describe <em>at a high level</em> why this proposed solution addresses
the perceived issues. It is ok if this is somewhat redundant with the
abstract, but here you can go into a lot more detail.}</p>
<p>This is one of the most important sections of the ZIP, and should be detailed and comprehensive. It shouldnt include any of the actual specification dont put conformance requirements in this section.</p>
<p>Explain the status quo, why the status quo is in need of improvement, and if applicable, the history of how this area has changed. Then describe <em>at a high level</em> why this proposed solution addresses the perceived issues. It is ok if this is somewhat redundant with the abstract, but here you can go into a lot more detail.}</p>
<h1 id="requirements">Requirements</h1>
<p>{Describe design constraints on, or goals for the solution
typically one paragraph for each constraint or goal. Again, dont
actually specify anything here; this section is primarily for use as a
consistency check that what is specified meets the requirements.}</p>
<p>{Describe design constraints on, or goals for the solution typically one paragraph for each constraint or goal. Again, dont actually specify anything here; this section is primarily for use as a consistency check that what is specified meets the requirements.}</p>
<h1 id="non-requirements">Non-requirements</h1>
<p>{This section is entirely optional. If it is present, it describes
issues that the proposal is <em>not</em> attempting to address, that
someone might otherwise think it does or should.}</p>
<p>{This section is entirely optional. If it is present, it describes issues that the proposal is <em>not</em> attempting to address, that someone might otherwise think it does or should.}</p>
<h1 id="specification">Specification</h1>
<p>{Replace this entire section.}</p>
<p>The Specification section describes what should change, using precise
language and conformance key words. Anything that is <em>required in
order to implement the ZIP</em> (or follow its process, in the case of a
Process ZIP) should be in this section.</p>
<p>Avoid overspecification! Also avoid underspecification. Specification
is hard. Dont be afraid to ask for help.</p>
<p>Feel free to copy from other ZIPs doing similar things, e.g. defining
RPC calls, consensus rules, etc.</p>
<p>ZIPs MUST take into account differences between the Zcash Mainnet and
Testnet <a href="#fn6" class="footnote-ref" id="fnref6"
role="doc-noteref"><sup>6</sup></a> where applicable. A consensus ZIP
MUST be able to be deployed on both Mainnet and Testnet.</p>
<p>Unless the specification is particularly simple, you will need to
organise it under subheadings.</p>
<p>The Specification section describes what should change, using precise language and conformance key words. Anything that is <em>required in order to implement the ZIP</em> (or follow its process, in the case of a Process ZIP) should be in this section.</p>
<p>Avoid overspecification! Also avoid underspecification. Specification is hard. Dont be afraid to ask for help.</p>
<p>Feel free to copy from other ZIPs doing similar things, e.g. defining RPC calls, consensus rules, etc.</p>
<p>ZIPs MUST take into account differences between the Zcash Mainnet and Testnet <a href="#fn6" class="footnote-ref" id="fnref6" role="doc-noteref"><sup>6</sup></a> where applicable. A consensus ZIP MUST be able to be deployed on both Mainnet and Testnet.</p>
<p>Unless the specification is particularly simple, you will need to organise it under subheadings.</p>
<h2 id="example-subheading">Example subheading</h2>
<p>At least while the ZIP is in Draft, we encourage writing open
questions and TODOs.</p>
<p>At least while the ZIP is in Draft, we encourage writing open questions and TODOs.</p>
<h3 id="open-questions">Open questions</h3>
<ul>
<li>What happens if a full validator cant parse the fandangle as a
doohicky?</li>
<li>What happens if a full validator cant parse the fandangle as a doohicky?</li>
</ul>
<p>TODO: define byte encoding for the Jabberwock.</p>
<h2 id="comparison-of-zips-to-rfcs">Comparison of ZIPs to RFCs</h2>
<p>Like RFCs, ZIPs are precise technical documents that SHOULD give
enough implementation information to implement part of a Zcash-related
protocol or follow a Zcash-related process <a href="#fn7"
class="footnote-ref" id="fnref7"
role="doc-noteref"><sup>7</sup></a>.</p>
<p>Like RFCs, ZIPs are precise technical documents that SHOULD give enough implementation information to implement part of a Zcash-related protocol or follow a Zcash-related process <a href="#fn7" class="footnote-ref" id="fnref7" role="doc-noteref"><sup>7</sup></a>.</p>
<p>ZIPs are different from RFCs in the following ways:</p>
<ul>
<li>Many (but not all) ZIPs are “living documents”; they are updated
in-place as the relevant areas of the protocol or process change. Unlike
in the RFC process, making a change in an area described by a published
ZIP does not <em>necessarily</em> require creating a new ZIP, although
that is an option if the change is extensive enough to warrant it.</li>
<li>The expected structure of a ZIP is more constrained than an RFC. For
example, the Specification section is REQUIRED, and all of the
conformance requirements MUST go in that section. The ZIP editors will
help you to ensure that things go in the right sections.</li>
<li>Security considerations SHOULD be spread throughout the text, in the
places where they are most relevant.</li>
<li>Many (but not all) ZIPs are “living documents”; they are updated in-place as the relevant areas of the protocol or process change. Unlike in the RFC process, making a change in an area described by a published ZIP does not <em>necessarily</em> require creating a new ZIP, although that is an option if the change is extensive enough to warrant it.</li>
<li>The expected structure of a ZIP is more constrained than an RFC. For example, the Specification section is REQUIRED, and all of the conformance requirements MUST go in that section. The ZIP editors will help you to ensure that things go in the right sections.</li>
<li>Security considerations SHOULD be spread throughout the text, in the places where they are most relevant.</li>
</ul>
<h2 id="using-mathematical-notation">Using mathematical notation</h2>
<p>Embedded LaTeX <span
class="math inline"><em>x</em>+<em>y</em></span> is allowed and
encouraged in ZIPs. The syntax for inline math is
<code>:math:</code>latex
code`<code>" in reStructuredText or "</code><span
class="math inline"><em>l</em><em>a</em><em>t</em><em>e</em><em>x</em><em>c</em><em>o</em><em>d</em><em>e</em></span>`”
in Markdown. The rendered HTML will use KaTeX <a href="#fn8"
class="footnote-ref" id="fnref8" role="doc-noteref"><sup>8</sup></a>,
which only supports a subset of LaTeX, so you will need to double-check
that the rendering is as intended.</p>
<p>In general the conventions in the Zcash protocol specification SHOULD
be followed. If you find this difficult, dont worry too much about it
in initial drafts; the ZIP editors will catch any inconsistencies in
review.</p>
<p>Embedded LaTeX <span class="math inline"><em>x</em>+<em>y</em></span> is allowed and encouraged in ZIPs. The syntax for inline math is “<code>:math:</code>latex code`<code>" in reStructuredText or "</code><span class="math inline"><em>l</em><em>a</em><em>t</em><em>e</em><em>x</em><em>c</em><em>o</em><em>d</em><em>e</em></span>`” in Markdown. The rendered HTML will use KaTeX <a href="#fn8" class="footnote-ref" id="fnref8" role="doc-noteref"><sup>8</sup></a>, which only supports a subset of LaTeX, so you will need to double-check that the rendering is as intended.</p>
<p>In general the conventions in the Zcash protocol specification SHOULD be followed. If you find this difficult, dont worry too much about it in initial drafts; the ZIP editors will catch any inconsistencies in review.</p>
<h2 id="notes-and-warnings">Notes and warnings</h2>
<div class="info">
<p><code>.. note::</code>” in reStructuredText, or
<code>:::info</code>” (terminated by “<code>:::</code>”) in Markdown,
can be used for an aside from the main text.</p>
<p>The rendering of notes is colourful and may be distracting, so they
should only be used for important points.</p>
<p><code>.. note::</code>” in reStructuredText, or “<code>:::info</code>” (terminated by “<code>:::</code>”) in Markdown, can be used for an aside from the main text.</p>
<p>The rendering of notes is colourful and may be distracting, so they should only be used for important points.</p>
</div>
<div class="warning">
<p><code>.. warning::</code>” in reStructuredText, or
<code>:::warning</code>” (terminated by “<code>:::</code>”) in
Markdown, can be used for warnings.</p>
<p>Warnings should be used very sparingly — for example to signal that a
entire specification, or part of it, may be inapplicable or could cause
significant interoperability or security problems. In most cases, a
“MUST” or “SHOULD” conformance requirement is more appropriate.</p>
<p><code>.. warning::</code>” in reStructuredText, or “<code>:::warning</code>” (terminated by “<code>:::</code>”) in Markdown, can be used for warnings.</p>
<p>Warnings should be used very sparingly — for example to signal that a entire specification, or part of it, may be inapplicable or could cause significant interoperability or security problems. In most cases, a “MUST” or “SHOULD” conformance requirement is more appropriate.</p>
</div>
<h2 id="valid-markup">Valid markup</h2>
<p>This is optional before publishing a PR, but to check whether a
document is valid reStructuredText or Markdown, first install
<code>rst2html5</code> and <code>pandoc</code>. E.g. on Debian-based
distros::</p>
<p>This is optional before publishing a PR, but to check whether a document is valid reStructuredText or Markdown, first install <code>rst2html5</code> and <code>pandoc</code>. E.g. on Debian-based distros::</p>
<pre><code>sudo apt install python3-pip pandoc perl sed
pip3 install docutils==0.19 rst2html5</code></pre>
<p>Then, with <code>draft-myzip.rst</code> or
<code>draft-myzip.md</code> in the root directory of a clone of this
repo, run::</p>
<p>Then, with <code>draft-myzip.rst</code> or <code>draft-myzip.md</code> in the root directory of a clone of this repo, run::</p>
<pre><code>make draft-myzip.html</code></pre>
<p>(or just “<code>make</code>”) and view <code>draft-myzip.html</code>
in a web browser.</p>
<p>(or just “<code>make</code>”) and view <code>draft-myzip.html</code> in a web browser.</p>
<h2 id="citations-and-references">Citations and references</h2>
<p>Each reference should be given a short name, e.g. “snark” <a
href="#fn9" class="footnote-ref" id="fnref9"
role="doc-noteref"><sup>9</sup></a>. The syntax to cite that reference
is “<code>[#snark]_</code>” in reStructuredText, or
<code>[^snark]</code>” in Markdown.</p>
<p>The corresponding entry in the <a href="#references">References</a>
section should look like this in reStructuredText:</p>
<div class="sourceCode" id="cb4"><pre
class="sourceCode rst"><code class="sourceCode rest"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="dt">.. [#snark] </span>`The Hunting of the Snark &lt;<a href="https://www.gutenberg.org/files/29888/29888-h/29888-h.htm">https://www.gutenberg.org/files/29888/29888-h/29888-h.htm</a>&gt;_. Lewis Carroll, with illustrations by Henry Holiday. MacMillan and Co. London. March 29, 1876.</span></code></pre></div>
<p>Each reference should be given a short name, e.g. “snark” <a href="#fn9" class="footnote-ref" id="fnref9" role="doc-noteref"><sup>9</sup></a>. The syntax to cite that reference is “<code>[#snark]_</code>” in reStructuredText, or “<code>[^snark]</code>” in Markdown.</p>
<p>The corresponding entry in the <a href="#references">References</a> section should look like this in reStructuredText:</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode rst"><code class="sourceCode rest"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true"></a><span class="dt">.. [#snark] </span>`The Hunting of the Snark &lt;<span class="ot">https://www.gutenberg.org/files/29888/29888-h/29888-h.htm</span>&gt;_. Lewis Carroll, with illustrations by Henry Holiday. MacMillan and Co. London. March 29, 1876.</span></code></pre></div>
<p>or like this in Markdown::</p>
<div class="sourceCode" id="cb5"><pre
class="sourceCode markdown"><code class="sourceCode markdown"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="ot">[^snark]</span> <span class="co">[</span><span class="ot">The Hunting of the Snark</span><span class="co">](https://www.gutenberg.org/files/29888/29888-h/29888-h.htm)</span>. Lewis Carroll, with illustrations by Henry Holiday. MacMillan and Co. London. March 29, 1876.</span></code></pre></div>
<p>Note that each entry must be on a single line regardless of how long
that makes the line. In Markdown there must be a blank line between
entries.</p>
<p>The current rendering of a Markdown ZIP reorders the references
according to their first use; the rendering of a reStructuredText ZIP
keeps them in the same order as in the References section.</p>
<div class="sourceCode" id="cb5"><pre class="sourceCode markdown"><code class="sourceCode markdown"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true"></a><span class="ot">[^snark]</span> <span class="co">[</span><span class="ot">The Hunting of the Snark</span><span class="co">](https://www.gutenberg.org/files/29888/29888-h/29888-h.htm)</span>. Lewis Carroll, with illustrations by Henry Holiday. MacMillan and Co. London. March 29, 1876.</span></code></pre></div>
<p>Note that each entry must be on a single line regardless of how long that makes the line. In Markdown there must be a blank line between entries.</p>
<p>The current rendering of a Markdown ZIP reorders the references according to their first use; the rendering of a reStructuredText ZIP keeps them in the same order as in the References section.</p>
<p>To link to another section of the same ZIP, use</p>
<div class="sourceCode" id="cb6"><pre
class="sourceCode rst"><code class="sourceCode rest"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="ot">`Section title`_</span></span></code></pre></div>
<div class="sourceCode" id="cb6"><pre class="sourceCode rst"><code class="sourceCode rest"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true"></a><span class="ot">`Section title`_</span></span></code></pre></div>
<p>in reStructuredText, or</p>
<div class="sourceCode" id="cb7"><pre
class="sourceCode markdown"><code class="sourceCode markdown"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="co">[</span><span class="ot">Section title</span><span class="co">]</span></span></code></pre></div>
<div class="sourceCode" id="cb7"><pre class="sourceCode markdown"><code class="sourceCode markdown"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true"></a><span class="co">[</span><span class="ot">Section title</span><span class="co">]</span></span></code></pre></div>
<p>in Markdown.</p>
<h3 id="citing-the-zcash-protocol-specification">Citing the Zcash
protocol specification</h3>
<p>For references to the Zcash protocol specification, prefer to link to
a section anchor, and name the reference as
<code>[^protocol-&lt;anchor&gt;]</code>. This makes it more likely that
the link will remain valid if sections are renumbered or if content is
moved. The anchors in the protocol specification can be displayed by
clicking on a section heading in most PDF viewers. References to
particular sections should be versioned, even though the link will point
to the most recent stable version.</p>
<p>Do not include the “<code>https://zips.z.cash/</code>” part of URLs
to ZIPs or the protocol spec.</p>
<h3 id="citing-the-zcash-protocol-specification">Citing the Zcash protocol specification</h3>
<p>For references to the Zcash protocol specification, prefer to link to a section anchor, and name the reference as <code>[^protocol-&lt;anchor&gt;]</code>. This makes it more likely that the link will remain valid if sections are renumbered or if content is moved. The anchors in the protocol specification can be displayed by clicking on a section heading in most PDF viewers. References to particular sections should be versioned, even though the link will point to the most recent stable version.</p>
<p>Do not include the “<code>https://zips.z.cash/</code>” part of URLs to ZIPs or the protocol spec.</p>
<h1 id="reference-implementation">Reference implementation</h1>
<p>{This section is entirely optional; if present, it usually gives
links to zcashd or zebrad PRs.}</p>
<p>{This section is entirely optional; if present, it usually gives links to zcashd or zebrad PRs.}</p>
<h1 id="references">References</h1>
<aside id="footnotes" class="footnotes footnotes-end-of-document"
role="doc-endnotes">
<section class="footnotes" role="doc-endnotes">
<hr />
<ol>
<li id="fn1"><p><a
href="https://www.rfc-editor.org/info/bcp14">Information on BCP 14 —
“RFC 2119: Key words for use in RFCs to Indicate Requirement Levels” and
“RFC 8174: Ambiguity of Uppercase vs Lowercase in RFC 2119 Key
Words”</a><a href="#fnref1" class="footnote-back"
role="doc-backlink">↩︎</a></p></li>
<li id="fn2"><p><a href="protocol/protocol.pdf#networks">Zcash Protocol
Specification, Version 2022.3.8. Section 3.12: Mainnet and Testnet</a><a
href="#fnref2" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn3"><p><a href="protocol/protocol.pdf#blockchain">Zcash
Protocol Specification, Version 2022.3.8. Section 3.3: The Block
Chain</a><a href="#fnref3" class="footnote-back"
role="doc-backlink">↩︎</a></p></li>
<li id="fn4"><p><a href="protocol/protocol.pdf">Zcash Protocol
Specification, Version 2022.3.8 or later</a><a href="#fnref4"
class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn5"><p><a href="protocol/protocol.pdf#introduction">Zcash
Protocol Specification, Version 2022.3.8. Section 1: Introduction</a><a
href="#fnref5" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn6"><p><a href="protocol/protocol.pdf#networks">Zcash Protocol
Specification, Version 2022.3.8. Section 3.12: Mainnet and Testnet</a><a
href="#fnref6" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn7"><p><a href="zip-0000">ZIP 0: ZIP Process</a><a
href="#fnref7" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn8"><p><a href="https://katex.org/">KaTeX - The fastest math
typesetting library for the web</a><a href="#fnref8"
class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn9"><p><a
href="https://www.gutenberg.org/files/29888/29888-h/29888-h.htm">The
Hunting of the Snark</a>. Lewis Carroll, with illustrations by Henry
Holiday. MacMillan and Co. London. March 29, 1876.<a href="#fnref9"
class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn1" role="doc-endnote"><p><a href="https://www.rfc-editor.org/info/bcp14">Information on BCP 14 — “RFC 2119: Key words for use in RFCs to Indicate Requirement Levels” and “RFC 8174: Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words”</a><a href="#fnref1" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn2" role="doc-endnote"><p><a href="protocol/protocol.pdf#networks">Zcash Protocol Specification, Version 2022.3.8. Section 3.12: Mainnet and Testnet</a><a href="#fnref2" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn3" role="doc-endnote"><p><a href="protocol/protocol.pdf#blockchain">Zcash Protocol Specification, Version 2022.3.8. Section 3.3: The Block Chain</a><a href="#fnref3" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn4" role="doc-endnote"><p><a href="protocol/protocol.pdf">Zcash Protocol Specification, Version 2022.3.8 or later</a><a href="#fnref4" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn5" role="doc-endnote"><p><a href="protocol/protocol.pdf#introduction">Zcash Protocol Specification, Version 2022.3.8. Section 1: Introduction</a><a href="#fnref5" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn6" role="doc-endnote"><p><a href="protocol/protocol.pdf#networks">Zcash Protocol Specification, Version 2022.3.8. Section 3.12: Mainnet and Testnet</a><a href="#fnref6" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn7" role="doc-endnote"><p><a href="zip-0000">ZIP 0: ZIP Process</a><a href="#fnref7" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn8" role="doc-endnote"><p><a href="https://katex.org/">KaTeX - The fastest math typesetting library for the web</a><a href="#fnref8" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
<li id="fn9" role="doc-endnote"><p><a href="https://www.gutenberg.org/files/29888/29888-h/29888-h.htm">The Hunting of the Snark</a>. Lewis Carroll, with illustrations by Henry Holiday. MacMillan and Co. London. March 29, 1876.<a href="#fnref9" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
</ol>
</aside>
</section>
</body>
</html>