分享 | 超级账本的实用工具-configtxgen

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

·排序服务节点使用的创世区块;

·创建通道使用的通道配置交易;

·更新通道用的锚节点交易。

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

1 编译生成configtxgen工具

Cryptogen源码在fabric/common/configtx/tool/configtxgen中,是一个独立的可执行程序。v1.0.0之后的版本,源码转到fabric/common/tools/cryptogen/中。

生成cryptogen可执行程序有两种方式。

1)在fabric目录下执行make configtxgen。如果正常执行,则会在fabric/build/bin中生成可执行文件configtxgen。

2)直接在fabric/common/configtx/tool/configtxgen下执行go build。

2 configtxgen命令说明

执行configtxgen–help命令显示如下信息。

(1)用法

-asOrg string

(2)组织名称

·-channelID string——通道名称,默认是”testchainid”;

·-inspectBlock string——检查和输出创世区块的内容;

·-inspectChannelCreateTx string——检查和输出通道创世区块的内容;

·-outputAnchorPeersUpdate string——创建锚节点配置,锚节点在configtix.yaml中的AnchorPeers中指定;

·-outputBlock string——创世区块生成的目录文件的名称,所用的Profile必须包含Consortiums,否则启动排序服务节点会失败;

·-outputCreateChannelTx string——通道创世区块生成的目录文件的名称,所用的Profile必须包含Application,否则创建通道会失败;

·-profile string——configtx.yaml中的Profiles配置项,它描述了如何生成组织信息,默认的名称是”SampleInsecureSolo”;

·-version——显示版本信息。

下面我们来看看命令configtxgen的常用用法。

(1)生成创世区块

生成创世区块的命令如下:

configtxgen -profile TwoOrgsOrdererGenesis
-outputBlock ./channel-artifacts/genesis.block

其中:

·TwoOrgsOrdererGenesis为configtx.yaml中的Profiles之一;

·./channel-artifacts/genesis.block为生成的创世区块文件名及保存路径。

生成的创世区块用于指定启动排序服务,还必须指定启动参数环境变量ORDERER_GENERAL_GENESISMETHOD=file和ORDERER_GENERAL_GENESISFILE=$PWD/genesis.block,或者修改配置文件orderer.yaml编辑这些属性值。

(2)生成通道创世区块

生成通道创世区块的命令如下:

configtxgen -profile TwoOrgsChannel
-outputCreateChannelTx ./channel-artifacts/channel.tx -channelID
$CHANNEL_NAME

其中:

·TwoOrgsChannel为configtx.yaml中的Profiles之一;

·./channel-artifacts/channel.tx为生成的交易文件名及保存路径;

·$CHANNEL_NAME为通道名称。

(3)生成组织锚节点

生成通道中的组织锚节点,如下所示:

configtxgen -profile TwoOrgsChannel
-outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx
-channelID CHANNEL_NAME -asOrg Org1MSP

其中:

·TwoOrgsChannel为configtx.yaml中的Profiles之一;

·./channel-artifacts/Org1MSPanchors.tx为生成锚节点的配置文件名及保存路径;

·$CHANNEL_NAME为通道名称;

·Org1MSP为组织名称。

(4)查看区块信息

查看生成的区块信息的示例如下所示:

configtxgen -profile TwoOrgsOrdererGenesis
-inspectBlock ./channel-artifacts/genesis.block

其中:./channel-artifacts/genesis.block为指定的区块文件,该命令会将指定的区块文件解析成可读JSON格式信息展示出来。

(5)查看通道配置信息

检查和查看通道创世区块的内容如下所示:

configtxgen -profile TwoOrgsOrdererGenesis
-inspectBlock ./channel-artifacts/genesis.block

其中:./channel-artifacts/genesis.block为指定的区块文件,该命令会将指定的区块文件解析成可读JSON格式信息展示出来。

3 configtx.yaml文件解析

configtxgen工具的配置参数主要由configtx.yaml文件提供。在fabric库中,配置文件在fabric/sampleconfig/configtx.yaml中。这个配置文件可以编辑,或者通过设置环境变量来重写属性值,如CONFIGTX_ORDERER_ORDERERTYPE=kafka。

此配置文件主要分为3部分。

1)Profiles部分。它是默认的,这部分包含一些用于开发或测试场景的示例配置,这些配置涉及fabric目录中的加密部分。configtxgen工具允许通过-profile标签来指定配置文件。Profiles部分可以显式声明所有配置,但是通常都是从默认配置中继承。

2)Organizations部分。它是默认的,这部分包含示例配置MSP定义的单一引用。对于生产部署,应该删除这部分配置,并以新网络成员的MSP定义来替代它。组织中每一个元素都必须带有锚标签,如&orgName,这些标签可以在Profiles中部分引用。

3)默认部分。此部分是Orderer和Application的配置,包括一些属性配置,如BatchTimeout和一般用作继承的基础值。

下面我们分析一下该文件的内容:

#######################################################################
#   Profiles
#
#   可以编写不同的 profile 配置,作为参数给 configtxgen 工具使用
#   指定了Consortium(组合、集团、联盟)profile用来生成orderer的创世区块
#   带有正确联盟成员定义的orderer创世区块,其通道的创建请求必须带有组织成员名和联盟名
#
################################################################################
Profiles:
    TwoOrgsOrdererGenesis:
        Orderer:
            <<: *OrdererDefaults
            OrdererType: kafka
            Organizations:
                - *OrdererOrg
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *Org1
                    - *Org2
    TwoOrgsChannel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2

#######################################################################
#   Section: Organizations
#
#   - 该部分定义了在这个配置文件中被引用的不同的组织标识
#
################################################################################
Organizations:

    # SampleOrg 使用sampleconfig定义一个MSP。这个MSP不会在生产中使用,但可以临时使用
    - &SampleOrg
        # DefaultOrg 定义一个在开发环境中sampleconfig使用过的组织
        Name: SampleOrg

        # load MSP 使用的ID
        ID: DEFAULT

        # MSPDir 是MSP配置文件路径,由cryptogen工具生成的加密材料路径
        MSPDir: msp

        # AdminPrincipal 指定用于组织的管理员策略的主体类型
        # 目前只能使用 Role.ADMIN 和 Role.MEMBER,分别代表主体类型为ADMIN和MEMBER
        AdminPrincipal: Role.ADMIN

        AnchorPeers:
            # AnchorPeers 定义了可用于跨组织gossip通信的peer的位置
            # 注意,这个值只有在Application下使用时才会编码进创世区块(即profile中
Application下引用这个组织)
            - Host: 127.0.0.1
                Port: 7051

    - &OrdererOrg
        Name: OrdererMSP
        ID: OrdererMSP
        MSPDir: crypto-config/ordererOrganizations/example.com/msp

    - &Org1
        Name: Org1MSP
        ID: Org1MSP
        MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
        AnchorPeers:
            - Host: peer0.org1.example.com
                Port: 7051

    - &Org2
        Name: Org2MSP
        ID: Org2MSP
        MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
        AnchorPeers:
            - Host: peer0.org2.example.com
                Port: 7051


################################################################################
#
#   SECTION: Orderer
#
#   - 该部分定义了编码到配置交易或创世区块中的与orderer相关的参数值
#
################################################################################
Orderer: &OrdererDefaults

    # Orderer Type: orderer 的启动方式
    # 可选类型是 "solo" 和 "kafka"
    OrdererType: solo

    Addresses:
        #- 127.0.0.1:7050
        - orderer.example.com:7050

    # Batch Timeout: 创建batch的超时时间
    BatchTimeout: 2s

    # Batch Size: 控制batch到块中的消息数
    BatchSize:

        # Max Message Count: batch中允许的最大消息数量
        MaxMessageCount: 10

        # Absolute Max Bytes: batch中允许的绝对最大序列化消息字节数
        # 如果OrdererType 是kafka,则要设置Kafka brokers的'message.max.bytes'和
'replica.fetch.max.bytes'的值大于该值
        AbsoluteMaxBytes: 10 MB

        # Preferred Max Bytes: batch中允许的首选绝对最大序列化消息字节数
        # 如果一个消息大于该值,会导致batch 大于该值
        PreferredMaxBytes: 512 KB

    # Max Channels 是order网络中所允许的最大通道数
    # 设为0表示无最大通道数的限制
    MaxChannels: 0

    Kafka:
        # Brokers: orderer连接的Kafka broker列表
        # 注意: 使用 IP:port 格式
        Brokers:
            - 127.0.0.1:9092

    # Organizations 是作为网络中orderer侧参与者的组织列表
    Organizations:

################################################################################
#
#   SECTION: Application
#
#   - 该部分定义了编码到配置交易或创世区块中的与APP相关的参数值
#   注意,在创建channel tx时才会用Application,否则是创建区块
#
################################################################################
Application: &ApplicationDefaults

    # Organizations 是作为网络中APP侧参与者的组织列表
    Organizations:

文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享