區塊鏈技術如今是非常火熱,不僅讓金融家和創投家趨之若鶩,如今已經在多個領域遍地播種。作為擁有銳利觸角的創業家們,是否也想將區塊鏈整合到你們現有的應用中去,而作為IT技術工程師的你,是否也是躍躍欲試,想基於區塊鏈來練一下手,以免日後被新技術淘汰。不過,區塊鏈涉及如密碼學和P2P等多種技術,區塊鏈的技術門派眾多,新鮮概念層出不窮;而另一方面,區塊鏈技術的發展在全球範圍內還都尚處在早期階段,各種技術方案和應用情境等還需要進一步地探索和完善,導致很多人想運用區塊鏈,都找不到突破口,應該學習哪些知識和技術呢,應該用什麼樣的區塊鏈呢。
就區塊鏈技術而言,Elwin只能算是新司機,但我仍然嘗試從開發工程師的角度,給區塊鏈有興趣的工程師分享一下區塊鏈應用開發入門的經驗。
我們大多數人的使用和開發區塊鏈的目標來說,並不是要真的自己重新建立一套區塊鏈,只是希望基於現有的區塊鏈底層或技術架構去開發自己的應用。因此,對於類似密碼編譯演算法、 P2P技術、共識演算法等我們只需要有個基本瞭解就可以了,暫時不需要深入研究。而我們入門區塊鏈應用開發的首要目標,是尋找一個相對成熟的區塊鏈底層去做我們的應用開發的基礎,其次,這個區塊鏈底層需要配套強大易用的開發介面或開發架構,此外,這個區塊鏈底層如果要考慮以後真正商用,還需要符合一些區塊鏈的技術指標,如擴充性、燃料費用、交易頻率等等。
就這兩點目標,Elwin走遍天涯海角,最終挑選出認為符合要求的幾個區塊鏈底層平台給大家參考:
一、 比特幣
最早的區塊鏈開發便是基於比特幣的區塊鏈網路進行開發了,由於比特幣是全球最廣泛使用和真正意義的去中心化,就區塊鏈應用來說,比特幣就是世上最強大的錨,擁有最大的權威性。因此,圍繞比特幣的各種區塊鏈技術非常多,這裡不一一描述,只針對入門層級開發的介紹。
基於比特幣的區塊鏈網路開發介紹兩種方式,一種相對比較簡單,基於Blockchain.info的API進行開發。Blockchain.info是比特幣的最流行的比特幣錢包和區塊查詢網站,同時也提供的比特幣及其區塊相關API。 Blockchain.info 提供了多種主流語言的API庫,包括了比特幣的錢包、支付、區塊、交易資料、市場資料等多方面的API。
安裝和使用Blockchain.info的API比較簡單,首先你的機器需要有Node環境,在Blockchain.info的申請介面授權碼,安裝Blockchain Wallet API服務程式,就可以開始配置和測試Blockchain Wallet API服務程式了,要進一步開發,可以根據你的開發語言選擇安裝API的用戶端支援庫。
進一步的探索,可以採用Docker容器來快速安裝和配置私人節點的比特幣測試網路(bitcoin-testnet)作為開發實驗環境,這樣可以更深入瞭解、調試和使用比特幣區塊鏈網路。在Bitcoin的wiki網頁上面,提供很多種語言都可以調用Bitcoin的RPC,大家選擇適合自己的語言具體去實驗,當然,Elwin仍然推薦你使用NodeJS。
具體流程是下載比特幣測試網路的Docker鏡像,運行Docker鏡像並啟動比特幣測試網路,初始化和測試區塊鏈資料,當然為了測試少不了要先挖礦儲備一下。然後安裝相關開發語言的RPC支援庫後,就可以調試你的區塊鏈程式了。
二、 以太坊
可以說除了比特幣外,以太坊目前在區塊鏈平台是最吸引眼球的。 以太坊是一個圖靈完備的區塊鏈一站式開發平台,採用多種程式設計語言實現協議,採用Go語言寫的用戶端作為預設用戶端(即與以太坊網路互動的方法, 支援其他多種語言的用戶端)。
基於以太坊平台之上的應用是智能合約,這是以太坊的核心。每個智能合約有一個唯一的以太幣地址,當使用者向合約的地址裡發送一筆交易後(這個時候就要消耗燃料費用,也就是手續約用),該合約就被啟用,然後根據交易中的額外資訊,合約會運行自身的代碼,最後返回一個結果。以太坊社區把基於智能合約的應用稱為去中心化的應用程式(Decentralized App),相對於冷冰冰的智能合約代碼,DApp擁有一個友好的介面和外加一些額外的東西,配合上圖靈完備的語言,可以讓使用者基於合約搭建各種千變萬化的DApp應用,實際上,在以太坊APP展區,已經有大大小小280個的DApp應用在展示(雖然只有一部分應用在真正運行)。
要寫以太坊的智能合約有好幾種語言可選,有類Javascript的Solidity,Python接近的Serpent,還有類Lisp的LLL,目前比較主流的是Solidity,推薦大家使用。當Solidity合約編譯好並且發送到網路上之後,你可以通過以太坊的Mist用戶端對智能合約進行測試和使用,也可以使用以太坊的web3.js JavaScript API來調用它,構建能與之互動的web應用。
由於以太坊的知名度,所以很多社區大牛創造更加便捷的DApp開發架構和工具,包括Truffle、Embark、Meteor、BlockApps.net APIs,使得你可以快速開發你的Dapp。我的另外一篇文章《微軟的那些區塊鏈雲端服務》有提及,Embark和BlockApps.net兩個區塊鏈工具已經給整合到微軟Azure BAAS服務中了。這幾個架構和工具中,Elwin更推薦Embark,使用起來非常簡單。
通過以太坊,你既可以搭建基於屬於自己私鏈,也可以和夥伴一起搭建聯盟鏈,又或者直接將應用部署在以太坊的公用網路中,Elwin要吐槽的是,使用以太坊Gas費用越來越高了,對於互連網的應用,是自己搭建以太區塊鏈,還是使用以太公用網路,真是兩難境地(以太坊宣稱,以太幣Ether價格上升時,那以太坊燃料的價格應該按比例下降,但好像並不是這樣阿)。
幾個主要入門步驟給大家簡單介紹一下,首先你可以安裝以太坊錢包用戶端Ethereum Wallet,體驗一下以太坊的錢包和智能合約,當中可以選擇公用網路或測試網路(如果你沒有或不想花費以太幣)。如果你已經很熟悉這些了,那好,直接進入正題,準備好Geth和Node的環境,同時安裝以太坊Mist用戶端(這個是為測試你的智能合約和Dapp準備),配置和啟動Geth(Geth和eth相關參數文章,請參考官網文檔),通常我會先用Geth搭建自己的私鏈來測試,Geth啟動後,你可以先在Mist用戶端中熟悉智能合約和Solidity語言(記得在Geth console先挖礦,否則沒有以太幣來測試),然後根據官網的幾個例子來試煉你的第一個Dapp。上手後,可以嘗試使用web3.js來調用,或直接安裝Truffle或Embark來開發自己真正的Dapp應用。
三、 IBM HyperLedger
IBM HyperLedger 又叫 fabric,他的目標是打造成一個由全社會來共同維護的一個超級賬本,fabric源於IBM,初衷為了服務於工業生產,IBM將44,000行代碼開源,是了不起的貢獻,讓我們可以有機會如此近的去探究區別於比特幣的區塊鏈的原理。目前就Elwin所知,fabric還未進入真正的商用階段,更多是實驗和探索,不過相對於很多其他區塊鏈,從技術底蘊他又是比較可信和靠譜的。
要基於HyperLedger進行區塊鏈開發比想像中簡單,有兩種途徑,一種是基於超能雲(IBM中國研究院開發的超能雲平台提供了各種雲端服務),他給區塊鏈愛好者、開發人員的區塊鏈開發測試環境,通過超能雲平台,使用者能夠免費、超快速建立基於Hyperledger Fabric的多節點區塊鏈、並在自己的鏈上調試智能合約。Hyperledger Fabric的合約是基於Go語言的,上手比較簡單。
根據Elwin嘗試,似乎超能雲的區塊鏈只適用於科研測試,要真正運營,還是建議自己搭建Fabric的區塊鏈網路。安裝和運行Hyperledge fabric的運行有幾種方式,比較推薦是下載Fabric區塊鏈網路的Docker鏡像,運行Docker鏡像並啟動Fabric區塊鏈網路,但相對於比特幣和以太坊,Fabric網路的架構和安裝相對複雜,除了區塊鏈服務外,還需要另外安裝運行validating peer和Certificate Authority (CA) 服務。搞定後要真正使用,還需要先使用者註冊和登記授權,然後才可以通過CLI 或REST API進行調試和使用。其中裡面智能合約的編寫,跟在超能雲的區塊鏈雲端服務的是一樣的。此外,除了CLI或REST API,IBM還提供了gRPC API和 SDK的方式進行應用的開發。
四、 Lisk
LISK是新一代的區塊鏈平台,允許JavaScript(又是Javascript技術,工程師們注意了)的開發和基於分布的分散的應用程式使用一個便於使用的,功能齊全的生態區塊鏈系統。
Elwin覺得LISK相對於前面說的幾個區塊鏈底層,他的應用優勢不僅僅在於他是第一個完全寫在Javascript裡的去中心化的應用解決方案,還在於他把每個應用加到LISK的單獨側鏈上。用過比特幣和以太坊的朋友都知道,由於比特幣和以太坊只有一條主鏈,所有功能和資料都加入這條主鏈導致區塊快速膨脹,超大的區塊體積,超長的同步時間,這個一個很痛苦的經曆。Lisk的側鏈模式給在處理高交易量下如何解決網路擁堵的問題提供了一種方法,使用者只有用到相關的應用時才需要下載對應的側鏈,大大減小了無效的同步資料,保持了整個Lisk網路的高效運行,而且,Lisk網路的速度隨著時間的推移會繼續加快,越顯示他的特別優勢。
其次,相對以太坊和Hyperledge fabric以智能合約為核心的區塊鏈不同, Lisk區塊鏈建立的目的並不是為了建立智能合約,而是使用Lisk APP SDK架構來開發不同的應用程式和功能。
Lisk APP的主要開發語言是NodeJS,Web開發人員既能夠開發應用程式的後端,也可以開發前端。通過使用Lisk APP SDK包,Web開發人員可以輕鬆建立區塊鏈應用。Lisk APP的開發也比較簡單,跟你之前其他的NodeJS應用的開發是類似的。然而,跟比特幣和以太坊的一樣,Lisk的使用也是要消耗燃料費用的,還好,跟其他區塊鏈底層網路一樣,Lisk 也是有testnet模式的。
如果你希望高效的學習以太坊DApp開發,可以訪問匯智網提供的最熱門線上互動教程: 適合區塊鏈新手的以太坊DApp實戰入門教程 區塊鏈+IPFS+Node.js+MongoDB+Express去中心化以太坊電商應用開發實戰
其他更多內容也可以訪問這個以太坊部落格。