區(qū)塊鏈最初是一種公共、非許可型的技術(shù),隨著后來(lái)其它類型區(qū)塊鏈的引入,每種區(qū)塊鏈都有了自己特定的適用場(chǎng)景。公共 非許可型的區(qū)塊鏈?zhǔn)情_(kāi)
區(qū)塊鏈最初是一種公共、非許可型的技術(shù),隨著后來(lái)其它類型區(qū)塊鏈的引入,每種區(qū)塊鏈都有了自己特定的適用場(chǎng)景。公共\非許可型的區(qū)塊鏈?zhǔn)情_(kāi)放的、去中心化的,但速度很慢,而私有\(zhòng)許可型的區(qū)塊鏈則是部分或完全封閉和集中的。
在本文中,將討論構(gòu)建基于區(qū)塊鏈技術(shù)的應(yīng)用程序需要學(xué)習(xí)什么內(nèi)容?例如,不同類型的區(qū)塊鏈之間有什么異同?采用哪種編程語(yǔ)言才能進(jìn)行高效的區(qū)塊鏈開(kāi)發(fā)?采用哪個(gè)平臺(tái)進(jìn)行區(qū)塊鏈開(kāi)發(fā)?
區(qū)塊鏈編程的類型
基于區(qū)塊鏈架構(gòu)的編程
在一個(gè)區(qū)塊鏈應(yīng)用發(fā)布之前,其體系結(jié)構(gòu)和所采用的協(xié)議等重大功能都必須穩(wěn)定下來(lái),而這些功能都是需要使用代碼來(lái)實(shí)現(xiàn)的。例如,在 2009 年比特幣發(fā)布之前,就先用 C++ 實(shí)現(xiàn)了比特幣的規(guī)則和條款。
通常,像這樣的區(qū)塊鏈應(yīng)用都會(huì)采用 C 和 Java 等語(yǔ)言來(lái)完成,因?yàn)檫@類語(yǔ)言更接近機(jī)器語(yǔ)言。
構(gòu)建智能合約或去中心化應(yīng)用程序(DApp)
在普通的中心化應(yīng)用程序中,服務(wù)端代碼通常在中心服務(wù)器上運(yùn)行,而去中心化應(yīng)用的服務(wù)端代碼則在去中心的對(duì)等網(wǎng)絡(luò)中運(yùn)行。像其他應(yīng)用程序一樣,去中心化應(yīng)用也可以使用任何語(yǔ)言來(lái)編寫(xiě)其前端代碼,并通過(guò)用戶界面來(lái)調(diào)用其服務(wù)端程序。
當(dāng)前流行的區(qū)塊鏈編程平臺(tái)
Hyperledger(超級(jí)賬本)
Hyperledger 是一款開(kāi)源的區(qū)塊鏈項(xiàng)目,旨在推進(jìn)區(qū)塊鏈技術(shù)的發(fā)展,它提供了相關(guān)的工具、培訓(xùn)和活動(dòng),用以支持基于區(qū)塊鏈的分布式賬本的協(xié)同開(kāi)發(fā)。其目標(biāo)是提供模塊化的區(qū)塊鏈技術(shù),其中包含豐富的、易用的應(yīng)用程序編程接口(API)。
Hyperledger 在一定程度上降低了交易的安全風(fēng)險(xiǎn),確保了只有其想要參與交易,那么他才會(huì)是該交易的一部分。Hyperledger 提供了區(qū)塊鏈架構(gòu)、數(shù)據(jù)隱私、信息共享和數(shù)據(jù)不變性的所有功能。
Ethereum(以太坊)
Ethereum 是一個(gè)開(kāi)源的區(qū)塊鏈平臺(tái),用于開(kāi)發(fā)基于區(qū)塊鏈技術(shù)的去中心化應(yīng)用程序。Ethereum 區(qū)塊鏈平臺(tái)有助于區(qū)塊鏈腳本和智能合約的編寫(xiě),通過(guò)網(wǎng)絡(luò)中的節(jié)點(diǎn)運(yùn)行,不僅可以用來(lái)追蹤每一次交易,還可以對(duì)它們進(jìn)行編程。
Ethereum 可選擇多種編程語(yǔ)言來(lái)進(jìn)行編程,例如 C++、Go、Python、Java 等,該平臺(tái)下智能合約是使用 Solidity 構(gòu)建的,Solidity 是一種面向合約的高級(jí)編程語(yǔ)言。
區(qū)塊鏈編程語(yǔ)言 Top 5
C++
讓我們從最具歷史、最受推崇的語(yǔ)言——C++ 開(kāi)始,幾乎所有人都知道 C++ 是 C 語(yǔ)言的擴(kuò)展。在 C++ 中,若創(chuàng)建了一個(gè)變量、函數(shù)或?qū)ο螅涂梢栽谄渌绦蛑休p松的調(diào)用并復(fù)用,可以大大減少編程時(shí)間。
但是現(xiàn)在已經(jīng)有很多高級(jí)語(yǔ)言了,為什么還要用 C++ 呢?
因?yàn)?C++ 具有的某些特性仍然很吸引人,考慮到區(qū)塊鏈開(kāi)發(fā)要面臨的諸多挑戰(zhàn),其應(yīng)用更應(yīng)該像是一個(gè)堡壘,同時(shí)還要兼?zhèn)涓咝У馁Y源管理特性,區(qū)塊鏈應(yīng)用不僅要與許多不被信任的節(jié)點(diǎn)進(jìn)行交互,同時(shí)還要為每個(gè)節(jié)點(diǎn)甚至是所有節(jié)點(diǎn)提供快速服務(wù)。尤其是對(duì)加密貨幣來(lái)說(shuō),這種快速服務(wù)更是至關(guān)重要。要滿足所有這些需求并能在最高優(yōu)先級(jí)執(zhí)行,你需要能完全控制 CPU 和內(nèi)存的使用,而 C++ 剛好就能夠滿足用戶這方面的需求。
C++ 另一個(gè)有趣的地方是移動(dòng)語(yǔ)義(move semantic)。移動(dòng)語(yǔ)義提供了一種在對(duì)象之間移動(dòng)內(nèi)容而不是復(fù)制內(nèi)容的方法。移動(dòng)語(yǔ)義的優(yōu)點(diǎn)是:只有在需要時(shí)才會(huì)獲得某些數(shù)據(jù)的副本,通過(guò)減少代碼冗余來(lái)提高性能。而高效的內(nèi)存管理和高性能都是區(qū)塊鏈開(kāi)發(fā)所必須的特性。
除此之外,區(qū)塊鏈編程的挑戰(zhàn)還包括并行任務(wù)和非并行任務(wù)的集成。
可以想到的另一個(gè)關(guān)于區(qū)塊鏈編程的挑戰(zhàn)是并行任務(wù)和非并行的任務(wù)的集成。大多數(shù)編程語(yǔ)言只擅長(zhǎng)其中一種,但是,C++ 語(yǔ)言的線程能力使其可以同時(shí)處理并行和非并行任務(wù)。C++ 語(yǔ)言允許多線程任務(wù)進(jìn)行有效的線程間通信,并優(yōu)化了單線程處理的性能。
C++ 的優(yōu)點(diǎn)和缺點(diǎn)
基于 C++ 語(yǔ)言的區(qū)塊鏈開(kāi)發(fā)案例
C++ 主要用于加密貨幣和重要的區(qū)塊鏈項(xiàng)目,如比特幣,Ripple,Litecoin,Stellar 和 Monero 等。
JavaScript
JavaScript 是目前最流行的軟件開(kāi)發(fā)語(yǔ)言之一。JavaScript 語(yǔ)言及其相關(guān)的庫(kù)和框架,例如:jQuery、React、Angular 和 Node.js,是推動(dòng)現(xiàn)代 Web 開(kāi)發(fā)技術(shù)快速發(fā)展的引擎。JavaScript 通常與 HTML 和 CSS 一起,用以增強(qiáng) Web 在行為交互方面的功能,當(dāng)前 JavaScript 主要用于創(chuàng)建交互性強(qiáng)的網(wǎng)頁(yè)。
JavaScript 非常擅長(zhǎng)處理異步操作,這一主要特性使得它非常適用于區(qū)塊鏈開(kāi)發(fā)。隨著區(qū)塊鏈上的用戶數(shù)量的增加,所有的操作都需要同時(shí)執(zhí)行,JavaScript 可以更輕松地處理不同區(qū)塊鏈節(jié)點(diǎn)之間的通信。但同時(shí)我們也不能否認(rèn),在最大化的密集計(jì)算處理能力方面 JavaScript 不如 C++ 高效。
JavaScript 的優(yōu)點(diǎn)和缺點(diǎn)
基于 JavaScript 語(yǔ)言的區(qū)塊鏈開(kāi)發(fā)案例
區(qū)塊鏈開(kāi)發(fā)人員可以在 web3.js 和 ethereum.js 中使用 JavaScript,用來(lái)構(gòu)建應(yīng)用程序的前端,用以連接以太坊網(wǎng)絡(luò)和智能合約。 另外在區(qū)塊鏈中經(jīng)常采用 JavaScript 語(yǔ)言的是基于 node.js 平臺(tái)的 Hyperledger Fabric SDK,這是一個(gè)在 IT 行業(yè)和企業(yè)中經(jīng)常使用的大型框架。
Python
Python 是一種相對(duì)現(xiàn)代的編程語(yǔ)言,通常是新程序員的最愛(ài),因?yàn)樗Z(yǔ)法簡(jiǎn)單,可以在服務(wù)器上創(chuàng)建基于 Web 的應(yīng)用程序,還可以用來(lái)連接數(shù)據(jù)庫(kù)系統(tǒng),也可以處理大數(shù)據(jù)并執(zhí)行復(fù)雜的數(shù)學(xué)運(yùn)算。
Python 最吸引人的地方是它通過(guò)“另起一行”來(lái)作為命令的結(jié)束標(biāo)識(shí),而不像其他編程語(yǔ)言使用分號(hào)或括號(hào)。
無(wú)論你采用哪一種區(qū)塊鏈平臺(tái)進(jìn)行開(kāi)發(fā),都不能忽略 Python 的存在,因?yàn)閹缀趺總€(gè)區(qū)塊鏈的生態(tài)系統(tǒng)中都有一個(gè)或多個(gè)用 Python 編寫(xiě)的公共工具。Python 已經(jīng)成為區(qū)塊鏈領(lǐng)域中的流行編程語(yǔ)言。
Python 的優(yōu)點(diǎn)和缺點(diǎn)
基于 Python 語(yǔ)言的區(qū)塊鏈開(kāi)發(fā)案例
在區(qū)塊鏈領(lǐng)域,Python 用于為 Hyperledger 編寫(xiě)智能合約,除此之外還有許多其他的項(xiàng)目也采用了 Python,如 Ethereum(pyethereum)也有自己的 Python 實(shí)現(xiàn)。同時(shí) Python 也被用來(lái)為 NEO 創(chuàng)建智能合約,這是一個(gè)基于社區(qū)的非營(yíng)利性區(qū)塊鏈項(xiàng)目。
Go
GoLang,俗稱 Go,是谷歌公司于 2007 年開(kāi)發(fā)的一種相對(duì)現(xiàn)代的領(lǐng)域通用語(yǔ)言,并于 2012 年面向公眾開(kāi)放。它是一種靜態(tài)類型的語(yǔ)言,語(yǔ)法有點(diǎn)類似于 C 語(yǔ)言。作為一種健壯的、多用途的語(yǔ)言,Go 試圖將現(xiàn)代高級(jí)語(yǔ)言 (如 Python 和 JavaScript) 的語(yǔ)法和用戶友好性與 C 語(yǔ)言的性能和安全優(yōu)勢(shì)結(jié)合起來(lái)。Go 是一種編譯語(yǔ)言,提供了豐富的標(biāo)準(zhǔn)庫(kù)。當(dāng)你在區(qū)塊鏈項(xiàng)目的多個(gè)組件中使用 Go 語(yǔ)言時(shí),該特性將為你帶來(lái)最大的靈活性。
在 Go 中,名為 Goroutines 的方法提供了異步或并行運(yùn)行多個(gè)程序的能力,這也是區(qū)塊鏈項(xiàng)目所需要的一個(gè)重要的特性。而在 Java 和其他語(yǔ)言中往往會(huì)使用線程來(lái)實(shí)現(xiàn)該特性。
Go 的優(yōu)點(diǎn)和缺點(diǎn)
基于 Go 語(yǔ)言的區(qū)塊鏈開(kāi)發(fā)案例
區(qū)塊鏈領(lǐng)域有很多與 Go 語(yǔ)言相關(guān)的項(xiàng)目,其中包含一些很受歡迎的項(xiàng)目,例如 Go-Ethereum 是 Ethereum 的 Go 語(yǔ)言實(shí)現(xiàn),也是基于 Go 語(yǔ)言的最重要的項(xiàng)目之一。用 Go 語(yǔ)言實(shí)現(xiàn)的另一個(gè)重要項(xiàng)目是 Hyperledger Fabric,它是大公司中最受歡迎的區(qū)塊鏈解決方案之一。另一個(gè)是去中心化在線游戲項(xiàng)目 Loom Network,它采用 Go 語(yǔ)言實(shí)現(xiàn)了其鏈碼。
Solidity
Solidity 是由 Ethereum 團(tuán)隊(duì)(Gavin Wood,Christian Reitwiessner 等)開(kāi)發(fā)的一款類似于 JavaScript 、針對(duì)于特定領(lǐng)域、面向?qū)ο蟮母呒?jí)語(yǔ)言。Solidity 受 C++,Python 和 JavaScript 的影響,為了在 Ethereum 平臺(tái)的以太坊虛擬機(jī)(EVM)上創(chuàng)建去中心化應(yīng)用程序而設(shè)計(jì)的。EVM 是在 Ethereum 平臺(tái)上編寫(xiě)智能合約的運(yùn)行時(shí)環(huán)境。
Solidity 是一種靜態(tài)類型語(yǔ)言,支持繼承、庫(kù)和復(fù)雜的用戶自定義類型。到目前為止,它是 Ethereum 社區(qū)和區(qū)塊鏈行業(yè)中最適合的領(lǐng)域特定語(yǔ)言(DSL)。
若要嘗試運(yùn)行 Solidity 的代碼示例,可以使用 Remix IDE,這是一款基于 Web 瀏覽器的 IDE 工具,同時(shí)集成 Solidity 的編譯器和運(yùn)行時(shí)環(huán)境,且沒(méi)有服務(wù)器端組件。你可以在該 IDE 中編寫(xiě) Solidity 代碼并部署和運(yùn)行智能合約。
Solidity 的優(yōu)點(diǎn)和缺點(diǎn)
基于 Solidity 語(yǔ)言的區(qū)塊鏈開(kāi)發(fā)案例
Solidity 語(yǔ)言主要用于開(kāi)發(fā)以太坊智能合約,目前還沒(méi)有看到其他項(xiàng)目使用 Solidity,但以太坊生態(tài)系統(tǒng)是巨大的,并且也是目前區(qū)塊鏈開(kāi)發(fā)中最重要的一部分。
Solidity 是用于智能合約開(kāi)發(fā)的最流行的語(yǔ)言之一。
總結(jié)
區(qū)塊鏈技術(shù)將對(duì)每個(gè)領(lǐng)域和行業(yè)產(chǎn)生巨大的影響。在未來(lái)的幾個(gè)月或者幾年中,隨著世界變得越來(lái)越去中心化,區(qū)塊鏈也將被作為主流技術(shù)使用,它有著無(wú)限的未來(lái)。