Aragon ZK Research and Aztec have joined forces to research private voting for DAO names over the past few months.
They have just concluded their research with a Proof of concept And both general And idiomatic Reports. They also developed two Time-locked cryptographic protocols To support their work.
The Nouns DAO Private Voting Research Race was funded by Nouns DAO, a social and cultural DAO known for pushing the boundaries of governance experience, to research private voting solutions for their organization. Three teams were funded, including one made up of Aragon ZK Research and Aztec. They had three months to complete their research and present the results.
In the research, they sought to answer the following basic question:
To what point can be built easy to use, Untrustworthy (decentralization), justice (No one can count the votes before a certain time), weighted (Voting power depends on the amount of tokens/delegated) and The secret of balloting (It is impossible to bind the voter to a choice) Voting system in Ethereum?
Answer: And with the promising advances in both research and development made throughout the race, it's very much possible.
And they have the show to prove it!
It was the only parameter that was not addressed in this research weighted. This proof of concept allows one vote per NFT. Therefore, if you own two NFTs, you will need to cast your vote for each NFT separately.
Let's dive into the proof of concept the teams created, how it can be used by the Nouns DAO, and what's next for bringing private voting to all DAOs built on Aragon.
Why is private voting important on onchain?
In today's DAOs, all votes are public because the blockchain is transparent. However, private voting has been a long-sought goal in the web3 industry.
DAO members may not want all of their decisions to be public on the Internet. For example, if there was a vote in which some close friends or colleagues participated, how would they feel if you voted against them, even if you thought it was the best choice? What about elections to choose a role – how will electors and voters feel that their choices are available for all to see?
There is also the issue of security. If votes are public, voters can easily be persuaded to vote a certain way through blackmail or bribes. But with fully encrypted private voting, the voter's choice cannot be decrypted.
Having a private voting option solves this problem. But the onchain component is also important, because it means that there is no middleman to store your results in between: it's just a blockchain.
Some private voting solutions may sacrifice decentralization in order to protect votes, but Nouns DAO knew that would be a deal breaker. Therefore, they chose teams that were willing to solve the problem of private voting And com. onchain.
What is private voting proof of concept and how does it work?
The teams built a proof of concept (POC) following the parameters set forth by Nouns DAO. This proof of concept is not a live product, meaning it is not market ready or validated. In our case, you need to interact with the proof of concept (POC) through the command line interface (CLI), so you write code instead of clicking buttons in the interface.
The proof of concept (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. Here are the steps:
1: Register your wallet (this is done before voting for the first time)
Each wallet must register its public key before the voting process begins. This only needs to be done once per address, and you do not need to register every time you vote.
Connect your wallet to the zkRegistry app, register the public key, and copy the private key required for voting.
2: Create a voting process
Anyone can create a voting process via the CLI using the “Create Process” subcommand. An IPFS ID can be provided to associate the process with specific information.
Additional logic, such as limiting voting to wallets containing owned or delegated NFTs, can be easily implemented at the smart contract level.
3: Cast your vote
Registered wallets that meet eligibility requirements (such as holding NFTs – whether owned or delegated non-delegated ones – at the time the vote was generated) can generate a ballot and corresponding proofs.
The vote can be submitted to the Voting Roll Smart Contract (VSC) during the voting period. Votes (ballot + proofs) and submission are generated together through the CLI using the “vote” subcommand.
One vote is allowed per NFT, because weighted voting is excluded in our proposal. So, if you own more than one NFT, you'll repeat this step — creating a new ballot and casting a vote — for each NFT you own.
4: Counting the votes
After the voting period ends and the decryption key is released, anyone can verify the outcome of the voting process by tallying the results and sending them with corresponding proofs to the VSC. This should only be done once.
Use the command line interface (CLI) with the “tally” subcommand. The subcommand does not return output if called before the end of the voting period.
As you can see in the image below, the final voting results are shared without voters' wallet addresses.
Before delivering the final product to Nouns DAO, the team will need to research a solution to support multisig and develop a voice aggregation solution. Multisig support will allow multiple signatures to cast votes, rather than just EOA wallets, which is what the current Proof of Concept (POC) allows.
Some of these tasks are currently on the roadmaps of Aragon ZK Research and Aztec Labs, so they will contribute to making this happen in production.
What then?
Aragon ZK Research will apply the lessons learned to DAOs on Aragon OSx
Aragon ZK Research will continue to develop key components of this project by expanding its research to include the Aragon OSx plugin. This plugin will allow DAOs built on Aragon OSx to have completely private voices, opening up powerful functionality for organizations.
The codename will likely be zk-POPVOTE (zk proof-based private cross-chain voting). The final technical report provides specific details and an initial roadmap.
Aztez will contribute to Noir to improve special voting
Aztec Labs will continue to contribute to Noir's development to enhance developer and user experiences through private, trustless voting. From getting recursive compilation into web browsers, looking into browser proof improvements, to researching and developing the next version of our proven backend, we are excitedly looking forward to the ZK DAO governance boom that will be unlocked with these technologies.
Dive into their research
Check out these links to explore their research:
the documents:
Warehouses:
- Anonymous voting: voter client library, CLI, and smart contracts (including zkRegistry)
- noir-trie-proofs: Decrypt RLP, Ethereum state, and verify proof of storage in Noir
- tlcs-c: Implementation of the Timelock C cryptographic service protocol (currently used in Timelock.zone)
- tlcs-rust: Rust implementation of the Timelock Crypto Service protocol (for use in Timelock.zone when put into production)
- tlcs-chain: Cosmos Blockchain that provides time lock crypto service
- zk-registry-ui-demo: A web-based UI using MetaMask to record zk registry