mirror of https://github.com/zcash/zips.git
262 lines
15 KiB
HTML
262 lines
15 KiB
HTML
<!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 <jason@shieldedlabs.net>
|
||
Zooko Wilcox <zooko@shieldedlabs.net>
|
||
Mark Henderson <mark@shieldedlabs.net>
|
||
Tomek Piotrowski <tomek@eiger.co>
|
||
Mariusz Pilarek <mariusz@eiger.co>
|
||
Paul Dann <paul@eiger.co>
|
||
Original-Authors: Nathan Wilcox
|
||
Credits:
|
||
Status: Draft
|
||
Category: Consensus / Ecosystem
|
||
Created: 2023-08-16
|
||
License: BSD-2-Clause
|
||
Discussions-To: <<a href="https://github.com/zcash/zips/issues/922">https://github.com/zcash/zips/issues/922</a>>
|
||
</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 “MUST” 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 “network upgrade” 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 “Mainnet” and “Testnet” 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>“ZEC/TAZ” refers to the native currency of Zcash on a given network, i.e.
|
||
ZEC on Mainnet and TAZ on Testnet.</p>
|
||
|
||
<p>“Block Subsidy” - The algorithmic issuance of ZEC/TAZ on block creation, as
|
||
defined by consensus. This is split between the miner and Funding Streams.</p>
|
||
|
||
<p>“Issuance” - 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 “headroom” 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 “transparent transaction value pool” 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 — “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="#fnref:1" title="return to body" class="reversefootnote"> ↩︎</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"> ↩︎</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"> ↩︎</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"> ↩︎</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"> ↩︎</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"> ↩︎</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"> ↩︎</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"> ↩︎</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"> ↩︎</a></p>
|
||
</li>
|
||
|
||
<li id="fn:10">
|
||
<p><a href="zip-0230#transaction-format">ZIP 230: Version 6 Transaction Format. Section ‘Transaction Format’</a> <a href="#fnref:10" title="return to body" class="reversefootnote"> ↩︎</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"> ↩︎</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"> ↩︎</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"> ↩︎</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"> ↩︎</a></p>
|
||
</li>
|
||
|
||
</ol>
|
||
</div>
|
||
</body>
|
||
</html>
|