文章閱讀頁通欄

區塊鏈開發技術綜述

來源: CSDN 作者:
作者:孟巖,IBM大中華區高級經理,曾負責IBM智慧地球、智慧城市、認知計算等重大技術戰略在中國的推廣和落地。一年前開始關注區塊鏈技術及其行業應......
作者:孟巖,IBM大中華區高級經理,曾負責IBM智慧地球、智慧城市、認知計算等重大技術戰略在中國的推廣和落地。一年前開始關注區塊鏈技術及其行業應用前景,對比特幣、以太坊、超級總賬和BigchainDB四個主要區塊鏈技術流派都進行過考察和研究,形成了在中國應用區塊鏈技術的觀點和思路。 
如果你關注區塊鏈技術長達幾個月,可能也會跟我一樣,對沒完沒了的原理介紹、前景描繪、行業探討和鏈圈新聞產生了審美疲勞。沒錯,區塊鏈必須與行業緊密結合,它也有顛覆人類協作方式之洪荒巨力,但是說到底它還是一個技術活,是要寫代碼的,在咖啡廳里整天坐而論道是造不出金鏈子來的。技術人員的邏輯簡單直接,這個事情有沒有前(錢)途?有,那怎么干?

本文試圖對區塊鏈有關技術流派和主流平臺進行一個概覽,作為學習區塊鏈技術體系的導覽,意在拋磚引玉,促進區塊鏈開發社區的討論與共識。

區塊鏈技術的流派

未戰先謀局,你想投入區塊鏈開發這個領域,至少先要搞清楚現在有哪些玩家,各自的主張和實力如何。

劃分區塊鏈技術流派并無一定之規,據我所見,或可有以下四種方式:

第一是按照節點準入規則,劃分為公有鏈、私有鏈和聯盟鏈。公有鏈的代表自然是比特幣和以太坊,私有鏈則以R3 Corda聲名最盛,聯盟鏈的代表作品是Hyperledger名下的Fabric。公有鏈注重匿名性與去中心化,而私有鏈及聯盟鏈注重高效率,而且還往往設置了準入門檻。公有鏈、私有鏈與聯盟鏈之間的這些不同都在技術中有所體現,比如私有鏈和聯盟鏈假設節點數目不大,可以采用PBFT算法來形成共識。而公有鏈假設有大量且不斷動態變化的節點網絡,用PBFT效率太低,只能采用類似抽彩票的算法來確定意見領袖。這就意味著,私有鏈與聯盟鏈很難變成公有鏈,而用公有鏈來作聯盟鏈或私有鏈雖然容易,卻也并非即插即用。此種差異,學者不可不察。

第二是按照共享目標,劃分為共享賬本和共享狀態機兩派。比特幣是典型的共享賬本,而Chain和BigchainDB也應屬此類,這幾個區塊鏈系統在各個節點之間共享一本總賬,因此對接金融應用比較方便。另一大類區塊鏈系統中,各個節點所共享的是可完成圖靈完備計算的狀態機,如以太坊、Fabric,它們都通過執行智能合約而改變共享狀態機狀態,進而達成種種復雜功能。

第三是按照梅蘭妮 · 斯旺所描述的代際演進,將區塊鏈系統分為1.0、2.0和3.0三代。其中1.0支撐去中心化交易和支付系統,2.0通過智能合約支撐行業應用,3.0支撐去中心化的社會體系。比特幣和Chain應屬于區塊鏈1.0系統,而以太坊和Fabric是區塊鏈2.0系統,目前尚無成功的區塊鏈3.0系統出現,不成功的嘗試倒是有那么一個,就是著名的The DAO。

第四是按照核心數據結構,分為區塊鏈和分布式總賬兩派。區塊鏈這一派在系統中真的實現了一個區塊的鏈作為核心數據結構,而分布式總賬這一派,只是吸取了區塊鏈的精神,并沒有真用一條區塊鏈作為核心數據結構,或者雖然暫時用了,但聲明說吾項莊舞區塊鏈,意在分布式總賬耳,若假以時日,因緣際會,未嘗不可取而代之也。

主流區塊鏈技術平臺

了解流派劃分,仍是只能用來指點江山,吹牛論道,要動手,總要有個切入點。區塊鏈貨幣據說已經有上千個了,但值得關注的技術平臺大概只有數十個,而如果要進入區塊鏈開發領域,打下一個好基礎,練出一身好功夫,撈到幾個好offer,則值得深入研究學習的平臺,屈指可數。

首先當然是比特幣。比特幣作為區塊鏈的第一個也是目前為止最成功、最重要的樣板工程,已經上線運行了八年多,本身沒有發生任何嚴重的安全和運維事故,其穩定與強悍堪稱當代軟件系統典范。比特幣Bitcoin Core是一個代碼質量高、文檔良好的開源軟件,從學習區塊鏈原理、掌握核心技術的角度來說,Bitcoin Core是最佳切入點,能夠學到原汁原味的區塊鏈技術。當然,Bitcoin Core是用C++寫的,而且用了一些C++11和Boost庫的機制,對學習者的C++水平提出了較高的要求。

學習比特幣平臺開發還有一個優勢,就是可以對接繁榮的比特幣技術社區。目前圍繞比特幣進行改進和提升的人很多,人多力量就大,諸如隔離驗證、閃電網絡、側鏈等比較新的想法和技術,都率先在比特幣社區里落地。比如側鏈技術的主要領導者Blockstream是由密碼學貨幣元老Adam Back領銜的,而Blockstream是Bitcoin Core最大的貢獻者之一,所以一些有關側鏈的技術在比特幣社區里討論最充分。

但比特幣作為一個典型的區塊鏈1.0系統,是不是支撐其他類型區塊鏈應用的最佳技術平臺,存在很大的爭議。另外,也不是所有人都有能力和必要精通區塊鏈底層技術。所以對那些急于沖到區塊鏈領域里做(quān)事(qián)的人來說,可能更直截了當的學習目標是以太坊和Hyperledger Fabric。

在以太坊上面用Solidity進行的智能合約開發是切入區塊鏈開發最簡單的方式,沒有之一。以太坊的理想非常宏大,由于配備了強大的圖靈完備的智能合約虛擬機,因此可以成為一切區塊鏈項目的母平臺,是馱住整個區塊鏈世界的大烏龜。在以太坊上開發一個類似比特幣的加密貨幣,是一個不折不扣的小目標。一般有經驗的開發者在文檔指導下,半天到一天即可入門。問題在于,入門以后又如何?靠寫Solidity是否就可以包打天下?這是大大存疑的。我們也可以反過來說,如果以太坊+Solidity是區塊鏈的終極解決方案,那么怎么還會出現那么多區塊鏈技術門派呢?特別是,以太坊似乎并沒有給現實世界中巨型的中心化組織們留下一條活路,這種徹底不妥協的革命態度有可能也成為以太坊推廣的障礙。

當前以太坊項目的開發進展并不順利。一個比較突出的問題是項目過多,力量分散,導致項目質量參差不齊。但盡管如此,跟其他區塊鏈2.0平臺相比,以太坊提供的開發環境是最簡單最完善的。初學區塊鏈的人絕對有必要學習以太坊,從而對區塊鏈和智能合約建立起一個最“正宗”的認識。

主流區塊鏈技術平臺的第三支就是Fabric,它是Hyperledger的第一個也是最知名的孵化項目。 Fabric最早來自IBM的Open Blockchain項目,到2015年11月,IBM將當時已經開發完成的44,000行Go語言代碼交給Linux基金會,并入Hyperledger項目之中。在2016年3月一次黑客馬拉松中,Blockstream和DAH兩家公司將各自的代碼并入Open Blockchain,隨后改名為Fabric。到目前為止,Fabric與Intel提供的Sawtooth Lake并列為Hyperledger的一級孵化項目,但前者得到的關注遠超后者。

從技術角度來說,Fabric思路不錯,重點是滿足企業商用的需求,比如解決交易量問題。眾所周知,比特幣最大的短板是它每秒鐘7個交易的上限,完全無法滿足現實需要。而Fabric目標是實現每秒鐘10萬交易,這個量接近剛剛過去的雙十一交易量瞬時峰值,完全可以滿足正常條件下的行業級應用。Fabric用Go語言開發,也提供多種語言的API。特別值得一提的是,Fabric比較充分地運用了容器技術,比如其智能合約就運行在容器當中。這也是Go語言帶給Fabric的一項福利,因為Go語言靜態編譯部署的特征很適合開發容器中的程序。

Fabric還有一些特點,比如其membership服務可以設置節點準入審查,這是典型的聯盟鏈特征。再比如其共識算法是可定制的。Fabric自帶PBFT共識算法實現,但是PBFT的算法效率是O(n2),其中n是節點數量。因此PBFT用在節點數量受限的聯盟鏈里是沒有問題的,但用在公有鏈里效率過低。

Fabric的短板是體系較為復雜,雖有文檔,但缺少經驗的開發者學習起來障礙比較大。然而由于其定位清楚,迎合了不少企業的心態,所以已經有多家機構在基于Fabric秘密研發行業內的聯盟鏈項目。

小眾門派

上述區塊鏈開發的三大主流平臺,從活躍度、受關注和參與人數來說,遠遠超過其他平臺。但俗話說莫欺少年窮,一些眼下還默默無聞的平臺也不容忽視。

Hyperledger的另一個一級孵化項目Sawtooth Lake是Intel開發的區塊鏈平臺,是一個很少被關注的項目,大概是因為被同在Hyperledger旗下的Fabric給掩蓋了,再加上名字拗口,所以很少看到有人討論它,項目活躍度也不高。但其實Sawtooth Lake是一個挺有想法的區塊鏈項目,設計十分精心。它以數字金融資產管理為目標,整體架構清晰,模塊化程度高,因此可定制能力也強。概念上獨創了“交易族(transaction family)”概念,而且還支持PoET和Quorum兩種共識機制。當節點數量很多(公有鏈環境)時,使用第6代Intel Core CPU所提供的SGX擴展功能提供一種稱為時間流逝證明(PoET)的機制來形成共識,這種機制與比特幣所采用的PoW同屬“抽彩票”式的共識算法,但杜絕了通過ASIC專用硬件“作弊”的可能性,排除了比特幣出現的算力過于集中的隱患,可靠性由Intel CPU硬件來保障,是公有鏈系統里很有價值的一個共識機制。另一方面,當節點數量少且受控時,Sawtooth Lake可以采用Quorum共識機制,這是由Ripple提出并驗證的共識機制,非常適合于聯盟鏈場景,這樣Sawtooth Lake就搖身一變成為很好用的聯盟鏈了。

Sawtooth Lake采用Python開發,并提供了Java SDK。由于這兩種語言的流行度,實際上它應該有很大的潛在開發者人群。事實上,R3 CEV曾經測試過Sawtooth Lake并進行了成功的證券交易實驗。當前它主要的問題是受關注度不足,不知Intel是否有足夠的耐心和毅力堅持到底。如果Intel戰略更明確一些,支持力度更大一些,我建議大家可以對它投以更多的關注。

R3 Corda是一個備受關注的分布式賬本項目。 R3是由數十家銀行和金融機構支持的區塊鏈企業,融資上億美元,號稱匯集了一票高手,潛心研究符合金融行業需求的分布式賬本系統。Corda是R3分布式賬本系統中的核心,在千呼萬喚之后,于11月30日正式開源。

Corda采用JetBrain原創的小眾語言Kotlin開發,對Java世界敞開大門,這是令人點贊的。此外,Corda更重要的特色是其與現有世界里大銀行、大型中心機構的全面妥協、全面合作的姿態,這與以太坊革命無罪、造反有理的形象形成鮮明對比。Corda在設計中有多項獨特考慮,就是為了對接現有的業務規則。比如在其他幾乎所有區塊鏈平臺里,每一個交易對于各節點來說都是可見的,可見才能驗證,能驗證才談得上共識,所以交易的全網可見性是順理成章的。但是現實世界里金融機構之間的交易,只有交易相關方才能看到交易詳情,工行與建行的一筆交易,絕無必要讓招行看到。為了對接這個現實,Corda設計了與眾不同的機制,犧牲了交易驗證的全局可見性,確保只有交易相關方才能看到和驗證交易本身。可是另一方面,銀行業務是被重度監管的業務,不能因為你用了區塊鏈系統,就把洋洋灑灑的巴塞爾協議晾在一邊,監管機構的職能如何體現?這是其他區塊鏈系統里考慮不多的。而Corda設計了獨特的Notary和Oracle節點,為監管體系進入留下了空間。仔細品味,這些都是給現實世界當中的大機構預留的美差。這些設計上的考慮,無疑大大增強了Corda被現有大型金融機構采納的機會。不過這一切看上去很美好,但目前Corda的實現基本上是個花架子,設想的種種,不少處于TODO狀態。

另外兩個值得點名的區塊鏈門派分別是Chain和BigchainDB。前者跟Visa有合作,后者是一個基于RethinkDB開發的分布式賬本,兩者各有各的思路和特色,也拿到了為數可觀的投資,不排除未來能有大的發展。限于篇幅,在這里不展開介紹了。

區塊鏈開發所需具備的技術基礎

可以預見,未來從事區塊鏈開發的主要有三類開發者,一類是開發基于區塊鏈的Web或移動App,這種開發者所需要的技能與今天的Web和移動開發者并無二致,這里就不贅述了。

第二類開發者是開發智能合約的。這類開發者使用類似Solidity這樣的智能合約語言,或者直接用Go、Java、Python等語言開發。開發智能合約所要求的語言和算法技術水平不高,什么并發、多線程之類的東西一般用不到,普通開發者均可勝任。但是智能合約的難點在于業務與安全。本質上智能合約就是以代碼寫成的商業合同,必須對于業務有非常清晰的認識,對于安全有著深刻的理解,才能夠寫出正確的智能合約。因此,我認為未來智能合約的開發者,可能反而是具體應用領域的行業專家出身居多,因為讓他們掌握Python語言,遠比讓程序員去理解進出口貿易規則或者商業票據業務要容易得多。

第三類開發者,就是區塊鏈核心應用系統和核心平臺的開發者。這部分人當然必須是技術高手,按現在通俗的說法,得是后端專家。從語言上講,C++、Java、Python、Go、JavaScript都有可能要觸及。從基礎知識來說,要求對密碼學、分布式系統、網絡編程、系統架構和部署都有相當程度的理解和實踐經驗。這種開發者顯然將是區塊鏈技術浪潮當中的弄潮兒,也將是最大的受益者之一。

特別要點一下密碼學。密碼學是大多數開發人員的短板,但若要在區塊鏈核心技術領域搞出能夠碾壓競品的創新點,密碼學是最有可能出成果的地方。不用說搞出什么密碼學突破,就是將密碼學現有成果充分運用在區塊鏈里,都可能會搞出一些逆天的創新來。比如用零知識證明協議(zero-knowledge proof)構造高度匿名化的區塊鏈系統,比如用私有計算外包(private computing outsourcing)技術讓別的節點既能夠驗證交易,又對交易本身的內容一無所知,這都是能夠激發大量商業模式創新的技術,等待密碼學黑客們發掘和實現。因此,我相信密碼學成為顯學的時代即將到來。

區塊鏈是一項前景無限、極具顛覆性和想象空間的技術,它有潛力帶來一個完全不同的商業時代,塑造新一代的互聯網,也有可能被傳統勢力合謀異化。無論如何,區塊鏈為創業者和程序員提供了又一次弄潮的機會,在這片藍海上將演出一場怎樣的大戲,我們且拭目以待。
關鍵詞: 區塊鏈開發  區塊鏈技術  
0/300
? 小霸王曾道人