Fabric區塊鏈網絡

翻譯自fabric官方文檔:html

https://hyperledger-fabric.readthedocs.io/en/release-1.3/network/network.html編程

Fabric區塊鏈網絡網絡

本主題將在概念層面描述Hyperledger Fabric如何容許組織在區塊鏈網絡的造成中進行協做。若是您是架構師,管理員或開發人員,則可使用此主題深刻了解Hyperledger Fabric區塊鏈網絡中的主要結構和流程組件。本主題將使用一個可管理的工做示例,該示例介紹了區塊鏈網絡中的全部主要組件。瞭解此示例後,您能夠在文檔的其餘位置閱讀有關這些組件的更多詳細信息,或嘗試構建示例網絡架構

閱讀本主題並瞭解策略的概念後,您將充分了解組織須要制定策略控制已部署的Hyperledger Fabric網絡。您還將瞭解組織如何使用聲明性策略管理網絡演變 - 這是Hyperledger Fabric的一個關鍵特性。簡而言之,您將瞭解Hyperledger Fabric的主要技術組件以及組織須要作出的決策。app

什麼是區塊鏈網絡?編程語言

區塊鏈網絡是一種技術基礎設施,爲應用程序提供帳本和智能合約(鏈碼)服務。首先,智能合約用於生成交易,這些交易隨後被分配到網絡中的每一個節點,在那裏它們不可變地記錄在其帳本的副本上。應用程序的用戶多是使用客戶端應用程序或區塊鏈網絡管理員的最終用戶。學習

在大多數狀況下,多個組織做爲一個聯盟組成網絡,其權限是最初配置網絡時由聯盟商定的一組策略。此外,網絡策略可能會隨着時間的推移而變化,但須要獲得聯盟內組織的贊成,由於咱們會在討論修改的概念時發現。區塊鏈

樣本網絡ui

在咱們開始以前,讓咱們向您展現咱們的目標網絡!這是一個表示咱們的示例網絡的最終狀態的圖表。spa

不要擔憂這可能看起來很複雜!在討論這個主題時,咱們將逐個構建網絡,以便您瞭解組織(organizationsR1R2R3R4如何爲網絡提供基礎架構以幫助造成網絡。該基礎架構實現了區塊鏈網絡,它由組成網絡的組織共同商定的策略所管理 - 例如,誰能夠添加新組織。您將瞭解應用程序如何使用區塊鏈網絡提供的帳本和智能合約服務。

四個組織,R1R2R3R4共同決定並簽署協議,他們將創建和使用Hyperledger Fabric網絡。R4已被指定爲網絡發起者 - 它已被賦予設置網絡初始版本的權力。R4無心在網絡上執行業務交易。R1R2須要在整個網絡內進行專用通訊,R2R3也是如此。組織R1具備能夠在通道(channelC1內執行業務交易(business transantions)的客戶端應用程序。組織R2有一個客戶端應用程序,能夠在通道C1C2中執行相似的工做。組織R3有一個客戶端應用程序,能夠在C2通道上執行此操做。節點P1維護與C1相關聯的帳本L1的副本。節點P2維護與C1相關聯的帳本L1的副本和與C2相關聯的帳本L2的副本。節點P3維護與C2相關聯的帳本L2的副本。網絡根據網絡配置(network configuration)NC4中指定的策略規則進行管理,網絡由組織R1R4控制。通道C1根據通道配置(channel configuration)CC1中規定的策略規則進行管理通道在組織R1R2的控制之下。通道C2根據通道配置CC2中規定的策略規則進行管理該通道受組織R2R3的控制。有一個排序服務(ordering serviceO4做爲(network)N的網絡管理點,並使用系統通道。排序服務還支持應用程序通道C1C2,爲了將交易排序分配到塊中以進行分發。四個組織中的每個都有一個首選證書頒發機構。

建立網絡

讓咱們從一開始就爲網絡建立基礎:

在排序節點(orderer)啓動時造成網絡。在咱們的示例網絡N中,根據網絡配置NC4配置包括單個節點O4的排序服務,網絡配置NC4給予組織R4管理權限。在網絡級別,證書頒發機構(certificate authorityCA4用於將身份分配給R4組織的管理員和網絡節點。

咱們能夠看到,定義網絡N的第一件事是排序服務O4。將排序服務視爲網絡的初始管理點是有幫助的。如前所述,O4最初由組織R4中的管理員配置並啓動,並在R4中託管。配置NC4包含描述網絡的起始管理功能集的策略。最初設置爲僅經過網絡授予R4權限。這將改變,咱們稍後會看到,但如今R4是網絡的惟一成員。

證書頒發機構

您還能夠看到證書頒發機構CA4,它用於向管理員和網絡節點頒發證書。CA4在咱們的網絡中起着關鍵做用,由於它分配了X.509證書,可用於識別屬於組織R4的組件。CA頒發的證書也可用於簽署交易,以代表組織承認交易結果 - 這是將其接受到帳本的前提條件。讓咱們更詳細地研究一下CA的這兩個方面。

首先,區塊鏈網絡的不一樣組件使用證書將彼此標識爲來自特定組織。這就是爲何一般有多個CA支持區塊鏈網絡的緣由 - 不一樣的組織一般使用不一樣的CA. 咱們將在咱們的網絡中使用四個CA. 每一個組織之一。實際上,CA很是重要,Hyperledger Fabric爲您提供了一個內置的(稱爲Fabric-CA)來幫助您開始使用,但在實踐中,組織將選擇使用本身的CA.

證書到成員組織的映射是經過稱成員服務提供者(MSP的結構實現的 網絡配置NC4使用命名的MSP來識別由CA4分配的證書的屬性,該證書將證書持有者與組織R4相關聯。而後,NC4能夠在策略中使用此MSP名稱,以經過網絡資源授予R4特定權限的參與者。此類策略的一個示例是識別R4中能夠將新成員組織添加到網絡的管理員。咱們沒有在這些圖表上顯示MSP,由於它們會使它們混亂,但它們很是重要。

其次,咱們稍後會看到CA頒發的證書如何成爲 transaction交易(交易)生成和驗證過程的核心。具體而言,X.509證書用於客戶端應用程序 交易提議和智能合約 交易響應以對數據簽名交易進行數字簽名 。隨後,託管帳本副本的網絡節點在接受到帳本上的交易以前驗證交易簽名是否有效。

讓咱們回顧一下咱們的區塊鏈網絡示例的基本結構。存在由證書頒發機構CA4定義的一組用戶訪問的資源,網絡N,其具備對網絡N中的資源的一組權限,如網絡配置NC4內包含的策略所描述的。當咱們配置和啓動排序服務節點O4時,全部這一切都成爲現實。

添加網絡管理員

NC4最初配置爲僅容許R4用戶經過網絡管理權限。在下一階段,咱們將容許組織R1用戶管理網絡。讓咱們看看網絡是如何演變的:

組織R4更新網絡配置,使組織R1也成爲管理員。在此以後,R1R4對網絡配置具備相同的權限。

咱們看到增長了一個新的組織R1做爲管理員 - R1R4如今擁有對網絡的平等權利。咱們還能夠看到已添加證書頒發機構CA1 - 它可用於標識R1組織中的用戶。在此以後,R1R4的用戶均可以管理網絡。

雖然排序節點O4正在R4的基礎設施上運行,但只要它能夠得到網絡訪問權限,R1就能夠共享對它的管理權限。這意味着R1R4能夠更新網絡配置NC4,以容許R2組織成爲網絡操做的子集。這樣,即便R4運行排序服務,而且R1對其具備徹底管理權限,R2也有限制建立新的聯盟(consortium)。

在最簡單的形式中,排序服務是網絡中的單個節點,這是您在示例中能夠看到的。排序服務一般是多節點的,能夠配置爲在不一樣的組織中具備不一樣的節點。例如,咱們可能在R4中運行O4並將其鏈接到組織R1中的單獨排序節點節點O2。經過這種方式,咱們將擁有一個多站點,多組織的管理結構。

咱們將在本主題稍後討論排序服務,但如今只需將排序服務視爲一個管理點,它爲不一樣的組織提供對網絡的受控訪問。

定義一個聯盟(consortium

雖然如今能夠經過R1R4管理網絡,可是能夠作的不多。咱們須要作的第一件事是定義一個聯盟。這個詞的字面意思是具備共同命運的羣體,所以它是區塊鏈網絡中一組組織的合適選擇。

讓咱們看看如何定義一個聯盟:

網絡管理員定義了一個包含兩個成員的聯盟X1,包含組織R1R2。該聯盟定義存儲在網絡配置NC4中,並將在網絡開發的下一階段使用。CA1CA2是這些組織的相應證書頒發機構。

因爲NC4的配置方式,只有R1R4能夠建立新的聯盟。該圖顯示了新的聯盟X1的增長,該聯盟將R1R2定義爲其組成組織。咱們還能夠看到已添加CA2以識別R2中的用戶。請注意,聯盟能夠擁有任意數量的組織成員 - 咱們僅僅展現了兩個,由於它是最簡單的配置。

聯盟爲什麼如此重要?咱們能夠看到,一個聯盟定義了網絡中須要相互交易的組織集合- 在本例中爲R1R2。若是他們有一個共同的目標,將他們按羣組織在一塊兒真的頗有意義,這正是發生的事情。

該網絡雖然由一個組織啓動,但如今由更多的組織控制。咱們能夠經過這種方式啓動它,R1R2R4具備共享控制,但這種構建使其更容易理解。

咱們如今將使用聯盟X1來建立Hyperledger Fabric區塊鏈的一個很是重要的部分一個通道(channel)

爲聯盟建立通道

所以,讓咱們建立Fabric區塊鏈網絡的關鍵部分通道。通道是一個主要的通訊裝置(communications mechanism),經過該通訊裝置,聯盟的成員能夠相互通訊。網絡中能夠有多個通道,但就目前而言,咱們將從一個通道開始。

讓咱們看看第一個通道是如何添加到網絡的:

已使用聯盟X1R1R2建立了通道C1。通道由通道配置CC1控制,徹底獨立於網絡配置。CC1R1R2管理,他們對C1擁有相同的權利。R4CC1沒有任何權利。

通道C1爲聯盟X1提供專用通訊裝置。咱們能夠看到通道C1已鏈接到排序服務O4,但沒有其餘任何附加到它。在網絡開發的下一個階段,咱們將鏈接客戶端應用程序和節點等組件。但此時,通道提供了進一步鏈接的可能性。

儘管通道C1是網絡N的一部分,但它很是不一樣。另請注意,組織R3R4不在此通道中 - 它用於R1R2之間的交易處理。在上一步中,咱們看到R4如何授予R1建立新聯盟的許可,R4 容許R1建立通道!在該圖中,多是組織R1R4建立了通道C1。再次注意,一個通道能夠鏈接任意數量的組織 - 咱們已經展現了兩個,由於它是最簡單的配置。

另外,通道C1如何與網絡配置NC4具備徹底獨立的配置CC1CC1包含管理R1R2對通道C1的權限的策略 - 正如咱們所見,R3R4在此通道中沒有權限。若是R3R4經過R1R2添加到通道配置CC1中的適當策略,則它們只能與C1交互。一個例子是定義誰能夠向通道添加新組織。具體來講,請注意R4不能將自身添加到通道C1 - 它必須且只能由R1R2受權。

通道爲什麼如此重要?通道頗有用,由於它們爲聯盟成員之間的私人通訊和私人數據提供了一種機制。通道提供了私密性,隔絕其餘通道和其餘網絡。Hyperledger Fabric在這方面很是強大,由於它容許組織共享基礎架構並同時保持其私密性。這裏沒有矛盾 - 網絡中的不一樣聯盟將須要適當地共享不一樣的信息和流程,而且通道提供了一種有效的機制來實現這一點。通道提供有效的基礎設施共享,同時保持數據和通訊隱私。

咱們還能夠看到,一旦建立了一個通道,它就是一個很是真實的免於網絡的意義。只有在通道配置中明確指定的組織才能對其進行任何控制,今後時間到未來。一樣,今後時起對網絡配置NC4的任何更新都不會對通道配置CC1產生直接影響例如,若是聯盟定義X1被更改,它將不會影響通道C1的成員。所以,通道是有用的,由於它們容許構成通道的組織之間的私人通訊。此外,通道中的數據與網絡的其他部分徹底隔離,包括其餘通道。

另外,還有一個特殊的系統通道(system channel 定義供排序服務使用。它的行爲方式與常規通道徹底相同,常規通道一般稱爲應用通道(application channels。咱們一般不須要擔憂這個通道,但咱們將在本主題的後面部分討論它。

節點和帳本

如今讓咱們開始使用該通道將區塊鏈網絡和組織組件鏈接在一塊兒。在網絡發展的下一階段,咱們能夠看到咱們的網絡N剛剛得到了兩個新組件,即節點P1和帳本實例L1

節點P1已加入通道C1P1物理託管帳本L1的副本。P1O4可使用通道C1相互通訊。

節點是託管區塊鏈帳本副本的網絡組件!最後,咱們開始看到一些可識別的區塊鏈組件!P1在網絡中的目的純粹是託管帳本L1的副本供其餘人訪問。咱們能夠將L1視爲物理託管P1上,但 邏輯上託管C1通道上。當咱們向通道添加更多節點時,咱們會更清楚地看到這個想法。

P1配置的關鍵部分是CA1發佈的X.509身份,它將P1與組織R1相關聯。P1啓動後,可使用排序節點O4 加入通道C1。當O4收到此加入請求時,它使用通道配置CC1來肯定P1在此通道上的權限。例如,CC1肯定P1是否能夠讀取和/或寫入帳本L1的信息。

請注意節點如何經過擁有它們的組織加入通道,儘管咱們只添加了一個節點,但咱們將看到網絡中多個通道上能夠有多個節點。咱們將看到節點能夠在稍後採起的不一樣角色。

應用程序和智能合約鏈碼

如今通道C1上有一個帳本,咱們能夠開始鏈接客戶端應用程序,以消耗帳本的主力提供的一些服務!

注意網絡是如何增加的:

智能合約S5已經安裝到P1上。組織R1中的客戶端應用程序A1可使用S5經過節點P1訪問帳本。A1P1O4都鏈接到通道C1,即它們均可以利用該通道提供的通訊設施。

在網絡開發的下一個階段,咱們能夠看到客戶端應用程序A1可使用通道C1鏈接到特定的網絡資源 - 在這種狀況下,A1能夠鏈接到節點P1和排序節點節點O4。再次,看看通道如何是網絡和組織組件之間通訊的核心。就像節點和排序節點同樣,客戶端應用程序將具備將其與組織相關聯的標識。在咱們的示例中,客戶端應用程序A1與組織R1相關聯雖然它在Fabric區塊鏈網絡以外,但它經過通道C1鏈接到它。

如今可能看起來A1能夠直接經過P1訪問帳本L1,但事實上,全部訪問都是經過一個稱爲智能合約鏈碼S5的特殊程序來管理的。將S5視爲定義帳本的全部常見訪問模式; S5提供了一組明肯定義的方法,經過這些方式能夠查詢或更新帳本L1。簡而言之,客戶端應用程序A1必須經過智能合約S5才能到達帳本L1

每一個組織中的應用程序開發人員均可以建立智能合約鏈碼,以實現聯盟成員共享的業務流程。智能合約用於幫助生成能夠隨後分發到網絡中的每一個節點的交易。咱們稍後會討論這個想法當網絡更大時,它會更容易理解。目前,要理解的重要一點是,要達到這一點,必須在智能合約上執行兩項操做它必須已安裝,而後實例化。(安裝是在節點進行安裝,實例化至關於鏈碼連網共享)

安裝智能合約

在開發智能合約S5以後,組織R1中的管理員必安裝到節點P1上。這是一個簡單的操做在它發生以後,P1徹底瞭解S5。具體來講,P1能夠看到S5 實現邏輯 - 它用於訪問帳本L1的程序代碼。咱們將其與 僅僅描述S5 的輸入和輸出的S5 接口進行對比,而不考慮其實現。

當一個組織在一個通道中有多個節點時,它能夠選擇安裝智能合約的節點它不須要在每一個節點上安裝智能合約。

實例化智能合約

可是,僅僅由於P1安裝了S5,鏈接到通道C1的其餘組件都沒有意識到它它必須首先在通道C1 實例化。在咱們的示例中,只有一個節點P1,組織R1中的管理員必須使用P1在通道C1上實例化S5。實例化後,通道C1上的每一個組件都知道S5的存在在咱們的示例中,這意味着如今能夠由客戶端應用程序A1 調用 S5 

請注意,雖然通道上的每一個組件如今均可以訪問S5,但它們沒法看到其程序邏輯。對於已安裝它的節點,這仍然是私有的在咱們的例子中,這意味着P1。從概念上講,這意味着它是實例化的智能合約接口,與安裝的智能合約實現造成對比。強化這個想法安裝智能合約顯示了咱們如何看待它在物理上託管 在節點上,而實例化智能合約則顯示咱們如何將其視爲 由通道邏輯託管

背書策略(Endorsement policy

在實例化中提供的最重要的附加信息是背書策略。它描述了哪些組織必須批准交易才能被其餘組織接受其帳本副本。在咱們的示例網絡中,若是R1R2承認交易,則只能在交易總帳L1上接受交易。

實例化行爲將承認網絡策略置於通道配置CC1它使通道的任何成員均可以訪問它。

調用智能合約

一旦智能合約安裝在節點上並在通道上實例化,它就能夠由客戶端應用程序調用。客戶端應用程序經過將交易提議發送給智能合約背書策略指定的組織所擁有的節點來完成此操做。交易提議(transaction proposal)用做智能合約的輸入,智能合約使用它來生成由節點返回給客戶端應用程序的承認交易響應(transaction response)。

這些交易響應與交易提議一塊兒打包,造成徹底承認的交易,能夠分發到整個網絡。咱們稍後會詳細介紹這一點。如今,它足以理解應用程序如何調用智能合約來生成承認的交易。

在網絡發展的這個階段,咱們能夠看到組織R1徹底參與網絡。它的應用程序 - A1開始 - 能夠經過智能合約S5訪問帳本L1,以生成將由R1承認的交易,由於它們符合背書策略,因此被接納到帳本上。

網絡完成了

回想一下,咱們的目標是爲聯盟X1 - 組織R1R2建立一個通道。網絡開發的下一階段是組織R2將其基礎架構添加到網絡中。

讓咱們看看網絡是如何演變的:

經過組織R2添加基礎設施,網絡不斷髮展。具體而言,R2添加了節點P2,其承載帳本L1的副本和智能合約鏈碼S5P2也加入了通道C1,應用程序A2也是如此。使用來自CA2的證書識別A2P2。全部這些意味着應用程序A1A2均可以使用節點P1P2C1上調用S5

咱們能夠看到組織R2在通道C1上添加了節點P2P2還託管帳本L1和智能合約S5的副本。咱們能夠看到R2還添加了客戶端應用程序A2,它能夠經過通道C1鏈接到網絡。爲實現此目的,組織R2中的管理員建立了節點P2並將其加入到通道C1,其方式與R1中的管理員相同。

咱們建立了第一個運營網絡!在網絡發展到這個階段,咱們有一個通道,組織R1R2能夠相互徹底交易。具體而言,這意味着應用程序A1A2可使用智能合約S5和通道C1上的帳本L1生成交易。

生成和接受交易

與老是託管帳本副本的節點相比,咱們看到有兩種不一樣類型的節點那些主持智能合約的人和那些沒有合同的人。在咱們的網絡中,每一個對等方都託管智能合約的副本,但在較大的網絡中,將有更多的節點不承載智能合約的副本。一個節點能夠僅運行,若是它被安裝在其上的智能合同,但它能夠知道經過被鏈接到通道有關智能合同的接口。

您不該該認爲沒有安裝智能合約的節點在某種程度上是低劣的。具備智能合約的節點具備特殊功能 - 以幫助生成交易。請注意,全部節點均可以驗證並隨後接受拒絕 對其帳本L1副本的交易。可是,只有安裝了智能合約的節點才能參與交易承認過程, 這對於生成有效交易相當重要。

咱們不須要擔憂本主題中如何生成,分發和接受交易的確切細節 - 瞭解咱們有一個區塊鏈網絡就足夠了,組織R1R2能夠共享信息和流程做爲帳本捕獲的交易。咱們將在其餘主題中學習更多有關交易,帳本,智能合約的知識。

節點的類型

Hyperledger Fabric中,雖然全部節點都相同,但它們能夠承擔多種角色,具體取決於網絡的配置方式。咱們如今對典型的網絡拓撲有足夠的瞭解來描述這些角色。

  • Committing peer(驗證/提交節點)。通道中的每一個節點都是提交節點。它接收生成的交易塊,隨後在它們做爲附加操做提交到節點的帳本副本以前進行驗證。
  • Endorsing peer背書節點)若是安裝了智能合約,那麼擁有智能合約的每一個節點均可以成爲背書節點。可是,要真正成爲背書節點,客戶端應用程序必須使用節點上的智能合約來生成通過數字簽名的交易響應。背書節點這一術語是對這一事實的明確說起。

智能合約的背書策略可識別生成的交易進行數字簽名的組織,簽名以後才能將其接收到驗證節點的帳本副本。

這是節點的兩種主要類型節點能夠採用另外兩個角色:

  • Leader peer(領導節點)。當組織在通道中具備多個節點時,領導節點是負責未來自排序節點的交易事務分配給組織中的其餘提交節點。節點能夠選擇參與靜態或動態領導選舉。

所以,從領導角度考慮兩組節點是有幫助的 -具備靜態領導者選擇的節點和具備動態領導者選擇的節點。對於靜態集,能夠將零個或多個節點配置爲領導者。對於動態集,一個節點將被集合選爲領導節點。此外,在動態集中,若是領導節點失敗,那麼剩餘的節點將從新選舉領導者。

這意味着一個組織能夠有一個或多個領導節點鏈接到排序服務。這有助於提升處理大量交易的大型網絡的彈性和可伸縮性。

  • Anchor peer(錨節點)。若是節點須要與另外一個組織中的節點通訊,則它可使用該組織的通道配置中定義的一個錨節點 。組織能夠爲其定義零個或多個錨節點,而且錨節點能夠幫助實現許多不一樣的跨組織通訊方案。

請注意,節點(peer)能夠同時是提交節點(committer)、背書節點(endorser)、領導節點(Leader peer)和錨節點(Anchor peer)!只有錨等節點是可選的 - 出於實際須要,總會有一個領導節點,而且至少有一個提交節點和一個背書節點。

安裝不實例化

以與組織R1相似的方式,組織R2必須將智能合約S5安裝到其節點P2上。這是顯而易見的 - 若是應用程序A1A2但願在節點P2上使用S5來生成交易,則必須首先安裝, 安裝才能生成交易。此時,節點P2具備智能合約和帳本的物理副本P1同樣,它能夠在其帳本L1的副本上生成和接受交易。

可是,與組織R1相反,組織R2不須要在通道C1上實例化智能合約S5。那是由於S5已經在組織R1的通道上實例化了。實例化只須要發生一次隨後加入通道的任何節點都知道智能合約S5可用於該通道。這一事實反映了帳本L1和智能合約在節點上確實以物理方式存在的事實,以及通道上的邏輯方式; R2只是將另外一個L1S5的物理實例添加到網絡中。

在咱們的網絡中,咱們能夠看到通道C1鏈接兩個客戶端應用程序,兩個節點和一個排序服務。因爲只有一個通道,所以只有一個邏輯帳本與這些組件相互做用。節點P1P2具備相同的帳本L1副本。智能合約S5的副本一般使用相同的編程語言相同地實現,但若是不相同,它們必須在語義上等效。

咱們能夠看到,在網絡中謹慎添加節點有助於提升吞吐量、穩定性和彈性。例如,網絡中的更多節點將容許更多應用程序鏈接到它在計劃內或計劃外中斷的狀況下,組織中的多個節點將提供額外的彈性。

這一切都意味着能夠配置支持各類運營目標的複雜拓撲結構 - 對網絡的大小沒有理論上的限制。此外,單個組織內的節點有效地發現和相互通訊的技術機制gossip protocol P2P的一種協議) - 將容納大量節點以支持這種拓撲。

仔細使用網絡和通道策略甚至可使大型網絡獲得良好的治理。組織能夠自由地將節點添加到網絡,只要它們符合網絡贊成的策略便可。網絡和通道策略在自治和控制之間創造了平衡,這是分散式網絡的特徵。

簡化視覺詞彙

咱們如今將簡化用於表示咱們的樣本區塊鏈網絡的視覺詞彙。隨着網絡規模的擴大,最初用於幫助咱們理解通道的線路將變得繁瑣。想象一下,若是咱們添加另外一個對等或客戶端應用程序或另外一個通道,咱們的圖表會有多複雜?

這就是咱們一分鐘要作的事情,因此在咱們作以前,讓咱們簡化視覺詞彙。這是咱們迄今爲止開發的網絡的簡化表示:

該圖示出了與網絡N中的通道C1有關的事實以下:客戶端應用A1A2可使用通道C1與節點P1P2以及排序節點O4進行通訊。節點P1P2可使用通道C1的通訊服務。排序服務O4能夠利用通道C1的通訊服務。通道配置CC1適用於通道C1

請注意,經過用鏈接點替換通道線簡化了網絡圖,顯示爲包含通道編號的藍色圓圈。沒有信息丟失。這種表示更具可擴展性,由於它消除了交叉線。這使咱們可以更清楚地表明更大的網絡。咱們經過關注組件和通道之間的鏈接點而不是通道自己來實現這種簡化。

添加另外一個聯盟定義

在網絡開發的下一階段,咱們介紹組織R3。咱們將給組織R2R3一個單獨的應用程序通道,容許它們相互進行交易。此應用程序通道將與先前定義的通道徹底分離,所以R2R3交易能夠對它們保持私有。

讓咱們回到網絡級別併爲R2R3定義一個新的聯盟X2

組織R1R4的網絡管理員添加了一個新的聯盟定義X2,其中包括組織R2R3。這將用於爲X2定義新通道。

請注意,網絡如今定義了兩個聯盟:X1用於組織R1R2X2用於組織R2R3。引入了Consortium X2,以便可以爲R2R3建立新的通道。

新網關只能由網絡配置網絡策略NC4中明確標識的組織建立,由於它們具備相應的權限,即R1R4。這是一個策略示例,它將能夠管理網絡級資源的組織與能夠在通道級別管理資源的組織分開。在工做中看到這些策略有助於咱們理解爲何Hyperledger Fabric具備複雜的分層策略結構。

實際上,聯盟定義X2已被添加到網絡配置NC4中。咱們將在文檔的其餘地方討論此操做的確切機制。

添加新通道

如今讓咱們使用這個新的聯盟定義X2來建立一個新的通道C2。爲了幫助您增強對更簡單的通道符號的理解,咱們使用了兩種視覺樣式 - 通道C1用藍色圓形端點表示,而通道C2用紅色鏈接線表示:

使用聯盟定義X2R2R3建立了新的通道C2。該通道具備與網絡配置NC4徹底分離的通道配置CC2和通道配置CC1。通道C2R2R3管理,它們具備與CC2中的策略所定義的C2相同的權限。R1R4沒有在CC2中定義的任何權限。

通道C2爲聯盟X2提供專用通訊機制。再次注意,在一個聯盟中組織起來的組織是如何造成通道的。通道配置CC2如今包含管理通道資源的策略,經過通道C2爲組織R2R3分配管理權限。它由R2R3獨家管理; R1R4在通道C2中沒有電源。例如,隨後能夠更新通道配置CC2以添加組織以支持網絡增加,但這隻能經過R2R3來完成。

注意通道配置CC1CC2如何保持彼此徹底分離,而且與網絡配置NC4徹底分離。咱們再一次看到Hyperledger Fabric網絡的分散性一旦建立了通道C2,它就由組織R2R3獨立管理到其餘網絡元素。通道網絡策略始終保持彼此獨立,而且只能由得到受權的組織在通道中進行更改。

隨着網絡和通道的發展,網絡和通道配置也將如此發展。有一個過程能夠經過這種方式以受控方式完成 - 包括捕獲這些配置變化的配置交易。每次配置更改都會致使生成新的配置塊交易,稍後在本主題中,咱們將看到如何驗證和接受這些塊以分別建立更新的網絡和通道配置。

網絡和通道配置

在整個示例網絡中,咱們看到了網絡和通道配置的重要性。這些配置很重要,由於它們封裝了網絡成員贊成的 策略,這些策略爲控制對網絡資源的訪問提供了共享參考。網絡和通道配置還包含有關網絡和通道組成的事實,例如聯盟的名稱及其組織。

例如,當首先使用排序服務節點O4造成網絡時,其行爲由網絡配置NC4控制。NC4的初始配置僅包含容許組織R4管理網絡資源的策略。隨後更新NC4以容許R1管理網絡資源。完成此更改後,組織R1R4中鏈接到O4的任何管理員都將擁有網絡管理權限,由於這是網絡配置NC4中容許的策略。在內部,排序服務中的每一個節點都記錄網絡配置中的每一個通道,以便在網絡級別建立每一個通道的記錄。

這意味着雖然排序服務節點O4是建立聯盟X1X2以及通道C1C2參與者,可是網絡的智能地包含在O4正在服從的網絡配置NC4中。只要O4表現良好,而且不管什麼時候處理網絡資源,都能正確實現NC4中定義的策略,咱們的網絡就會像全部組織都贊成的那樣行事。在不少方面,NC4能夠被認爲比O4更重要,由於它最終控制着網絡訪問。

相同的原則適用於相對於節點的通道配置。在咱們的網絡中,P1P2一樣是優秀的演員。當節點P1P2與客戶端應用程序A1A2交互時,它們每一個都使用在通道配置CC1內定義的策略來控制對通道C1資源的訪問。

例如,若是A1想要在節點P1P2上訪問智能合約鏈碼S5,則每一個節點使用其CC1的副原本肯定A1能夠執行的操做。例如,能夠容許A1根據CC1中定義的策略從帳本L1讀取或寫入數據。稍後咱們將看到通道中的演員及其通道配置CC2的相同模式。一樣,咱們能夠看到,雖然節點和應用程序是網絡中的關鍵角色,但它們在通道中的行爲更多地取決於通道配置策略而不是任何其餘因素。

最後,瞭解網絡和通道配置的物理實現方式頗有幫助。咱們能夠看到網絡和通道配置在邏輯上是單一的 - 網絡有一個,每一個通道有一個。這個很重要訪問網絡或通道的每一個組件必須對授予不一樣組織的權限有共同的瞭解。

即便邏輯上只有一個配置,它實際上也會被造成網絡或通道的每一個節點複製並保持一致。例如,在咱們的網絡中,節點P1P2都具備通道配置CC1的副本,而且到網絡徹底完成時,節點P2P3都將具備通道配置CC2的副本。相似地,排序服務節點O4具備網絡配置的副本,可是在多節點配置中,每一個排序服務節點將具備其本身的網絡配置副本。

網絡和通道配置使用與用戶交易相同的區塊鏈技術保持一致 - 但對於 配置交易。要更改網絡或客戶端配置,管理員必須提交配置交易以更改網絡或通道配置。它必須由相應策略中指定的組織簽署,以負責配置更改。此策略稱爲mod_policy稍後咱們將對其進行討論

實際上,排序服務節點運行一個迷你區塊鏈,經過咱們前面提到的系統通道鏈接 。使用系統通道排序服務節點分配網絡配置交易。這些交易用於在每一個排序服務節點處協做地維護網絡配置的一致副本。以相似的方式,應用程序通道中的節點 能夠分發通道配置交易。一樣,這些交易用於維護每一個節點處的通道配置的一致副本。

經過物理分佈在邏輯上是單數的對象之間的這種平衡是Hyperledger Fabric中的常見模式。例如,邏輯單一的網絡配置之類的對象在一組排序服務節點之間被物理地複製。咱們也看到了它與通道配置,帳本,以及在某種程度上智能合約,這些合同安裝在多個地方,但其接口在邏輯上存在於通道層面。這是您在Hyperledger Fabric中反覆出現的模式,並使Hyperledger Fabric既能夠分散,又能夠同時進行管理。

添加另外一個節點

如今組織R3可以徹底參與C2通道,讓咱們將其基礎設施組件添加到通道。咱們不是一次只作一個組件,而是一次性添加一個節點,一個帳本的本地副本,一個智能合約和一個客戶端應用程序!

讓咱們看看添加了組織R3組件的網絡:

 

該圖示出了與網絡N中的通道C1C2有關的事實以下:客戶端應用A1A2可使用通道C1與節點P1P2進行通訊,以及排序服務O4; 客戶端應用程序A3可使用通道C2與對等P3和排序服務O4進行通訊。排序服務O4能夠利用通道C1C2的通訊服務。通道配置CC1適用於通道C1CC2適用於通道C2

首先,請注意,因爲節點P3鏈接到通道C2,所以它與使用通道C1的節點具備不一樣的帳本 - L2。帳本L2有效地限定爲通道C2。帳本L1徹底分開它的範圍是C1通道。這是有意義的-的通道C2的目的是聯盟X2的成員之間提供專用的通訊,和帳本L2爲他們的交易的專用存儲區。

以相似的方式中,智能合同S6,安裝在節點P3,和實例化通道C2,用於提供受控訪問總帳L2。應用A3如今可使用的通道C2來調用智能合同S6提供給產生能夠接受到網絡中的總帳L2的每一個副本的交易服務。

此時,咱們有一個網絡,其中定義了兩個徹底獨立的通道。這些通道爲組織提供獨立管理的設施,以便彼此進行交易。一樣,這是工做中的分散化咱們在控制和自治之間取得平衡。這是經過適用於受不一樣組織控制和影響的通道的網絡策略來實現的。

將節點加入多個通道

在網絡開發的最後階段,讓咱們將重點放在組織R2上。咱們能夠經過將R2鏈接到多個通道來利用R2是聯盟X1X2的成員這一事實:

該圖示出了與網絡N中的通道C1C2有關的事實以下:客戶端應用A1可使用通道C1與節點P1P2進行通訊,以及排序服務O4; 客戶端應用程序A2可使用通道C1與節點P1P2進行通訊,並使用通道C2進行與節點P2P3的通訊以及排序服務O4; 客戶端應用程序A3可使用通道C2與對等P3和排序服務O4進行通訊。排序服務O4能夠利用通道C1C2的通訊服務。通道配置CC1適用於通道C1CC2適用於通道C2

咱們能夠看到R2是網絡中的一個特殊組織,由於它是惟一一個是兩個應用程序通道成員的組織!它可以在通道C1上與組織R1進行交易,同時它還能夠在不一樣的通道C2上與組織R3進行交易。

注意節點P2如何爲通道C1安裝智能合約S5,爲通道C2安裝智能合約S6。節點P2同時經過不一樣的帳本的智能合約同時是兩個通道的完整成員。

這是一個很是強大的概念 - 通道既提供了組織分離的機制,也提供了組織之間協做的機制。此外,該基礎架構由一組獨立組織提供並在其之間共享。

一樣重要的是要注意,節點P2的行爲根據其進行交易的通道而受到很是不一樣的控制。具體地,包含在通道配置CC1中的策略規定了P2在通道C1中進行交易時可用的操做,而通道配置CC2中的策略控制P2在通道C2中的行爲。

一樣,這是可取的--R2R1贊成通道C1的規則,而R2R3贊成通道C2的規則。這些規則在相應的通道網絡策略中被捕獲 - 它們能夠而且必須由通道中的每一個組件使用,以按照約定強制執行正確的行爲。

一樣,咱們能夠看到客戶端應用程序A2如今可以在通道C1C2上進行交易。一樣,它也將受適當通道配置中的網絡策略支配。另外,請注意客戶端應用程序A2和節點P2正在使用混合的可視詞彙表 - 包括行和鏈接。你能夠看到它們是等價的它們是視覺同義詞。

排序服務

細心的讀者可能會注意到排序服務節點彷佛是一個集中的組件最初用於建立網絡,並鏈接到網絡中的每一個通道。即便咱們將R1R4添加到控制排序節點的網絡配置策略NC4,該節點也在R4的基礎架構上運行。在一個去中心化的世界裏,這看起來很錯誤!

別擔憂!咱們的示例網絡顯示了最簡單的排序服務配置,可幫助您瞭解網絡管理點的概念。事實上,排序服務自己也能夠徹底分散!咱們以前提到過,排序服務可能由不一樣組織擁有的許多單個節點組成,因此讓咱們看看如何在咱們的示例網絡中完成。

讓咱們看看更現實的排序服務節點配置:

多組織排序服務。排序服務包括排序服務節點O1O4O1由組織R1提供,節點O4由組織R4提供。網絡配置NC4定義來自組織R1R4的演員的網絡資源許可。

咱們能夠看到這個排序服務徹底分散 - 它在組織R1中運行,並在組織R4中運行。網絡配置策略NC4容許R1R4對網絡資源具備相同的權限。組織R1R4的客戶端應用程序和節點能夠經過鏈接到節點O1或節點O4來管理網絡資源,由於兩個節點的行爲方式相同,如網絡配置NC4中的策略所定義。在實踐中,來自特定組織的參與者傾向於使用其本地組織提供的基礎設施,但狀況確定並不是老是如此。

分散的交易分配

除了做爲網絡的管理點以外,排序服務還提供了另外一個關鍵設施 - 它是交易的分配點排序服務是從應用程序收集承認的交易並將它們命令到交易塊的組件,交易塊隨後被分發到通道中的每一個節點。在每一個提交節點中,記錄交易,不管是有效仍是無效,而且它們的帳本的本地副本被適當地更新。

注意排序服務節點O4如何爲通道C1執行與對網絡N不一樣的角色。當在通道級別執行時,O4的做用是收集交易並在通道C1內分配塊。它根據通道配置CC1中定義的策略執行此操做。相反,當在網絡級別執行時,O4的做用是根據網絡配置NC4中定義的策略爲網絡資源提供管理點。請再次注意這些角色如何分別由通道和網絡配置中的不一樣策略定義。這應該強調了Hyperledger Fabric中基於聲明性策略的配置的重要性。網絡策略既定義又用於控制聯盟中每一個成員的商定行爲。

咱們能夠看到,排序服務與Hyperledger Fabric中的其餘組件同樣,是一個徹底分散的組件。不管是充當網絡管理點仍是做爲通道中塊的分配器,其節點均可以根據須要在網絡中的多個組織中進行分發。

改變網絡策略

在咱們對樣本網絡的探索中,咱們已經看到了策略控制系統中行爲者行爲的重要性。咱們只討論了一些可用的策略,可是有不少能夠經過聲明性定義來控制行爲的各個方面。這些單獨的策略將在文檔的其餘地方討論。

最重要的是,Hyperledger Fabric提供了一個獨特的強大策略,容許網絡和通道管理員自行管理策略更改!根本的理念是,網絡策略變化是一個常數,不管是在組織內部仍是組織之間,或者是否由外部監管機構強加。例如,新組織可能加入通道,或者現有組織可能會增長或減小其權限。讓咱們再研究一下Hyperledger Fabric中如何實現更改策略。

他們理解的關鍵點是網絡策略變化由網絡策略內部的網絡策略管理。的修改策略,或 mod_policy的簡稱,是管理變化的網絡或通道配置中的第一類的策略。讓咱們舉兩個簡短的例子,說明咱們 已經使用過的mod_policy如何用來管理咱們網絡的變化!

第一個例子是最初創建網絡的時候。此時,只容許組織R4管理網絡。實際上,這是經過使R4成爲網絡配置NC4中定義的惟一具備網絡資源權限的組織來實現的。此外,NC4mod_policy僅提到組織R4 - 只容許R4更改此配置。

而後,咱們將網絡N演進爲容許組織R1管理網絡。R4經過將R1添加到用於建立通道和聯盟建立的策略中來實現此目的。因爲這種變化,R1可以定義聯盟X1X2,並建立通道C1C2R1對網絡配置中的通道和聯盟策略具備相同的管理權限。

可是,R4能夠經過網絡配置爲R1提供更多功能!R4能夠將R1添加到mod_policy,以便R1也可以管理網絡策略的更改。

這第二個功能比第一個功能強大得多,由於如今R1如今能夠 徹底控制 NC4的網絡配置!這意味着R1原則上能夠從網絡中刪除R4的管理權限。在實踐中,R4將配置mod_policy,以便R4還須要批准更改,或者mod_policy中的全部組織都必須批准更改。有不少靈活性可使mod_policy變得複雜,由於它須要支持所需的任何更改過程。

這是mod_policy在工做 - 它容許基本配置的優雅演變爲複雜的配置。全部這些都是在全部相關組織的贊成下發生的。mod_policy的行爲與網絡或通道配置中的全部其餘策略類似它定義了一組容許更改mod_policy自己的組織。

咱們只是在本小節中特別指出了網絡策略和mod_policy的力量。在網絡策略主題中對它進行了更詳細的討論,但如今讓咱們回到咱們完成的網絡!

網絡徹底造成

讓咱們用一致的視覺詞彙來歸納咱們的網絡。咱們使用更緊湊的可視化語法稍微從新組織了它,由於它更適合更大的拓撲:

在此圖中,咱們看到Fabric區塊鏈網絡由兩個應用程序通道和一個排序通道組成。組織R1R4負責排序通道,R1R2負責藍色應用程序通道,而R2R3負責紅色應用程序通道。客戶端應用程序A1是組織R1的元素,CA1是其證書頒發機構。注意,組織R2的節點P2可使用藍色和紅色應用程序通道的通訊設施。每一個應用程序通道都有本身的通道配置,在本例中爲CC1CC2。系統通道的通道配置是網絡配置NC4的一部分。

咱們正在構建Hyperledger Fabric區塊鏈示例網絡的概念之旅結束。咱們建立了一個四個組織網絡,包含兩個通道和三個節點,兩個智能合約和一個排序服務。它由四個證書頒發機構支持。它爲三個客戶端應用程序提供帳本和智能合約服務,這些應用程序能夠經過兩個通道與其進行交互。花點時間查看圖中網絡的詳細信息,並隨時回顧主題以加強您的知識,或者轉到更詳細的主題。