首頁 > 軟體

區塊鏈開發技術綜述

2020-06-16 17:19:03

如果你關注區塊鏈技術長達幾個月,可能也會跟我一樣,對沒完沒了的原理介紹、前景描繪、行業探討和鏈圈新聞產生了審美疲勞。沒錯,區塊鏈必須與行業緊密結合,它也有顛覆人類共同作業方式之洪荒巨力,但是說到底它還是一個技術活,是要寫程式碼的,在咖啡廳裡整天坐而論道是造不出金鏈子來的。技術人員的邏輯簡單直接,這個事情有沒有前(錢)途?有,那怎麼乾?

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

區塊鏈技術的流派

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

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

第一是按照節點准入規則,劃分為公有鏈、私有鏈和聯盟鏈。公有鏈的代表自然是位元幣和以太坊,私有鏈則以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(n²),其中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)技術讓別的節點既能夠驗證交易,又對交易本身的內容一無所知,這都是能夠激發大量商業模式創新的技術,等待密碼學駭客們發掘和實現。因此,我相信密碼學成為顯學的時代即將到來。

區塊鏈是一項前景無限、極具顛覆性和想象空間的技術,它有潛力帶來一個完全不同的商業時代,塑造新一代的網際網路,也有可能被傳統勢力合謀異化。無論如何,區塊鏈為創業者和程式設計師提供了又一次弄潮的機會,在這片藍海上將演出一場怎樣的大戲,我們且拭目以待。

作者:孟岩,IBM大中華區高階經理,曾負責IBM智慧地球、智慧城市、認知計算等重大技術戰略在中國的推廣和落地。一年前開始關注區塊鏈技術及其行業應用前景,對位元幣、以太坊、超級總賬和BigchainDB四個主要區塊鏈技術流派都進行過考察和研究,形成了在中國應用區塊鏈技術的觀點和思路。

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-03/141949.htm


IT145.com E-mail:sddin#qq.com