Hyperledger Fabric 傻瓜書

企業區塊鏈平台

Hyperledger Fabric 傻瓜書

各位讀者下午好,我叫 Nikolai Nefedov,我是 IBM 技術專家,在本文中我想向您介紹區塊鏈平台——Hyperledger Fabric。 該平台旨在構建企業級業務應用程序(企業級)。 文章的水平是針對沒有IT技術基礎知識的沒有準備的讀者。

Hyperledger Fabric 是一個開源項目,是 Linux 基金會聯盟 Hyperledger 開源項目的分支之一。 Hyperledger Fabric 最初由 Digital Assets 和 IBM 推出。 Hyperledger Fabric 平台的主要特點是專注於企業應用程序。 因此,該平台的開發考慮到了交易的高速度和低成本,以及所有參與者的身份識別。 這些好處是通過分離交易驗證服務和形成分佈式註冊表的新塊,以及使用證書頒發機構和授權參與者來實現的。

我的文章是關於 Hyperledger Fabric 的一系列文章的一部分,在這些文章中我們描述了一個用於註冊大學學生的系統項目。

Hyperledger Fabric 的總體架構

Hyperledger Fabric 是一個分佈式區塊鍊網絡,由安裝在網絡節點上的各種功能組件組成。 Hyperledger Fabric 組件是 Docker 容器,可以從 DockerHub 免費下載。 Hyperledger Fabric 也可以在 Kubernetes 環境中運行。

為了編寫智能合約(Hyperledger Fabric 上下文中的鏈代碼),我們使用了 Golang(儘管 Hyperledger Fabric 允許您使用其他語言)。 為了開發自定義應用程序,在我們的例子中,Node.js 與相應的 Hyperledger Fabric SDK 一起使用。

節點運行業務邏輯(智能合約)——鏈代碼,存儲分佈式註冊表的狀態(賬本數據)並執行其他平台系統服務。 一個節點只是一個邏輯單元,不同的節點可以存在於同一台物理服務器上。 更重要的是節點如何分組(可信域)以及它們與區塊鍊網絡的哪些功能相關聯。

總體架構如下所示:

Hyperledger Fabric 傻瓜書

圖 1. Hyperledger Fabric 的總體架構

用戶應用程序(提交客戶端)是用戶與區塊鍊網絡一起工作的應用程序。 要工作,您需要通過授權並擁有在網絡上進行各種操作的適當權限。

對等點(節點)有幾個角色:

  • Endorsing Peer 是模擬交易執行(執行智能合約代碼)的節點。 在驗證並執行智能合約後,節點將執行結果連同其簽名返回給客戶端應用程序。
  • 排序服務是在多個節點上的分佈式服務,它用於形成分佈式賬本的新塊並創建執行交易的順序。 Ordering Service 不會向註冊表添加新塊(移動到 Committing Peers 以獲得更好的性能)。
  • Committing Peer - 包含分佈式註冊表並向註冊表添加新塊(由排序服務形成)的節點。 所有 Committing Peer 都包含分佈式分類帳的本地副本。 Committing Peer 在本地添加新塊之前,檢查塊內所有交易的有效性。

背書策略是檢查交易有效性的策略。 這些策略定義了必須在其上執行智能合約以使交易被識別為有效的必要節點集。

分佈式註冊表 - Lerger - 由兩部分組成:WolrldState(也稱為狀態數據庫)和 BlockChain。

區塊鍊是一個區塊鏈,存儲分佈式賬本對象發生的所有變化的記錄。

WolrldState 是一個分佈式註冊表組件,存儲所有分佈式註冊表對象的當前(極值)值。

WorldState 是一個數據庫,在基本版本 - LevelDB 或更複雜的版本 - CouchDB 中,其中包含鍵值對,例如:名字 - Ivan,姓氏 - Ivanov,在系統中的註冊日期 - 12.12.21/17.12.1961/XNUMX,日期出生 - XNUMX 年 XNUMX 月 XNUMX 日等WorldState 和分佈式賬本必須在給定通道的所有成員之間保持一致。

由於 Hyperledger Fabric 是一個所有參與者都已知並經過身份驗證的網絡,因此這裡使用了一個專門的證書頒發機構——CA(Certification Authority)。 CA 在 X.509 標準和公鑰基礎設施 - PKI 的基礎上運作。

會員服務是一種服務,會員通過該服務驗證對像是否屬於特定組織或渠道。

在大多數情況下,交易是分佈式分類帳中新數據的記錄。
還有用於創建通道或智能合約的交易。 交易由用戶應用程序發起,並以寫入分佈式賬本結束。

通道(Channel)是由區塊鍊網絡中的兩個或多個參與者組成的封閉子網,旨在在有限但已知的參與者圈子內進行保密交易。 通道由參與者決定,其分佈式賬本、智能合約、訂購服務、WorldState。 每個通道成員都必須被授權訪問通道並有權執行各種交易。 使用會員服務執行授權。

典型交易執行場景

接下來,我想以我們項目的例子來說說一個典型的執行交易的場景。

作為我們內部項目的一部分,我們創建了一個 Hyperledger Fabric 網絡,旨在註冊和記錄進入大學的學生。 我們的網絡由兩個組織組成,分別由大學 A 和大學 B 擁有。每個組織都包含一個客戶端應用程序,以及它自己的承諾和認可對等體。 我們還使用通用的訂購服務、會員服務和證書頒發機構服務。

1)交易發起

用戶應用程序使用 Hyperledger Fabric SDK 發起交易請求並將請求發送到具有智能合約的節點。 該請求可以是更改或讀取分佈式賬本(Ledger)。 如果我們考慮一個大學生會計系統的測試配置示例,那麼客戶端應用程序向大學 A 和 B 的節點發送交易請求,這些請求包含在被調用智能合約的背書策略中。 節點 A 是位於註冊新生的大學中的節點,節點 B 是位於另一所大學中的節點。 為了將交易保存到分佈式賬本中,根據業務邏輯必須批准交易的所有節點都必須成功執行具有相同結果的智能合約。 節點 A 的用戶應用程序,使用 Hyperledger Fabric SDK 工具,接收 Endorsement policy(批准策略)並找出向哪些節點發送交易請求。 這是調用(調用)某個智能合約(鏈代碼函數)以讀取或寫入某些數據到分佈式分類帳的請求。 從技術上講,客戶端 SDK 使用相應的函數,其 API 傳遞一個帶有交易參數的對象,還添加一個客戶端簽名,並通過 gRPC 上的協議緩衝區將此數據發送到適當的節點(背書節點)。

Hyperledger Fabric 傻瓜書
圖 2. 交易發起

2) 智能合約執行

節點(背書節點)在收到執行交易的請求後,檢查客戶端簽名,如果一切正常,則它們獲取帶有請求數據的對象並運行智能合約執行的模擬(鏈代碼功能)有了這些數據。 智能合約是交易的業務邏輯,一組特定的條件和指令(在我們的例子中,這是一個學生檢查,是新學生,還是他已經註冊,年齡檢查等)。 要執行智能合約,您還需要來自 WorldState 的數據。 作為在 Endorsing peer 上的智能合約模擬的結果,獲得了兩個數據集 - Read Set 和 Write Set。 Read Set 和 Write Set 是原始的和新的 WorldState 值。 (新的 - 在通過模擬智能合約獲得的意義上)。

Hyperledger Fabric 傻瓜書
圖 3. 智能合約執行

3) 返回數據給客戶端應用

智能合約模擬完成後,Endorsing Peers 將初始數據和模擬結果,以及由其證書籤名的 RW Set 返回給客戶端應用程序。 在此階段,分佈式賬本沒有變化。 客戶端應用程序驗證 Endorsing Peer 的簽名,並將發送的原始交易數據與返回的數據進行比較(即檢查模擬交易的原始數據是否已損壞)。 如果事務只是為了從註冊表中讀取數據,那麼客戶端應用程序相應地接收到必要的讀取集,並且事務通常在不更改分佈式註冊表的情況下成功完成。 在應該更改註冊表中的數據的事務的情況下,客戶端應用程序還檢查是否已實施背書策略。 客戶端應用程序可能不檢查背書策略執行的結果,但在這種情況下,Hyperledger Fabric 平台提供了在向註冊表添加事務的階段檢查節點(Comitting Peers)上的策略。

Hyperledger Fabric 傻瓜書
圖 4. 將數據返回給客戶端應用程序

4) 發送 RW 集給排序節點

客戶端應用程序將交易連同相關數據發送到排序服務。 這包括 RW 集、背書節點的簽名和通道 ID。

排序服務——顧名思義,該服務的主要功能是以正確的順序構建傳入的交易。 以及分佈式註冊表新塊的形成和保證將新生成的塊交付給所有 Committing 節點,從而確保包含分佈式註冊表的所有節點(Committing peer)上的數據一致性。 同時,Ordering 服務本身不會以任何方式更改註冊表。 Ordering Service 是系統的重要組成部分,因此它是一個由多個節點組成的集群。 排序服務不檢查交易的有效性,它只是接受具有特定通道 ID 的交易,按特定順序安排傳入的交易,並從中形成分佈式分類帳的新塊。 一項訂購服務可以同時服務於多個渠道。 排序服務包括一個 Kafka 集群,它維護著正確的(不變的)交易隊列(見第 7 點)。

Hyperledger Fabric 傻瓜書
圖 5. 將 RW 集發送到排序節點

5) 將生成的塊發送給 Committing Peer

在排序服務中形成的塊被廣播到所有網絡節點。 每個節點收到一個新塊後,檢查它是否符合背書政策,檢查所有背書節點是否收到相同的結果(寫集)作為智能合約模擬的結果,並檢查原始值是否具有自交易開始以來發生了變化(即 - Read Set - 智能合約從 WorldState 讀取的數據)。 如果滿足所有條件,則交易被標記為有效,否則,交易將收到無效狀態。

Hyperledger Fabric 傻瓜書
圖 6. 將生成的塊發送到 Committing Peer

6) 向註冊表添加塊

每個節點向其分佈式賬本的本地副本添加一個事務,如果事務有效,則將 Write Set 應用於 WorldState(當前狀態),分別寫入受事務影響的對象的新值. 如果一個交易收到一個無效的令牌(例如,在同一個區塊中有兩個具有相同對象的交易,那麼其中一個交易將無效,因為原始值已經被另一個交易更改了). 該交易也被添加到帶有無效標記的分佈式賬本中,但該交易的 Write Set 不適用於 WorldState 的當前狀態,因此不會更改參與交易的對象。 之後,向用戶應用程序發送一條通知,告知交易已永久添加到分佈式賬本中,以及交易的狀態,即是否有效……

Hyperledger Fabric 傻瓜書
圖 7. 向註冊表添加塊

訂購服務

Ordering Service 由一個 Kafka 集群和相應的 ZooKeeper 節點以及一個位於 Ordering 服務客戶端和 Kafka 集群之間的 Ordering Service Nodes (OSN) 組成。 Kafka集群是一個分佈式的、容錯的流(消息)管理平台。 Kafka 中的每個通道(主題)都是一個不可變的記錄序列,只支持添加新記錄(不能刪除現有記錄)。 下面給出了主題結構的說明。 正是 Kafka 的這個屬性被用來構建區塊鏈平台。

Hyperledger Fabric 傻瓜書
取自 kafka.apache.org

  • 圖 8. 訂購服務主題結構*

有用的鏈接

Youtube - 使用 Hyperledger 項目為業務構建區塊鏈
Hyperledger Fabric 文檔
Hyperledger fabric:許可區塊鏈的分佈式操作系統

致謝

對幫助我準備這篇文章的同事表示深深的感謝:
尼古拉瑪麗娜
伊戈爾·哈波夫
德米特里·戈爾巴喬夫
亞歷山大·澤姆佐夫
葉卡捷琳娜·古謝娃

來源: www.habr.com

添加評論