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

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

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

NFT盲盒商城系統(tǒng)dapp開發(fā)合約編程

搭建punk2558 ? 來源:搭建punk2558 ? 作者:搭建punk2558 ? 2022-08-26 10:38 ? 次閱讀

以太坊私鏈,也就是搭建屬于自己的區(qū)塊鏈,最常見的方式就是通過Geth(Go-Ethereum)搭建了,他可以算是比較真實(shí)的區(qū)塊鏈平臺了,唯一區(qū)別就是不需要挖礦,也就是不需要共識,Geth搭建私鏈時(shí),我們需要配置創(chuàng)世塊、bootnode、啟動節(jié)點(diǎn)、挖礦等操作,搭建私鏈教程可點(diǎn)擊此處。

測試環(huán)境中的公鏈,一些組織為了讓開發(fā)者更方便的開發(fā)DApp,搭建了自己的以太坊平臺并對外開放,這些測試平臺的以太幣可以免費(fèi)獲取,但每個(gè)賬戶獲取的數(shù)量有限,不過也足以我們用來測試了,在下文的實(shí)踐中用的也是這種方案。而測試平臺有哪些呢,在我們安裝了MetaMask插件以后,可以在里面找到。

以太坊,最后的環(huán)境肯定是以太坊了,不過我們在上線前一定要做好測試,因?yàn)閰^(qū)塊鏈具有不可篡改性,我們的DApp在上線后出bug可是無法修復(fù)的,只能通過發(fā)布一個(gè)新的DApp,然后通知你的用戶以后使用新地址,所以我們在設(shè)計(jì)合約時(shí)應(yīng)當(dāng)設(shè)置有無效標(biāo)志位,盡早地告知調(diào)用者該合約已經(jīng)廢棄。

編程語言

編寫一個(gè)DApp可以說是包括兩部分,合約部分和業(yè)務(wù)邏輯部分。

智能合約

Solidity,類JavaScript,這是以太坊推薦的語言,也是最流行的智能合約語言,另外測試、調(diào)試Solidity有一個(gè)非常好的在線IDE–Remix,由以太坊團(tuán)隊(duì)推出的。由于考慮在線網(wǎng)絡(luò)比較慢,可以使用本地IDE。

業(yè)務(wù)邏輯

業(yè)務(wù)邏輯部分即提供客戶端與智能合約交互的接口,相當(dāng)于目前BS結(jié)構(gòu)中的后臺邏輯,因此業(yè)務(wù)邏輯部分可部署在中心服務(wù)器中,而且在以太坊中每個(gè)智能合約函數(shù)的每一行代碼都有固定的gas費(fèi)用以及延時(shí)的,一些簡單的邏輯應(yīng)該交由業(yè)務(wù)邏輯處理,編寫業(yè)務(wù)邏輯目前提供有以下幾種語言:

JavaScript,主要是基于Web3.js這個(gè)庫調(diào)用智能合約,本文例子也是使用JavaScript編寫的。

Go,上述提到的以太坊私鏈搭建工具geth就是使用Go編寫的。

Python

Java

Ruby

Haskell

Rust

DApp原理

一個(gè)DApp被調(diào)用之前需要先部署到以太坊上,不管是私鏈,公鏈還是聯(lián)盟鏈。故本章節(jié)分為兩部分,DApp部署原理和調(diào)用原理。

部署

一個(gè)DApp由多個(gè)智能合約組成,部署一個(gè)DApp也就是同時(shí)部署多個(gè)智能合約,這里講述一下部署一個(gè)智能合約的流程,如下圖所示。

poYBAGMIMgiAUsAnAACAoMXM-Yc576.png

將編寫好的Solidity智能合約通過RPC調(diào)用以太坊錢包或Web3.js等工具。

Web3.js發(fā)送合約源碼到部署在以太坊節(jié)點(diǎn)的Solc編譯器。

編譯器返回合約字節(jié)碼。

發(fā)送合約字節(jié)碼和初始化參數(shù)到以太坊節(jié)點(diǎn)。

以太坊節(jié)點(diǎn)上EVM驗(yàn)證完成后,部署到全網(wǎng)的所有節(jié)點(diǎn),完成后返回合約地址和應(yīng)用二進(jìn)制接口(ABI)。

這里推薦使用Remix進(jìn)行部署,因?yàn)镽emix不僅可以連接瀏覽器內(nèi)嵌的以太坊VM,還可以和MetaMask聯(lián)動,使用MetaMask當(dāng)前所連的以太坊網(wǎng)絡(luò),而且Remix還可以調(diào)試部署好的合約,十分方便。在Remix上部署十分簡單,選擇部署的以太坊網(wǎng)絡(luò)和填好合約初始化參數(shù)后,點(diǎn)擊create按鈕即可。如果我們選的是MetaMask當(dāng)前的以太坊網(wǎng)絡(luò),則會跳轉(zhuǎn)交易界面,因?yàn)椴渴鸷霞s本質(zhì)上也是一筆交易,我們需要付交易手續(xù)費(fèi)。

部署后的合約其實(shí)外部還不能調(diào)用,還需要我們上傳源代碼進(jìn)行驗(yàn)證,不然別人不可能在不清楚源碼情況下向合約發(fā)起交易,向你轉(zhuǎn)賬。

調(diào)用

部署好的合約我們就可以調(diào)用了,根據(jù)調(diào)用方式的不同,本文分為前端調(diào)用和后端調(diào)用。

前端調(diào)用相對來說簡單一點(diǎn),因?yàn)橛蠱etaMask這個(gè)強(qiáng)大的插件,我們不必操心以太坊數(shù)據(jù)源,直接調(diào)用web3.currentProvider即可,下圖展示了前端調(diào)用合約的一般流程,由于前端連接的Web3 Provider是與特定的以太坊節(jié)點(diǎn)相連,前端不需要管方法的簽名,只需無腦調(diào)用合約中的方法即可。

至于后臺調(diào)用就麻煩一點(diǎn)了,由于后臺沒有MetaMask這么方便的工具可調(diào)用,因此要是調(diào)用公鏈上的智能合約,只能使用特定賬戶的私鑰簽名方法后,并且以該賬戶的身份調(diào)用合約

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3545

    瀏覽量

    93501
  • 區(qū)塊鏈
    +關(guān)注

    關(guān)注

    110

    文章

    15559

    瀏覽量

    105520
收藏 人收藏

    評論

    相關(guān)推薦

    如何判斷/埋孔HDI板有多少“階”?

    /埋孔HDI板概述 /埋孔HDI (High Density Interconnect,高密度互連)板是一種高級的印刷電路板技術(shù),它通過使用微小的孔和埋孔來 提高電路板上的布線密度
    發(fā)表于 10-23 18:38

    孔在HDI線路板中的作用

    孔在HDI線路板中起到增加連接密度、改善電氣性能、增強(qiáng)機(jī)械穩(wěn)定性和提升制造效率的作用。1、增加連接密度優(yōu)化空間利用:孔穿透PCB的部分層,能在有限空間內(nèi)有效連接外層和相鄰內(nèi)層,支持高密度布局
    的頭像 發(fā)表于 10-23 17:43 ?135次閱讀
    <b class='flag-5'>盲</b>孔在HDI線路板中的作用

    火柴大小的開發(fā)板duos做輕NAS體驗(yàn)

    火柴大小的國產(chǎn)開發(fā)板,做輕NAS是什么樣的體驗(yàn)!哈嘍,大家好;前段時(shí)間有一家公司叫算能,他送給我們一個(gè)火柴大小的一個(gè)開發(fā)板,他說這個(gè)開發(fā)
    的頭像 發(fā)表于 10-10 08:08 ?781次閱讀
    火柴<b class='flag-5'>盒</b>大小的<b class='flag-5'>開發(fā)</b>板duos做輕NAS體驗(yàn)

    孔PCB線路板加工流程

    孔PCB線路板的加工流程是一個(gè)復(fù)雜的過程,涉及到多個(gè)步驟和技術(shù)。以下是埋孔PCB線路板加工流程的詳細(xì)解釋。
    的頭像 發(fā)表于 09-07 09:42 ?586次閱讀

    pcb設(shè)計(jì)中孔和過孔的區(qū)別?

    在PCB設(shè)計(jì)中,孔和過孔是兩種常見的孔類型,它們在電路板的制造過程中起著重要的作用。 定義 孔(Blind Vias):孔是一種連接外層和內(nèi)層但不穿透整個(gè)PCB板的孔。它的一端連接
    的頭像 發(fā)表于 09-02 14:47 ?669次閱讀

    Linux 驅(qū)動開發(fā)與應(yīng)用開發(fā),你知道多少?

    一、Linux驅(qū)動開發(fā)與應(yīng)用開發(fā)的區(qū)別開發(fā)層次不同:Linux驅(qū)動開發(fā)主要是針對硬件設(shè)備進(jìn)行編程,處于操作
    的頭像 發(fā)表于 08-30 12:16 ?378次閱讀
    Linux 驅(qū)動<b class='flag-5'>開發(fā)</b>與應(yīng)用<b class='flag-5'>開發(fā)</b>,你知道多少?

    6層板,有、埋孔現(xiàn)在能做嗎?

    6層板,有、埋孔現(xiàn)在能做嗎?
    發(fā)表于 04-29 14:54

    fpga開發(fā)需要掌握哪些編程語言

    FPGA(現(xiàn)場可編程門陣列)開發(fā)涉及多種編程語言和技術(shù).
    的頭像 發(fā)表于 03-27 14:34 ?1284次閱讀

    基于單片機(jī)的導(dǎo)拐杖設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于單片機(jī)的導(dǎo)拐杖設(shè)計(jì).rar》資料免費(fèi)下載
    發(fā)表于 01-12 09:43 ?11次下載

    基于單片機(jī)的導(dǎo)拐杖設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于單片機(jī)的導(dǎo)拐杖設(shè)計(jì).rar》資料免費(fèi)下載
    發(fā)表于 01-03 11:07 ?10次下載

    HDI(、埋孔)板壓合問題

    隨著電子信息技術(shù)的迅速發(fā)展,電子產(chǎn)品的功能越來越復(fù)雜、性能越來越優(yōu)越、體積越來越小、重量越來越輕……因此對印制板的要求也越來越高,比如其導(dǎo)線越來越細(xì)、導(dǎo)通孔越來越小、布線密度越來越高等等。 埋、
    發(fā)表于 12-25 14:09

    基于Rust開發(fā)編程語言

    Move 是一門由 Rust 語言開發(fā)的一門面向資產(chǎn)的編程語言,最早由 Facebook (現(xiàn) Meta )投入大量的人力物力開發(fā),用于 Libra (現(xiàn) Dime )項(xiàng)目,處理全球性大規(guī)模支付
    的頭像 發(fā)表于 11-17 12:30 ?622次閱讀

    為什么設(shè)計(jì)跨層孔(Skip via)?

    PCB設(shè)計(jì)時(shí),在那種情況下會使用跨層孔(Skip via)的設(shè)計(jì)?一般疊構(gòu)和孔徑怎么設(shè)計(jì)?
    發(fā)表于 11-09 16:21

    基于Android系統(tǒng)的機(jī)頂及其搖控器的設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于Android系統(tǒng)的機(jī)頂及其搖控器的設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 11-03 14:07 ?1次下載
    基于Android<b class='flag-5'>系統(tǒng)</b>的機(jī)頂<b class='flag-5'>盒</b>及其搖控器的設(shè)計(jì)與實(shí)現(xiàn)

    通孔和孔對信號的差異影響有多大?應(yīng)用的原則是什么?

    通孔和孔對信號的差異影響有多大?應(yīng)用的原則是什么? 在PCB設(shè)計(jì)中,通孔和孔的應(yīng)用都極為廣泛。然而兩者在傳輸信號時(shí),存在著一定的差異。那么通孔和孔之間到底有哪些不同之處?它們對信號的傳輸會有
    的頭像 發(fā)表于 10-31 14:34 ?1308次閱讀