理解以太坊DApp及開發工具

ChainHeader發表於2018-03-07

一、理解以太坊工具

以太坊有很多工具,隨著時間的推移有些會過時,但早期的網路文章會有介紹,從而與目前的工具造成時差上的迷惑,有些工具是隨著工程化的需要逐漸流行起來的。有必要梳理以下:

1、go-ethereum:以太坊Go語言版本的原始碼(也叫Client,注意區塊鏈網路裡沒有服務端)。

2、Geth:go-ethereum的命令列終端,能呼叫go-ethereum的API。可以通過多種方式獲得,比如用homebrew安裝、下載可執行二進位制檔案、通過go install/make geth go-ethereum原始碼等方式得到geth。

3、Ethereum Wallet:視覺化的Geth(以太坊錢包),可以管理賬戶、釋出合約。

4、Mist:以太坊瀏覽器,因為它連線的是以太坊區塊鏈網路,可以通過mist訪問DApp,當然也能訪問管理Ethereum Wallet。

5、Solidity:開發智慧合約的程式語言,執行在EVM。

6、Remix:開發智慧合約的IDE,基於瀏覽器。適合新手(版本控制、儲存等不便)。(Mix停止更新,browser-solidity也停止更新,都使用Remix了)

7、Truffle和Embark是開發DApps的兩個常用框架,可以寫程式碼-編譯-部署-測試-打包DApp(注意不僅僅可以開發智慧合約)。

8、web3:以太坊基金會為DApp開發的標準RPC訪問介面,也就是以太坊區塊鏈網路與鏈外網路的連線橋樑。

二、DAPP的工具、開發與原理

通過一個Dapp開發例子來理解。

1、安裝truffle(音:車否)

npm i -g truffle

2、安裝Ganache(音:擱那師),Ganache是用於以太坊開發的僅為個人使用的區塊鏈,下載視覺化安裝包。
http://truffleframework.com/g…

3、新建Dapp專案。首先新建一個空目錄如dapp,然後進入空目錄。

通常可以用truffle初始化工程:

truffle init

也可以從truffle線上應用裡拆箱即用一個模板如webpack:

truffle unbox webpack

我們用第二種方式進行下文演示。

4、我使用的IDE是GoLand(intellij idea系列的IDE都可以),安裝外掛Intellij-Solidity。開啟工程後就可以友好地編寫智慧合約和DApp了。

dapp目錄下的幾個檔案說明:

truffle.js:預設配置了一個網路,這個網路啟動ganache後就自動啟用了(每次啟動都是全新的初始網路,之前的應用資料會丟失),智慧合約就是被部署到這個網路裡的。

migrations目錄:這裡面是合約的部署指令碼,注意命名以數字加下劃線開頭,合約部署時按這個數字序號順序執行。

5、編譯工程

終端cd到dapp目錄下執行編譯命令

truffle compile

會看到dapp下多了一個build目錄,存放編譯後的檔案。這些檔案都是json格式,可以在應用程式碼檔案中通過import或require引用這些編譯後的合約檔案。

6、部署合約到區塊鏈網路

在終端裡執行

truffle migrate

執行結束併成功後可以從ganache介面中看到產生了幾個區塊和幾筆交易,這些交易是從預設的第一個外部擁有賬戶到合約賬戶(這兩個賬戶的概念參見以太坊黃皮書說明,此處不大篇贅述)。

7、打包應用程式並訪問

在終端裡執行(應用程式根目錄下)

1)webpack編譯打包應用

npm run build

【DApp原理】這個打包的結果就是單頁前端應用SPA (Single-Page App)。你可以將它放在自己的雲web伺服器上,伺服器上同時要部署一個以太節點,應用通過節點接入區塊鏈網路。DApp一般都部署在鏈外,合約是釋出到鏈上的。因特網的使用者訪問App介面操作功能,這些功能是合約暴露的web3介面。DApp之所以是去中心化的,就在於其核心——合約,分佈於鏈上所有節點。

2)本地啟用app

npm run dev

訪問 http://localhost:8080,就可以看到dapp的介面,包含視覺化的合約功能。

相關文章