Description

An improved and modernized version of Compound's popular Governor Alpha - Instead of just Yes/No votes. It supports multiple options enabling polls or an array of options to vote on - Instead on just one transaction per proposal. It supports executing multiple transactions per proposal (convenient for approve & then send flows) - Instead on having to deploy a contract/spell or encode a transaction by hand using code. It will offer a user interface to input a contract's method parameters - Instead of only supporting hand written transactions. It supports viewing/managing the treasury, swapping tokens and lending them from the app and later browsing any url/web3 app and submitting transactions as proposals - Instead of relying on tools like etherscan or zapper, integrate the treasury viewing and management into the DAO's UI - Instead on having to develop a separate contract that bridges / mints your governance token, use the built in functionality. All you need to get started is an existing ERC20 - Instead of needing to deploy a snapshotting voting token yourself, it's built into the DAO - Instead of being locked into that builtin voting ERC20, the DAO can move to a new voters contract at any time - Instead of only supporting on-chain votes. It can gather votes off-chain using EIP-712 signatures and have the dao submit them in a batch. - Instead of only being able to use the DAO with a voters ERC20. It can also be used as a multisig

RaDAO: Minimal & Modern DAO Implementation showcase

How it's made

I started out with inspiration from the Governor Alpha contract and later mixed in some token specific elements of the Moloch v3 Baal contracts. At first the goal was to lean on openzepellin libraries as much as possible, but for the sake of fitting all of the functionality in one contract I was forced to drop it and hand roll it. Their logic for a snapshotting ERC20 made it into RaDAO. 50% of the work was getting the DAO contract & all the needed functionality working, but after every adjustment, I was forced to do some serious code golfing in order to stay under the 24k contract size limit. I would say a good amount of time (>40%) was actually spent trying to keep the contract under that limit and re-organizing methods. The other 50% of the work was building out, at least a basic version of a UI for all the intended functionality. All in all I furthered my solidity depth of knowledge by quite a bit and used interesting corners of Ethers.js. I also learned a bunch of new interesting EIPs and of previous work in the DAO space.

Technologies used

1inchAaveEthereumHardhatSolidity