以太坊私鏈,也就是搭建屬于自己的區塊鏈,最常見的方式就是通過Geth(Go-Ethereum)搭建了,他可以算是比較真實的區塊鏈平臺了,唯一區別就是不需要挖礦,也就是不需要共識,Geth搭建私鏈時,我們需要配置創世塊、bootnode、啟動節點、挖礦等操作,搭建私鏈教程可點擊此處。
測試環境中的公鏈,一些組織為了讓開發者更方便的開發DApp,搭建了自己的以太坊平臺并對外開放,這些測試平臺的以太幣可以免費獲取,但每個賬戶獲取的數量有限,不過也足以我們用來測試了,在下文的實踐中用的也是這種方案。而測試平臺有哪些呢,在我們安裝了MetaMask插件以后,可以在里面找到。
以太坊,最后的環境肯定是以太坊了,不過我們在上線前一定要做好測試,因為區塊鏈具有不可篡改性,我們的DApp在上線后出bug可是無法修復的,只能通過發布一個新的DApp,然后通知你的用戶以后使用新地址,所以我們在設計合約時應當設置有無效標志位,盡早地告知調用者該合約已經廢棄。
編程語言
編寫一個DApp可以說是包括兩部分,合約部分和業務邏輯部分。
智能合約
Solidity,類JavaScript,這是以太坊推薦的語言,也是最流行的智能合約語言,另外測試、調試Solidity有一個非常好的在線IDE–Remix,由以太坊團隊推出的。由于考慮在線網絡比較慢,可以使用本地IDE。
業務邏輯
業務邏輯部分即提供客戶端與智能合約交互的接口,相當于目前BS結構中的后臺邏輯,因此業務邏輯部分可部署在中心服務器中,而且在以太坊中每個智能合約函數的每一行代碼都有固定的gas費用以及延時的,一些簡單的邏輯應該交由業務邏輯處理,編寫業務邏輯目前提供有以下幾種語言:
JavaScript,主要是基于Web3.js這個庫調用智能合約,本文例子也是使用JavaScript編寫的。
Go,上述提到的以太坊私鏈搭建工具geth就是使用Go編寫的。
Java
Ruby
Haskell
Rust
DApp原理
一個DApp被調用之前需要先部署到以太坊上,不管是私鏈,公鏈還是聯盟鏈。故本章節分為兩部分,DApp部署原理和調用原理。
部署
一個DApp由多個智能合約組成,部署一個DApp也就是同時部署多個智能合約,這里講述一下部署一個智能合約的流程,如下圖所示。
將編寫好的Solidity智能合約通過RPC調用以太坊錢包或Web3.js等工具。
Web3.js發送合約源碼到部署在以太坊節點的Solc編譯器。
編譯器返回合約字節碼。
發送合約字節碼和初始化參數到以太坊節點。
以太坊節點上EVM驗證完成后,部署到全網的所有節點,完成后返回合約地址和應用二進制接口(ABI)。
這里推薦使用Remix進行部署,因為Remix不僅可以連接瀏覽器內嵌的以太坊VM,還可以和MetaMask聯動,使用MetaMask當前所連的以太坊網絡,而且Remix還可以調試部署好的合約,十分方便。在Remix上部署十分簡單,選擇部署的以太坊網絡和填好合約初始化參數后,點擊create按鈕即可。如果我們選的是MetaMask當前的以太坊網絡,則會跳轉交易界面,因為部署合約本質上也是一筆交易,我們需要付交易手續費。
部署后的合約其實外部還不能調用,還需要我們上傳源代碼進行驗證,不然別人不可能在不清楚源碼情況下向合約發起交易,向你轉賬。
調用
部署好的合約我們就可以調用了,根據調用方式的不同,本文分為前端調用和后端調用。
前端調用相對來說簡單一點,因為有MetaMask這個強大的插件,我們不必操心以太坊數據源,直接調用web3.currentProvider即可,下圖展示了前端調用合約的一般流程,由于前端連接的Web3 Provider是與特定的以太坊節點相連,前端不需要管方法的簽名,只需無腦調用合約中的方法即可。
至于后臺調用就麻煩一點了,由于后臺沒有MetaMask這么方便的工具可調用,因此要是調用公鏈上的智能合約,只能使用特定賬戶的私鑰簽名方法后,并且以該賬戶的身份調用合約
審核編輯 黃昊宇
-
編程
+關注
關注
88文章
3623瀏覽量
93798 -
區塊鏈
+關注
關注
111文章
15562瀏覽量
106227
發布評論請先 登錄
相關推薦
評論