Copying proposal in forum too, for wider reach and discussion.
Overview from the pull request:
Currently group epoch score is calculated as an average score of its members epoch score for voter rewards. Because of this, larger groups with more validators in them have a distinct advantage for voters since their average score per epoch is likely going to be higher since they are able to average out individual bad validator scores with better performing validators.
This seems counter productive since for network health it would be better to incentivize voters to vote for smaller groups for more decentralization. Fix for this can be very simple, we change group epoch score to be:
- Minimum(member validator epoch scores), instead of Avg(member validator epoch scores).
Calculating score per epoch using minimum incetinvizes voting for smaller groups since they are more likely to maintain better epoch scores, and it also puts more pressure on larger groups to make sure all their validators maintain high uptime.
This is a pretty simple change, and it only needs to be changed in one place here: calculateGroupEpochScore function in Validators.sol https://github.com/celo-org/celo-monorepo/blob/master/packages/protocol/contracts/governance/Validators.sol#L418