鏈客,專爲開發者而生,有問必答!前端
此文章來自鏈客區塊鏈技術問答社區,未經容許拒絕轉載。node
區塊鏈,表明着將來的發展方向。是的,在文章開頭,咱們首先給出這樣的結論。固然,認定將來將圍繞這一新興技術而延拓毫不是什麼牽強附會。區塊鏈最初是一種公開且不存在准入限制的技術,但隨着後續發展又有新的類型逐步出現,並且每種區塊鏈都有着本身特定的用例集合。公開/無准入區塊鏈的特徵包括開放、去中心化以及速度緩慢,而私有/准入型區塊鏈則採起部分或者徹底封閉的集中管理方式。 程序員
經過今天的文章,咱們將共同探討須要學習哪些知識才能立足區塊鏈技術開發應用程序。當我本人(原文做者)剛剛開始學習區塊鏈時,跟你們同樣,我也以爲腦殼裏塞滿了模糊而難解的疑問。區塊鏈分爲哪些不一樣類型?我應該使用哪一種編程語言進行高效編程?區塊鏈又有哪些可選的開發平臺?別急,這些問題都將在今天的文章中一一獲得解答。 web
下面,就讓咱們從編程語言開始,逐步瞭解如何開發出可以充分運用區塊鏈技術優點的應用成果。數據庫
區塊鏈編程類型 編程
· 區塊鏈架構編程 後端
在區塊鏈發佈以前,開發者首先須要解決構成其架構與協議的各項重要功能,而功能天然必須使用代碼來編寫。舉例來講,在2009年正式發佈以前,比特幣項目的管理規則與條款是使用C++編寫的。這方面編碼工做一般使用C及Java等語言來完成,其特色就是表達方式更接近於機器的處理習慣。 瀏覽器
· 構建智能合約,或者去中心化應用(簡稱DApp) 安全
在通常的中心化應用程序當中,後端代碼運行在中央服務器之上;與此不一樣,DApp的後端代碼則在去中心化的對等網絡中運行。與其它應用程序同樣,DApp也可以使用任意語言及用戶界面進行前端代碼編寫,並直接調用後端提供的功能。服務器
常見區塊鏈編程平臺
· Hyperledger
Hyperledger其實是開源區塊鏈領域的一個總集類項目,旨在推動相關技術發展,並經過自身引導發佈相關工具、培訓與活動,從而支持全球區塊鏈分佈式分類帳的協同開發工做。該項目的目標在於提供模塊化區塊鏈技術,其中也包括各種豐富且易於使用的應用程序編程接口(簡稱API)。Hyperledger可以顯著下降安全風險,並確保只有但願參與交易的各方纔能加入到交易過程當中來。總而言之,Hyperledger可以提供區塊鏈架構、數據隱私保護、信息共享以及不可變性等所有與區塊鏈密切相關的功能。
· 以太坊
以太坊是一套開源區塊鏈平臺,用於開發可運行在區塊鏈技術之上的去中心化應用或者DApp。以太坊區塊鏈平臺提供強大的腳本或腳本合約支持能力,並將其運行在自身網絡的各節點當中。以太坊不只可以追蹤交易活動,還能夠對其進行編程。目前以太坊提供多種編程語言選項,具體包括C++、Go、Python以及Java等。智能合約則須要使用Solidity構建,這是一種面向合約的高級編程語言。
五大經常使用區塊鏈編程語言
下面讓咱們從清單當中最古老、也最受推崇的語言——編程語言界的常青樹C++開始。相信你們都很清楚,C++語言屬於C語言的擴展方案。在C++中,咱們能夠建立數據、函數與對象包,並在其它程序中輕鬆對其進行調用與複用,這將大大縮短編碼的時間週期。
然而,考慮到當前可選擇的高級語言多種多樣,咱們爲何還要使用C++?
簡單來說,這是由於C++具備某些沒法替代的特性,並所以得到了強大的吸引力。考慮到區塊鏈開發中的種種挑戰,咱們能夠將理想的區塊鏈開發成果視爲一種安全堡壘,同時要求其提供高效的資源管理能力。區塊鏈須要與諸多不受信任的節點進行交互,同時確保可以爲一切節點提供快速服務。更重要的是,服務的快速性每每直接決定着加密貨幣項目的命運。所以,開發人員必須面對資源需求爭用問題並將核心功能設定爲最高優先級,這就要求你們必須徹底控制CPU與內存資源的使用——重點來了,C++可以幫助用戶很好地實現這一目標。
C++的另外一大有趣之處,在於其具有move語義。Move語義提供了一種在不一樣對象之間進行內容移動,而非內容複製的方法。Move語義的優點在於,咱們能夠僅在必要時才獲取某些數據的副本,這將顯著減小代碼冗餘進而提升性能水平。所以,C++所表明的內存管理與強大性能表現剛好契合區塊鏈技術的實際應用需求。
在區塊鏈編程方面,我能想到的另外一個重要挑戰,在於如何將並行化任務與非並行化任務整合起來。大多數語言每每只專一於其中一種,但C++的線程化能力使其可以同時應對並行與非並行任務。C++容許多線程設施實現高效的線程間通訊,同時對其中的單線程性能作出優化。
C++的優點與短板
C++區塊鏈用例
C++語言主要用於加密貨幣以及其它一些重要的區塊鏈項目,包括比特幣、Ripple、Bitcoin cash、Litecoin、Stellar以及Monero。
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也許會是個很好的選擇。
做爲一種相對現代的編程語言,Python一般受到新手程序員們的喜好。究其根本,Python擁有着相似於英語的簡單語法。你們能夠在服務器上利用Python代碼建立出基於Web的應用程序,亦可利用其對接數據庫系統,甚至處理大數據並執行復雜的數學運算。另外,Python最吸引人的地方,在於其可以使用新行來完成某項命令——相比之下,其它編程語言通常須要使用分號或括號,這無疑會讓代碼結構看起來比較複雜。
不管你的實際使用方向是什麼,Python都必然會在這份推薦清單中佔據一席之地。事實上,幾乎每個區塊鏈生態系統當中都存在着一種或者多種利用Python編寫而成的公開工具。Python的人氣也一直在快速提高。
Python的優點與短板
Python區塊鏈用例
在區塊鏈領域,Python被用於爲Hyperledger平臺編寫智能合約。此外,Python在以太坊等衆多其它項目中也有本身的實現成果(例如pyethereum)。Python亦被NEO用於建立合約。
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已經足以躋身智能合約開發方面最具人氣的語言選項之一。
總結
區塊鏈技術有望給每個行業及市場層面帶來巨大影響。相信在將來的幾個月到幾年以內,全球去中心化水平將不斷提升,而區塊鏈技術也終將成爲新的技術主流。面對這無限的發展空間,你們還猶豫什麼?趕忙學起來!