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 install
Compile the smart contracts with Hardhat:
$ yarn compile
Compile the smart contracts and generate TypeChain artifacts:
$ yarn typechain
Lint the Solidity code:
$ yarn lint:sol
Lint the TypeScript code:
$ yarn lint:ts
Run the Mocha tests:
$ yarn test
Generate the code coverage report:
$ yarn coverage
See the gas usage per unit test and average gas per method call:
$ REPORT_GAS=true yarn test
Delete the smart contract artifacts, the coverage reports and the Hardhat cache:
$ yarn clean
- Install dependencies and compile. (See above)
- Get some ropsten ETH
- Setup
.env
file 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.