zips/rendered/zip-0233.html

262 lines
15 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<title>ZIP 233: Network Sustainability Mechanism: Removing Funds From Circulation</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css" integrity="sha384-nB0miv6/jRmo5UMMR1wu3Gz6NLsoTkbqJghGIsx//Rlm+ZU03BU6SQNC66uf4l5+" crossorigin="anonymous">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.js" integrity="sha384-7zkQWkzuo3B5mTepMUcHkMB5jZaolc2xDwL6VFqjFALcbeS9Ggm/Yr2r3Dy4lfFg" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/contrib/auto-render.min.js" integrity="sha384-43gviWU0YVjaDtb/GhzOouOXtZMP/7XUzwPTstBeZFe/+rCMvRwr4yROQP43s0Xk" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
<meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="css/style.css">
</head>
<body>
<pre><code>ZIP: 233
Title: Network Sustainability Mechanism: Removing Funds From Circulation
Owners: Jason McGee &lt;jason@shieldedlabs.net&gt;
Zooko Wilcox &lt;zooko@shieldedlabs.net&gt;
Mark Henderson &lt;mark@shieldedlabs.net&gt;
Tomek Piotrowski &lt;tomek@eiger.co&gt;
Mariusz Pilarek &lt;mariusz@eiger.co&gt;
Paul Dann &lt;paul@eiger.co&gt;
Original-Authors: Nathan Wilcox
Credits:
Status: Draft
Category: Consensus / Ecosystem
Created: 2023-08-16
License: BSD-2-Clause
Discussions-To: &lt;<a href="https://github.com/zcash/zips/issues/922">https://github.com/zcash/zips/issues/922</a>&gt;
</code></pre>
<h1 id="terminology"><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></h1>
<p>The key word &#8220;MUST&#8221; in this document is to be interpreted as described in
BCP 14 <a href="#fn:1" id="fnref:1" title="see footnote" class="footnote"><sup>1</sup></a> when, and only when, it appears in all capitals.</p>
<p>The term &#8220;network upgrade&#8221; in this document is to be interpreted as described
in ZIP 200. <a href="#fn:2" id="fnref:2" title="see footnote" class="footnote"><sup>2</sup></a></p>
<p>The character § is used when referring to sections of the Zcash Protocol
Specification. <a href="#fn:3" id="fnref:3" title="see footnote" class="footnote"><sup>3</sup></a></p>
<p>The terms &#8220;Mainnet&#8221; and &#8220;Testnet&#8221; are to be interpreted as described in
§ 3.12 Mainnet and Testnet. <a href="#fn:4" id="fnref:4" title="see footnote" class="footnote"><sup>4</sup></a></p>
<p>&#8220;ZEC/TAZ&#8221; refers to the native currency of Zcash on a given network, i.e.
ZEC on Mainnet and TAZ on Testnet.</p>
<p>&#8220;Block Subsidy&#8221; - The algorithmic issuance of ZEC/TAZ on block creation, as
defined by consensus. This is split between the miner and Funding Streams.</p>
<p>&#8220;Issuance&#8221; - The method by which ZEC/TAZ becomes available for circulation
on the network. [TODO: there is a potential terminology conflict between
this and issuance as defined in ZIP 227.]</p>
<p><span class="math">\(\mathsf{MAX\_MONEY}\)</span>, as defined in § 5.3 Constants <a href="#fn:5" id="fnref:5" title="see footnote" class="footnote"><sup>5</sup></a>,
is the total ZEC/TAZ supply cap measured in zatoshi, corresponding to
21,000,000 ZEC. This is slightly larger than the supply cap for the current
issuance mechanism, but is the value used in existing critical consensus
checks.</p>
<h1 id="abstract"><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></h1>
<p>This ZIP proposes the introduction of a mechanism to voluntarily remove funds
entirely from circulation on the network. This mechanism, in combination with
ZIP 234 <a href="#fn:6" id="fnref:6" title="see footnote" class="footnote"><sup>6</sup></a> and ZIP 235 <a href="#fn:7" id="fnref:7" title="see footnote" class="footnote"><sup>7</sup></a>, comprises a long-term strategy for
the sustainability of the network. We will refer to the combined effects of
these three ZIPs as the “Network Sustainability Mechanism”.</p>
<h1 id="motivation"><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></h1>
<p>This mechanism seeks to address concerns about the sustainability of the network
design shared by Bitcoin-like systems:</p>
<ol>
<li><strong>Long Term Consensus Sustainability:</strong> By enabling the removal of funds from
circulation, the network gains the ability to create &#8220;headroom&#8221; between the
chain value and <span class="math">\(\mathsf{MAX\_MONEY}\)</span>. This lays necessary groundwork for
extending the block subsidy system, which currently has a clear final end
date.</li>
<li><strong>Benefits to ZEC Holders:</strong> Removing funds from circulation reduces the
circulating supply of ZEC. To the extent that this potentially contributes to
an increase in the value of remaining ZEC, it can be argued to benefit network
users in proportion to their holdings — without requiring them to opt into any
scheme, introducing extra risk, active oversight, or accounting complexity.</li>
</ol>
<h1 id="specification"><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></h1>
<h2 id="transactionfield"><span class="section-heading">Transaction Field</span><span class="section-anchor"> <a rel="bookmark" href="#transactionfield"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<p>Each transaction gains a <span class="math">\(\mathsf{zip233\_amount}\)</span> property, specifying the
value in zatoshis that is removed from circulation when the transaction is
mined. The value removed from circulation subtracts from the remaining value in
the &#8220;transparent transaction value pool&#8221; as described in § 3.4 Transactions and
Treestates <a href="#fn:8" id="fnref:8" title="see footnote" class="footnote"><sup>8</sup></a>.</p>
<p><span class="math">\(\mathsf{zip233\_amount}\)</span> does not result in an output being produced in any
chain value pool, and therefore from the point at which the transaction is
applied to the global chain state, <span class="math">\(\mathsf{zip233\_amount}\)</span> is subtracted from
the issued supply. It is unavailable for circulation on the network at least
through to the end of the block in which the transaction is mined. ZIP 234
<a href="#fn:6" title="see footnote" class="footnote"><sup>6</sup></a> specifies a potential mechanism by which the funds removed from
circulation would again become available.</p>
<h2 id="changestozip230zip-0230">Changes to ZIP 230 <a href="#fn:9" id="fnref:9" title="see footnote" class="footnote"><sup>9</sup></a></h2>
<p>The following field is appended to the Common Transaction Fields of the v6
transaction format after <code>nExpiryHeight</code> <a href="#fn:10" id="fnref:10" title="see footnote" class="footnote"><sup>10</sup></a>:</p>
<table>
<colgroup>
<col />
<col />
<col />
<col />
</colgroup>
<thead>
<tr>
<th> Bytes </th>
<th> Name </th>
<th> Data Type </th>
<th> Description </th>
</tr>
</thead>
<tbody>
<tr>
<td> 8 </td>
<td> <code>zip233Amount</code> </td>
<td> <code>uint64</code> </td>
<td> The value to be removed from circulation in this transaction, in zatoshis. </td>
</tr>
</tbody>
</table>
<p>The <span class="math">\(\mathsf{zip233\_amount}\)</span> of a transaction is defined to be the value of the
<code>zip233Amount</code> field if present, and otherwise 0.</p>
<p>Notes:</p>
<ul>
<li>If both this ZIP and ZIP 2002 are selected for inclusion in the same Network
Upgrade, then the ambiguity in ordering of the fields added by these ZIPs
would need to be resolved.</li>
<li>Older transaction versions can continue to be supported after a network
upgrade, but removing funds from circulation is not possible for these
transactions. For example, NU5 supports both v4 and v5 transaction formats,
for both coinbase and non-coinbase transactions.</li>
</ul>
<h2 id="changestothezcashprotocolspecification"><span class="section-heading">Changes to the Zcash Protocol Specification</span><span class="section-anchor"> <a rel="bookmark" href="#changestothezcashprotocolspecification"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<p>Make a change to § 3.4 Transactions and Treestates <a href="#fn:8" title="see footnote" class="footnote"><sup>8</sup></a>
implementing the specification in [ZIP-233 Amount].</p>
<p>In § 7.1 Transaction Encoding and Consensus <a href="#fn:11" id="fnref:11" title="see footnote" class="footnote"><sup>11</sup></a>, add:</p>
<blockquote>
<p>[NU7 onward] <span class="math">\(\mathsf{zip233\_amount}\)</span> MUST be in the range <span class="math">\(\{ 0 .. \mathsf{MAX\_MONEY} \}\)</span>.</p>
</blockquote>
<h2 id="modificationsrelativetozip244zip-0244">Modifications relative to ZIP 244 <a href="#fn:12" id="fnref:12" title="see footnote" class="footnote"><sup>12</sup></a></h2>
<p>Relative to the sighash algorithm defined in ZIP 244, the sighash algorithm
that applies to v6 transactions differs by appending the encoding of
<span class="math">\(\mathsf{zip233\_amount}\)</span> to the Common Transaction Fields that are the input
to the digest in T.1: <code>header_digest</code> <a href="#fn:13" id="fnref:13" title="see footnote" class="footnote"><sup>13</sup></a>:</p>
<blockquote>
<pre><code> T.1f: zip233_amount (8-byte little-endian amount to remove from circulation)
</code></pre>
</blockquote>
<p>Note: If both this ZIP and ZIP 2002 are selected for inclusion in the same
Network Upgrade, then the ambiguity in ordering of the fields added by these
ZIPs would need to be resolved.</p>
<h2 id="applicability"><span class="section-heading">Applicability</span><span class="section-anchor"> <a rel="bookmark" href="#applicability"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<p>All of these changes apply identically to Mainnet and Testnet.</p>
<h1 id="rationale"><span class="section-heading">Rationale</span><span class="section-anchor"> <a rel="bookmark" href="#rationale"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h1>
<p>All technical decisions in this ZIP are balanced between the necessary
robustness of the NSM mechanics, and simplicity of implementation.</p>
<h2 id="newtransactionfieldforamounttoremovefromcirculation"><span class="section-heading">New transaction field for amount to remove from circulation</span><span class="section-anchor"> <a rel="bookmark" href="#newtransactionfieldforamounttoremovefromcirculation"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h2>
<p>An explicit value distinguishes the funds to remove from circulation from
the transaction fee. Explicitness also ensures any arithmetic flaws in any
implementations are more likely to be observed and caught immediately.</p>
<h1 id="deployment"><span class="section-heading">Deployment</span><span class="section-anchor"> <a rel="bookmark" href="#deployment"><img width="24" height="24" class="section-anchor" src="assets/images/section-anchor.png" alt=""></a></span></h1>
<p>This ZIP is proposed to activate with Network Upgrade 7. <a href="#fn:14" id="fnref:14" title="see footnote" class="footnote"><sup>14</sup></a></p>
<h1 id="references"><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></h1>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
<p><a href="https://www.rfc-editor.org/info/bcp14">Information on BCP 14 — &#8220;RFC 2119: Key words for use in RFCs to Indicate Requirement Levels&#8221; and &#8220;RFC 8174: Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words&#8221;</a> <a href="#fnref:1" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="zip-0200">ZIP 200: Network Upgrade Mechanism</a> <a href="#fnref:2" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="protocol/protocol.pdf">Zcash Protocol Specification, Version 2024.5.1 [NU6] or later</a> <a href="#fnref:3" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="protocol/protocol.pdf#networks">Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 3.12: Mainnet and Testnet</a> <a href="#fnref:4" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="protocol/protocol.pdf#constants">Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 5.3: Constants</a> <a href="#fnref:5" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p><a href="zip-0234">ZIP 234: Network Sustainability Mechanism: Issuance Smoothing</a> <a href="#fnref:6" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p><a href="zip-0235">ZIP 235: Remove 60% of Transaction Fees From Circulation</a> <a href="#fnref:7" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p><a href="protocol/protocol.pdf#transactions">Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 3.4: Transactions And Treestates</a> <a href="#fnref:8" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:9">
<p><a href="zip-0230">ZIP 230: Version 6 Transaction Format</a> <a href="#fnref:9" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:10">
<p><a href="zip-0230#transaction-format">ZIP 230: Version 6 Transaction Format. Section &#8216;Transaction Format&#8217;</a> <a href="#fnref:10" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:11">
<p><a href="protocol/protocol.pdf#txnconsensus">Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 7.1.2 Transaction Consensus Rules</a> <a href="#fnref:11" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:12">
<p><a href="zip-0244">ZIP 244: Transaction Identifier Non-Malleability</a> <a href="#fnref:12" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:13">
<p><a href="zip-0244#t-1-header-digest">ZIP 244: Transaction Identifier Non-Malleability. Section T.1: header_digest</a> <a href="#fnref:13" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
<li id="fn:14">
<p><a href="zip-0254">ZIP 254: Deployment of the NU7 Network Upgrade</a> <a href="#fnref:14" title="return to body" class="reversefootnote">&#160;&#8617;&#xfe0e;</a></p>
</li>
</ol>
</div>
</body>
</html>