區塊鏈,代表著未來的發展方向。是的,在文章開頭,我們首先給出這樣的結論。當然,認定未來將圍繞這一新興技術而延拓絕不是什么牽強附會。區塊鏈最初是一種公開且不存在準入限制的技術,但隨著后續發展又有新的類型逐步出現,而且每種區塊鏈都有著自己特定的用例集合。公開/無準入區塊鏈的特征包括開放、去中心化以及速度緩慢,而私有/準入型區塊鏈則采取部分或者完全封閉的集中管理方式。
通過今天的文章,我們將共同探討需要學習哪些知識才能立足區塊鏈技術開發應用程序。當我本人(原文作者)剛剛開始學習區塊鏈時,跟大家一樣,我也覺得腦袋里塞滿了模糊而難解的疑問。區塊鏈分為哪些不同類型?我應該使用哪種編程語言進行高效編程?區塊鏈又有哪些可選的開發平臺?別急,這些問題都將在今天的文章中一一得到解答。
下面,就讓我們從編程語言開始,逐步了解如何開發出能夠充分運用區塊鏈技術優勢的應用成果。
區塊鏈編程類型
區塊鏈架構編程
在區塊鏈發布之前,開發者首先需要解決構成其架構與協議的各項重要功能,而功能自然必須使用代碼來編寫。舉例來說,在2009年正式發布之前,比特幣項目的管理規則與條款是使用C++編寫的。這方面編碼工作通常使用C及JAVA等語言來完成,其特點就是表達方式更接近于機器的處理習慣。
構建智能合約,或者去中心化應用(簡稱DApp)
在一般的中心化應用程序當中,后端代碼運行在中央服務器之上;與此不同,DApp的后端代碼則在去中心化的對等網絡中運行。與其它應用程序一樣,DApp也能夠使用任意語言及用戶界面進行前端代碼編寫,并直接調用后端提供的功能。
常見區塊鏈編程平臺
Hyperledger
Hyperledger實際上是開源區塊鏈領域的一個總集類項目,旨在推進相關技術發展,并通過自身引導發布相關工具、培訓與活動,從而支持全球區塊鏈分布式分類賬的協同開發工作。該項目的目標在于提供模塊化區塊鏈技術,其中也包括各類豐富且易于使用的應用程序編程接口(簡稱API)。Hyperledger能夠顯著降低安全風險,并確保只有希望參與交易的各方才能加入到交易過程中來。總而言之,Hyperledger能夠提供區塊鏈架構、數據隱私保護、信息共享以及不可變性等全部與區塊鏈密切相關的功能。
以太坊
以太坊是一套開源區塊鏈平臺,用于開發可運行在區塊鏈技術之上的去中心化應用或者DApp。以太坊區塊鏈平臺提供強大的腳本或腳本合約支持能力,并將其運行在自身網絡的各節點當中。以太坊不僅能夠追蹤交易活動,還可以對其進行編程。目前以太坊提供多種編程語言選項,具體包括C++、Go、Python以及Java等。智能合約則需要使用Solidity構建,這是一種面向合約的高級編程語言。
五大常用區塊鏈編程語言
1. C++
下面讓我們從清單當中最古老、也最受推崇的語言——編程語言界的常青樹C++開始。相信大家都很清楚,C++語言屬于C語言的擴展方案。在C++中,我們可以創建數據、函數與對象包,并在其它程序中輕松對其進行調用與復用,這將大大縮短編碼的時間周期。
然而,考慮到當前可選擇的高級語言多種多樣,我們為什么還要使用C++?
簡單來講,這是因為C++具有某些無法替代的特性,并因此獲得了強大的吸引力。考慮到區塊鏈開發中的種種挑戰,我們可以將理想的區塊鏈開發成果視為一種安全堡壘,同時要求其提供高效的資源管理能力。區塊鏈需要與諸多不受信任的節點進行交互,同時確保能夠為一切節點提供快速服務。更重要的是,服務的快速性往往直接決定著加密貨幣項目的命運。因此,開發人員必須面對資源需求爭用問題并將核心功能設定為最高優先級,這就要求大家必須完全控制CPU與內存資源的使用——重點來了,C++能夠幫助用戶很好地實現這一目標。
C++的另一大有趣之處,在于其具備move語義。Move語義提供了一種在不同對象之間進行內容移動,而非內容復制的方法。Move語義的優勢在于,我們可以僅在必要時才獲取某些數據的副本,這將顯著減少代碼冗余進而提高性能水平。因此,C++所代表的內存管理與強大性能表現恰好契合區塊鏈技術的實際應用需求。
在區塊鏈編程方面,我能想到的另一個重要挑戰,在于如何將并行化任務與非并行化任務整合起來。大多數語言往往只專注于其中一種,但C++的線程化能力使其能夠同時應對并行與非并行任務。C++允許多線程設施實現高效的線程間通信,同時對其中的單線程性能做出優化。
C++的優勢與短板

C++區塊鏈用例
C++語言主要用于加密貨幣以及其它一些重要的區塊鏈項目,包括比特幣、Ripple、Bitcoin cash、Litecoin、Stellar以及Monero。
2. JavaScript
JavaScript是目前最具人氣的軟件開發語言之一。JavaScript及其庫與框架,包括jQuery、React、Angular和Node等,已經成為現代Web開發的驅動引擎。與html及css加以配合,其功能也將得到進一步提升。JavaScript的主要用途在于創建存在大量交互效果的頁面。
事實上,JavaScript本身也具備一種非常適合區塊鏈操作的重要特性,這就是其非常關于處理異步操作。隨著區塊鏈平臺上用戶數量的激增,同時執行的操作量也將快速增長,而JavaScript能夠更輕松地處理一切不同區塊鏈節點之間的往來通信。但是,我們必須承認一點,JavaScript在充分運用計算機處理能力方面不如C++高效。
JavaScript的優勢與短板

JavaScript區塊鏈用例
區塊鏈開發人員目前在web3.js以及ethereum.js當中使用JavaScript,其能夠幫助我們將應用程序的前端與以太坊網絡及智能合約連接起來。在區塊鏈領域,另一大主要JavaScript應用方向為針對node.js的Hyperledger Fabric SDK。這是一套在IT行業及企業當中得到廣泛使用的龐大框架。因此,如果您喜歡這樣的編碼方式,那么JavaScript也許會是個很好的選擇。
3. Python
作為一種相對現代的編程語言,Python通常受到新手程序員們的喜愛。究其根本,Python擁有著類似于英語的簡單語法。大家可以在服務器上利用Python代碼創建出基于Web的應用程序,亦可利用其對接數據庫系統,甚至處理大數據并執行復雜的數學運算。另外,Python最吸引人的地方,在于其能夠使用新行來完成某項命令——相比之下,其它編程語言一般需要使用分號或括號,這無疑會讓代碼結構看起來比較復雜。
無論您的實際使用方向是什么,Python都必然會在這份推薦清單中占據一席之地。事實上,幾乎每一個區塊鏈生態系統當中都存在著一種或者多種利用Python編寫而成的公開工具。Python的人氣也一直在快速提升。
Python的優勢與短板

Python區塊鏈用例
在區塊鏈領域,Python被用于為Hyperledger平臺編寫智能合約。此外,Python在以太坊等眾多其它項目中也有自己的實現成果(例如pyethereum)。Python亦被NEO用于創建合約。
4. Go
GoLang語言,或者大家習慣稱其為GO,是一種相對現代的通用型語言,由谷歌公司于2007年開發完成,并在2012年正式公開發布。Go是一種靜態類型語言,其語法與C語言有些類似。作為一款以健壯性及多用途為既定目標的語言,Go嘗試將現代語言(例如Python與JavaScript等)的語法及用戶友好性,同C語言的性能與安全優勢結合起來。Go是一種編譯語言,提供豐富的標準庫。當我們在區塊鏈項目的多個組成部分內使用Go語言時,這種特性能夠為我們最大程度提供靈活性優勢。
在Go中,我們可以利用Goroutines方法實現對多個程序或者多個程序內部分進行異步或并行運行,而這一能力恰好契合區塊鏈項目所著重強調的特征。一般來講,Java及其它編程語言需要使用Threads才能實現這一點。
Go的優勢與短板

Go區塊鏈用例
與Golang相關的區塊鏈項目非常多,在這里我只列舉幾個人氣較高的條目。首先是Go-Ehtereum,這是使用Golang語言編寫的最重要的項目之一。同樣由Go編寫而成的另一個主力項目是Hyperledger Fabric,其已經成為各類企業巨頭最喜愛的區塊鏈解決方案之一。再有,Loom.NETwork項目專門針對去中心化在線游戲,這一令人興奮的成果同樣包含利用Go編寫的鏈碼。
5.Solidity
Solidity 是一種由以太坊團隊(Gavin Wood、Christian Reitwiessner等)開發的,類似于JavaScript、專用、面向對象的高級語言。Solidity受到C++、Python以及JavaScript的深刻影響,用于在以太坊平臺以及以太坊虛擬機(簡稱EVM)上創建去中心化應用程序。順帶一提,EVM是指以太坊平臺上編寫智能合約的運行時環境。Solidity是一種靜態類型語言,支持繼承、庫以及復雜的用戶定義類型。截至目前,其仍然是以太坊社區以及區塊鏈行業當中適用性最強的去中心化應用程序開發語言。
要體驗Solidity的代碼示例,大家可以使用Remix IDE。Remix是一套基于網絡瀏覽器的IDE,其提供集成化編譯器與Solidity運行時環境,且無需任何服務器端組件。Remix允許大家編寫Solidity代碼并對智能合約進行部署與運行。
Solidity的優勢與短板

Solidity區塊鏈用例
Solidity語言主要用于開發以太坊智能合約。目前,我還沒有看到其被任何其它類型的項目所實際使用。但好消息是,以太坊開發生態系統本身的體量已經非常可觀,而且已經成為當前區塊鏈開發領域中最重要的組成部分。單憑這一點,Solidity已經足以躋身智能合約開發方面最具人氣的語言選項之一。
總結
區塊鏈技術有望給每一個行業及市場層面帶來巨大影響。相信在未來的幾個月到幾年之內,全球去中心化水平將不斷提高,而區塊鏈技術也終將成為新的技術主流。面對這無限的發展空間,大家還猶豫什么?趕緊學起來!