Fabric基礎架構原理(3):通道
本文選自新書《區塊鏈核心技術與應用》,略有刪節。上期介紹了Fabric基礎架構的共識與交易機制,本次介紹Fabric私密交易方式:通道。
通道的結構
通道是Fabric中非常重要的概念,它實質是由排序節點劃分和管理的私有原子廣播通道,目的是對通道的資訊進行隔離,使得通道外的實體無法訪問通道內的資訊,從而實現交易的隱私性。
目前通道分為系統通道(System Channel)和應用通道(Application Channel)。排序節點通過系統通道來管理應用通道,使用者的交易資訊通過應用通道傳遞。對一般使用者來說,通道是指應用通道。系統通道與應用通道的關係如圖10-5所示:
系統通道與應用通道
通道由排序服務節點負責管理,同時該節點還負責排序通道中的交易。在通道中一般包含有若干成員(組織),若兩個網路實體的身份證書能夠追溯到同一個根CA,則認為這兩個實體屬於同一組織。此外,通道中的每個組織都會有一個或以上的“錨節點”,它負責與其他組織交換共享賬本的資料。
建立通道的時候定義了成員,只有通過成員MSP驗證的實體,才能夠加入到通道並訪問通道資料。一個驗證例子如下:
Org1 是通道 mychannel 的成員之一,與 Org1 繫結的 MSP 標識為 Org1MSP,其代表的 CA 稱為 CA1;若實體的 MSP 滿足以下條件則認為實體有許可權訪問 mychannel 的資料:
實體的MSP標識(ID)為 Org1MSP;
實體身份證書的信任鏈源頭為 CA1。
實體只要滿足通道中任意成員的 MSP 校驗,則認為該實體有許可權訪問通道中的資料。
1.通道的配置
通道的配置資訊都被打包到一個區塊中,並存放在通道的共享賬本中。該區塊除了配置資訊外不包含其他交易資訊,稱之為通道的配置區塊(Configuration Block)。通道可以使用配置區塊來更新配置,因此在賬本中每新新增一個配置區塊,通道就按照最新配置區塊的定義來修改配置。通道賬本的首個區塊一定是配置區塊,也稱為初始區塊(Genesis Block)。
2.使用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 兩部分。 (更詳細的說明請參看 雜湊1024社群文章[需貼上地址到瀏覽器]:https://hash1024.org/topics/50 )
定義好 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
3.通道相關命令
對通道的管理可通過命令列的方式,與通道相關的命令如下:
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的路徑以及排序節點的地址。
4.動態修改通道配置
在通道建立後,通道相關的配置以區塊的形式存在於通道的賬本中。如果需要修改通道的配置,可通過生成新的配置區塊去更新。修改通道配置的步驟如下:
1)通過sdk或CLI獲得最新的配置區塊。
2)編輯配置區塊。
3)計算配置更新量。
4)為配置區塊新增配置更新量。
5)sdk或CLI簽名併發送配置區塊。
若新的配置區塊通過驗證,則通道配置以最新配置區塊為準。具體操作流程請參考後文修改通道配置。
(未完待續)
(來源:亨利筆記)
發文時比特幣價格 ¥44167.03