Nearly every DAO voting tool in existence reveals how people voted on a proposal. With Democrazy, anonymous voting is now a reality. Democrazy is built on two foundational principles: privacy and security.
Privacy in voting is essential for maintaining integrity in governance processes. The right to hold elections by private ballot is mentioned in several international treaties. Moreover, the largest democracies in the world like India and the United States all use secret ballots (in which neither the participants nor the candidates can see who voted for who). Thus, it follows that anonymous governance voting is the next step for DAOs to have more effective governance.
We ensure this privacy without any compromise of security with the help of zero-knowledge proofs. For example, when users vote, they prove that their encrypted "ballot" is valid without revealing the contents (quantity and response) of their ballot. Similarly, once the vote is over, the DAO authorities prove that they tallied the votes correctly without revealing the keys associated with the proposal or the contents of the votes. Using zero-knowledge proofs allows us to operate a secure platform while prioritizing privacy.
We built the frontend using React, Material UI, web3.js, and ethers.js. In terms of the user experience, there is no difference in the voting experience between Democrazy and existing DAO voting platforms like Commonwealth or Snapshot. To start a poll, the authority of a DAO first signs a message. This signature is used as the secret key to generate a public key using the Exponential ElGamal encryption scheme. The public key is stored and shared with every voter to encrypt their votes with. We use this scheme because it is additively homomorphic, and hence, the DAO authority can calculate the final result using their secret key without need to decrypt each individual vote (they do not need to remember their secret key since they can simply sign the same message another time).
Users simply connect their wallet, find their DAO, and then view all the ongoing proposals, which they can vote on by signing a message (provided they have the requisite amount of the governance token). Through this signature, a secure list of voters can be maintained, thus preventing users from voting multiple times.
We built the backend using Node.js, Firebase, and Vercel. The main purpose of our backend is to store a list of registered DAOs, keep track of their proposals, and store the ZK-proofs for votes and decryptions. When someone submits a proposal, the backend first creates a new proposal entry in our database, and then it creates a snapshot of the governance token holders and their balances up until a user-specified block height.