Hyperledger Fabric(3)通道與組織


1,通道的結構

通道是Fabric中非常重要的概念(類似微信群?),它實質是排序節點管理私有原子廣播通道,目的是對通道的信息進行隔離,使得通道外的實體無法訪問通道內的信息,從而實現交易隱私性

目前通道分為系統通道(System Channel)和應用通道(Application Channel)。排序節點通過系統通道管理應用通道用戶的交易信息通過應用通道傳遞。對一般用戶來說,通道是指應用通道。系統通道與應用通道的關系如下圖:

在文章https://www.cnblogs.com/xdyixia/p/11765820.html 創始塊的生成步驟中,就有 系統的創始塊和 Channel的創始塊兩部分。

通道排序服務節點負責管理,同時該節點還負責排序通道中的交易。在通道中一般包含有若干成員(組織),若兩個網絡實體身份證書能夠追溯到同一個根CA,則認為這兩個實體屬於同一組織。此外,通道中的每個組織都會有一個或以上的“錨節點”,它負責其他組織換共享賬本的數據

(這里概念有點多,注意各個名詞的關系)

創建通道的時候定義成員,只有通過成員MSP驗證的實體,才能夠加入到通道並訪問通道數據。一個驗證例子如下:

 

Org1 是通道 mychannel 的成員之一,與 Org1 綁定的 MSP 標識為 Org1MSP,其代表的 CA 稱為 CA1;若實體的 MSP 滿足以下條件則認為實體有權限訪問 mychannel 的數據:

實體的MSP標識(ID)為 Org1MSP; 實體身份證書信任鏈源頭CA1。 實體只要滿足通道任意成員MSP 校驗,則認為該實體有權限訪問通道中的數據

************************************************************************

MSP:成員服務提供者 Member service provider

MSP只是一個接口,Fabric-CA是MSP接口的一種實現

MSP抽象提供:具體的身份格式,用戶證書驗證,用戶證書撤銷,簽名生成和驗證,把所有密碼學機制與協議都抽象了出來。

Fabric-CA 用於生成證書和密鑰,以真正的初始化MSP。 Fabric-CA是用於身份管理的MSP接口的默認實現。

https://blog.csdn.net/maixia24/article/details/79761367

https://www.jianshu.com/p/dd19fc125356?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

************************************************************************

2,通道的配置

通道的配置信息都被打包到一個區塊中,並存放在通道共享賬本中。該區塊除了配置信息外不包含其他交易信息,稱之為通道的配置區塊(Configuration Block)。通道可以使用配置區塊更新配置,因此在賬本中每新添加一個配置區塊,通道就按照最新配置區塊的定義來修改配置通道賬本的首個區塊一定是配置區塊,也稱為初始區塊(Genesis Block)

3,使用configtxgen工具生成通道的配置

configtxgen是Fabric提供的工具,用於生成所需要的配置文件。configtxgen工具以一個yaml文件作為輸入,一般稱為 configtx.yaml,該文件定義了將要創建通道配置信息,該文件通常包括以下部分:

1)Profiles: 包含了通道的配置模板,通過configtxgen工具的參數 -profile 來指定使用哪個模板。

2)Organizations: 定義了組織(成員)以及與之相應的 MSP。

3)Orderer: 定義系統通道的相關配置,如排序節點地址共識算法

4)Application: 定義應用通道相關配置,被 profile 引用。

 

以下面的配置文件configtx.yml為例,解釋如何通過 configtxgen 創建通道的初始區塊。 configtx.yml 清單如下:

 

 

 

上面的 profile 定義了系統通道應用通道兩種不同類型的通道。

系統通道必須定義 Orderer 和 Consortiums 兩部分,應用通道必須定義 Application 和 Consortium 兩部分。

 

定義好 yaml 文件后,需要把 configtxgen 工具以及 msp 目錄都拷貝到yaml文件的所在的目錄下,configtxgen 默認會讀取當前目錄的 configtx.yaml 作為輸入:

1)創建排序節點的初始區塊:

configtxgen -profile Genesis -outputBlock genesis.block

該命令通過 profile 參數來指定生成 yaml 文件中 Profile.Genesis 的配置,通過 -outputBlock 參數來將區塊寫入 genesis.block 文件。

 

2)創建應用通道 mychannel 的初始區塊的交易文件 channel.tx:

configtxgen -profile Channel -outputCreateChannelTx channel.tx -channelID mychannel

該命令通過-outputCreateChannelTx參數將生成的交易寫入channel.tx文件,通過-channelID來指定創建通道的名稱為mychannel。

3)創建置區塊交易文件Org1MSPanchors.tx以更新mychannel中PeerOrg1的錨節點:

configtxgen -profile Channel -outputAnchorPeersUpdate Org1MSPanchors.tx -channelID mychannel -asOrg PeerOrg1MSP

該命令通過-asOrg來指定使用PeerOrg1MSP身份創建配置區塊,並且通過-outputAnchorPeersUpdate參數將配置區塊文件Org1MSPanchors.tx中。

 

類似地,創建配置區塊的交易文件 Org2MSPanchors.tx 以更新 mychannel 中 PeerOrg2 的錨節點:

configtxgen -profile Channel -outputAnchorPeersUpdate Org2MSPanchors.tx -channelID mychannel -asOrg PeerOrg2MSP

4,通道相關命令

對通道的管理可通過命令行的方式,與通道相關的命令如下:

 

peer channel create: 用於創建通道,主要參數有-c, -f, -o分別用於指定通道ID, configtx的路徑和orderer的地址。

peer channel fetch:抓取通道中的特定區塊,通過-c和-f參數來指定通道ID和orderer地址。

peer channel join:加入通道,通過-b參數指定初始區塊。

peer channel list:列出peer加入的通道。

peer channel update :簽名並且發送configtx以升級通道配置,需要通過-c, -f, -o參數分別指定通道ID, configtx的路徑以及排序節點的地址。

5,動態修改通道配置

在通道創建后,通道相關的配置區塊的形式存在於通道的賬本中。如果需要修改通道的配置,可通過生成新的配置區塊去更新。修改通道配置的步驟如下:

1) 通過sdk或CLI獲得最新的配置區塊。

2)編輯配置區塊。

3)計算配置更新量。

4)為配置區塊添加配置更新量。

5)sdk或CLI簽名並發送配置區塊。

若新的配置區塊通過驗證,則通道配置以最新配置區塊為准。

 

https://www.8btc.com/article/283739

《區塊鏈核心技術與應用》

《區塊鏈開發實戰 Hyperledger Fabric關鍵技術與案例分析》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM