前言
今天给大家带来详细的智能合约投票
一、开发环境
- Ubuntu18.04
- npm
- node111.10.0
- ganache
- metamask
二、开发步骤
1.合约编写
不管创建什么project,都想考虑清楚这个project的需求!
这里编写Voting.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.21 <0.7.0;
contract Voting {
bytes32[] public candidateList; // 候选人地址
mapping(bytes32 => uint8) public votesReceived; //投票数
//注意这个,需要传参,传进去的名字就等同于候选人
constructor(bytes32[] memory candidateListName) public {
candidateList = candidateListName;
}
// 这个构造一个验证候选人函数
function validateCanditate(bytes32 candidateName)internal view returns(bool) {
for (uint8 i =0; i < candidateList.length; i++) {
if (candidateName == candidateList[i])
return true;
}
return false;
}
// 投票函数
function voteForCandidate(bytes32 candidateName) public {
require(validateCanditate(candidateName));
votesReceived[candidateName] += 1;
}
// 投票总数
function totalVotesFor(bytes32 candidateName) view public returns(uint8) {
require(validateCanditate(candidateName));
return votesReceived[candidateName]