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

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

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

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

课程目标

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

创建项目

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插件
  • 确保MetaMask账号处于登录状态,并且有一定的以太币支付给矿工。
  • 确保EnvironmentInjected Web3,如果切换不过来,关掉浏览器重新启动
  • create函数中输入一个数组,数组里面的内容为候选人名单
  • 点击create按钮,会弹出MetaMask界面让你确认,确认提交,过一会儿,合约就部署成功
  • 可以测试给某个候选人投票,查询某个候选人的票数

最新文章

  1. Oracle 常用函数
  2. Activity活动
  3. 深入理解java虚拟机【Java Class类文件结构】
  4. Ibatis 异常:Unable to open connection to &quot;oledb , provider V2.0.0.0 in framework .NET V2.0&quot;.
  5. React组件生命周期-正确执行初始化阶段的函数
  6. Gulp 自动化的项目构建工具
  7. [iOS UI进阶 - 6.1] 核心动画CoreAnimation
  8. Oracle SQL Developer 操作
  9. java的几种对象解释
  10. SceneKit做一个旋转的地球效果
  11. 【BZOJ 3754】: Tree之最小方差树
  12. [Swift]LeetCode39. 组合总和 | Combination Sum
  13. PHP04
  14. Java IO笔记
  15. 【apache tika】apache tika获取文件内容(与FileUtils的对比)
  16. 【生产问题】记还原一个很小的BAK文件,但却花了很长时间,分析过程
  17. UltraEdit 换行替换
  18. poj2447
  19. Jindent——让intellij idea 像eclipse一样生成模版化的javadoc注释
  20. git reset与git revert比較

热门文章

  1. ACM的探索之Keen On Evrything But Triangle(我觉得可以很接近啦!!)
  2. webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:
  3. Django报错 The serializer field might be named incorrectly and not match any Got AttributeError when attempting to get a value for field `author_for` on serializer `KnownledgeBaseListSerializer`
  4. Springmvc-crud-05(路径错误)
  5. 笔记本电脑插上耳机声音依然外放解决方法 为什么插入HDMI线,电脑的音响就没有声音了
  6. tkinter学习(4)frame、pack、canvas学习
  7. Visual Studio调试Tersseract
  8. 消息队列(五)--- RocketMQ-消息存储2
  9. PyQt5窗口操作大全
  10. Ubuntu 16.04 安装ROS sudo rosdep init报错问题