区块链 Hello World -- 基于以太坊的投票Dap
admin
2023-01-20 02:00:06
0

指路牌

  • 以太坊
  • 区块链
  • Dapp
  • 以太坊hello world

环境

windows 10 64bit

参考博客

youclavier -- 以太坊投票Dapp教程

背景

准备接手一个IPFS+Ethereum的项目,先学习一下Ethereum,并尝试完成一个Hello World。

步骤

  1. 参考我另一片blog, 安装nvm
  2. 安装node 9.11.1 并切换环境
    nvm install 9.11.1
    nvm use 9.11.1
  3. 创建一个新的工作目录,并在命令行索引到该路径
  4. 安装ganche-cli、web3、solc
    npm install ganache-cli
    npm install web3@0.20.1
    npm install solc@0.4.21       //此处原博客没有版本,会安装高于0.4的版本,会导致后续编译smart contract编译失败 

    在安装了ganache-cli与web3时,由于教程版本问题会出现报错,但是不影响。

  5. 启动ganache-cli
    node_modules\.bin\ganache-cli

    区块链 Hello World -- 基于以太坊的投票Dap

  6. 使用Solidity创建Smart Contract,命名为:Voting.sol
    
    pragma solidity ^0.4.18; 

contract Voting {

mapping (bytes32 => uint8) public votesReceived;
bytes32[] public candidateList;

function Voting(bytes32[] candidateNames) public {
candidateList = candidateNames;
}

function totalVotesFor(bytes32 candidate) view public returns (uint8) {
require(validCandidate(candidate));
return votesReceived[candidate];
}

function voteForCandidate(bytes32 candidate) public {
require(validCandidate(candidate));
votesReceived[candidate] += 1;
}

function validCandidate(bytes32 candidate) view public returns (bool) {
for(uint i = 0; i < candidateList.length; i++) {
if (candidateList[i] == candidate) {
return true;
}
}
return false;
}}

7. 启动node交互控制台,依次输入以下命令

Web3 = require('web3')
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))
web3.eth.accounts


 输入以上最后一条命令后会获取Ganache创建的10个帐号,如下

区块链 Hello World -- 基于以太坊的投票Dap

> code = fs.readFileSync('Voting.sol').toString()
> solc = require('solc')
> compiledCode = solc.compile(code)

全部完成会得到如下截图的输出,表示smart contract编译成功
区块链 Hello World -- 基于以太坊的投票Dap
8.部署smart contract

> abi = JSON.parse(compiledCode.contracts[':Voting'].interface)
> VotingContract = web3.eth.contract(abi)
> byteCode = compiledCode.contracts[':Voting'].bytecode
> deployedContract = VotingContract.new(['James', 'Norah', 'Jones'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000})
> deployedContract.address

此时会获取address,记下来后续会用到

contractInstance = VotingContract.at(deployedContract.address)
  1. 下载web3.js文件,下载后放在工作根目录下。
    由cdn不知什么原因不可用,所以直接下载源文件,链接如下
    web3.js 0.20.6
  2. 在根目录下创建index.html文件,并粘贴以下代码,需要在截图标出处,更换成第8步自己部署的smart contract的address
    
    <!DOCTYPE html>
    <html>
    <head>
    <title>DApp</title>
    <link href='https://fonts.googleapis.com/css?family=Open Sans:400,700' rel='stylesheet' type='text/css'>
    <link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' rel='stylesheet' type='text/css'>
    </head>
    <body class="container">
    <h2>Voting Application</h2>
    <div class="table-responsive">
    <table class="table table-bordered">
    <thead>
    <tr>
    <th>Candidate</th>
    <th>Votes</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>James</td>
    <td id="candidate-1"></td>
    </tr>
    <tr>
    <td>Norah</td>
    <td id="candidate-2"></td>
    </tr>
    <tr>
    <td>Jones</td>
    <td id="candidate-3"></td>
    </tr>
    </tbody>
    </table>
    </div>
    <input type="text" id="candidate" />
    <a href="#" onclick="voteForCandidate()" class="btn btn-primary">Vote</a>
    </body>



![更换address](https://user-images.githubusercontent.com/37465243/64078738-f976e400-cd10-11e9-82ef-20468a8e6ba5.png)

11. 在浏览器打开index.html,输入Candidate中的人名后,点击Vote即可投票,投票后效果如下
![](https://user-images.githubusercontent.com/37465243/64078736-f8de4d80-cd10-11e9-9e1a-173c812f2264.png)
每次点击投票,也都会生成一个新的区块,效果如下。
![](https://user-images.githubusercontent.com/37465243/64078737-f8de4d80-cd10-11e9-874c-d3e8570432fb.png)

## 后记
以上步骤就完成了一个基于Ethereum的投票Dapp的完整搭建流程,整合个补全后步骤应该不会有坑的可以顺利搭建完成。

就像“hello world”的字面意思一样,0-1的过程是最艰难的,但是开了头,剩下的1-n也就会顺畅不少。

####
***要获取更多Haytham原创文章,请关注公众号"许聚龙":***
![我的微信公众号](https://user-images.githubusercontent.com/37465243/63688227-5b2ede00-c839-11e9-9aa9-2b461444f463.png)

相关内容

热门资讯

欧盟想对付中国汽车,英国“躺枪... 【文/观察者网 潘昱辰 编辑/高莘】据英国《金融时报》报道,3月4日,欧盟委员会正式公布《工业加速器...
最便宜的苹果笔记本!MacBo... 快科技3月7日消息,苹果本周正式推出了全新的入门级笔记本电脑MacBook Neo,官方起售价定为4...
干将新材料取得风味保持剂混料处... 国家知识产权局信息显示,干将新材料有限公司取得一项名为“一种风味保持剂混料处理机构”的专利,授权公告...
刚刚,Gemini攻克「宇宙弦... 新智元报道 编辑:定慧 【新智元导读】就在刚刚,Google Research团队用Gemini ...
华为无线专家:打造一张面向智能... 文/观察者网 吕栋 移动AI的发展异常迅猛,人类社会正快速迈入智能体互联网时代。 如今在中国,超...
算电协同首次被写入政府工作报告... 来源:证券日报网 “算电协同”被首次写入政府工作报告。3月5日,政府工作报告提出,“实施超大规模智算...
原创 天... 黑洞奇点奠定物理基础 罗杰·彭罗斯1931年出生在英国埃塞克斯郡科尔切斯特,从小家里就满是科学氛...
美军打伊朗是为了“世界末日,耶... 【文/观察者网 阮佳琪】美以伊战事紧张之际,本以为特朗普故技重施,找来一堆牧师围着自己“发功祈祷”,...
伊朗:最高领袖选举会议将在未来... 新华社德黑兰3月7日电 据伊朗伊斯兰革命卫队7日发布的消息,一名伊朗专家会议成员称,选举伊朗最高领袖...
腾讯QQ正式接入OpenCla... 3月7日,腾讯宣布为QQ新增AI生态能力,用户现可通过官方渠道将OpenClaw智能体接入QQ机器人...