Social voting is inarguably one of the main problems affecting Nouns DAO. It compromises efficient use of the Treasury in proliferating the ⌐◨-◨ meme.
Nouners many times aren’t necessarily voting for what they believe is best. Instead, they feel trapped into quid pro quo voting, afraid that their vote could reflect poorly on their image, and/or affect the likelihood of getting their own prop through when the time comes. Conversely, it occurs that Nouners vote in favor or against a proposal based on how the proposer voted for their past props.
This dynamic is irrefutably not in the best interest of the DAO.
Evidence of this is that 85% (147/173) of on-chain props that have made it to either the Passed or Defeated state have passed. The great majority of those that passed didn’t require going back to the drawing board to optimize things like distribution, value back to the DAO, and price. Some argue that props that have support are the ones that make it on-chain, but reality is that in most cases the real discussion starts when it’s submitted on-chain.
I propose the DAO initiates R&D towards being the first to employ zK-SNARKs to attain Private Voting. Private Voting would allow Nouners or delegates to vote, the vote would be tallied trustlessly on-chain, but it would be impossible to determine if the Noun voted ‘yes’ or ‘no’. Even after the vote concluded.
I am passionate about this issue for two reasons:
-
It will ensure that the DAO only passes props where every Nouner expressed their honest opinion. This will inevitably work in favor of efficient use of the Treasury and will compel proposers to do a better job in explaining how their prop proliferates the meme efficiently. Proposers will be careful in pricing their prop as it will receive more scrutiny, which should extend the DAO’s runway.
-
zK-SNARKs are a fairly new technology that hasn’t been exploited to its full potential, and ZK Voting is mostly an unexplored problem space. In implementing Private Voting Nouns DAO will be the first DAO to do so; which will surely cement ZK Voting as Nounish.
I propose starting with a NSFW round to get some proof of concepts running. Then evolve to an on-chain prop to develop the full implementation.
My Nouns Story
I’m known as DigitalOil. I’ve been in the crypto space since 2014. This tweet pretty much reflects my evolution:
Unfortunately, although I heard of Nouns near its genesis, I didn’t pay too much attention to it. In June 2022 I bumped into Nouns again and to get my feet wet I bought some LilNouns. It wasn’t until later this year that I started thinking about DAOs more deeply and was reminded of Nouns.
This time, I did a deep-dive and this is what came out:
Then, I bought a couple Nouns. And then I deep-dove into subDAOs (LilNouns mechanics):
And I did an analysis of Nouns Prop history here:
I recently submitted a prop that uses Chainlink VRF randomness to distribute some of the Nouns Vision Glasses in the Nouns Treasury.
And now, I’d like to focus on Private Voting.
Background (zK-SNARKs)
Zero-knowledge proofs have been around since the 1980s, but it wasn’t until the early 2010s that zK-SNARKs were invented, as until that time there was a way to construct proofs but they required multiple interactions between prover and verifier which is impractical for most applications.
SNARKs are non-interactive and succint by definition; so a perfect fit for blockchains. SNARKs enabled the first cryptocurrency application of zero knowledge proofs with Zcash, a blockchain that allows for P2P private payments.
This is roughly the way zK-SNARKs would work for voting in a DAO on Ethereum:
- Lay out the conditions that need to be satisfied (in our case, conditions like):
- signer owns or has been delegated a Noun
- voting either 0 or 1
- can only vote once
- Convert the conditions into one or more QAPs (quadratic arithmetic programs). That is, write a program that is compatible with the way zk-SNARKs are composed.
- Convert the QAPs into polynomials that enforce the desired conditions.
- Very roughly — prover (voter) evaluates polynomials in such a way that reflects their vote.
- Submits the proof of evaluation and some other parameters to the vote-tallying smart contract.
- Contract verifies the proof and accepts it.
- When voting is finished, contract tallies the vote total and determines if the prop passed or not.
Some of the difficulties are:
- This hasn’t been done before with the specifications needed for a DAO on Ethereum. State of the art on the subject of ZK voting was published this year. I had a meeting with Dr. Muhammad ElSheikh, author of the paper and it’s likely I would bring him on board in the implementation phase.
- Setting conditions up such that not every token holder or registered voter is required to show up to vote.
- Not requiring excessive preparation ceremonies for each vote.
- Ensuring that the proof is small enough to fit into an Ethereum block.
- Minimizing (target keeping at zero) any trust or relying on admins.
- Making it scalable to be able to handle a growing number of voters.
- Making it dispute-free (such that the implementation doesn’t depend on an external entity having to dispute an incorrect proof; thus interrupting voting).
- Not requiring a collateral deposit from an admin or voters.
Approaches
My early research has led to some preliminary approaches in solving the problem at hand. These are the approaches and trade-offs.
Funding Breakdown
I am requesting 12 ETH per month for 3 months, paid monthly to get some proof of concepts working. An additional 1 ETH to cover infrastructure and gas expenses.
Timeline
Weeks 1-3: Planning and continuing research, including literature review and sharing findings.
Weeks 4-5: Proposing plan of how proof of concept will work
Weeks 6-10: Implementation of proof of concept on testnet
Weeks 11-12: Report of design and proof of concept results and plan for on-chain prop
Success Metrics
Although this is not an easy problem to solve as its highly unexplored territory, my hope is that we can check off as many of these objectives during this 3 month part-time residency:
- Get proof of concept implementation up on Goerli allowing token holders to vote on a proposal without revealing if they voted yes or no. Note: it will be known who voted and who didn’t.
- Setting conditions up such that not every token holder is required to vote.
- Not requiring excessive preparation ceremonies for each vote.
- Ensuring that the proof is small enough to fit into an Ethereum block.
- Making it scalable to be able to handle more voters.
- Minimizing (target keeping at zero) any trust or relying on admins.
- Making it dispute-free (such that the implementation doesn’t depend on an external entity having to dispute an incorrect proof interrupting voting).
- Not requiring depositing collateral from an admin or voters.
Conclusion
I am excited to be working at the intersection of two of my great passions – applied math and Nouns.
My hope is that we are able to achieve Private Voting for the DAO and for Nouns to be the first to make this huge leap for web3.