導語:本文主要介紹超級賬本?Fabric 的特點较木、基本架構設計试和、運行過程挟阻,以及在學習過程中遇到的一些疑問進行總結梳理。
一嗦枢、超級賬本Fabric的基本特點
(1)開放性
? ? ????超級賬本是linux基金會2015年底成立的攀芯。自成立后吸引了大批企業(yè),包括IBM文虏、accenture侣诺、intel殖演、cisco、HITACHI等大企業(yè)的加入∧暝В現(xiàn)在的Fabric源代碼主要由IBM和Digital Asset這兩家公司提供趴久。是IBM開源的blockchain項目。
(2)開源
? ? ????開源是特色搔确。Fabric的源代碼的開源的彼棍,托管在github上,鏈接見https://github.com/hyperledger/fabric.git膳算。所有開發(fā)者或企業(yè)機構都可以自由地下載座硕,進行研究,在此基礎上結合業(yè)務場景涕蜂,在不同的商業(yè)場景上應用落地坎吻。
(3)SDK支持多語言,減低門檻
? ? ????目前Fabric SDK支持go宇葱、java、js刊头,python四種主流語言黍瞧,大多數(shù)開發(fā)者可以快速的上手,降低了開發(fā)的門檻和成本原杂。此外印颤,還有一個Hyper ledger Composer工具,可以快速地搭建環(huán)境穿肄。
(4)可插拔年局,可擴展
? ? ? ? Fabric中的CA、數(shù)據(jù)庫咸产、共識算法都是可插拔的矢否。而且,F(xiàn)abric中的鏈碼是通過docker實現(xiàn)脑溢。
(5)基于聯(lián)盟鏈的前提僵朗,兼顧數(shù)據(jù)共享和隱私保護
? ? ? ? Fabric最多的特點是引入了鏈碼和通道的概念。在Fabric中屑彻,通過channel验庙,也即通道隔離數(shù)據(jù),只有在這個通道的節(jié)點才能共享賬本社牲,二訪問不了其他賬本粪薛。通過建立不同的通道,可實現(xiàn)按需共享的目的搏恤。更符合現(xiàn)實生活的商業(yè)場景违寿。
二湃交、Fabric的基本架構
? ? Fabric包括了三大基本組件:Peer節(jié)點,Orderer節(jié)點陨界,fabric-ca.
(1)Peer節(jié)點
? ? Peer節(jié)點一般運行在docker中巡揍,主要負責接收交易請求,是在網絡中具有一定功能的服務或軟件菌瘪。而節(jié)點之間的通信是通過GRPC實現(xiàn)腮敌。Peer節(jié)點主要分為三種類型:Endorser、Committer俏扩、Submitter糜工。每一個Peer節(jié)點中都維護一份賬本,賬本數(shù)據(jù)本身是文件系統(tǒng)录淡。
????????1捌木、 背書節(jié)點Endorser : 負責對交易天進行檢查背書,根據(jù)定義好的規(guī)則讀寫數(shù)據(jù)嫉戚、讀寫集刨裆。這個讀寫的數(shù)據(jù)稱之為狀態(tài)db(state db或者world state db),可以是CouchDB或者LevelDB彬檀。背書就是簽署授權的意思帆啃。即根據(jù)約定往事務里讀寫數(shù)據(jù),可以理解為執(zhí)行合同中的某一個條款窍帝。但是這個數(shù)據(jù)是沒有寫到賬本中的努潘,因為賬本是共享的。
????????2坤学、確認節(jié)點Committer:負責檢查交易請求疯坤,驗證endorsements和transaction的結果,并且執(zhí)行交易深浮,并維護區(qū)塊鏈和賬本結構压怠。Committer會寫共享賬本數(shù)據(jù)。
? ? ? ? 3略号、Submitter:具體職能暫時沒用刑峡。
(2)Order節(jié)點
? ? ? ? Order節(jié)點主要負責對收到的交易在網絡中進行全局愛須。接收transaction玄柠,產生block突梦。并且負責共識機制的policy管理,RWSet羽利。
(3)CA節(jié)點
????????CA節(jié)點主要負責網絡中成員身份管理宫患。目前采用數(shù)字證書機制,實現(xiàn)PKI服務这弧。包括以下三個組件:
????????1娃闲、CA:負責證書的頒發(fā)和作廢虚汛,接收來自RA的請求。是PKI服務中最核心的組件皇帮,主要完成對公鑰的管理卷哩。
? ? ? ? 2、RA:對用戶身份進行驗證属拾,校驗數(shù)據(jù)合法性将谊,負責登記和審核,審核通過了就會發(fā)給CA
? ? ? ? 3渐白、證書數(shù)據(jù)庫:存放證書尊浓。
三、Fabric運作過程
? ? 事務就是合約纯衍、合同栋齿。完成這個合同的不同的參與者需要完成不同的任務。如下圖所示:右上角的紫色的框內是簽署規(guī)則襟诸;E0瓦堵、E1、E2是Endoser節(jié)點歌亲;P3谷丸、P4是Commit節(jié)點;上述節(jié)點運行在一個通道channel上应结;黃色A表示連碼;
? ? 注:圖片摘自《IBM技術專家:Hyperleger Fabric架構域部署實例解析》
(1)客戶端根據(jù)規(guī)則向這個網絡中廣播一條消息
(2)Endoser節(jié)點收到消息后泉唁,進行背書鹅龄。即根據(jù)約定往事務里讀寫數(shù)據(jù),可以理解為執(zhí)行合同中的某一個條款亭畜。但是這個數(shù)據(jù)(RW sets)是沒有寫到賬本中的扮休,因為賬本是共享的。
(3)Endoser節(jié)點完成簽署后拴鸵,通知客戶端玷坠。其中,讀寫數(shù)據(jù)會被每個Endoser簽名劲藐。
(4)客戶端段收到返回后八堡,就像Orderer service發(fā)送請求。Orderer 對這個交易進行排序聘芜,與網絡中的其他交易是并行的兄渺。
(5)之后寫到block中,并發(fā)送給Committer 節(jié)點P3和P4汰现。共識算法有:SOLO挂谍、Kafka叔壤、SBFT等。
(6)Committer節(jié)點驗證交易和當前RW sets狀態(tài)是否合法口叙,驗證通過就寫入到賬本中炼绘。
(7)Comitter節(jié)點通過客戶端,交易完成妄田。
四俺亮、常見疑難雜癥匯總
Q:區(qū)塊上的數(shù)據(jù)隱私是如果實現(xiàn)的?
A:Fabric引入通道的概念形庭,對數(shù)據(jù)進行隔離铅辞,從而實現(xiàn)不同的賬本的隱私保護。即只有在這個通道上的用戶才能訪問這個通道上的賬本萨醒。
Q:Fabric 是典型的聯(lián)盟鏈斟珊,安全性如何?
A:聯(lián)盟鏈中的企業(yè)都是互相了解的富纸,每一個參與者都有企業(yè)背景的背書囤踩,基于可信的前提下建立聯(lián)盟鏈,安全性是有保障的晓褪。
Q:Fabric中的賬本實際是包括key-value的數(shù)據(jù)庫和區(qū)塊鏈堵漱,其中數(shù)據(jù)庫是可修改的,不能修改的知識區(qū)塊鏈中的賬本涣仿。
A:數(shù)據(jù)是以賬本上的數(shù)據(jù)為準勤庐,peer啟動時會根據(jù)賬本recover state db,也可以根據(jù)需要隨時recover state db好港。其中愉镰,state db存儲的是交易的最新狀態(tài),可以簡單理解為:state db記錄的是賬戶的余額钧汹,而賬本記錄的是UTXO模型的數(shù)據(jù)丈探。