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