从零构建以太坊(Ethereum)智能合约到项目实战——第23章 从零构建和部署去中心化投票App,decentralization Voting Dapp

2023-06-15,,

P90 、1-从零构建和部署去中心化投票App-01

P91 、2-从零构建和部署去中心化投票App-02

P92 、3-从零构建和部署去中心化投票App-03

参考博文:http://liyuechun.org/2017/10/13/smart-contract-voting-dapp/

课程目标

    了解区块链智能合约
    学会搭建智能合约开发环境
    学会如何编译智能合约
    学会如何将智能合约部署到区块链
    学会如何通过WebApp和智能合约尽心互动
    掌握DApp(去中心化App)的整个开发部署流程
    掌握去中心化在实战产品中应用的重大意义

创建项目

mkdir Voting
cd Voting
truffle unbox react-box

项目结构

contracts:编写智能合约的文件夹,所有的智能合约文件都放置在这里
migrations:部署合约配置的文件夹
src:基于React的Web端源码
test:智能合约测试用例文件夹

编写投票Dapp智能合约

contracts文件夹下创建Voting.sol文件,将下面的代码拷贝到文件中。

pragma solidity ^0.5.;

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] += ;
} // 检索投票的姓名是不是候选人的名字
function validCandidate(bytes32 candidate) public view returns (bool) {
for(uint i = ; i < candidateList.length; i++) {
if (candidateList[i] == candidate) {
return true;
}
}
return false;
}
}

通过remix + metamask部署合约到Kovan Test Net

在Google浏览器里面安装MetaMask插件
打开https://remix.ethereum.org将合约代码拷贝到里面
确保MetaMask账号处于登录状态,并且有一定的以太币支付给矿工。
确保EnvironmentInjected Web3,如果切换不过来,关掉浏览器重新启动
create函数中输入一个数组,数组里面的内容为候选人名单
点击create按钮,会弹出MetaMask界面让你确认,确认提交,过一会儿,合约就部署成功
可以测试给某个候选人投票,查询某个候选人的票数

从零构建以太坊(Ethereum)智能合约到项目实战——第23章 从零构建和部署去中心化投票App,decentralization Voting Dapp的相关教程结束。

《从零构建以太坊(Ethereum)智能合约到项目实战——第23章 从零构建和部署去中心化投票App,decentralization Voting Dapp.doc》

下载本文的Word格式文档,以方便收藏与打印。