Extending NPoS with permissionless unstake of inactive nominators

The recent addition of fast unstake and nomination pools has helped the nominator count plateau, but there are still over 20k inactive nominators on the network - 22,500 active vs 45,650 total. In other words, ~50% of Polkadot nominators right now are not earning rewards or contributing to network security (beyond a small amount of them benefiting from entering the active set if active nominators drop out). if we factor pool members this number is in the mid 40s percentage-wise.

This post proposes a mechanism that will allow anyone, after a number of inactive eras, to permissionlessly unstake an inactive nominator, while maintaining a configurable “buffer”, or a compulsory percentage of inactive nominators, below or equal to which inactive nominators cannot be kicked.

To achieve this, we introduce u8 inactive_eras_counter property for each Nominator, that increments every era they are inactive, & resets when they become active again. We introduce global storage items:

  • MaxInactiveErasBeforeUnstake, after which period anyone can permissionlessly register the inactive nominator for fast unstake & put down the deposit on their behalf.
  • MinimumInactiveNominators, a Perbill that defines the condition to stop permissionlessly unstaking inactive nominators, to forcibly maintain a percentage of inactive nominators in case active ones drop out.

We could also emit an InactiveNominatorEras event every inactive_eras_counter % 7 == 0 eras (or the blocks equivalent) to notify inactive nominators, giving them multiple heads up before they would be eligible to be permissionlessly unstaked. Even if this is like 90 eras / 108k blocks, 90 days of inactivity on Polkadot - they would probably appreciate the system telling them “you’re doing it wrong, time to make a change”.

The storage saved by removing the inactive stakers would vastly outweigh that of the counter values introduced.

We have rolled out tools for inactive stakers - the staking dashboard, fast unstake and nomination pools, but the uptake to transition to pools for those inactive has been very limited.

This mechanism would protect NPoS for the foreseeable future by:

  • Ensuring DOT is being used effectively, e.g. not locked in staking and not doing anything.
  • Not tarnish Polkadot’s reputation by allowing such a large % of stakers to not receive anything in return - currently 45 - 50% of all stakers.
  • Allow us to solve the inactive nominator problem in 2023, rather than waiting for stakers to proactively unstake themselves (which our users are currently not demonstrating to any extent),