區(qū)塊鏈將代表著未來的發(fā)展方向
區(qū)塊鏈,代表著未來的發(fā)展方向。是的,在文章開頭,我們首先給出這樣的結(jié)論。當然,認定未來將圍繞這一新興技術(shù)而延拓絕不是什么牽強附會。區(qū)塊鏈最初是一種公開且不存在準入限制的技術(shù),但隨著后續(xù)發(fā)展又有新的類型逐步出現(xiàn),而且每種區(qū)塊鏈都有著自己特定的用例集合。公開/無準入?yún)^(qū)塊鏈的特征包括開放、去中心化以及速度緩慢,而私有/準入型區(qū)塊鏈則采取部分或者完全封閉的集中管理方式。
通過今天的文章,我們將共同探討需要學習哪些知識才能立足區(qū)塊鏈技術(shù)開發(fā)應用程序。當我本人(原文作者)剛剛開始學習區(qū)塊鏈時,跟大家一樣,我也覺得腦袋里塞滿了模糊而難解的疑問。區(qū)塊鏈分為哪些不同類型?我應該使用哪種編程語言進行高效編程?區(qū)塊鏈又有哪些可選的開發(fā)平臺?別急,這些問題都將在今天的文章中一一得到解答。
下面,就讓我們從編程語言開始,逐步了解如何開發(fā)出能夠充分運用區(qū)塊鏈技術(shù)優(yōu)勢的應用成果。
區(qū)塊鏈編程類型
· 區(qū)塊鏈架構(gòu)編程
在區(qū)塊鏈發(fā)布之前,開發(fā)者首先需要解決構(gòu)成其架構(gòu)與協(xié)議的各項重要功能,而功能自然必須使用代碼來編寫。舉例來說,在2009年正式發(fā)布之前,比特幣項目的管理規(guī)則與條款是使用C++編寫的。這方面編碼工作通常使用C及Java等語言來完成,其特點就是表達方式更接近于機器的處理習慣。
· 構(gòu)建智能合約,或者去中心化應用(簡稱DApp)
在一般的中心化應用程序當中,后端代碼運行在中央服務(wù)器之上;與此不同,DApp的后端代碼則在去中心化的對等網(wǎng)絡(luò)中運行。與其它應用程序一樣,DApp也能夠使用任意語言及用戶界面進行前端代碼編寫,并直接調(diào)用后端提供的功能。
常見區(qū)塊鏈編程平臺
· Hyperledger
Hyperledger實際上是開源區(qū)塊鏈領(lǐng)域的一個總集類項目,旨在推進相關(guān)技術(shù)發(fā)展,并通過自身引導發(fā)布相關(guān)工具、培訓與活動,從而支持全球區(qū)塊鏈分布式分類賬的協(xié)同開發(fā)工作。該項目的目標在于提供模塊化區(qū)塊鏈技術(shù),其中也包括各類豐富且易于使用的應用程序編程接口(簡稱API)。Hyperledger能夠顯著降低安全風險,并確保只有希望參與交易的各方才能加入到交易過程中來??偠灾琀yperledger能夠提供區(qū)塊鏈架構(gòu)、數(shù)據(jù)隱私保護、信息共享以及不可變性等全部與區(qū)塊鏈密切相關(guān)的功能。
· 以太坊
以太坊是一套開源區(qū)塊鏈平臺,用于開發(fā)可運行在區(qū)塊鏈技術(shù)之上的去中心化應用或者DApp。以太坊區(qū)塊鏈平臺提供強大的腳本或腳本合約支持能力,并將其運行在自身網(wǎng)絡(luò)的各節(jié)點當中。以太坊不僅能夠追蹤交易活動,還可以對其進行編程。目前以太坊提供多種編程語言選項,具體包括C++、Go、Python以及Java等。智能合約則需要使用Solidity構(gòu)建,這是一種面向合約的高級編程語言。
五大常用區(qū)塊鏈編程語言
1. C++
下面讓我們從清單當中最古老、也最受推崇的語言——編程語言界的常青樹C++開始。相信大家都很清楚,C++語言屬于C語言的擴展方案。在C++中,我們可以創(chuàng)建數(shù)據(jù)、函數(shù)與對象包,并在其它程序中輕松對其進行調(diào)用與復用,這將大大縮短編碼的時間周期。
然而,考慮到當前可選擇的高級語言多種多樣,我們?yōu)槭裁催€要使用C++?
簡單來講,這是因為C++具有某些無法替代的特性,并因此獲得了強大的吸引力。考慮到區(qū)塊鏈開發(fā)中的種種挑戰(zhàn),我們可以將理想的區(qū)塊鏈開發(fā)成果視為一種安全堡壘,同時要求其提供高效的資源管理能力。區(qū)塊鏈需要與諸多不受信任的節(jié)點進行交互,同時確保能夠為一切節(jié)點提供快速服務(wù)。更重要的是,服務(wù)的快速性往往直接決定著加密貨幣項目的命運。因此,開發(fā)人員必須面對資源需求爭用問題并將核心功能設(shè)定為最高優(yōu)先級,這就要求大家必須完全控制CPU與內(nèi)存資源的使用——重點來了,C++能夠幫助用戶很好地實現(xiàn)這一目標。
C++的另一大有趣之處,在于其具備move語義。Move語義提供了一種在不同對象之間進行內(nèi)容移動,而非內(nèi)容復制的方法。Move語義的優(yōu)勢在于,我們可以僅在必要時才獲取某些數(shù)據(jù)的副本,這將顯著減少代碼冗余進而提高性能水平。因此,C++所代表的內(nèi)存管理與強大性能表現(xiàn)恰好契合區(qū)塊鏈技術(shù)的實際應用需求。
在區(qū)塊鏈編程方面,我能想到的另一個重要挑戰(zhàn),在于如何將并行化任務(wù)與非并行化任務(wù)整合起來。大多數(shù)語言往往只專注于其中一種,但C++的線程化能力使其能夠同時應對并行與非并行任務(wù)。C++允許多線程設(shè)施實現(xiàn)高效的線程間通信,同時對其中的單線程性能做出優(yōu)化。
C++的優(yōu)勢與短板
C++區(qū)塊鏈用例
C++語言主要用于加密貨幣以及其它一些重要的區(qū)塊鏈項目,包括比特幣、Ripple、Bitcoin cash、Litecoin、Stellar以及Monero。
2. JavaScript
JavaScript是目前最具人氣的軟件開發(fā)語言之一。JavaScript及其庫與框架,包括jQuery、React、Angular和Node等,已經(jīng)成為現(xiàn)代Web開發(fā)的驅(qū)動引擎。與HTML及CSS加以配合,其功能也將得到進一步提升。JavaScript的主要用途在于創(chuàng)建存在大量交互效果的頁面。
事實上,JavaScript本身也具備一種非常適合區(qū)塊鏈操作的重要特性,這就是其非常關(guān)于處理異步操作。隨著區(qū)塊鏈平臺上用戶數(shù)量的激增,同時執(zhí)行的操作量也將快速增長,而JavaScript能夠更輕松地處理一切不同區(qū)塊鏈節(jié)點之間的往來通信。但是,我們必須承認一點,JavaScript在充分運用計算機處理能力方面不如C++高效。
JavaScript的優(yōu)勢與短板
JavaScript區(qū)塊鏈用例
區(qū)塊鏈開發(fā)人員目前在web3.js以及ethereum.js當中使用JavaScript,其能夠幫助我們將應用程序的前端與以太坊網(wǎng)絡(luò)及智能合約連接起來。在區(qū)塊鏈領(lǐng)域,另一大主要JavaScript應用方向為針對node.js的Hyperledger Fabric SDK。這是一套在IT行業(yè)及企業(yè)當中得到廣泛使用的龐大框架。因此,如果您喜歡這樣的編碼方式,那么JavaScript也許會是個很好的選擇。
3. Python
作為一種相對現(xiàn)代的編程語言,Python通常受到新手程序員們的喜愛。究其根本,Python擁有著類似于英語的簡單語法。大家可以在服務(wù)器上利用Python代碼創(chuàng)建出基于Web的應用程序,亦可利用其對接數(shù)據(jù)庫系統(tǒng),甚至處理大數(shù)據(jù)并執(zhí)行復雜的數(shù)學運算。另外,Python最吸引人的地方,在于其能夠使用新行來完成某項命令——相比之下,其它編程語言一般需要使用分號或括號,這無疑會讓代碼結(jié)構(gòu)看起來比較復雜。
無論你的實際使用方向是什么,Python都必然會在這份推薦清單中占據(jù)一席之地。事實上,幾乎每一個區(qū)塊鏈生態(tài)系統(tǒng)當中都存在著一種或者多種利用Python編寫而成的公開工具。Python的人氣也一直在快速提升。
Python的優(yōu)勢與短板
Python區(qū)塊鏈用例
在區(qū)塊鏈領(lǐng)域,Python被用于為Hyperledger平臺編寫智能合約。此外,Python在以太坊等眾多其它項目中也有自己的實現(xiàn)成果(例如pyethereum)。Python亦被NEO用于創(chuàng)建合約。
4. Go
GoLang語言,或者大家習慣稱其為GO,是一種相對現(xiàn)代的通用型語言,由谷歌公司于2007年開發(fā)完成,并在2012年正式公開發(fā)布。Go是一種靜態(tài)類型語言,其語法與C語言有些類似。作為一款以健壯性及多用途為既定目標的語言,Go嘗試將現(xiàn)代語言(例如Python與JavaScript等)的語法及用戶友好性,同C語言的性能與安全優(yōu)勢結(jié)合起來。Go是一種編譯語言,提供豐富的標準庫。當我們在區(qū)塊鏈項目的多個組成部分內(nèi)使用Go語言時,這種特性能夠為我們最大程度提供靈活性優(yōu)勢。
在Go中,我們可以利用Goroutines方法實現(xiàn)對多個程序或者多個程序內(nèi)部分進行異步或并行運行,而這一能力恰好契合區(qū)塊鏈項目所著重強調(diào)的特征。一般來講,Java及其它編程語言需要使用Threads才能實現(xiàn)這一點。
Go的優(yōu)勢與短板
Go區(qū)塊鏈用例
與Golang相關(guān)的區(qū)塊鏈項目非常多,在這里我只列舉幾個人氣較高的條目。首先是Go-Ehtereum,這是使用Golang語言編寫的最重要的項目之一。同樣由Go編寫而成的另一個主力項目是Hyperledger Fabric,其已經(jīng)成為各類企業(yè)巨頭最喜愛的區(qū)塊鏈解決方案之一。再有,Loom Network項目專門針對去中心化在線游戲,這一令人興奮的成果同樣包含利用Go編寫的鏈碼。
5.Solidity
Solidity 是一種由以太坊團隊(Gavin Wood、ChrisTIan Reitwiessner等)開發(fā)的,類似于JavaScript、專用、面向?qū)ο蟮母呒壵Z言。Solidity受到C++、Python以及JavaScript的深刻影響,用于在以太坊平臺以及以太坊虛擬機(簡稱EVM)上創(chuàng)建去中心化應用程序。順帶一提,EVM是指以太坊平臺上編寫智能合約的運行時環(huán)境。Solidity是一種靜態(tài)類型語言,支持繼承、庫以及復雜的用戶定義類型。截至目前,其仍然是以太坊社區(qū)以及區(qū)塊鏈行業(yè)當中適用性最強的去中心化應用程序開發(fā)語言。
要體驗Solidity的代碼示例,大家可以使用Remix IDE。Remix是一套基于網(wǎng)絡(luò)瀏覽器的IDE,其提供集成化編譯器與Solidity運行時環(huán)境,且無需任何服務(wù)器端組件。Remix允許大家編寫Solidity代碼并對智能合約進行部署與運行。
Solidity的優(yōu)勢與短板
Solidity區(qū)塊鏈用例
Solidity語言主要用于開發(fā)以太坊智能合約。目前,我還沒有看到其被任何其它類型的項目所實際使用。但好消息是,以太坊開發(fā)生態(tài)系統(tǒng)本身的體量已經(jīng)非??捎^,而且已經(jīng)成為當前區(qū)塊鏈開發(fā)領(lǐng)域中最重要的組成部分。單憑這一點,Solidity已經(jīng)足以躋身智能合約開發(fā)方面最具人氣的語言選項之一。
總結(jié)
區(qū)塊鏈技術(shù)有望給每一個行業(yè)及市場層面帶來巨大影響。相信在未來的幾個月到幾年之內(nèi),全球去中心化水平將不斷提高,而區(qū)塊鏈技術(shù)也終將成為新的技術(shù)主流。面對這無限的發(fā)展空間,大家還猶豫什么?趕緊學起來!