这篇博客作为记录学习solidity语言的备忘录
pragma solidity ^0.4.0;
//尝试写一个关于投票的智能合约;
//投票人每人只有一票;
//候选人票数多获胜,若平票则再投一轮;
//候选人不能参与投票;
contract Votegame{
struct voter{
address vaddr;//投票人地址
bool yn;//是否投票
uint amount;//票数
}
struct candidate{
address caddr;//候选人地址
uint get;//得到的票数
bool win;//是否获胜
}
address chairperson;
mapping(address => voter) voters;
mapping(address => candidate) candidates;
function candidater1(address Candidate1){
// 候选人初始化
candidates[Candidate1].get = 0;
candidates[Candidate1].win = false;
}
/*function candidater2(address Candidate2){
// initialize
candidates[Candidate2].get = 0;
candidates[Candidate2].win = false;
}*/
//投票人初始化
function giveRightToVote(address Voter) {
if (msg.sender != chairperson || voters[Voter].yn) return;
voters[Voter].amount = 1;
}
function vote(address Candidate) {
voter storage sender = voters[msg.sender];
//排除不合格的投票者;
if (sender.yn || sender.vaddr == Candidate ) return;
sender.yn = true;
candidates[Candidate].get = candidates[Candidate].get + 1 ;
}
function success(address Candidate1,address Candidate2) returns(address winner){
if(candidates[Candidate1].get > candidates[Candidate2].get) return Candidate1;
else return Candidate2;
}
}
地址(address),是否获胜(bool)(没有用到,但感觉在如果两边票数相同时可以用,后面可以补充)和得到票数(uint),下一步是完成投票人和候选人的初始化,
函数vote则是完成投票的过程,其中值得注意的是应该排除无效的候选人,最后则是返回胜利的地址选出投票的胜利者。
程序在可以在Remix上完成调试。