Fabric1.4 架構和原理


#1.Fabric總體架構
Fabric架構主要包括三個模塊:會員(Membership),區塊鏈(Blockchan)和鏈碼(chaincode)。
架構圖

1.1成員服務

包含下列組件:注冊、身份認證管理及審計。

成員服務通過公鑰基礎設施(Public Key Infrastructure (PKI))和去中心化的/共識技術使得不帶權限的區塊鏈變成帶權限的區塊鏈。成員必須被許可才能加入網絡,通過實體注冊來獲得長時間的,可能根據實體類型生成的身份憑證(登記證書enrollment certificates)。在用戶使用過程中,這樣的證書允許交易證書頒發機構(Transaction Certificate Authority (TCA))頒發匿名證書。交易證書被用來對提交交易授權。交易證書存儲在區塊鏈中,並對審計集群授權,否則交易是不可鏈接的。

1.2區塊鏈服務

包含下列組件:共識管理、分布式賬本、點對點網絡和分類存儲

區塊鏈服務通過HTTP/2上的點對點(peer-to-peer)協議來管理分布式總賬。為了提供最高效的哈希算法來維護世界狀態的復制,數據結構進行了高度的優化。每個部署中可以插入和配置不同的共識算法(PBFT, Raft, PoW, PoS)。

1.3鏈碼服務

包含下列組件:安全容器 、安全注冊中心

Fabric的智能合約smart contract稱為鏈碼chaincode,是一段代碼,它處理網絡成員所同意的業務邏輯。

鏈碼可采用Go、Java、Node.js語言編寫。鏈碼被編譯成一個獨立的應用程序,fabric用Docker容器來運行chaincode,里面的base鏡像都是經過簽名驗證的安全鏡像,包括OS層和開發chaincode的語言、runtime和SDK層。一旦chaincode容器被啟動,它就會通過gRPC與啟動這個chaincode的Peer節點連接。

1.4賬本

賬本Ledger主要包含兩塊:blockchain和state。blockchain就是一系列連在一起的block,用來記錄歷史交易。state對應賬本的當前最新狀態,它是一個key-value數據庫,Fabric默認采用Level DB, 可以替換成其他的Key-value數據庫,如Couch DB。

1.5交易

Fabric上的transction交易分兩種,部署和調用。

1.5.1部署:

把Chaincode部署到peer節點上並准備好被調用,當一個部署交易成功執行時,Chaincode就被部署到各個peer節點上。好比把一個web service或者EJB部署到應用服務器上的不同實例上。

1.5.2調用:

客戶端應用程序通過Fabric提供的API調用先前已部署好的某個chaincode的某個函數執行交易,並相應地讀取和寫入KV數據庫,返回是否成功或者失敗。

1.6 APIs, Events, SDKs

Fabric提供API方便應用開發,對服務端的ChainCode,目前支持用Go、Java或者Node.js開發。對客戶端應用,Fabric目前提供Node.js和Java SDK。未來計划提供Python 和Go SDK,Fabric還提供RESTAPI。對於開發者,還可以通過CLI快速去測試chaincode,或者去查詢交易狀態。在區塊鏈網絡里,節點和chaincode會發送events來觸發一些監聽動作,方便與其他外部系統的集成。

2.Fabric應用開發流程

開發者創建客戶端應用和智能合約(chaincode),Chaincode被部署到區塊鏈網絡的Peer節點上面。通過chaincode來操作賬本,當你調用一個交易transaction時,你實際上是在調用Chaincode中的一個函數方法,它實現業務邏輯,並對賬本進行get, put, delete操作。客戶端應用提供用戶交互界面,並提交交易到區塊鏈網絡上。
開發流程

3.Fabric網絡

節點是區塊鏈的通信實體,節點是一個邏輯概念,不同類型的節點可以運行在同一台物理服務器上。這些節點可能部署在雲上面或者本地。可能來自不同的公司或者組織。在區塊鏈網絡中有兩種類型的節點:Peer節點和Orderer節點,如下圖所示。
網絡
Peer節點:chaincode部署在Peer節點上,它對賬本進行讀寫操作。一個Peer節點可以充當多種角色,如背書者endorser,提交者committer。一個區塊鏈網絡中會有多個Peer節點。

Orderer節點:對交易進行排序,批量打包,生成區塊,發給Peer節點。一個區塊鏈網絡中會有多個Orderer節點,它們共同提供排序服務。排序服務可以別實現為多種不同的方式,從一個中心化的服務(被用於開發和測試,如Solo),到分布式協議(如Kafka)。

排序服務提供了通向客戶端和Peer節點的共享通信通道。提供了包含交易的消息廣播服務(broadcast和deliver)。客戶端可以通過這個通道向所有的節點廣播(broadcast)消息。通道可以向連接到該通道的節點投遞(deliver)消息。

排序服務支持多通道,類似於發布/訂閱消息系統中的主題topic。客戶端和Peer節點可以連接到一個給點的通道,並通過給定的通道發送和接收消息。多通道使得Peer節點可以基於應用訪問控制策略來訂閱任意數量的通道;也就是說,應用程序在指定Peer節點的子集中架設通道。這些peer組成提交到該通道交易的相關者集合,而且只有這些peer可以接收包含相關交易的區塊,與其他交易完全隔離,實現數據隔離和保密。

此外,peers的子集將這些私有塊提交到不同的賬本上,允許它們保護這些私有交易,與其他peers子集的賬本隔離開來。應用程序根據業務邏輯決定將交易發送到1個或多個通道。

通道

例如,如上圖所示,peer 1,2和N訂閱紅色通道,並共同維護紅色賬本; peer 1和N訂閱藍色通道並維護藍色賬本;類似地,peer 2和peer N在黑色通道上並維護黑色賬本。

在這個例子中,peer N在訂閱了所有通道,我們看到每個通道都有一個相關的賬本。一般來說,我們稱不涉及所有peer的賬本為子賬本,另一種是系統賬本,即全賬本。

4.Fabric交易流程

交易

  • 第一步,客戶端Client構造交易提案

client利用SDK(Node.js\java..)構造一個交易提案propose,該propose包含調用智能合約功能函數請求,用來確認哪些數據可以讀取或者寫入賬本,client將交易提案propose發送給一個或多個peer節點,交易提案包含本次交易要調用的合約標識、合約方法和參數信息以及客戶端簽名等。

SDK將交易提案打包為可識別的格式(如gRPC上的protocolbuffer),並使用用戶的加密憑證為該交易提案生成唯一的簽名。

  • 第二步,背書節點模擬執行交易

背書節點endorser收到交易提案后,驗證簽名並確定提交者是否有權執行操作。背書節點將交易提案的參數作為輸入,在當前狀態KV數據庫上執行交易,生成包含執行返回值、讀操作集合和寫操作集合的交易結果(此時不會更新賬本),這些值的集合、背書節點的簽名和背書結果(YES / NO)作為提案的結果返回給客戶端SDK,SDK解析這些信息判斷是否應用於后續的交易。

  • 第三步,客戶端把交易發送到共識服務節點

應用程序(SDK)驗證背書節點簽名,並比較各節點返回的提案結果,判斷提案結果是否一致以及是否參照指定的背書策略執行。客戶端收到各個背書節點的應答后,打包到一起組成一個交易並簽名,發送給Orderers。

  • 第四步,orderer節點共識排序,生成新區塊,提交交易

Orderers對接收到的交易進行共識排序,然后按照區塊生成策略,將一批交易打包到一起,生成新的區塊,調用deliver API投遞消息,發送給提交節點。

提交節點收到區塊后,會對區塊中的每筆交易進行校驗,檢查交易依賴的輸入輸出是否符合當前區塊鏈的狀態,完成后將區塊追加到本地的區塊鏈,並修改K-V狀態數據庫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM