国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

以太坊區(qū)塊鏈之使用truffle框架完成簡(jiǎn)單投票Dapp開(kāi)發(fā)

這篇具有很好參考價(jià)值的文章主要介紹了以太坊區(qū)塊鏈之使用truffle框架完成簡(jiǎn)單投票Dapp開(kāi)發(fā)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

安裝truffle

安裝:sudo npm install -g truffle
檢查是否成功: truffle -v

創(chuàng)建工程

truffle unbox webpack

投票智能合約編寫(xiě)

  • 編寫(xiě)環(huán)境 remix
    話(huà)不多說(shuō),直接上代碼
pragma solidity ^0.4.22;

contract Voting{
  bytes32[] public candidateList;

  mapping(bytes32 => uint8)public votesReceived;
  constructor(bytes32[] memory candidateListName) public{ candidateList=candidateListName;

  }
  function validateCandidate(bytes32 candidateName) internal view  returns(bool){
    for(uint8 i=0;i<candidateList.length;i++){
      if(candidateName == candidateList[i])
        return true;
    }
    return false;    
  }
  function voteFor(bytes32 candidateName) public{
  require(validateCandidate(candidateName));
    votesReceived[candidateName]+=1;
  }
  function totalVotesFor(bytes32 candidateName) public view returns(uint8){
    require(validateCandidate(candidateName));
    return votesReceived[candidateName];
  }
}

編譯合約

1、啟動(dòng)ganache
以太坊區(qū)塊鏈之使用truffle框架完成簡(jiǎn)單投票Dapp開(kāi)發(fā)
2、在/contracts目錄下加入新建一個(gè).sol文件,將之前編寫(xiě)的智能合約代碼加入該文件中,博主新建的是一個(gè)Voting.sol的文件
?。。≡撐募夸浺欢ㄒc智能合約代碼名字相對(duì)應(yīng)
3、修改truffle-config.js
將development內(nèi)的host、port改為ganache的地址
以太坊區(qū)塊鏈之使用truffle框架完成簡(jiǎn)單投票Dapp開(kāi)發(fā)
4、修改migrations/2_deploy_constracts.js文件
修改如下:artifacts.require("Voting"),Voting為上一步加入/contracts目錄sol文件的文件名
以太坊區(qū)塊鏈之使用truffle框架完成簡(jiǎn)單投票Dapp開(kāi)發(fā)

5、進(jìn)入創(chuàng)建的項(xiàng)目目錄,編譯合約

//編譯合約指令
truffle compile

以太坊區(qū)塊鏈之使用truffle框架完成簡(jiǎn)單投票Dapp開(kāi)發(fā)

部署合約

truffle migrate

以太坊區(qū)塊鏈之使用truffle框架完成簡(jiǎn)單投票Dapp開(kāi)發(fā)

前端

app/src文件的index.html代碼

<!DOCTYPE html>
<html>
  <head>
    <title>My Voting Dapp</title>
  </head>
  <body>
      <h1> Voting Dapp </h1>
      <p>Alice:<strong id="alice">
        
      </strong>tickets</p>
      <p>Bob:<strong id="bob">
        
     </strong>tickets</p>
     <label>VoteFor:</label>
     <input type="text" id="candidate"/>
     <button onclick="App.voteFor()">vote</button>
     <script src="index.js"></script>
  </body>
</html>

修改app/src文件的index.js代碼
代碼如下
具體代碼解釋見(jiàn)代碼內(nèi)的注釋

import Web3 from "web3";
//將Voting.json引入js
import votingArtifact from 
"../../build/contracts/Voting.json";
const aBytes32="0x41000000000000000000000000000000000000000000000000000000000000";
const bBytes32="0x42000000000000000000000000000000000000000000000000000000000000";

const App = {
  web3: null,
  account: null,
  voting: null,
  start: async function() {
    const { web3 } = this;
    try {
      // get contract instance
      //這里的votingArtifact對(duì)應(yīng)的為文件第二行引入的votingArtifact
      const networkId = await web3.eth.net.getId();
      const deployedNetwork = votingArtifact.networks[networkId];
      this.voting = new web3.eth.Contract(
        votingArtifact.abi,
        deployedNetwork.address,
      );
      // get accounts
      const accounts = await web3.eth.getAccounts();
      this.account = accounts[0];
      this.ready();
     // this.refreshBalance();
    } catch (error) {
     console.error(error);
      console.error("Could not connect to contract or chain.");
    }
  },
 	refresh:async function(id,name){
 	 //調(diào)用合約的totalVotesFor方法
 		const{totalVotesFor}=this.voting.methods;
 		const tickets= await totalVotesFor(name).call();
 		const element=document.getElementById(id);
 		element.innerHTML=tickets.toString();
 },
 ready:async function(){
 try{
  		this.refresh("alice",aBytes32);
  		this.refresh("bob",bBytes32);
  	}
  	catch(err){
  		console.log(err);
  	}
 },
  voteFor:async function(){
  console.log("vote");
  	try{
  		const{voteFor}=this.voting.methods;
  		const candidateName=document.getElementById("candidate").value;
  		console.log(candidateName);
  		//調(diào)用合約voteFor方法
  		if(candidateName =="Alice"){
  			await voteFor(aBytes32).send({from: this.account});
  			this.refresh("alice",aBytes32);
  		}else if(candidateName =="Bob"){
  			await voteFor(bBytes32).send({from: this.account});
  			//調(diào)用refresh方法
  			this.refresh("bob",bBytes32);
  			console.log("votebob");
  		}
  	}
  	catch(err){
  		console.log(err);
  	}
  }
};
window.App = App;

window.addEventListener("load", function() {
  if (window.ethereum) {
    // use MetaMask's provider
    App.web3 = new Web3(window.ethereum);
    window.ethereum.enable(); // get permission to access accounts
  } else {
    console.warn(
      "No web3 detected. Falling back to http://127.0.0.1:8545. You should remove this fallback when you deploy live",
    );
    // fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
    App.web3 = new Web3(
      new Web3.providers.HttpProvider("http://127.0.0.1:8545"),
    );
  }
  App.start();
});

運(yùn)行

使用cd app進(jìn)入到app目錄,運(yùn)行指令

npm run dev

以太坊區(qū)塊鏈之使用truffle框架完成簡(jiǎn)單投票Dapp開(kāi)發(fā)

END

在瀏覽器輸入http://127.0.0.1:8080/即可看到最后Dapp頁(yè)面
以太坊區(qū)塊鏈之使用truffle框架完成簡(jiǎn)單投票Dapp開(kāi)發(fā)
輸入Bob或者Alice,對(duì)應(yīng)的票數(shù)將會(huì)增1

好啦,這次分析就到這里啦,希望對(duì)友友們有用,筆芯芯文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-485305.html

到了這里,關(guān)于以太坊區(qū)塊鏈之使用truffle框架完成簡(jiǎn)單投票Dapp開(kāi)發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何使用Truffle開(kāi)發(fā)太坊智能及其區(qū)塊鏈

    ? 安裝 Truffle 構(gòu)建一個(gè)Truffle項(xiàng)目 瀏覽一下這個(gè)項(xiàng)目 測(cè)試項(xiàng)目 編譯智能合約 使用 Ganache 部署項(xiàng)目 與智能合約交互 搭建自連網(wǎng)絡(luò) truflle初始化項(xiàng)目 Stairs upon the temple I climb and I crawl? Wonder how much further I\\\'ll go Feet that fall apart till I walk on my ankles Can I finish I just don\\\'t know ? ? 簡(jiǎn)介:

    2024年02月14日
    瀏覽(19)
  • 創(chuàng)建一個(gè)簡(jiǎn)單的區(qū)塊鏈,并使用 Flask 框架提供一個(gè)簡(jiǎn)單的 Web 接口來(lái)與區(qū)塊鏈交互。

    創(chuàng)建一個(gè)簡(jiǎn)單的區(qū)塊鏈,并使用 Flask 框架提供一個(gè)簡(jiǎn)單的 Web 接口來(lái)與區(qū)塊鏈交互。

    目錄 前言 一、代碼展示 二、代碼注釋 1.簡(jiǎn)單的區(qū)塊鏈模擬實(shí)現(xiàn),這段代碼定義了一個(gè)簡(jiǎn)單的區(qū)塊鏈類(lèi),可以創(chuàng)建一個(gè)新的區(qū)塊鏈,并能夠添加新的區(qū)塊到鏈上,同時(shí)獲取最新的區(qū)塊信息。這個(gè)模擬的區(qū)塊鏈可以用于教學(xué)或演示區(qū)塊鏈的基本概念。 2.這段代碼是一個(gè)簡(jiǎn)單的工

    2024年04月14日
    瀏覽(23)
  • 區(qū)塊鏈DAPP開(kāi)發(fā) 以太坊智能合約框架有哪些

    Truffle 是一個(gè)在以太坊進(jìn)行 DApp 開(kāi)發(fā)的世界級(jí)開(kāi)發(fā)環(huán)境、測(cè)試框架。 使用 Truffle 開(kāi)發(fā)有一以下優(yōu)點(diǎn): 內(nèi)置智能合約編譯,鏈接,部署和二進(jìn)制(文件)管理。 可快速開(kāi)發(fā)自動(dòng)化智能合約測(cè)試框架。 可腳本化、可擴(kuò)展的部署和遷移框架。 可管理多個(gè)不同的以太坊網(wǎng)絡(luò),可部署

    2024年02月02日
    瀏覽(26)
  • 【區(qū)塊鏈技術(shù)開(kāi)發(fā)】十個(gè)比較流行的以太坊智能合約開(kāi)發(fā)框架

    專(zhuān)欄:【區(qū)塊鏈技術(shù)開(kāi)發(fā)】 前期文章: 【區(qū)塊鏈技術(shù)開(kāi)發(fā)】剖析區(qū)塊鏈Ganache模擬器工具及其智能合約部署區(qū)塊鏈的查詢(xún)方式 【區(qū)塊鏈技術(shù)開(kāi)發(fā)】基于Web3.js以太坊網(wǎng)絡(luò)上的智能合約的交互及其應(yīng)用 【區(qū)塊鏈技術(shù)開(kāi)發(fā)】OpenZeppelin智能合約庫(kù):提高智能合約的安全性和可靠性,

    2024年02月02日
    瀏覽(31)
  • 【區(qū)塊鏈】以太坊Solidity編寫(xiě)一個(gè)簡(jiǎn)單的Hello World合約

    【區(qū)塊鏈】以太坊Solidity編寫(xiě)一個(gè)簡(jiǎn)單的Hello World合約

    熟悉一門(mén)語(yǔ)言得從Hello World! 開(kāi)始,因?yàn)檫@是最簡(jiǎn)單的一個(gè)輸出形式。 我們先在contracts目錄下建立一個(gè)helloworld.sol文件 進(jìn)入編輯 保存退出 在migrations下新建一個(gè)部署合約的js文件:3_initial_migration.js 名字可以變動(dòng) 接下來(lái)在test中使用js調(diào)用智能合約 在另一個(gè)窗口打開(kāi)ganache 運(yùn)行智

    2024年02月15日
    瀏覽(24)
  • 【區(qū)塊鏈技術(shù)開(kāi)發(fā)】 Solidity使用Truffle Box工具實(shí)現(xiàn)預(yù)構(gòu)建模板、自動(dòng)化部署、創(chuàng)建智能合約示例代碼

    專(zhuān)欄:區(qū)塊鏈技術(shù)開(kāi)發(fā) Truffle Box是一個(gè)開(kāi)發(fā)工具,為T(mén)ruffle生態(tài)系統(tǒng)中的開(kāi)發(fā)人員提供了預(yù)構(gòu)建

    2023年04月16日
    瀏覽(159)
  • 區(qū)塊鏈之智能合約

    智能合約( Smart Contract)是以計(jì)算機(jī)為主要工具,將數(shù)學(xué)算法嵌入到程序中,用以證明某個(gè)事件是否符合約定條件,并保證各方在約定時(shí)間內(nèi)按照約定條件達(dá)成一致,以驗(yàn)證和執(zhí)行合同條款的計(jì)算機(jī)文本。簡(jiǎn)單來(lái)說(shuō)智能合約是一個(gè)計(jì)算機(jī)程序,可以在不需要第三方介入的情況

    2024年02月07日
    瀏覽(23)
  • 區(qū)塊鏈之?dāng)?shù)字簽名

    區(qū)塊鏈之?dāng)?shù)字簽名

    區(qū)塊鏈中采用對(duì)原本信息的哈希值進(jìn)行加密的方式來(lái)進(jìn)行簽名 數(shù)字簽名:簽名和驗(yàn)證 一個(gè)消息M、其哈希摘要D 簽名者 通過(guò)自身的 私鑰Kp 生成對(duì)應(yīng)的簽名 S=F(D,Kp) 驗(yàn)證者 通過(guò) 公鑰K 解密 S 得到 消息M的摘要D=F(S,K) 雙方通信的時(shí)候?。?! 公鑰加密,私鑰解密 私鑰簽名

    2024年02月13日
    瀏覽(22)
  • 詳細(xì)介紹區(qū)塊鏈之挖礦

    詳細(xì)介紹區(qū)塊鏈之挖礦

    對(duì)不起,大家,這篇文章對(duì)作者來(lái)說(shuō)實(shí)在是太有意義和含金量了,作者想把它設(shè)置為關(guān)注博主才能見(jiàn)全文,請(qǐng)大家理解!如果覺(jué)得還是看不懂,抱歉耽誤大家的時(shí)間,就請(qǐng)取消關(guān)注?。?! 挖礦前述文章請(qǐng)見(jiàn)網(wǎng)絡(luò)安全之網(wǎng)站常見(jiàn)的攻擊方式_Joy T的博客-CSDN博客 建議先看一下先前

    2024年02月08日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包