P90 、1-从零构建和部署去中心化投票App-01
P91 、2-从零构建和部署去中心化投票App-02
P92 、3-从零构建和部署去中心化投票App-03
参考博文:http://liyuechun.org/2017/10/13/smart-contract-voting-dapp/
mkdir Voting
cd Voting
truffle unbox react-boxcontracts:编写智能合约的文件夹,所有的智能合约文件都放置在这里migrations:部署合约配置的文件夹src:基于React的Web端源码test:智能合约测试用例文件夹在contracts文件夹下创建Voting.sol文件,将下面的代码拷贝到文件中。
pragma solidity ^0.5.0;
contract Voting {
// a -> 10
// b -> 5
// c -> 20
//["0x61","0x62","0x63"]
mapping (bytes32 => uint8) public votesReceived;
// 存储候选人名字的数组
bytes32[] public candidateList;
// 构造函数 初始化候选人名单
constructor(bytes32[] memory candidateNames) public{
candidateList = candidateNames;
}
// 查询某个候选人的总票数
function totalVotesFor(bytes32 candidate) public view returns (uint8) {
require(validCandidate(candidate) == true);
// 或者
// assert(validCandidate(candidate) == true);
return votesReceived[candidate];
}
// 为某个候选人投票
function voteForCandidate(bytes32 candidate) public {
assert(validCandidate(candidate) == true);
votesReceived[candidate] += 1;
}
// 检索投票的姓名是不是候选人的名字
function validCandidate(bytes32 candidate) public view returns (bool) {
for(uint i = 0; i < candidateList.length; i++) {
if (candidateList[i] == candidate) {
return true;
}
}
return false;
}
}MetaMask插件MetaMask账号处于登录状态,并且有一定的以太币支付给矿工。Environment是Injected Web3,如果切换不过来,关掉浏览器重新启动create函数中输入一个数组,数组里面的内容为候选人名单create按钮,会弹出MetaMask界面让你确认,确认提交,过一会儿,合约就部署成功