10分鐘弄懂當前各主流區塊鏈架構

老劉吃嫩草發表於2018-07-22

最近區塊鏈的概念可謂十分火熱,從風投的投資到企業招聘區塊鏈人才,似乎處處暗示著該技術將會給人類帶來巨大改變。廢話不多說,我們們就從技術角度來了解一下當前最主流的區塊鏈諸如比特幣、以太坊、HyperLedger等架構的區別以及它們各自的優缺點。為保證客觀與公平,本文將只針對開源的區塊鏈進行討論。

 

 

作者 | 張錚文

 

常聽人們談起區塊鏈,從2009年比特幣誕生至今,各式各樣的區塊鏈系統或基於區塊鏈的應用不斷被開發出來,並被應用到大量的場景中,而區塊鏈技術本身也在不停地變化和改進。

 

區塊鏈又被稱為分散式賬本,與之對應的則是中心化賬本,比如銀行。與中心化賬本不同的是,分散式賬本依靠的是將賬本資料冗餘儲存在所有參與節點中來保證賬本的安全性。簡單地說,區塊鏈會用到三種底層技術:點對點網路、密碼學和分散式一致性演算法。而通常,區塊鏈系統還會“免費附贈”一種被稱為智慧合約的功能。智慧合約雖然不是區塊鏈系統的必要組成部分,但由於區塊鏈天生所具備的去中心化特點,使它可以很好地為智慧合約提供可信的計算環境。

 

為了適應不同場景的需求,區塊鏈系統在實際應用的過程中往往會需要進行各種改造,以滿足特定業務的要求,比如身份認證、共識機制、金鑰管理、吞吐量、響應時間、隱私保護、監管要求等。而實際應用區塊鏈系統的公司往往沒有進行這種改造的能力,於是市場上慢慢出現了一些用於定製專用區塊鏈系統的框架,採用這些框架就可以很方便地定製出適用於企業自身業務需求的區塊鏈系統。本文將對目前市場上幾個典型的區塊鏈框架進行橫向對比。

 

比特幣

 

比特幣(Bitcoin)源自中本聰(Satoshi Nakamoto)在2008年發表的一篇論文《比特幣:一種點對點的電子現金系統》(Bitcoin:A Peer-to-PeerElectronic Cash System),文中描述了一種被他稱為“比特幣”的電子貨幣及其演算法。在之後的幾年裡,比特幣不斷成長和成熟,而它的底層技術也逐漸被人們認識並抽象出來,這就是區塊鏈技術。比特幣作為區塊鏈的鼻祖,在區塊鏈的大家族中具有舉足輕重的地位,基於比特幣技術開發出的山寨幣(Altcoins)的數量有如天上繁星,難以計數。

 

中本聰設計比特幣的目的,就是希望能夠實現一種完全基於點對點網路的電子現金系統,使得線上支付能夠直接由一方發起並支付給另外一方,中間不需要通過任何的中介機構。總結來說,他希望比特幣能夠實現以下這些設計目標:

 

  1. 不需要中央機構就可以發行貨幣

  2. 不需要中介機構就可以支付

  3. 保持使用者匿名

  4. 交易無法被撤銷

 

從電子現金系統的角度來看,以上這些目標在比特幣中基本都得到了實現,但是依然有一些技術問題有待解決,比如延展性攻擊、區塊容量限制、區塊分叉、擴充套件性等。

 

在應用場景方面,目前大量的數字貨幣專案都是基於比特幣架構來設計的,此外還有一些比較實際的應用案例,比如彩色幣、tØ等。

 

彩色幣(Coloredcoin),通過仔細跟蹤一些特定比特幣的來龍去脈,可以將它們與其他的比特幣區分開來,這些特定的比特幣就叫作彩色幣。它們具有一些特殊的屬性,從而具有與比特幣面值無關的價值,利用彩色幣的這種特性,開發者可以在比特幣網路上建立其他的數字資產。彩色幣本身就是比特幣,儲存和轉移不需要第三方,可以利用已經存在的比特幣基礎網路。

 

tØ是比特幣區塊鏈在金融領域的應用,是美國線上零售商Overstock推出的基於區塊鏈的私有和公有股權交易平臺。

 

以太坊

 

以太坊(Ethereum)的目標是提供一個帶有圖靈完備語言的區塊鏈,用這種語言可以建立合約來編寫任意狀態轉換功能。使用者只要簡單地用幾行程式碼來實現邏輯,就能夠建立一個基於區塊鏈的應用程式,並應用於貨幣以外的場景。以太坊的設計思想是不直接“支援”任何應用,但圖靈完備的程式語言意味著理論上任意合約邏輯和任何型別的應用都可以被建立出來。總結來說,以太坊在比特幣的功能之外,還有以下幾個設計目標:

 

  1. 圖靈完備的合約語言

  2. 內建的持久化狀態儲存

 

目前基於以太坊的合約專案已達到數百個,比較有名的有Augur、TheDAO、Digix、FirstBlood等

 

Augur是一個去中心化的預測市場平臺,基於以太坊區塊鏈技術。使用者可以用數字貨幣進行預測和下注,依靠群眾的智慧來預判事件的發展結果,可以有效地消除對手方風險和伺服器的中心化風險。

 

限於篇幅,基於以太坊智慧合約平臺的專案就不多介紹了。基於以太坊的程式碼進行改造的區塊鏈專案也有不少,但幾乎都是閉源專案,只能依靠一些公開的特性來推斷,所以就不在本文展開討論了。

 

Fabric

 

Fabric是由IBM和DAH主導開發的一個區塊鏈框架,是超級帳本的專案成員之一。它的功能與以太坊類似,也是一個分散式的智慧合約平臺。但與以太坊和比特幣不同的是,它從一開始就是一個框架,而不是一個公有鏈,也沒有內建的代幣(Token)

 

超級賬本(Hyperledger)是Linux基金會於2015年發起的推進區塊鏈技術和標準的開源專案,加入成員包括:荷蘭銀行(ABN AMRO)、埃森哲(Accenture)等十幾個不同利益體,目標是讓成員共同合作,共建開放平臺,滿足來自多個不同行業各種使用者案例,並簡化業務流程。

 

作為一個區塊鏈框架,Fabric採用了鬆耦合的設計,將共識機制、身份驗證等元件模組化,使之在應用過程中可以方便地根據應用場景來選擇相應的模組。除此之外,Fabric還採用了容器技術,將智慧合約程式碼(Chaincode)放在Docker中執行,從而使智慧合約可以用幾乎任意的高階語言來編寫。

 

以下是Fabric的一些設計目標:

 

  1. 模組化設計,元件可替換

  2. 執行於Docker的智慧合約

 

目前已經有不少採用Fabric架構進行開發的概念驗證(POC)專案在實施過程中,其中不乏一些金融機構做出的嘗試,不過由於專案剛剛起步,還沒有比較成熟的落地應用。

 

Onchain DNA

 

Onchain DNA(Onchain Distributed Networks Architecture),是由總部位於上海的區塊鏈創業公司“分佈科技”開發的區塊鏈架構,可以同時支援公有鏈、聯盟鏈、私有鏈等不同應用型別和場景,並快速與業務系統整合。分佈科技同樣也是超級賬本的成員之一。

 

與以太坊、Fabric不同的是,Onchain DNA在系統底層實現了對多種數字資產的支援,使用者可以直接在鏈上建立自己的資產型別,並用智慧合約來控制它的發行和交易邏輯。對於絕大部分的區塊鏈應用場景,數字資產是必不可少的,而為每一種數字資產都開發一套基於智慧合約的業務流程非常浪費且低效。因此,由區塊鏈底層提供直接的數字資產功能十分必要。而對於那些完全不需要數字資產的應用場景,同樣可以基於Onchain DNA提供的智慧合約功能來編寫任意的自定義邏輯來實現。

 

Onchain DNA的設計目標主要有以下幾點:

 

  1. 多種數字資產的底層支援

  2. 圖靈完備的智慧合約和持久化狀態

  3. 跨鏈互操作性

  4. 交易的最終性

     

 

目前已有不少金融機構採用Onchain DNA架構來進行區塊鏈概念驗證產品的開發,如銀行、券商、支付、登記結算機構等。除此之外,還有一些已經落地的區塊鏈專案,如小蟻、法鏈等。

 

小蟻(Antshares)是一個定位於資產數字化的公有鏈,將實體世界的資產和權益進行數字化,通過點對點網路進行登記發行、轉讓交易、清算交割等金融業務的去中心化網路協議。它採用社群化開發的模式,在架構上與Onchain DNA保持一致,從而可以與任何基於Onchain DNA的區塊鏈系統發生跨鏈互操作。

 

法鏈是全球第一個大規模商用的法律存證區塊鏈,一個底層基於Onchain DNA區塊鏈技術,並由多個機構參與建立和運營的證據記錄和儲存系統。該系統沒有中心控制點,且資料一旦錄入,單個機構或節點無法篡改,從而滿足司法存證的要求。

 

Corda

 

Corda是由一家總部位於紐約的區塊鏈創業公司R3CEV開發的,由其發起的R3區塊鏈聯盟,至今已吸引了數十家巨頭銀行的參與,其中包括富國銀行、美國銀行、紐約梅隆銀行、花旗銀行、德國商業銀行、德意志銀行、匯豐銀行、三菱UFJ金融集團、摩根士丹利、澳大利亞國民銀行、加拿大皇家銀行、瑞典北歐斯安銀行(SEB)、法國興業銀行等。從R3成員的組成上也可以看出,Corda是一款專門用於銀行與銀行間業務的技術架構。儘管R3聲稱Corda不是區塊鏈,但它具備區塊鏈的一些重要特性。

 

Corda由Java和Kotlin開發,並在其各項功能中充分依賴於Java,比如智慧合約、資料訪問介面等。Corda的設計目標主要是:

 

  1. 沒有全域性賬本

  2. 由公證人(Notaries)來解決交易的多重支付問題

  3. 只有交易的參與者和公證人才能看到交易

 

為此,Corda的所有交易都不會向全網進行廣播,而且所有的節點都是直接通訊,沒有P2P網路。這一點導致了其網路規模會被限制在一個較小的規模內,無法形成大規模的聯盟鏈,適用的業務場景比較狹窄。

 

接下來,我們將針對前文中所提到的這些區塊鏈框架進行一系列的技術對比,並從多個維度展開討論它們的區別與相似之處。

 

數字資產

 

 

區塊鏈的內建代幣通常是一種經濟激勵模型和防止垃圾交易的手段。比特幣天生就有且只有一種內建代幣,所以在比特幣系統中所有的“交易”本質上都是轉賬行為,除非通過外部的協議層來給比特幣增加額外的數字資產。

 

以太坊和Onchain DNA具有內建代幣,它們的作用除了以上提到的經濟激勵和防止垃圾交易之外,還為系統內建功能提供了一個收費的渠道。比如以太坊的智慧合約執行需要消耗GAS,而Onchain DNA的數字資產建立也需要消耗一定的代幣(可選)。

 

以太坊和Fabric沒有內建的多種數字資產支援,而是通過智慧合約來實現相應的功能。這種方式的好處在於,系統設計可以做到非常簡潔,而且資產的行為可以任意指定,自由度極高。然而這樣的設計也會帶來一系列的負面影響,比如所有的資產建立者不得不自己編寫重複的業務邏輯,而使用者也沒有辦法通過統一的方式去操作自己的資產。

 

相比之下,Onchain DNA和Corda採用了在底層支援多種數字資產的方式,讓資產建立者可以方便地建立自己的資產型別,而使用者也可以在同一個客戶端中管理所有的資產。對於邏輯更加複雜一點的業務場景來說,他們同樣可以利用智慧合約來強化資產的功能,或者建立一種與資產無關的業務邏輯。

 

賬戶系統

 

 

UTXO(Unspent Transaction Output)是這樣一種機制:每一枚數字貨幣都會被登記在一個賬戶的所有權之下,一枚數字貨幣有兩種狀態,即要麼還沒有被花費,要麼已經被花費。當需要使用一枚數字貨幣的時候,就將它的狀態標記為已經花費,並創造一枚新的與之等額的數字貨幣,將它的所有權登記到新的賬戶之下。在這個過程中,被標記為已花費的數字貨幣就被稱為交易的輸入,而創造出來的新的數字貨幣被稱為交易的輸出,在一筆交易中,可以包含多個輸入和多個輸出,但是輸入之和與輸出之和必須相等。計算一個賬戶的餘額時,只要將所有登記在該賬戶下的數字貨幣的面額相加即可。

 

比特幣和Corda就採用了UTXO這樣一種賬戶機制,而以太坊則採用了更加直觀的餘額機制:每個賬戶都有一個狀態,狀態中直接記錄了賬戶當前的餘額,轉賬的邏輯就是從一個賬戶中減去一部分金額,並在另一個賬戶中加上相應的金額,減去的部分和加上的部分必須相等。Onchain DNA在賬戶機制上同時相容這兩種模式。

 

那麼UTXO模式和餘額模式,究竟有什麼區別呢?UTXO最大的好處就是,基於UTXO的交易可以並行驗證且任意排序,因為所有的UTXO之間都是沒有關聯的,這對區塊鏈未來的擴充套件性有很大的幫助,而基於餘額的設計就沒有這個優勢了。反過來,餘額設計的優點是設計思想非常簡潔和直觀,便於程式實現,特別是在智慧合約中,要處理UTXO的狀態是非常困難的。這也是為什麼以智慧合約為主要功能的以太坊選擇餘額設計的原因,而比特幣、OnchainDNA、Corda這些以數字資產為核心的架構則更傾向於UTXO設計。

 

關於身份認證,比特幣和以太坊基本沒有身份認證的設計,原因很簡單,因為這兩者的設計思想都是強調隱私和匿名,反對監管和中心化,而身份認證就勢必要引入一些中心或者弱化的中心機構。

 

Fabric、Onchain DNA和Corda不約而同地選擇了採用數字證照來對使用者身份進行認證,原因在於這三者都有應用於現有金融系統的設計目標,而金融系統必然要考慮合規化並接受監管,此外現有的金融系統已經大範圍地採用數字證照方案,這樣便可以和區塊鏈系統快速整合。

 

共識機制

 

共識機制是分散式系統的核心演算法,因為分散式系統的資料分散在各個參與節點中,這些分散的資料必須通過一種演算法來保持一致性,否則系統將無法正常工作。與傳統的分散式系統不同,區塊鏈是一個去中心化的系統,並且可能會承載大量的金融資產,所以它可能會面臨大量的拜占庭故障而非一般性故障,而中心化的分散式系統則很少遇到拜占庭故障。因此,區塊鏈的共識機制與傳統的分散式系統存在較大的差異。

 

 

比特幣和以太坊採用了工作量證明(Proof-of-Work)機制來保證賬本資料的一致性。工作量證明同時也是一種代幣分發機制,它通過經濟激勵的方式來鼓勵節點參與區塊的構造過程,節點在構造區塊的時候需要窮舉一個隨機數以使得區塊符合規定的難度要求,一旦區塊鏈出現分叉,誠實的節點將選擇工作量較大的鏈條,而拋棄工作量較小的。由於假設所有節點都是逐利的,而選擇工作量較小的鏈條就會使自己獲得的激勵無效,所以最終所有的節點都會是誠實的,從而使每個節點的區塊鏈資料都保持一致。

 

為了維護這樣一個工作量證明機制的區塊鏈,需要全網具備較大規模的算力支撐來保證網路的安全性,否則賬本資料就有可能被篡改。此外,即使維持較大的算力來保護網路,工作量證明也無法從根本上保證交易的最終性,比如比特幣就經常產生孤立區塊(Orphaned Block),而包含在孤立區塊中的交易就有可能被撤銷。因此比特幣通常要求使用者等待6個區塊的確認,即1小時左右的時間,才能在一個可接受的概率上認為交易已經最終完成,而這個概率也並非是最終性的——你永遠也不知道暗中是否有一個遠超過全網的龐大算力正在試圖撤銷以前的交易。而為了維護龐大算力而支出的電力成本也是相當可觀,因此,以太坊已經在設計從工作量證明機制切換到其他共識機制上的方案。

 

Fabric和Onchain DNA都設計了基於拜占庭容錯(Byzantine Fault Tolerance)模型的共識機制。節點被分為普通節點和記賬節點(Validating Peer),只有記賬節點才會參與到區塊的構造過程,這種角色的分離使得演算法的設計者有機會將執行共識演算法的節點數量限定在一個可控的規模內。

 

拜占庭容錯模型對網路中的節點做出了假設和要求:如果共識中有f個節點會出現拜占庭故障,那麼至少需要3f+1個節點參與共識才能避免網路出現分叉。在這個模型下,每個區塊的構造過程都需要至少2f+1個節點的參與才能夠完成,而不像工作量證明機制下每個節點都獨立構造區塊。一旦區塊被構造出來,它就無法被撤銷,因為2f+1個誠實的記賬節點不會在同一高度對兩個不同的區塊進行簽名認證。

 

相比較而言,工作量證明機制提供了極高的靈活性和可用性,因為每個節點都獨立構造區塊而幾乎不需要其他節點的參與,節點可以隨時加入或者退出網路,即使全網只剩下一個節點,網路還是可以繼續工作,但是相應的它也失去了交易的最終性;而拜占庭容錯的機制則與之相反,犧牲了一定的靈活性和可用性,記賬節點必須線上提供服務而不能退出網路,一旦出現1/3的記賬節點停機,那麼網路將變得不可用,但它保證了交易的最終性

 

智慧合約

 

智慧合約是1994年由密碼學家尼克薩博(Nick Szabo)首次提出的理念,幾乎與網際網路同齡。智慧合約是指能夠自動執行合約條款的計算機程式,在比特幣出現以前,因為不存在安全可靠的執行環境,智慧合約一直不能夠應用到現實中。區塊鏈由於其去中心化、公開透明等特性,天生就可以為智慧合約提供可信的執行環境。所以,新型的區塊鏈框架幾乎都會內建智慧合約的功能。

 

 

比特幣內建了一套基於棧的指令碼執行引擎,可以執行一種獨有的指令碼程式碼,用於對交易進行簡單的有效性驗證,比如簽名驗證和多重簽名驗證等。比特幣這套指令碼語言被有意設計成非圖靈完備的,足夠簡單卻也足以應對貨幣轉賬的各種需求

 

以太坊是首個以圖靈完備智慧合約為主要功能的區塊鏈,使用者可以在以太坊的平臺上建立自己的合約,而合約的內容可以包含貨幣轉賬在內的任意邏輯。合約使用一種名為Solidity的語言來編寫,它是以太坊團隊開發的專門用於編寫智慧合約的一種高階語言,語法類似JavaScript,最終被編譯成位元組碼並執行在EVM(Ethereum Virtual Machine)之中。EVM提供了堆疊、記憶體、儲存器等虛擬硬體,以及一套專用的指令集,所有的程式碼都在沙盒中執行。它提供了合約間相互呼叫的能力,甚至可以在執行時動態載入其它合約的程式碼來執行。這種能力使得以太坊的合約具有非常高的靈活性,但也可能會使合約的功能具有不確定性。

 

與以太坊自己動手開發語言、虛擬機器的思路不同,Fabric選擇了使用現有的容器技術來支援智慧合約功能。Fabric的智慧合約理論上可以用任何語言來編寫,這一點對開發者相當友好,他們將無需學習新的語言,並且可以複用現有的業務程式碼和豐富的開發庫,並使用自己熟悉的開發工具。相對的,採用Docker的智慧合約架構也有大量的問題:首先,它很難對智慧合約的執行流程進行控制,從而無法對其功能進行限制;其次,它無法對合約執行所消耗的計算資源進行精確的評估;此外,執行Docker相對而言是極其耗費資源的操作,這就使得難以在移動裝置上執行合約;最後,不同節點的硬體配置、合約引用的開發庫等,都有可能會使合約的行為具有很強的不確定性。

 

Onchain DNA採用了AVM(Antshares Virtual Machine)作為其智慧合約功能的底層支援。AVM是一個微核心的、平臺無關的智慧合約執行環境,它提供了一套包含堆疊操作、流程控制、邏輯運算、算數運算、密碼學運算、字串操作、陣列操作的指令集,在硬體方面,它只提供了兩個計算堆疊。不過,由於它允許區塊鏈的實現者建立自己的虛擬硬體,並以介面的形式開放給智慧合約來使用,使得合約可以在執行時取得平臺相關的資料、持久化儲存以及訪問網際網路等。雖然這也有可能會使合約的行為具有不確定性,但區塊鏈的實現者可以通過合理編寫虛擬硬體來消除這種不確定性。不過,由於目前尚無與AVM配套的編譯器和開發環境,這使得基於AVM進行智慧合約開發變得相當困難,開發者不得不使用一種類似彙編的語法來進行合約編寫,需要較高的技術能力。

 

Corda的智慧合約功能與其自身一樣,都是基於JVM(Java Virtual Machine)的。因此,你可以使用任何與JVM相容的語言來進行開發,比如Java、Kotlin等。不過,它對JVM進行了一定的改造,使得在其上執行的合約指令碼具備確定性。開發的過程大致是這樣的:使用Java建立一個實現Contract介面的類(Class),並提供一個名為verify的函式(Function)用於對交易進行驗證,該函式接受當前的交易作為引數,如果交易驗證失敗,則丟擲異常(Exception),沒有異常就表示驗證通過。Corda使用JPA(Java Persistence Architecture)來提供持久化功能,支援SQL語句和常用的資料庫,不過需要安裝相應的外掛,並且由於資料僅存放在合約執行者的節點,因此無法進行全域性的持久化儲存。

 

擴充套件性

 

區塊鏈的資料結構通常是隻能追加記錄,而不能修改或刪除記錄,它真實地記錄下完整的歷史資料,使得新加入的節點有能力對全網的完整交易歷史進行驗證,而無需信任其它節點。這種特性帶來了去中心化的便利性,但也影響了區塊鏈系統的擴充套件性,因為區塊會無休止地增長,直到塞滿整個硬碟。所以有必要提供一種空間回收的機制來應對不斷增長的資料。

 

 

比特幣提出了使用默克爾樹(Merkle tree)來存放交易雜湊的方式,當需要回收硬碟空間時,只需將老舊的交易從默克爾樹中剔除即可。一個不含交易資訊的區塊頭大小僅有80位元組。按照比特幣區塊生成的速率為每10分鐘一個,那麼每一年產生的資料約為4.2MB,即使將全部的區塊頭儲存於記憶體之中都不是問題。

 

以太坊、Fabric和Onchain DNA在比特幣區塊壓縮的基礎上,又採用了狀態快照的方式來節約硬碟空間。具體來說,就是在區塊頭的結構中不但記錄了當前區塊所有交易的根雜湊,還記錄了當前區塊及過去所有區塊中的狀態根雜湊。這些狀態包括所有的UTXO、賬戶餘額、合約儲存等,所以節點只需要保留最新的區塊和完整的狀態資訊即可。

 

擴充套件性的另一個重要指標是交易的吞吐量。決定吞吐量的因素有很多種,如網路結構、加密演算法、共識機制等,但最重要的還是交易是否可以被並行驗證。如果交易可以被並行驗證,那麼未來就可以通過簡單地增加CPU數量來提高吞吐量。

 

基於UTXO系統的比特幣可以很容易地對交易進行並行驗證,因為UTXO之間是沒有關聯的,對任何一個UTXO的狀態改變都可以獨立進行且與順序無關;而基於餘額的賬戶系統則不那麼容易實現並行,因為可能會同時發生多筆交易對同一個賬戶進行資產操作,需要進行一些額外的步驟來處理。舉個例子,假設賬戶中的餘額為10元,有兩筆針對該賬戶的交易同時發生,第一筆交易在賬戶中+5元,而第二筆交易在賬戶中-11元。那麼如果先執行第一筆交易,則兩筆都能成功,最終餘額為4元;如果先執行第二筆交易,那麼它會因餘額不足而失敗,只有第一筆交易會成功,最終餘額為15元。

 

而對交易的並行驗證起到決定性作用的,是智慧合約是否具備狀態持久化的能力。如果一組合約都是無狀態的,那麼它們就可以按任意的順序被執行,不會產生任何副作用;相反,如果合約可以對一組狀態產生影響,那麼按不同的順序來執行合約產生的結果也會不同。舉個例子,一個計算存款利息的合約,它具有兩個子功能:存款和利息結算。假設賬戶中有100元,利率為10%,現在同時發生了兩筆交易,第一筆交易的內容是存入100元,第二筆交易的內容是結算利息。假如第一筆交易先執行,那麼最終賬戶的餘額是:100+100)*110%=220元;如果第二筆交易先執行,那麼賬戶餘額將是:100*110%+100=210元。由此可見,具備狀態持久化能力的智慧合約是順序相關的,因此難以併發驗證,特別是如果合約之間還可以相互呼叫的話,情況將會更加複雜。

 

目前Fabric沒有提出什麼好的辦法來解決這個問題;而Corda則沒有這個問題,因為它的交易本身就不會向全網進行廣播,所以只要交易參與者和公證人可以驗證即可。以太坊和Onchain DNA的方法都是分割槽,即將各個合約分到不同的邏輯區中,每個區中的合約都順序執行,而不同的區之間並行執行。以太坊將合約地址的首個位元組作為分割槽依據,由此產生了256個分割槽,每個合約都在自己的分割槽中執行,且只能呼叫與自己相同分割槽的合約。但這種做法實際上並不能有效地解決問題,因為總有一些通用的底層合約因為被廣泛使用,而把大多數的呼叫者合約聚集在同一個分割槽中。

 

Onchain DNA將合約分為功能合約(Function code)和應用合約(Applicationcode)。其中功能合約專門用於提供可複用的功能函式,被其它合約呼叫,且必須被宣告為無狀態,這一點消除了絕大部分的合約聚集現象;而只有應用合約可以儲存自己的狀態,所以在執行應用合約時,對其採用動態分割槽方案:在合約被執行之前,會先計算出它們的呼叫樹,並將呼叫樹有交集的合約放在同一個分割槽中執行。

 

5大專案獨有特性

 

擴充套件性

 

幽靈協議是以太坊對現有POW演算法的改進,它提出的動機是當前快速確認的區塊鏈因為區塊的高作廢率而受到的低安全性困擾。因為區塊需要花一定時間擴散至全網,如果礦工A挖出了一個區塊然後礦工B碰巧在A的區塊傳播至B之前挖出了另外一個區塊,礦工B的區塊就會作廢並且沒有對網路安全作出貢獻。如果A是一個擁有全網30%算力的礦池而B擁有10%的算力,A將面臨70%的時間都在產生作廢區塊的風險而B在90%的時間裡都在產生作廢區塊。通過在計算哪條鏈“最長”的時候把廢區塊也包含進來,幽靈協議解決了降低網路安全性的第一個問題;這就是說,不僅一個區塊的父區塊和更早的祖先塊,祖先塊的作廢的後代區塊(以太坊術語中稱之為“叔區塊”)也被加進來以計算哪一個區塊擁有最大的工作量證明。以太坊付給以“叔區塊”身份為新塊確認作出貢獻的廢區塊87.5%的獎勵,把它們納入計算的“侄子區塊”將獲得獎勵的12.5%。計算表明,帶有激勵的五層幽靈協議即使在出塊時間為15s的情況下也實現了95%以上的效率,而擁有25%算力的礦工從中心化得到的益處小於3%。

 

國密演算法

 

國密演算法是由中國國家密碼管理局制定的一系列商用密碼學演算法,其中包括了對稱加密演算法SM1,橢圓曲線非對稱加密演算法SM2,雜湊演算法SM3等。通常區塊鏈在使用密碼學演算法時會採用國際標準,如AES、ECDSA、SHA2等。而國內的金融機構在選用密碼學方案的時候,通常會考慮國密演算法。Onchain DNA提供了可選的密碼學模組,針對不同的應用場景可以選擇不同密碼學標準,解決了安全性和政策性風險。

 

跨鏈互操作

 

目前,區塊鏈技術正處於百花齊放、百家爭鳴的時代,各種不同的區塊鏈紛紛湧現出來,區塊鏈之間的互操作性成為了一個非常重要而又迫切的需求。企業使用者可能需要在不同的鏈之間進行業務遷移;普通使用者可能需要在不同的鏈之間進行資產交換;央行的數字法幣可能會需要在各個區塊鏈上流通等。Onchain DNA提供了一種跨鏈互操作協議,通過這種跨鏈協議,使用者可以跨越不同的區塊鏈進行資產交易、合約執行等操作,並保證該操作在各個區塊鏈上的事務一致性。

 

無鏈結構

 

正如Corda在白皮書中所宣稱的那樣,它沒有鏈式結構,交易也不向全網進行廣播,而只在交易的參與者和公證人之間傳送。因此,資料只有“需要訪問的人”才能訪問,避免了隱私洩露的問題。由於沒有全域性的鏈式結構,每個節點只存放和自己有關的交易,而無需存放全網的所有交易,大大的節省了空間。

 

總結

 

本文從多個維度比較並討論了當前各個區塊鏈框架的特點和功能,並闡述了它們在各方面的優缺點,以及在應用領域上的適用性和侷限性。

 

比特幣雖然是區塊鏈技術的原型,具有非常重要的地位,但由於其技術架構的侷限性,如挖礦、非圖靈完備等,很難應用到複雜的業務場景中去,但非常適合用於貨幣發行。

 

以太坊雖然也採用挖礦的形式,但其幽靈協議提高了挖礦效率,新的共識演算法也在開發中。以太坊還開發了較多基於密碼學的隱私保護方案,比如環簽名混幣方案,非常適合於建立去中心化自治組織(Decentralized Autonomous Organization)。

 

Fabric和Onchain DNA的定位都是企業級區塊鏈解決方案,適合用於定製各種特定業務的聯盟鏈,包括金融領域的應用場景。區別在於Fabric以智慧合約為導向,而Onchain DNA則以數字資產為導向;前者更適合開發複雜的自定義業務流程,而後者則更適合於構建以數字資產為核心的金融業務系統或權益登記流轉系統,且具有較強的擴充套件性。

 

Corda的定位是用於銀行間業務的“分散式資料庫”,它摒棄了區塊和鏈式結構,更好地把參與者的業務資料區隔開來;但引入了公證人的角色,網路結構較為固定不具靈活性和擴充套件性,且與現有的銀行體系的運作方式差別不大。

 

注:本文源自張錚文2017年初的一篇技術文章。

 

作者簡介:

張錚文,分佈科技CTO & Founder, 小蟻核心開發者。區塊鏈技術和電腦保安專家,CISA資訊系統審計師。具備區塊鏈底層協議架構和開發能力,dBFT共識機制的作者,獨立原創實現了小蟻全部的核心程式碼。創立小蟻前,曾在盛大遊戲、火幣網等公司任職,從事資訊保安和數字貨幣研發工作。

相關文章