2.04 hyperledger fabric共識排序
阿新 • • 發佈:2018-12-07
1.共識機制介紹
- 交易背書:客戶端節點根據背書策略,選擇背書節點,傳送交易提案,背書節點呼叫智慧合約執行模擬交易,執行完成後,經過簽名背書,返回給客戶端節點,整個過程是模擬的
- 交易排序:排序節點接收已經簽名背書的交易,確定交易順序,將排好序的交易打包成區塊,分發給其他組織主節點,排序節點不會去關心交易是否正確,只負責排序和打包區塊
- 交易驗證:區塊儲存和交易驗證不衝突,區塊儲存前進行交易驗證,fabric中區塊狀態是世界狀態
2.Orderer節點作用
- 交易排序
- 區塊分發
- 多通道資料隔離
3.原始碼閱讀
4.共識機制原始碼目錄結構
- 目錄結構介紹
- bccsp:與密碼學相關的,主要包括加密、數字簽名和證書等,將密碼學中的函式抽象成一組介面,可以很方便地擴充套件
- bddtests:是一個新型的軟體開發模式,叫做行為驅動開發,傳統軟體是從需求到概要設計再到詳細設計最後到開發,行為驅動開發是需求直接到開發
- common:公共庫,錯誤處理、日誌處理、賬本儲存以及各種工具等
- core:是fabric的核心庫,子目錄中有與各個模組相關的目錄
- chaincode:與智慧合約相關
- comm:與網路通訊相關
- endorser:背書節點相關
- devenv:官方提供的開發環境,使用的是Vagrant
- docs:文件相關
- enents:事件監聽機制
- examples:一些例子程式
- gossip:通訊協議,最終一致性的共識演算法,用於組織內部區塊同步
- gotools:用於編譯
- images:用作docker映象打包
- msp:成員服務管理,member service provider,fabric會為每一個成員提供證書,msp模組用於讀取證書做簽名等
- orderer:排序節點的入口
- peer:peer節點的入口
- proposals:新功能提案
- protos:fabric提供的所有資料結構和服務都在這裡面定義
- 下面的就不重要了
5.共識機制原始碼閱讀
- 看orderer中的main.go
6.Manageer原始碼閱讀
- 點選server.go中的Manager進入Manager.go
7.ChainSupport原始碼閱讀
- 點選Manager.go中的ChainSupport進入chainsupport.go
8.區塊切割和solo模式原始碼閱讀
- 點選chainsupport.go中的Receiver進入blockcutter.go
9.交易收集和區塊擴散原始碼閱讀
- 檢視交易收集
- 檢視區塊如何擴散
10.共識機制總結
- main.go是入口,是orderer節點初始化的流程
- manager.go是多鏈的控制中樞,所有對鏈的操作,都要從這裡拿到chainsupport物件的例項
- chainsupport.go是鏈物件的幫助介面,是鏈的代理,與鏈一一對應
- 區塊切割中重點是Orderer方法,判斷當前排序節點的交易是否應該被切割到一個新的區塊,如果是,則呼叫Cut方法切割
- solo共識將區塊鏈分散式系統簡化為了一個單機版的中心化系統,容易理解
- 交易收集和區塊擴散:是server.go中兩個介面的實現
- 排序節點實現了一個可插拔的服務,實現了多通道功能,現節點官方實現了solo和kafka兩種共識,也可以擴充套件其他的共識