Hey everyone!
Following up here, here is the specification for how the delegated voting will work:
Background
The following information pertains to Proposal for SKALE Network’s On-Chain Governance System which can be found posted here and specifically how the actual votes would count and be weighted.
In the initial proposal, the following was flagged for further discussion:
Validators will be enabled to vote on behalf of delegates who do not utilize their votes.
The specification and examples below aim to help the community understand what delegated voting is.
Token Delegation States
Proposed - Delegator has proposed token delegation to a validator. Tokens are not considered staked until accepted by a validator and the next epoch begins.
Accepted - Validator has accepted a proposed delegation. The tokens are not considered staked until the next epoch.
Rejected - Delegator has delegated tokens to a validator and the validator has rejected the delegation. These tokens are not considered staked or delegated and must be delegated to a different validator.
Staked - Tokens are considered staked once a validator accepts the token delegation and the acceptance occurs before the next epoch.
Completed - Delegator has requested to undelegate their tokens to the current validator. At the end of the current epoch, the undelegation will complete and the tokens are no longer considered staked. Tokens can be redelegated at this point, but will not be considered staked until they are accepted and the next epoch occurs
Examples
- Tokens delegated on May 30th and accepted on May 31st will be considered staked on June 1st
- Tokens delegated on June 2nd and accepted any time during June will not be considered staked until July 1st
Specification of Voting
- Voting power is directly proportional to the amount of tokens staked on a 1:1 basis
- Voting should be done as single choice meaning each delegator or validator can choose one option when voting from the available options
- Most votes should adhere to the core options of: Yes, No, Abstain
- Only staked tokens at the time of the voting period opening are eligible to vote and only until the voting period closes
- Potential validator voting power is the number of SKL tokens delegated to a validator
- If a validator votes, the entirety of their voting power will be used
- Delegators can vote differently than the validator they are delegated to
- Delegators who do not participate in voting, will have their voting power claimed by the validator if the validator they have delegated to votes
Examples
Below are a couple of examples that have the goal of illustrating this dynamic voting power.
Example
The following example showcases voting power that can change based on delegator and validator voting. Additionally, if delegators do not vote, the validator automatically assumes their voting power.
Delegator A delegates 5 M to Validator V.
Delegator B delegates 12 M to Validator V.
Delegator C delegates 3 M to Validator V.
Validator V has 20 M in SKL delegations.
Who Votes |
Delegator A |
Delegator B |
Delegator C |
Validator V |
Total Voting Power |
A |
5 |
0 |
0 |
0 |
5 |
B |
0 |
12 |
0 |
0 |
12 |
C |
0 |
0 |
3 |
0 |
3 |
V |
0 |
0 |
0 |
20 |
20 |
A, V |
5 |
0 |
0 |
15 |
20 |
B, V |
0 |
12 |
0 |
8 |
20 |
C, V |
0 |
0 |
3 |
17 |
20 |
A, B |
5 |
12 |
0 |
0 |
17 |
B, C |
0 |
12 |
3 |
0 |
15 |
A, B, C |
5 |
12 |
3 |
0 |
20 |
A, B, V |
5 |
12 |
0 |
3 |
20 |
A, C, V |
5 |
0 |
3 |
12 |
20 |
B, C, V |
0 |
12 |
3 |
5 |
20 |
A, B, C, V |
5 |
12 |
3 |
0 |
20 |
Example
The following example showcases an example vote with voting power represented by delegators and validators. Voting is single choice and the following row represent various outcomes of these three (3) entities.
Delegator A = 12 M
Delegator B = 6 M
Validator V = 2 M
Y = Yes
N = No
A = Abstain
DNV = Did Not Vote
A |
B |
V |
Yes |
No |
Abstain |
Total Votes |
Y |
Y |
Y |
20 |
0 |
0 |
20 |
N |
N |
N |
0 |
20 |
0 |
20 |
A |
A |
A |
0 |
0 |
20 |
20 |
DNV |
DNV |
DNV |
0 |
0 |
0 |
0 |
Y |
N |
A |
12 |
6 |
2 |
20 |
Y |
N |
DNV |
12 |
6 |
0 |
18 |
N |
N |
DNV |
18 |
0 |
0 |
18 |
N |
Y |
DNV |
6 |
12 |
0 |
18 |
DNV |
Y |
N |
6 |
14 |
0 |
8 |
DNV |
DNV |
Y |
20 |
0 |
0 |
20 |
DNV |
DNV |
N |
0 |
20 |
0 |
20 |
DNV |
DNV |
A |
0 |
0 |
20 |
20 |
DNV |
N |
Y |
14 |
6 |
0 |
20 |
N |
Y |
Y |
8 |
12 |
0 |
20 |
N |
N |
Y |
2 |
18 |
0 |
20 |
Conclusion
Please reply to this if you have questions or other feedback. While things have been stagnant for a short period of time hashing out the best ways to implement this and working towards a solution, we can now continue to move forward as a community with the goal of having the first vote as soon as the code strategy is ready to be used.
Also a big thank you to all of the community members who helped shape this specification with your amazing contributions.
TheGreatAxios