Dear Celo community,
cLabs plans to launch stCELO, a Celo native liquid staking derivative, on Friday this week! Specifically, we will launch the protocol and have planned integrations (WebApp, DEX, Lending, etc.) for the weeks afterwards. This protocol will allow anyone to stake their $CELO (earning rewards and supporting the network) and at the same time to use that capital across ecosystem DApps. To earn staking rewards for the users of stCELO, the protocol must vote for validator groups with all the $CELO it has locked. In its current implementation, it is only possible to vote for a maximum of 10 validator groups at any given time. In this post, we share how we plan to cast the votes for validator groups and solicit feedback from the community on our approach.
Specifically, we guide our approach by the following principles:
- Efficiency: For holders of stCELO: We want to vote for validators in a way to maximize the return. For the community / cLabs: We want to ship fast and iterate towards better (and more complex) solutions later on.
- Neutrality: We want to cast votes in a comprehensible way, based on objective measures which are important for the protocol stCELO to work, or for the Celo ecosystem to function. Besides these core caveats, we aim to stay neutral in the selection of individual validator groups.
- Credibility: Our approach should be verifiable by anyone based on on-chain data.
Based on these principles, we have come up with the following rules to select the validator groups we vote for with stCELO:
A) We create a shortlist of eligible validator groups
i) We start with all validator groups of Celo which have at least one validator elected [we need active validators to receive rewards]
ii) Of those, we select all which have an uptime score of >98% [we need high uptime to receive maximum rewards]
iii) Of those, we 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) [we aim to support the decentralization of Celo]
iv) Of those, we select all which have had zero slashing incidents in the past [slashing incidents decrease rewards]
v) Of those, we select all which have >2,000,000 votes as open capacity [we can only vote for 8 validators and want to ensure a minimum of 16M votes that we can cast]
This results in the list shared below.
B) We randomly select a subset of the shortlist
i) We 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) We use this script to select 8 validator groups randomly from the shortlist and then vote for those: GitHub - m-chrzan/validator-selector. 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.
We hope our approach is understandable and we are looking very much forward to your feedback and to releasing the protocol to all of you for usage!
Matt for the stCELO team
PS: Happy to chat with everyone on how we can help here or on Discord matt#9000
PPS: the github repo of the protocol GitHub - celo-org/staked-celo
Appendix A: Shortlist
Addresses of validator groups part of the shortlist, selected as described above: