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