以太坊智慧合約程式設計(2):DApp框架,工具以及工作流程

買賣虛擬貨幣
第二部分. dapp框架,工具以及工作流程

dapp開發框架

雖然有上文提到的工具就可以進行開發了,但是使用社羣大神們創造的框架會讓開發更容易。

truffle and embark. 是truffle把我領進了門。在truffle出現之前的那個夏天,我目睹了一幫有天分的學生是如何不眠不休的參加一個hackathon(程式設計馬拉松)活動的,雖然結果相當不錯,但我還是嚇到了。然後truffle出現了,幫你處理掉大量無關緊要的小事情,讓你可以迅速進入寫程式碼-編譯-部署-測試-打包dapp這個流程。另外一個相似的dapp構建與測試框架是embark。我只用過truffle, 但是兩個陣營都擁有不少dapp大神。

meteor. 許多dapp開發者使用的另一套開發棧由web3.js和meteor組成,meteor是一套通用webapp開發框架(ethereum-meteor-wallet專案提供了一個很棒的入門例項,而silentciero正在構建大量meteor與web3.js和dapp整合的模板)。我下載並執行過一些不錯的dapp是以這種方式構造的。在11月9日至13日的以太坊開發者大會dξvcon1上將有一些有趣的討論,是關於使用這些工具構建dapp以及相關最佳實踐的(會議將會在youtube上直播)。

apis. blockapps.net打算提供一套restful api給dapp使用以免去開發者執行本地節點的麻煩,這個中心化服務是基於以太坊haskell實現的。這與dapp的去中心化模型背道而馳,但是在本地無法執行以太坊節點的場合非常有用,比如在你希望只有瀏覽器或者使用移動裝置的使用者也能使用你的dapp的時候。blockapps提供了一個命令列工具bloc,註冊一個開發者帳號之後就可以使用。

許多人擔心需要執行以太坊節點才能使用dapp的話會把使用者嚇跑,其實包括blockapps在內的許多工具都能解決這個問題。metamask允許你在瀏覽器裡面使用以太坊的功能而無需節點,以太坊官方提供的alethzero或者alethone是正在開發中有易用介面的客戶端,consensys正在打造一個輕錢包lightwallet,這些工具都會讓dapp的使用變得更容易。輕客戶端和水平分片(sharding)也在計劃和開發之中。這是一個能進化出混合架構的p2p生態系統。

智慧合約整合開發環境 (ide)

ide. 以太坊官方出品了用來編寫智慧合約的mix ide,我還沒用過但會盡快一試。

基於瀏覽器的ide. solidity real-time compiler和cosmo都可以讓你快速開始在瀏覽器中編寫智慧合約。你甚至可以讓這些工具使用你的本地節點,只要讓本地節點開一個埠(注意安全!這些工具站點必須可信,而且千萬不要把你的全部身家放在這樣一個本地節點裡面!cosmo ui上有如何使用geth做到這一點的指引)。在你的智慧合約除錯透過之後,可以用開發框架來給它新增使用者介面和打包成dapp,這正是truffle的工作,後面的程式設計章節會有詳細講解。

ether.camp正在開發另一個強大的企業級瀏覽器ide。他們的ide將支援沙盒測試網路,自動生成用於測試的使用者介面(取代後文將展示的手動編寫測試),以及一個測試交易瀏覽器test.ether.camp。當你的合約準備正式上線之前,使用他們的測試網路會是確保你的智慧合約在一個接近真實的環境工作正常的好方法。他們也為正式網路提供了一個交易瀏覽器frontier.ether.camp,上面可以看到每一筆交易的細節。在本文寫作時ether.camp的ide還只能透過邀請註冊,預計很快會正式釋出。

合約和dapp示例。 在github上搜尋dapp倉庫和.sol檔案可以看到進行中的有趣東西。這裡有一個dapp大列表:dapps.ethercasts.com,不過其中一些專案已經過時。ether.fund/contracts上有一些solidity和serpent寫的合約示例,但是不清楚這些例子有沒有經過測試或者正確性驗證。11月12日的開發者大會dξvcon1將會有一整天的dapp主題演講。

部署智慧合約的流程

流程如下:

  1. 啟動一個以太坊節點 (例如geth或者testrpc)。
  2. 使用solc*編譯*智慧合約。 => 獲得二進位制程式碼。
  3. 將編譯好的合約部署到網路。(這一步會消耗以太幣,還需要使用你的節點的預設地址或者指定地址來給合約簽名。) => 獲得合約的區塊鏈地址和abi(合約介面的json表示,包括變數,事件和可以呼叫的方法)。(譯註:作者在這裡把abi與合約介面弄混了。abi是合約介面的二進位制表示。)
  4. 用web3.js提供的javascript api來呼叫合約。(根據呼叫的型別有可能會消耗以太幣。)
下圖詳細描繪了這個流程:

你的dapp可以給使用者提供一個介面先部署所需合約再使用之(如圖1到4步),也可以假設合約已經部署了(常見方法),直接從使用合約(如圖第6步)的介面開始。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;