zip-0237
ZIP: 237
Title: Network Sustainability Mechanism: Halving-Preserving Issuance
Owners: Judah Caruso <judah@shieldedlabs.net>
Original-Authors: Nathan Wilcox
Jason McGee
Zooko Wilcox
Mark Henderson
Tomek Piotrowski
Mariusz Pilarek
Paul Dann
Credits: Conrado Gouvea
Status: Proposed
Category: Consensus
Created: 2026-08-19
License: BSD-2-Clause
Discussions-To: <https://github.com/zcash/zips/issues/1353>
Pull-Request: <https://github.com/zcash/zips/pull/1354>
Terminology
The key words "MUST", "MUST NOT", "SHALL", 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 "network upgrade" in this document is to be interpreted as described in ZIP 200. 2
The character § is used when referring to sections of the Zcash Protocol Specification. 3
The terms "Mainnet" and "Testnet" are to be interpreted as described in § 3.12 ‘Mainnet and Testnet’. 4
The symbol "" means multiplication, and and mean the largest integer and the smallest integer , as described in § 2 ‘Notation’. 5
"ZEC/TAZ" refers to the native currency of Zcash on a given network, i.e. ZEC on Mainnet and TAZ on Testnet.
Let be as defined in 6, and be as defined in ZIP 218. 7
, as defined in § 5.3 ‘Constants’ 8, 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.
"Issued Supply" - The Issued Supply at a given height of a block chain is the total ZEC/TAZ value in all chain value pool balances at that height, as calculated by defined in § 4.17 ‘Chain Value Pool Balances’. 9
"Scheduled Block Subsidy" - The block subsidy given by the existing halving schedule, i.e. as defined in § 7.8 ‘Calculating Block Subsidy, Funding Streams, Lockbox Disbursement, and Founders' Reward’ 10 prior to this ZIP, renamed in the Specification below.
"NSM Value Balance" - The total ZEC/TAZ that has been removed from circulation and not yet reissued: funds removed via a registered mechanism, plus block subsidy and fees left unclaimed by coinbase transactions prior to NU6 11. It is not part of the Issued Supply. is defined in the Specification below.
Abstract
This ZIP proposes a change to how nodes calculate the block subsidy.
The step function around the 4-year halving intervals inherited from Bitcoin is retained unchanged. In addition, from the NSM reissuance height onward, each block issues a fixed portion of the current NSM Value Balance (the ZEC/TAZ that has been removed from circulation or left unclaimed), so that such funds are reissued along a smooth curve on top of the existing schedule.
The new issuance scheme is identical to the existing schedule whenever the NSM Value Balance is zero. Total issuance never exceeds the existing supply cap (which is below ), but falls slightly short of it, because the NSM does not reissue the shortfall that the rounding of the post-NU7 block subsidy introduces 12. Because the balance is seeded at NU7 with historical unclaimed value, it is positive at activation even if no funds are removed by a deployed removal mechanism. This ZIP is proposed as an alternative to ZIP 234 13, from which its structure and much of its text are adapted.
Motivation
The current block reward halving schedule is fixed and does not provide a way to “recycle” funds removed from circulation (for example via ZIP 235 or ZIP 233) into future issuance. Once scheduled issuance ends, the network becomes reliant on transaction fees for the security budget.
Key Objectives:
- We want to introduce an automated mechanism that allows users of the network to contribute to the long-term sustainability of the network.
- We want to enable ZEC that has been removed from circulation to be reissued in the future to benefit network sustainability.
- We want to retain the existing ZEC supply cap of 21 million, as an upper bound on issuance.
- We want the issuance rate to remain identical to the historical rate for Zcash (and before that, Bitcoin), including the 4-year halving structure, whenever the NSM Value Balance is zero.
- We want issuance to be easy for all network users to understand and predict.
- We want to preserve Zcash's existing 4-year halving schedule.
This ZIP is an alternative to ZIP 234 13 that differs only in Key Objective 6. ZIP 234 replaces the halving schedule with a smooth curve in order to reissue funds removed from circulation; this ZIP shows that reissuance does not require that change. The halving schedule is a long-standing, widely understood property of Zcash on which block subsidy recipients and the wider community rely, and this ZIP allows the question of whether to change it to be decided on its own merits.
This NSM-based issuance scheme preserves the core aspects of Zcash's issuance policy, the halving schedule, and the 21-million-coin cap. Critically, it establishes the intended path for ZEC that has been voluntarily removed from circulation, as well as transaction fees that are deliberately redirected into the reserve: these funds are automatically and algorithmically reissued over future block subsidies, ensuring they benefit the network's long-term security.
Privacy Implications
The NSM Value Balance and additional block subsidy are calculated from already-public values: the initial balance, amounts removed from circulation, and prior reissuance. These calculations disclose no additional transaction information.
Requirements
Reissuing funds removed from circulation while preserving halvings is possible using an exponential decay formula applied to the NSM Value Balance that satisfies the following requirements:
- The issuance can be summarized into a reasonably simple explanation.
- If the NSM Value Balance is zero, block subsidies are identical to the existing halving schedule.
- From onward, if the NSM Value Balance is greater than 0, then the additional block subsidy must be non-zero, so that funds removed from circulation are eventually fully reissued.
- For any halving period, the additional block subsidies paid out are approximately equal to half of the NSM Value Balance at the beginning of that period, if no ZEC/TAZ is removed from circulation during it.
- Decrease the short-term impact of the deployment of this ZIP on block subsidy recipients, and minimize the potential reputation risk to Zcash of changing the block subsidy amount.
Specification
Mechanisms for removal from circulation
The following mechanisms for removal from circulation are part of the consensus rules as of NU7 14:
| Mechanism | Source | Defining ZIP |
|---|---|---|
| Transaction fees | ZIP 235 15 |
Additional mechanisms for removal from circulation MAY be added to this list via modifications to this ZIP specified in other ZIPs. Such modifications MUST specify their source as a function solely dependent on height.
Let be the total value removed from circulation in the block at . It is the sum of all values in the "Source" column above.
Parameters
the number of blocks in a halving period at : if as defined in ZIP 218 7, otherwise .
This is with , the value specified by ZIP 234 13, and with . Since is not before NU7 activation, only the latter value is used by . See the BLOCK_SUBSIDY_FRACTION section below.
the block subsidy and fees left unclaimed by coinbase transactions before NU6, in zatoshi, which seeds the NSM Value Balance at NU7 activation. Since ZIP 236 11 requires coinbase transactions to claim their full value, this is the fixed amount
for any from the last pre-NU6 height up to . The network-specific values are:
| Network | Last pre-NU6 height | (zatoshi) |
|---|---|---|
| Mainnet | 2,726,399 | 36,858,445,520 (368.58445520 ZEC) |
| Testnet | 2,975,999 | 55,768,414,957 (557.68414957 TAZ) |
These values are derived as follows, in zatoshi. The scheduled issuance is calculated from § 7.8; is the sum of the transparent, Sprout, Sapling and Orchard chain value pool balances at (the deferred development fund and Ironwood chain value pool balances are zero at ), which can be checked against the chain value pool balances that a full node reports at that height.
| Network | ||
|---|---|---|
| Mainnet | 1,575,000,000,000,000 | 1,574,963,141,554,480 |
| Testnet | 1,603,125,000,000,000 | 1,603,069,231,585,043 |
the height at which reissuance begins on the relevant network, calculated in NSM reissuance height below. It is named in the NU7 deployment ZIP 14.
NSM reissuance height
The reissuance height is determined from the scheduled issuance curve and a reference reserve of , without accounting for amounts removed from circulation or the positive historical seed. This makes it independent of transaction activity and the actual NSM Value Balance.
For each network, let and let be after applying ZIP 218 7 at . Let be cumulative scheduled issuance through height , excluding additional NSM subsidies and amounts removed from circulation. Let and be the first heights at which the ZIP 218 function equals 3 and 4, respectively.
SHALL be the first height with for which
Here 1375 is the numerator of after NU7 activation. The strict inequality selects the first block where the rounded reference NSM subsidy is below the scheduled block subsidy. The ceiling is the same rounding rule used for ; the reference balance is used only to select the deployment height. NU7 activation heights SHALL be chosen so that this height exists before . The NU7 deployment ZIP 14 specifies the resulting height for each network.
The value can be calculated without testing every block. Set , , , and . Since is constant before , the first qualifying height is
For the expected case in which lies between the second and third pre-NU7 halvings, the ZIP 218 third halving occurs at , where is 4,406,400 on Mainnet and 4,476,000 on Testnet. Let be the corresponding second halving height in the table below. In this range, , , and zatoshi. Consequently throughout the range. Including the one-block offset from to gives :
| Network | Second halving | Third halving after NU7 | Reissuance height |
|---|---|---|---|
| Mainnet | 2,726,400 | ||
| Testnet | 2,796,000 |
For example, the Mainnet activation height 14 gives a third halving at 6,132,390 and a reissuance height of 8,939,664. At height 8,939,663 the rounded reference subsidy is 26,041,667 zatoshi, above the scheduled 26,041,666; at 8,939,664 it is 26,041,663, below it.
Changes to the Zcash Protocol Specification
In § 7.8 ‘Calculating Block Subsidy, Funding Streams, Lockbox Disbursement, and Founders' Reward’ 10:
Apply the changes of ZIP 218 7 first. Then rename the resulting function to , leaving its definition unchanged.
Add the following definition, where is as defined in § 4.17 ‘Chain Value Pool Balances’ 9 below:
0, & \text{if } \mathsf{height} < \mathsf{DEPLOYMENT\_BLOCK\_HEIGHT} \\ \mathsf{ceiling}(\mathsf{BLOCK\_SUBSIDY\_FRACTION}(\mathsf{height}) \cdot \mathsf{NSMValueBalance}(\mathsf{height} - 1)), & \text{otherwise} \end{cases} ParseError: Expected 'EOF', got '&' at position 4: 0, &̲ \text{if } \ma…Define as:
Add and to § 5.3 ‘Constants’ 8, and and , as given under Parameters above, to § 7.8.
All other uses of in the protocol specification (, and hence , , and the total input value of a coinbase transaction in § 7.1.2 16) are unchanged and refer to the redefined function; in particular, funding streams receive their fixed percentage of the total (scheduled plus additional) block subsidy. Note that now depends on the NSM Value Balance after block , and not only on .
In § 4.17 ‘Chain Value Pool Balances’ 9, add the following definition. Let be the NU7 activation height on the relevant network. 14
0, & \text{if } \mathsf{height} < \mathsf{NU7ActivationHeight} - 1 \\ \mathsf{INITIAL\_NSM\_VALUE\_BALANCE}, & \text{if } \mathsf{height} = \mathsf{NU7ActivationHeight} - 1 \\ \mathsf{NSMValueBalance}(\mathsf{height} - 1) - \mathsf{AdditionalBlockSubsidy}(\mathsf{height}) + \mathsf{NSMValueRemoved}(\mathsf{height}), & \text{otherwise} \end{cases} ParseError: Expected 'EOF', got '&' at position 4: 0, &̲ \text{if } \ma…The NSM Value Balance is tracked as consensus state alongside the chain value pools. It is not a spendable chain value pool and is not included in : it counts ZEC/TAZ that is not in circulation, consistent with ZIP 233 17, which subtracts removed funds from the issued supply. Reissuance moves value from the NSM Value Balance into the Issued Supply through the block subsidy.
Add the consensus rule:
[NU7 onward] If would become negative in the block chain created as a result of accepting a block at , then all nodes MUST reject the block as invalid.
In § 3.10 ‘Block Subsidy, Funding Streams, and Founders' Reward’ 18, add:
[NU7 onward] From , the block subsidy also includes value reissued from the NSM Value Balance (§ 4.17), and so depends on the NSM Value Balance after the preceding block as well as on the block height.
In § 3.4 ‘Transactions and Treestates’ 19, where the remaining value in the transparent transaction value pool of coinbase transactions in blocks prior to NU6 is said to be destroyed, say instead that it is left unclaimed and is not added to any chain value pool, and add:
[NU7 onward] This value is included in , and so is reissued as specified in § 7.8.
Applicability
All of these changes apply identically to Mainnet and Testnet.
Rationale
- Leaving the existing schedule in place and applying an exponential decay function only to the NSM Value Balance satisfies Requirements 1, 2 and 4 above.
- No reissuance occurs between NU7 activation and , so the NSM Value Balance accumulates during that interval. The reissuance height is chosen as described in NSM reissuance height and ZIP 259 14.
- We round up to the next zatoshi to satisfy Requirement 3 above from onward. Since and the NSM Value Balance is a non-negative integer number of zatoshi, the additional subsidy never exceeds the balance it is calculated from, so from NU7 activation the sum of the Issued Supply and the NSM Value Balance changes by exactly the Scheduled Block Subsidy each block. Issuance therefore never exceeds the supply cap. The change in NU7 reduces the current cap by about 0.50 ZEC on Mainnet (to about 0.68 ZEC below ), because ZIP 218's rounding lowers the Scheduled Block Subsidy and the NSM does not reissue that shortfall 12.
- By the previous point the NSM Value Balance can never become negative unless an implementation is in error. The consensus rule above makes such an error a block-validity failure rather than silently clamping the value.
- The issuance formula depends only on and a single fraction, making it simple to implement, explain, and verify.
Rationale for Parameters
Because the formula reduces to the existing schedule whenever the NSM Value Balance is zero, the rule itself places no constraint on the deployment height. The only change at deployment is the reissuance of the NSM Value Balance at that point ( plus anything removed from circulation since NU7 activation) at per block. For example, if a total of 100,000 ZEC were removed from circulation between NU7 activation and , then at the issuance would be larger than the Scheduled Block Subsidy by , which equals ZEC under the post-NU7 schedule. This example is chosen to demonstrate that a very large amount removed from circulation (much larger than expected) would elevate issuance by a relatively small amount, satisfying Requirement 5.
Since NU6, coinbase transactions are required to claim the full miner subsidy and fees 11, so the part of the NSM Value Balance not attributable to funds removed from circulation is a fixed historical amount, : on Mainnet 368.58445520 ZEC, reissued from deployment at an initial rate of about 0.00005 ZEC per block under ZIP 218.
BLOCK_SUBSIDY_FRACTION
Let , i.e. the NSM Value Balance should halve over the same period as the block subsidy does. The fraction is therefore stated as a function of the halving schedule rather than as a constant, so that it keeps this property whatever the block target spacing:
Solving gives a fraction of approximately . is rounded up to a multiple of , so that on the 75-second schedule the numerator is exactly the 4126 of ZIP 234 13, which satisfies the approximation within . ZIP 218 7 does not change ; it defines a separate for its 25-second blocks, and with that interval the numerator is 1375, which is the value applied from : , within . A numerator fixed at 4126 would instead halve the balance about every 1.33 years under ZIP 218, because it would apply three times as often.
Without rounding, this implies that after one halving period approximately half of the NSM Value Balance would have been issued as additional block subsidies. Rounding each subsidy up to a zatoshi increases the amount issued by less than one zatoshi per block relative to that curve. The approximation is therefore close for large balances, but not for small ones: a balance of 1 zatoshi is issued in the next block rather than halving over a halving period. More generally, once the rounded additional subsidy is 1 zatoshi, one zatoshi is issued per block until the balance reaches zero.
The largest possible value of the NSM Value Balance is less than , in the theoretically possible case that all issued funds are removed from circulation. If this happened, the largest interim product in the block subsidy calculation would be less than under ZIP 218 7.
This uses at most 61.33 bits, below the 63-bit limit for signed two's complement 64-bit integer amount types.
The numerator could be brought closer to the limit by using a larger denominator, but the difference in the amount issued would be very small. So we chose a power-of-10 denominator for simplicity.
Appendix: Considerations for the Future
Future protocol changes may not increase the payout rate of the NSM Value Balance to a reasonable approximation beyond the one-halving-period half-life constraint.
Deployment
This ZIP is proposed to activate with Network Upgrade 7 14, with reissuance beginning at . It MUST NOT be deployed together with ZIP 234. 13 It does not depend on ZIP 233 ("NSM: Removing Funds From Circulation" 17): funds removed from circulation by ZIP 233, or by any other mechanism, are credited to the NSM Value Balance if and when that mechanism is deployed. This ZIP requires ZIP 218. 7
Reference implementation
References
Footnotes
-
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" ↩
-
Zcash Protocol Specification, Version 2026.8.0 [NU6.3] or later ↩
-
Zcash Protocol Specification, Version 2026.8.0 [NU6.3]. Section 3.12: Mainnet and Testnet ↩
-
Zcash Protocol Specification, Version 2026.8.0 [NU6.3]. Section 2: Notation ↩
-
Zcash Protocol Specification, Version 2026.8.0 [NU6.3]. Section 7.7.3: Difficulty Adjustment ↩
-
Zcash Protocol Specification, Version 2026.8.0 [NU6.3]. Section 5.3: Constants ↩ ↩2
-
Zcash Protocol Specification, Version 2026.8.0 [NU6.3]. Section 4.17: Chain Value Pool Balances ↩ ↩2 ↩3
-
Zcash Protocol Specification, Version 2026.8.0 [NU6.3]. Section 7.8: Calculating Block Subsidy, Funding Streams, Lockbox Disbursement, and Founders' Reward ↩ ↩2
-
ZIP 218: 25-second Block Target Spacing — Rationale for altering the issuance curve ↩ ↩2
-
ZIP 234: Network Sustainability Mechanism: Issuance Smoothing ↩ ↩2 ↩3 ↩4 ↩5
-
ZIP 259: Deployment of the NU7 Network Upgrade ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Zcash Protocol Specification, Version 2026.8.0 [NU6.3]. Section 7.1.2: Transaction Consensus Rules ↩
-
ZIP 233: Network Sustainability Mechanism: Removing Funds From Circulation ↩ ↩2
-
Zcash Protocol Specification, Version 2026.8.0 [NU6.3]. Section 3.10: Block Subsidy, Funding Streams, and Founders' Reward ↩
-
Zcash Protocol Specification, Version 2026.8.0 [NU6.3]. Section 3.4: Transactions and Treestates ↩
-
Zebra PR 11454: feat(chain, consensus, state, rpc): add halving-preserving NU7 issuance ↩
-
Zebra PR 11529: feat(consensus)!: implement NU7 spacing, funding schedules, and shielded limits ↩
-
Zebra PR 11530: feat(nsm)!: enable merged issuance and fee accounting ↩