Cardano On-Chain Voting - How It Works

For more information about the design specifications and JSON formatting, please visit SPOCRA On-Chain Voting on GitHub!

Step #1: Generate a Ballot Proposal

The first step of the process is to generate a Ballot Proposal which is a specially formatted JSON file that must be posted to the blockchain specifying the parameters of the vote.

The Ballot Proposal is submitted to the blockchain via passing the JSON file as an argument to the --metadata-json-file parameter when creating the transaction.

In the case of submitting a Ballot Proposal and subsequent Voter Identification transaction, the transaction should be submitted from and to the same address, only paying the nominal transaction processing fee. This ensures that the source of the ballot proposal and Voter Identification should be one and the same entity.

Step #2: Generate Voter Identification Hashes

Once you have generated a unique ballot proposal, the next step will be to create a registered voters file . This specially formatted JSON file contains the unique hashes for voters to use when casting their ballot. This file should be kept secret until after the voting window is closed.

Voter Registration hashes should be securely and privately distributed to all eligible, registered voters and should be generated randomly for each vote to prevent voter impersonation. Voter registration hashes will be public on the blockchain and thus, no sensitive information should ever be used to generate a voter registration hash.

After the voting window has concluded, the "registered voters" file (including only voting hashes and not any voter identification information) should also be submitted to the blockchain from the same address that submitted the original ballot proposal. This ensures that future systems would be able to parse and reconcile ballot proposals with valid ballots to display the results of a particular vote.

Step #3: Voters Cast Their Votes

During the eligible voting window (specified in the Ballot Proposal) eligible voters who have received their voting hash should generate a Voting Ballot . This is a specially formulated JSON file linking a registered voter hash to a particular Ballot Proposal which should be submitted by the voter from their own address.

Due to the decentralized nature of the blockchain, it is impossible via this method to prevent a "bad actor" from casting votes after-the-fact by impersonating a voter's ballot. For this reason, only the first valid ballot received from a particular voter registration hash during the eligible voting window should be counted and all cast ballots should be compared to the Registered Voters file to ensure voter eligibility.

Wondering how to submit the generated JSON to the chain?

Click here for a quick rundown of the process to submit your generated JSON file to the chain as metadata to a transaction. Address: