参考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目录下运行:

vagrant@ubuntu-xenial:/opt/gopath/src/github.com/hyperledger/fabric$ configtxgen --help
configtxgen: command not found
vagrant@ubuntu-xenial:/opt/gopath/src/github.com/hyperledger/fabric$ make configtxgen
.build/bin/configtxgen
CGO_CFLAGS=" " GOBIN=/opt/gopath/src/github.com/hyperledger/fabric/.build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/configtxgen/metadata.CommitSHA=325999f" github.com/hyperledger/fabric/common/tools/configtxgen
Binary available as .build/bin/configtxgen

然后会生成./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相关推荐

  1. Hyperledger Fabric区块链工具configtxgen配置configtx.yaml

    configtx.yaml是Hyperledger Fabric区块链网络运维工具configtxgen用于生成通道创世块或通道交易的配置文件,configtx.yaml的内容直接决定了所生成的创世区 ...

  2. hyperledge工具-cryptogen

    参考:http://baijiahao.baidu.com/s?id=1596614770784685300&wfr=spider&for=pc cryptogen是Hyperledg ...

  3. configtx.yaml中文注解

    2019独角兽企业重金招聘Python工程师标准>>> configtx.yaml是Hyperledger Fabric区块链网络运维工具configtxgen用于生成通道创世块或通 ...

  4. Hyperledger Fabric2中文文档-修改通道配置

    翻译:https://hyperledger-fabric.readthedocs.io/en/latest/config_update.html 观看者:网络管理员,节点管理员 什么是通道配置? 像 ...

  5. Hyperledger Fabric网络环境手动配置及其链码自动化部署

    目录 5.1 网络环境的搭建 5.1.1 生成组织结构与身份证书 5.1.2 生成创世区块和通道 5.1.3 启动Fabric网络 5.1.4  创建Fabric-SDK-GO对象并建立通道 5.1. ...

  6. Fabric源码流程分析之Orderer篇

    导言: 本文使用fabric1.1版本,此时有小朋友会问了,fabric都出1.4.2了你怎么还在看1.1呢!首先fabric自1.0以后大的架构基本没有变化,小版本升级只是功能性上更加丰满了,当然最 ...

  7. 手动启动fabric例子marbles02

    前提:已经将first-samples下载下来,并且fabric1.0也已经下载下来了.   1:进入first-samples目录下 执行cryptogen generate --config=./ ...

  8. Hyperledger Fabric 核心模块(2)configtxgen工具

    1. 说明 专门负责生成系统的创始块和通道Channel的创始块 . order 模块的genesis block创始块 channel 模块的 channel configuration trans ...

  9. 区块链开源实现Hyperledge Fabric(一)

    一.概述 1.1 介绍 Hyperledger Fabric是Linux基金会所主导的Hyperledger(超级账本)的项目之一.Hyperledger Fabric旨在作为开发模块化体系结构的区块 ...

最新文章

  1. Android开发常用框架汇总
  2. 《网络攻防实践》第八周作业
  3. 动态代理之Rxjava/Retrofit应用实战
  4. sutton 强化学习 中文版pdf_互联网数据驱动力简书-《数据推动力-创造数据文化》免费pdf分享...
  5. kibana升级之后原本保存的数据dashboards, visualizations, index patterns丢失
  6. mysql语法中的LIMIT的用法
  7. [记录]Shell并发模式批量安装saltstack的脚本
  8. 从零开始山寨Caffe·零:必先利其器
  9. C# 8中的Async Streams
  10. mysql从库执行delete停止_MySQL主库大表执行delete语句,Ctrl+C具体发生了什么分析...
  11. 运用begin和end截取值
  12. 【CS231n_2017】1-Introduction to CNN for Visual Recognition
  13. 美团员工被指用钓鱼邮件获拼多多薪资;华为回应暂无其它手机厂商接入HarmonyOS;GCC 放弃版权转让政策|极客头条...
  14. 也许,我们只需要缺憾的完美!
  15. java 动画 制作_【轻松一刻】Java制作字符动画
  16. 《转》python学习(3)
  17. 计算机网络——循环冗余校验码
  18. 查找bug的方法(随笔)
  19. 当数学题加上了程序员思想
  20. Nodejs中,使用nock做http请求的mock

热门文章

  1. 008_CSS属性选择器
  2. kubenerte启动_Kubenertes资源分配之Request和Limit解析
  3. Android的跨进程通信
  4. 导入Vitamio库后libBaiduMapSDK找不到
  5. oralce 数据库监听日志状态及目录:查看监听(使用grid用户登陆):
  6. matlab vco,MATLAB锁相环仿真程序求解
  7. 怎么关闭eureka的服务_SpringCloud微服务踩坑系列之二
  8. 计算机语言中display翻译,display的意思在线翻译,解释display中文英文含义,短语词组,音标读音,例句,词源,同义词,反义词【澳典网ODict.Net】...
  9. Spark详解(九):Spark存储原理分析
  10. python一些常用方法_python 的一些常用方法