• This repository has been archived on 15/Jan/2024
  • Stars
    star
    244
  • Rank 165,885 (Top 4 %)
  • Language
    TypeScript
  • Created almost 3 years ago
  • Updated 10 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

DAO Template

This has been updated to work with Sepolia over Goerli

You can also see the python/brownie version of this here.

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. (hint hint, someone should build this. )

A typical hybrid governance with a trusted multisig might looks like:

Hybrid governance is much cheaper, just as secure, but the tooling is still being developed.

Tools:

No Code Tools

The following have tools to help you start a DAO without having to deploy contracts yourself.

(back to top)

Getting Started

Work with this repo in the browser (optional)

Open in Gitpod

It's recommended that you've gone through the hardhat getting started documentation before proceeding here.

Requirements

  • git
    • You'll know you did it right if you can run git --version and you see a response like git version x.x.x
  • Nodejs
    • You'll know you've installed nodejs right if you can run:
      • node --versionand get an ouput like: vx.x.x
  • Yarn instead of npm
    • You'll know you've installed yarn right if you can run:
      • yarn --version And get an output like: x.x.x
      • You might need to install it with npm

Installation

  1. Clone this repo:
git clone https://github.com/PatrickAlphaC/dao-template
cd dao-template
  1. Install dependencies
yarn

or

npm i 
  1. Run the test suite (which also has all the functionality)
yarn hardhat test

or

npx hardhat test

If you want to deploy to a testnet: 4. Add a .env file with the same contents of .env.example, but replaced with your variables. WARNING WARNING WARNING

DO NOT PUSH YOUR PRIVATE_KEY TO GITHUB

Usage

On-Chain Governance Example

Here is the rundown of what the test suite does.

  1. We will deploy an ERC20 token that we will use to govern our DAO.
  2. We will deploy a Timelock contract that we will use to give a buffer between executing proposals.
    1. Note: The timelock is the contract that will handle all the money, ownerships, etc
  3. We will deploy our Governence contract
    1. Note: The Governance contract is in charge of proposals and such, but the Timelock executes!
  4. We will deploy a simple Box contract, which will be owned by our governance process! (aka, our timelock contract).
  5. We will propose a new value to be added to our Box contract.
  6. We will then vote on that proposal.
  7. We will then queue the proposal to be executed.
  8. Then, we will execute it!

Additionally, you can do it all manually on your own local network like so:

  1. Setup local blockchain
yarn hardhat node
  1. Propose a new value to be added to our Box contract

In a second terminal (leave your blockchain running)

yarn hardhat run scripts/propose.ts --network localhost
  1. Vote on that proposal
yarn hardhat run scripts/vote.ts --network localhost
  1. Queue & Execute proposal!
yarn hardhat run scripts/queue-and-execute.ts --network localhost

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.

(back to top)

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).

(back to top)

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!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

(back to top)

License

Distributed under the MIT License. See LICENSE.txt for more information.

(back to top)

Contact

Hardhat - @HardhatHQ Patrick Collins - @patrickalphac

(back to top)

Acknowledgments

(back to top)

You can check out the openzeppelin javascript tests for a full suite of an example of what is possible.

More Repositories

1

nft-mix

Solidity
803
star
2

dungeons-and-dragons-nft

#chainlink #nft
JavaScript
603
star
3

hardhat-security-fcc

Solidity
410
star
4

all-on-chain-generated-nft

A repo for generating random NFTs with metadata 100% on chain!
JavaScript
356
star
5

full-stack-web3-metamask-connectors

180
star
6

chainlink_defi

Build a defi yield farmable dApp. Get started here.
JavaScript
157
star
7

rwa-creator

Solidity
133
star
8

smart-contract-frameworks

A list of smart contract frameworks
C
119
star
9

hardhat-smartcontract-lottery-fcc

JavaScript
118
star
10

hardhat-nft-marketplace-fcc

JavaScript
114
star
11

hardhat-nft-fcc

JavaScript
101
star
12

simple-storage-fcc

Solidity
99
star
13

ethers-simple-storage-fcc

JavaScript
88
star
14

unstoppable-ui

JavaScript
87
star
15

async-python

Shows how to use async requests vs requests
Python
87
star
16

hardhat-fund-me-fcc

JavaScript
83
star
17

defi-stake-yield-brownie

Solidity
78
star
18

smartcontract-lottery

Solidity
75
star
19

PatrickAlphaC

75
star
20

hardhat-simple-storage-fcc

JavaScript
74
star
21

aave_brownie_py

Solidity
61
star
22

nextjs-smartcontract-lottery-fcc

JavaScript
60
star
23

foundry-play

Solidity
59
star
24

fund-me-fcc

Solidity
56
star
25

pokemon-nft

Pokémon NFTs
Solidity
54
star
26

defi-stake-yield-brownie-freecode

Solidity
53
star
27

simple_storage

Solidity
51
star
28

erc20-brownie

Solidity
50
star
29

fund_me

Solidity
48
star
30

storage-factory-fcc

Solidity
45
star
31

web3_py_simple_storage

Python
45
star
32

nextjs-nft-marketplace-moralis-fcc

JavaScript
44
star
33

lens-blog

A minimal example of using Lens Protocol to build a blog
JavaScript
39
star
34

nextjs-nft-marketplace-thegraph-fcc

JavaScript
39
star
35

hardhat-erc20-fcc

JavaScript
38
star
36

html-js-ethers-connect

JavaScript
37
star
37

nft-demo

Python
37
star
38

defi_py_mix

Solidity
36
star
39

storage_factory

Solidity
35
star
40

hardhat-defi-fcc

Solidity
35
star
41

aave_web3_py

web3.py way to interact with aave
Python
35
star
42

denver-security

Solidity
34
star
43

html-fund-me-fcc

JavaScript
32
star
44

graph-nft-marketplace-fcc

TypeScript
32
star
45

sc-language-comparison

Solidity
31
star
46

smartcontract-upgrades-example

JavaScript
28
star
47

foundry-smart-contract-lottery-f23

Solidity
27
star
48

nextjs-ethers-metamask-connect

JavaScript
26
star
49

brownie_fund_me

Solidity
25
star
50

weather-nft

chainlink weather nfts
Solidity
24
star
51

brownie_simple_storage

Python
23
star
52

chainlink-the-graph

JavaScript
22
star
53

flashloan-forta-py

Python
22
star
54

chainlink-hardhat

JavaScript
20
star
55

upgrades-mix

Solidity
19
star
56

multicall-js

JavaScript
19
star
57

signatureVerification

Solidity
18
star
58

openweathermap_cl_ea

JavaScript
17
star
59

denver-security-challenges

Solidity
17
star
60

multicall

Python
16
star
61

hardhat-upgrades-fcc

JavaScript
16
star
62

hardhat-dao-fcc

TypeScript
15
star
63

ai-stablecoin

Solidity
15
star
64

staking-ui-demo

JavaScript
15
star
65

decentralized-raffle

TypeScript
15
star
66

ipfs_cl_ea

IPFS Chainlink External Adapter
JavaScript
14
star
67

get-all-transactions

Python
14
star
68

hardhat-simple-storage

JavaScript
13
star
69

aave_brownie_py_freecode

Solidity
13
star
70

hardhat-events-logs

JavaScript
12
star
71

nextjs-moralis-metamask-connect

JavaScript
12
star
72

hardhat-metamorphic-upgrades-fcc

JavaScript
12
star
73

defi-dapp

TypeScript
12
star
74

battle-game

JavaScript
11
star
75

foundry-vyper

A package for deploying and compiling vyper code in foundry
Solidity
11
star
76

fuzzing-example

Solidity
10
star
77

vyper-chain-info

Python
10
star
78

vrf_pizza

lol
Solidity
10
star
79

dapptools-demo

Solidity
10
star
80

nextjs-web3-react-metamask-connect

JavaScript
10
star
81

eth-global-live-audit

Solidity
10
star
82

filecoin_cl_ea

JavaScript
9
star
83

puppy-raffle-smartcon

Solidity
9
star
84

ape-fund-me-v23

Python
8
star
85

erc20-brownie-py

Python
8
star
86

brownie-events-logs

Python
7
star
87

patrickalphac.com

TypeScript
7
star
88

send_blob

Python
7
star
89

unfinished-defi-workshop

JavaScript
6
star
90

vrf_pizza_front_end

lol
CSS
6
star
91

gcp-weather

Solidity
6
star
92

nextjs-web3modal-metamask-connect

JavaScript
6
star
93

smartcon-hacker-house-hunt-rules

6
star
94

hardhat-fund-me-forked-fcc

JavaScript
5
star
95

geo_db_brownie

Solidity
5
star
96

clever-lottery-web3

JavaScript
5
star
97

scavenger-hunt

TypeScript
5
star
98

nextjs-ethers-introduction-fcc

JavaScript
5
star
99

vheader

A tool for making perfect vyper headers, inspired by transmissions11
Rust
5
star
100

nextjs-usedapp-metamask-connect

JavaScript
5
star