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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(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ū)塊鏈平臺(tái)了,唯一區(qū)別就是不需要挖礦,也就是不需要共識(shí),Geth搭建私鏈時(shí),我們需要配置創(chuàng)世塊、bootnode、啟動(dòng)節(jié)點(diǎn)、挖礦等操作,搭建私鏈教程可點(diǎn)擊此處。

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

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

編程語言

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

智能合約

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

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

業(yè)務(wù)邏輯部分即提供客戶端與智能合約交互的接口,相當(dāng)于目前BS結(jié)構(gòu)中的后臺(tái)邏輯,因此業(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)動(dòng),使用MetaMask當(dāng)前所連的以太坊網(wǎng)絡(luò),而且Remix還可以調(diào)試部署好的合約,十分方便。在Remix上部署十分簡單,選擇部署的以太坊網(wǎng)絡(luò)和填好合約初始化參數(shù)后,點(diǎn)擊create按鈕即可。如果我們選的是MetaMask當(dāng)前的以太坊網(wǎng)絡(luò),則會(huì)跳轉(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)用相對(duì)來說簡單一點(diǎn),因?yàn)橛蠱etaMask這個(gè)強(qiáng)大的插件,我們不必操心以太坊數(shù)據(jù)源,直接調(diào)用web3.currentProvider即可,下圖展示了前端調(diào)用合約的一般流程,由于前端連接的Web3 Provider是與特定的以太坊節(jié)點(diǎn)相連,前端不需要管方法的簽名,只需無腦調(diào)用合約中的方法即可。

至于后臺(tái)調(diào)用就麻煩一點(diǎn)了,由于后臺(tái)沒有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ī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3634

    瀏覽量

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

    關(guān)注

    111

    文章

    15562

    瀏覽量

    106373
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    孔技術(shù)對(duì)PCB厚度的影響

    孔技術(shù)對(duì)PCB厚度影響的多方面分析 從空間利用角度 孔技術(shù)的應(yīng)用有助于在一定程度上減小PCB的厚度需求。因?yàn)?b class='flag-5'>盲孔不需要穿透整個(gè)板層,在進(jìn)行層間連接時(shí),相比傳統(tǒng)通孔,可以在有限的空間內(nèi)實(shí)現(xiàn)更多
    的頭像 發(fā)表于 01-08 17:30 ?116次閱讀

    華為云 Flexus 云服務(wù)器 X 實(shí)例部署——抽獎(jiǎng)商城系統(tǒng)以及編譯發(fā)布小程序

    抽獎(jiǎng)商城系統(tǒng)使用 thinkphp6.0 + uniapp 開發(fā),做到了全移動(dòng)端兼容。一個(gè)系統(tǒng)
    的頭像 發(fā)表于 12-31 10:36 ?242次閱讀
    華為云 Flexus 云服務(wù)器 X 實(shí)例部署——<b class='flag-5'>盲</b><b class='flag-5'>盒</b>抽獎(jiǎng)<b class='flag-5'>商城</b><b class='flag-5'>系統(tǒng)</b>以及編譯發(fā)布小程序

    HDI埋孔工藝及制程能力你了解多少?

    HDI技術(shù)通過 增加埋孔來實(shí)現(xiàn)高密度布局 ,適用于高端服務(wù)器、智能手機(jī)、多功能POS機(jī)和安防攝像機(jī)等領(lǐng)域。通訊和計(jì)算機(jī)行業(yè)對(duì)HDI線路板需求較高,推動(dòng)了科技的進(jìn)步。目前,HDI板在國內(nèi)市場的前景
    發(fā)表于 12-18 17:13

    PCB孔加工控制成本的方法

    PCB孔加工控制成本的方法 PCB孔加工的成本控制是一個(gè)多方面的過程,涉及設(shè)計(jì)、加工、測(cè)試等多個(gè)環(huán)節(jié)。以下是一些有效的方法來幫助控制孔加工的成本: 1. 設(shè)計(jì)成本控制 簡化設(shè)計(jì):盡量簡化
    的頭像 發(fā)表于 11-23 16:34 ?245次閱讀
    PCB<b class='flag-5'>盲</b>孔加工控制成本的方法

    dap協(xié)議在DApp開發(fā)中的作用

    隨著區(qū)塊鏈技術(shù)的不斷發(fā)展,去中心化應(yīng)用(DApp)逐漸成為技術(shù)領(lǐng)域的熱門話題。DApp以其去中心化、透明性和安全性的特點(diǎn),為用戶和開發(fā)者提供了新的應(yīng)用模式。在這一背景下,DAP協(xié)議應(yīng)運(yùn)而生,為
    的頭像 發(fā)表于 11-22 15:43 ?260次閱讀

    機(jī)遠(yuǎn)程監(jiān)控運(yùn)維管理系統(tǒng)方案

    ,數(shù)之能了一種封機(jī)遠(yuǎn)程監(jiān)控運(yùn)維管理系統(tǒng)方案。 痛點(diǎn)分析 1、實(shí)時(shí)監(jiān)控困難:設(shè)備分散在不同地點(diǎn),難以實(shí)時(shí)監(jiān)控運(yùn)行狀態(tài),導(dǎo)致故障發(fā)現(xiàn)不及時(shí)。 2、維護(hù)成本高:設(shè)備出現(xiàn)故障時(shí),需要技術(shù)人員現(xiàn)場排查,增加了人力成本和
    的頭像 發(fā)表于 11-15 13:54 ?145次閱讀

    HDI板孔制作常見缺陷及解決

    HDI板是一種高密度互連印刷電路板,其特點(diǎn)是線路密度高、孔徑小、層間連接復(fù)雜。在HDI板的制作過程中,孔的制作是一個(gè)關(guān)鍵步驟,同時(shí)也是常見的缺陷發(fā)生環(huán)節(jié)。以下是根據(jù)搜索結(jié)果總結(jié)的HDI板孔制作的常見缺陷及其解決方法。
    的頭像 發(fā)表于 11-02 10:33 ?304次閱讀

    MCU編程語言和開發(fā)環(huán)境介紹

    微控制器單元(Microcontroller Unit,簡稱MCU)是嵌入式系統(tǒng)的核心,廣泛應(yīng)用于各種電子產(chǎn)品中。隨著技術(shù)的發(fā)展,MCU編程語言和開發(fā)環(huán)境也在不斷進(jìn)步,以適應(yīng)不同的應(yīng)用需求。 1.
    的頭像 發(fā)表于 11-01 11:51 ?930次閱讀

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

    /埋孔HDI板概述 /埋孔HDI (High Density Interconnect,高密度互連)板是一種高級(jí)的印刷電路板技術(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 ?473次閱讀
    <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 ?1126次閱讀
    火柴<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 ?863次閱讀

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

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

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

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

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

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