Each member of the Citizen's registry ("voter registry") is afforded one ballot per proposal vote. Each citizen is equally invited to submit new proposals. Proposal categories come with different lengths (days a proposal can be voted on) and different percentage hurdles they have to take in order to be formally adopted (threshold). A proposal to remove a previous law for instance has a lower threshold than a proposal to create a new law. Special forms of a proposal like constitutional amendments and system code changes require higher participation and percentage thresholds than simple guidelines or community motions. Once a proposal has enough participants (citizens that requested a ballot) it becomes automatically a bill. In order to cast a vote on a bill within its active vote casting period, a citizen has to request a ballot.
An open proposal offering citizens an option to request a ballot
What is a ballot?
A ballot is a newly ad-hoc in-browser generated wallet for the sole purpose of participating in a particular proposal voting activity.
A citizen who is interested in voting for an active bill, enters a "virtual polling station" (similar to an online chat room). This virtual polling station is a dedicated webpage inside the Martian Republic that connects to a ballot-shuffle server via websockets. The ballot-shuffle server implements the coinshuffle protocol which allows a citizen to receive funds on a new address that has no past history and is not linked to his own civic public Marscoin address.
In order to achieve this anonymity which is crucial for a fair and anonymous voting process all participants leave this page open until the shuffle server reaches the necessary minimum amount of users. A real world equivalent here would be a queue of voters in a voting station waiting to receive their ballot.
As the operation is automated, of course, the citizen just leaves the browser window open until the shuffle completes. From the user's perspective, this action allows him to request and receive a new secret ballot.
What happens behind the scenes?
For those interested in the behind the scenes, imagine a virtual polling station that waits until it gets a batch of 100 citizens with open ballot requests (this number could be higher or lower depending on number of overall citizens in the systems and desired level of anonymity). As soon as the 100th citizen enters this virtual polling station every participant starts encrypting and shuffling transaction inputs from which they derive - alltogether - a new joint transaction in which all incoming transactions clearly belong to citizens as identifiable via the Voter Registry but whose outputs are all mixed up and thus not traceable back to any individual.
The shuffle itself only takes a few seconds. When it completes, every participating voter in this virtual polling station page will see a message that their new secret ballot is currently pending confirmation on the blockchain. A few minutes later, large Yes/No/Abstain buttons appear. At this point the citizen can safely vote, spending ("burning") a tiny amount of Marscoin that gets mined by the miners of the Marscoin network who confirm and notarize the vote which itself is just a data-embedded Marscoin transaction.
Meanwhile, our open source tools that track all data transactions as they appear on the Marscoin blockchain see the various votes stream in and are able to tally them up -but won't be able to infer who cast which vote. Everyone is able to see that those votes originated from a ballot shuffle with known, legitimate, Martian citizens - but nobody can attribute a particular vote to a particular individual. A fair, end-to-end auditable, on-chain and thus easily verifiable election took place!
How do I request a ballot?
Jump to the Congress section of the Martian Republic and select any of the open proposals or ongoing bills that interest you. Click the "Request Ballot" button. Due to the nature of the ballot-shuffle your browser has to be online at the time of the shuffle. The minimum number of ballot shuffle participants is technically three -but the more are participating the harder it is for anyone to infer voting behavior from the citizens participating. We assume that this "virtual polling station minium" of citizens needed to initiate a ballot shuffle will be a function of the number of citizens in the system and be part of the overall Martian Republic Constitution or "settings".
Once you enter this virtual polling station, just leave your browser tab open. The browser-built in websocket will co-ordinate the allocation of a private and secure a few zubrins from your wallet for the new secret ballot. Once the ballot shuffle is finished, you will be presented with your options to vote. The vote will enter the blockchain and you can verify yourself by looking at the blockchain that your vote was cast - immutably and transparently - yet privately and secure.
View of a ballot cast: the Marscoin transaction ID and link point to the blockchain confirmed transaction with OP_RETURN vote data link to the proposal IPFS
Looking at a vote transaction on the Marscoin blockchain shows a cast vote as one of the following OP_RETURNS:
PRY_[IPFS PROPOSAL LINK] for a "yay" vote
PRN_[IPFS PROPOSAL LINK] for a "nay" vote
PRA_[IPFS PROPOSAL LINK] for an abstained vote
A vote on the Marscoin blockchain - result of a ballot shuffle for transparent end-to-end auditable voting