真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

基于以太坊的區(qū)塊鏈HelloWorld是怎樣的

本篇文章給大家分享的是有關基于以太坊的區(qū)塊鏈Hello World是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,桂陽企業(yè)網(wǎng)站建設,桂陽品牌網(wǎng)站建設,網(wǎng)站定制,桂陽網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,桂陽網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

環(huán)境

windows 10 64bit

背景

準備接手一個IPFS+Ethereum的項目,先學習一下Ethereum,并嘗試完成一個Hello World。

步驟

  1. 參考我另一片blog, 安裝nvm

  2. 安裝node 9.11.1 并切換環(huán)境

nvm install 9.11.1
nvm use 9.11.1
  1. 創(chuàng)建一個新的工作目錄,并在命令行索引到該路徑

  2. 安裝ganche-cli、web3、solc

npm install ganache-cli
npm install web3@0.20.1
npm install solc@0.4.21       //此處原博客沒有版本,會安裝高于0.4的版本,會導致后續(xù)編譯smart contract編譯失敗

在安裝了ganache-cli與web3時,由于教程版本問題會出現(xiàn)報錯,但是不影響。

  1. 啟動ganache-cli

node_modules\.bin\ganache-cli

基于以太坊的區(qū)塊鏈Hello World是怎樣的 6. 使用Solidity創(chuàng)建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;
   }}
  1. 啟動node交互控制臺,依次輸入以下命令

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

輸入以上最后一條命令后會獲取Ganache創(chuàng)建的10個帳號,如下

基于以太坊的區(qū)塊鏈Hello World是怎樣的

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

全部完成會得到如下截圖的輸出,表示smart contract編譯成功 基于以太坊的區(qū)塊鏈Hello World是怎樣的 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,記下來后續(xù)會用到

> contractInstance = VotingContract.at(deployedContract.address)
  1. 下載web3.js文件,下載后放在工作根目錄下。

    由cdn不知什么原因不可用,所以直接下載源文件,鏈接如下 web3.js 0.20.6

  2. 在根目錄下創(chuàng)建index.html文件,并粘貼以下代碼,需要在截圖標出處,更換成第8步自己部署的smart contract的address



	
		DApp
		
		
	
	
		

Voting Application

Candidate Votes James Norah Jones
Vote web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); abi = JSON.parse('[{"constant":false,"inputs":[{"name":"candidate","type":"bytes32"}],"name":"totalVotesFor","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"candidate","type":"bytes32"}],"name":"validCandidate","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"votesReceived","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"x","type":"bytes32"}],"name":"bytes32ToString","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"candidateList","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"candidate","type":"bytes32"}],"name":"voteForCandidate","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"contractOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"candidateNames","type":"bytes32[]"}],"payable":false,"type":"constructor"}]') VotingContract = web3.eth.contract(abi); contractInstance = VotingContract.at('0x47f49b300eb86d972f91f103913376fb0a8e52e7'); candidates = {"James": "candidate-1", "Norah": "candidate-2", "Jones": "candidate-3"} function voteForCandidate(candidate) { candidateName = $("#candidate").val(); try { contractInstance.voteForCandidate(candidateName, {from: web3.eth.accounts[0]}, function() { let div_id = candidates[candidateName]; $("#"+div_id).html(contractInstance.totalVotesFor.call(candidateName).toString()); }); } catch (err) { } } $(document).ready(function() { candidateNames = Object.keys(candidates); for (var i = 0; i < candidateNames.length; i++) { let name = candidateNames[i]; let val = contractInstance.totalVotesFor.call(name).toString() $("#"+candidates[name]).html(val); } });

基于以太坊的區(qū)塊鏈Hello World是怎樣的

  1. 在瀏覽器打開index.html,輸入Candidate中的人名后,點擊Vote即可投票,投票后效果如下 基于以太坊的區(qū)塊鏈Hello World是怎樣的 每次點擊投票,也都會生成一個新的區(qū)塊,效果如下。 基于以太坊的區(qū)塊鏈Hello World是怎樣的

以上步驟就完成了一個基于Ethereum的投票Dapp的完整搭建流程,整合個補全后步驟應該不會有坑的可以順利搭建完成。

就像“hello world”的字面意思一樣,0-1的過程是最艱難的,但是開了頭,剩下的1-n也就會順暢不少。

以上就是基于以太坊的區(qū)塊鏈Hello World是怎樣的,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章標題:基于以太坊的區(qū)塊鏈HelloWorld是怎樣的
分享網(wǎng)址:http://weahome.cn/article/jjscch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部