ZIP: 214
Title: Consensus rules for a Zcash Development Fund
Owners: Daira-Emma Hopwood <daira-emma@electriccoin.co>
        Kris Nuttycombe <kris@nutty.land>
Status: [Revision 0] Final, [Revision 1] Implemented (zcashd and zebrad)
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 BCP 14 1 when, and only when, they appear in all capitals.

The term "Zcash" in this document is to be interpreted as described in the Zcash Trademark Donation and License Agreement (6 or successor agreement) while that agreement is in effect. On termination of that agreement, the term "Zcash" will refer to the continuations of the same Mainnet and Testnet block chains as determined by social consensus.

The term "network upgrade" in this document is to be interpreted as described in ZIP 200 8 and the Zcash Trademark Donation and License Agreement (6 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 3.

The term "halving" in this document are to be interpreted as described in sections 7.8 of the Zcash Protocol Specification 5.

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 13.

The terms "Zcash Community Grants (or "ZCG") and "Financial Privacy Foundation" (or "FPF") in this document are to be interpreted as described in ZIP 1015 14.

The terms "Testnet" and "Mainnet" are to be interpreted as described in section 3.12 of the Zcash Protocol Specification 4.

"Canopy" is the code-name for the fifth Zcash network upgrade, also known as Network Upgrade 4.

"NU6" is the code-name for the seventh Zcash network upgrade, also known as Network Upgrade 6.

Abstract

Revision 0 of 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.

Revision 1 of this ZIP describes consensus rule changes related to funding of Zcash development via block rewards, to be enacted at Network Upgrade 6 and lasting for 1 year.

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 ZIPs 1014 13 and 1015 14, which give high-level descriptions of the intended structure of the funds.

An important motivation for describing the consensus rules in a separate ZIP is to avoid making unintended changes to ZIPs 1014 and 1015, which have already been agreed between ECC, ZF, and the Zcash community. This facilitates critically assessing whether the consensus rule changes accurately reflect the intent of ZIPs 1014 and 1015.

Requirements

The primary requirement of this ZIP is to make changes to consensus rules necessary and sufficient to implement the intent of ZIPs 1014 and 1015.

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 or ZIP 1015 that fall outside what is implementable by Zcash consensus rules.

Specification

Revisions

  • Revision 0: The initial version of this specification, as agreed upon by the Zcash community in ZIP 1014 13.
  • Revision 1: Funding streams defined to start at Zcash's second halving, and last for one year, as agreed upon in ZIP 1015 14.

Activation

The Blossom network upgrade changed the height of the first halving to block height 1046400 10, 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.

Revision 0 of ZIP 207 9 SHALL be activated in Canopy.

Since ZIP 1015 specifies that the specified funding streams start at the second halving, the activation height of NU6 on Mainnet therefore SHALL be 2726400.

Revision 1 of ZIP 207 9 SHALL be activated in NU6.

As specified in 9, 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.

Funding Streams

As of Revision 0, 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 of Revision 0, 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

As of Revision 1, the following additional streams are defined for Mainnet:

Stream Numerator Denominator Start height End height
FS_FPF_ZCG 8 100 2726400 3146400
FS_DEFERRED 12 100 2726400 3146400

As of Revision 1, the following additional streams are defined for Testnet:

Stream Numerator Denominator Start height End height
FS_FPF_ZCG 8 100 2976000 3396000
FS_DEFERRED 12 100 2976000 3396000

Notes for Revision 0:

  • 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).

Notes for Revision 1:

  • The new funding streams begin at the second halving for Mainnet, but the second halving on Testnet occurred prior to the introduction of the new funding streams. For both new funding streams on each network, the associated duration corresponds to approximately one year's worth of blocks.

Dev Fund Recipient Addresses for Revision 0

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 13.

No requirements are imposed on the use of funds sent to Testnet funding streams.

Direct-grant option

ZIP 1014 specified 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. 13 However, this option was never taken up.

Mainnet Recipient Addresses for Revision 0

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).

Mainnet Recipient Addresses for Revision 1

FS_FPF_ZCG.AddressList[0..11] = ["t3cFfPt1Bcvgez9ZbMBFWeZsskxTkPzGCow"] * 12

Testnet Recipient Addresses for Revision 0

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).

Testnet Recipient Addresses for Revision 1

FS_FPF_ZCG.AddressList[0..12] = ["t2HifwjUj9uyxr9bknR8LFuQbc98c3vkXtu"] * 13

Rationale for Revision 0

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. 13

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

Revision 0 of this proposal was deployed with Canopy. 11 Revision 1 of this proposal is intended to be deployed with NU6. 12

References

1 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"
2 Zcash Protocol Specification, Version 2024.5.1 or later
3 Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 3.10: Block Subsidy, Funding Streams, and Founders' Reward
4 Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 3.12: Mainnet and Testnet
5 Zcash Protocol Specification, Version 2024.5.1 [NU6]. Section 7.8: Calculation of Block Subsidy, Funding Streams, and Founders' Reward
6 Zcash Trademark Donation and License Agreement
7 The Open Source Definition
8 ZIP 200: Network Upgrade Mechanism
9 ZIP 207: Funding Streams
10 ZIP 208: Shorter Block Target Spacing
11 ZIP 251: Deployment of the Canopy Network Upgrade
12 ZIP 253: Deployment of the NU6 Network Upgrade
13 ZIP 1014: Establishing a Dev Fund for ECC, ZF, and Major Grants
14 ZIP 1015: Block Reward Allocation for Non-Direct Development Funding