This is the first post in a series in which we’re trying something new: to design a new Nouns DAO version in public, in collaboration with the community.
The new Nouns Governor will be our first break away from Compound Governor Bravo we’ve been relying on since day one. At its core, Nouns Governor is about NFTs voting, rather than wallets. Let’s dive into the problems NFT voting can solve, and explore the opportunities it may open up.
We started working on Nouns contracts in the spring of 2022, and in the early days of studying the code, we noticed things worked different from what we intuitively expected in an NFT DAO. The first example was that Nouners couldn’t delegate individual Nouns; to do so they have to transfer a Noun to a separate wallet and then delegate. Another example was that Nouners couldn’t override how their delegates voted, and while it didn’t seem urgent it did feel important since we knew bribe markets (e.g. Federation’s governance pools) were inevitable.
In those early days we were managed directly by the Tech Grants Pod, and shipped the new art contracts, and DAO V2 with dynamic quorum and voting gas refunds. Shortly after we started managing our backlog, and with community help decided to ship other improvements that ultimately became DAO V3, including propose by sigs and the renowned (reNouned!) Fork mechanism. The NFT voting design was on our minds, but never made it to the top of the list, until now.
So why now? Why build it at all? What changed?
The main thing is the Fork; the spark has always been minority protection from a majority attack, and say in the case of a majority passing a malicious proposal, the minority should be able to fork without the malicious majority following them into the new DAO. However we hit a technical limitation: the Nouns token contract does not store per Noun which account can vote with it in each snapshot block, so we can’t discern which Nouns should be allowed to fork and which should be blocked. Our plan is to ship NFT voting and then ship an improved Fork V2. More details on Fork V2 will come in a future post.
A much older reason is the aforementioned delegate override problem: we think token holders should be able to override their delegates’ votes, primarily from a security perspective. Governance pools make attacks potentially much cheaper than the alternative of buying Nouns. The limitation mentioned above, not knowing how each Noun voted or even who delegated to whom, is why we haven’t implemented the override to date.
For personal security, we don’t like the current constraint that Nouners must use their Noun-owning wallets to update delegations; they should be able to update delegations from their hot wallets, to minimize the risk of losing their assets.
Beyond security, there are several user experience annoyances and confusions NFT voting can improve upon. Let’s run through them.
New Nouners who buy a Noun on auction are often disappointed to discover they can’t vote on current proposals; wouldn’t it be way more delightful to allow them to participate immediately?
Snapshots are confusing for Nouns veterans as well; we’ve seen many messages expressing confusion after transfers or delegations, not being sure which wallet to use or how many votes their wallet has for a given proposal. It can and should be much easier.
We’ve also seen a proposal getting cancelled because the proposer delegated their Nouns and went below proposal threshold; we’re partially solving this with propose by sigs, because Nouners won’t have to delegate just to sponsor a proposer, but with NFT voting Nouners can propose and delegate and not have to go below threshold.
We also hope to solve several problems related to granularity: subDAOs should be able to easily split their votes (e.g. if subDAO vote on a prop is 50/50, let them split their Noun votes both ways); a whale should be able to delegate at a single-Noun granularity without transferring to individual wallets; and a whale with many times proposal threshold’s worth Nouns balance should be able to submit multiple proposals from the same wallet.
Subdelegation is another use case we’d like to enable; in many cases in Nouns there is high trust in delegation relationships, such that the token holder is happy to let their delegate further delegate their votes, whether for a specific proposal with domain expertise, or just because the delegate is going on a long offline vacation. Fun experiments are also made possible, e.g. Nouncil can have a primary wallet for all their delegations, then periodically vote to subdelegate some of their votes to individual members.
Finally, a bit on legibility. In the current state it’s hard to read onchain, e.g. with Etherscan, which account can vote with which Nouns at any given time, or how a certain Noun voted on a specific proposal. This information is available using indexers and webapps; however we think it’s even better if it’s legible with nothing but Etherscan.
The Nounders’ decision to use Compound Bravo with snapshots was great! It allowed them to ship the project with high security and low cost. We would have done the same thing. And for ERC20 DAOs checkpoints make perfect sense, since they don’t have the non-fungibility property we can rely on.
Checkpoints were added to Compound to solve two major problems:
Double voting: otherwise you could easily vote, transfer your tokens to another wallet, and vote again.
Flashloan voting: a sequence done in a single block that costs near-zero: borrow gov tokens or borrow money and buy gov tokens on Uniswap, vote, repay the loan with a small fee.
Checkpoints prevent double voting simply by looking at a single point in time; and flashloan voting is prevented by making sure voters vote at least one block after their latest snapshot.
In NFT voting we prevent double voting easily, by storing which NFTs already voted. And we prevent flashloan voting with a minimal version of snapshots, allowing an NFT to vote only if at least one block passed since its latest transfer block.
Some of the problems we’ve outlined have been solved in different approaches, while some are more specific to NFTs and Nouns in particular. Some solutions we’re aware of:
ScopeLift’s flexible voting, which allows a wallet holding ERC20 governance tokens submit a vote with data indicating how to split the vote, e.g. 60% For and 40% against.
Franchiser, which allows holders of COMP-style voting tokens to selectively delegate portions of their voting power to third parties, and allows delegates to further sub-delegate.
ZK storage proofs, can allow users to submit a proof to the DAO showing who delegated to whom at a certain block. There are several concerns with storage proofs, such as the time and compute resources to generate proofs and the gas costs of verifying proofs; however we’re curious to explore this direction down the line.
Worth noting we’re also taking time to explore other DAO projects like Llama, OpenZeppelin, Aave and others.
This is another less tangible reason we're excited to ship Nouns Governor; we believe the Nouns community will find unexpected ways to build cool things with it.
One example from a recent chat is that proposers could bake into their props temporary art modifications based on how Nouns vote on their prop; e.g. red.org could add custom noggles to all Nouns that vote For their proposal if it passes, and then send them a physical copy of those custom noggles.
Please reach out if you have other cool ideas!
We want your feedback. Do you find this direction interesting? What are we missing?
In the meantime we’re working on additional posts, including:
NFT voting designs: should we have a delegation NFT? should we wrap Nouns in a new token? or keep it super simple?
Gas comparison of the current state vs the potential designs.
Fork V2 additional details.
And possibly a few more, ending with an update on final decisions.
Thank you for your attention,
the verbs ⌐◨-◨