以太坊私鏈,也就是搭建屬于自己的區(qū)塊鏈,最常見的方式就是通過Geth(Go-Ethereum)搭建了,他可以算是比較真實的區(qū)塊鏈平臺了,唯一區(qū)別就是不需要挖礦,也就是不需要共識,Geth搭建私鏈時,我們需要配置創(chuàng)世塊、bootnode、啟動節(jié)點、挖礦等操作,搭建私鏈教程可點擊此處。
測試環(huán)境中的公鏈,一些組織為了讓開發(fā)者更方便的開發(fā)DApp,搭建了自己的以太坊平臺并對外開放,這些測試平臺的以太幣可以免費獲取,但每個賬戶獲取的數(shù)量有限,不過也足以我們用來測試了,在下文的實踐中用的也是這種方案。而測試平臺有哪些呢,在我們安裝了MetaMask插件以后,可以在里面找到。
以太坊,最后的環(huán)境肯定是以太坊了,不過我們在上線前一定要做好測試,因為區(qū)塊鏈具有不可篡改性,我們的DApp在上線后出bug可是無法修復的,只能通過發(fā)布一個新的DApp,然后通知你的用戶以后使用新地址,所以我們在設計合約時應當設置有無效標志位,盡早地告知調(diào)用者該合約已經(jīng)廢棄。
編程語言
編寫一個DApp可以說是包括兩部分,合約部分和業(yè)務邏輯部分。
智能合約
Solidity,類JavaScript,這是以太坊推薦的語言,也是最流行的智能合約語言,另外測試、調(diào)試Solidity有一個非常好的在線IDE–Remix,由以太坊團隊推出的。由于考慮在線網(wǎng)絡比較慢,可以使用本地IDE。
業(yè)務邏輯
業(yè)務邏輯部分即提供客戶端與智能合約交互的接口,相當于目前BS結(jié)構(gòu)中的后臺邏輯,因此業(yè)務邏輯部分可部署在中心服務器中,而且在以太坊中每個智能合約函數(shù)的每一行代碼都有固定的gas費用以及延時的,一些簡單的邏輯應該交由業(yè)務邏輯處理,編寫業(yè)務邏輯目前提供有以下幾種語言:
JavaScript,主要是基于Web3.js這個庫調(diào)用智能合約,本文例子也是使用JavaScript編寫的。
Go,上述提到的以太坊私鏈搭建工具geth就是使用Go編寫的。
Java
Ruby
Haskell
Rust
DApp原理
一個DApp被調(diào)用之前需要先部署到以太坊上,不管是私鏈,公鏈還是聯(lián)盟鏈。故本章節(jié)分為兩部分,DApp部署原理和調(diào)用原理。
部署
一個DApp由多個智能合約組成,部署一個DApp也就是同時部署多個智能合約,這里講述一下部署一個智能合約的流程,如下圖所示。

將編寫好的Solidity智能合約通過RPC調(diào)用以太坊錢包或Web3.js等工具。
Web3.js發(fā)送合約源碼到部署在以太坊節(jié)點的Solc編譯器。
編譯器返回合約字節(jié)碼。
發(fā)送合約字節(jié)碼和初始化參數(shù)到以太坊節(jié)點。
以太坊節(jié)點上EVM驗證完成后,部署到全網(wǎng)的所有節(jié)點,完成后返回合約地址和應用二進制接口(ABI)。
這里推薦使用Remix進行部署,因為Remix不僅可以連接瀏覽器內(nèi)嵌的以太坊VM,還可以和MetaMask聯(lián)動,使用MetaMask當前所連的以太坊網(wǎng)絡,而且Remix還可以調(diào)試部署好的合約,十分方便。在Remix上部署十分簡單,選擇部署的以太坊網(wǎng)絡和填好合約初始化參數(shù)后,點擊create按鈕即可。如果我們選的是MetaMask當前的以太坊網(wǎng)絡,則會跳轉(zhuǎn)交易界面,因為部署合約本質(zhì)上也是一筆交易,我們需要付交易手續(xù)費。
部署后的合約其實外部還不能調(diào)用,還需要我們上傳源代碼進行驗證,不然別人不可能在不清楚源碼情況下向合約發(fā)起交易,向你轉(zhuǎn)賬。
調(diào)用
部署好的合約我們就可以調(diào)用了,根據(jù)調(diào)用方式的不同,本文分為前端調(diào)用和后端調(diào)用。
前端調(diào)用相對來說簡單一點,因為有MetaMask這個強大的插件,我們不必操心以太坊數(shù)據(jù)源,直接調(diào)用web3.currentProvider即可,下圖展示了前端調(diào)用合約的一般流程,由于前端連接的Web3 Provider是與特定的以太坊節(jié)點相連,前端不需要管方法的簽名,只需無腦調(diào)用合約中的方法即可。
至于后臺調(diào)用就麻煩一點了,由于后臺沒有MetaMask這么方便的工具可調(diào)用,因此要是調(diào)用公鏈上的智能合約,只能使用特定賬戶的私鑰簽名方法后,并且以該賬戶的身份調(diào)用合約
審核編輯 黃昊宇
-
編程
+關(guān)注
關(guān)注
90文章
3707瀏覽量
96709 -
區(qū)塊鏈
+關(guān)注
關(guān)注
112文章
15571瀏覽量
110447
發(fā)布評論請先 登錄
盲埋孔線路板加工工藝介紹
MCU單片機TWS耳機充電盒系統(tǒng)控制方案
物聯(lián)網(wǎng)平臺應用環(huán)境監(jiān)控:低代碼零編程簡化開發(fā),組態(tài)應用
多層PCB盲孔與埋孔工藝詳解
音樂盒芯片方案——N9305音樂芯片
如果 PD 合約不匹配,BCR 是否仍會打開 SINK_FET_EN POWER_DRILL2GO路徑?
索尼FCB-EV9520L機芯:商城智能監(jiān)控系統(tǒng)的技術(shù)革新者
20倍變焦+智能編碼:FCB-ER8530破局商城監(jiān)控「全域無盲」
探秘叁仟智盒設備:智慧城市的智能樞紐
電源盒的應用場景
電源盒輸出信號類型
盲孔技術(shù)對PCB厚度的影響
華為云 Flexus 云服務器 X 實例部署——盲盒抽獎商城系統(tǒng)以及編譯發(fā)布小程序

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