Created
September 22, 2018 19:52
-
-
Save adam2392/0d49bb0f2b8a5a1b46c241f88b4bfdeb to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.4.25+commit.59dbf8f1.js&optimize=true&gist=
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| pragma solidity ^0.4.0; | |
| contract Ballot { | |
| struct Voter { | |
| uint weight; | |
| bool voted; | |
| uint8 vote; | |
| address delegate; | |
| } | |
| struct Proposal { | |
| uint voteCount; | |
| } | |
| address chairperson; | |
| mapping(address => Voter) voters; | |
| Proposal[] proposals; | |
| /// Create a new ballot with $(_numProposals) different proposals. | |
| function Ballot(uint8 _numProposals) public { | |
| chairperson = msg.sender; | |
| voters[chairperson].weight = 1; | |
| proposals.length = _numProposals; | |
| } | |
| /// Give $(toVoter) the right to vote on this ballot. | |
| /// May only be called by $(chairperson). | |
| function giveRightToVote(address toVoter) public { | |
| if (msg.sender != chairperson || voters[toVoter].voted) return; | |
| voters[toVoter].weight = 1; | |
| } | |
| /// Delegate your vote to the voter $(to). | |
| function delegate(address to) public { | |
| Voter storage sender = voters[msg.sender]; // assigns reference | |
| if (sender.voted) return; | |
| while (voters[to].delegate != address(0) && voters[to].delegate != msg.sender) | |
| to = voters[to].delegate; | |
| if (to == msg.sender) return; | |
| sender.voted = true; | |
| sender.delegate = to; | |
| Voter storage delegateTo = voters[to]; | |
| if (delegateTo.voted) | |
| proposals[delegateTo.vote].voteCount += sender.weight; | |
| else | |
| delegateTo.weight += sender.weight; | |
| } | |
| /// Give a single vote to proposal $(toProposal). | |
| function vote(uint8 toProposal) public { | |
| Voter storage sender = voters[msg.sender]; | |
| if (sender.voted || toProposal >= proposals.length) return; | |
| sender.voted = true; | |
| sender.vote = toProposal; | |
| proposals[toProposal].voteCount += sender.weight; | |
| } | |
| function winningProposal() public constant returns (uint8 _winningProposal) { | |
| uint256 winningVoteCount = 0; | |
| for (uint8 prop = 0; prop < proposals.length; prop++) | |
| if (proposals[prop].voteCount > winningVoteCount) { | |
| winningVoteCount = proposals[prop].voteCount; | |
| _winningProposal = prop; | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| pragma solidity ^0.4.0; | |
| /* | |
| Solidity main contract for the FeatureDapp functionality of Dappest. | |
| Description: main wrapper for all feature dapp functions | |
| Main functions: | |
| - pick_dapp(): picks a dapp based on metrics of data passed in Dapps.Metrics() | |
| - unsafe_read_metrics(): reads metrics from outside source. Outside source is | |
| not decentralized, or hosted on the blockchain, but assumed to be safe source of | |
| data for metrics | |
| */ | |
| contract FeatureDapp { | |
| // struct Master { | |
| // SHOULD WE CREATE A MASTER TO MODIFY CONTRACT? idk how to do this, but will look into it | |
| // } | |
| struct DappFeatured { | |
| uint length_of_feature; // determine length of time to feature the dapp | |
| bool featured_before; // if dapp was featured before | |
| address dapp_address; // address of the dapp on their respective blockchain | |
| } | |
| struct Proposal { | |
| uint voteCount; | |
| } | |
| // declare events | |
| event dappVoted(address voter, uint votes, bool inFavor); | |
| event metricsReceived(address metric) | |
| address chairperson; | |
| // mapping(address => Voter) voters; | |
| Proposal[] proposals; | |
| /// Pick a new dapp with $(_numProposals) different proposals. | |
| function PickDapp(uint _dapps, uint votes, bool inFavor) public { | |
| dappVoted(msg.sender, votes, inFavor); | |
| } | |
| function unsafe_read_metrics(uint _dapps, uint metrics) public { | |
| dappVoted(msg.sender, metrics); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment