Summary
This proposal suggests implementing a 1+ epoch delay for commission changes by validators. This would prevent malicious behavior known as “commission rugging”, where a validator suddenly raises their commission to 100% and effectively steals all inflation staking rewards from their stakers.
By enforcing a delay in commission adjustments, stakers will have sufficient time to react, get notified, and move their stake if necessary, thereby improving trust and transparency in the validator-staker relationship.
Why Is This Needed?
Currently, validators can only change their commission during the first half of an epoch. If they attempt to change it after that, the transaction fails. However, if they change their commission in the first half, the change still applies to the current epoch.
This means that validators can still rug stakers if they change their commission early enough, giving stakers no opportunity to react before their stake is affected.
With a 1+ epoch delay, a validator could change their commission at any time, but the new rate would only take effect at the start of the following +1 epoch. This guarantees that stakers have a full epoch to react and unstake if needed before the change impacts them.
How the 1+ Epoch Delay Would Work
Any commission change by a validator would not take effect immediately. Instead, the change would only apply at the start of the epoch after the next one (1+ epoch delay).
To prevent validators from gaming the system by making big commission changes, the delay should be structured as follows:
- A validator can change their commission at any time during an epoch.
- However, the change will only take effect at the start of the next +1 epoch.
- This ensures that stakers have a complete epoch to move their stake before the new commission takes effect.
This mechanism aligns Solana with best practices in other PoS chains, ensuring staker security and validator accountability.
Impact on Solana Foundation Delegation Program
The Solana Foundation loses a significant amount of money due to commission rugging.
- When a validator is removed from the Solana Foundation Delegation Program (SFDP), many of them immediately rug-pull the foundation's stake by setting their commission to 100%.
- This results in huge financial losses, as the foundation stake is one of the largest on the network.
- Implementing a 1+ epoch delay would prevent this from happening, ensuring that the foundation has enough time to reallocate stake away from malicious actors.
In practice
- Validator changes commission at 1st hour of the epoch 744: the change would only take effect on start of epoch 746. So stakers would have the remaining of epoch 744 and epoch 745 to move stake.
- Validator changes commission at last hour of the epoch 744: the change would only take effect on start of epoch 746. So stakers would have the remaining of epoch 744 and epoch 745 to move stake.
This guarantee at least 1 full epoch for stakers to move stake without being affected. Also ensure validators can change their commissions at any time without having to do it in the first half of epoch.
Potential Next Steps
- Gather community feedback and refine the proposal.
- Discuss implementation feasibility with Solana core developers.
- Draft a formal SIMD and engage with major contributors.
- Evaluate additional monitoring solutions (e.g., alerts from Stakewiz/SVT) to notify stakers about upcoming commission changes.
Conclusion
Adding a 1+ epoch delay to commission changes is a simple yet effective solution to prevent commission rug pulls, increase staker trust, and protect both individual stakers and the Solana Foundation from financial losses.
This change would ensure that validators operate fairly, while giving stakers enough time to react and secure their funds before commission changes take effect.
Your proposal is for a N+2 delay in taking effect where N is the current epoch. I think N+1 is sufficient and easier to implement.
In practical terms we would need a new field in the vote account to store next_epoch_commission
and at epoch change vote accounts are updated to set commission = next_epoch_commission
and then next_epoch_commission = null
I think the idea makes sense and formalizes the idea that once an epoch begins, the advertised commission is fixed for that epoch
This could possibly be included in #185