Forking is the crypto-native way for groups of token holders to exit together into a new instance of their protocol, resulting in maximal conservation of momentum in the ecosystem; famous examples include the Ethereum Classic fork and the Bitcoin Cash fork. We believe it's time to enable DAO forks as well, starting here at Nouns.
To date, there has been no DAO version of forking, but it is needed. How can we protect a minority against a tyrannical majority? Or, in less extreme cases, how can groups amicably part ways on a conflict of visions? Ragequit has been used in some cases, allowing individuals to leave with a pro rata share of the treasury, but it comes with a variety of legal and incentive risks, e.g. overemphasis on individuals.
Today we’re excited to share a solution Nouns has been working on: Nouns Fork. In our model, any token holder can signal to fork (exit) in response to a governance proposal. If a quorum of 20% of tokens signals to exit, the fork will succeed. We discuss further below.
We encourage Nouners and delegates to familiarize themselves with Nouns Fork in anticipation of the upcoming upgrade proposal once the feature is complete and audited. Please reach out with questions and feedback, so we can make sure to fix any bugs in the design or how it’s communicated. We’ve been careful to minimize the scope of this initial version for the sake of shipping fast; there’s ample room for improvement in future versions.
Nouns Fork introduces a new forking user flow. This flow enables Nouners to start a fork as soon as the Fork Threshold is reached. The feature operates in one of two states: (1) Escrow Period and (2) Forking Period.
During the Escrow Period:
Any Nouner can put their tokens in escrow, contributing towards reaching the fork threshold.
Nouners can provide context why they are forking by providing proposal IDs that led to their forking, as well as a free text reason.
Nouners can withdraw their tokens from escrow as long as the forking period hasn't started.
The forking period commences when the number of escrowed tokens meets the fork threshold, and someone calls the fork DAO function.
Nouners cannot vote nor propose with tokens in escrow.
The Forking Period:
Begins when the fork function is called; the fork function deploys a new Nouns DAO.
Lasts for several days (e.g. 7 days), allowing additional token holders to send their Nouns to the DAO and join the newly forked DAO.
During this period original DAO proposals can't be executed, to prevent race conditions between the forking flow and any malicious proposals.
Once forking starts it cannot be canceled.
New DAOs are deployed with vanilla ragequit in place, allowing any token holder to quit on their own at any time. Otherwise it's possible for a new DAO majority to collude to hurt a minority, and the minority wouldn't have any last resort if they can't reach the forking threshold; furthermore bullies/attackers can recursively chase minorities into fork DAOs in an undesired attrition war.
Funds (ETH & ERC20 tokens) are sent from the original DAO to the new DAO.
Forking Nouners claim new DAO tokens with the same IDs and same art as the Nouns they returned to the original DAO.
Before diving into the fork initial configuration, it's important to highlight all fork DAO contracts are upgradable, giving its token holders full freedom to adjust code and parameters through proposals. For more technical details you're invited to read this spec.
Basis: Nouns DAO V1 (no dynamic quorum, no voting gas refunds).
Vetoer: not set.
Delayed Governance: waits for all escrowed Nouners to claim their new tokens or until the delay expiration timestamp (e.g., 30 days after creation) is reached; to prevent abuse by quick claimers targeting those who need more time.
Vanilla ragequit: fork DAOs have vanilla ragequit instead of forking; otherwise it's possible for a majority to collude to hurt a minority, and the minority wouldn't have any last resort if they can't reach the fork threshold; furthermore bullies/attackers can recursively chase minorities into fork DAOs in an undesired attrition war.
Art & Descriptor: the same as current Nouns.
Token IDs: forkers get new tokens with the same IDs of the tokens they had in current Nouns.
Founders Reward: removed.
Paused: token holders need to pass a proposal to kick it off, giving them time to reconfigure.
Start ID: set to the last ID on current Nouns auction.
This release will not include a dedicated UI for fork DAOs.
For governance forks can use existing tools like Agora, HouseOfNous, Tally, etc.
For a complete solution forks can deploy a modified version of nouns.wtf.
Q: What happens to the tokens that were escrowed?
A: Once the fork happens, the DAO can transfer them to any account it chooses to, including an auction contract, individuals' accounts, etc. Tokens held in the escrow contract or in the treasury contract are excluded from total-supply-dependent calculations, e.g. proposal threshold and quorum.
Q: What about NFTs in the treasury, e.g. LilNouns?
A: They are kept in the original DAO's treasury. Future versions may introduce some fair forking mechanism, e.g. random permutations.
Q: Why the big change from the previous design? Why do owners fork and not delegates, and why can't we tie a fork decision to a vote?
A: We had a wrong assumption. Nouns token delegation doesn't store which Nouns are delegated to each account, so we can't identify which Nouns participated in each vote. Moreover, the action of forking seems more appropriate for owners, as it involves transferring their Nouns.
Another challenge: an attacker could create multiple malicious proposals, making it hard for honest actors to establish a clear shelling point for everyone to fork on. We belive this type of attack is easily mitigated by having a dedicated track for forking.
Q: Why allow vanilla ragequit in fork DAOs, versus deploying them with the same forking mechanism as the OG DAO?
A: Forking would allow an attacker to follow forkers into their new DAO in a recursive attrition war. While we have ideas on how to dilute the attacker, they introduce undesired UX complexities. Additionally, a fork design might lead to token distributions in the new DAO where a majority can bully a minority that doesn't have enough tokens to meet the fork threshold (e.g., 140 Nouns fork, 130 collude to bully the other 10).
Q: Why add a 'no proposal execution' constraint instead of making sure the forking flow ends in time?
A: We considered an alternative where the fork creator would set an end timestamp. However, this approach might result in forking ending too early or too late. Ending too early could prevent enough people from joining, while ending too late might enable a malicious proposal to execute ahead of the fork. The timestamp approach could also lead to situations where people participate in two parallel forks and move from one to another. Overall, this UX seems risky.
Q: Can an attacker follow into the new forked DAO?
A: Yes, this griefing vector is a known issue. It stems from a NounsToken contract limitation where we can't easily know which Noun IDs are part of each vote; this limitation means we can't prevent an attacker from joining the fork where Nouners are trying to run away from an attack. In this version your final recourse would be to quit the forked DAO on your own, using the simple quit mechanism built into fork DAOs.
This could be fixed in future versions; a couple of technical directions like storage proofs or moving to NFT-based voting, could let us query in smart contract code per Noun how it voted, and therefore block an attacker from joining a fork (e.g. you can't fork on a proposal if you voted for it).
We're choosing to compromise in this version for the sake of shipping to mainnet quickly.
Q: Why base fork DAOs on V1 and not V2/V3?
A: V3 is not ready yet, and V2 is at Ethereum's contract size limit, and would require a lot of refactoring to allow any new code to be added. Any fork that wants can pretty easily upgrade their governor, hopefully to a stable V3.
Q: Why the 20% fork threshold? And why not just vanilla ragequit?
A: It's important that forking happen rarely, and by a large group of Nouners, to prevent potential financial abuse.
There’s still time for feedback! Please let us know if you identify any problems or if you have better ideas.
We're already coding this design and are in touch with auditors; next we're planning to run a bunch of tests, get it audited, and finally submit a proposal to upgrade the DAO to this new version.
We’re grateful for the support we’ve been getting from several Nouns community members: solimander, will price, digital oil, 4156, Noun 40, vapeape and Chris.
@davidbrai & @eladmallel