區塊鏈分散式賬本Fabric、Corda和以太坊比較

banq發表於2018-10-06
簡要分析了分散式賬本技術(DLT)Hyperledger Fabric,R3 Corda和Ethereum以太坊之間最顯著的差異。目的是為決策者提供新的DLT指導,以瞭解Hyperledger Fabric,Corda和Ethereum最適合的用例。

三種不同的框架
從Hyperledger Fabric,R3 Corda(以下分別僅稱為Fabric和Corda)和以太坊的白皮書中可以明顯看出,這些框架在可能的應用領域中有著截然不同的願景。Fabric 和Corda 的開發由具體用例驅動,而Corda的用例來自金融服務行業。因此,這就是Corda看到其主要應用領域的地方。相比之下,Fabric計劃提供模組化和可擴充套件的架構,可用於各種行業,從銀行和醫療保健到供應鏈。以太坊也表現為完全獨立於任何特定的應用領域。然而,與Fabric相比,它不是模組化,而是為各種交易和應用提供通用平臺。


peer端參與者
對於傳統的中央資料庫系統如oracle或nosql,只有單個實體(所有者)保留底層資料庫的副本,例如分類帳。因此,該實體控制哪些資料被貢獻以及允許哪些其他實體貢獻。隨著DLT的出現,這種根本改變將有利於分散式資料儲存,其中多個實體持有底層資料庫的副本並且自然允許貢獻。

參與分散式資料儲存的所有實體形成所謂的節點或對等體peer的網路。由於分散式資料儲存,難以確保所有節點就共同事實達成一致,例如分類賬的正確性,因為一個節點所做的改變必須傳播到網路中的所有其他對等節點。達到共同事實的結果稱為節點之間的一致性,將在下面描述。

關於參與共識,有兩種操作模式:無許可權和許可。如果參與是無許可權的,則允許任何人參與網路。這種模式適用於以太坊作為公共區塊鏈。另一方面,如果允許參與,則提前選擇參與者,並且僅限於這些參與者對網路的訪問。Fabric和Corda也是如此。參與模式,無許可權或許可,對達成共識有著深遠的影響。

共識

1. 以太坊所有參與者必須就所有已發生的交易(banq注:交易即是事務,英文都是transaction)的順序達成共識,而不管參與者是否參與了特定交易。交易的事務順序對於分類賬的一致狀態至關重要。

如果無法建立明確的事務順序,則可能會發生雙倍花費,即兩個平行交易將相同的硬幣轉移給不同的收件人,從而憑空賺錢。

由於網路可能涉及相互不信任和匿名的當事方,因此必須採用共識機制來保護分類賬,防止欺詐或不利的參與者嘗試雙重支出。

在以太坊的當前實現中,該機制是透過基於工作量證明(PoW)方案的挖掘來建立的。所有參與者必須就共同分類帳達成一致,並且所有參與者都可以訪問所有記錄的條目。後果是PoW影響了事務處理的效能。

關於儲存在分類賬上的資料,即使記錄是匿名的,但所有參與者都可以訪問它們,這對於需要更高程度隱私的應用程式來說是個問題。

與以太坊相比,Fabric和Corda對共識的解釋更加精細,並不僅僅歸結為基於PoW或其衍生物的挖掘。由於在許可權模式下執行,Fabric和Corda為記錄提供了更細粒度的訪問控制,從而增強了隱私。此外,由於參與交易的各方必須達成共識,因此可以獲得業績增長。

2.Fabric對共識的理解是廣泛的,包括整個事務流程,從提議事務到網路,再到將其提交到分類賬。此外,節點在達成共識的過程中承擔不同的角色和任務。這與以太坊形成對比,其中參與達成共識的節點的角色和任務是相同的。

在Fabric中,節點根據它們是客戶端,對等端還是排序者而區分。客戶端代表終端使用者做的事情,建立又呼叫交易事務。他們與peer端和排序者溝通。

對等方peer維護分類帳並從排序方接收有序地更新訊息,以便將新交易事務提交到分類帳。

代言人排序者是一種特殊型別的peer端,他們的任務是透過檢查交易是否滿足必要和充分條件(例如提供所需簽名)來支援交易。

排序者向客戶和同行提供通訊渠道,透過該渠道可以廣播包含交易的訊息。特別是就共識而言,通道確保所有連線的對等體以完全相同的邏輯順序傳遞完全相同的訊息。(保證順序是排序者主要職責)


此時,出現的問題是,當採用許多相互不信任的排序者時,在傳遞訊息時可能會出現錯誤。因此,必須使用一致性演算法以應對達成共識時出現故障,或者例如訊息出現不一致順序,這樣保證分散式分類賬複製時對故障的容忍。

使用Fabric,所採用的演算法是“可插拔的”,這意味著根據應用程式的具體要求,可以使用各種演算法。例如,為了處理如上所述的隨機或惡意複製錯誤,可以使用拜占庭容錯(BFT)演算法的變體。

此外,通道劃分訊息流,這意味著客戶端只能看到它們所連線的通道的訊息和關聯交易事務,並且不知道其他通道的交易事務。

在事務流的上下文中描述了上述節點的角色:客戶端向連線的代言人傳送事務以啟動分類帳的更新。所有代言人都必須就擬議的交易達成一致,因此必須就擬議的分類賬更新達成某種共識。客戶就會先後收集到所有代言人的批准。

已批准的交易傳送給已連線的排序者,並再次達成共識。隨後,交易被轉發給持有分類賬的peer端以進行進一步交易。

在不進一步詳細說明的情況下,很明顯Fabric允許對共識進行細粒度控制並限制對交易事務的訪問,從而提高效能可伸縮性和隱私性。

3.與Fabric類似,Corda的共識也是透過僅涉及各方的事務級別達成的。達成共識是交易有效性和交易唯一性。

透過檢查所有必需的簽名並確保所引用的任何交易也是有效的,透過執行與交易相關聯的智慧合約程式碼(下面詳細描述的智慧合約)來確保有效性。

唯一性涉及交易事務的輸入狀態。具體而言,必須確保所討論的交易是其所有輸入狀態的唯一消費者。換句話說,不存在消耗任何相同狀態的其他事務。這樣做的原因是為了避免雙倍花費。參與者稱為公證人節點,其唯一性達成共識,而採用的演算法與Fabric一樣“可插拔”。因此,可以再次使用BFT演算法。

智慧合約
“智慧合約”一詞在第一次遇到時會引起相當大的誤解,因為它會喚起某種代表智慧行事的合同的想法。然而,合同的性質仍然含糊不清,但直觀地看起來與法律問題有關。也就是說,合同既不是智慧的,也不是人工智慧驅動的,至少現在還不是,它們通常也不會編碼具有法律約束力的義務和權利。

Clark及其同事提供了一個有用的術語,突出了“智慧合約”一詞常用的兩種不同方式。第一個是智慧合約程式碼,第二個是智慧合法程式碼,兩個區別,在這種比較的背景下被證明是有益的。

智慧合約程式碼僅表示以程式語言編寫的軟體。它充當使用它的一方的軟體代理或代表,其目的是履行某些義務,行使權利並可以以自動方式控制分散式分類賬中的資產。因此,它透過執行在現實世界中建模或模擬合同邏輯的程式碼來承擔分散式分類賬世界中的任務和職責,儘管其法律理由可能不清楚。

所有DLT都具有智慧合約程式碼意義上的智慧合約,可以用Go或Java for Fabric 編寫,Solidity 中用於以太坊,Java或Kotlin用於Corda 。

在Fabric中,術語“chaincode”用作智慧合約的同義詞。作為說明性示例,提醒讀者在Corda的共識機制中使用智慧合約程式碼以確保交易有效性。然而,一方面Fabric和以太坊之間存在顯著差異,而Corda另一方面與使用“智慧合約”術語的第二種方式相關。

在Corda,智慧合約不僅包括程式碼,還允許包含法律文。因此,上述智慧法律合同是法律文,其制定方式可以用智慧合同程式碼表達和實施。這背後的基本原理是賦予程式碼合法性,這種合法性源於相關的法律文。這種結構稱為Ricardian Contract 。此時,Corda明確地被設計為應對金融服務行業高度監管的環境。Fabric和Ethereum都缺少此功能。

內建貨幣
另一個值得注意的區別是,以太坊具有內建加密貨幣(Ether)。它用於向有助於透過挖掘區塊達成共識以及支付交易費用的節點支付獎勵。因此,可以為以太坊建立分散的應用程式(DApps),允許貨幣交易。此外,可以透過部署符合預定義標準的智慧合約來建立用於自定義用例的數字令牌。這樣,可以定義自己的貨幣或資產。

Fabric和Corda不需要內建加密貨幣,因為透過挖掘無法達成共識。但是,使用Fabric,可以使用鏈碼開發本機貨幣或數字令牌。使用Corda,無意建立數字貨幣或代幣。

總結:定製與通用平臺
總而言之,這三種DLT跨越一個連續體。一方面是Fabric和以太坊,他們都非常靈活,但在不同方面。

以太坊強大的智慧合約引擎使其成為任何型別應用程式的通用平臺。然而,以太坊的無許可權操作模式及其完全透明性是以犧牲效能可擴充套件性和隱私為代價的。

Fabric透過允許的操作模式,特別是透過使用BFT演算法和細粒度訪問控制來解決效能可伸縮性和隱私問題。此外,模組化架構允許Fabric針對多種應用進行定製。可以繪製一個多功能工具箱的類比。

Corda位於另一端。它被有意識地設計為金融服務行業的DLT。最值得注意的是,它透過增加具有法律文的智慧合約來考慮高度監管的環境。

顯然,與Fabric相比,Corda專注於金融服務交易簡化了其架構設計。因此,它可能提供更開箱即用的體驗。然而,由於其模組化,Fabric可能可以定製為類似Corda的功能集。尋求將Corda整合到Hyperledger專案中的努力已經存在。Corda因此不能被視為Fabric的競爭對手,而是更多的補充。

原文

[該貼被banq於2018-10-07 16:55修改過]

相關文章