Noun DAO announces proof of concept for private voting
Aragon ZK Research and Aztec have joined forces over the past few months to study private voting on the Nouns DAO.
They just concluded their study with: proof of concept and both Normally and factitious report. They also developed two: Time-locked encryption protocol To support their work.
The Nouns DAO Private Voting Research Sprint was funded by Nouns DAO, a social and cultural DAO known for pushing the boundaries of governance experimentation, to research solutions for private voting in organizations. Three teams were funded, including one team comprised of Aragon ZK Research and Aztec. It took three months to complete the study and deliver the results.
In the research sprint, they sought to answer the following key questions:
Until what point can it be built? user friendly, not trusting others (distributed), fair (No one can count votes before the given time) aggravated (Voting power depends on the amount of tokens held/delegated) Ballot Secrecy (It is impossible to connect voters with choices) Voting system on Ethereum?
answer: This is very possible if promising progress is made in both research and development throughout the sprint.
And we have a demo to prove it!
The only parameters not covered in this study are: aggravated. This proof of concept allows for one vote per NFT. So, if you own two NFTs, you must vote for each NFT separately.
Let’s take a look at the proof of concept the team has built, how it can be used in the Nouns DAO, and the next steps for introducing private voting to all DAOs built on Aragon.
Why is on-chain private voting important?
Today, in DAOs, all votes are public because the blockchain is transparent. However, private voting has been a long-pursued goal of the web3 industry.
DAO members may not want all of their decisions to be visible to everyone on the Internet. For example, if there was a vote involving your friends or close colleagues, how would they feel if you voted against them, even if they believed it was the better choice? What about elections for roles? How will elected people and voters feel that their choices are there for all to see?
There are also security issues. When votes are made public, voters can be more easily persuaded to vote a certain way through threats or bribes. However, with fully encrypted private voting, voters’ choices cannot be deciphered.
Using the private voting option solves this problem. But the on-chain component is also important. Because it means there is no middleman storing the results in between. It’s just a blockchain.
Some private voting solutions may sacrifice decentralization for voting protection, but Nouns DAO knew this would break transactions. So they chose a team that wanted to solve the private voting problem. and On chain.
What is a private voting proof of concept and how does it work?
The team built a proof of concept (POC) following the parameters laid out by Nouns DAO. This proof of concept is not a real product. This means that the product is not ready for market or has not been audited. In our case, we need to interact with the POC via CLI, so we end up writing code instead of clicking buttons in the interface.
The POC is important because it shows that trustless private voting on Ethereum is possible, which is exciting for the industry as a whole.
You can test it yourself. The steps are as follows:
1: Register your wallet (complete before voting for the first time)
All wallets must register their public keys before the voting process begins. This only needs to be done once per address and you do not need to register each time you vote.
Connect your wallet to the zkRegistry app, register your public key, and copy the private key needed for voting.
2: Create a voting process
Anyone can create a voting process through the CLI using the ‘create-process’ subcommand. An IPFS ID may be provided to bind a process to specific information.
Additional logic, such as restricting voting to only wallets with owned or delegated NFTs, can be easily implemented at the smart contract level.
3: Vote
Registered wallets that meet the eligibility requirements (e.g., holding non-delegated or delegated NFTs at the time of creation of the voting process) can generate ballots and corresponding evidence.
Votes can be submitted to the Noun Voting Smart Contract (VSC) during the voting period. Vote creation (vote + proof) and submission are done together through the CLI using the ‘vote’ subcommand.
In our proposal, weighted voting is excluded, so one vote per NFT is allowed. So, if you hold more than one NFT, you will repeat this step of creating and voting on a new vote for each NFT you hold.
4: Vote counting
Once the voting period ends and the decryption key is released, the results will be tallied and sent to the VSC along with the corresponding evidence, allowing anyone to verify the results of the voting process. You only need to do this once.
Use the CLI with the `tally` subcommand. The subcommand returns no output if called before the voting period ends.
As you can see in the image below, the final results of the vote are shared without the voter’s wallet address.
Before delivering a final product to Nouns DAO, the team must research solutions for supporting multi-signatures and develop solutions for vote counting. Multi-sig support allows multiple signatures other than the EOA wallet currently allowed in the POC to vote.
Some of this work is currently on the roadmap for Aragon ZK Research and Aztec Labs, so we will contribute to bringing it into production.
What are your future plans?
Aragon ZK Research plans to apply its learnings to DAO on Aragon OSx.
Aragon ZK Research will continue to develop the core components of this project by expanding its research into Aragon OSx plugins. This plugin allows DAOs built on Aragon OSx to have completely private voting, unlocking powerful features for your organization.
The code name is likely to be zk-POPVOTE (zk Proof-based On-chain Private Voting). The final technical report will provide specific details and a tentative roadmap.
Aztez will contribute to Noir to improve private voting.
Aztec Labs will continue to contribute to the development of Noir to improve both developer and user experiences through trustless, private voting. From getting recursive aggregation in a web browser, to researching in-browser proof optimization, to researching and developing the next version of the proof backend, we look forward to seeing the ZK DAO governance blossom through these technologies.
Immerse yourself in their research
To explore the research, check out the following links:
document:
Storage:
- nouns-anonymous-voting: Voter client library, Tally CLI and smart contracts (including zkRegistry)
- noir-trie-proofs: Decoding Noir’s RLP, verifying Ethereum state and proof of storage.
- tlcs-c: Timelock Cryptographic Service Protocol C implementation (currently used in Timelock.zone)
- tlcs-rust: Rust implementation of the Timelock cryptographic service protocol (used in Timelock.zone when put into production)
- tlcs-chain: Cosmos Blockchain providing Time Lock encryption service
- zk-registry-ui-demo: Web-based UI using MetaMask for zk registry registration.