Stale Nomination Reward Curve#104
Conversation
Complete the Explanation, Drawbacks, Testing/Security/Privacy, Performance/Ergonomics/Compatibility, Prior Art, Unresolved Questions, and Future Directions sections. Add subsections on voter iteration order (bags-list interaction) and recurring ecosystem engagement as a secondary effect. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Remove off-topic references (RFC-0010 burn coretime, OpenGov conviction decay, conviction-style integration future direction). Strip em-dashes and a few other AI-style phrasings. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
Bumping this as it has now been updated and completed. Implementation for reference can be found here: paritytech/polkadot-sdk#11961 |
| ### Security | ||
|
|
||
| - **No new attack surface in the election solver.** The reduction in input stake does not change the structure of the optimization problem; the solver receives smaller weights for some voters and proceeds as before. | ||
| - **Slashing.** Staleness does not interact with slashing. A stale nominator is still slashed in full if their elected validator misbehaves; reducing slashing based on staleness would perversely reward inattention. |
There was a problem hiding this comment.
Nit: There is a plan to exempt nominators from slashing altogether.
There was a problem hiding this comment.
| - **Slashing.** Staleness does not interact with slashing. A stale nominator is still slashed in full if their elected validator misbehaves; reducing slashing based on staleness would perversely reward inattention. | |
| - **Slashing.** Staleness does not interact with slashing. |
I think this is the suggestion you are asking to update.
Basically the PR does not affect slashing in any way, so i will simply remove any details which assumes the previous behavior of slashing.
That being said, I am not sure I presently agree with the idea, but that is for another thread.
|
|
||
| ## Unresolved Questions | ||
|
|
||
| - **Default curve parameters.** A `GracePeriod` of 28 eras and `DecayPeriod` of 140 eras (one month plus five months) is proposed. Different values are reasonable. The trait-based design leaves the curve fully configurable; the question is what default values to ship. |
There was a problem hiding this comment.
We could ship with GracePeriod set to u32::MAX (effectively disabling decay), wire the parameters through pallet-parameters (or dedicated pallet storage), and set the actual values via an OpenGov referendum.
|
|
||
| ## Future Directions and Related Material | ||
|
|
||
| - **Validator-side staleness.** This RFC applies the staleness mechanism only to nominators. Validators' `validate(prefs)` registrations are not changed and continue to persist indefinitely, as today. A parallel mechanism (requiring validators to periodically re-call `validate` to remain in the candidate pool) would address dormant or abandoned validator entries, and is a plausible follow-up, but is explicitly **not** included in this RFC and should be proposed as its own RFC. |
Summary
Introduces a configurable decaying multiplier for stale nominations in NPoS staking. Nominators who do not periodically re-affirm their selection see their effective stake reduced over time, which both reduces their share of rewards and lets validators backed only by stale nominations drop out of the active set.
The mechanism adds:
NominationStalenessCurvetrait and a default piecewise-linearLinearStalenessCurve<GracePeriod, DecayPeriod, Floor>.Design highlights
nominateresets the freshness counter, including same-target re-submission. No "renew" extrinsic; the friction of reconsidering targets is the point.nominatecall sets the counter).submitted_into the upgrade era, so all nominators enter with a full grace period.Prototype
Working implementation on the
shawntabrizi-stale-nominationsbranch ofpolkadot-sdkor just see PR paritytech/polkadot-sdk#11961. 14 tests cover curve boundaries, refresh-trigger semantics, snapshot behavior, and the migration helper. All existing pallet-staking tests still pass.Open questions
GracePeriod/DecayPeriod/Floor.