當前位置:編程學習大全網 - 源碼破解 - 淺析 Fabric Peer 節點

淺析 Fabric Peer 節點

Hyperledger Fabric,也稱之為超級賬本,是由 IBM 發起,後成為 Linux 基金會 Hyperledger 中的區塊鏈項目之壹。

Fabric 是壹個提供分布式賬本解決方案的平臺,底層的賬本數據存儲使用了區塊鏈。區塊鏈平臺通常可以分為公有鏈、聯盟鏈和私有鏈。公有鏈典型的代表是比特幣這些公開的區塊鏈網絡,誰都可以加入到這個網絡中。聯盟鏈則有準入機制,無法隨意加入到網絡中,聯盟鏈的典型例子就是 Fabric。

Fabric 不需要發幣來激勵參與方,也不需要挖礦來防止有人作惡,所以 Fabric 有著更好的性能。在Fabric 網絡中,也有著諸多不同類型的節點來組成網絡。其中 Peer 節點承載著賬本和智能合約,是整個區塊鏈網絡的基礎。在這篇文章中,會詳細分析 Peer 的結構及其運行方式。

在本文中,假設讀者已經了解區塊鏈、智能合約等概念。

本文基於 Fabric1.4 LTS。

區塊鏈網絡是壹個分布式的網絡,Fabric 也是如此,由於 Fabric 是聯盟鏈,需要準入機制,所以在網絡結構上會復雜很多,下面是壹個簡化的 Fabric 網絡:

各個元素的含義如下:

對於 Fabric 網絡,外部的用戶需要通過客戶端應用,也就是圖中的 A1、A2 或者 A3 來訪問網絡,客戶端應用需要通過 CA 證書表明自己的身份,這樣才能訪問到 Fabric 網絡中有權限訪問的部分。

在上面的網絡中,***有四個組織,R1、R2、R3 和 R4。其中 R4 是整個 Fabric 網絡的創建者,網絡是根據 NC4 配置的。

在 Fabric 網絡中,不同的組織可以組成聯盟,不同的聯盟之間數據通過 Channel 來隔離。Channel 中的數據只有該聯盟中的組織才能訪問,每壹個新的 Channel 都可以認為是壹條新的鏈。與其他的區塊鏈網絡中通常只有壹條鏈不壹樣,Fabric 可以通過 Channel 在網絡中快速的搭建出壹個新的區塊鏈。

上面 R1 和 R2 組成了壹個聯盟,在 C1 上交易。R2 同時又和 R3 組成了另外壹個聯盟,在 C2 上交易。R1 和 R2 在 C1 上交易時,對 R3 是不可見的,R2 和 R3 在 C2 上交易時,對 R1 是不可見的。Channel 機制提供了很好的隱私保護能力。

Orderer 節點是整個 Fabric 網絡***有的,用來為所有的交易排序、打包。比如上面網絡中 O4 節點。本文不會對 Orderer 節點進行詳細說明,可以把這個功能理解為比特幣網絡中的挖礦過程。

Peer 節點表示網絡中的節點,通常壹個 Peer 就表示壹個組織,Peer 是整個區塊鏈網絡的基礎,是智能合約和賬本的載體,Peer 也是本文討論的重點。

壹個 Peer 節點可以承載多套賬本和智能合約,比如 P2 節點,既維護了 C1 的賬本和智能合約,也維護了 C2 的賬本和智能合約。

為了可以更深入了解 Peer 節點的作用,先了解壹下 Fabric 整體的交易流程。整體的交易流程圖如下:

Peer 節點按照功能來分可以分為 背書節點 記賬節點

客戶端會提交交易請求到背書節點,背書節點開始模擬執行交易,在模擬執行之後,背書節點並不會去更新賬本數據,而是把這個交易進行加密和簽名,然後返回給客戶端。

客戶端收到這個響應之後就會把響應提交到 Orderer 節點,Orderer 節點會對這些交易進行排序,並打包成區塊,然後分發到記賬節點,記賬節點就會對交易進行驗證,驗證結束之後,就會把交易記錄到賬本裏面。

壹筆交易是否能成功是根據背書策略來指定的,每壹個智能合約都會指定壹個背書策略。

Peer 節點代表著聯盟鏈中的各個組織,區塊鏈網絡也是由 Peer 節點來組成的,而且也是賬本和智能合約的載體。

通過對上面交易過程的了解可以知道,Peer 節點是主要的參與方。如果用戶想要訪問賬本資源,都必須要和 peer 節點進行交互。在壹個 Peer 節點中,可以同時維護多個賬本,這些賬本屬於不同的 Channel 。每個 Peer 節點都會維護壹套冗余賬本,這樣就避免了單點故障。

Peer 節點根據在交易中的不同角色,可以分成背書節點(Endorser)和記賬節點(Committer),背書節點會對交易進行模擬執行,記賬節點才會真正將數據存儲到賬本中。

賬本可以分成兩個部分,壹部分是區塊鏈,另壹部分是 Current State,也被稱之為 World State。

區塊鏈上只能追加,不能對過去的數據進行修改,鏈上也包含兩部分信息,壹部分是通道的配置信息,另壹部分是不可修改,序列化的記錄。每壹個區塊記錄前壹個區塊的信息,然後連成鏈,如下圖所示:

第壹個區塊被稱之為 genesis block,其中不存儲交易信息。每個區塊可以被分為 區塊頭 區塊數據 區塊元數據 。區塊頭中存儲著當前區塊的區塊號、當前區塊的 hash 值和上壹個區塊的 hash 值,這樣才能把所有的區塊連接起來。區塊數據中包含了交易數據。區塊元數據中則包括了區塊寫入的時間、寫入人及簽名。

其中每壹筆交易的結構如下,在 Header 中,包含了 ChainCode 的名稱、版本信息。Signature 就是交易發起用戶的簽名。Proposal 中主要是壹些參數。Response 中是智能合約執行的結果。Endorsements 中是背書結果返回的結果。

WorldState中維護了賬本的當前狀態,數據以 Key-Value 的形式存儲,可以快速查詢和修改,每壹次對 WorldState 的修改都會被記錄到區塊鏈中。WorldState 中的數據需要依賴外部的存儲,通常使用 LevelDB 或者 CouchDB。

區塊鏈和 WorldState 組成了壹個完整的賬本,World State 保證的業務數據的靈活變化,而區塊鏈則保證了所有的修改是可追溯和不可篡改的。

在交易完成之後,數據已經寫入賬本,就需要將這些數據同步到其他的 Peer,Fabric 中使用的是 Gossip 協議。Gossip 也是 Channel 隔離的,只會在 Channel 中的 Peer 中廣播和同步賬本數據。

智能合約需要安裝到 Peer 節點上,智能合約是訪問賬本的唯壹方式。智能合約可以通過 Go、Java 等變成語言進行編寫。

智能合約編寫完成之後,需要打包到 ChainCode 中,每個 ChainCode 中可以包含多個智能合約。ChainCode 需要安裝,ChainCode 需要安裝到 Peer 節點上。安裝好了之後,ChainCode 需要在 Channel 上實例化,實例化的時候需要指定背書策略。

智能合約在實例化之後就可以用來與賬本進行交互了,流程圖如下:

用戶編寫並部署實例化智能合約之後,就可以通過客戶端應用程序來向智能合約提交請求,智能合約會對 WorldState 中數據進行 get、put 或者 delete。其中 get 操作直接從 WorldState 中讀取交易對象當前的狀態信息,不會去區塊鏈上寫入信息,但 put 和 delete 操作除了修改 WorldState,還會去區塊鏈中寫入壹條交易信息,且交易信息不能修改。

區塊鏈上的信息可以通過智能合約訪問,也可以在客戶端應用通過 API 直接訪問。

Event 是客戶端應用和 Fabric 網絡交互的壹種方式,客戶端應用可以訂閱 Event,當 Event 發生時,客戶端應用就會接受到消息。

事件源可以兩類,壹類是智能合約發出的 Event,另壹類是賬本變更觸發的 Event。用戶可以從 Event 中獲取到交易的信息,比如區塊高度等信息。

在這篇文章中,首先介紹了 Fabric 整體的網絡架構,通過對 Fabric 交易流程的分析,討論了 peer 節點在交易中的作用,然後詳細分析了 peer 節點所維護的賬本和智能合約,並分析了 peer 節點維護賬本以及 peer 節點執行智能合約的流程。

文 / Rayjun

[1] /zh/technologies/blockchain/series/os-academy-hyperledger-fabric/

[3] https://en.wikipedia.org/wiki/Gossip_protocol

  • 上一篇:許冠傑結婚49周年低調慶祝,三代同堂幸福美滿,許懷欣曬照祝福
  • 下一篇:忠誠衛士升窗器怎麽樣
  • copyright 2024編程學習大全網