Voting for Validator Groups
An account can vote for up to 10 different validator groups (based on the maxNumGroupsVotedFor parameter of the Elections core smart contract). For this implementation of StakedCelo, consequently the protocol can only vote for up to 10 validators. Currently, votes are only cast for 8 validator groups.
The following principles guide the selection of the initial set of validators:
- 1.Efficiency: For holders of stCELO: Vote for validators who support Celo most effectively. For the community: Ship fast and iterate towards better (and more complex) solutions later on.
- 2.Neutrality: Cast votes in a comprehensible way, based on objective measures which are important for the protocol to work, or for the Celo ecosystem to function. Besides these core caveats, aim to stay neutral in the selection of individual validator groups.
- 3.Credibility: Our approach should be verifiable by anyone based on on-chain data.
Based on these principles, establish rules to select the validator groups to vote for with StakedCelo:
A) Create a shortlist of eligible validator groups
i) Start with all validator groups of Celo as returned by the CLI (celocli validator:list)
ii) Of those, select all which have an uptime score of >98% [need for high uptime to receive maximum rewards]
iii) Of those, select the lower two tertiles of validator groups regarding number of votes received (specifically this means excluding validator groups with over 3,750,000 votes) [support the decentralization of Celo]
iv) Of those, select all which have had zero slashing incidents in the past [slashing incidents decrease rewards]
v) Of those, select all which have at least one validator elected [active validators needed to receive rewards]
vi) Of those, select all which have >2,000,000 votes as open capacity [voting only possible for 8 validators and a minimum of 16M votes to be cast by protocol should be ensured]
B) Randomly select a subset of the shortlist
i) Commit to a blocknumber (and share the hash prior to its mining) and use the randomness contract to generate a seed with that block as input for a random selection algorithm
ii) Use this script to select 8 validator groups randomly from the shortlist and then vote for those. We do select less than the maximum number of 10, such that we have two free slots available under normal conditions and retain some flexibility around changing votes.
Appendix A: Shortlist
Addresses of validator groups part of the shortlist, selected as described above:
Appendix B: Selected validator groups
Block 13816816 was selected, leading to randomness
which results with the following selection of validator groups: