A minimalist onchain voting system built on OpenZeppelin Governor contracts.
Provide a coordination tool that fits the needs of everyday people.
- One member, one vote: Each NFT grants exactly one vote in governance
- Non-transferable membership: NFTs cannot be transferred between addresses
- Self-delegation by default: Members automatically delegate voting power to themselves upon receiving membership
- Vote delegation: Members can delegate their voting power to other addresses
- Membership enumeration: Track all current members via ERC721Enumerable
- Proposal creation & tracking: Submit and track governance proposals with full history
- Simple majority voting: For/Against/Abstain voting with GovernorCountingSimple
- Proposal execution: Automatic execution of passed proposals with arbitrary contract calls
- Configurable parameters: Adjust voting delay, voting period, proposal threshold, and quorum
- Parameter updates via governance: All governance parameters can be updated through governance votes
- Manifesto management: Store and update DAO manifesto (IPFS CID) via governance
- Operator role: Designated address can onboard new members without governance approval
- Operator expiration: Configurable time parameter for operator actions
- Operator management: Change or revoke operator through governance vote
- Governance-controlled minting: Owner (governance) can mint new memberships
- Membership revocation: Burn member NFTs through governance vote
- Metadata updates: Update member NFT metadata via governance
⚠️ WARNING: Theoperatoris a significant trust assumption. Until expiry, the operator can mint arbitrarily many memberships — effectively manufacturing votes for future proposals. It is designed to allow a third-party app to easily add new members. If you don't need that, you can disable the operator entirely or set a very short expiration period.
forge buildforge testThe deployment script reads configuration from config/dao.config.json. Edit this file to customize:
- NFT parameters:
nftName,nftSymbol,tokenURI - Governance parameters:
govName,manifestoCid,votingDelay,votingPeriod,proposalThreshold,quorum - Initial members: Array of addresses to receive membership NFTs
Launch Anvil local network:
anvilThen in a new terminal:
forge script script/Deploy.s.sol --rpc-url local --broadcastCrosschain Gov allows you to deploy your DAO to any EVM network.
GPL-3.0