Resubmission since the previous prop would revert due to an incorrect txn bundle (a future prop could add Tenderly txn simulation that would simulate the prop execution).
Rage Quit Contract: 0x95852813766e4A3112891FE6a47100023D61e5a4
RQ has been a topic discussed many times but hasn't been actually implemented. With a growing number of disgruntled members of this DAO, rage quit should have been an option a long time ago. Thank you to all members who have delegated their votes to me.
The primary argument that prevented RQ was that RQ somehow makes Nouns a security and holds the DAO liable for breaking SEC laws. This is quite flawed as the DAO already operates in grey waters in relation to SEC regulations.
The DAO has already acted as seed investors in proposals and mimics an investment syndicate. Nouns are essentially class A shares for an entity with a large treasury. A large portion of the treasury is in stETH which is an active area of discussion of whether it is a security or not.
If someone wanted to argue that NounsDAO breaks securities laws, they would have already done so, adding rage quit does not suddenly make Nouns a security.
This implementation is the simplest form of RQ (the contract is only ~100 lines minus comments), we didn’t want to add any smart contract complications. The flow goes as follows:
The treasury will fund the RQ contract in rounds. Round 1 will consist of 25% of the treasury (25% of the ETH and 25% of the stETH). If Round 1 is fully claimed (25% of Nouns have rage quit), another RQ proposal to fund Round 2 will be submitted to fund another 25% (and so on and so on). The reasoning for rounds is that we don’t want to handicap the DAO by taking custody of all funds while RQ is in process.
Round 1 will be active for 2 weeks, during that time, holders that wish to ragequit will transfer their Nouns to the RQ contract and receive their book value of the treasury. The reason we lock Nouns into the contract versus burn Nouns is because only the DAO has the permissions to burn Nouns, thus, the DAO can retrieve all Nouns from the contract at any point.
In the case there are funds left in the RQ contract after the deadline (no more people want to rage quit), the DAO can take back all remaining funds.
Only Nouns up to Noun #634 (the last noun before this proposal) will be eligible for RQ. This is to prevent new bidders from attempting to arbitrage new Nouns that get auctioned until the prop passes/fails. We are aware that there are Nouns on secondary (currently 12) that may be arbed against the treasury but the way we look at it, these Nouns will be used to get RFV from the treasury regardless. The Nouns selling on secondary below RFV will either be delisted and claimed for RFV or someone will buy the Noun and potentially claim for RFV. Thus, the treasury doesn’t gain more rage quitters from the Nouns on secondary (at the very best people that buy don't rage quit).
The current book value for each Nouns is calculated as follows:
ETH book value for 1 Noun is 19 ETH. This is the treasuries ETH balance rounded down with a 5% rage quit fee, the total is also rounded down - floor(13144 eth / 634 * 0.95).
StETH book value for 1 Noun is 22 ETH. This is the treasuries StETH balance rounded down with a 5% rage quit fee, the total is also rounded down - floor(14764 eth / 634 * 0.95).
Review of the contract: Most of the variables are immutable constants as to prevent any malicious prop that may siphon more funds out of the treasury. Please ensure these values are correct ``` // final nounID that was auctioned before prop was submitted uint256 public constant FINAL_ELIGIBLE_NOUN = 634;
// this is the eth treasury balance (rounded down) divided by 634 with a 5% tax // floor(13144 / 634 * 0.95) uint256 public constant ETH_BOOK_VALUE = 19 ether; // this is the steth treasury balance (rounded down) divided by 634 with a 5% tax // floor(14764 / 634 * 0.95) uint256 public constant STETH_BOOK_VALUE = 22 ether; // proxy address address public constant NOUNS_DAO = 0x6f3E6272A167e8AcCb32072d08E0957F9c79223d; // nouns treasury address address public constant NOUNS_TREASURY = 0x0BC3807Ec262cB779b38D65b38158acC3bfedE10; // nouns token address address public constant NOUNS_TOKEN = 0x9C8fF314C9Bc7F6e59A9d9225Fb22946427eDC03; // stETH address address public constant STETH = 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84;
function extendDeadline(uint256 _claimDeadline) external: This function can only be called via prop by the DAO. This increases the claim deadline and should be called in the same prop that funds the RQ contract. This effectively sets new ‘rounds’ if previous rounds have been fully claimed.
function withdrawFunds() external: This function can only be called via prop by the DAO. This allows the DAO to claim any left over funds from the RQ contract (in the case that there are no more rage quitters and there are funds left in the contract).
function withdrawNouns(uint256 memory nounIDs) external: This function can only be called via prop by the DAO. This allows the DAO to claim all Nouns that are locked in the contract.
function rageQuitSingleNoun(uint256 nounID) external: This function locks a single Noun into the contract and returns the Nouns book value to the sender.
function rageQuitNouns(uint256 memory nounIDs) external: This function locks multiple Nouns and returns book value to sender in a single txn.
The flow will be done via etherscan. It's a similar flow to Opensea where you first
setApprovalForAll() for the RQ contract and then call
rageQuitSingleNoun() with your Noun ID. If there is a desire for a frontend, we can whip something up quickly.
Funding We will fund the RQ contract with 3268 ETH and 3674 StETH which will allow up to 172 Nouns to rage quit (~25%).
25% of ETH calculation: floor(13144 0.25 / 19) 19 25% of StETH calculation: floor(14767 0.25 / 22) 22
Transactions Sending 3268 ETH and 3674 StETH to RQ contract + setting the deadline to rage quit for round 1 to be April 4 (2 weeks after this proposal passes).