節點架構
Fabric 中有兩種類型節點(Peer)。
- Peer:可部署 chaincode,對賬本進行讀寫操作,同時兼具以下角色
- Endorser:背書節點
- Committer:提交節點
- Orderer:排序節點,對交易進行排序,將交易批次組合成區塊,發給 Peer 節點
- 共識機制:不同的傳輸層模式
- Solo:便於開發測試的單一中心化服務
- Kafca/Zookeeper:分佈式訊息佇列服務
- sBFT:簡易拜占庭容錯(Byzantine Fault Tolerant, BFT)
- Channel:一個群組間的共享通信通道
- 訊息傳播模式:
- broadcast:向群組中的所有的節點廣播(broadcast)訊息
- deliver:向群組中的特定節點傳遞(deliver)訊息
- 支援通道:發布/訂閱(Publish/Subscribe)設計模式
- 隱私交易(Private Transaction):實現不同群組間的交易資料隔離與保密
通信通道
通道(Channel)以群組為概念:
不同群組提供不同的商業服務,不同組織可以節點為單位,選擇參與不同的業務。
- 通道(Channel)將節點(Peer)、賬本(Ledger)切分為群組。
- 資料僅在通道(Channel)內共享(Share),通道(Channel)之間的用戶和資料是隔離的。
- 而同一個節點可註冊(Subscribe)不同的通道(Channel)。
交易流程
- Enroll
- 客戶端(Client):使用用戶帳號向節點(Peer)註冊(Enroll)
- Proposal
- 客戶端(Client):提出交易提案(Proposal),傳送背書節點(Endorser)
- 建立交易提案(Propose)
- 交易內容:合約識別(ID) - Hash Value、合約方法(Method)和參數
- 數位簽章:使用用戶帳號的加密憑證產生
- 將交易提案序列化,如 gRPC 的 Protocol Buffers,以便發送
- 將交易提案發送給一個或多個節點(Peer)
- 背書節點(Endorser):模擬執行交易,將結果回傳客戶端
- 收到交易提案後,驗證數位簽章,確認用戶權限
- 執行交易,產生交易結果:讀寫操作後的資料變更集合、傳回值
- 回傳資訊給客戶端:交易結果、背書結果"Yes/No"和節點的簽章
- Submit Transaction
- 客戶端:透過一般節點(Peer)將交易廣播到排序節點(Orderer)
- 驗證背書節點簽章,比較各背書節點傳回的交易結果是否一致
- 將傳回的交易結果組成資料集,加上簽章,發送給背書節點(Endorser)
- Relay
- 背書節點(Endorser):將訊息廣播發送給排序節點(Orderers)
- Batch
- 排序節點(Orderers):共識驗證,交易排序,產生區塊
- 進行共識驗證、交易排序,以批次交易的資料集合產生區塊
- 使用 deliver API 傳遞訊息給提交節點(Committer)
- 提交節點(Committer):寫入區塊鏈,更新 Key/Value 資料庫
- 驗證批次交易的輸入輸出狀態,與提交的區塊狀態是否相符
- 多版本平行控制(Multi-Version Concurrency Control, MVCC)
- 驗證完成後更新帳本(Ledger)資料
- 區塊寫入區塊鏈
- 更新狀態(State)資料庫 - Key/Value
事件(Event)
目前目前程式碼開發,區分為 3 個類型,各由不同物件觸發。
- Chaincode:鏈碼
- System Chaincode 系統鏈碼
- ESCC 決定如何進行背書
- VSCC 決定定事件的有效性
- Configuracon:通道(Channel)定義
- Custom:自訂鏈碼
系統鏈碼:可更換,影響系統行為及流程,如背書及驗證方法。
- cscc:設定(Configuration System Chaincode, CSCC)
- lscc:生命週期(Lifecycle System Chaincode, LSCC)
- escc:背書(Endorser System Chaincode, ESCC)
- vscc:驗證(Validator System Chaincode, VSCC)
- qscc:查詢(Query System Chaincode, QSCC)