• -------------------------------------------------------------
  • ====================================

hyperledge工具-configtxgen

区块链 dewbay 4年前 (2020-09-29) 1773次浏览 已收录 0个评论 扫描二维码

configtxgen是 Hyperledger Fabric 提供的用于通道配置的实用程序,主要生成以下 3 种文件:

  • 排序服务节点使用的创世区块;
  • 创建通道使用的通道配置交易;
  • 更新通道用的锚节点交易。

目前,该工具主要侧重于生成排序服务节点的创世区块,但是将来预计增加生成新通道的配置以及重新配置已有的通道。

 

1.编译生成该configtxgen工具的方法与 cryptogen 相似,有两种办法:

该工具的源码在 github.com/hyperledger/fabric/common/tools/configtxgen
1)在 github.com/hyperledger/fabric 目录下运行:

hyperledge工具-configtxgen
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
hyperledge工具-configtxgen

然后会生成./build/bin/configtxgen 可执行文件

2)在 github.com/hyperledger/fabric/common/tools/configtxgen 目录下运行 go build

 

2.编译成功后查看其参数信息:

hyperledge工具-configtxgen
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
      显示版本信息
hyperledge工具-configtxgen

 

3.使用代码分析命令:

在 github.com/hyperledger/fabric-samples/first-network/byfn.sh 文件中使用该工具来生成 orderer genesis 块、通道配置交易和锚节点更新交易,代码如下:

 

hyperledge工具-configtxgen
function generateChannelArtifacts() {
  which configtxgen
  if [ "$?" -ne 0 ]; then
    echo "configtxgen tool not found. exiting"
    exit 1
  fi

  echo "##########################################################"
  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 -x
  if [ "$CONSENSUS_TYPE" == "solo" ]; then
    configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
  elif [ "$CONSENSUS_TYPE" == "kafka" ]; then
    configtxgen -profile SampleDevModeKafka -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
  else
    set +x
    echo "unrecognized CONSESUS_TYPE='$CONSENSUS_TYPE'. exiting"
    exit 1
  fi
  res=$?
  set +x
  if [ $res -ne 0 ]; then
    echo "Failed to generate orderer genesis block..."
    exit 1
  fi
  echo
  echo "#################################################################"
  echo "### Generating channel configuration transaction 'channel.tx' ###"
  echo "#################################################################"
  set -x
  configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
  res=$?
  set +x
  if [ $res -ne 0 ]; then
    echo "Failed to generate channel configuration transaction..."
    exit 1
  fi

  echo
  echo "#################################################################"
  echo "#######    Generating anchor peer update for Org1MSP   ##########"
  echo "#################################################################"
  set -x
  configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
  res=$?
  set +x
  if [ $res -ne 0 ]; then
    echo "Failed to generate anchor peer update for Org1MSP..."
    exit 1
  fi

  echo
  echo "#################################################################"
  echo "#######    Generating anchor peer update for Org2MSP   ##########"
  echo "#################################################################"
  set -x
  configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate \
    ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
  res=$?
  set +x
  if [ $res -ne 0 ]; then
    echo "Failed to generate anchor peer update for Org2MSP..."
    exit 1
  fi
  echo
}
hyperledge工具-configtxgen

 

1)首先是生成 orderer 创世区块

 if [ "$CONSENSUS_TYPE" == "solo" ]; then
    configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
  elif [ "$CONSENSUS_TYPE" == "kafka" ]; then
    configtxgen -profile SampleDevModeKafka -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
  else

-profile TwoOrgsOrdererGenesis : 指定使用的是 configtx.yaml 中 Profiles 配置项中的 TwoOrgsOrdererGenesis 配置,即:

hyperledge工具-configtxgen
Profiles:

    TwoOrgsOrdererGenesis:
        <<: *ChannelDefaults
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *Org1
                    - *Org2
hyperledge工具-configtxgen

 

-profile SampleDevModeKafka :指定使用的是 configtx.yaml 中 Profiles 配置项中的 SampleDevModeKafka 配置,即:

hyperledge工具-configtxgen
    SampleDevModeKafka:
        <<: *ChannelDefaults
        Capabilities:
            <<: *ChannelCapabilities
        Orderer:
            <<: *OrdererDefaults
            OrdererType: kafka
            Kafka:
                Brokers:
                - kafka.example.com:9092

            Organizations:
            - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Application:
            <<: *ApplicationDefaults
            Organizations:
            - <<: *OrdererOrg
        Consortiums:
            SampleConsortium:
                Organizations:
                - *Org1
                - *Org2
hyperledge工具-configtxgen

-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 配置,即:

hyperledge工具-configtxgen
    TwoOrgsChannel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
            Capabilities:
                <<: *ApplicationCapabilities
hyperledge工具-configtxgen

-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 的简单学习

hyperledge工具-configtxgen
# 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 的 ID
        ID: OrdererMSP

        # MSPDir 是包含 MSP 配置的文件系统路径,由 cryptogen 工具生成的加密材料路径
        MSPDir: crypto-config/ordererOrganizations/example.com/msp

        # Policies 定义了在这个配置树级别的策略集
        # 对于组织策略,它们的规范路径通常是/Channel/<Application|Orderer>/<OrgName>/<PolicyName>
        Policies:
            Readers:
                Type: Signature
                Rule: "OR('OrdererMSP.member')"
            Writers:
                Type: Signature
                Rule: "OR('OrdererMSP.member')"
            Admins:
                Type: Signature
                Rule: "OR('OrdererMSP.admin')"

    - &Org1
        # DefaultOrg 定义了使用在 fabric.git 开发环境的 sampleconfig 中的组织
        Name: Org1MSP

        # ID 下载 MSP 的 ID
        ID: Org1MSP

        MSPDir: crypto-config/peerOrganizations/org1.example.com/msp

        # Policies 定义了在这个配置树级别的策略集
        # 对于组织策略,它们的规范路径通常是/Channel/<Application|Orderer>/<OrgName>/<PolicyName>
        Policies:
            Readers:
                Type: Signature
                Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"
            Writers:
                Type: Signature
                Rule: "OR('Org1MSP.admin', 'Org1MSP.client')"
            Admins:
                Type: Signature
                Rule: "OR('Org1MSP.admin')"

        # 将此标志设置为 true.
        AnchorPeers: #指明 org1 中使用 peer0 作为锚节点
            # AnchorPeers 定义了可以用于跨组织 gossip 通信的节点的位置
            # 注意,这个值只在应用程序部分上下文的 genesis 块中编码
            - Host: peer0.org1.example.com
              Port: 7051

    - &Org2
        # DefaultOrg 定义了使用在 fabric.git 开发环境的 sampleconfig 中的组织
        Name: Org2MSP

        # ID 来指定下载的 MSP 定义
        ID: Org2MSP

        MSPDir: crypto-config/peerOrganizations/org2.example.com/msp

        # Policies 定义了在这个配置树级别的策略集
        # 对于组织策略,它们的规范路径通常是/Channel/<Application|Orderer>/<OrgName>/<PolicyName>
        Policies:
            Readers:
                Type: Signature
                Rule: "OR('Org2MSP.admin', 'Org2MSP.peer', 'Org2MSP.client')"
            Writers:
                Type: Signature
                Rule: "OR('Org2MSP.admin', 'Org2MSP.client')"
            Admins:
                Type: Signature
                Rule: "OR('Org2MSP.admin')"

        AnchorPeers: #指明 org2 中使用 peer0 作为锚节点
            # AnchorPeers 定义了可以用于跨组织 gossip 通信的节点的位置
            # 注意,这个值只在应用程序部分上下文的 genesis 块中编码
            - Host: peer0.org2.example.com
              Port: 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,另外两个为 false
        V1_1: false

################################################################################
#
#   SECTION: Application
#
#   - 本节为 Application 相关参数定义要编码到配置交易或创世区块中的值
#   注意,只有在创建 channel tx 时才会用 Application,否则是创建区块
#
################################################################################
Application: &ApplicationDefaults

    # Organizations 是定义为网络应用程序端参与者的组织列表
    Organizations:

    # Policies 定义了在这个配置树级别的策略集
    # 对于组织策略,它们的规范路径通常是/Channel/<Application|Orderer>/<OrgName>/<PolicyName>
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"

    Capabilities:
        <<: *ApplicationCapabilities
################################################################################
#
#   SECTION: Orderer
#
#   - 本节为 orderer 相关参数定义要编码到配置交易或创世区块中的值
#
################################################################################
Orderer: &OrdererDefaults

    # Orderer 类型: 要启动的 Orderer 实现类型
    # 可用的类型有“solo”和“kafka”
    OrdererType: solo

    Addresses:
        - 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 KB

    Kafka:
        # Brokers: orderer 连接到的 Kafka 代理的列表
        # NOTE: Use IP:port notation
        Brokers:
            - 127.0.0.1:9092

    # Organizations 是组织的列表,组织被定义为网络的 orderer 方的参与者
    Organizations:

    # Policies 定义了在这个配置树级别的策略集
    # 对于 Orderer 策略,它们的规范路径通常是/Channel/Orderer/<PolicyName>
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
        # BlockValidation 指定必须包含来自 orderer 的哪些签名,以便 peer 对其进行验证。
        BlockValidation:
            Type: ImplicitMeta
            Rule: "ANY Writers"

################################################################################
#
#   CHANNEL
#
#   本节为 channel 相关参数定义要编码到配置交易或创世区块中的值
#
################################################################################
Channel: &ChannelDefaults

    # Policies 定义了在这个配置树级别的策略集
    # 对于 Channel 策略,它们的规范路径通常是/Channel/<PolicyName>
    Policies:
        # 谁可能调用'Deliver' API
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        # 谁可能调用'Broadcast' API
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        # 默认,谁可能调用在这个配置级别的元素
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"

    # Capabilities 描述通道级功能,有关详细描述,请参阅此文件中其他部分的专用功能部分
    Capabilities:
        <<: *ChannelCapabilities

################################################################################
#
#   Profile
#
#   - 这里可以编码不同的配置概要文件,将其指定为 configtxgen 工具的参数
#
################################################################################
Profiles:

    TwoOrgsOrdererGenesis:
        <<: *ChannelDefaults
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *Org1
                    - *Org2
    TwoOrgsChannel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
            Capabilities:
                <<: *ApplicationCapabilities

    SampleDevModeKafka:
        <<: *ChannelDefaults
        Capabilities:
            <<: *ChannelCapabilities
        Orderer:
            <<: *OrdererDefaults
            OrdererType: kafka
            Kafka:
                Brokers:
                - kafka.example.com:9092

            Organizations:
            - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Application:
            <<: *ApplicationDefaults
            Organizations:
            - <<: *OrdererOrg
        Consortiums:
            SampleConsortium:
                Organizations:
                - *Org1
                - *Org2
hyperledge工具-configtxgen

露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:hyperledge工具-configtxgen
喜欢 (0)
[]
分享 (0)
关于作者:
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址