聯盟鏈走向何方
編者按:本文來自碳鏈價值(ID:cc-value)摘要
摘要
二級標題
摘要
二級標題
摘要
第46 屆世界經濟論壇達沃斯年會將區塊鏈與人工智能、自動駕駛等一併列入“第四次工業革命”。 《經濟學人》曾在2015 年10 月的封面文章《信任的機器》中介紹區塊鏈——“比特幣背後的技術有可能改變經濟運行的方式”。
區塊鏈之所以被稱為信任的機器源於其分佈式和不可篡改的兩個核心特性,這也是區塊鏈有別於傳統數據庫的核心特性。這裡的分佈式包含兩層含義:一是傳統的分佈式存儲,二是區塊鏈的底層協議帶來的協作性,這裡更多的是指代其分佈式協作的能力。
在區塊鏈中主要通過共識算法、智能合約、治理、跨鏈、隱私等來實現其“可信協作”,所以本文將從這幾個方面並結合企業應用場景來分析底層技術的差異,來幫助企業用戶更好地做出選擇。同時也會從傳統企業軟件的可維護性、性能、開發工具、擴展性、軟件協議等方面來進行分析和對比。
就聯盟鏈的歷史、以及和公鏈的區別來說,早期來看差異不大,但是現在隨著細分市場持續深化,公鍊和聯盟鏈之間的差別越來越明顯。
首先,公鏈面對的是一個不可控場景,需要在安全,性能和去中心化上找到一個平衡點。而在聯盟鏈企業服務場景中,參與方數量相對來說更加的可控,聯盟鏈在性能和安全性上更容易有突破。但也正是由於參與方(節點)的可控,去中心化這個方面有自己更加獨特的設計。除此以外,在公鏈中,所有的信息都是公開透明可以被查驗的,每一個參與方相對來說比較平等。但是在工業界中,這是不可被接受的,有大量的公對公數據隱私需要處理,在企業中也存在多種組織模式需要設定權限。
基於這些特徵,聯盟鏈在發展上包括節點管理、共識選擇、權限控制和合約設計範式差異化多很大,同時不同的框架對於合約的設計範式理解也不盡相同。此外,區塊鏈有開源和閉源之分,但是區塊鏈創造的信任是基於開源代碼產生的,沒有開源就不是真正意義上的區塊鏈系統。因此為了研究的客觀,本文主要集中討論開源框架。目前在國內市場使用較廣泛的開源架構分別是Fabric,FISCO BCOS 和CITA。
Hyperledger Fabric 是分佈式賬本解決方案的平台,該平台以模塊化架構為基礎,提供高度的機密性,靈活性和可擴展性。它旨在支持不同組件的可插拔實現,並適應整個經濟生態系統中存在的複雜性。 Fabric 最早由IBM 設計和開發,2015 年將其源代碼奉獻給了Linux 基金會的Hyperledger 項目。
FISCO BCOS 誕生於2017 年,由金鍊盟推出,是標準的國產底層。金鍊盟是由深圳市金融科技協會、深圳前海微眾銀行、深證通等二十餘家金融機構和科技企業於2016 年5 月31 日共同發起成立的非營利性組織。
CITA 是一個開源的區塊鏈操作系統內核,以高穩定性,高性能,高可擴展性為設計目標。 CITA 開源項目由秘猿科技Cryptape 於2016 年發起。目前由溪塔科技等CITAHub 社區企業共同維護。 CITA 採用微服務架構設計,提供豐富的開發工具集,靈活的區塊鏈治理工具,開發者可為不同類型的區塊鍊網絡進行二次開發或配置。
Fabric 特性:IBM Fabric 保證了區塊鏈中的分佈式和不可篡改性兩點,省略了去中心化的共識機制,IBM Fabric 在框架中並沒有真正的去中心化共識機制。在Fabric 架構中,將參與方(節點)分成了三種角色即:排序節點、背書節點和提交節點。對於每一筆交易:共識狀態的過程是由客戶端、背書節點、提交節點共同參與完成的;排序節點只負責交易順序的共識,而不負責狀態共識,在交易狀態共識和排序可以分別採用不同的策略。排序節點中的共識方式是Kafka 或者Raft,這實際上和已有的分佈式數據庫共識方式是一致的,不具備容錯性。
二級標題
二級標題
如果說以太坊代表著區塊鏈的精神,CITA 和FISCO BCOS 繼承自公鏈。 CITA 和FISCO BCOS 身上對於以太坊雖然在場景和使用上已經和公鏈完全不同,但是在一些底層邏輯上還是可以看到對於公有鏈的繼承。從技術上來講,繼承了以太坊的虛擬機,也就是繼承了以太坊龐大的生態。接下來,本文將從技術實現角度對比三者的不同。
二級標題
共識和交易流程
共識機製作為區塊鏈的靈魂,無論是公鏈還是聯盟鏈,共識機制都從根本上限制了區塊鏈的交易處理能力和擴展性,同時也是其分佈式協作能力的基礎。共識是分佈式系統中節點對數據或網絡最終狀態達成的協議。由於網絡環境和節點狀態的不可控,共識機制需要同時考慮性能、可靠性、安全性等多方面問題。共識機制從大的方面,可分為Nakamoto Consensus 等無需准入的共識機制,和PBFT 等需要准入的共識機制兩大類。
Nakamoto 共識在公鏈上應用廣泛,但是它的概率模型在提供較高可靠性的同時,犧牲了效率。在具體商業應用環境中,許可機制已經保證了一定程度上的節點可信度,這樣的前提下,用戶更關心執行效率和最終確定性。這是BFT 類共識在聯盟鏈中流行的原因。
接下來本文將先分別介紹FISCO BCOS、CITA 和Fabirc 共識技術實現,本文再從性能,應用場景,擴展性和安全性等幾個方面來進行對比分析。
技術實現
BCOS共識機制效率相對較為傳統
FISCO BCOS 的共識機制採用了傳統的PBFT 共識,其共識流程主要包括Pre-prepare, Prepare 和Commit 三個階段:
1. Pre-prepare:Leader 節點執行區塊,產生簽名,並將Proposal 廣播給其他共識節點;
2. Prepare:共識節點驗證Proposal 並廣播簽名,同時收集其他節點簽名,節點收集到2f + 1 的簽名後,開始廣播Commit 包;
3. Commit:Leader 節點收集Commit 包,節點收集滿2*f + 1 的Commit 包後,更新本地數據庫並廣播給其他節點,其他節點收到之後更新本地數據庫。
下圖為標準的一次PBFT的過程:
在區塊鏈中因為共識節點之間需要統一Commit 階段的投票,所以最後的Commit 階段略為不同:Leader 節點收到2*f+1 的Commit 包之後會將最終的Commit 包廣播給其他共識節點來統一投票。
在整個共識流程中,交易在Pre-prepare 階段執行一次,在Prepare 階段驗證一次,FISCO BCOS 中使用的傳統PBFT 流程為先執行再驗證的模式,包含了兩個執行交易的時間長度。
CITA 採用自主研發的共識協議
CITA 實現了根據區塊鏈連續共識特點而優化的CITA-BFT。區塊鍊是一個連續共識的過程,CITA 將交易的執行和共識進行拆分,避免了兩次執行的問題。根據複製狀態機的原理:起始狀態一致,執行交易順序一致,執行過程是確定的,三個條件都滿足的情況下就可以保證最終結果一定會一致。在區塊鏈中起始狀態由創世塊來保證一致,虛擬機是完全確定的,所以只要保證交易順序一致就可以保證其最終結果一定一致。在區塊鏈中Block 的preHash 已經包含了上個塊交易處理之後的世界狀態信息。 CITA-BFT 對當前區塊的交易順序和上個區塊的執行結果進行共識。這樣在共識過程中不需要去執行交易,而只需要在共識完之後進行一次交易處理,大大提高了整個鏈的吞吐量。 CITA-BFT 是針對區塊鏈連續共識的特點進行了優化,採用了先共識後處理的方式,使得共識的過程不必執行交易,只需要共識完成之後執行一次交易即可。經過驗證,在最簡單的存證交易時,共識性能有35% 左右提升。
CITA-BFT 避免了共識協議最後一輪Leader 廣播的過程。在傳統的PBFT 中在最後的Commit階段,需要Leader 收到足夠的Commit 包並廣播給其他節點。區塊鍊是一個連續共識的過程,在CITA-BFT 中,Block 中共識投票是上一個區塊的投票,所以合併了Commit 階段的Leader 廣播最終區塊過程和下一個高度的Proposal 階段,這樣節省了一輪廣播過程,通過下一個高度Proposal 的過程統一了Commit 投票信息。
CITA-BFT 採用Proposal 預處理技術使共識和執行能夠並行進行,提高了系統性能。由於聯盟鏈在多數情況下,網絡狀況良好能在一輪共識流程中完成共識,CITA 中引入了Proposal預處理的技術:在Pre-prepare 階段,節點在收到Proposal 之後可以直接處理交易,而不必等到共識流程完成,等到共識流程完成之後再將共識結果通知交易處理器。在傳統的PBFT 的過程中,交易處理和共識是串行的,引入Proposal 預處理之後,可以使得共識的Prepare 階段Commit 階段和交易處理並行進行,大大提高了整個系統的吞吐量。經測試,對於簡單的交易處理,有10% 到20% 左右的性能提升。
在CITA 中採用了CompactBlock 的技術來壓縮共識區塊的大小,提高網絡帶寬利用率。 Block中的交易已經單獨廣播過一次,所以共識Block 中只需要包含交易ID 即可,這樣可以大大降低區塊消息的大小。經測試在網絡條件較好的情況下,對於簡單的交易處理,有5% 到10% 的性能提升。
Fabric 共識機制限制業務效率提升
Fabric 將其節點角色分為:排序節點,背書節點,提交節點。客戶端首先將交易請求發送給背書節點,背書節點執行後將read/write set 及其簽名返回給客戶端,客戶端收集到足夠相同的結果後,將read/writeset、多組簽名和交易請求組成簽名後的交易,發送給排序節點,排序節點組成區塊之後,廣播給提交節點,提交節點驗證read/write set 和簽名數是否滿足,標記結果並保存合法的結果到各自的賬本。
FISCO BCOS:
在Fabric 中由於交易的執行是非確定性的,這點不同於FISCO BCOS 和CITA 的設計理念。所以需要背書節點先執行交易,並由客戶端根據背書策略進行對比結果,再發給排序節點,最終由提交節點驗證並更新各自的數據庫。可以理解為:共識狀態的過程是由客戶端、背書節點、提交節點共同參與完成的;排序節點只負責交易順序的共識,而不負責狀態共識。在交易狀態共識和排序可以分別採用不同的策略。比如交易狀態可以採用超過3/4 的狀態一致,而排序節點的共識使用傳統的Raft 或者Solo 共識,採用傳統CFT 共識即可滿足多數場景。這裡的問題是交易中需要包含用戶的簽名,以及多個背書節點的簽名,以及read/write set,這樣導致交易非常大。
Fabric 在交易狀態有衝突時,例如A 和B 之間頻繁轉帳這種場景,因為每筆交易都會修改AB 賬戶的餘額,所以會造成交易衝突。衝突交易每個塊最多只能有一個交易被處理,這將大大限制業務合約的場景。
CITA:
性能對比
CITA共識性能好
傳統的PBFT
共識過程中會重複執行交易,共識效率一般
Fabric:
先共識再執行,只執行一次交易,整體效率較高
優化Commit 階段的Leader 廣播過程,減少共識時間
CompactBlock 技術提高帶寬利用率
應用場景
應用場景
應用場景
對比可以看出FISCO BCOS 採用傳統PBFT,共識效率一般;CITA 採用了自主研發的CITA-BFT,共識和交易處理有50% 以上的性能提升;Fabric 將整個流程拆分為執行、排序、驗證,增加了靈活性,但是驗證和執行的分離導致交易非常大。
Fabric:將共識的流程拆分為執行,排序和驗證,具有更好的靈活性,但是由此帶來交易結構非常大,而且衝突交易每個塊只能上鍊一個交易,大大限制了業務合約的場景。比如對於一個統計投票的合約,有N 個投票者,每個投票人員通過發送交易進行投票,因為總的投票結果是共享狀態,這種情況下每個區塊只能處理一筆交易。比如對於Randao 項目,需要收集參與者的所有提交信息,這個時候就需要一個集合變量來存儲這些信息,由於每個參與者的交易都會修改這個集合變量,導致每個塊只能處理一筆提交交易,並且集合變量會導致read/write set 會非常大。
安全性
擴展性
智能合約
智能合約
二級標題
智能合約
二級標題
智能合約
智能合約一詞有一定的誤導性,智能往往給人帶來一定的神秘色彩,就其合約功能本身來講並無”智能性”。在區塊鏈出現之前,所有的系統都是採用中心化的架構,監管機構和用戶無法驗證和保證系統功能的正確性,無法確保數據未被惡意修改,無法保證數據的安全性。由於區塊鏈的出現,使得在不依賴於第三方的情況下,能夠可信地進行交易,而且交易可追踪無法逆轉。智能合約的核心含義在於:在區塊鏈基礎上實現可信計算,並由區塊鏈協議保證的可追踪和無法逆轉。
在比特幣中交易主要用於點對點的現金支付,以太坊由於引入圖靈完備的智能合約被稱為區塊鏈2.0。雖然理論上以太坊上的智能合約是圖靈完備的,但是受限於交易手續費、合約指令、區塊Gas上限、節點可信度等,公鏈智能合約並不適用於現有的企業開發。
聯盟鏈由於節點數量有限,且節點運營方可以採用高性能的硬件設備,以及底層協議支持等,更適合企業開發。首先本文介紹三者智能合約的技術實現,再分別從安全性、易用性、可用性三方面進行對比分析。
BCOS和CITA均支持EVM和預編譯合約。借助於Ethereum 智能合約的完善的生態系統,兩者都在其基礎之上做了定制化,有豐富的合約編寫和測試工具。
安全性
安全性
安全性
由於Fabric採用了傳統的語言進行合約編寫,雖然開發者不需要學習新的語言,但是由於虛擬機的不確定性,ChainCode的方式只適合Fabric的先執行再共識再驗證的共識方式,並不具備通用性。
安全性是智能合約有別於其他程序的主要特徵,這裡的安全性,包含確定性、可驗證、可審計、可追踪等特性。
易用性
易用性
易用性
BCOS/CITA在合約易用性上略勝於Fabric
可用性
BCOS/CITA/Fabric都可以應對企業複雜的業務邏輯,支持比較複雜的合約計算和處理,同時CITA支持鏈上定時任務。
二級標題
性能
二級標題
性能https://arxiv.org/pdf/1801.10228.pdf經過區塊鏈底層技術最近幾年的發展,聯盟鏈的性能已經不再是其最主要的瓶頸。
CITA在官方文檔中最新版本的交易性能已經可以達到15,000+ TPS,數據來自CITA 0.16 版本(2018年5月15日),在四台32 核,64G 的雲服務器上部署4個節點,每台服務器配置百兆帶寬。
二級標題
二級標題
現階段聯盟的性能已經有了長足的進步,相對落地場景而言,性能已經不再是最主要的瓶頸。同時國產聯盟鏈在性能方面已經不輸於國外的大品牌,甚至已經領先於國外。
二級標題
存儲
區塊鏈的存儲從內容方面講主要包括兩個方面:區塊和交易存儲、世界狀態存儲。本文先分別介紹各自的實現方式,再從支持數據庫類型、存儲效率、可擴展性、數據維護等方面進行對比分析。
實現方式
BCOS的狀態存儲支持兩種存儲模式
對於區塊的保存,BCOS交易列表,交易回執等都採用了傳統的MPT方式保存。對於世界狀態,BCOS採用了兩種存儲模式:storage state和MPT state。 MPT state支持RocksDB和External存儲,MPT存儲在保存歷史狀態的同時,最大化減少存儲數據。 Storage State 支持RocksDB、MySQL、External,使用storage state存儲時,犧牲了部分的可追溯性,但帶來了性能上的提升,同時能支持SQL語句的查詢和統計。因為世界狀態始終是可以通過交易進行還原,所以對於犧牲部分可追溯性而換取性能的提升和狀態查詢是可以接受的。
CITA支持RocksDB、External存儲。使用MPT保存狀態,使用Simple Merkle Tree保存交易和交易回執。對於狀態存儲CITA選擇了經典的MPT存儲,保存歷史狀態的同時,最大化減少存儲數據。而對於交易和交易回執使用Simple Merkle Tree存儲,可以優化存儲數據量和減少Hash計算。
Fabric的區塊存儲,同樣採用了MPT的方式進行保存。對於世界狀態的存儲支持KV和CouchDB存儲,在世界狀態存儲時,Fabric不支持歷史狀態的保存,同時有性能上的提升,並支持豐富的條件查詢和統計。
治理
治理
二級標題
治理
二級標題
治理
聯盟鏈不同於公鏈的最大不同之處在於其治理方式的不同,對於公鏈來講由於其是開放的系統需要一定的經濟激勵來協調不同角色間的關係,而聯盟鏈由於節點是准入機制,所以其治理方式與公鏈有非常大的不同。對於聯盟鏈來講,其治理主要包含:節點管理、帳號權限、經濟模型。
節點管理
對於BCOS和CITA來講,節點主要分為兩類:共識節點和普通節點。共識節點負責共識出塊,普通節點只能同步數據並驗證數據而沒有打包交易的權力。
對於Fabric,節點分為背書節點,排序節點,提交節點。背書節點負責執行交易並返回結果,排序節點負責對交易排序並打包出塊,提交節點負責驗證交易並更新狀態。
對於共識節點BCOS/CITA均採用了系統合約的方式進行管理,節點的增刪需要共識節點進行共識。而Fabric的節點增刪,可以由節點管理員修改配置,無需共識,但是激活新的配置文件需要發送交易並進行共識。
本文認為通過白名單/黑名單的方式或者CA的方式管理節點身份,均能滿足聯盟鏈的大多數場景,CA在對節點身份的驗證方面更加嚴格。
用戶權限管理
對於聯盟鏈來將,聯盟各個角色以及聯盟內均需要比較複雜的權限管理,這樣不同的角色只能訪問屬於自己授權的資源。
在CITA/BCOS中都通過複雜的權限管理,來對用戶的交易權限進行管理,包括發送交易,創建合約,合約方法調用權限等等。
Fabric通過配置文件的方式(Policy)的方式進行管理用戶的權限。
BCOS/CITA權限管理通過交易的方式進行管理,比Fabric通過配置文件的方式修改,更加區塊鏈化,治理操作會保留痕跡。
CITA支持兩種不同的經濟模型
二級標題
二級標題
而CITA又可以支持收費模式,節點對用戶交易精確計費並收取Token手續費。而Token即可以是節點免費分配給用戶,也可以需要用戶有償使用,這樣可以更加精細地控制用戶對系統資源的使用情況。
二級標題
跨鍊和隱私
跨鍊和隱私方案,距離生產環境依然有可優化空間
BCOS引入了群組的方式,使一個節點可以屬於不同群組,而群組的消息、交易、存儲、執行等等完全隔離。
Fabric 的群組概念和BCOS類似,一個節點可以屬於不同群組,不同群組可以使用不同的背書策略。
在CITA中,引入了側鏈技術,側鍊和主鏈之間可以互相通信,側鏈技術距離生產環境依然有可優化的空間。
二級標題
二級標題
二級標題
二級標題
二級標題
對比可以看到BCOS/CITA均支持國密,對國內監管需求較友好;在密碼學算法支持上CITA更全面,除了支持常見的Keccak/Secp256k1之外,也支持更安全性能更好的Keccak/Secp256k1 。
系統架構
二級標題
二級標題
而CITA採用了微服務架構,而且CITA也是全球第一個使用微服務架構的開源區塊鏈。採用微服務架構,可以使節點不僅僅限制在單個物理機器上,這樣對於企業用戶可以用更好的硬件設備去支持節點,有更好的擴展性。由於微服務間通過消息訂閱進行通信,企業用戶可以方便地替換或者增加定制化的服務,方便進行功能擴展。
二級標題
開源協議
這裡簡單介紹下相關的開源協議。
二級標題
二級標題
由此可以看出,BCOS的開源協議對商業應用不夠友好。
二級標題
CITA使用更現代的語言Rust,性能更高同時安全性更可靠
總結
Fabirc:Go實現,由於垃圾回收機制性能比C++弱;







