[区块链&DAPP介绍 Day25] Dapp 实战 投票系统 - 1

今天我们藉着昨天的 第一个 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 的部分怎麽做修改。


<<:  IT铁人DAY 18-Adapter 适配器模式

>>:  Day18 Let's ODOO: Paper Format

[第07天]理财达人Mx. Ada-删单作业

前言 本文说明如何进行删单作业。 程序实作 # 设定交易标的 # 以台股上市股票:长荣 contra...

【D3】发现厨房不能用,需要更换厨房环境: 使用Python 3.8

前言 以为很顺畅的,结果发现Python 3.9无法支援,那就只好用3.8罗!因为采了不小的雷,因此...

Day 10 - SELECT INTO !

今天来认识一下SELECT INTO吧!SELECT INTO用来从某资料表查询所得之资料集结果新增...

Day 25 实作 user_bp (3)

前言 我们今天还是没有离开 user_bp,我们要来弄写文章的页面,也就是 markdown 上场的...

DAY 1 系列文章启文

近年来 ROS (Robot Operating System,机器人作业系统) 目前已成熟应用於智...