Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Declarations for vote manager, ballot, vote creation (Governance) #3187

Closed
Chris-Hibbert opened this issue May 27, 2021 · 3 comments
Closed
Assignees
Labels
enhancement New feature or request Governance Governance

Comments

@Chris-Hibbert
Copy link
Contributor

What is the Problem Being Solved?

Design (first draft) vote manager, ballot, support for creating a vote with multiple positions

simple APIs with enough clarity that work can proceed on Governance

Description of the Design

TBD

@Chris-Hibbert Chris-Hibbert added enhancement New feature or request Small Governance Governance labels May 27, 2021
@Chris-Hibbert Chris-Hibbert added this to the Beta Phase 4: Governance milestone May 27, 2021
@Chris-Hibbert Chris-Hibbert self-assigned this May 27, 2021
@Chris-Hibbert
Copy link
Contributor Author

It appears that the natural breakdown is into ballotCounter and registrar. ballotCounter issues ballots and counts them, but don't know who can vote. Examples include binary, IRV and STV. Registrars hand out and collect ballots, but don't have to understand what question is being asked. Examples here include committees (equal weight, known membership) and shareVoting.

ballotCounter intrinsically assumes that ballots (or equivalently, voters) have weights. Committee votes just have equal weights, but not different logic. Different ballotCounters should be able to share logic for enforcing quorum and requiring super-majority.

In order to allow the possibility of open nominations, building the ballot is a separate operation.

Ballots {
createBinaryBallot(name1,name2)
createIRVBallotBuilder()
createSTVBallotBuilder()
}

The BallotBuilders have addPosition(). The builders might be held closely, or attenuated and shared.

The voteManager that creates the ballot, ballotCounter and registrar has responsibility for scheduling, closing, invoking the count, and publishing or carrying out the result. Each of those can be pluggable, though first implementations may take short-cuts there. For legibility purposes, all of the parameters should be accessible from the ballot (or its invitation), particular any that direct automatic execution.

@Chris-Hibbert
Copy link
Contributor Author

The design has settled into a Registrar (empowers an electorate by handing out VoterInvitations) and BallotCounters. These are orthogonal and stay out of each other's business.

A Registrar might create the electorate by the act of issuing invitations, or might issue invitations to parties that can prove membership in a class. The Registrar will manage Questions to be presented to its voters, but doesn't know how the questions are created, collected, or counted. When the counting is done, the Registrar can reveal the outcome.

BallotCounters manage Ballots for particular questions. When created, choices are made about how many options there are and how the voters' preferences are aggregated. Some of these choices are pluggable (counting quorum), and others are specific to the approach (Binary, Instant Runoff, Single Transferrable Vote, Approval voting, etc.) Voters who have an invitation for a particular question can get a BallotTemplate from the BallotCounter and submit it to their VoterFacet.

A single Registrar might have several Questions of different forms, and the voters will have to interpret the ballots to see how to make a selection.

We get legibility for who can vote on which questions by having invitations show the BallotCounter and Registrar instance they were issued by.

When a contract wants to make it visible that an electorate controls the contract's parameters, we'll want to make the connections between contract, Registrar, and BallotCounter visible. We'll have ElectionManagers for that, which will identify their electorate and BallotCounter. The contract can then designate the ElectionManager, to make the electorate and process of creating Questions for the ballot legible.

@Chris-Hibbert
Copy link
Contributor Author

This PR has served its purpose as a point of coordination.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request Governance Governance
Projects
None yet
Development

No branches or pull requests

1 participant