Diseconomies of Scale: Anti-Correlation Penalties (EIP-7716)

Yeah you’re right, the net_excess_penalties keeps track of the penalties from previous slots. If net_excess_penalties is high, it indicates a history of many penalties, which lowers the current penalty factor. This creates a self-regulating mechanism:

  • If non-participation is high, penalties increase, and net_excess_penalties accumulate.
  • If non-participation reduces, net_excess_penalties decreases over time, reducing the impact on future penalties.

This means that if a big node operator goes offline for 10 epochs, then the penalty factor would be the highest in the first epoch1 and then decreases gradually, approaching a penalty factor of 1, even if that operator stays offline.

This image (h/t dapplion) does a good job showing these dynamics:

When non_participating_balance increases (=participation drops), both penalty_factor and net_excess_penalties rise. Once non_participating_balance stabilizes or decreases, the penalty_factor and net_excess_penalties begin to decrease.

The floor in net_access_penalty at 0.5 ensures that we don’t end up with a division by 0.