1-Hyperledger Fabric概念詳解

_清風拂山崗發表於2021-04-13

Hyperledger Fabric

一.Hyperledger Fabric概述

Hyperledger Fabric是由IBM公司主導開發的一個面向企業級客戶的開源專案。與比特幣和以太坊這類公有鏈不同,Hyperledger Fabric 網路的成員需要從可信賴的 成員服務提供者(MSP)註冊經過授權認證後才能加入網路。從而避免了POW資源開銷,大幅提高了交易處理效率。

二.基本術語

1.共享賬本ledger

Hyperledger Fabric 中的賬本由世界狀態(world state)區塊鏈這兩部分組成,它們彼此不同但卻相互關聯。其中世界狀態由區塊鏈決定。

  • 世界狀態是一個資料庫(leveldb、couchdb),它儲存了一組賬本狀態的當前值。通過世界狀態,程式可以直接訪問一個賬本狀態的當前值,不需要遍歷整個交易日誌來計算當前值。預設情況下,賬本狀態是以鍵值對的方式來表示的,因為我們可以建立、更新和刪除狀態,所以世界狀態能夠頻繁更改。

  • 區塊鏈是交易日誌,採用Merkle Tree結構,不可篡改,它記錄了促成當前世界狀態的所有改變。交易被收集在附加到區塊鏈的區塊中,能幫助我們理解所有促成當前世界狀態的改變的歷史。

2.通道Channel

通道是fabric中特別重要的概念。可大致理解為私有的子網路,通道中的節點共同維護賬本,實現資料的隔離和保密。通道是特定網路成員之間的專用通訊層,只能由被邀請加入通道的組織使用,並且對網路的其他成員不可見。每個channel對應一個賬本,由加入該channel的peer維護,一個peer可以加入多個channel,維護多個賬本。

3.組織Org

即Orginazation,管理一系列成員的組織。一個channel內可以有多個組織。

4.智慧合約Chaincode

又稱鏈碼,Hyperledger Fabric 智慧合約用 Go、Node.js 和 Java 語言編寫,當該應用程式需要與賬本互動時,由區塊鏈外部的應用程式呼叫。在大多數情況下,鏈碼只與賬本的資料庫、世界狀態(例如,查詢)互動,而不與交易日誌互動。

5.背書Endorse

指一個節點執行了一個交易並對結果進行簽名後返回響應的過程。

6.各種節點

6.1客戶端節點

客戶端必須連線到某一個peer節點或排序服務節點上才能與區塊鏈網路進行通訊。客戶端向背書節點(endorser)提交交易提案(transaction proposal),收集到足夠背書(可理解為擔保)後,向排序服務廣播交易提案,進行排序,生成區塊。

6.2peer節點(包含Committer,Endorser,Leader,Anchor這幾種狀態)

  • 提交節點(Committer):通道中的每個 Peer 節點都是一個提交節點。他們會接收生成的區塊,在這些區塊被驗證之後會以附加的方式提交到 Peer 節點的賬本副本中。
  • 背書節點(Endorser):部分節點還會執行交易並對結果進行簽名背書,背書節點是動態的角色,是與具體鏈碼繫結的。每個鏈碼在例項化的時候都會設定背書策略,指定哪些節點對交易背書後交易才是有效的。並且只有應用程式向它發起交易背書請求的時候才是背書節點,其他時候都是普通的提交節點,只負責驗證交易並提交。背書節點也無法通過配置檔案指定,而是由發起交易請求的客戶端指定,背書節點可以有多個。
  • 主節點(Leader):當組織在通道中具有多個 Peer 節點的時候,會有一個主節點,它負責將交易從排序節點分發到該組織中其他的提交節點。有兩套選取主節點的方式,一套是靜態選擇的主節點,另一套是動態選舉的主節點。對於靜態選擇,0個或者多個節點可以被配置為主節點。對於動態選舉,一個節點會被選舉成為主節點。另外,在動態選舉主節點中,如果一個主節點出錯了,那麼剩下的節點將會重新選舉一個主節點。
  • 錨節點(Anchor):peer節點還可以是錨節點(anchor peer),錨節點主要負責代表組織和其他組織進行資訊交換。每個組織都有一個錨節點,錨節點對於組織來說非常重要,如果錨節點出現問題,當前組織就會與其他組織失去聯絡。錨節點的配置資訊是在configtxgen模組的配置檔案configtx.yaml中配置的。

6.3排序服務節點orderer

接收包含背書籤名的交易,對未打包的交易進行排序生成區塊,提供Gossip 協議的廣播給peer節點。排序服務提供的是原子廣播,保證同一個鏈上的節點接收到相同的資訊,並且有相同的邏輯順序,完成區塊資訊的同步工作。

6.4CA(Certificate Authority 證照頒發機構)節點

由伺服器和客戶端組成,CA節點接收客戶端的註冊申請,返回註冊密碼用於使用者登入,以便獲取身份證照。區塊鏈上的所有操作都需要驗證使用者身份。

7.公鑰基礎結構PKI

PKI(Public Key Infrastructure),是一組網際網路技術,可在網路中提供安全通訊。

PKI有四個關鍵要素:數字證照公鑰和私鑰證照授權中心證照撤銷列表

8.成員服務提供者MSP

MSP(Membership Service Provider),一個 MSP 是定義管理該組織有效身份規則的元件。Fabric 中預設的 MSP 實現使用 X.509 證照作為身份,採用傳統的公鑰基礎結構PKI分層模型。(PKI提供身份列表,MSP將身份轉化為網路成員。)

要在Fabric網路上進行交易,成員需要這樣做:

  1. 擁有一個由網路信任的CA頒發的身份。
  2. 成為一個被網路成員認可和認可的組織的成員。MSP將身份與組織的成員資格聯絡在一起。成員資格是通過將成員的公鑰(也稱為證照、簽名證照或簽證)新增到組織的MSP來實現的。
  3. 將MSP新增到網路上的一個聯盟 或者通道。
  4. 確保MSP包括在網路中的策略 定義。

9.共識

在一個賬本的更新被應用到 Peer 節點的本地賬本之前, Peer 節點會請求網路中的其他 Peer 節點來批准這次更新。這個過程被稱為共識

fabric中使用的共識可以分為:solokafkaPBFTRaft(注:solo和kafka在fabric2.0版本中已被棄用,PBFT是fabric0.6版本)

(瞭解更多PBFT概念可以參考PBFT共識演算法詳解;瞭解更多Raft概念可以參考Raft共識演算法詳解

共識包含如下三個階段:

  • 提案階段:客戶端向交易背書節點傳送一個交易提案,背書節點通過交易模擬執行後返回給客戶端背書結果及簽名
  • 排序和打包階段:客戶端將背書後的結果及簽名交給排序節點排序並且打包進區塊。
  • 驗證和提交階段:排序節點生成區塊向全網廣播,記賬節點收到這些區塊後,先驗證其正確性,驗證通過後存入本地帳本中。

10.策略

策略是一組規則,用來定義如何做出決策和實現特定結果。策略是使 Hyperledger Fabric 不同於其他區塊鏈系統(比如 Ethereum 或者 Bitcoin)的內容之一。在其他系統中,交易可以在網路中的任意節點生成和驗證。治理網路的策略可以在任何時間及時修復,並且只可以使用和治理程式碼相同的方式進行變更。因為 Fabric 是授權區塊鏈,使用者由底層基礎設施識別,所以使用者可以在啟動前決定網路的治理方式,以及改變正在執行的網路的治理方式

三.交易流程

以下是fabric的經典交易流程,所有涉及到對賬本資料更新的操作都是基於這個交易流程來完成的。

網路節點架構圖

image-20210410153946200

交易流程總圖

image-20210410154010251

1.傳送交易提案

應用程式使用相應的 SDK(Node,Java,Python,Golang)提供的 API 構建交易提案並提交給相應的背書節點,交易提案中包含:

channelID:通道資訊
chaincodeID:要呼叫的鏈碼資訊
timestamp:時間戳
sign:客戶端的簽名
txPayload:提交的事務本身包含的內容,包含兩項
operation:要呼叫的鏈碼的函式及相應的引數
metadata:呼叫的相關屬性

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

在接收來自客戶端的訊息時,背書節點首先驗證客戶端的簽名clientSig(使用MSP),然後模擬事務。背書節點會呼叫鏈碼模擬執行交易提案,產生包括響應值、讀寫集的事務結果(讀寫集是交易中記錄的主要內容)。這些執行不會更新賬本。

3.返回提案響應

背書節點會對讀寫集進行背書(Endorse)簽名,生成提案響應(Proposal response)並返回給應用程式。

4.交易排序並分發

應用程式根據接收到的提案響應生成交易,併傳送給排序服務節點(Orderer節點)。交易請求被提交到Ordering服務節點,該事務包含讀/寫,背書籤名和通道ID;Orderer節點接收到事務請求之後,並不需要檢查交易中的具體資料,它只是從網路中的所有通道接收交易,按時間順序對它們進行全排序,並建立交易區塊。之後廣播給同一通道內所有組織的leader節點。

5.交易驗證並提交

記賬節點對接收到的區塊進行驗證(交易訊息結構是否正確、是否重複、是否有足夠的背書、讀寫集版本(防止了雙花問題),通過驗證後將結果寫入到本地的分類賬本中。驗證不通過的交易會被標記無(Invalid)。

6.賬本更新

每個peer節點都會將該塊附加到通道鏈中,並且對於每個有效事務,寫集都將提交到當前狀態資料庫。發出一個事件,以通知客戶端應用程式交易(呼叫)已被不可變地附加到鏈上,並通知交易是否有效或無效。

相關文章