1. 程式人生 > >【鏈塊技術55期】超級賬本Fabric教程(三):Hyperledger Fabric 1.0架構及原理

【鏈塊技術55期】超級賬本Fabric教程(三):Hyperledger Fabric 1.0架構及原理

原文連結:超級賬本Fabric教程(三):Hyperledger Fabric 1.0架構及原理

 

如果說以比特幣為代表的貨幣區塊鏈技術為 1.0,以以太坊為代表的合同區塊鏈技術為 2.0,那麼實現了完備的許可權控制和安全保障的 Hyperledger 專案毫無疑問代表著區塊鏈技術 3.0時代的到來。

Hyperledger 專案目前主要包括Fabric,Sawtooth Lake,Iroha,Blockchain-explorer等等子專案。下面我們來了解一下核心子專案Fabric最新版本是1.0的架構,原理及一個典型的交易過程,最後總結一下Fabric的優點。

 

一、Fabric 1.0架構簡介

01區塊鏈技術-Fabric1.0架構及原理-一、架構簡介.jpg

如上圖所示,Fabric架構的核心包括三部分:Identity, Ledger及Transactions, Smart Contact.

 

1. Identity

Identity,也就是身份管理,Fabric是目前為止在設計上最貼近聯盟鏈思想的區塊鏈。聯盟鏈考慮到商業應用對安全、隱私、監管、審計、效能的需求,提高准入門檻,成員必須被許可才能加入網路。Fabric成員管理服務為整個區塊鏈網路提供身份管理、隱私、保密和可審計的服務。成員管理服務通過公鑰基礎設施PKI和去中心化共識機制使得非許可的區塊鏈變成許可制的區塊鏈。

 

2. Smart Contract

Fabric的智慧合約smart contract稱為鏈碼chaincode,是一段程式碼,它處理網路成員所同意的業務邏輯。和以太坊相比,Fabric鏈碼和底層賬本是分開的,升級鏈碼時並不需要遷移賬本資料到新鏈碼當中,真正實現了邏輯與資料的分離。

鏈碼可採用Go、Java、Node.js語言編寫。鏈碼被編譯成一個獨立的應用程式,fabric用Docker容器來執行chaincode,裡面的base映象都是經過簽名驗證的安全映象,包括OS層和開發chaincode的語言、runtime和SDK層。一旦chaincode容器被啟動,它就會通過gRPC與啟動這個chaincode的Peer節點連線。

 

3. Ledger | Transcations

Fabric使用建立在HTTP/2上的P2P協議來管理分散式賬本。採取可插拔的方式來根據具體需求來設定共識協議,比如PBFT,Raft,PoW和PoS等。

 

4. Ledger

02區塊鏈技術-Fabric1.0架構及原理-一、ledger.jpg

如上圖所示,賬本Ledger主要包含兩塊:blockchain和state。blockchain就是一系列連在一起的block,用來記錄歷史交易。state對應賬本的當前最新狀態,它是一個key-value資料庫,Fabric預設採用Level DB, 可以替換成其他的Key-value資料庫,如Couch DB。舉個例子。我們採用區塊鏈實現一個彈珠交易的系統。我們開發了一個Chaincode,每個彈珠有以下幾個屬性:Name, owner, color, size.  可以定義一個JSON物件,用name做KEY, JSON物件做Value,儲存在Level DB或者CouchDB中。

 

5. transcation

Fabric上的transction交易分兩種,部署交易和呼叫交易。

 

5.1 部署交易:

把Chaincode部署到peer節點上並準備好被呼叫,當一個部署交易成功執行時,Chaincode就被部署到各個peer節點上。好比把一個web service或者EJB部署到應用伺服器上的不同例項上。

 

5.2 呼叫交易:

客戶端應用程式通過Fabric提供的API呼叫先前已部署好的某個chaincode的某個函式執行交易,並相應地讀取和寫入KV資料庫,返回是否成功或者失敗。

 

5.3 APIs, Events, SDKs

Fabric提供API方便應用開發,對服務端的ChainCode,目前支援用Go、Java或者Node.js開發。對客戶端應用,Fabric目前提供Node.js和Java SDK。未來計劃提供Python 和Go SDK,Fabric還提供RESTAPI。對於開發者,還可以通過CLI快速去測試chaincode,或者去查詢交易狀態。在區塊鏈網路裡,節點和chaincode會發送events來觸發一些監聽動作,方便與其他外部系統的整合。

 

二、Fabric 1.0應用開發流程

如下圖所示,開發者建立客戶端應用和智慧合約(chaincode),Chaincode被部署到區塊鏈網路的Peer節點上面。通過chaincode來操作賬本,當你呼叫一個交易transaction時,你實際上是在呼叫Chaincode中的一個函式方法,它實現業務邏輯,並對賬本進行get, put, delete操作。客戶端應用提供使用者互動介面,並提交交易到區塊鏈網路上。

03區塊鏈技術-Fabric1.0架構及原理-二、區塊鏈網路上.jpg

 

2.1 Fabric 1.0業務網路

業務網路,也叫共識網路或區塊鏈網路,由不同的節點構成。節點是區塊鏈的通訊實體,節點是一個邏輯概念,不同型別的節點可以執行在同一臺物理伺服器上。這些節點可能部署在雲上面或者本地。可能來自不同的公司或者組織。在區塊鏈網路中有兩種型別的節點:Peer節點和Orderer節點,如下圖所示。

04區塊鏈技術-Fabric1.0架構及原理-三、peer節點.jpg

Peer節點:chaincode部署在Peer節點上,它對賬本進行讀寫操作。一個Peer節點可以充當多種角色,如背書者endorser,提交者committer。一個區塊鏈網路中會有多個Peer節點。

Orderer節點:對交易進行排序,批量打包,生成區塊,發給Peer節點。一個區塊鏈網路中會有多個Orderer節點,它們共同提供排序服務。排序服務可以別實現為多種不同的方式,從一箇中心化的服務(被用於開發和測試,如Solo),到分散式協議(如Kafka)。

排序服務提供了通向客戶端和Peer節點的共享通訊通道。提供了包含交易的訊息廣播服務(broadcast和deliver)。客戶端可以通過這個通道向所有的節點廣播(broadcast)訊息。通道可以向連線到該通道的節點投遞(deliver)訊息。

排序服務支援多通道,類似於釋出/訂閱訊息系統中的主題topic。客戶端和Peer節點可以連線到一個給點的通道,並通過給定的通道傳送和接收訊息。多通道使得Peer節點可以基於應用訪問控制策略來訂閱任意數量的通道;也就是說,應用程式在指定Peer節點的子集中架設通道。這些peer組成提交到該通道交易的相關者集合,而且只有這些peer可以接收包含相關交易的區塊,與其他交易完全隔離,實現資料隔離和保密。

此外,peers的子集將這些私有塊提交到不同的賬本上,允許它們保護這些私有交易,與其他peers子集的賬本隔離開來。應用程式根據業務邏輯決定將交易傳送到1個或多個通道。

05區塊鏈技術-Fabric1.0架構及原理-三、多個通道.jpg

例如,如上圖所示,peer 1,2和N訂閱紅色通道,並共同維護紅色賬本; peer 1和N訂閱藍色通道並維護藍色賬本;類似地,peer 2和peer N在黑色通道上並維護黑色賬本。

在這個例子中,peer N在訂閱了所有通道,我們看到每個通道都有一個相關的賬本。一般來說,我們稱不涉及所有peer的賬本為子賬本,另一種是系統賬本,即全賬本。

 

三、Fabric 1.0交易流程

Fabric1.0一個典型的交易流程如下圖所示:

06區塊鏈技術-Fabric1.0架構及原理-四、客戶端構造交易提案.jpg

 

1.客戶端構造交易提案

客戶端應用程式利用任意SDK(Node.js,java,python)構造交易提案propose。該提案是一個呼叫智慧合約功能函式的請求,用來確認哪些資料可以讀取或寫入賬本。

客戶端把交易提案發送給一個或多個Peer節點,交易提案中包含本次交易要呼叫的合約標識、合約方法和引數資訊以及客戶端簽名等。

SDK將交易提案打包為可識別的格式(如gRPC上的protocolbuffer),並使用使用者的加密憑證為該交易提案生成唯一的簽名。

03區塊鏈技術-Fabric1.0架構及原理-.jpg

 

2.背書節點模擬執行交易

背書節點endorser收到交易提案後,驗證簽名並確定提交者是否有權執行操作。背書節點將交易提案的引數作為輸入,在當前狀態KV資料庫上執行交易,生成包含執行返回值、讀操作集合和寫操作集合的交易結果(此時不會更新賬本),這些值的集合、背書節點的簽名和背書結果(YES / NO)作為提案的結果返回給客戶端SDK,SDK解析這些資訊判斷是否應用於後續的交易。

 

3.客戶端把交易傳送到共識服務

應用程式(SDK)驗證背書節點簽名,並比較各節點返回的提案結果,判斷提案結果是否一致以及是否參照指定的背書策略執行。

客戶端收到各個背書節點的應答後,打包到一起組成一個交易並簽名,傳送給Orderers。

 

4.共識排序,生成新區塊,提交交易

Orderers對接收到的交易進行共識排序,然後按照區塊生成策略,將一批交易打包到一起,生成新的區塊,呼叫deliver API投遞訊息,傳送給提交節點。

提交節點收到區塊後,會對區塊中的每筆交易進行校驗,檢查交易依賴的輸入輸出是否符合當前區塊鏈的狀態,完成後將區塊追加到本地的區塊鏈,並修改K-V狀態資料庫。

 

四、Fabric 1.0優勢總結

 

1. 完備的許可權控制和安全保障

成員必須被許可才能加入網路,通過證書,加密,簽名等手段保證安全。通過多通道功能,保證只有參與交易的節點能訪問到資料,其他的節點看不到。滿足資料保護方面的法律法規要求。如有些行業,需要知道誰訪問了特定的資料。

 

2. 模組化設計,可插拔架構

如狀態資料庫可採用Level DB或者Couch DB,或其他的key-value資料庫。

身份管理(identity management)可以採用自己的。共識機制和加密演算法也是可插拔的,可以根據實際情況選擇替換。

 

3. 高效能,可擴充套件,較低的信任要求

Fabric採用模組化架構把交易處理劃分為3個階段:通過Chaincode進行分散式業務邏輯處理和協商(endorsers);交易排序(orderders);交易的驗證和提交(committers)。這樣劃分帶來的好處:不同的階段由不同的節點(角色endorsers, orderders, committers)參與,不需要全網的節點都參與。網路的效能和擴充套件性得到優化。Peer節點和Orderder節點可以獨立擴充套件,並可以動態增加。

因為只有endorsers和committers能真正交易的內容。只需要較低的信任要求就可以保證安全。

 

4. 在不可更改的分散式賬本上提供豐富的查詢功能

可以在Level DB上進行按key查詢,按複合KEY查詢,按KEY的範圍查詢。如果採用Couch DB,Couch DB是文件資料庫,資料是JSON格式的。除了支援按key查詢,按複合KEY查詢,按KEY的範圍查詢外,還支援全文搜尋。

-END-