Hyperledger Fabric 核心概念
一、説明
區塊鏈是一個透明的,基於不可變模式的去中心化系統,核心就是一個分佈式賬本,記錄網絡上發生的所有交易。
區塊鏈網絡主要有三種類型:公共區塊鏈、聯盟區塊鏈,以及私有區塊鏈;我們熟知的比特幣、以太坊這些數字貨幣其實就是屬於公共區塊鏈平台;
而今天要介紹的 Fabric
則是屬於聯盟鏈類型的;Fabric是一個企業級的分佈式賬本技術平台,也是目前應用最廣泛的區塊鏈項目。
本文將梳理區塊鏈技術平台 Fabric
的核心概念與關鍵功能。
二、特點
Fabric與其他區塊鏈平台對比有以下幾個特點:
-
開源:它是Linux基金會旗下的一個重量級區塊鏈平台。
-
身份管理:fabric和其他區塊鏈系統的不同之處在於它是私有的,有準入資格授權的,並非一個公開的允許不明身份參與者進入網絡的系統;它提供了一個成員身份服務,用於管理網絡上的所有參與者和權限。
-
隱私和保密:有一個通道的概念提供了交易隱私和機密性,一個Fabric的網絡可以創建多個通道,任何未正式授權的網絡成員都沒辦法看到或者訪問通道上的任何數據;可以理解為就是支持多租户,通道與通道之間的數據都是隔離的。
-
鏈碼功能:智能合約在Fabric 中稱之為鏈碼,用於對賬本的訪問,例如寫入交易信息,查詢數據等等。
-
模塊化設計:Fabric實現了模塊化架構,例如身份、排序、鏈碼等服務和功能,都是可選的可插拔的非常靈活。
三、系統功能
Fabric的一個功能架構圖:
- 身份管理功能是通過PKI體系和CA模塊來實現成員、權限還有證書的管理。
- 分佈式賬本就是區塊鏈網絡的核心功能,記錄着所有的交易信息。
- 排序服務,類似一個裁判的角色,因為不同的交易順序對最終的交易結果是有很大的影響的,所以這個排序服務主要是為了讓所有的節點達成統一的共識,最終實現數據的一致性。
- 網絡通信方面,節點與節點之間的點對點通信是基於grpc協議,然後再通過gossip算法來實現去中心化的廣播,意思就是不需要中心節點,通過任意一個節點以一傳十,十傳百的方式來把消息散播到全網。
- 背書驗證指的是背書策略,背書策略有很多種,例如我指定策略為大多數節點同意,意思就是一筆交易必需超過半數的節點都認證通過了,才能完成,這樣就能有效的防禦一些惡意的交易。
- 鏈碼服務是一個獨立的應用程序,運行在隔離的Docker容器中,在鏈碼部署的時候會自動生成鏈碼的Docker鏡像。
四、組件邏輯關係
- 圖中的淺藍色方塊
N
代表整個區塊鏈網絡; - 網絡底部的
C
為通道
相當於是一個子鏈,一個區塊鏈網絡可以創建多個通道,通道與通道之間是數據隔離的,可以理解為是一個多租户系統; - 一個通道上面可以部署多個
Peer 節
點為圖中藍色方塊P1
和P2
,區塊鏈網絡主要由Peer 節
點組成; - 每個
Peer 節
點上都有一份賬本
的全量副本為紅色的L1
,然後智能合約
是部署在每個節點上的為黃色S1
,一個節點可以部署多個智能合約
; - 最後區塊鏈網絡外面的白色方塊A指的是訪問區塊鏈的
應用
,應用是通過通道來與節點上的賬本進行交易的。
五、賬本
賬本是 Hyperledger Fabric 中的一個重要概念,它存儲了有關業務對象的重要事實信息,其中既包括對象屬性的當前值,也包括產生這些當前值的交易的歷史。
賬本由一個區塊鏈(鏈)構成,並將不可變的、有序的記錄存放在區塊中;同時包含一個狀態數據庫來記錄當前的Fabric狀態。每個 通道
中各有 一個賬本
。各個節點對於它所屬的每個通道,都會保存一份該通道的 賬本副本
。
如下圖所示,Hyperledger Fabric 中的賬本由“世界狀態“和”區塊鏈“這兩部分組成:
世界狀態:世界狀態是以數據庫的形式實現,默認使用的是LevelDB,這是一個KeyValue數據庫;裏面記錄的是業務對象的最新值;智能合約主要與賬本中的世界狀態進行交互。
區塊鏈:以文件形式實現的,記錄交易日誌明細,相當於是一個交易的台賬表。
例如有一個銀行賬户,發生一次存款和三次取款操作,則最終區塊鏈裏面會記錄四條記錄的日誌,而世界狀態則只記錄一條記錄,就是當前賬户最新的餘額。
六、智能合約
智能合約
是一個運行在賬本上的應用程序,它可以對資產進行編碼,其中的交易指令(或者叫業務邏輯)也可以用來修改資產。
在 Fabric2.0
以後引入了新的生命週期來管理合約:
- 首先第一步開發合約:需要依賴原生的合約 sdk,支持包括 Java、js 和 Golang 三種開發語言。
- 開完合約後,管理員可以使用 package 子命令來打包合約,並生成打包文件。打包命令默認程序是 golang 語言,可以使用 -l 參數來指定其他語言。
- 一次打包可以多次安裝,然後接着使用 install 命令在指定的 peer 節點上安裝合約。
- 安裝成功後,接着使用 approveformyorg 命令代表所在機構審批合約,並且指定背書策略。
- 最後使用 commit 命令向指定的通道提交合約定義,執行完這一步智能合約就部署成功,正式生效了。
- 接下來我們就可以編寫應用程序來與區塊鏈網絡進行交易了,Fabric 封裝了一套網關 SDK 給應用程序使用,通過一系列的簡單 API 就實現和區塊鏈網絡進行交互。
關於 Java 智能合約的開發可以看我之前的文章《Hyperledger Fabric 2.x 自定義智能合約》
七、交易流程
- 首先區塊鏈應用發起一筆交易;
- 然後
背書節點
對交易進行簽名驗證,返回驗證結果; - 客户端將背書結果封裝發給 Peer 節點,然後再提交給 Order 節點進行數據同步;
- Order 節點按順序把交易信息同步給其他的 Peer 節點進行驗證和提交;
- 最後賬本更新,完成整個交易。
掃碼關注有驚喜!
- 如何基於Security框架兼容多套用户密碼加密方式
- 基於Kubernetes(k8s)部署Dubbo Nacos服務
- 基於jib-maven-plugin快速構建微服務docker鏡像
- 基於minikube快速搭建單節點環境
- 隱私計算FATE-多分類神經網絡算法測試
- 隱私計算FATE-離線預測
- 隱私計算FATE-模型訓練
- 隱私計算FATE-核心概念與單機部署
- Hyperledger Fabric 核心概念
- Hyperledger Fabric 2.x Java區塊鏈應用
- Hyperledger Fabric 2.x 自定義智能合約
- Hyperledger Fabric 2.x 環境搭建
- Spring Boot 如何熱加載jar實現動態插件?
- 如何基於Security實現OIDC單點登錄?
- 第三方API對接如何設計接口認證?
- 免費正版 IntelliJ IDEA license 詳細指南
- ClickHouse性能優化?試試物化視圖
- 全量同步Elasticsearch方案之Canal
- Canal高可用架構部署
- 大數據量查詢容易OOM?試試MySQL流式查詢