chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Dapp系統(tǒng)項(xiàng)目開(kāi)發(fā)部署流程

搭建punk2558 ? 來(lái)源:搭建punk2558 ? 作者:搭建punk2558 ? 2022-09-16 14:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

如何在以太坊上搭建一個(gè)Dapp?對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),最好的學(xué)習(xí)辦法就是親自動(dòng)手做一個(gè)小項(xiàng)目。所以,接下來(lái)將會(huì)以一個(gè)投票程序?yàn)槔?,帶著你在以太坊平臺(tái)上搭建一個(gè)dapp,并且通過(guò)借助這樣一個(gè)例子介紹Dapp的編譯、部署及交互過(guò)程。

這個(gè)程序的功能很簡(jiǎn)單,只是設(shè)定一組候選項(xiàng),讓所有人都可以給這些候選項(xiàng)投票,以及顯示每個(gè)候選項(xiàng)收到的總票數(shù)。

事先說(shuō)明,因?yàn)樗衐app框架都會(huì)隱藏掉一些底層細(xì)節(jié),對(duì)初學(xué)者來(lái)說(shuō),貿(mào)然使用框架可能會(huì)形成對(duì)系統(tǒng)認(rèn)識(shí)上的障礙,所以本文不會(huì)介紹如何借助框架搭建dapp。這樣等將來(lái)需要甄選框架時(shí),你也能清楚地看到框架到底幫你做了什么。

首先,準(zhǔn)備開(kāi)發(fā)環(huán)境,學(xué)習(xí)在開(kāi)發(fā)環(huán)境中的合約編寫(xiě)、編譯和部署流程,通過(guò)node.js控制臺(tái)與區(qū)塊鏈上的合約交互,通過(guò)一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)與合約交互,在頁(yè)面上提供投票功能并顯示候選項(xiàng)及相應(yīng)的票數(shù)。

整個(gè)程序的開(kāi)發(fā)都是在一臺(tái)干凈的ubuntu 16.04 xenial上完成的。除此之外,我還在一臺(tái)macos上重復(fù)了一遍搭建和測(cè)試過(guò)程。

準(zhǔn)備開(kāi)發(fā)環(huán)境

按web開(kāi)發(fā)的說(shuō)法,真實(shí)區(qū)塊鏈(live blockchain)相當(dāng)于生產(chǎn)環(huán)境,我們自然不應(yīng)該在生產(chǎn)環(huán)境上做開(kāi)發(fā),因此本文用了一個(gè)名為ganache的內(nèi)存區(qū)塊鏈(相當(dāng)于區(qū)塊鏈模擬器)。本教程的第二篇文章才會(huì)跟真正的區(qū)塊鏈交互。

下面是在linux操作系統(tǒng)上安裝ganache和web3js,以及啟動(dòng)測(cè)試區(qū)塊鏈的步驟。在macos上可以用同樣的命令。windows系統(tǒng)可以參照這里的命令。

注意:ganache-cli會(huì)創(chuàng)建10個(gè)自動(dòng)參與交易的測(cè)試賬號(hào),每個(gè)賬號(hào)里都預(yù)存了100個(gè)以太幣(當(dāng)然,只能用于測(cè)試),區(qū)塊鏈DAPP項(xiàng)目開(kāi)發(fā),DAPP系統(tǒng)開(kāi)發(fā)模式源碼,DAPP錢(qián)包系統(tǒng)搭建技術(shù)。

簡(jiǎn)單的投票合約

接下來(lái)我們要用Solidity編程語(yǔ)言編寫(xiě)合約。如果你熟悉面向?qū)ο缶幊?,就?huì)覺(jué)得這個(gè)學(xué)起來(lái)很輕松。

我們要編寫(xiě)一個(gè)名為Voting的合約(相當(dāng)于OOP語(yǔ)言中的類(lèi))。這個(gè)合約中會(huì)有個(gè)構(gòu)造器,負(fù)責(zé)初始化一個(gè)包含候選項(xiàng)的數(shù)組;還會(huì)有兩個(gè)方法,一個(gè)用于返回指定候選項(xiàng)的總票數(shù),另一個(gè)給候選項(xiàng)的得票數(shù)加一。

注意:在將合約部署到區(qū)塊鏈上時(shí),構(gòu)造器會(huì)執(zhí)行,并且只會(huì)執(zhí)行這一次。在做web應(yīng)用時(shí),每次重新部署都會(huì)覆蓋掉原來(lái)的代碼,但部署到區(qū)塊鏈上的代碼是不可變的。也就是說(shuō),即便你更新了合約,又重新部署了一次,之前的合約仍然會(huì)原封不動(dòng)地留在區(qū)塊鏈上,并且其中存儲(chǔ)的數(shù)據(jù)也不會(huì)受到絲毫影響,新部署的代碼會(huì)創(chuàng)建一個(gè)全新的合約實(shí)例。

下面是帶有注釋的投票合約代碼:

pragma solidity^0.4.18;

//必須指明編譯這段代碼的編譯器版本

contract Voting{

/*下面這個(gè)mapping域相當(dāng)于一個(gè)關(guān)聯(lián)數(shù)組或哈希。

mapping的鍵是候選項(xiàng)的名字,類(lèi)型為bytes32;

值的類(lèi)型是無(wú)符號(hào)整型,用于存儲(chǔ)得票數(shù)。

*/

mapping(bytes32=>uint8)public votesReceived;

/*Solidity(還)不允許給構(gòu)造器傳入字符串?dāng)?shù)組。

所以我們用bytes32數(shù)組存儲(chǔ)候選項(xiàng)

*/

bytes32[]public candidateList;

/*這就是把合約部署到區(qū)塊鏈上時(shí)會(huì)執(zhí)行一次的構(gòu)造器。

在部署合約時(shí),我們會(huì)傳入一個(gè)包含候選項(xiàng)的數(shù)組。

*/

function Voting(bytes32[]candidateNames)public{

candidateList=candidateNames;

}

//這個(gè)函數(shù)用于返回指定候選項(xiàng)的總票數(shù),其參數(shù)即為指定候選項(xiàng)

function totalVotesFor(bytes32 candidate)view public returns(uint8){

require(validCandidate(candidate));

return votesReceived[candidate];

}

//這個(gè)函數(shù)用于將指定候選項(xiàng)的票數(shù)加一

//這相當(dāng)于實(shí)現(xiàn)了投票功能

function voteForCandidate(bytes32 candidate)public{

require(validCandidate(candidate));

votesReceived[candidate]+=1;

}

function validCandidate(bytes32 candidate)view public returns(bool){

for(uint i=0;i

if(candidateList==candidate){

return true;

}

}

return false;

}

}

部署區(qū)塊鏈

將上面的代碼保存到Voting.sol文件中,放在hello_world_voting目錄下。接下來(lái)我們要編譯這段代碼,并將它部署到ganache區(qū)塊鏈上。

在編譯Solidity代碼之前,需要先安裝npm模塊solc。我們會(huì)在node控制臺(tái)中用這個(gè)庫(kù)編譯合約。

首先,在終端中運(yùn)行node命令進(jìn)入node控制臺(tái),初始化solc和web3對(duì)象。下面是需要在node控制臺(tái)中輸入的代碼:

mahesh projectblockchain:~/hello_world_voting$node

>Web3=require('web3')

>web3=new Web3(new Web3.providers.HttpProvider

為了確保web3對(duì)象初始化成功,可以跟區(qū)塊鏈通訊,我們可以查詢(xún)一下區(qū)塊鏈上的所有賬號(hào)。

為了編譯合約,需要先加載文件Voting.sol中的代碼,并將其賦值給一個(gè)字符串變量,然后再編譯這個(gè)字符串。

>code=fs.readFileSync('Voting.sol').toString()

>solc=require('solc')

>compiledCode=solc.compile(code)

代碼編譯成功后,可以在node終端中輸入compiledCode命令查看contract對(duì)象,有兩個(gè)域非常重要,一定要搞明白:compiledCode.contracts[‘:Voting’].bytecode:這是Voting.sol中的代碼編譯而成的字節(jié)碼,也是要部署到區(qū)塊鏈上的代碼。compiledCode.contracts[‘:Voting’].interface:這是合約的接口或者說(shuō)模板(稱(chēng)為abi),告訴合約的用戶(hù)有哪些方法可用。將來(lái)不管什么時(shí)候要跟合約交互,都需要這個(gè)abi定義。這里有關(guān)于ABI的詳細(xì)介紹。

部署合約

先創(chuàng)建一個(gè)在區(qū)塊鏈中部署和初始化合約的合約對(duì)象(即下面的VotingContract)。

>abiDefinition=JSON.parse(compiledCode.contracts[':Voting'].interface)

>VotingContract=web3.eth.contract(abiDefinition)

>byteCode=compiledCode.contracts[':Voting'].bytecode

>deployedContract=VotingContract.new(['Rama','Nick','Jose'],{data:byteCode,from:web3.eth.accounts[0],gas:

4700000})

>deployedContract.address

>contractInstance=VotingContract.at(deployedContract.address)

上面代碼中的VotingContract.new將合約部署到區(qū)塊鏈上。它的第一個(gè)參數(shù)是包含候選項(xiàng)的數(shù)組,一看就能明白。第二個(gè)參數(shù)中各數(shù)據(jù)項(xiàng)的含義分別為:data:這是已編譯好要部署到區(qū)塊鏈上的字節(jié)碼。from:區(qū)塊鏈必須追蹤是誰(shuí)部署的合約。在這個(gè)例子中,我們只是調(diào)用了web3.eth.accounts,然后將返回結(jié)果的第一個(gè)賬號(hào)作為這個(gè)合約的所有者(即將合約部署到區(qū)塊鏈上的賬號(hào))。

記住,web3.eth.accounts返回的是ganche在啟動(dòng)測(cè)試區(qū)塊鏈時(shí)創(chuàng)建的10個(gè)測(cè)試賬號(hào)組成的數(shù)組。然而在真實(shí)的區(qū)塊鏈中,不能隨便指定一個(gè)賬號(hào)。那必須是你擁有的賬號(hào),并且在交易之前要解鎖那個(gè)賬號(hào)。在創(chuàng)建賬號(hào)時(shí),系統(tǒng)會(huì)要求你提供一個(gè)口令,這個(gè)口令就是用來(lái)證明你對(duì)賬號(hào)的所有權(quán)的。為了用起來(lái)方便,Ganache默認(rèn)把10個(gè)賬號(hào)全解鎖了。

gas:跟區(qū)塊鏈交互是要花錢(qián)的。為了把你的代碼放到區(qū)塊鏈上,是需要讓礦機(jī)干活的,這筆錢(qián)就是給那些付出計(jì)算力的礦機(jī)的。

你必須明確愿意為此支付多少錢(qián),即給‘gas’一個(gè)值。購(gòu)買(mǎi)燃料的以太幣是從你的from賬號(hào)中出的。燃料的價(jià)格是由網(wǎng)絡(luò)設(shè)定的。合約部署好之后,我們就可以跟合約的實(shí)例(即上面的變量contractInstance)交互了。區(qū)塊鏈上有成百上千個(gè)合約,怎么確定哪個(gè)是你的呢?答案是用deployedContract.address。在你必須跟合約交互時(shí),需要這個(gè)部署地址和之前說(shuō)過(guò)的那個(gè)abi定義。

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于安路DR1M90 FPSoC 的Linux 系統(tǒng)流程開(kāi)發(fā)指南(3)

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì)安路飛龍 DR1M90,詳述 Linux 系統(tǒng)開(kāi)發(fā)流程:LinuxSDK 配置編譯、BOOT.bin(FSBL+U-Boot)開(kāi)發(fā)、Kernel 與 Rootfs 開(kāi)
    的頭像 發(fā)表于 11-26 17:01 ?166次閱讀
    基于安路DR1M90 FPSoC 的Linux <b class='flag-5'>系統(tǒng)</b>全<b class='flag-5'>流程</b><b class='flag-5'>開(kāi)發(fā)</b>指南(3)

    基于安路DR1M90 FPSoC 的Linux 系統(tǒng)流程開(kāi)發(fā)指南(1)

    本手冊(cè)由創(chuàng)龍科技研發(fā),針對(duì)安路飛龍 DR1M90,詳述 Linux 系統(tǒng)開(kāi)發(fā)流程:LinuxSDK 配置編譯、BOOT.bin(FSBL+U-Boot)開(kāi)發(fā)、Kernel 與 Rootfs 開(kāi)
    的頭像 發(fā)表于 11-25 14:09 ?243次閱讀
    基于安路DR1M90 FPSoC 的Linux <b class='flag-5'>系統(tǒng)</b>全<b class='flag-5'>流程</b><b class='flag-5'>開(kāi)發(fā)</b>指南(1)

    明晚8點(diǎn)|睿擎文件系統(tǒng)實(shí)戰(zhàn):從開(kāi)發(fā)到發(fā)布全流程解析

    從文件操作到鏡像發(fā)布,一次直播掌握完整開(kāi)發(fā)流程!在嵌入式系統(tǒng)開(kāi)發(fā)中,文件系統(tǒng)是數(shù)據(jù)存儲(chǔ)、配置管理和資源訪問(wèn)的核心基礎(chǔ)。然而在實(shí)際開(kāi)發(fā)中,文件
    的頭像 發(fā)表于 11-11 11:53 ?425次閱讀
    明晚8點(diǎn)|睿擎文件<b class='flag-5'>系統(tǒng)</b>實(shí)戰(zhàn):從<b class='flag-5'>開(kāi)發(fā)</b>到發(fā)布全<b class='flag-5'>流程</b>解析

    項(xiàng)目效率翻倍!迅為RK3568?V2.0硬件接口升級(jí),開(kāi)發(fā)流程再提速

    項(xiàng)目效率翻倍!迅為RK3568?V2.0硬件接口升級(jí),開(kāi)發(fā)流程再提速
    的頭像 發(fā)表于 10-29 10:53 ?258次閱讀
    <b class='flag-5'>項(xiàng)目</b>效率翻倍!迅為RK3568?V2.0硬件接口升級(jí),<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>流程</b>再提速

    上揚(yáng)軟件助力華興激光部署流程MES系統(tǒng)

    近日,上揚(yáng)軟件完成了對(duì)江蘇華興激光科技有限公司(“華興激光”)通信應(yīng)用激光外延材料、芯片及封測(cè)全流程生產(chǎn)制造執(zhí)行系統(tǒng)(MES)的需求調(diào)研工作,系統(tǒng)正式進(jìn)入開(kāi)發(fā)實(shí)施階段,預(yù)計(jì)將于2025
    的頭像 發(fā)表于 09-04 15:01 ?919次閱讀

    新唐科技推出高效AI MCU部署工具NuML Toolkit

    隨著 AI 技術(shù)加速導(dǎo)入各類(lèi)嵌入式系統(tǒng),如何將訓(xùn)練完成的 AI 模型順利部署至資源有限的微控制器成為工程師面對(duì)的重大挑戰(zhàn)。為協(xié)助開(kāi)發(fā)者快速落地 AI 方案,新唐科技推出 NuML Toolkit
    的頭像 發(fā)表于 08-01 17:21 ?1899次閱讀

    單片機(jī)開(kāi)發(fā)流程包括什么?

    單片機(jī)開(kāi)發(fā)是一個(gè)系統(tǒng)性的工程,從需求明確到最終產(chǎn)品落地,需要經(jīng)歷多個(gè)相互關(guān)聯(lián)的流程環(huán)節(jié),每個(gè)環(huán)節(jié)都對(duì)最終產(chǎn)品的性能和質(zhì)量有著重要影響。 一、需求分析與文檔梳理 開(kāi)發(fā)
    的頭像 發(fā)表于 07-22 11:21 ?661次閱讀

    干貨分享 | RK3588 Ubuntu系統(tǒng)Docker容器使用指南

    前言:在瑞芯微RK3588高性能AIoT平臺(tái)上運(yùn)行Ubuntu系統(tǒng)時(shí),Docker容器技術(shù)能極大提升開(kāi)發(fā)部署效率。通過(guò)輕量級(jí)虛擬化實(shí)現(xiàn)環(huán)境隔離與快速遷移,本文將從零開(kāi)始詳解RK3588平臺(tái)
    的頭像 發(fā)表于 06-27 12:01 ?3304次閱讀
    干貨分享 | RK3588 Ubuntu<b class='flag-5'>系統(tǒng)</b>Docker容器使用指南

    汽車(chē)零部件開(kāi)發(fā)項(xiàng)目管理

    汽車(chē)零部件開(kāi)發(fā)項(xiàng)目管理是一個(gè)涉及多環(huán)節(jié)、多部門(mén)協(xié)作的復(fù)雜過(guò)程,需從項(xiàng)目啟動(dòng)到交付全流程進(jìn)行科學(xué)規(guī)劃與管控。以下從 核心流程 、 關(guān)鍵要素 、
    的頭像 發(fā)表于 06-09 13:26 ?1175次閱讀

    HarmonyOS5云服務(wù)技術(shù)分享--Serverless抽獎(jiǎng)模板部署

    活動(dòng)。不用寫(xiě)復(fù)雜代碼,跟著步驟走就能搞定,文末還有部署避坑指南哦~ 一、前期準(zhǔn)備 1?? ??注冊(cè)賬號(hào)+創(chuàng)建項(xiàng)目?? 先到華為開(kāi)發(fā)者平臺(tái)注冊(cè)賬號(hào) 創(chuàng)建新項(xiàng)目時(shí)記得勾選\"云
    發(fā)表于 05-22 20:25

    基于RV1126開(kāi)發(fā)板的AI算法開(kāi)發(fā)流程

    AI算法開(kāi)發(fā)流程由需求分析到準(zhǔn)備數(shù)據(jù),然后到選取模型,訓(xùn)練模型,接著模型轉(zhuǎn)換后進(jìn)行模型部署
    的頭像 發(fā)表于 04-18 14:03 ?2089次閱讀
    基于RV1126<b class='flag-5'>開(kāi)發(fā)</b>板的AI算法<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>流程</b>

    基于RV1126開(kāi)發(fā)板的AI算法開(kāi)發(fā)流程

    AI算法開(kāi)發(fā)流程由需求分析到準(zhǔn)備數(shù)據(jù),然后到選取模型,訓(xùn)練模型,接著模型轉(zhuǎn)換后進(jìn)行模型部署
    的頭像 發(fā)表于 04-18 10:47 ?898次閱讀
    基于RV1126<b class='flag-5'>開(kāi)發(fā)</b>板的AI算法<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>流程</b>

    極速部署!GpuGeek提供AI開(kāi)發(fā)者的云端GPU最優(yōu)解

    支持及全流程開(kāi)發(fā)體驗(yàn)的綜合考量。GpuGeek作為專(zhuān)注于AI基礎(chǔ)設(shè)施的平臺(tái),憑借其“極速部署”能力與深度優(yōu)化的服務(wù)體系,正成為開(kāi)發(fā)者的云端首選。 一、秒級(jí)啟動(dòng):從注冊(cè)到運(yùn)行,30秒開(kāi)啟
    的頭像 發(fā)表于 03-17 11:27 ?667次閱讀
    極速<b class='flag-5'>部署</b>!GpuGeek提供AI<b class='flag-5'>開(kāi)發(fā)</b>者的云端GPU最優(yōu)解

    K230D部署模型失敗的原因?

    重現(xiàn)步驟 1.按照教程實(shí)現(xiàn)MicroPython 版本部署流程,連接上并將文件放到對(duì)應(yīng)位置后,剛運(yùn)行就斷開(kāi)和canmv ide的連接了(此時(shí)用的固件版本是圖中推薦的K230D_Zero...
    發(fā)表于 03-11 06:19

    《AI Agent 應(yīng)用與項(xiàng)目實(shí)戰(zhàn)》閱讀心得3——RAG架構(gòu)與部署本地知識(shí)庫(kù)

    實(shí)際開(kāi)發(fā)中,開(kāi)發(fā)者需要注意文檔預(yù)處理的質(zhì)量、向量化模型的選擇、檢索策略的優(yōu)化等技術(shù)細(xì)節(jié),同時(shí)要考慮系統(tǒng)的可維護(hù)性和擴(kuò)展性。本地部署和云端部署
    發(fā)表于 03-07 19:49