pragma solidity ^0.4.11; interface ChangableToken { function stop() external; function start() external; function changeBuyPrice(uint256 newBuyPrice) external; function balanceOf(address account) external returns (uint256); } contract DAOContract { ChangableToken public token; uint8 public minVotes; uint256 public proposedBuyPrice; bool public voteIsActive = false; struct Votes { int votesSum; uint totalVotesUsed; } Votes public election; constructor(ChangableToken _token) public { token = _token; minVotes = 2; } function newContractPriceProposal(uint256 _newBuyPrice) public { require(!voteIsActive); proposedBuyPrice = _newBuyPrice; voteIsActive = true; token.stop(); } function vote(bool _vote) public { require(voteIsActive); election.votesSum += int(token.balanceOf(msg.sender)) * (_vote ? int(1): int(-1)); election.totalVotesUsed += uint(token.balanceOf(msg.sender)); } function changeBuyPrice() public { require(voteIsActive); require(election.totalVotesUsed >= minVotes); if(election.votesSum > 0) { token.changeBuyPrice(proposedBuyPrice); } election.totalVotesUsed = 0; election.votesSum = 0; voteIsActive = false; token.start(); } }
0.4.24