斜槓工程師的問題筆記

Hyperledger Fabric 筆記(一)

Hyperledger Fabric:架構、組成與運行機制

本系列文章是以 Blockchain with Hyperledger Fabric, Second Edition 書中的內容為基礎,配合一些實務上遇到的問題所做的筆記。

Hyperledger Fabric是一個企業級的區塊鏈平台,主要提供模組化與可擴展的解決方案,以滿足業務網路的需求。這篇文章描述其主要的組成元素、設計原則、參考架構、運行機制及驗證過程。

Hyperledger Fabric的組成元素

Hyperledger Fabric有三個重要的組成元素:

  1. 成員管理(Membership Service) 成員管理服務負責頒發和管理網路中成員的憑證。雖然Hyperledger Fabric提供了自己的成員管理服務(Hyperledger Fabric CA),但用戶也可以使用任何能夠頒發EC證書的系統(基於X509的PKI)。

  2. 排序節點(Dedicated Orderer Nodes) 排序節點的主要功能是將新創建的區塊廣播至區塊鏈網路中。Hyperledger Fabric提供了三種類型的排序方式:Solo(適用於開發測試)、Raft(適用於生產環境)和Kafka(具有高容錯性)。排序服務是可插拔的,只需實現基於gRPC接口定義的原子廣播API(Atomic-Broadcast API)即可。

  3. 節點(Peers) 節點負責執行智能合約並維護帳本。具體來說,節點負責:

  • 背書交易(Endorsement):執行但不提交交易。
  • 從排序節點接收批量背書交易,然後驗證並提交交易,以消除非確定性。

Hyperledger Fabric的設計原則

Hyperledger Fabric的設計基於以下幾個核心原則:

  1. 可模組化與可擴展性 Hyperledger Fabric的架構設計允許用戶根據需求模組化各個組件,例如:
  • 共識層
  • 合約(Chaincode)層
  • 溝通(Gossip)層
  • 資料儲存
  • 身份服務
  • 可插拔密碼學
  1. 操作互通性 Hyperledger Fabric提供向後操作性,以確保在升級時不影響現有操作。然而,這並不意味著提供不同Hyperledger專案之間或不同區塊鏈網路之間的互操作性。

  2. 安全的解決方案 企業和業務網路的安全性是Hyperledger Fabric最重要的考量之一,確保所有交易的機密性和完整性。

  3. 不被察覺的Token Hyperledger Fabric不使用加密資產、加密貨幣或代幣作為建立信任系統的激勵機制。儘管其支持資產代幣化,但這與作為激勵生成的系統代幣是完全不同的概念。

  4. 豐富且易操作的API Hyperledger Fabric提供了豐富且易於操作的API,以確保區塊鏈網路可以與企業系統或商業網路順利整合,而不會暴露區塊鏈網路系統本身。

Hyperledger Fabric的參考架構

以下是Hyperledger Fabric架構中的重要元件:

  1. 會員服務(Membership Services) 會員服務模組在區塊鏈網路創建時負責建立根憑證(Root of Trust),並確保管理員的身份。會員服務本質上是一個證書頒發機構,利用PKI來管理私鑰,並向網路成員頒發憑證,保證網路的安全性。

  2. 交易(Transactions) 交易是向區塊鏈發起的請求,用來執行帳本上的函式。交易由智能合約(Chaincode)執行,透過密碼學驗證鏈上的哈希值來確保交易的完整性。

  3. 通道(Channel) 一個Hyperledger Fabric區塊鏈網路中可以包含多條通道。每個通道擁有各自的帳本、共識協議、智能合約、加入規則和節點等,實現資料隔離與隱私保護。

  4. 狀態資料庫(State Database) 狀態資料庫,也被稱為世界狀態(World State),儲存帳本的當前狀態。與帳本不同的是,帳本儲存完整的交易紀錄,而世界狀態儲存的是最新的狀態。可選的資料庫包括:

  • LevelDB:內建的鍵值對資料庫,支援鍵查詢、組合鍵查詢及範圍鍵查詢。
  • CouchDB:除了支援上述功能外,還支援富查詢(Rich Query)及索引(Index)。
  1. 合約服務(Contract Service) 合約作為交易的一部分,是儲存在帳本上的應用程式級別的程式碼。鏈碼執行的交易會改變世界狀態。合約需要安裝在節點上,並在特定通道和對等節點上實例化。合約可以在通道內所有節點間共享,也可以僅與特定子集合共享。

  2. 事件(Events) 在驗證節點或合約的過程中會產生事件(預定義的通道事件和合約生成的自定義事件)。應用程式可以監聽這些事件並做出相應的行動。事件可以透過WebHooks或Kafka等工具傳遞。從2.0版本開始,新增了包括提交區塊、交易、特定組織的私有數據等事件。

  3. 共識(Consensus) 共識是區塊鏈系統的核心。Hyperledger Fabric中的共識服務允許網路中的成員提出並認證經過數位簽章的交易。共識機制是可插拔的,並與Hyperledger提出的endorse-order-validate模型緊密相關。排序服務將多個交易分批放入區塊中,透過哈希值串接形成區塊鏈。

  4. 帳本(Ledger) Hyperledger Fabric的帳本是加密分布式的,透過追加寫入(Append-Only)資料結構來實現。每個節點都分別維護自己所屬通道的帳本副本。

  5. 加密資料(Private Data) 加密資料允許組織在帳本上儲存加密的資料,這些資料儲存在授權節點上的加密狀態資料庫中。合約可以透過有權限的節點存取這些加密資料。

  6. SDK 客戶端的SDK允許使用者部署和調用帳本上的交易。目前支援Node.js和Java(Go與Python版本正在開發中)。

Hyperledger Fabric的運行架構

Hyperledger Fabric的運行架構可分為以下幾個步驟:

  1. 交易提交(Transaction Proposal) 交易透過客戶端SDK提交,同時將交易發送至通道中每個參與共識的背書節點(Endorsing Peers)。

  2. 背書交易(Transaction Endorsement) 每個背書節點執行交易,並回簽執行結果。結果以交易的讀寫集(Read-Write Set)的形式存在,並回傳至SDK。每個節點可能同時執行多筆交易,支援來自不同通道的併發交易。

  3. 提交交易至排序服務(Transaction Submission to Ordering Service) SDK將收到的已背書交易提交至排序服務。排序服務接收背書交易,並將其排序後放入區塊,然後將區塊傳送給通道中的所有節點。

  4. 交易驗證(Transaction Validation) 節點收到區塊後會先進行驗證,包括檢查背書政策(Endorsement Policy)及狀態資料庫中讀寫集的讀取部分。經過驗證後,區塊被提交到帳本上,交易則被提交到狀態資料庫。

節點種類

Hyperledger Fabric中的節點可分為以下幾種類型:

  1. 承諾節點(Committing Peer) 承諾節點負責維護帳本及狀態,並提交交易。這些節點不參與交易的背書。

  2. 背書節點(Endorsing Peer) 背書節點負責執行交易並簽署背書結果,這些結果會被排序節點使用以決定是否將交易納入區塊。不同通道可以有不同的背書政策。

  3. 排序節點(Ordering Node) 排序節點負責交易的排序和打包,並將區塊廣播至整個網路。這些節點不執行交易或維護帳本,只處理交易排序。

驗證

驗證過程在Hyperledger Fabric中至關重要,確保了交易的合法性和網路的一致性。驗證由以下兩個角色共同完成:

  1. 背書驗證(Endorsement Validation)
  • 執行者:背書節點。
  • 職責:確認交易執行結果符合智能合約的邏輯,並根據預定的背書政策對交易進行簽名。
  • 作用:確保交易內容的正確性,防止惡意或錯誤的交易進入排序流程。
  1. 排序驗證(Ordering Validation)
  • 執行者:排序節點。
  • 職責:驗證已背書的交易是否滿足提交到帳本的條件,並控制交易的順序性,確保整個網路達成共識。
  • 作用:維護網路中交易的有序性和一致性,防止雙重支付等問題的發生。

All rights reserved.