Hyperledger Fabric - 介紹
官方文檔 給出了 Hyperledger Fabric 的介紹默穴。
本文主要是基于上述文檔缭乘,并根據(jù)自己對區(qū)塊鏈的認知從文檔中提取關(guān)鍵內(nèi)容并進行重新組織署照。
1. 引言
最主流的兩條公鏈 Bitcoin 和 Ethereum,它們的網(wǎng)絡(luò)都是公開的不需要許可的 (public permissionless)譬淳。即它們的網(wǎng)絡(luò)對任何人公開直焙,同時參與者是匿名進行交互的。
隨著區(qū)塊鏈技術(shù)的普及吞琐,更多具有創(chuàng)新性的企業(yè)級應(yīng)用案例也開始嘗試使用區(qū)塊鏈技術(shù)捆探。然而,這里存在幾個比較大的障礙站粟。第一個是黍图,公鏈技術(shù)達不到企業(yè)級應(yīng)用案例需要的性能。第二個是奴烙,對參與者的身份標識是硬性要求助被,如在金融交易中必需的 KYC (Know-Your-Customer) 和 AML (Anti-Money- Laundering)。
對于企業(yè)級應(yīng)用切诀,必須考慮如下需求:
- 參與者必須是可標識的
- 網(wǎng)絡(luò)必須采用許可制 (permissioned)
- 性能上需要很高的交易吞吐率
- 交易確認還需要低延時
- 與商業(yè)交易相關(guān)的交易和數(shù)據(jù)需要隱私性和機密性 (privacy and confidentiality)
雖然也有許多早期的區(qū)塊鏈平臺目前被用于企業(yè)級應(yīng)用揩环,但是 Hyperledger Fabric 從一開始就是為企業(yè)級應(yīng)用而設(shè)計的。下面的內(nèi)容主要介紹 Hyperledger Fabric 本身與其它區(qū)塊鏈平臺的差別幅虑,以及描述部分體系架構(gòu)的設(shè)計動機丰滑。
2. Hyperledger Fabric
Hyperledger Fabric 是開源的企業(yè)級許可制分布式賬本技術(shù) (Distributed Ledger Technology, DLT) 平臺,這與其它流行的 DLT 平臺或區(qū)塊鏈平臺有一些關(guān)鍵的不同倒庵。
- Hyperledger 是由 Linux Foundation 建立的褒墨,Linux Foundation 本身具有非常長和非常成功的開源歷史及開源項目炫刷。Hyperledger 是由多個技術(shù)會員會管理的,Hyperledger Fabric 項目由來自多個組織的人員維護郁妈。它的開發(fā)者社區(qū)包括 35 個組織和將近 200 個開發(fā)者柬唯。
- Fabric 具有高度的模塊化和可配置性的架構(gòu),支持對廣泛范圍企業(yè)應(yīng)用的創(chuàng)新和優(yōu)化圃庭,如:銀行锄奢、金融、保險剧腻、醫(yī)療拘央、人力資源、供應(yīng)鏈书在、和數(shù)字音樂分發(fā)灰伟。
- Fabric 是第一個支持采用通用編程語言編寫智能合約的 DLT 平臺,如 Go, Node.js, Java儒旬,而不是限制于領(lǐng)域特定語言 (domain-specific languages, DSL)栏账。這意味著大多數(shù)企業(yè)已經(jīng)具備開發(fā)智能合約的技能集,而不需要額外的培訓(xùn)來學(xué)習(xí)一門新的語言栈源。
- Fabric 平臺采用的是許可制挡爵,意味著與公開無需許可的網(wǎng)絡(luò)不同的是,參與者已經(jīng)各自有一定了解甚垦,而不是匿名和完全無信任的茶鹃。這意味著,盡管參與者之間可能不會完全信任對方(例如艰亮,他們可能是同一行業(yè)的競爭者)闭翩,但網(wǎng)絡(luò)可以在治理模型下運行,該治理模型是基于參與者之間確實存在的信任而建立的迄埃,例如處理爭議的法律協(xié)議或框架疗韵。
- Fabric 平臺最重要的特色之一是它對可插拔共識協(xié)議的支持,該協(xié)議使平臺可以更有效地進行定制侄非,以適應(yīng)特定的用例和信任模型蕉汪。例如,當部署在單個企業(yè)中或由受信任的機構(gòu)運營時彩库,完全拜占庭式的容錯共識可能被認為是不必要的肤无,并且會嚴重拖累性能和吞吐量。在這種情況下骇钦,崩潰容錯 (crash fault-tolerant, CFT) 共識協(xié)議可能綽綽有余宛渐,而在多方,去中心化的用例中,可能需要更傳統(tǒng)的拜占庭容錯 (byzantine fault tolerant, BFT) 共識協(xié)議窥翩。
- Fabric 利用不需要原生加密貨幣的共識協(xié)議來實現(xiàn)代價昂貴的挖礦操作或智能合約的執(zhí)行业岁。避免使用加密貨幣會降低一些重大的風(fēng)險,并且無需進行加密貨幣挖礦操作就意味著可以以與任何其他分布式系統(tǒng)大致相同的運營成本來部署該平臺寇蚊。
這些差異化設(shè)計功能的結(jié)合使 Fabric 在交易處理 (transaction processing) 和交易確認延遲 (transaction confirmation latency) 方面成為當今性能最好的平臺之一笔时,并實現(xiàn)了交易和智能合約 (在 Fabric 中稱為 chaincode) 的隱私和機密性 (privacy and confidentiality)。
下面我們將更詳細地探討這些差異化功能仗岸。
3. 高度模塊化
Hyperledger Fabric 專門設(shè)計為具有模塊化的體系結(jié)構(gòu)允耿。無論是可插拔共識,可插拔身份管理協(xié)議 (例如 LDAP 或 OpenID Connect)扒怖,密鑰管理協(xié)議還是密碼庫较锡,該平臺將可配置性作為它的設(shè)計核心,這樣可以滿足企業(yè)應(yīng)用需求的多樣性盗痒。
在較高的層次上蚂蕴,F(xiàn)abric 由以下模塊化組件組成:
- ordering service: 可插拔訂單服務(wù)在交易順序上達成共識,然后將區(qū)塊廣播給對端節(jié)點俯邓÷饴ィ可以簡單地類比于比特幣中的挖礦模塊和 P2P 模塊。
- membership service provider: 可插拔成員資格服務(wù)提供者負責(zé)將網(wǎng)絡(luò)中的實體與加密身份相關(guān)聯(lián)稽鞭∧裾可以簡單地認為是 Fabric 中特有的網(wǎng)絡(luò)許可模塊。
- peer-to-peer gossip service: 可選的點對點傳輸服務(wù)通過向其他對等節(jié)點訂購服務(wù)來分發(fā)輸出區(qū)塊川慌〕院伲可以簡單地類比于比特幣中的 P2P 模塊祠乃。
- chaincode: 智能合約 ("chaincode") 在容器環(huán)境 (例如 Docker) 中運行以進行隔離梦重。它們可以用通用編程語言編寫,但不能直接訪問帳本狀態(tài)亮瓷。(?)
- 賬本可以配置為支持各種 DBMS琴拧。
- endorsement and validation policy enforcement: 可插拔的認可和驗證策略實施,可以針對每個應(yīng)用程序進行獨立配置嘱支◎拘兀可以簡單地類比于比特幣的礦工,但是這里更像是聯(lián)盟鏈中的各個組織除师,而且單個組織可以只和特定的邏輯掛鉤沛膳,可以簡單類比于以太坊 2.0 中的分片技術(shù)。
業(yè)界普遍認為汛聚,沒有一個區(qū)塊鏈可以全部統(tǒng)治锹安。可以通過多種方式配置 Hyperledger Fabric,以滿足多種行業(yè)用例的不同解決方案要求叹哭。
4. 許可制區(qū)塊鏈 VS 無需許可制區(qū)塊鏈
在無需許可的區(qū)塊鏈中忍宋,幾乎任何人都可以參與,且每個參與者都是匿名的风罩。在這種情況下糠排,除了一定高度之前的區(qū)塊鏈狀態(tài)是不可變的之外,別無其他信任超升。為了解決這種缺乏信任的場景入宦,無需許可的區(qū)塊鏈采用工作量證明 (Proof Of Work, POW) 共識機制,并提供原生的加密貨幣作為激勵室琢。
在許可制區(qū)塊鏈中云石,參與者是具有身份標識的,且大多數(shù)還經(jīng)過了審核研乒,因此整個網(wǎng)絡(luò)是在具有一定程度信任的治理模型下運行的汹忠。許可制區(qū)塊鏈提供了一種方法來保護一組具有共同目標但可能不會完全相互信任的實體之間的交互。通過依賴參與者的身份雹熬,許可制區(qū)塊鏈可以使用更傳統(tǒng)的崩潰容錯 (CFT) 或拜占庭容錯 (BFT) 共識協(xié)議宽菜,這些協(xié)議不需要昂貴挖礦成本。
在這種許可制的情況下竿报,參與者通過智能合約有意引入惡意代碼的風(fēng)險得以降低铅乡。首先,參與者是相互了解的烈菌,并且遵循針對網(wǎng)絡(luò)和相關(guān)交易類型建立的認可政策阵幸,所有活動 (無論是提交應(yīng)用程序交易,修改網(wǎng)絡(luò)配置還是部署智能合約) 都記錄在區(qū)塊鏈上芽世。與完全匿名不同的挚赊,這可以根據(jù)治理模型的條款輕松地確定有罪的一方并處理惡意事件。
5. 智能合約
智能合約济瓢,或者在 Fabric 中稱為 "chaincode"荠割,是一種受信任的分布式應(yīng)用程序,可從區(qū)塊鏈和對等節(jié)點之間的共識機制中獲得安全性/信任旺矾。用以實現(xiàn)區(qū)塊鏈應(yīng)用程序的業(yè)務(wù)邏輯蔑鹦。
應(yīng)用智能合約的三個要點,尤其是將其應(yīng)用于平臺時:
- 網(wǎng)絡(luò)中能夠同時運行許多智能合約
- 它們可以動態(tài)部署 (在許多情況下箕宙,任何人都可以部署)
- 應(yīng)用程序代碼應(yīng)被視為不受信任嚎朽,甚至可能是惡意的
現(xiàn)有的大多數(shù)具有智能合約功能的區(qū)塊鏈平臺都遵循一種訂單執(zhí)行 (order-execute) 架構(gòu),其中的共識協(xié)議為:
- order: 驗證并訂購交易柬帕,然后將其傳播到所有對等節(jié)點
- execute: 然后哟忍,每個對等節(jié)點依次執(zhí)行交易
order-execute 架構(gòu)實際上可以在所有現(xiàn)有的區(qū)塊鏈系統(tǒng)中找到室囊,從以太坊等公共/非許可平臺 (基于 PoW 的共識) 到 Tendermint,Chain 和 Quorum 等許可平臺魁索。
在以 order-execute 架構(gòu)運行的區(qū)塊鏈中執(zhí)行的智能合約必須具有確定性融撞。否則,可能永遠無法達成共識粗蔚。為了解決非確定性問題尝偎,許多平臺要求以非標準或特領(lǐng)域的語言 (例如 Solidity) 編寫智能合約,以便消除非確定性操作鹏控。這阻礙了廣泛采用致扯,因為它要求開發(fā)人員編寫智能合約來學(xué)習(xí)一種新語言,并可能導(dǎo)致編程錯誤当辐。
此外抖僵,由于所有交易由所有節(jié)點順序執(zhí)行,因此性能和規(guī)模受到限制缘揪。智能合約代碼在系統(tǒng)中的每個節(jié)點上執(zhí)行的事實要求采取復(fù)雜的措施來保護整個系統(tǒng)免受潛在的惡意合約的侵害耍群,以確保整個系統(tǒng)的彈性。
6. Fabric 提供全新的方法來執(zhí)行智能合約
Fabric 為交易引入了一種新的架構(gòu)找筝,稱之為 execute-order-validate蹈垢。它通過將交易流分為三個步驟來解決 order-execute 模型面臨的彈性、靈活性袖裕、可伸縮性曹抬、性能和機密性挑戰(zhàn):(?)
- execute: 執(zhí)行交易并檢查其正確性,從而認可 (endorsing) 該交易
- order: 通過 (可插拔) 共識協(xié)議 order 交易
- validate: 在將交易提交到賬本之前急鳄,根據(jù)特定于應(yīng)用程序的背書策略 (endorsement policy) 驗證交易
這種設(shè)計與 order-execute 范式完全不同谤民,F(xiàn)abric 在達成交易的最終協(xié)議之前執(zhí)行交易。
在 Fabric 中疾宏,特定于應(yīng)用程序的背書策略指定需要其中的哪些對端節(jié)點保證給定智能合約的正確執(zhí)行张足。因此,每筆交易只需要由滿足交易認可策略所需的對端節(jié)點的子集執(zhí)行 (認可) 即可灾锯。這允許并行執(zhí)行兢榨,從而提高了系統(tǒng)的整體性能和規(guī)模。第一階段還消除了任何不確定性顺饮,因為不一致的結(jié)果可以在 order 前濾除。
因為消除了不確定性凌那,所以 Fabric 是第一個啟用通用編程語言使用的區(qū)塊鏈技術(shù)兼雄。在 1.4.3 版本中,可以使用 Go帽蝶、Node.js赦肋、Java 編寫智能合約。
注釋
這里嘗試對 execute-order-validate 進行類比以加深理解,這里與以太坊 2.0 進行類比佃乘。以太坊 2.0 包含分片節(jié)點和中繼節(jié)點囱井,各分片節(jié)點之間可以執(zhí)行不同的合約,各分片內(nèi)部維護片內(nèi)本身的共識趣避,再由中繼節(jié)點維護各分片之間的共識庞呕,從而維護以太坊網(wǎng)絡(luò)的整體共識。那么程帕,這里把 order 服務(wù)類比于中繼節(jié)點住练,execute 的節(jié)點為分片節(jié)點,根據(jù)業(yè)務(wù)邏輯劃分成不同的分片節(jié)點愁拭,即聯(lián)盟鏈的組織節(jié)點讲逛。之間,通過 channel 進行連接岭埠。
7. 隱私性和機密性
正如前面已經(jīng)討論的那樣盏混,在一個利用 POW 作為共識模型的公共無許可的區(qū)塊鏈網(wǎng)絡(luò)中,交易在每個節(jié)點上執(zhí)行惜论。這意味著合約本身和其所處理的交易數(shù)據(jù)都不會保密括饶。每個交易及其實現(xiàn)的代碼對于網(wǎng)絡(luò)中的每個節(jié)點都是可見的。在這種情況下来涨,我們已經(jīng)將合約和數(shù)據(jù)的機密性換成了 POW 交付的拜占庭容錯共識图焰。
對于許多企業(yè)級應(yīng)用而言,缺乏機密性可能會成為問題蹦掐。例如技羔,在供應(yīng)鏈合作伙伴網(wǎng)絡(luò)中,可能會為某些消費者提供優(yōu)惠價格卧抗,以鞏固關(guān)系或促進額外銷售藤滥。如果每個參與者都能看到每份合約和交易,那么就不可能在完全透明的網(wǎng)絡(luò)中維持這種業(yè)務(wù)關(guān)系–每個人都希望獲得優(yōu)惠的價格社裆!
再舉一個例子拙绊,考慮證券行業(yè),在該行業(yè)中泳秀,建立倉位 (或出售倉位) 的交易者不希望競爭對手知道這一點标沪,否則他們將尋求參與競爭,從而削弱了交易者的競爭能力嗜傅。
為了解決企業(yè)級應(yīng)用對隱私和機密性的需求金句,區(qū)塊鏈平臺采用了多種方法。所有的平臺都有其取舍吕嘀。
加密數(shù)據(jù)是提供機密性的一種方法违寞。但是贞瞒,在利用 POW 達成共識的無許可網(wǎng)絡(luò)中,加密數(shù)據(jù)位于每個節(jié)點上趁曼。如果有足夠的時間和計算資源军浆,則可能會破壞加密。對于許多企業(yè)級應(yīng)用而言挡闰,其信息可能遭到破壞的風(fēng)險是無法接受的乒融。
零知識證明 (Zero knowledge proofs, ZKP) 是為解決此問題而正在探索的另一個研究領(lǐng)域,這里的權(quán)衡是尿这,目前計算 ZKP 需要大量時間和計算資源簇抵。因此,在這種情況下的權(quán)衡是為了保密射众。
的利用可替代共識機制的許可制上下文中碟摆,人們可能會探索一些將機密信息僅分配給授權(quán)節(jié)點的方法。
Hyperledger Fabric 是采用許可制的平臺叨橱,可通過其通道 (channel) 架構(gòu)實現(xiàn)機密性典蜕。本質(zhì)上,F(xiàn)abric 網(wǎng)絡(luò)上的參與者可以在參與者的子集之間建立一個“通道”罗洗,該通道應(yīng)被授予特定交易集的可見性愉舔。將此視為網(wǎng)絡(luò)覆蓋。因此伙菜,只有那些參與通道的節(jié)點才能訪問智能合約 (鏈碼, chaincode) 和交易的數(shù)據(jù)轩缤,從而保留了兩者的隱私和機密性。
為了改善其隱私和機密性功能贩绕,F(xiàn)abric 增加了對私有數(shù)據(jù) (private data) 的支持火的,并在未來開發(fā)可用的零知識證明 (ZKP)。隨著它的可用淑倾,將對此進行更多介紹馏鹤。
8. 可插拔的共識機制
交易的順序被委托給模塊化組件以實現(xiàn)共識,該組件在邏輯上與執(zhí)行交易并維護帳本的對端節(jié)點分離娇哆。具體來說就是訂購 (ordering) 服務(wù)湃累。由于共識是模塊化的,因此可以根據(jù)特定部署或解決方案的信任假設(shè)量身定制其實現(xiàn)碍讨。這種模塊化體系結(jié)構(gòu)允許平臺依賴完善的工具包來進行 CFT (崩潰容錯) 或 BFT (拜占庭容錯) 排序治力。
Fabric 當前提供兩種 CFT 訂購服務(wù) (ordering service) 實現(xiàn)。第一個基于 Raft 協(xié)議 的 etcd 庫垄开。另一個是 Kafka (內(nèi)部使用 Zookeeper)琴许。有關(guān)當前可用訂購服務(wù) (ordering service) 的信息,請查看有關(guān)訂購的概念性文檔溉躲。
還要注意榜田,它們不是互斥的。Fabric 網(wǎng)絡(luò)可以具有支持不同應(yīng)用程序或應(yīng)用程序需求的多種訂購服務(wù)锻梳。
注釋
共識機制在與對端節(jié)點獨立的模塊組件中實現(xiàn)箭券。
9. 性能和可擴展性
區(qū)塊鏈平臺的性能可能會受到許多變量的影響,例如交易大小疑枯,區(qū)塊大小辩块,網(wǎng)絡(luò)規(guī)模,以及硬件限制等荆永。Hyperledger 社區(qū)目前正在性能和規(guī)模工作組內(nèi)制定 一套措施草案废亭。以及稱為 Hyperledger Caliper 的基準測試框架的相應(yīng)實現(xiàn)。
盡管這項工作仍在繼續(xù)發(fā)展具钥,應(yīng)被視為衡量區(qū)塊鏈平臺性能和規(guī)模特征的權(quán)威豆村,但 IBM Research 的一個團隊發(fā)表了一篇 同行評審論文,評估了 Hyperledger Fabric 的體系結(jié)構(gòu)和性能骂删。本文提供了關(guān)于 Fabric 架構(gòu)的深入討論掌动,然后使用 Hyperledger Fabric v1.1 的預(yù)發(fā)行版報告了團隊對該平臺的性能評估。
研究團隊所做的基準測試工作為 Fabric v1.1.0 發(fā)行版帶來了許多性能改進宁玫,使平臺的整體性能比 v1.0.0 發(fā)行版提高了一倍以上粗恢。
10. 結(jié)論
任何對區(qū)塊鏈平臺的認真評估都應(yīng)在其短名單中包括 Hyperledger Fabric。
結(jié)合起來欧瘪,F(xiàn)abric 的差異化功能使其成為用于許可制區(qū)塊鏈的高度可擴展系統(tǒng)眷射,支持靈活的信任假設(shè),使該平臺能夠支持從政府佛掖,金融妖碉,供應(yīng)鏈物流,醫(yī)療保健等廣泛的行業(yè)用例苦囱。
更重要的是嗅绸,Hyperledger Fabric 是 (當前) 十個 Hyperledger 項目中最活躍的。該平臺周圍的社區(qū)正在穩(wěn)步增長撕彤,并且每個后續(xù)版本提供的創(chuàng)新遠遠超過了其他任何企業(yè)區(qū)塊鏈平臺鱼鸠。
Reference
Introduction, https://hyperledger-fabric.readthedocs.io/en/latest/whatis.html
Introduction, https://hyperledger-fabric.readthedocs.io/en/release-1.4/whatis.html
Tendermint, https://tendermint.com/
Chain, http://chain.com/
Quorum, https://www.goquorum.com/
Raft 協(xié)議, https://raft.github.io/raft.pdf
etcd 庫, https://etcd.io/
Kafka, https://kafka.apache.org/
Zookeeper, https://zookeeper.apache.org/
項目源代碼
項目源代碼會逐步上傳到 Github,地址為 https://github.com/windstamp羹铅。
Contributor
- Windstamp, https://github.com/windstamp