以太坊私鏈,也就是搭建屬于自己的區(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編寫的。
Java
Ruby
Haskell
Rust
DApp原理
一個(gè)DApp被調(diào)用之前需要先部署到以太坊上,不管是私鏈,公鏈還是聯(lián)盟鏈。故本章節(jié)分為兩部分,DApp部署原理和調(diào)用原理。
部署
一個(gè)DApp由多個(gè)智能合約組成,部署一個(gè)DApp也就是同時(shí)部署多個(gè)智能合約,這里講述一下部署一個(gè)智能合約的流程,如下圖所示。
將編寫好的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)用合約
審核編輯 黃昊宇
-
編程
+關(guān)注
關(guān)注
88文章
3634瀏覽量
93866 -
區(qū)塊鏈
+關(guān)注
關(guān)注
111文章
15562瀏覽量
106373
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論