This contract allows any DAO to have a Rage Quit mechanism without having to modify any of its existing code. It is required that the DAO gov tokens are transferable and that the DAO is able to execute approvals from the contract holding its tokens.
Development was kindly supported by Tally ❤
Before running any command, you need to create a .env file and set a BIP-39 compatible mnemonic as an environment
variable. Follow the example in .env.example. If you don't already have a mnemonic, use this website to generate one.
Then, proceed with installing dependencies:
yarn installCompile the smart contracts with Hardhat:
$ yarn compileCompile the smart contracts and generate TypeChain artifacts:
$ yarn typechainLint the Solidity code:
$ yarn lint:solLint the TypeScript code:
$ yarn lint:tsRun the Mocha tests:
$ yarn testGenerate the code coverage report:
$ yarn coverageSee the gas usage per unit test and average gas per method call:
$ REPORT_GAS=true yarn testDelete the smart contract artifacts, the coverage reports and the Hardhat cache:
$ yarn clean- Install dependencies and compile. (See above)
- Get some ropsten ETH
- Setup
.envfile by copying and filling in.env.example - Run
yarn deploy:testdao - Wait. It takes some time
- The contracts deployed will be logged at the end
- Go to the rageQuit contract at: https://ropsten.etherscan.io/address/`rageQuitContractAddress`#writeContract
- Connect with the same wallet you deployed from through MetaMask
- Call rageQuit with the following params:
- _quitAmount: 1000000000000000000
- Order the token addresses manually. If token addresses are submitted out of order the tx will fail.
- _tokens: Addresses of the MockTokens formatted in this manner: ``["TOKEN_0_ADDRSSS", "TOKEN_1_ADDRSSS", "TOKEN_3_ADDRSSS", "TOKEN_4_ADDRSSS", "TOKEN_5_ADDRSSS"]
- Witness your beautiful rageQuit tx
Deploy the contracts to Hardhat Network:
$ yarn deploy:rageQuit --rage-quit-token [gov token of the dao] --vault [contract holding the tokens in the treasury]Each token which should be claimable on rage quit needs to be approved from the vault to allow the rage quit contract to pull the tokens.
- Deploy contract (see above)
- Approve rage quitable tokens through a DAO vote to allow the rageQuit contract to spend them.
- To ragequit call
rageQuit(uint256 _quitAmount, address[] calldata _tokens)passing the amount of tokens you want to burn and which tokens you want to claim.
If you use VSCode, you can enjoy syntax highlighting for your Solidity code via the vscode-solidity extension. The recommended approach to set the compiler version is to add the following fields to your VSCode user settings:
{
"solidity.compileUsingRemoteVersion": "v0.8.4+commit.c7e474f2",
"solidity.defaultCompiler": "remote"
}Where of course v0.8.4+commit.c7e474f2 can be replaced with any other version.