Skip to content
/ gov Public template

A DAO framework built with Open Zeppelin's Governor in combination with NFTs.

License

Notifications You must be signed in to change notification settings

w3hc/gov

Repository files navigation

Gov

A DAO framework built with Open Zeppelin's Governor contract in combination with NFTs.

  • Gov.sol is the Governor contract
  • NFT.sol is the NFT contract (ERC-721)

Since v0.10.0, Gov is using non-tranferable membership NFTs ("SBTs"), it is also timestamp-based by default.

Motivation

Provide a coordination tool that fits the needs of regular users.

Install

pnpm install

Test

pnpm test

Deploy

Create a .env on the model of .env.template:

cp .env.template .env
  • Add your own keys in your .env file
  • Edit the dao.config.ts file (optional)
  • Then deploy to Sepolia:
pnpm deploy:sepolia

Then you can interact with your DAO using Tally.

Security

Here are the differences between the Governor/ERC-721 implementations suggested by Open Zeppelin and ours:

The following function is onlyGovernance, meaning it can only be triggered by a vote.

  • setManifesto() updates the CID.

The following functions are onlyOwner, and since the NFT contract ownership is transferred to the Gov contract, they can only be triggered by a vote.

  • safeMint() adds a new member.
  • govBurn() bans a member.
  • setMetadata() changes the tokenURI of a given NFT ID.

Supported Networks

Network Chain ID Documentation
Optimism Mainnet 10 Documentation
Base Mainnet 8453 Documentation
Sepolia Testnet 11155111 Documentation
OP Sepolia Testnet 11155420 Documentation
Base Sepolia Testnet 84532 Documentation

Core Dependencies

Support

Feel free to reach out to Julien: Farcaster, Element, Status, Telegram, Twitter, Discord, or LinkedIn.