Free DAO Smart Contract Template - Governance Voting (Solidity)
DevTools StoreFree DAO Governance Template (Solidity)
Simple DAO with proposals, voting, and execution. Token-weighted voting.
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/access/Ownable.sol";
contract SimpleDAO is Ownable {
struct Proposal {
uint256 id;
address proposer;
string description;
uint256 voteCount;
uint256 againstCount;
uint256 deadline;
bool executed;
}
mapping(address => uint256) public votingPower;
mapping(uint256 => Proposal) public proposals;
mapping(uint256 => mapping(address => bool)) public hasVoted;
uint256 public proposalCount;
uint256 public votingPeriod = 3 days;
function createProposal(string calldata desc) external returns (uint256) {
require(votingPower[msg.sender] > 0);
proposalCount++;
proposals[proposalCount] = Proposal(
proposalCount, msg.sender, desc, 0, 0,
block.timestamp + votingPeriod, false
);
return proposalCount;
}
function vote(uint256 id, bool support) external {
require(block.timestamp < proposals[id].deadline);
require(!hasVoted[id][msg.sender]);
require(votingPower[msg.sender] > 0);
hasVoted[id][msg.sender] = true;
if (support) proposals[id].voteCount += votingPower[msg.sender];
else proposals[id].againstCount += votingPower[msg.sender];
}
}Full DAO with execution, timelock, deploy scripts, React UI: https://rentry.co/w9gngnqt ($1+)