MACI Workflow
This article covers the high-level MACI workflow, which borrows heavily from our Technical Introduction to MACI.
Roles
There are two key roles that participate in MACI:
- Users, who vote on polls
- A trusted coordinator, who configures and launches polls, tallies up votes, and publishes the final results
User (voter)
A "User" is any voter in a MACI poll.
In order to participate in a MACI poll, a user will perform at least 2 on-chain transactions:
- Sign up with MACI
- Vote on a poll
Coordinator
The "Coordinator" helps set up and execute MACI polls. They are responsible for deploying the MACI smart contracts, initiating polls, tallying the final results of a vote, and finalizing polls by publishing the final results on-chain.
Note: it's possible for the contract deployer and the coordinator to be two separate accounts/entities, but for simplicity we'll start by assuming these functions are the same role.
Once a voting poll has completed (i.e. the voting deadline has elapsed), the coordinator has the sole ability to decrypt all user votes and tally up the total results. The coordinator then publishes commitments and proofs of these results on chain to finalize a poll. The coordinators must use zk-SNARKs proofs to guarantee that their final tally result is valid, and this is accomplished without releasing the vote of every individual.