设置一个投票主持人,为每一个账户赋予投票权,账户可以把投票权让给其他账户进行代替投票。每一个提案都有一个短名称,提案通过提案数组的形式存在,在投票中,投票者只需输入提案的提案号就可以进行投票。
pragma solidity ^0.4.0;
//授权投票合约
contract Ballot{
//声明一个结构类型,用于代表一个独立的投票人
struct Voter{
uint weight;//投票人的权重
bool voted;//投票状态
address delegate;//投票代表地址
uint vote;//投票选择的提案索引
}
//声明一个结构类型,用于代表一个独立的提案
struct Proposal{
bytes32 name;//提案名称
uint voteCount;//累计获得的票数
}
//声明一个投票主持人
address public chairperson;
//声明一个状态变量。用于映射到每一个独立的投票人
mapping(address => Voter) public voters;
//创建一个提案的动态数组
Proposal[] public proposals;
//构造函数,初始化提案名
function Ballot(bytes32[] proposalNames){
chairperson = msg.sender;
voters[chairperson].weight = 1;
//对输入的每一个提案名,创建一个新提案
for(uint i=0;i < proposalNames.length;i+&