Fabric交易執行流程-fabric學習筆記(一)

 (1)客戶端應用程序發送交易請求(即提出議案proposal

(1-1)客戶端發出請求,根據背書策略把交易請求發給相應的peer節點(背書節點)。(Q:背書策略是在一開始就定義好的?)

(1-2)構建交易提案(proposal),客戶端應用程序利用支持的SDK(Go, Java, Python)中的API生成proposal,提案是帶有確定輸入參數的調用鏈碼方法的請求,該請求可能是讀取或更新賬本。

(1-3)SDK作用:1. 將交易提案打包成合適的格式(gRPC);2. 根據用戶的密鑰對交易提案生成簽名。

 

2)背書節點驗證簽名並執行交易

(2-1)背書節點驗證:1. 交易提案的格式是否正確;2.交易提案之前沒有被提交過;3. 簽名是有效的(使用MSP);4. 請求發起者(即客戶端)是否已經被授權在該通道上執行該操作(即,每個背書節點確保發起者滿足通道 Writers 策略)。

(2-2)背書節點將交易提案輸入作爲調用的鏈碼函數的參數。然後針對當前狀態數據庫執行鏈碼,生成交易結果,包括響應值、讀集和寫集。(Q:怎麼理解讀集合寫集)

(2-3)響應值以及背書節點簽名作爲“提案響應”傳回給SDK,SDK爲客戶端應用程序解析“提案響應”中的信息。

 

3)客戶端應用程序檢查“提案響應”

(3-1)客戶端應用程序驗證背書節點簽名,比較多個“提案響應”,確定“提案響應”是否相同,當客戶端收到足夠數量的相同的“提案響應”後纔會執行下一步。

(3-2)查詢請求:客戶端應用程序只查看響應結果,通常不會將交易提交給排序節點。

(3-3)更新請求:客戶端應用程序先確定響應信息是否滿足指定的背書策略;若滿足,將交易提交給排序節點(Order)。

 

4)排序服務進行排序並將交易封裝成區塊

(4-1)客戶端應用程序將交易發送給排序服務(Order節點),交易包括讀/寫集,背書節點簽名和Channel ID。

(4-2)排序服務從所有的channel中接收交易,利用排序算法(如solo,kafka等)按時間和通道進行排序,並將每個channel中的交易打包成區塊。

 

5)驗證和提交交易

(5-1)排序節點(Order)將交易區塊發送給channel上所有的peer節點(包括commit peer,endorsing peer等)。

(5-2)peer節點對區塊內的交易進行驗證:1. 確保滿足背書策略;2. 確保自交易執行生成讀集以來,沒有對讀集變量的賬本狀態進行更改。驗證完之後對區塊中的交易進行標記爲:有效或無效。

 

6)賬本更新

(6-1)peer節點將區塊添加到區塊鏈上。

(6-2)peer節點將每個有效交易寫入各自的賬本中以及世界狀態(world state)。

(6-3)系統會發出一個事件,通知客戶端應用程序本次交易(調用)已被不可更改地附加到區塊鏈上,同時還會通知交易驗證結果是有效還是無效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章