Specification

Authors: BlockScience and SDF, July 2023

Introduction

A notebook containing an end-to-end example implementation for this document can be found on the BlockScience/scf-voting-mechanism GitHub repository.

General Definitions

The admissible user actions for the SDF-Voting Mechansim in each round are (mutually exclusive):

  • Vote (yes/no) and Refrain from Voting (abstain) on any number of project submissions

    • A "no" vote will cancel a "yes" vote with the same voting power. In other words, if someone has a Voting Power of 5, then Yes would add +5 to the Project Votes, No would add -5 and Abstain would add 0.

  • Delegate full Voting Power to an ordered list of at least NdN_d users - called a Quorum. Quorums are only valid for the current round and should be re-initialized / re-activated for each new round.

    • The Actual Quorum will consist of the first NdN_d users that opted for Voting rather than Delegating. If there are less than NdN_d users any missing slot will be replaced by Abstain votes.

Logic

Quorum Delegation is a novel delegation scheme inspired by the Stellar Consensus Protocol in which individual users privately select groups of other users that will indirectly determine the user's vote (as long as the group achieves internal consensus).

A user can select up to Nd,maxN_{d, max} other UUIDs (order sensitive) for creating their Quorum Candidates. The first-ranked NdN_d candidates that opted for Voting during the Round are going to be the Actual Quorum. Users that opted for Delegating are not taken into account for the Actual Quorum (to softly avoid issues around re-delegation).

Depending on the Quorum Consensus, the individual user will automatically vote Yes, No or Abstain for a given project. In order for a Yes or No vote to happen, a Quorum must have an active participation of at least frf_r (Quorum Participation Threshold) of the members towards that given project (eg. 2/3 of the members did actively vote yes/no rather than abstaining).

If the Quorum Participation Threshold is met, then the Vote Decision for the individual user is going to be the simple majority of the Quorum Members decisions. If there's no majority, then the decision is to abstain.

Some examples can be listed as follows for an Quorum Participation Threshold of 2/3 and Quorum Size of 5:

  • If all 5 Quorum members vote:

    • 3 Yes, 2 No -> Delegating User automatically votes Yes

    • 2 Yes, 3 No -> Delegating User automatically votes No

  • If 4 Quorum members vote, while one abstains:

    • 3 Yes, 1 No -> Delegating User automatically votes Yes

    • 2 Yes, 2 No -> No absolute majority, Delegating User automatically Abstains.

  • If 3 Quorum Members vote, while two abstain:

    • Quorum Participation Threshold is not met, Delegating User automatically Abstains

Example Implementation in Python

Resources

Last updated