本系列學(xué)習(xí)筆記以閱讀《深度探索區(qū)塊鏈:Hyperledger Fabric技術(shù)與應(yīng)用》一書的筆記為藍(lán)本腾务,故默認(rèn)Hyperledger Fabric 1.0,期間可能會追加最新版本的內(nèi)容,到時(shí)會在里面注明疗韵。這是一個(gè)邊看邊寫的系列峻呛,有興趣的也可以先自行購買此書學(xué)習(xí)。
Hyperledger Fabric 1.0是一種通用的區(qū)塊鏈技術(shù)乱豆,其設(shè)計(jì)目的是利用一些成熟的技術(shù)實(shí)現(xiàn)分布式賬本技術(shù)(Distributed Ledger Techonlogy DLT)奖恰。
超級賬本采用模塊化架構(gòu)設(shè)計(jì),復(fù)用通用的功能模塊和接口宛裕。
模塊化的方法帶來了可擴(kuò)展性瑟啃、靈活性等優(yōu)勢,會減少模塊修改揩尸、升級帶來的影響蛹屿,能很好地利用微服務(wù)實(shí)現(xiàn)區(qū)塊鏈應(yīng)用系統(tǒng)的開發(fā)和部署。
Hyperledger Fabric 1.0設(shè)計(jì)的幾個(gè)特點(diǎn):
特點(diǎn) | 說明 |
---|---|
模塊插件化 | 1.很多的功能模塊(如CA模塊岩榆、共識算法错负、狀態(tài)數(shù)據(jù)庫存儲、ESCC勇边、VSCC犹撒、BCCSP等)都是可插拔的,系統(tǒng)提供了通用的接口和默認(rèn)的實(shí)現(xiàn)粒褒,這滿足了大多數(shù)業(yè)務(wù)的需求识颊。 2.這些模塊也可以通過需求進(jìn)行擴(kuò)展,集成到系統(tǒng)中奕坟。 |
充分利用容器技術(shù) | 1.不僅節(jié)點(diǎn)使用容器做為運(yùn)行環(huán)境祥款,鏈碼也默認(rèn)運(yùn)行在安全的容器中清笨。 2.應(yīng)用程序或者外部系統(tǒng)不能直接操作鏈碼,必須通過背書節(jié)點(diǎn)提供的接口轉(zhuǎn)發(fā)給鏈碼來執(zhí)行刃跛。 |
可擴(kuò)展性 | Hyperledger Fabric 1.0在0.6版本的基礎(chǔ)上抠艾,對Peer節(jié)點(diǎn)的角色進(jìn)行了拆分,有背書節(jié)點(diǎn)(Endorser)桨昙、排序服務(wù)節(jié)點(diǎn)(Orderer)检号、記賬節(jié)點(diǎn)(Committer)等,不同角色的節(jié)點(diǎn)有不同的功能绊率。 節(jié)點(diǎn)可以加入到不同的通道(Channel)中谨敛,鏈碼可以運(yùn)行在不同的節(jié)點(diǎn)上,這樣可以更好地提升并行執(zhí)行的效率和吞吐量滤否。 |
安全性 | Hyperledger Fabric 1.0提供的是授權(quán)訪問的區(qū)塊鏈網(wǎng)絡(luò)脸狸,節(jié)點(diǎn)共同維護(hù)成員信息,MSP(Membership Service Provider)模塊驗(yàn)證藐俺、授權(quán)了最終用戶后才能使用區(qū)塊鏈網(wǎng)絡(luò)的功能炊甲。 多鏈和多通道的設(shè)計(jì)容易實(shí)現(xiàn)數(shù)據(jù)隔離,也提供了應(yīng)用程序和鏈碼之間的安全通道欲芹,實(shí)現(xiàn)了隱私保護(hù)卿啡。 |
系統(tǒng)邏輯架構(gòu)
下圖是 Hyperledger Fabric 1.0設(shè)計(jì)的系統(tǒng)邏輯架構(gòu)圖:
該圖是從不同角度來劃分的:上層從應(yīng)用層程序的角度,提供了標(biāo)準(zhǔn)的gRPC接口菱父,在API的基礎(chǔ)上封裝了不同語言的SDK颈娜,包括Golang、Node.js浙宜、Java官辽、Python等,開發(fā)人員可以利用SDK開發(fā)基于區(qū)塊鏈的應(yīng)用粟瞬。
區(qū)塊鏈強(qiáng)一致性要求各個(gè)節(jié)點(diǎn)之間達(dá)成共識需要較長的執(zhí)行時(shí)間同仆,也是采用異步通信模式進(jìn)行開發(fā)的,事件模塊可以在觸發(fā)區(qū)塊事件或者鏈碼事件的時(shí)候執(zhí)行預(yù)先定義的回調(diào)函數(shù)裙品。
應(yīng)用程序角度
1.身份管理
用戶注冊和登錄系統(tǒng)后俗批,獲取到用戶注冊證書(ECert),其他所有的操作都需要與用戶證書關(guān)聯(lián)的私鑰進(jìn)行簽名市怎。
消息接收方首先會進(jìn)行簽名驗(yàn)證岁忘,才進(jìn)行后續(xù)的消息處理。
網(wǎng)絡(luò)節(jié)點(diǎn)同樣會收到頒發(fā)的證書区匠,比如系統(tǒng)啟動和網(wǎng)絡(luò)節(jié)點(diǎn)管理等都會對用戶身份進(jìn)行認(rèn)證和授權(quán)臭觉。
2.賬本管理
授權(quán)的用戶是可以查詢賬本數(shù)據(jù)(ledger)的,這可以通過多種方式查詢辱志,包括:根據(jù)區(qū)塊號查詢區(qū)塊蝠筑、根據(jù)區(qū)塊哈希查詢區(qū)塊、根據(jù)交易號查詢區(qū)塊揩懒、根據(jù)交易號查詢交易什乙、還可以根據(jù)通道名稱獲取查詢到的區(qū)塊鏈信息。
3.交易管理
賬本數(shù)據(jù)只能通過交易執(zhí)行才能更新已球,應(yīng)用程序通過交易管理提交交易提案(Proposal)并獲取到交易背書(Endorsement)以后臣镣,再給排序服務(wù)節(jié)點(diǎn)提交交易,然后打包生成區(qū)塊智亮。
SDK提供接口忆某,利用用戶證書本地生成交易號,背書節(jié)點(diǎn)和記賬節(jié)點(diǎn)都會校驗(yàn)是否存在重復(fù)交易阔蛉。
4.智能合約
實(shí)現(xiàn)“可編程的交易賬本”(Programmable Ledger)弃舒,通過鏈碼執(zhí)行提交的交易,實(shí)現(xiàn)基于區(qū)塊鏈的智能合約業(yè)務(wù)邏輯状原。
只有智能合約才能更新賬本數(shù)據(jù)聋呢,其他模塊是不能直接修改狀態(tài)數(shù)據(jù)(World State)的。
底層角度
從1.0底層的角度來看颠区,如何實(shí)現(xiàn)分布式賬本技術(shù)削锰,給應(yīng)用程序提供區(qū)塊鏈服務(wù):
1.成員管理
MSP(Membership Service Provider)對成員管理進(jìn)行了抽象。
每個(gè)MSP都會建立一套根信任證書(Root of Truest Certificate)體系毕莱,利用PKI(Public Key Infrastructure)對成員身份進(jìn)行認(rèn)證器贩,驗(yàn)證成員用戶提交交易請求的簽名。
結(jié)合Fabric-CA或者第三方CA系統(tǒng)朋截,提供成員注冊功能蛹稍,并對成員身份證書進(jìn)行;管理质和,例如證書新增和撤銷稳摄。
注冊的證書分為注冊證書(ECert)、交易證書(TCert)和TLS證書(TLS Cert)饲宿,它們分別用于用戶身份厦酬、交易簽名和TLS傳輸。
2.共識服務(wù)
在分布式節(jié)點(diǎn)環(huán)境下瘫想,要實(shí)現(xiàn)同一個(gè)鏈上不同節(jié)點(diǎn)區(qū)塊的一致性仗阅,同時(shí)要確保區(qū)塊里的交易有效和有序。
共識機(jī)制由3個(gè)階段完成:
客戶端向背書節(jié)點(diǎn)提交交易案進(jìn)行簽名背書国夜;
客戶端將背書后的交易提交給排序服務(wù)節(jié)點(diǎn)進(jìn)行交易排序减噪,生成區(qū)塊和排序服務(wù);
之后廣播給記賬節(jié)點(diǎn)驗(yàn)證交易后寫入本地賬本。
網(wǎng)絡(luò)節(jié)點(diǎn)的P2P協(xié)議采用的是基于Gossip的數(shù)據(jù)分發(fā)筹裕,以同一組織為傳播范圍來同步數(shù)據(jù)醋闭,提升網(wǎng)絡(luò)傳輸?shù)男省?/p>
3.鏈碼服務(wù)
智能合約的實(shí)現(xiàn)依賴于安全和執(zhí)行環(huán)境,確保安全的執(zhí)行過程和用戶數(shù)據(jù)的隔離朝卒。
Fabric采用Docker管理普通的鏈碼证逻,提供安全的沙箱環(huán)境和鏡像文件倉庫。
其好處是容易支持多種語言的鏈碼抗斤,擴(kuò)展性很好囚企。
Docker方案的也有不足,如:對環(huán)境要求較高瑞眼,占用資源較多龙宏,性能不高等,實(shí)現(xiàn)過程也存在與Kubernetes伤疙、Rancher等平臺的兼容性問題银酗。
4.安全和密碼服務(wù)
Fabric 1.0專門定義了一個(gè)BCCSP(BlockChain Cryptographic Service Provider),使其實(shí)現(xiàn)秘鑰生成掩浙、哈喜運(yùn)算花吟、簽名驗(yàn)簽、加密解密等基礎(chǔ)功能厨姚。
BBSCP是一個(gè)抽象接口衅澈,默認(rèn)是軟視線的國標(biāo)算法,目前社區(qū)和較多的廠商都在實(shí)現(xiàn)國密的算法和HSM(Hardware Security Module)谬墙。