Decentralized Autonomous Organizations

DAOsFree Lesson

Advertisement

Decentralized Autonomous Organizations

Governance tokens, voting mechanisms, proposals, and DAO tooling.

Overview

DAOs are organizations governed by token holders.

Governance Token

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract GovernanceToken is ERC20, Ownable {
    constructor() ERC20("GovToken", "GOV") {
        _mint(msg.sender, 1000000 * 10**decimals());
    }
    
    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }
}

Simple DAO

contract SimpleDAO {
    struct Proposal {
        string description;
        uint256 forVotes;
        uint256 againstVotes;
        bool executed;
        mapping(address => bool) hasVoted;
    }
    
    GovernanceToken public token;
    Proposal[] public proposals;
    
    function propose(string memory description) public {
        require(token.balanceOf(msg.sender) >= 1000);
        proposals.push(Proposal(description, 0, 0, false));
    }
    
    function vote(uint256 proposalId, bool support) public {
        Proposal storage proposal = proposals[proposalId];
        require(!proposal.hasVoted[msg.sender]);
        
        uint256 votes = token.balanceOf(msg.sender);
        
        if (support) {
            proposal.forVotes += votes;
        } else {
            proposal.againstVotes += votes;
        }
        
        proposal.hasVoted[msg.sender] = true;
    }
    
    function execute(uint256 proposalId) public {
        Proposal storage proposal = proposals[proposalId];
        require(!proposal.executed);
        require(proposal.forVotes > proposal.againstVotes);
        
        proposal.executed = true;
        // Execute proposal logic
    }
}

Voting Mechanisms

TypeDescription
Token-weightedVotes proportional to tokens
QuadraticSquare root of tokens
ConvictionTime-weighted voting
DelegationDelegate voting power

DAO Tools

ToolPurpose
SnapshotOff-chain voting
TallyOn-chain governance
AragonDAO framework
GovernorOpenZeppelin contracts

Practice

Create a DAO with governance voting.

Advertisement

Need Expert Blockchain Help?

Get personalized Web3 training or smart contract consulting.

Advertisement