Skip to content

Add draft-judah-nsm-halving-preserving-issuance: Halving-preserving variant of ZIP 234 - #1354

Open
judah-caruso wants to merge 2 commits into
zcash:mainfrom
ShieldedLabs:draft-halving-preserving-reissuance
Open

Add draft-judah-nsm-halving-preserving-issuance: Halving-preserving variant of ZIP 234#1354
judah-caruso wants to merge 2 commits into
zcash:mainfrom
ShieldedLabs:draft-halving-preserving-reissuance

Conversation

@judah-caruso

@judah-caruso judah-caruso commented Aug 21, 2026

Copy link
Copy Markdown

This PR adds an alternative to ZIP 234 that keeps the halving schedule unchanged. The text was adapted from ZIP 234 with only the required changes made.

Discussions-To: #1353

@judah-caruso judah-caruso changed the title [draft] halving-preserving issuance Add draft-judah-nsm-halving-preserving-issuance: Halving-preserving variant of ZIP 234 Aug 21, 2026

## Parameters

$\mathsf{BLOCK\_SUBSIDY\_FRACTION} = 4126 / 10\_000\_000\_000 = 0.0000004126$

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whats happening here?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain what you mean, please? I'm not sure I understand

"Expected Issued Supply" - The Issued Supply that the current rules would have
produced had every block subsidy been claimed in full and no ZEC/TAZ been
removed from circulation:
$\mathsf{ExpectedIssuedSupply}(\mathsf{height}) = \sum_{i=0}^{\mathsf{height}} \mathsf{LegacyBlockSubsidy}(i)$.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is specification, so it shouldn't be in the definitions section. The term can be defined here, but should reference where this ends up defined in the specification.

Comment on lines +71 to +72
"Deficit" - The part of the Money Reserve that the current rules would already
have issued:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is unclear, along a couple of axes: it's unclear what "the current rules" refer to, and it's also unclear to me why it's simply called "Deficit" - it needs a more descriptive name.

Also, the equation below should be part of the specification, not the definition.

Comment on lines +110 to +111
6. We want the new issuance to activate at a block with as minimal a delta from
the current issuance as possible.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like it's left over from smoothing and could be removed.

Comment on lines +151 to +152
$\mathsf{DeficitAfter}(\mathsf{height}) =$ The value of the Deficit after the
specified block height.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Terminology specification of this should be moved here.

After that, this definition makes sense:

  • ExpectedIssuedSupply is the mathematical existing curve (sum over all permitted block subsidies).
  • IssuedSupply (defined in the protocol spec) is the sum of funds that are actually issued (by way of being present in some chain value pool).
  • DeficitAfter(h) = ExpectedIssuedSupply(h) - IssuedSupply(h) therefore calculates the unissued supply from any source (NSM removing from circulation, miners not claiming the full block subsidy pre-NU6, miners not claiming all tx fees).

Separately, the current specification of DeficitAfter(h) has a max(0, _) wrapper. AFAICT ExpectedIssuedSupply(h) - IssuedSupply(h) can never go negative if there is not a bug in the full node consensus rules (ZKP validity is irrelevant here, this is turnstile math). So instead of having a max(0, _) wrapper, this should be a consensus failure causing block rejection.

At the $\mathsf{DEPLOYMENT\_BLOCK\_HEIGHT}$, nodes MUST switch from the current issuance
calculation, to the following:

$\mathsf{BlockSubsidy}(\mathsf{height}) = \mathsf{LegacyBlockSubsidy}(\mathsf{height}) + \mathsf{ceiling}(\mathsf{BLOCK\_SUBSIDY\_FRACTION} \cdot \mathsf{DeficitAfter}(\mathsf{height} - 1))$

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rather than specifying a new equation, this should be specified as a modification to the protocol spec that alters the current BlockSubsidy equation (or renames it and adds this next to it if that ends up being simpler to write in the spec).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants