一、說明
區塊鏈是一個透明的,基於不可變模式的去中心化系統,核心就是一個分散式賬本,記錄網路上發生的所有交易。
區塊鏈網路主要有三種型別:公共區塊鏈、聯盟區塊鏈,以及私有區塊鏈;我們熟知的比特幣、以太坊這些數字貨幣其實就是屬於公共區塊鏈平臺;
而今天要介紹的 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 節點進行驗證和提交;
- 最後賬本更新,完成整個交易。
掃碼關注有驚喜!