如何理解HyperLegerFabric架構(gòu)-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關(guān)如何理解HyperLeger Fabric架構(gòu),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)為企業(yè)級(jí)客戶(hù)提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、成都app軟件開(kāi)發(fā)公司、重慶小程序開(kāi)發(fā)公司、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶(hù)快速提升營(yíng)銷(xiāo)能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門(mén)都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個(gè)作品的質(zhì)量和創(chuàng)作周期,同時(shí)每年都有很多新員工加入,為我們帶來(lái)大量新的創(chuàng)意。 HyperLeger Fabric開(kāi)發(fā)一、HyperLeger Fabric邏輯架構(gòu)1、HyperLeger Fabric邏輯架構(gòu)簡(jiǎn)介

如何理解HyperLeger Fabric架構(gòu)
Fabric邏輯架構(gòu)根據(jù)不同角度進(jìn)行劃分,上層基于應(yīng)用程序角度進(jìn)行設(shè)計(jì),包括SDK、API、事件,通過(guò)SDK、API、事件來(lái)對(duì)底層區(qū)塊鏈進(jìn)行操作:包括身份管理、賬本管理、交易管理、智能合約的部署和調(diào)用;下層基于底層區(qū)塊鏈進(jìn)行設(shè)計(jì),對(duì)外提供成員管理服務(wù)、共識(shí)服務(wù)、鏈碼服務(wù)、安全和密碼服務(wù)。
Fabric為應(yīng)用開(kāi)發(fā)提供了標(biāo)準(zhǔn)的gRPC接口,在API的基礎(chǔ)上封裝了不同語(yǔ)言的SDK,包括Go、NODE.JS、Java、Python等,開(kāi)發(fā)人員可以利用SDK開(kāi)發(fā)基于區(qū)塊鏈的應(yīng)用;同時(shí),區(qū)塊鏈的強(qiáng)一致性要求各個(gè)節(jié)點(diǎn)之間達(dá)成共識(shí)需要較長(zhǎng)的執(zhí)行時(shí)間,應(yīng)用程序也是采用異步通信的模式進(jìn)行開(kāi)發(fā)的,事件模塊可以在觸發(fā)區(qū)塊事件或者鏈碼事件的時(shí)候執(zhí)行預(yù)先定義的回調(diào)函數(shù)。
Fabric通過(guò)將各個(gè)部分分離成不同的模塊,做到可插拔性、靈活擴(kuò)展性。

2、應(yīng)用層邏輯架構(gòu)

(1)身份管理
聯(lián)盟鏈考慮到商業(yè)應(yīng)用對(duì)安全、隱私、監(jiān)管、審計(jì)、性能的需求,提高準(zhǔn)入門(mén)檻,成員必須被許可才能加入網(wǎng)絡(luò)。Fabric是目前為止在設(shè)計(jì)上最貼近聯(lián)盟鏈思想的區(qū)塊鏈。聯(lián)盟鏈考慮到商業(yè)應(yīng)用對(duì)安全、隱私、監(jiān)管、審計(jì)、性能的需求,提高準(zhǔn)入門(mén)檻,成員必須被許可才能加入網(wǎng)絡(luò)。Fabric成員管理服務(wù)為整個(gè)區(qū)塊鏈網(wǎng)絡(luò)提供身份管理、隱私、保密和可審計(jì)的服務(wù)。成員管理服務(wù)通過(guò)公鑰基礎(chǔ)設(shè)施PKI和去中心化共識(shí)機(jī)制使得非許可的區(qū)塊鏈變成許可制的區(qū)塊鏈。
Fabric區(qū)塊鏈中,采用數(shù)字證書(shū)機(jī)制負(fù)責(zé)對(duì)網(wǎng)絡(luò)中的成員身份進(jìn)行管理,CA節(jié)點(diǎn)實(shí)現(xiàn)了PKI服務(wù)。
PKI(Public Key Infrastructure)是綜合多種密碼學(xué)手段來(lái)實(shí)現(xiàn)安全可靠傳遞消息和身份確認(rèn)的一個(gè)框架和規(guī)范。通常,PKI包括三部分:CA(Certification Authority)負(fù)責(zé)證書(shū)的頒發(fā)和作廢,接收來(lái)自RA的請(qǐng)求; RA(Registration Authority)負(fù)責(zé)對(duì)用戶(hù)身份進(jìn)行驗(yàn)證,校驗(yàn)數(shù)據(jù)合法性,負(fù)責(zé)登記,審核通過(guò)則發(fā)給CA;證書(shū)數(shù)據(jù)庫(kù)用于存放證書(shū),一般采用LDAP目錄服務(wù),標(biāo)準(zhǔn)格式采用X.500系列。
CA是PKI體系最核心的組件,主要完成對(duì)公鑰的管理。密鑰有兩種類(lèi)型:用于簽名和用于加解密,對(duì)應(yīng)稱(chēng)為簽名密鑰對(duì)和加密密鑰對(duì)。 用戶(hù)基于PKI體系要申請(qǐng)一個(gè)證書(shū),一般可以由CA來(lái)生成證書(shū)和私鑰,也可以自己生成公鑰和私鑰,然后由CA來(lái)對(duì)公鑰進(jìn)行簽發(fā)。
(2)賬本管理
授權(quán)的用戶(hù)是可以查詢(xún)賬本數(shù)據(jù)的,可以通過(guò)多種方式查詢(xún),包括:
A、根據(jù)區(qū)塊號(hào)查詢(xún)區(qū)塊
B、根據(jù)區(qū)塊哈希查詢(xún)區(qū)塊
C、根據(jù)交易號(hào)查詢(xún)區(qū)塊
D、根據(jù)交易號(hào)查詢(xún)交易
E、根據(jù)通道名稱(chēng)查詢(xún)區(qū)塊鏈信息
(3)交易管理
賬本數(shù)據(jù)只能通過(guò)交易執(zhí)行才能更新,應(yīng)用程序通過(guò)交易管理提交提案(Proposal),在獲取到足夠數(shù)量交易背書(shū)(Endorsement)后,再給排序服務(wù)節(jié)點(diǎn)提交交易,排序服務(wù)將批量交易打包生成區(qū)塊。SDK提供接口,利用用戶(hù)證書(shū)本地生成交易號(hào),背書(shū)節(jié)點(diǎn)和記賬節(jié)點(diǎn)都會(huì)校驗(yàn)是否存在重復(fù)交易。
(4)智能合約
Fabric的智能合約(Smart Contract)稱(chēng)為鏈碼(ChainCode),是一段代碼,用于處理網(wǎng)絡(luò)成員所同意的業(yè)務(wù)邏輯。Fabric的鏈碼和底層賬本是分開(kāi)的,升級(jí)鏈碼時(shí)并不需要遷移賬本數(shù)據(jù)到新鏈碼當(dāng)中,真正實(shí)現(xiàn)了邏輯與數(shù)據(jù)的分離。
Fabric通過(guò)智能合約實(shí)現(xiàn)了可編程的賬本,通過(guò)鏈碼執(zhí)行提交的交易,實(shí)現(xiàn)基于區(qū)塊鏈的智能合約業(yè)務(wù)邏輯。只有智能合約才能更新賬本數(shù)據(jù),其它模塊不能直接修改狀態(tài)數(shù)據(jù)。
鏈碼可采用Go、Java、Node.js語(yǔ)言編寫(xiě)。鏈碼被編譯成一個(gè)獨(dú)立的應(yīng)用程序,F(xiàn)abric用Docker容器來(lái)運(yùn)行鏈碼,容器里的base鏡像都是經(jīng)過(guò)簽名驗(yàn)證的安全鏡像,包括OS層和開(kāi)發(fā)鏈碼的語(yǔ)言、runtime和SDK層。一旦鏈碼容器被啟動(dòng),就會(huì)通過(guò)gRPC與啟動(dòng)鏈碼的Peer節(jié)點(diǎn)連接。

3、底層邏輯架構(gòu)

(1)成員服務(wù)管理
MSP(Member Service Provider)成員服務(wù)模塊對(duì)成員管理進(jìn)行了抽象,提供包括會(huì)員注冊(cè),身份保護(hù)、內(nèi)容保密、交易審計(jì)等功能,可以使用可插拔的Fabric-CA模塊或第三方的CA來(lái)代替。
(2)共識(shí)服務(wù)
共識(shí)服務(wù)負(fù)責(zé)節(jié)點(diǎn)間共識(shí)管理、賬本的分布式計(jì)算、賬本的存儲(chǔ)及節(jié)點(diǎn)間的P2P協(xié)議功能的實(shí)現(xiàn),是區(qū)塊鏈的核心組成部分,為區(qū)塊鏈的主體功能提供了底層技術(shù)支撐
(3)鏈碼服務(wù)
鏈碼服務(wù)為智能合約實(shí)現(xiàn)提供了一系列接口,并為鏈碼的安裝、運(yùn)行、部署提供了環(huán)境。智能合約的實(shí)現(xiàn)依賴(lài)于安全的執(zhí)行環(huán)境,確保安全的執(zhí)行過(guò)程和用戶(hù)數(shù)據(jù)的隔離。Fabric采用Docker管理普通的鏈碼,提供安全的沙箱環(huán)境和鏡像文件倉(cāng)庫(kù),可支持多種語(yǔ)言的鏈碼。
(4)安全和密碼服務(wù)
安全問(wèn)題是企業(yè)級(jí)區(qū)塊鏈關(guān)心的問(wèn)題,Hyperledger Fabric專(zhuān)門(mén)定義了一個(gè)BCCSP(BlockChain Cryptographic Service Provider)模塊,實(shí)現(xiàn)密鑰生成、哈希運(yùn)算、簽名驗(yàn)簽、加密解密等基礎(chǔ)功能。

4、HyperLeger Fabric邏輯架構(gòu)的特點(diǎn)

Hyperledger Fabric采用模塊化架構(gòu)設(shè)計(jì),利用通用的功能模塊和接口。模塊化的方法帶來(lái)了可擴(kuò)展性、靈活性等優(yōu)勢(shì),會(huì)減少模塊修改、升級(jí)帶來(lái)的影響,能很好的利用微服務(wù)實(shí)現(xiàn)區(qū)塊鏈應(yīng)用系統(tǒng)的開(kāi)發(fā)和部署。
(1)模塊插件化
Fabric很多功能模塊(如CA模塊、共識(shí)算法、狀態(tài)數(shù)據(jù)庫(kù)存儲(chǔ)、ESCC、VSCC、BCCSP等)都是可插拔的。Fabric提供的通用接口和默認(rèn)實(shí)現(xiàn)可以滿(mǎn)足大多數(shù)的業(yè)務(wù)需求,同時(shí)功能模塊也可以根據(jù)需求進(jìn)行擴(kuò)展,集成到Fabric區(qū)塊鏈網(wǎng)絡(luò)系統(tǒng)中。
(2)充分利用容器技術(shù)
Fabric中不僅節(jié)點(diǎn)使用容器作為運(yùn)行環(huán)境,鏈碼也默認(rèn)運(yùn)行在安全的容器中。應(yīng)用程序或者外部系統(tǒng)不能直接操作鏈碼,必須通過(guò)背書(shū)節(jié)點(diǎn)提供的接口轉(zhuǎn)發(fā)給鏈碼來(lái)執(zhí)行。容器給鏈碼運(yùn)行提供安全沙箱環(huán)境,把鏈碼的環(huán)境和背書(shū)節(jié)點(diǎn)的環(huán)境隔離開(kāi),鏈碼存在安全問(wèn)題也不會(huì)影響到背書(shū)節(jié)點(diǎn)。
(3)可擴(kuò)展性
Hyperledger Fabric1.x版本對(duì)節(jié)點(diǎn)的角色進(jìn)行了不同的拆分,有主節(jié)點(diǎn)(Leader)、背書(shū)節(jié)點(diǎn)(Endorser)、記賬節(jié)點(diǎn)(Committer)、排序服務(wù)節(jié)點(diǎn)(Orderer)等,不同角色的節(jié)點(diǎn)有不同的功能。節(jié)點(diǎn)可以加入不同的通道中,鏈碼可以運(yùn)行在不同的背書(shū)節(jié)點(diǎn)上,可以更好的提升并行執(zhí)行的效率和吞吐量。
(4)安全性
Hyperledger Fabric提供授權(quán)訪問(wèn)的區(qū)塊鏈網(wǎng)絡(luò),節(jié)點(diǎn)共同維護(hù)成員信息,只有MSP(Member Service Provide)模塊驗(yàn)證、授權(quán)的終端用戶(hù)才能使用區(qū)塊鏈網(wǎng)絡(luò)的功能。多鏈和多通道的設(shè)計(jì)容易實(shí)現(xiàn)數(shù)據(jù)隔離,也提供了應(yīng)用程序和鏈碼之間的安全通道,實(shí)現(xiàn)了隱私保護(hù)。

二、HyperLeger Fabric網(wǎng)絡(luò)架構(gòu)1、HyperLeger Fabric網(wǎng)絡(luò)架構(gòu)簡(jiǎn)介

Fabric網(wǎng)絡(luò)是通過(guò)組織來(lái)劃分的,每個(gè)組織內(nèi)都包含承擔(dān)不同功能的Peer 節(jié)點(diǎn),每個(gè)Peer節(jié)點(diǎn)又可以擔(dān)任多種角色。所有的組織共用一個(gè)統(tǒng)一的Orderer排序服務(wù)集群?;贖yperledger Fabric區(qū)塊鏈網(wǎng)絡(luò)的設(shè)計(jì)時(shí)需要考慮組織之間的業(yè)務(wù)關(guān)系以及內(nèi)部每個(gè)模塊之間的聯(lián)系,統(tǒng)一進(jìn)行規(guī)劃。
如何理解HyperLeger Fabric架構(gòu)
Fabric網(wǎng)絡(luò)包含客戶(hù)端節(jié)點(diǎn)、CA節(jié)點(diǎn)、Peer節(jié)點(diǎn)、Orderer節(jié)點(diǎn)。
如何理解HyperLeger Fabric架構(gòu)
每個(gè)組織通常擁有自己的客戶(hù)端、Peer節(jié)點(diǎn)和CA節(jié)點(diǎn),并且可以根據(jù)需要?jiǎng)?chuàng)建一個(gè)或多個(gè)不同的類(lèi)型節(jié)點(diǎn)。Orderer節(jié)點(diǎn)不屬于某個(gè)組織的實(shí)體,屬于組織共同維護(hù)的節(jié)點(diǎn)。
如何理解HyperLeger Fabric架構(gòu)

2、客戶(hù)端節(jié)點(diǎn)

客戶(hù)端或應(yīng)用程序代表由終端用戶(hù)操作的實(shí)體,必須連接到某一個(gè)Peer節(jié)點(diǎn)或者排序服務(wù)節(jié)點(diǎn)上與區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行通信??蛻?hù)端向背書(shū)節(jié)點(diǎn)(Endorser Peer)提交交易提案(Proposal),當(dāng)收集到足夠背書(shū)后,向排序服務(wù)節(jié)點(diǎn)廣播交易,進(jìn)行排序,生成區(qū)塊。
客戶(hù)端的主要作用是與Fabric區(qū)塊鏈交互,實(shí)現(xiàn)對(duì)區(qū)塊鏈的操作。區(qū)塊鏈操作分為管理類(lèi)和鏈碼類(lèi)的兩種,管理類(lèi)操作包括啟停節(jié)點(diǎn)和配置網(wǎng)絡(luò)等;鏈碼類(lèi)操作主要是鏈碼的生命周期管理,如安裝、實(shí)例化以及調(diào)用鏈碼。最常用的客戶(hù)端是命令行客戶(hù)端(CLI),此外是使用Fabric SDK開(kāi)發(fā)的應(yīng)用客戶(hù)端。

3、CA節(jié)點(diǎn)

CA節(jié)點(diǎn)主要給Fabric網(wǎng)絡(luò)中的成員提供基于數(shù)字證書(shū)的身份信息,可以生成或取消成員的×××?xí)╟ertificate)。CA節(jié)點(diǎn)是Fabric網(wǎng)絡(luò)的證書(shū)頒發(fā)節(jié)點(diǎn)(Certificate Authority),由服務(wù)器(fabric-ca-server)和客戶(hù)端(fabric-ca-client)組成。
CA節(jié)點(diǎn)接收客戶(hù)端的注冊(cè)申請(qǐng),返回注冊(cè)密碼用于登錄,以便獲取×××?xí)?。在區(qū)塊鏈網(wǎng)絡(luò)上所有的操作都會(huì)驗(yàn)證用戶(hù)的身份。
CA節(jié)點(diǎn)是可選的,也可以用其它成熟的第三方CA頒發(fā)證書(shū)。

4、Peer節(jié)點(diǎn)

Fabric區(qū)塊鏈網(wǎng)絡(luò)中的每個(gè)組織可以擁有一到多個(gè)Peer節(jié)點(diǎn)。每個(gè)Peer節(jié)點(diǎn)可以擔(dān)任多種角色:Endorser Peer(背書(shū)節(jié)點(diǎn))、Leader Peer(主節(jié)點(diǎn))、Committer Peer(記賬節(jié)點(diǎn))、Anchor Peer(錨節(jié)點(diǎn))。
每個(gè)Peer節(jié)點(diǎn)必定是一個(gè)記賬節(jié)點(diǎn),除記賬節(jié)點(diǎn)外,也可以擔(dān)任其它一到多種角色,即某個(gè)Peer節(jié)點(diǎn)可以同時(shí)是記賬節(jié)點(diǎn)和背書(shū)節(jié)點(diǎn),也可以同時(shí)是記賬節(jié)點(diǎn)、背書(shū)節(jié)點(diǎn)、主節(jié)點(diǎn),錨節(jié)點(diǎn)。
(1)Endorser Peer(背書(shū)節(jié)點(diǎn))
  部分Peer節(jié)點(diǎn)會(huì)執(zhí)行交易并對(duì)結(jié)果進(jìn)行簽名背書(shū),充當(dāng)背書(shū)節(jié)點(diǎn)的角色 。
  背書(shū)(Endorsement)是指特定Peer節(jié)點(diǎn)執(zhí)行交易并向生成交易提案( proposal )的客戶(hù)端應(yīng)用程序返回YES/NO響應(yīng)的過(guò)程。
  背書(shū)節(jié)點(diǎn)是動(dòng)態(tài)的角色,是與具體鏈碼綁定的。每個(gè)鏈碼在實(shí)例化的時(shí)候都會(huì)設(shè)置背書(shū)策略(Endorsement policy),指定哪些節(jié)點(diǎn)對(duì)交易背書(shū)才有效。
   也只有在應(yīng)用程序向節(jié)點(diǎn)發(fā)起交易背書(shū)請(qǐng)求時(shí)才成為背書(shū)節(jié)點(diǎn),其它時(shí)候是普通的記賬節(jié)點(diǎn),只負(fù)責(zé)驗(yàn)證交易并記賬。
(2)Leader Peer(主節(jié)點(diǎn))
      主節(jié)點(diǎn)負(fù)責(zé)和Orderer排序服務(wù)節(jié)點(diǎn)通信,從排序服務(wù)節(jié)點(diǎn)處獲取最新的區(qū)塊并在組織內(nèi)部同步??梢詮?qiáng)制設(shè)置,也可以選舉產(chǎn)生。
(3)Committer Peer(記賬節(jié)點(diǎn))
    負(fù)責(zé)驗(yàn)證從排序服務(wù)節(jié)點(diǎn)接收的區(qū)塊里的交易,然后將區(qū)塊提交(寫(xiě)入/追加)到其通道賬本的副本。記賬節(jié)點(diǎn)還將每個(gè)塊中的每個(gè)交易標(biāo)記為有效或無(wú)效。
(4)Anchor Peer(錨節(jié)點(diǎn))
 在一個(gè)通道上可以被所有其它Peer節(jié)點(diǎn)發(fā)現(xiàn)的Peer節(jié)點(diǎn),通道上的每個(gè)成員都有一個(gè)Anchor Peer(或多個(gè)Anchor Peer來(lái)防止單點(diǎn)故障),允許屬于不同成員的Peer節(jié)點(diǎn)發(fā)現(xiàn)通道上的所有現(xiàn)有Peer節(jié)點(diǎn)。

5、Orderer(排序服務(wù)節(jié)點(diǎn))

排序服務(wù)節(jié)點(diǎn)接收包含背書(shū)簽名的交易,對(duì)未打包的交易進(jìn)行排序生成區(qū)塊,廣播給Peer節(jié)點(diǎn)。
排序服務(wù)提供的是原子廣播,保證同一個(gè)鏈上的節(jié)點(diǎn)為接收到相同的消息,并且有相同的邏輯順序。
排序服務(wù)獨(dú)立于Peer進(jìn)程存在并且以先來(lái)先服務(wù)的方式對(duì)Fabric網(wǎng)絡(luò)上的所有通道進(jìn)行排序交易。排序服務(wù)旨在支持超出現(xiàn)有的SOLO和Kafka的可插拔實(shí)現(xiàn)。排序服務(wù)是整個(gè)網(wǎng)絡(luò)的公共綁定,包含綁定到每個(gè)成員的加密身份材料。
排序服務(wù)節(jié)點(diǎn)按照一定規(guī)則確定交易順序后,發(fā)給各個(gè)記賬節(jié)點(diǎn),把交易持久化到區(qū)塊鏈的賬本中。排序服務(wù)節(jié)點(diǎn)支持互相隔離的多個(gè)通道,使得交易只發(fā)送給相關(guān)的記賬節(jié)點(diǎn)(Peer節(jié)點(diǎn))。

三、Fabric多鏈多通道設(shè)計(jì)1、通道簡(jiǎn)介

商業(yè)應(yīng)用的一個(gè)重要的需求是私密×××易,為此Fabric設(shè)計(jì)了通道(Channel)來(lái)提供成員之間的隱私保護(hù)。通道是部分網(wǎng)絡(luò)成員之間擁有獨(dú)立的通信渠道,在通道中發(fā)送的交易只有屬于通道的成員才可見(jiàn),因此通道可以看作是Fabric的網(wǎng)絡(luò)中部分成員的私有通信子網(wǎng)。
通道由排序服務(wù)管理。在創(chuàng)建通道的時(shí)候,需要定義通道的成員和組織、錨節(jié)點(diǎn)(anchor peer)和排序服務(wù)節(jié)點(diǎn),一條與通道對(duì)應(yīng)的區(qū)塊鏈會(huì)同時(shí)生成,用于記錄賬本的交易,通道的初始配置信息記錄在區(qū)塊鏈的創(chuàng)世區(qū)塊中,可以通過(guò)增加一個(gè)新的配置區(qū)塊來(lái)更改通道的配置信息。
每個(gè)組織可以有多個(gè)節(jié)點(diǎn)加入同一個(gè)通道,組織內(nèi)的節(jié)點(diǎn)中可以指定一個(gè)錨節(jié)點(diǎn)或多個(gè)錨節(jié)點(diǎn)(增強(qiáng)系統(tǒng)可靠性,避免單點(diǎn)故障)。組織的錨節(jié)點(diǎn)代表本組織與其它組織的節(jié)點(diǎn)交互,從而發(fā)現(xiàn)通道中的所有節(jié)點(diǎn)。另外,同一組織的節(jié)點(diǎn)會(huì)選舉或指定主導(dǎo)節(jié)點(diǎn)(leading peer),主導(dǎo)節(jié)點(diǎn)負(fù)責(zé)接收從排序服務(wù)發(fā)來(lái)的區(qū)塊,然后轉(zhuǎn)發(fā)給本組織的其它節(jié)點(diǎn)。主導(dǎo)節(jié)點(diǎn)可以通過(guò)特定的算法選出,可以保證在節(jié)點(diǎn)數(shù)量不斷變動(dòng)的情況下仍能維持整個(gè)網(wǎng)絡(luò)的穩(wěn)定性。
在Fabric網(wǎng)絡(luò)中,可能同時(shí)存在多條彼此隔離的通道,每條通道包含一條私有的區(qū)塊鏈和一個(gè)私有賬本,通道中可以實(shí)例化一個(gè)或多個(gè)鏈碼,以操作區(qū)塊鏈上的數(shù)據(jù)。

2、Fabric多鏈多通道設(shè)計(jì)

Fabric 1.x版本支持多鏈和多通道。Fabric的一條區(qū)塊鏈?zhǔn)前琍eer節(jié)點(diǎn)、賬本、排序服務(wù)的邏輯結(jié)構(gòu),將參與者與數(shù)據(jù)(包含鏈碼)進(jìn)行隔離,滿(mǎn)足不同業(yè)務(wù)場(chǎng)景下的不同的人訪問(wèn)不同數(shù)據(jù)的基本要求。
如何理解HyperLeger Fabric架構(gòu)
通道是共識(shí)服務(wù)提供的一種通訊機(jī)制,基于發(fā)布-訂閱關(guān)系,將Peer節(jié)點(diǎn)和排序節(jié)點(diǎn)根據(jù)某個(gè)Topic連接在一起,形成一個(gè)具有保密性的通訊鏈路(虛擬),實(shí)現(xiàn)業(yè)務(wù)隔離的要求。
排序服務(wù)提供了供Peer節(jié)點(diǎn)訂閱的主題(如發(fā)布-訂閱消息隊(duì)列),每個(gè)主題是一個(gè)通道。Peer節(jié)點(diǎn)可以訂閱多個(gè)通道,并且只能訪問(wèn)自己所訂閱通道上的交易,因此一個(gè)Peer節(jié)點(diǎn)可以通過(guò)接入多個(gè)通道參與到多條鏈中。
目前通道分為系統(tǒng)通道(System Channel)和應(yīng)用通道(Application Channel)。排序服務(wù)通過(guò)系統(tǒng)通道來(lái)管理應(yīng)用通道,用戶(hù)的交易信息通過(guò)應(yīng)用通道傳遞。
通道由排序服務(wù)節(jié)點(diǎn)負(fù)責(zé)管理,同時(shí)排序服務(wù)節(jié)點(diǎn)還負(fù)責(zé)對(duì)通道中的交易進(jìn)行排序。在通道中一般包含有若干成員(組織),若兩個(gè)網(wǎng)絡(luò)實(shí)體的×××?xí)軌蜃匪莸酵粋€(gè)根CA,則認(rèn)為這兩個(gè)實(shí)體屬于同一組織。此外,通道中的每個(gè)組織都會(huì)有一個(gè)或以上的錨節(jié)點(diǎn),錨節(jié)點(diǎn)負(fù)責(zé)與其它組織交換共享賬本的數(shù)據(jù)。
創(chuàng)建通道的時(shí)候定義了成員,只有通過(guò)成員MSP驗(yàn)證的實(shí)體,才能夠加入到通道并訪問(wèn)通道的數(shù)據(jù)。
排序服務(wù)支持多通道,提供了通向客戶(hù)端和Peer節(jié)點(diǎn)的共享通信通道,提供了包含交易的消息廣播服務(wù)(broadcast和deliver)。客戶(hù)端可以通過(guò)通道向連接到通道的所有節(jié)點(diǎn)廣播(broadcast)消息,向連接到通道的所有節(jié)點(diǎn)投遞(deliver)消息。多通道使得Peer節(jié)點(diǎn)可以基于應(yīng)用訪問(wèn)控制策略來(lái)訂閱任意數(shù)量的通道,應(yīng)用程序根據(jù)業(yè)務(wù)邏輯決定將交易發(fā)送到1個(gè)或多個(gè)通道。
如何理解HyperLeger Fabric架構(gòu)
共識(shí)服務(wù)與(P1、PN)、(P1、P2、PN)、(P2、PN)組成三個(gè)相互獨(dú)立的通道,加入到不同通道的Peer節(jié)點(diǎn)能夠維護(hù)各個(gè)通道對(duì)應(yīng)的賬本和狀態(tài)。不同通道對(duì)應(yīng)現(xiàn)實(shí)世界中不同業(yè)務(wù)場(chǎng)景下的參與方,如銀行、保險(xiǎn)公司、物流企業(yè)、生產(chǎn)企業(yè)等實(shí)體結(jié)構(gòu)。

3、通道的配置

通道的配置信息都被打包到一個(gè)區(qū)塊中,并存放在通道的共享賬本中,成為通道的配置區(qū)塊,配置區(qū)塊除了配置信息外不包含其它交易信息。通道可以使用配置區(qū)塊來(lái)更新配置,因此在賬本中每新添加一個(gè)配置區(qū)塊,通道就按照最新配置區(qū)塊的定義來(lái)修改配置。通道賬本的首個(gè)區(qū)塊一定是配置區(qū)塊,也稱(chēng)為創(chuàng)世區(qū)塊(Genesis Block)。

4、通道管理命令

通道的CLI客戶(hù)端可以使用命令對(duì)通道進(jìn)行管理。
peer channel create: 用于創(chuàng)建通道,主要參數(shù)有-c, -f, -o分別用于指定通道ID, configtx的路徑和orderer的地址。
peer channel fetch:抓取通道中的特定區(qū)塊,通過(guò)-c和-f參數(shù)來(lái)指定通道ID和orderer地址。
peer channel join:加入通道,通過(guò)-b參數(shù)指定初始區(qū)塊。
peer channel list:列出peer加入的通道。
peer channel update :簽名并且發(fā)送configtx以升級(jí)通道配置,需要通過(guò)-c, -f, -o參數(shù)分別指定通道ID, configtx的路徑以及排序節(jié)點(diǎn)的地址。

5、動(dòng)態(tài)修改通道配置

在通道創(chuàng)建后,通道相關(guān)的配置以區(qū)塊的形式存在于通道的賬本中。如果需要修改通道的配置,可通過(guò)生成新的配置區(qū)塊去更新。修改通道配置的步驟如下:
A、通過(guò)SDK或CLI獲得最新的配置區(qū)塊。
B、編輯配置區(qū)塊。
C、計(jì)算配置更新量。
D、為配置區(qū)塊添加配置更新量。
E、SDK或CLI簽名并發(fā)送配置區(qū)塊。
若新的配置區(qū)塊通過(guò)驗(yàn)證,則通道配置以最新配置區(qū)塊為準(zhǔn)。

四、交易流程簡(jiǎn)介1、交易簡(jiǎn)介

Fabric區(qū)塊鏈的交易分兩種,部署交易和調(diào)用交易。
部署交易把鏈碼部署到Peer節(jié)點(diǎn)上并準(zhǔn)備好被調(diào)用,當(dāng)一個(gè)部署交易成功執(zhí)行時(shí),鏈碼就被部署到各個(gè)背書(shū)節(jié)點(diǎn)上。
調(diào)用交易是客戶(hù)端應(yīng)用程序通過(guò)Fabric提供的API調(diào)用先前已部署好的某個(gè)鏈碼的某個(gè)函數(shù)執(zhí)行交易,并相應(yīng)地讀取和寫(xiě)入KV數(shù)據(jù)庫(kù),返回是否成功或者失敗。

2、Fabric交易流程簡(jiǎn)介

Fabric v1.0的交易流程如下:
區(qū)塊鏈的賬本由Peer節(jié)點(diǎn)維護(hù),并不是由排序服務(wù)集群維護(hù),所以,只有Peer節(jié)點(diǎn)(背書(shū)節(jié)點(diǎn)和確認(rèn)節(jié)點(diǎn))包含完整的區(qū)塊鏈信息,而排序服務(wù)集群只負(fù)責(zé)對(duì)交易進(jìn)行排序,只保留處理過(guò)程中的一部分區(qū)塊鏈信息。Hyperledger Fabric網(wǎng)絡(luò)中的節(jié)點(diǎn)是一個(gè)邏輯的概念,并不一定是一個(gè)臺(tái)物理設(shè)備,但對(duì)于生產(chǎn)環(huán)境,為了系統(tǒng)架構(gòu)的解耦,提高擴(kuò)展性以及通過(guò)主機(jī)隔離提高安全性,Peer節(jié)點(diǎn)不能和排序服務(wù)節(jié)點(diǎn)部署在一臺(tái)機(jī)器上,而背書(shū)節(jié)點(diǎn)和確認(rèn)節(jié)點(diǎn)可以部署在同一臺(tái)機(jī)器上。背書(shū)節(jié)點(diǎn)校驗(yàn)客戶(hù)端的簽名,然后執(zhí)行智能合約代碼模擬交易。交易處理完成后,對(duì)交易信息簽名,返回給客戶(hù)端??蛻?hù)端收到簽名后的交易信息后,發(fā)給排序服務(wù)節(jié)點(diǎn)排序。排序服務(wù)節(jié)點(diǎn)將交易信息排序打包成區(qū)塊后,廣播發(fā)給確認(rèn)節(jié)點(diǎn),寫(xiě)入?yún)^(qū)塊鏈中。
如何理解HyperLeger Fabric架構(gòu)

3、客戶(hù)端構(gòu)造交易提案

客戶(hù)端應(yīng)用程序利用SDK(Node.js,Java,Python)構(gòu)造交易提案(Proposal)。交易提案是一個(gè)調(diào)用智能合約功能函數(shù)的請(qǐng)求,用來(lái)確認(rèn)哪些數(shù)據(jù)可以讀取或?qū)懭胭~本。
客戶(hù)端把交易提案發(fā)送給一個(gè)或多個(gè)背書(shū)節(jié)點(diǎn),交易提案中包含本次交易要調(diào)用的合約標(biāo)識(shí)、合約方法和參數(shù)信息以及客戶(hù)端簽名等。
SDK將交易提案打包為可識(shí)別的格式(如gRPC上的protobuf),并使用用戶(hù)的加密憑證為該交易提案生成唯一的簽名。
如何理解HyperLeger Fabric架構(gòu)

4、背書(shū)節(jié)點(diǎn)模擬執(zhí)行交易

背書(shū)節(jié)點(diǎn)(endorser)收到交易提案后,驗(yàn)證簽名并確定提交者是否有權(quán)執(zhí)行操作。背書(shū)節(jié)點(diǎn)將交易提案的參數(shù)作為輸入,在當(dāng)前狀態(tài)KV數(shù)據(jù)庫(kù)上執(zhí)行交易,生成包含執(zhí)行返回值、讀操作集和寫(xiě)操作集的交易結(jié)果(此時(shí)不會(huì)更新賬本),交易結(jié)果集、背書(shū)節(jié)點(diǎn)的簽名和背書(shū)結(jié)果(YES/NO)作為提案的結(jié)果返回給客戶(hù)端SDK,SDK解析信息判斷是否應(yīng)用于后續(xù)的交易。
如何理解HyperLeger Fabric架構(gòu)

5、客戶(hù)端把交易發(fā)送到排序服務(wù)節(jié)點(diǎn)

客戶(hù)端應(yīng)用程序(SDK)驗(yàn)證背書(shū)節(jié)點(diǎn)簽名,并比較各節(jié)點(diǎn)返回的提案結(jié)果,判斷提案結(jié)果是否一致以及是否參照指定的背書(shū)策略執(zhí)行。
客戶(hù)端收到各個(gè)背書(shū)節(jié)點(diǎn)的應(yīng)答后,打包到一起組成一個(gè)交易并簽名,發(fā)送給排序服務(wù)節(jié)點(diǎn)。
如何理解HyperLeger Fabric架構(gòu)

6、共識(shí)排序,生成新區(qū)塊

排序服務(wù)節(jié)點(diǎn)對(duì)接收到的交易進(jìn)行共識(shí)排序,然后按照區(qū)塊生成策略,將一批交易打包到一起,生成新的區(qū)塊,調(diào)用deliver API投遞消息,發(fā)送給確認(rèn)節(jié)點(diǎn)。
如何理解HyperLeger Fabric架構(gòu)

7、交易校驗(yàn)

確認(rèn)節(jié)點(diǎn)收到區(qū)塊后,會(huì)對(duì)區(qū)塊中的每筆交易進(jìn)行校驗(yàn),檢查交易依賴(lài)的輸入輸出是否符合當(dāng)前區(qū)塊鏈的狀態(tài),完成后將區(qū)塊追加到本地的區(qū)塊鏈,并修改K-V狀態(tài)數(shù)據(jù)庫(kù)。

五、賬本簡(jiǎn)介

Fabric使用建立在HTTP/2上的P2P協(xié)議來(lái)管理分布式賬本,采取可插拔的方式來(lái)根據(jù)具體需求來(lái)設(shè)置共識(shí)協(xié)議,比如PBFT,Raft,PoW和PoS等。
Fabric網(wǎng)絡(luò)的數(shù)據(jù)以分布式賬本的形式存儲(chǔ)。賬本由一系列有順序和防篡改的記錄組成,記錄包含著數(shù)據(jù)的全部狀態(tài)改變。賬本中的數(shù)據(jù)項(xiàng)以鍵值對(duì)的形式存放,賬本中所有的鍵值對(duì)構(gòu)成了賬本的狀態(tài),稱(chēng)為世界狀態(tài)(World State)。
每個(gè)通道中有唯一的賬本,通道的賬本由通道中所有成員共同維護(hù),每個(gè)記賬節(jié)點(diǎn)上都保存所屬通道的賬本的一個(gè)副本,因而是分布式賬本。對(duì)賬本的訪問(wèn)需要通過(guò)鏈碼實(shí)現(xiàn)對(duì)賬本鍵值對(duì)的增加、刪除、更新和查詢(xún)等操作。
賬本由區(qū)塊鏈和狀態(tài)數(shù)據(jù)庫(kù)兩部分組成。
區(qū)塊鏈?zhǔn)且唤M不可更改的有序的區(qū)塊(數(shù)據(jù)塊),記錄著全部交易的日志。每個(gè)區(qū)塊中包含若干個(gè)交易的數(shù)據(jù),不同區(qū)塊所包含的交易數(shù)量可以不同。區(qū)塊之間用哈希鏈(Hashed-link)關(guān)聯(lián):每個(gè)區(qū)塊頭包含本區(qū)塊所有交易的哈希值,以及上一個(gè)區(qū)塊頭的哈希值。鏈?zhǔn)浇Y(jié)構(gòu)可以確保每個(gè)區(qū)塊的數(shù)據(jù)不可更改,以及每個(gè)區(qū)塊之間的順序關(guān)系不可更改。因此,區(qū)塊鏈的區(qū)塊只可以添加在鏈的尾部。
狀態(tài)數(shù)據(jù)庫(kù)記錄了賬本中所有鍵值對(duì)的當(dāng)前值,相當(dāng)于對(duì)當(dāng)前賬本的交易日志做了索引。鏈碼執(zhí)行交易的時(shí)候需要讀取賬本的當(dāng)前狀態(tài),從狀態(tài)數(shù)據(jù)庫(kù)可以迅速獲取鍵值的最新?tīng)顟B(tài)。
如果沒(méi)有狀態(tài)數(shù)據(jù)庫(kù),要獲得某個(gè)鍵值時(shí),需要遍歷整個(gè)區(qū)塊鏈中和該鍵值相關(guān)的交易,效率非常低,因此,讀取狀態(tài)數(shù)據(jù)庫(kù)可以認(rèn)為是快速定位和訪問(wèn)某個(gè)鍵值的方法。另外,當(dāng)狀態(tài)數(shù)據(jù)庫(kù)出現(xiàn)故障的時(shí)候,可以通過(guò)遍歷賬本重新生成。
當(dāng)一個(gè)區(qū)塊附加到區(qū)塊鏈尾部的時(shí)候,如果區(qū)塊中的有效交易修改了鍵值對(duì),則會(huì)在狀態(tài)數(shù)據(jù)庫(kù)中作相應(yīng)的更新,確保區(qū)塊鏈和狀態(tài)數(shù)據(jù)庫(kù)始終保持一致。
區(qū)塊鏈的數(shù)據(jù)塊以文件形式保存在各個(gè)節(jié)點(diǎn)中。狀態(tài)數(shù)據(jù)庫(kù)可以是各種鍵值數(shù)據(jù)庫(kù),F(xiàn)abric缺省使用LevelDB ,同時(shí)支持CouchDB選項(xiàng)。CouchDB除了支持鍵值數(shù)據(jù)外,也支持JSON格式的文檔模型,能夠做復(fù)雜的查詢(xún)。
如何理解HyperLeger Fabric架構(gòu)

六、Fabric開(kāi)發(fā)流程1、Fabric開(kāi)發(fā)簡(jiǎn)介

Fabric聯(lián)盟鏈的開(kāi)發(fā)人員主要分為三類(lèi):底層開(kāi)發(fā)者負(fù)責(zé)系統(tǒng)部署與維護(hù);組織管理者負(fù)責(zé)證書(shū)、MSP權(quán)限管理、共識(shí)機(jī)制等;業(yè)務(wù)開(kāi)發(fā)者負(fù)責(zé)編寫(xiě)鏈碼、創(chuàng)建維護(hù)通道、執(zhí)行交易等。
如何理解HyperLeger Fabric架構(gòu)

2、Fabric區(qū)塊鏈開(kāi)發(fā)流程

Fabric區(qū)塊鏈開(kāi)發(fā)流程主要包括智能合約編寫(xiě),通過(guò)SDK調(diào)用智能合約,訂閱各類(lèi)事件。
開(kāi)發(fā)者創(chuàng)建客戶(hù)端應(yīng)用和鏈碼,鏈碼被部署到區(qū)塊鏈網(wǎng)絡(luò)的背書(shū)節(jié)點(diǎn)上。通過(guò)鏈碼來(lái)操作賬本,當(dāng)客戶(hù)端調(diào)用一個(gè)交易時(shí),實(shí)際上是在調(diào)用鏈碼中的一個(gè)實(shí)現(xiàn)業(yè)務(wù)邏輯的函數(shù)方法,并對(duì)賬本進(jìn)行g(shù)et, put, delete操作??蛻?hù)端應(yīng)用提供用戶(hù)交互界面,并提交交易到區(qū)塊鏈網(wǎng)絡(luò)上。
如何理解HyperLeger Fabric架構(gòu)

看完上述內(nèi)容,你們對(duì)如何理解HyperLeger Fabric架構(gòu)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道,感謝大家的支持。

當(dāng)前題目:如何理解HyperLegerFabric架構(gòu)-創(chuàng)新互聯(lián)
URL分享:http://bm7419.com/article10/igdgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)、網(wǎng)站策劃、外貿(mào)建站、軟件開(kāi)發(fā)企業(yè)建站、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)