Skip to content

feat(nns): Change the minimum maturity disbursement from 1/0.95 to 1#8667

Merged
jasonz-dfinity merged 2 commits intomasterfrom
jason/misc-disburse-maturity-limit
Feb 4, 2026
Merged

feat(nns): Change the minimum maturity disbursement from 1/0.95 to 1#8667
jasonz-dfinity merged 2 commits intomasterfrom
jason/misc-disburse-maturity-limit

Conversation

@jasonz-dfinity
Copy link
Copy Markdown
Contributor

Why

When maturity disbursement feature was added, it used the same minimum for the spawning neurons. For spawning, the minimum requirement has 2 purposes: (1) avoid spawning too many neurons given the same amount of maturity, i.e. avoid DoS (2) the resulting neuron should always have >= 1 ICP stake (minimum stake) with worst maturity modulation (-5%). For maturity disbursement, (2) isn't needed anymore, and the 1/0.95 value is more confusing than 1, without a good reason.

What

Check the maturity disbursement >= 1 ICP, directly, without applying worst maturity modulation.

Note that since we are lowering the minimum requirement, all maturity disbursement requests that previously succeed will still succeed, while some requests ([1, 1 / 0.95)) that previously fail will now succeed. This should not cause confusing behavior in the frontends, and thus frontend changes can be released independently from this.

@jasonz-dfinity jasonz-dfinity requested a review from a team as a code owner February 3, 2026 22:02
@github-actions github-actions Bot added the feat label Feb 3, 2026
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

This pull request changes code owned by the Governance team. Therefore, make sure that
you have considered the following (for Governance-owned code):

  1. Update unreleased_changelog.md (if there are behavior changes, even if they are
    non-breaking).

  2. Are there BREAKING changes?

  3. Is a data migration needed?

  4. Security review?

How to Satisfy This Automatic Review

  1. Go to the bottom of the pull request page.

  2. Look for where it says this bot is requesting changes.

  3. Click the three dots to the right.

  4. Select "Dismiss review".

  5. In the text entry box, respond to each of the numbered items in the previous
    section, declare one of the following:

  • Done.

  • $REASON_WHY_NO_NEED. E.g. for unreleased_changelog.md, "No
    canister behavior changes.", or for item 2, "Existing APIs
    behave as before.".

Brief Guide to "Externally Visible" Changes

"Externally visible behavior change" is very often due to some NEW canister API.

Changes to EXISTING APIs are more likely to be "breaking".

If these changes are breaking, make sure that clients know how to migrate, how to
maintain their continuity of operations.

If your changes are behind a feature flag, then, do NOT add entrie(s) to
unreleased_changelog.md in this PR! But rather, add entrie(s) later, in the PR
that enables these changes in production.

Reference(s)

For a more comprehensive checklist, see here.

GOVERNANCE_CHECKLIST_REMINDER_DEDUP

@jasonz-dfinity jasonz-dfinity dismissed github-actions[bot]’s stale review February 4, 2026 19:49
  1. Added changelog
  2. Not breaking
  3. No effect for storage
  4. No need for security review
@jasonz-dfinity jasonz-dfinity added this pull request to the merge queue Feb 4, 2026
Merged via the queue into master with commit adcae2d Feb 4, 2026
39 checks passed
@jasonz-dfinity jasonz-dfinity deleted the jason/misc-disburse-maturity-limit branch February 4, 2026 20:23
kpop-dfinity pushed a commit that referenced this pull request Feb 5, 2026
…8667)

# Why

When maturity disbursement feature was added, it used the same minimum
for the spawning neurons. For spawning, the minimum requirement has 2
purposes: (1) avoid spawning too many neurons given the same amount of
maturity, i.e. avoid DoS (2) the resulting neuron should always have >=
1 ICP stake (minimum stake) with worst maturity modulation (-5%). For
maturity disbursement, (2) isn't needed anymore, and the 1/0.95 value is
more confusing than 1, without a good reason.

# What

Check the maturity disbursement >= 1 ICP, directly, without applying
worst maturity modulation.

Note that since we are lowering the minimum requirement, all maturity
disbursement requests that previously succeed will still succeed, while
some requests (`[1, 1 / 0.95)`) that previously fail will now succeed.
This should not cause confusing behavior in the frontends, and thus
frontend changes can be released independently from this.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants