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


    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.0;
    
    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] += 1;
      }
    
      // 检索投票的姓名是不是候选人的名字
      function validCandidate(bytes32 candidate) public view returns (bool) {
        for(uint i = 0; 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界面让你确认,确认提交,过一会儿,合约就部署成功
    • 可以测试给某个候选人投票,查询某个候选人的票数
  • 相关阅读:
    HTTP深入浅出 http请求
    javascript 新兴的API
    javascript 高级技巧详解
    javascript AJAX与Comet详解
    php文件扩展名判断
    php创建新用户注册界面布局实例
    php使用递归创建多级目录
    php对文本文件进行分页功能简单实现
    php上传功能集后缀名判断和随机命名
    php判断数据库是否连接成功的测试例子
  • 原文地址:https://www.cnblogs.com/little-kwy/p/10371440.html
Copyright © 2020-2023  润新知