下圖所示為Hyperledger Fabric 1.0設計的系統邏輯架構圖。

上圖所示的系統邏輯架構圖是從不同角度來劃分的,上層從應用程序的角度,提供了標準的gRPC接口,在API的基礎之上封裝了不同語言的SDK,包括Golang、Node.js、Java、Python等,開發人員可以利用SDK開發基于區塊鏈的應用。區塊鏈強一致性要求,各個節點之間達成共識需要較長的執行時間,也是采用異步通信的模式進行開發的,事件模塊可以在觸發區塊事件或者鏈碼事件的時候執行預先定義的回調函數。下面分別從應用程序和底層的角度分析應該關注的幾個要素。
1、應用程序角度
(1)身份管理
用戶注冊和登錄系統后,獲取到用戶注冊證書(ECert),其他所有的操作都需要與用戶證書關聯的私鑰進行簽名,消息接收方首先會進行簽名驗證,才進行后續的消息處理。網絡節點同樣會用到頒發的證書,比如系統啟動和網絡節點管理等都會對用戶身份進行認證和授權。
(2)賬本管理
授權的用戶是可以查詢賬本數據(ledger)的,這可以通過多種方式查詢,包括根據區塊號查詢區塊、根據區塊哈希查詢區塊、根據交易號查詢區塊、根據交易號查詢交易,還可以根據通道名稱獲取查詢到的區塊鏈信息。
(3)交易管理
賬本數據只能通過交易執行才能更新,應用程序通過交易管理提交交易提案(Proposal)并獲取到交易背書(Endorsement)以后,再給排序服務節點提交交易,然后打包生成區塊。SDK提供接口,利用用戶證書本地生成交易號,背書節點和記賬節點都會校驗是否存在重復交易。
(4)智能合約
實現“可編程的賬本”(Programmable Ledger),通過鏈碼執行提交的交易,實現基于區塊鏈的智能合約業務邏輯。只有智能合約才能更新賬本數據,其他模塊是不能直接修改狀態數據(World State)的。
2.底層角度
下面的內容是從Hyperledger Fabric 1.0底層的角度來看,如何實現分布式賬本技術,給應用程序提供區塊鏈服務。
(1)成員管理
MSP(Membership Service Provider)對成員管理進行了抽象,每個MSP都會建立一套根信任證書(Root of Trust Certificate)體系,利用PKI(Public Key Infrastructure)對成員身份進行認證,驗證成員用戶提交請求的簽名。結合Fabric-CA或者第三方CA系統,提供成員注冊功能,并對成員身份證書進行管理,例如證書新增和撤銷。注冊的證書分為注冊證書(ECert)、交易證書(TCert)和TLS證書(TLS Cert),它們分別用于用戶身份、交易簽名和TLS傳輸。
(2)共識服務
在分布式節點環境下,要實現同一個鏈上不同節點區塊的一致性,同時要確保區塊里的交易有效和有序。共識機制由3個階段完成:客戶端向背書節點提交提案進行簽名背書,客戶端將背書后的交易提交給排序服務節點進行交易排序,生成區塊和排序服務,之后廣播給記賬節點驗證交易后寫入本地賬本。網絡節點的P2P協議采用的是基于Gossip的數據分發,以同一組織為傳播范圍來同步數據,提升網絡傳輸的效率。
(3)鏈碼服務
智能合約的實現依賴于安全的執行環境,確保安全的執行過程和用戶數據的隔離。Hyperledger Fabric采用Docker管理普通的鏈碼,提供安全的沙箱環境和鏡像文件倉庫。其好處是容易支持多種語言的鏈碼,擴展性很好。Docker的方案也有自身的問題,比如對環境要求較高,占用資源較多,性能不高等,實現過程中也存在與Kubernetes、Rancher等平臺的兼容性問題。
(4)安全和密碼服務
安全問題是企業級區塊鏈關心的問題,尤其在關注國家安全的項目中。其中底層的密碼學支持尤其重要,Hyperledger Fabric 1.0專門定義了一個BCCSP(BlockChain Cryptographic Service Provider),使其實現密鑰生成、哈希運算、簽名驗簽、加密解密等基礎功能。BCCSP是一個抽象的接口,默認是軟實現的國標算法,目前社區和較多的廠家都在實現國密的算法和HSM(Hardware Security Module)。
Hyperledger Fabric 1.0在架構上的設計具有很好的可擴展性,目前是眾多可見的區塊鏈技術中最為活躍的,值得區塊鏈技術愛好者深入研究。