扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
windows 10 64bit
在红古等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、成都做网站、外贸网站建设 网站设计制作按需制作,公司网站建设,企业网站建设,品牌网站设计,成都全网营销推广,成都外贸网站制作,红古网站建设费用合理。youclavier -- 以太坊投票Dapp教程
准备接手一个IPFS+Ethereum的项目,先学习一下Ethereum,并尝试完成一个Hello World。
nvm install 9.11.1
nvm use 9.11.1
npm install ganache-cli
npm install web3@0.20.1
npm install solc@0.4.21 //此处原博客没有版本,会安装高于0.4的版本,会导致后续编译smart contract编译失败
在安装了ganache-cli与web3时,由于教程版本问题会出现报错,但是不影响。
node_modules\.bin\ganache-cli
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)
- 下载web3.js文件,下载后放在工作根目录下。
由cdn不知什么原因不可用,所以直接下载源文件,链接如下
web3.js 0.20.6- 在根目录下创建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](/upload/otherpic34/64078738-f976e400-cd10-11e9-82ef-20468a8e6ba5.png)
11. 在浏览器打开index.html,输入Candidate中的人名后,点击Vote即可投票,投票后效果如下
![](/upload/otherpic34/64078737-f8de4d80-cd10-11e9-874c-d3e8570432fb.png)
## 后记
以上步骤就完成了一个基于Ethereum的投票Dapp的完整搭建流程,整合个补全后步骤应该不会有坑的可以顺利搭建完成。
就像“hello world”的字面意思一样,0-1的过程是最艰难的,但是开了头,剩下的1-n也就会顺畅不少。
####
***要获取更多Haytham原创文章,请关注公众号"许聚龙":***
![我的微信公众号](/upload/otherpic34/63688227-5b2ede00-c839-11e9-9aa9-2b461444f463.png)
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流