zips/zip-0214.rst

351 lines
14 KiB
ReStructuredText

::
ZIP: 214
Title: Consensus rules for a Zcash Development Fund
Owners: Daira Hopwood <daira@electriccoin.co>
Status: Final
Category: Consensus
Created: 2020-02-28
License: MIT
Discussions-To: <https://forum.zcashcommunity.com/t/community-sentiment-polling-results-nu4-and-draft-zip-1014/35560>
Terminology
===========
The key words "MUST", "SHALL", "SHOULD", and "MAY" in this document are to be
interpreted as described in RFC 2119. [#RFC2119]_
The term "Zcash" in this document is to be interpreted as described in the
Zcash Trademark Donation and License Agreement ([#trademark]_ or successor
agreement).
The term "network upgrade" in this document is to be interpreted as
described in ZIP 200 [#zip-0200]_ and the Zcash Trademark Donation and License
Agreement ([#trademark]_ or successor agreement).
The term "block subsidy" in this document is to be interpreted as described in
section 3.10 of the Zcash Protocol Specification [#protocol-subsidyconcepts]_.
The term "halving" in this document are to be interpreted as described in
sections 7.8 of the Zcash Protocol Specification [#protocol-subsidies]_.
The terms "Bootstrap Project" (or "BP"), "Electric Coin Company" (or "ECC"),
"Zcash Foundation" (or "ZF"), "Major Grants", "BP slice", "ZF slice", and
"MG slice" in this document are to be interpreted as described in ZIP 1014
[#zip-1014]_.
The terms "Testnet" and "Mainnet" are to be interpreted as described in
section 3.12 of the Zcash Protocol Specification [#protocol-networks]_.
"Canopy" is the code-name for the fifth Zcash network upgrade, also known as
Network Upgrade 4.
Abstract
========
This ZIP describes consensus rule changes interpreting the proposed structure of
the Zcash Development Fund, which is to be enacted in Network Upgrade 4 and last
for 4 years.
Applicability
=============
This ZIP concerns the Zcash Mainnet and Testnet, and is not intended to be
applicable to other block chains using Zcash technology.
Motivation
==========
Motivation for the Zcash Development Fund itself is considered in ZIP 1014
[#zip-1014]_, which gives a high-level description of the intended structure of
the fund.
An important motivation for describing the consensus rules in a separate ZIP is
to avoid making unintended changes to ZIP 1014, which has already been agreed
between ECC, ZF, and the Zcash community. This facilitates critically assessing
whether the consensus rule changes accurately reflect the intent of ZIP 1014.
Requirements
============
The primary requirement of this ZIP is to make changes to consensus rules necessary
and sufficient to implement the intent of ZIP 1014.
The Zcash Development Fund distributes funding in ZEC obtained from block subsidies
on Mainnet. This ZIP should also specify corresponding rules, addresses, and
activation height for Testnet, in order to allow testing and auditing of the design
and implementation within sufficient lead time before activation on Mainnet.
Non-requirements
================
This ZIP is not required to enforce provisions of ZIP 1014 that fall outside what
is implementable by Zcash consensus rules.
Specification
=============
The Blossom network upgrade changed the height of the first halving to block height
1046400 [#zip-0208]_, as a consequence of reducing the block target spacing from
150 seconds to 75 seconds.
Since ZIP 1014 specifies that the Zcash Development Fund starts at the first halving,
the activation height of Canopy on Mainnet therefore SHALL be 1046400.
ZIP 207 [#zip-0207]_ SHALL be activated in Canopy.
The following funding streams are defined for Mainnet:
================= =========== ============= ============== ============
Stream Numerator Denominator Start height End height
================= =========== ============= ============== ============
``FS_ZIP214_BP`` 7 100 1046400 2726400
``FS_ZIP214_ZF`` 5 100 1046400 2726400
``FS_ZIP214_MG`` 8 100 1046400 2726400
================= =========== ============= ============== ============
As specified in [#zip-0207]_, a funding stream is active for a span of blocks
that includes the block at its start height, but excludes the block at its end
height.
The following funding streams are defined for Testnet:
================= =========== ============= ============== ============
Stream Numerator Denominator Start height End height
================= =========== ============= ============== ============
``FS_ZIP214_BP`` 7 100 1028500 2796000
``FS_ZIP214_ZF`` 5 100 1028500 2796000
``FS_ZIP214_MG`` 8 100 1028500 2796000
================= =========== ============= ============== ============
Notes:
* The block heights of halvings are different between Testnet and Mainnet, as a
result of different activation heights for the Blossom network upgrade (which
changed the block target spacing). The end height of these funding streams
corresponds to the second halving on each network.
* On Testnet, the activation height of Canopy will be before the first halving.
Therefore, the consequence of the above rules for Testnet is that the amount sent
to each Zcash Development Fund recipient address will initially (before Testnet
block height 1116000) be double the number of currency units as the corresponding
initial amount on Mainnet. This reduces to the same number of currency units as on
Mainnet, from Testnet block heights 1116000 (inclusive) to 2796000 (exclusive).
Dev Fund Recipient Addresses
----------------------------
For each of Testnet and Mainnet, before deploying this ZIP in a node implementation
with the activation height set for that network, each of the parties (ECC on behalf
of BP; and ZF) SHALL generate sequences of recipient addresses to be used for each
stream in each funding period:
* ECC SHALL generate the addresses for the ``FS_ZIP214_BP`` funding stream, which on
Mainnet corresponds to the **BP slice**;
* ZF SHALL generate the addresses for the ``FS_ZIP214_ZF`` and ``FS_ZIP214_MG``
funding streams, which on Mainnet correspond to the **ZF slice** and **MG slice**
respectively.
Within each stream, the addresses MAY be independent, or MAY be repeated between
funding periods. Each party SHOULD take account of operational security issues
associated with potential compromise of the associated spending keys.
Funds sent to each Mainnet funding stream SHALL be governed by all requirements on
the corresponding slice specified in ZIP 1014 [#zip-1014]_.
No requirements are imposed on the use of funds sent to Testnet funding streams.
Direct-grant option
'''''''''''''''''''
ZIP 1014 specifies a "direct-grant option" by which, if agreed upon by both ECC
and ZF before Canopy activation, some portion of the **MG slice** may be directly
assigned to the grantee(s), rather than accepted and disbursed by ZF. [#zip-1014]_
The funding stream mechanism allows for this option by adding a funding stream
corresponding to each direct grantee, with addresses generated by ZF. In this case
the total value of funding streams assigned to direct grantees MUST be subtracted
from the value of the funding stream for the remaining **MG slice** (or, if all
Major Grants are direct, replace the funding stream for the **MG slice**).
For each network upgrade after Canopy requiring modifications to the set of direct
grantees, a separate ZIP SHOULD be published specifying those modifications.
Mainnet Recipient Addresses
---------------------------
::
FS_ZIP214_BP.AddressList[0..47] = [
"t3LmX1cxWPPPqL4TZHx42HU3U5ghbFjRiif",
"t3Toxk1vJQ6UjWQ42tUJz2rV2feUWkpbTDs",
"t3ZBdBe4iokmsjdhMuwkxEdqMCFN16YxKe6",
"t3ZuaJziLM8xZ32rjDUzVjVtyYdDSz8GLWB",
"t3bAtYWa4bi8VrtvqySxnbr5uqcG9czQGTZ",
"t3dktADfb5Rmxncpe1HS5BRS5Gcj7MZWYBi",
"t3hgskquvKKoCtvxw86yN7q8bzwRxNgUZmc",
"t3R1VrLzwcxAZzkX4mX3KGbWpNsgtYtMntj",
"t3ff6fhemqPMVujD3AQurxRxTdvS1pPSaa2",
"t3cEUQFG3KYnFG6qYhPxSNgGi3HDjUPwC3J",
"t3WR9F5U4QvUFqqx9zFmwT6xFqduqRRXnaa",
"t3PYc1LWngrdUrJJbHkYPCKvJuvJjcm85Ch",
"t3bgkjiUeatWNkhxY3cWyLbTxKksAfk561R",
"t3Z5rrR8zahxUpZ8itmCKhMSfxiKjUp5Dk5",
"t3PU1j7YW3fJ67jUbkGhSRto8qK2qXCUiW3",
"t3S3yaT7EwNLaFZCamfsxxKwamQW2aRGEkh",
"t3eutXKJ9tEaPSxZpmowhzKhPfJvmtwTEZK",
"t3gbTb7brxLdVVghSPSd3ycGxzHbUpukeDm",
"t3UCKW2LrHFqPMQFEbZn6FpjqnhAAbfpMYR",
"t3NyHsrnYbqaySoQqEQRyTWkjvM2PLkU7Uu",
"t3QEFL6acxuZwiXtW3YvV6njDVGjJ1qeaRo",
"t3PdBRr2S1XTDzrV8bnZkXF3SJcrzHWe1wj",
"t3ZWyRPpWRo23pKxTLtWsnfEKeq9T4XPxKM",
"t3he6QytKCTydhpztykFsSsb9PmBT5JBZLi",
"t3VWxWDsLb2TURNEP6tA1ZSeQzUmPKFNxRY",
"t3NmWLvZkbciNAipauzsFRMxoZGqmtJksbz",
"t3cKr4YxVPvPBG1mCvzaoTTdBNokohsRJ8n",
"t3T3smGZn6BoSFXWWXa1RaoQdcyaFjMfuYK",
"t3gkDUe9Gm4GGpjMk86TiJZqhztBVMiUSSA",
"t3eretuBeBXFHe5jAqeSpUS1cpxVh51fAeb",
"t3dN8g9zi2UGJdixGe9txeSxeofLS9t3yFQ",
"t3S799pq9sYBFwccRecoTJ3SvQXRHPrHqvx",
"t3fhYnv1S5dXwau7GED3c1XErzt4n4vDxmf",
"t3cmE3vsBc5xfDJKXXZdpydCPSdZqt6AcNi",
"t3h5fPdjJVHaH4HwynYDM5BB3J7uQaoUwKi",
"t3Ma35c68BgRX8sdLDJ6WR1PCrKiWHG4Da9",
"t3LokMKPL1J8rkJZvVpfuH7dLu6oUWqZKQK",
"t3WFFGbEbhJWnASZxVLw2iTJBZfJGGX73mM",
"t3L8GLEsUn4QHNaRYcX3EGyXmQ8kjpT1zTa",
"t3PgfByBhaBSkH8uq4nYJ9ZBX4NhGCJBVYm",
"t3WecsqKDhWXD4JAgBVcnaCC2itzyNZhJrv",
"t3ZG9cSfopnsMQupKW5v9sTotjcP5P6RTbn",
"t3hC1Ywb5zDwUYYV8LwhvF5rZ6m49jxXSG5",
"t3VgMqDL15ZcyQDeqBsBW3W6rzfftrWP2yB",
"t3LC94Y6BwLoDtBoK2NuewaEbnko1zvR9rm",
"t3cWCUZJR3GtALaTcatrrpNJ3MGbMFVLRwQ",
"t3YYF4rPLVxDcF9hHFsXyc5Yq1TFfbojCY6",
"t3XHAGxRP2FNfhAjxGjxbrQPYtQQjc3RCQD"
]
FS_ZIP214_ZF.AddressList[0..47] = ["t3dvVE3SQEi7kqNzwrfNePxZ1d4hUyztBA1"] * 48
FS_ZIP214_MG.AddressList[0..47] = ["t3XyYW8yBFRuMnfvm5KLGFbEVz25kckZXym"] * 48
(i.e. ``FS_ZIP214_ZF.AddressList`` and ``FS_ZIP214_MG.AddressList`` for Mainnet each
consist of 48 repetitions of the same address).
Testnet Recipient Addresses
---------------------------
::
FS_ZIP214_BP.AddressList[0..50] = [
"t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz",
"t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz",
"t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz",
"t26ovBdKAJLtrvBsE2QGF4nqBkEuptuPFZz",
"t2NNHrgPpE388atmWSF4DxAb3xAoW5Yp45M",
"t2VMN28itPyMeMHBEd9Z1hm6YLkQcGA1Wwe",
"t2CHa1TtdfUV8UYhNm7oxbzRyfr8616BYh2",
"t2F77xtr28U96Z2bC53ZEdTnQSUAyDuoa67",
"t2ARrzhbgcpoVBDPivUuj6PzXzDkTBPqfcT",
"t278aQ8XbvFR15mecRguiJDQQVRNnkU8kJw",
"t2Dp1BGnZsrTXZoEWLyjHmg3EPvmwBnPDGB",
"t2KzeqXgf4ju33hiSqCuKDb8iHjPCjMq9iL",
"t2Nyxqv1BiWY1eUSiuxVw36oveawYuo18tr",
"t2DKFk5JRsVoiuinK8Ti6eM4Yp7v8BbfTyH",
"t2CUaBca4k1x36SC4q8Nc8eBoqkMpF3CaLg",
"t296SiKL7L5wvFmEdMxVLz1oYgd6fTfcbZj",
"t29fBCFbhgsjL3XYEZ1yk1TUh7eTusB6dPg",
"t2FGofLJXa419A76Gpf5ncxQB4gQXiQMXjK",
"t2ExfrnRVnRiXDvxerQ8nZbcUQvNvAJA6Qu",
"t28JUffLp47eKPRHKvwSPzX27i9ow8LSXHx",
"t2JXWPtrtyL861rFWMZVtm3yfgxAf4H7uPA",
"t2QdgbJoWfYHgyvEDEZBjHmgkr9yNJff3Hi",
"t2QW43nkco8r32ZGRN6iw6eSzyDjkMwCV3n",
"t2DgYDXMJTYLwNcxighQ9RCgPxMVATRcUdC",
"t2Bop7dg33HGZx3wunnQzi2R2ntfpjuti3M",
"t2HVeEwovcLq9RstAbYkqngXNEsCe2vjJh9",
"t2HxbP5keQSx7p592zWQ5bJ5GrMmGDsV2Xa",
"t2TJzUg2matao3mztBRJoWnJY6ekUau6tPD",
"t29pMzxmo6wod25YhswcjKv3AFRNiBZHuhj",
"t2QBQMRiJKYjshJpE6RhbF7GLo51yE6d4wZ",
"t2F5RqnqguzZeiLtYHFx4yYfy6pDnut7tw5",
"t2CHvyZANE7XCtg8AhZnrcHCC7Ys1jJhK13",
"t2BRzpMdrGWZJ2upsaNQv6fSbkbTy7EitLo",
"t2BFixHGQMAWDY67LyTN514xRAB94iEjXp3",
"t2Uvz1iVPzBEWfQBH1p7NZJsFhD74tKaG8V",
"t2CmFDj5q6rJSRZeHf1SdrowinyMNcj438n",
"t2ErNvWEReTfPDBaNizjMPVssz66aVZh1hZ",
"t2GeJQ8wBUiHKDVzVM5ZtKfY5reCg7CnASs",
"t2L2eFtkKv1G6j55kLytKXTGuir4raAy3yr",
"t2EK2b87dpPazb7VvmEGc8iR6SJ289RywGL",
"t2DJ7RKeZJxdA4nZn8hRGXE8NUyTzjujph9",
"t2K1pXo4eByuWpKLkssyMLe8QKUbxnfFC3H",
"t2TB4mbSpuAcCWkH94Leb27FnRxo16AEHDg",
"t2Phx4gVL4YRnNsH3jM1M7jE4Fo329E66Na",
"t2VQZGmeNomN8c3USefeLL9nmU6M8x8CVzC",
"t2RicCvTVTY5y9JkreSRv3Xs8q2K67YxHLi",
"t2JrSLxTGc8wtPDe9hwbaeUjCrCfc4iZnDD",
"t2Uh9Au1PDDSw117sAbGivKREkmMxVC5tZo",
"t2FDwoJKLeEBMTy3oP7RLQ1Fihhvz49a3Bv",
"t2FY18mrgtb7QLeHA8ShnxLXuW8cNQ2n1v8",
"t2L15TkDYum7dnQRBqfvWdRe8Yw3jVy9z7g"
]
FS_ZIP214_ZF.AddressList[0..50] = ["t27eWDgjFYJGVXmzrXeVjnb5J3uXDM9xH9v"] * 51
FS_ZIP214_MG.AddressList[0..50] = ["t2Gvxv2uNM7hbbACjNox4H6DjByoKZ2Fa3P"] * 51
(i.e. ``FS_ZIP214_ZF.AddressList`` and ``FS_ZIP214_MG.AddressList`` for Testnet each
consist of 51 repetitions of the same address).
Rationale
=========
The rationale for ZF generating the addresses for the ``FS_ZIP214_MG`` funding
stream is that ZF is the financial recipient of the **MG slice** as specified
in ZIP 1014. [#zip-1014]_
Generation of recipient addresses for Testnet is specified to be done by the
same parties as on Mainnet, in order to allow practicing each party's security
procedures.
It was judged to be unnecessary to have a mechanism to update funding stream
definitions (in case of security breach or changes to direct grant recipients)
other than at network upgrades.
Deployment
==========
This proposal is intended to be deployed with Canopy. [#zip-0251]_
References
==========
.. [#RFC2119] `RFC 2119: Key words for use in RFCs to Indicate Requirement Levels <https://www.rfc-editor.org/rfc/rfc2119.html>`_
.. [#protocol] `Zcash Protocol Specification, Version 2021.2.16 or later <protocol/protocol.pdf>`_
.. [#protocol-subsidyconcepts] `Zcash Protocol Specification, Version 2021.2.16. Section 3.10: Block Subsidy, Funding Streams, and Founders' Reward <protocol/protocol.pdf#subsidyconcepts>`_
.. [#protocol-networks] `Zcash Protocol Specification, Version 2021.2.16. Section 3.12: Mainnet and Testnet <protocol/protocol.pdf#networks>`_
.. [#protocol-subsidies] `Zcash Protocol Specification, Version 2021.2.16. Section 7.8: Calculation of Block Subsidy, Funding Streams, and Founders' Reward <protocol/protocol.pdf#subsidies>`_
.. [#trademark] `Zcash Trademark Donation and License Agreement <https://electriccoin.co/wp-content/uploads/2019/11/Final-Consolidated-Version-ECC-Zcash-Trademark-Transfer-Documents-1.pdf>`_
.. [#osd] `The Open Source Definition <https://opensource.org/osd>`_
.. [#zip-0200] `ZIP 200: Network Upgrade Mechanism <zip-0200.rst>`_
.. [#zip-0207] `ZIP 207: Funding Streams <zip-0207.rst>`_
.. [#zip-0208] `ZIP 208: Shorter Block Target Spacing <zip-0208.rst>`_
.. [#zip-0251] `ZIP 251: Deployment of the Canopy Network Upgrade <zip-0251.rst>`_
.. [#zip-1014] `ZIP 1014: Establishing a Dev Fund for ECC, ZF, and Major Grants <zip-1014.rst>`_