hyperledge工具-configtxgen
參考http://www.blockchainbrother.com/article/1339
configtxgen是Hyperledger Fabric提供的用于通道配置的實用程序,主要生成以下3種文件:
- 排序服務節點使用的創世區塊;
- 創建通道使用的通道配置交易;
- 更新通道用的錨節點交易。
目前,該工具主要側重于生成排序服務節點的創世區塊,但是將來預計增加生成新通道的配置以及重新配置已有的通道。
?
1.編譯生成該configtxgen工具的方法與cryptogen相似,有兩種辦法:
該工具的源碼在github.com/hyperledger/fabric/common/tools/configtxgen
1)在github.com/hyperledger/fabric目錄下運行:
然后會生成./build/bin/configtxgen可執行文件
2)在github.com/hyperledger/fabric/common/tools/configtxgen目錄下運行go build
?
2.編譯成功后查看其參數信息:
vagrant@ubuntu-xenial:/opt/gopath/src/github.com/hyperledger/fabric$ configtxgen --help Usage of configtxgen:-asOrg string作為特定的組織(按名稱string)執行配置生成,只包括org(可能)有權設置的寫集中的值。如用來指明生成的錨節點所在的組織-channelCreateTxBaseProfile string指定一個概要文件作為orderer系統通道當前狀態,以允許在通道創建tx生成期間修改非應用程序參數。僅在與“outputCreateChannelTx”組合時有效。-channelID string在configtx中使用的通道ID,即通道名稱,默認是"testchainid"-configPath string包含要使用的配置的路徑(如果設置的話)-inspectBlock string按指定路徑打印塊中包含的配置,用于檢查和輸出通道中創世區塊的內容,錨節點在configtx.yaml中的AnchorPeers中指定-inspectChannelCreateTx string按指定路徑打印交易中包含的配置,用來檢查通道的配置交易信息-outputAnchorPeersUpdate string創建一個配置更新來更新錨節點(僅在默認通道創建時工作,并且僅在第一次更新時工作)-outputBlock string將genesis塊寫入(如果設置)的路徑。configtx.yaml文件中的Profiles要指定Consortiums,否則啟動排序服務節點會失敗-outputCreateChannelTx string將通道配置交易文件寫入(如果設置)的路徑。configtx.yaml文件中的Profiles必須包含Application,否則創建通道會失敗-printOrg string將組織的定義打印為JSON。(對于手動向通道添加組織非常有用)-profile string指定使用的是configtx.yaml中某個用于生成的Profiles配置項。(默認為“SampleInsecureSolo”)-version顯示版本信息?
3.使用代碼分析命令:
在github.com/hyperledger/fabric-samples/first-network/byfn.sh文件中使用該工具來生成orderer genesis塊、通道配置交易和錨節點更新交易,代碼如下:
?
function generateChannelArtifacts() {which configtxgenif [ "$?" -ne 0 ]; thenecho "configtxgen tool not found. exiting"exit 1fiecho "##########################################################"echo "######### Generating Orderer Genesis block ##############"echo "##########################################################"# Note: For some unknown reason (at least for now) the block file can't be# named orderer.genesis.block or the orderer will fail to launch!echo "CONSENSUS_TYPE="$CONSENSUS_TYPE #查看共識類型set -xif [ "$CONSENSUS_TYPE" == "solo" ]; thenconfigtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.blockelif [ "$CONSENSUS_TYPE" == "kafka" ]; thenconfigtxgen -profile SampleDevModeKafka -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.blockelseset +xecho "unrecognized CONSESUS_TYPE='$CONSENSUS_TYPE'. exiting"exit 1fires=$?set +xif [ $res -ne 0 ]; thenecho "Failed to generate orderer genesis block..."exit 1fiechoecho "#################################################################"echo "### Generating channel configuration transaction 'channel.tx' ###"echo "#################################################################"set -xconfigtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAMEres=$?set +xif [ $res -ne 0 ]; thenecho "Failed to generate channel configuration transaction..."exit 1fiechoecho "#################################################################"echo "####### Generating anchor peer update for Org1MSP ##########"echo "#################################################################"set -xconfigtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSPres=$?set +xif [ $res -ne 0 ]; thenecho "Failed to generate anchor peer update for Org1MSP..."exit 1fiechoecho "#################################################################"echo "####### Generating anchor peer update for Org2MSP ##########"echo "#################################################################"set -xconfigtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate \./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSPres=$?set +xif [ $res -ne 0 ]; thenecho "Failed to generate anchor peer update for Org2MSP..."exit 1fiecho }?
1)首先是生成orderer創世區塊
if [ "$CONSENSUS_TYPE" == "solo" ]; thenconfigtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.blockelif [ "$CONSENSUS_TYPE" == "kafka" ]; thenconfigtxgen -profile SampleDevModeKafka -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.blockelse-profile TwoOrgsOrdererGenesis : 指定使用的是configtx.yaml中Profiles配置項中的TwoOrgsOrdererGenesis配置,即:
Profiles:TwoOrgsOrdererGenesis:<<: *ChannelDefaultsOrderer:<<: *OrdererDefaultsOrganizations:- *OrdererOrgCapabilities:<<: *OrdererCapabilitiesConsortiums:SampleConsortium:Organizations:- *Org1- *Org2?
-profile SampleDevModeKafka :指定使用的是configtx.yaml中Profiles配置項中的SampleDevModeKafka配置,即:
SampleDevModeKafka:<<: *ChannelDefaultsCapabilities:<<: *ChannelCapabilitiesOrderer:<<: *OrdererDefaultsOrdererType: kafkaKafka:Brokers:- kafka.example.com:9092Organizations:- *OrdererOrgCapabilities:<<: *OrdererCapabilitiesApplication:<<: *ApplicationDefaultsOrganizations:- <<: *OrdererOrgConsortiums:SampleConsortium:Organizations:- *Org1- *Org2-channelID byfn-sys-channel :將通道名稱命名為byfn-sys-channel
-outputBlock ./channel-artifacts/genesis.block :為生成的創世區塊文件名及保存路徑
?
2)生成通道配置交易
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME-profile TwoOrgsChannel : 指定使用的是configtx.yaml中Profiles配置項中的TwoOrgsChannel配置,即:
TwoOrgsChannel:Consortium: SampleConsortiumApplication:<<: *ApplicationDefaultsOrganizations:- *Org1- *Org2Capabilities:<<: *ApplicationCapabilities-outputCreateChannelTx ./channel-artifacts/channel.tx :指明生成的通道配置交易存儲的路徑及文件名
-channelID $CHANNEL_NAME :通道名為自己設置的$CHANNEL_NAME值
3)生成組織的錨節點
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP ... configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP-outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx : 為生成錨節點的更新交易文件及保存路徑-asOrg Org1MSP : 指明該錨節點所在的組織
?
除了上面的函數能夠實現的這三個功能外,configtxgen還能夠:
4)查看創世區塊信息
configtxgen -profile TwoOrgsOrdererGenesis -inspectBlock ./channel-artifacts/genesis.block-inspectBlock ./channel-artifacts/genesis.block :指定要查看的創世區塊文件
?
5)查看通道配置交易信息
configtxgen -profile TwoOrgsChannel -inspectChannelCreateTx ./channel-artifacts/channel.tx-inspectChannelCreateTx ./channel-artifacts/channel.tx : 指定要查看的通道配置交易信息
?
4.configtx.yaml文件
此配置文件主要分為3部分。
1)Profiles部分。它是默認的,這部分包含一些用于開發或測試場景的示例配置,這些配置涉及fabric目錄中的加密部分。configtxgen工具允許通過-profile標簽來指定配置文件。Profiles部分可以顯式聲明所有配置,但是通常都是從默認配置中繼承。
2)Organizations部分。它是默認的,這部分包含示例配置MSP定義的單一引用。對于生產部署,應該刪除這部分配置,并以新網絡成員的MSP定義來替代它。組織中每一個元素都必須帶有錨標簽,如&orgName,這些標簽可以在Profiles中部分引用。
3)默認部分。此部分是Orderer和Application的配置,包括一些屬性配置,如BatchTimeout和一般用作繼承的基礎值。
github.com/hyperledger/fabric-samples/first-network/configtx.yaml:
如果沒學過yaml,可見yaml的簡單學習
# Copyright IBM Corp. All Rights Reserved. # # SPDX-License-Identifier: Apache-2.0 #--- ################################################################################ # # Section: Organizations # # - 本節定義了不同的組織標識,這些標識將在稍后的配置中引用。 # ################################################################################ Organizations:# SampleOrg使用sampleconfig定義了一個MSP。它不應該在生產中使用,但可以用作其他定義的模板- &OrdererOrg# DefaultOrg定義了使用在fabric.git開發環境的sampleconfig中的組織Name: OrdererOrg# ID 下載MSP的IDID: OrdererMSP# MSPDir是包含MSP配置的文件系統路徑,由cryptogen工具生成的加密材料路徑MSPDir: crypto-config/ordererOrganizations/example.com/msp# Policies定義了在這個配置樹級別的策略集# 對于組織策略,它們的規范路徑通常是/Channel/<Application|Orderer>/<OrgName>/<PolicyName>Policies:Readers:Type: SignatureRule: "OR('OrdererMSP.member')"Writers:Type: SignatureRule: "OR('OrdererMSP.member')"Admins:Type: SignatureRule: "OR('OrdererMSP.admin')"- &Org1# DefaultOrg定義了使用在fabric.git開發環境的sampleconfig中的組織Name: Org1MSP# ID 下載MSP的IDID: Org1MSPMSPDir: crypto-config/peerOrganizations/org1.example.com/msp# Policies定義了在這個配置樹級別的策略集# 對于組織策略,它們的規范路徑通常是/Channel/<Application|Orderer>/<OrgName>/<PolicyName>Policies:Readers:Type: SignatureRule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"Writers:Type: SignatureRule: "OR('Org1MSP.admin', 'Org1MSP.client')"Admins:Type: SignatureRule: "OR('Org1MSP.admin')"# 將此標志設置為true.AnchorPeers: #指明org1中使用peer0作為錨節點# AnchorPeers定義了可以用于跨組織gossip通信的節點的位置# 注意,這個值只在應用程序部分上下文的genesis塊中編碼- Host: peer0.org1.example.comPort: 7051- &Org2# DefaultOrg定義了使用在fabric.git開發環境的sampleconfig中的組織Name: Org2MSP# ID 來指定下載的MSP定義ID: Org2MSPMSPDir: crypto-config/peerOrganizations/org2.example.com/msp# Policies定義了在這個配置樹級別的策略集# 對于組織策略,它們的規范路徑通常是/Channel/<Application|Orderer>/<OrgName>/<PolicyName>Policies:Readers:Type: SignatureRule: "OR('Org2MSP.admin', 'Org2MSP.peer', 'Org2MSP.client')"Writers:Type: SignatureRule: "OR('Org2MSP.admin', 'Org2MSP.client')"Admins:Type: SignatureRule: "OR('Org2MSP.admin')"AnchorPeers: #指明org2中使用peer0作為錨節點# AnchorPeers定義了可以用于跨組織gossip通信的節點的位置# 注意,這個值只在應用程序部分上下文的genesis塊中編碼- Host: peer0.org2.example.comPort: 9051################################################################################ # # SECTION: Capabilities # # - 本節定義fabric network的功能。這是v1.1.0的一個新概念,不應該在帶有v1.0.x版本orderers和peers的混合網絡中使用。 # 功能定義了fabric二進制文件中必須提供的特性,以便該二進制文件安全地參與fabric網絡。 # 例如,如果添加了新的MSP類型,較新的二進制文件可能會識別并驗證來自該類型的簽名,而沒有此支持的較老的二進制文件將無法驗證這些交易。 # 這可能導致不同版本的fabric二進制文件具有不同的世界狀態。相反,為通道定義一個功能會通知那些沒有這個功能的二進制文件,它們必須停止處理交易,直到它們被升級。 # 對于v1.0.x 版本,如果定義了任何功能(包括關閉所有功能的映射),v1.0.x版本的節點可能會故意崩潰。 # ################################################################################ Capabilities:# 通道功能同時適用于orderers和peers,并且必須得到雙方的支持。# 將功能的值設置為true以滿足需要。Channel: &ChannelCapabilities#Channel的V1.3是一個用來表示運行在V1.3.x版本上的所有orderers和peers都需要的行為的catchall標志,但這將與以前版本中的orderers和peers不兼容。# 在啟用V1.3通道功能之前,請確保通道上的所有orderers和peers都位于v1.3.0或更高版本。V1_3: true# Orderer功能只適用于Orderer,并且可以安全地與以前版本的節點一起使用。# 將功能的值設置為true以滿足需要Orderer: &OrdererCapabilities# Orderer的V1.1是一個用來表示確定被在v1.1.x中運行的所有orderers所需要的行為的catchall標志,但這與以前版本中的orderers不兼容。# 在啟用V1.1 orderer功能之前,請確保通道上的所有orderer都處于v1.1.0或更高版本。V1_1: true# Application功能只應用于peer網絡,并且可以安全地與以前的版本的orderers一起使用。# 將功能的值設置為true以滿足需要Application: &ApplicationCapabilities# Application的V1.3用來啟用新的非向后兼容特性fabric V1.3的補丁V1_3: true# Application的V1.2用來啟用新的非向后兼容特性和fabric V1.2的補丁(注意,如果設置了之后的版本的功能,則不需要設置此功能)V1_2: false# Application的V1.1啟用新的非向后兼容特性和fabric V1.1的補丁(注意,如果設置了之后的版本的功能,則不需要設置此特性)。# 所以這里設置是V1_3為true,另外兩個為falseV1_1: false################################################################################ # # SECTION: Application # # - 本節為Application相關參數定義要編碼到配置交易或創世區塊中的值 # 注意,只有在創建channel tx時才會用Application,否則是創建區塊 # ################################################################################ Application: &ApplicationDefaults# Organizations是定義為網絡應用程序端參與者的組織列表Organizations:# Policies定義了在這個配置樹級別的策略集# 對于組織策略,它們的規范路徑通常是/Channel/<Application|Orderer>/<OrgName>/<PolicyName>Policies:Readers:Type: ImplicitMetaRule: "ANY Readers"Writers:Type: ImplicitMetaRule: "ANY Writers"Admins:Type: ImplicitMetaRule: "MAJORITY Admins"Capabilities:<<: *ApplicationCapabilities ################################################################################ # # SECTION: Orderer # # - 本節為orderer相關參數定義要編碼到配置交易或創世區塊中的值 # ################################################################################ Orderer: &OrdererDefaults# Orderer 類型: 要啟動的Orderer實現類型# 可用的類型有“solo”和“kafka”OrdererType: soloAddresses:- orderer.example.com:7050# Batch Timeout: 創建批處理之前要等待的時間BatchTimeout: 2s# Batch Size: 控制成塊的消息數量BatchSize:# Max Message Count: 批處理中允許的最大消息數MaxMessageCount: 10# Absolute Max Bytes: 批處理中允許序列化消息的絕對最大字節數。AbsoluteMaxBytes: 99 MB# Preferred Max Bytes: 批處理中允許序列化消息的首選最大字節數。# 大于首選最大字節的消息將導致批處理大于改值。PreferredMaxBytes: 512 KBKafka:# Brokers: orderer連接到的Kafka代理的列表# NOTE: Use IP:port notationBrokers:- 127.0.0.1:9092# Organizations是組織的列表,組織被定義為網絡的orderer方的參與者Organizations:# Policies定義了在這個配置樹級別的策略集# 對于Orderer策略,它們的規范路徑通常是/Channel/Orderer/<PolicyName>Policies:Readers:Type: ImplicitMetaRule: "ANY Readers"Writers:Type: ImplicitMetaRule: "ANY Writers"Admins:Type: ImplicitMetaRule: "MAJORITY Admins"# BlockValidation指定必須包含來自orderer的哪些簽名,以便peer對其進行驗證。BlockValidation:Type: ImplicitMetaRule: "ANY Writers"################################################################################ # # CHANNEL # # 本節為channel相關參數定義要編碼到配置交易或創世區塊中的值 # ################################################################################ Channel: &ChannelDefaults# Policies定義了在這個配置樹級別的策略集# 對于Channel策略,它們的規范路徑通常是/Channel/<PolicyName>Policies:# 誰可能調用'Deliver' APIReaders:Type: ImplicitMetaRule: "ANY Readers"# 誰可能調用'Broadcast' APIWriters:Type: ImplicitMetaRule: "ANY Writers"# 默認,誰可能調用在這個配置級別的元素Admins:Type: ImplicitMetaRule: "MAJORITY Admins"# Capabilities描述通道級功能,有關詳細描述,請參閱此文件中其他部分的專用功能部分Capabilities:<<: *ChannelCapabilities################################################################################ # # Profile # # - 這里可以編碼不同的配置概要文件,將其指定為configtxgen工具的參數 # ################################################################################ Profiles:TwoOrgsOrdererGenesis:<<: *ChannelDefaultsOrderer:<<: *OrdererDefaultsOrganizations:- *OrdererOrgCapabilities:<<: *OrdererCapabilitiesConsortiums:SampleConsortium:Organizations:- *Org1- *Org2TwoOrgsChannel:Consortium: SampleConsortiumApplication:<<: *ApplicationDefaultsOrganizations:- *Org1- *Org2Capabilities:<<: *ApplicationCapabilitiesSampleDevModeKafka:<<: *ChannelDefaultsCapabilities:<<: *ChannelCapabilitiesOrderer:<<: *OrdererDefaultsOrdererType: kafkaKafka:Brokers:- kafka.example.com:9092Organizations:- *OrdererOrgCapabilities:<<: *OrdererCapabilitiesApplication:<<: *ApplicationDefaultsOrganizations:- <<: *OrdererOrgConsortiums:SampleConsortium:Organizations:- *Org1- *Org2?
轉載于:https://www.cnblogs.com/wanghui-garcia/p/10496849.html
總結
以上是生活随笔為你收集整理的hyperledge工具-configtxgen的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webSocket使用心跳包实现断线重连
- 下一篇: Android配置build.gradl