1. 程式人生 > >開發數字貨幣教程DApp框架工具以及工作流程

開發數字貨幣教程DApp框架工具以及工作流程

區塊鏈愛好者(QQ:53016353) 

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主題演講。


部署智慧合約的流程


流程如下:


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