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界面让你确认,确认提交,过一会儿,合约就部署成功
  • 可以测试给某个候选人投票,查询某个候选人的票数

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

  1. 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发

    智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...

  2. 从零构建以太坊(Ethereum)智能合约到项目实战——第20章 搭建自己的私有链网络

    P75 .1-以太坊私网建立 .合约编译.部署完全教程(1) 使用此博文进行安装配置:https://blog.csdn.net/w88193363/article/details/79402074 ...

  3. 从零构建以太坊(Ethereum)智能合约到项目实战——第22章 玩转truffle framework 、Web3.js 框架

    P84 .1-玩转truffle framework.Web3.js 框架 内容介绍 truffle官方网站:https://truffleframework.com/ P85 .2-truffle ...

  4. 从零构建以太坊(Ethereum)智能合约到项目实战——第24章 IPFS + 区块链

    P93 .1-IPFS环境配置P94 .2-IPFS+P .IPNS+P .个人博客搭建 - 如何在IPFS新增一个文件P95 .3-IPFS+P .IPNS+P .个人博客搭建 - 通过ipfs创建 ...

  5. 从零构建以太坊(Ethereum)智能合约到项目实战——第21章 搭建联盟链

    P78 .1-内容介绍 什么情况下建立自己测试用的PoA chain? 公司内网或无对外网络,无法同步区块 降低测试时等待区块的时间 不想碰到testrpc各种雷 PoA chain特点有 有别于Po ...

  6. 从零构建以太坊(Ethereum)智能合约到项目实战——第25章 Embark FrameWork

    P109 .1-Embark Framework 开发入门篇P110 .2-Embark Framework 去中心化存储 (IPFS)

  7. 零门槛,包教会。让你在5分钟内使用以太坊ERC20智能合约发行属于自己的空气币

    前言 目前区块链是互联网中最最火的风口,没有之一.我周围的很多朋友也加入了“炒币”行列,但很不幸,几乎都被“割韭菜”了.而经过我的几天研究,发现,如果自己要发行一种空气币,简直太简单了.只需要下面几个 ...

  8. 以太坊solidity智能合约-生成随机数

    Solidity随机数生成 在以太坊的只能合约中,没有提供像其他面向对象编程一样的生成随机数的工具类或方法.其实,所谓的随机数也是伪随机的,没有哪一种语言能够真正的生成随机数. 对于solidity来 ...

  9. 从零构建以太坊(Ethereum)智能合约到项目实战——学习笔记10

    P57 .1-Solidity Types - 玩转 Solidity 数组 (Arrays) 学习目标 1.掌握Arrays的可变不可变的创建 2.深度理解可变数组和不可变数组之间的区别 3.二维数 ...

随机推荐

  1. 数据查询SELECT FROM

    [1]指定查询字段数据 SELECT  id,name,job FROM    stu_info;      #指定查询id,name,job字段的信息. SELECT  name FROM    s ...

  2. git相关项目迁移

    1). 从原地址克隆一份裸版本库,比如原本托管于 GitHub. git clone --bare git://github.com/username/project_old.git --bare 创 ...

  3. Linux下tail命令的使用方法

    Linux下tail命令的使用方法: linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,ta ...

  4. 谁说程序员没有时间关心女朋友的,Python 教你如何掌握女神情绪变化

    很多人都是在朋友圈装死,微博上蹦迪.微信朋友圈已经不是一个可以随意发表心情的地方了,微博才是! 所以你不要傻傻盯着女神的朋友圈发呆啦!本文教你如何用 Python 自动通知女神微博情绪变化,从今天开始 ...

  5. 1、json背景

    教程链接 链接:http://pan.baidu.com/s/1mil4M1M 密码:vwsn JSON (JavaScript对象表示法)是一种轻量级的基于文本的开放标准,被设计用于可读的数据交换, ...

  6. BZOJ 3262: 陌上花开 (cdq分治,三维偏序)

    #include <iostream> #include <stdio.h> #include <algorithm> using namespace std; c ...

  7. java.lang.String和java.util.NClob互相转换

    //NClob或Clob转String类型 public String clob2Str(NClob nclob) throws Exception { String content = " ...

  8. 理解Spring 容器、BeanFactory 以及 ApplicationContext

    一.spring 容器理解 spring 容器可以理解为生产对象(Object)的地方,在这里容器不只是帮助我们创建对象那么简单,它负责了对象的整个生命周期-创建.装配.销毁.而这里对象的创建管理的控 ...

  9. dp(多重背包)

    有 NN 种物品和一个容量是 VV 的背包. 第 ii 种物品最多有 sisi 件,每件体积是 vivi ,价值是 wiwi . 求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大 ...

  10. VBS微信轰炸

    打开windows命令界面输入notepad将此vbs脚本复制粘贴到记事本,保存并设置后缀名为.vbs,进入微信或者QQ在聊天界面复制好要发送的文字,最后双击运行vbs脚本并把鼠标移入聊天框,最后按发 ...