zoukankan      html  css  js  c++  java
  • 从零构建以太坊(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界面让你确认,确认提交,过一会儿,合约就部署成功
    • 可以测试给某个候选人投票,查询某个候选人的票数
  • 相关阅读:
    Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File
    android的五大布局(layout)
    json数据进行格式化
    将utf-8的中文或者字符都看成一个字符
    Mysql 中 trim 的用法
    生成密码函数
    Eclipse智能提示设置
    Java Jersey2使用总结
    Java对存储过程的调用方法
    Jersey框架
  • 原文地址:https://www.cnblogs.com/little-kwy/p/10371440.html
Copyright © 2011-2022 走看看