Awesome
DAO Mix
<div id="top"></div> <!-- ABOUT THE PROJECT -->About
How to DAO
This repo is meant to give you all the knowledge you need to start a DAO and do governance. Since what's the point of a DAO if you can't make any decisions! There are 2 main kinds of doing governance.
Feature | On-Chain Governance | Hybrid Governance |
---|---|---|
Gas Costs | More Expensive | Cheaper |
Components | Just the blockchain | An oracle or trusted multisig |
A typical on-chain governance structure might look like:
- ERC20 based voting happens on a project like Tally, but could hypothetically be done by users manually calling the vote functions.
- Anyone can execute a proposal once it has passed Examples Compound
On-chain governance can be much more expensive, but involves fewer parts, and the tooling is still being developed.
A typical hybrid governance with an oracle might look like:
- ERC20 based voting happens on a project like Snapshot
- An oracle like Chainlink is used to retreive and execute the answers in a decentralized manner.
A typical hybrid governance with a trusted multisig might looks like:
- ERC20 based voting happens on a project like Snapshot
- A trusted gnosis multisig is used to exectue the results of snapshot. Examples: Snapsafe
Hybrid governance is much cheaper, just as secure, but the tooling is still being developed.
Tools:
- Snapshot
- UI for off-chain voting / sentiment analysis
- Tally
- UI for on-chain voting
- Gnosis Safe
- Multi-sig
- Openzeppelin
- DAO code tools
- Zodiac
- More DAO code tools
- Openzeppelin Defender
- A tool to propose governance and other contract functions.
No Code Tools
The following have tools to help you start a DAO without having to deploy contracts yourself.
- DAO Stack
- Aragon
- lol, just kidding. Here is the real link.
- Colony
- DAOHaus
- DAO Leaderboard
Getting Started
Prerequisites
This is an example of how to list things you need to use the software and how to install them.
- Python
- brownie
python3 -m pip install --user pipx python3 -m pipx ensurepath # restart terminal pipx install eth-brownie
If you want to test and run locally:
- nodejs & npm
- yarn
npm install -g yarn
Installation
- Clone this repo:
git clone https://github.com/brownie-mix/dao-mix cd dao-mix
- Install hardhat
yarn add hardhat
If you want to deploy to a testnet:
3. Add a .env
file with the same contents of .env.example
, but replaced with your variables.
- DO NOT PUSH YOUR PRIVATE_KEY TO GITHUB
- Add
dotenv: .env
to yourbrownie-config.yaml
Usage
On-Chain Governance Example
We have just 1 script in the scripts
folder at the moment. This will take you through the whole process of governance.
- We will deploy an ERC20 token that we will use to govern our DAO.
- We will deploy a Timelock contract that we will use to give a buffer between executing proposals.
- Note: The timelock is the contract that will handle all the money, ownerships, etc
- We will deploy our Governence contract
- Note: The Governance contract is in charge of proposals and such, but the Timelock executes!
- We will deploy a simple Box contract, which will be owned by our governance process! (aka, our timelock contract).
- We will propose a new value to be added to our Box contract.
- We will then vote on that proposal.
- We will then queue the proposal to be executed.
- Then, we will execute it!
brownie run scripts/governance_standard/deploy_and_run.py
Or, to a testnet
brownie run scripts/governance_standard/deploy_and_run.py --network kovan
You can also use the Openzeppelin contract wizard to get other contracts to work with variations of this governance contract.
Off-Chain governance Example
This sectoin is still being developed.
Deploy your ERC20 and make proposals in snapshot.
<p align="right">(<a href="#top">back to top</a>)</p> <!-- ROADMAP -->Roadmap
- [] Add Upgradeability examples with the UUPS proxy pattern
- [] Add Chainlink Oracle Integration with Snapsafe example
See the open issues for a full list of proposed features (and known issues).
<p align="right">(<a href="#top">back to top</a>)</p> <!-- CONTRIBUTING -->Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
License
Distributed under the MIT License. See LICENSE.txt
for more information.
Contact
Brownie - @BrownieEth Patrick Collins - @patrickalphac
<p align="right">(<a href="#top">back to top</a>)</p> <!-- ACKNOWLEDGMENTS -->Acknowledgments
- Openzeppelin Governance Walkthrough
- Openzeppelin Governance Github
- Vitalik on DAOs
- Vitalik on On-Chain Governance
- Vitalik on Governance in General
You can check out the openzeppelin javascript tests for a full suite of an example of what is possible.