千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,指路牌以太坊区块链Dapp以太坊hello world环境windows 10 64bit参考博客youclavier -- 以太坊投票Dapp教程背景准备接手一个IPFS+Ethereum的项目,先
千家信息网最后更新 2026年11月01日区块链 Hello World -- 基于以太坊的投票Dap

指路牌

  • 以太坊
  • 区块链
  • 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.1nvm use 9.11.1
  3. 创建一个新的工作目录,并在命令行索引到该路径
  4. 安装ganche-cli、web3、solc
    npm install ganache-clinpm install web3@0.20.1npm install solc@0.4.21       //此处原博客没有版本,会安装高于0.4的版本,会导致后续编译smart contract编译失败 

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

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

  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个帐号,如下

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

全部完成会得到如下截图的输出,表示smart contract编译成功

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)
投票 以太 命令 步骤 版本 编译 输入 区块 公众 博客 截图 效果 教程 文件 根目录 环境 参考 工作 顺畅 成功 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 耶加雪菲 什么是科技互联网 亿人帮互联网科技有限公司 重生之互联网科技帝国 互联网最新的科技有限公司 关于新基建和互联网科技 汇久创客互联网科技 互联网高科技企业 中国互联网金融科技基金 银川新华互联网科技职业技术培训学校图片 南平创想时代互联网科技有限公司 互联网科技大奖都有哪些公司 中国科技创新与世界互联网大会 天津腾达互联网科技有限公司 信承诺互联网科技有限公司 科技互联网行业投资研究 版纳互联网科技选哪家 玉溪新华互联网科技怎么选 重庆科技产业互联网有哪些 北京瑞云互联网科技有限公司 科技与互联网发展 高科技与互联网 狮子座互联网科技 山东吉时兔互联网科技有限公司 深圳前海聚择互联网科技有限公司 科技与互联网哪个更好 工业互联网山东科技大学 众安科技工业互联网合作 广东鹅鹅鹅互联网科技有限公司 萌小萌互联网科技河南有限公司
0