Council is a decentralized governance system that allows a community to manage a DAO. The governance system is designed to enable flexibility, improvements, and experimentation while successfully maintaining the security and robustness of the governed protocol.
Council is inspired by and extends several forerunners in the DAO governance space including MakerDAO's governance model and the Compound Governor contracts. Like these systems, it is a fully on-chain voting architecture that coordinates the process of making permissioned smart contract calls from privileged addresses.
Council contains several architectural choices which make it a distinct new primitive in the decentralized governance space:
- Council does not have a single security threshold to make a call, instead, various actions can be given different security threshold requirements.
- Council abstracts the vote allocation process for assigning voting power away from the actual voting process meaning that multiple complex vote allocation systems can run in parallel in the contracts.
- By default, Council ships with a Governance Steering Council (GSC) enabled which can be assigned different powers than the core voting system. Together, these features allow a wide range of voting processes and security procedures can be seamlessly integrated into one governance system.
For both non-security-critical bugs and security-related critical bugs please follow the rules and instructions highlighted in the Element Finance Bug Bounty program on the Immunefi platform.
Council is a community-driven governance protocol and there are many ways to contribute to it. We encourage you to jump in and improve and use this code whether that be contributing to Council directly, forking the governance framework for your own use, or just taking bits and pieces from it. We want everyone to build with us!
If you have a suggestion for a new feature, extension, or cool use case and want to help the community, drop by the #developers channel in our discord to discuss and you will have a warm welcome!
When contributing, please be sure to follow our contribution guidelines when proposing any new code. Lastly, because Council is a community-driven governance protocol, any new code contributions are more likely to be accepted into future deployments of the protocol if they have been openly discussed within the community first.
For a technical overview of Council's smart contracts, please read our documentation here.
git clone [email protected]:element-fi/council.git
cd council
npm install
npm run build
npm run test
Council is a community-driven protocol and there are many ways to contribute to it. We encourage anyone to use this as their protocol or DAOs governance system. If you are interested in building on top of it, improving the code, please do!
If you have any questions, feedback, ideas for improvement, or even further experiments to test out with Council, come join our #governance discord channel to talk more about this!
To submit the proposals you'll need to do the following steps:
- Follow steps 1-3 to setup and buid this repo.
- Next, you'll need make a new file
.env
and copy the contents of.env.sample
to.env
- Add the private key for the wallet you'd like the create a proposal with.
- Add the Alchemy key to connect to the provider.
There are two scripts to create proposals egp-22 and egp-23. There are located at:
scripts/egp22/createProposal.sh
scripts/egp23/createProposal.sh
They are currently set to run on a local hardhat as a safeguard. In each file, change
# this
NETWORK=hardhat
# to this
NETWORK=mainnet
Then, simple run the bash script:
./scripts/epg22/createProposal.sh