今天我们藉着昨天的 第一个 Dapp 来稍微修改一下,改成一个投票系统。
首先我们先来尝试撰写这个投票系统的合约,我们先在原本的 contract
资料夹里面,新增一个 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 candidateNames) public {
candidateList = candidateNames;
}
//检查投票选项有效性
function validCandiate(bytes32 candidate) view public returns (bool) {
for(uint i = 0; i < candidateList.length; i++) {
if (candidateList[i] == candidate) {
return true;
}
}
return false;
}
//增加票数
function addVote(bytes32 candidate) public {
//需要确认选项在不在
require(validCandidate(candidate));
votesReceived[candidate] += 1;
}
//查询某选项的票数
function queryVotes(bytes32 candidate) view public returns (uint8) {
//需要先确认选项在不在
require(validCandidate(candidate));
return votesReceived[candidate];
}
}
再来部署之前,需要在合约做一个初始化的动作,把选项填入,进入到 migrations
资料夹,打开 2_deploy_contracts.js
修改里面的档案为
var Voting = artifacts.require("./Voting.sol");
module.exports = function(deployer) {
deployer.deploy(Voting, [web3.utils.utf8ToHex('去烤肉'),
web3.utils.utf8ToHex('去逛街'),web3.utils.utf8ToHex('去游泳')]);
};
我们把选项初始化进去合约里面,分别依序为
去烤肉
、去逛街
、去游泳
。
再来就能执行我们的编译以及部属的工作了。
$ truffle complie
$ truffle migrate
明天我们来谈谈 js & html 的部分怎麽做修改。
>>: Day18 Let's ODOO: Paper Format
前言 本文说明如何进行删单作业。 程序实作 # 设定交易标的 # 以台股上市股票:长荣 contra...
前言 以为很顺畅的,结果发现Python 3.9无法支援,那就只好用3.8罗!因为采了不小的雷,因此...
今天来认识一下SELECT INTO吧!SELECT INTO用来从某资料表查询所得之资料集结果新增...
前言 我们今天还是没有离开 user_bp,我们要来弄写文章的页面,也就是 markdown 上场的...
近年来 ROS (Robot Operating System,机器人作业系统) 目前已成熟应用於智...