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 everyday people. Orgs, federations of orgs, activists, neighborhoods, stewards of the commons, collectives, and other communities are invited to deploy their own DAO.

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.

Versions

Support

You can contact me via Element, Telegram, Twitter, Discord, or LinkedIn.