Homework initial upload
parent
eaea9cb98f
commit
64d24457ff
|
@ -0,0 +1,48 @@
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
pragma solidity ^0.8.0;
|
||||||
|
|
||||||
|
contract voting {
|
||||||
|
|
||||||
|
struct Voter {
|
||||||
|
bool hasVoted;
|
||||||
|
bool exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Option {
|
||||||
|
uint voteCount;
|
||||||
|
bool exists;
|
||||||
|
}
|
||||||
|
|
||||||
|
mapping(string => Option) public options;
|
||||||
|
mapping(address => Voter) public voters;
|
||||||
|
|
||||||
|
constructor() public {
|
||||||
|
options["nft"] = Option(0, true);
|
||||||
|
options["token"] = Option(0, true);
|
||||||
|
options["dao"] = Option(0, true);
|
||||||
|
voters[0x5B38Da6a701c568545dCfcB03FcB875f56beddC4] = Voter(false, true); // repeat for all voters
|
||||||
|
}
|
||||||
|
|
||||||
|
function vote(string memory _option) public {
|
||||||
|
require(voters[msg.sender].exists = true);
|
||||||
|
require(voters[msg.sender].hasVoted = false);
|
||||||
|
require(options[_option].exists = true);
|
||||||
|
options[_option].voteCount = options[_option].voteCount + 1;
|
||||||
|
voters[msg.sender].hasVoted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getVoteCount(string memory _option) private view returns (uint) {
|
||||||
|
return options[_option].voteCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
function determineWinner() public view returns (string memory){
|
||||||
|
if (getVoteCount("nft") > getVoteCount("token") && getVoteCount("nft") > getVoteCount("dao")) {
|
||||||
|
return "nft";
|
||||||
|
} else if (getVoteCount("token") > getVoteCount("nft") && getVoteCount("token") > getVoteCount("dao")) {
|
||||||
|
return "token";
|
||||||
|
} else if (getVoteCount("dao") > getVoteCount("nft") && getVoteCount("dao") > getVoteCount("token")) {
|
||||||
|
return "dao";
|
||||||
|
}
|
||||||
|
else return "manual tiebreaker required";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue