fabric1.1 configtx.yaml 深入解析

configtx.yaml 简介

configtx.yaml用于配置创世区块和初始交易,文件位置位于/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/目录下,是Hyperledger Fabric区块链网络运维工具configtxgen用于 生成通道创世块或通道交易的配置文件,configtx.yaml的内容直接决定了所生成 的创世区块的内容。本文将给出configtx.yaml的详细中文说明。
其中共有五大配置信息,分别是:Profiles(配置文件)、Organizations(组织节点信息)、Orderer(启动模式)、Applications(应用)和Capabilities(功能特性集合)等。


Organizations

组织节点信息Organizations下定义的是所有的排序服务节点及普通节点及普通的组织节点根服务器配置信息,此处配置需要与其他部分内容字段匹配,具体示例如下:

Organizations:
    - &OrdererOrg
        Name: OrdererOrg #给定节点的名称
        ID: OrdererMSP # 即将加载的自定义MSPID
        MSPDir: crypto-config/ordererOrganizations/example.com/msp #MSPdir是由cryptogen工具生成的Orderer的 MSP 证书目录路径,也是组织的MSP证书路径。定义本层级的组织策略,其权威路径为 /Channel///
        Policies:
            Readers:
                Type: Signature
                Rule: "OR('OrdererMSP.member')"
            Writers:
                Type: Signature
                Rule: "OR('OrdererMSP.member')"
            Admins:
                Type: Signature
                Rule: "OR('OrdererMSP.admin')"

    - &Org1
        Name: Org1MSP
        ID: Org1MSP
        MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
        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')"
        AnchorPeers: #定义了节点的位置,可以用于跨组织的数据传播或同步,且这个值只在应用程序部分的上下文中被编码
            - Host: peer0.org1.example.com
              Port: 7051

    - &Org2
        Name: Org2MSP
        ID: Org2MSP
        MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
        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:
            - Host: peer0.org2.example.com
              Port: 9051

Capabilities

Capabil 是Fabric1.1以后出的配置,本节定义fabric network的功能。这是v1.1.0的一个新概念,不应该在带有v1.0.x版本orderers和peers的混合网络中使用。功能定义了fabric二进制文件中必须提供的特性,以便该二进制文件安全地参与fabric网络。例如,如果添加了新的MSP类型,较新的二进制文件可能会识别并验证来自该类型的签名,而没有此支持的较老的二进制文件将无法验证这些交易。这可能导致不同版本的fabric二进制文件具有不同的世界状态。相反,为通道定义一个功能会通知那些没有这个功能的二进制文件,它们必须停止处理交易,直到它们被升级。对于v1.0.x 版本,如果定义了任何功能(包括关闭所有功能的映射),v1.0.x版本的节点可能会故意崩溃。

Capabilities:
    Channel: &ChannelCapabilities 
        V1_4_3: true      
        V1_3: false 
        V1_1: false
    Orderer: &OrdererCapabilities
        V1_4_2: true 
        V1_1: false
    Application: &ApplicationCapabilities
        V1_4_2: true
        V1_3: false
        V1_2: false  
        V1_1: false

Application

Application主中的Organizations是组织的列表,他被定义为网络应用程序方面的参与者,定义要写入创世区块或配置交易的应用参数。

Application: &ApplicationDefaults#  自定义被引用的地址
    Organizations:## Organizations配置列出参与到网络中的机构清单
    Policies:## 定义本层级的应用控制策略,其权威路径为 /Channel/Application/
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
    Capabilities:   # Capabilities配置描述应用层级的能力需求,这里直接引用
    # 前面Capabilities配置段中的ApplicationCapabilities配置项
        <<: *ApplicationCapabilities

Orderer

Orderer指定了Fabric 网络的启动类型、区块生成配置及排序服务的地址。这一块的配置非常重要,需要预估自己所搭建的联盟平台的使用量和具体的及时性要求。,具体配置示例如下:

Orderer: &OrdererDefaults
    OrdererType: solo
    # 排序节点类型用来指定要启用的排序节点实现,不同的实现对应不同的共识算法。
    # 目前可用的类型为:solo,kafka,EtcdRaft
    Addresses:
        - orderer.example.com:7050## 服务地址,这个地方很重要,一定要配正确
    BatchTimeout: 2s## 区块打包的最大超时时间 (到了该时间就打包区块)
    BatchSize:## 区块打包的最大包含交易数(orderer端切分区块的参数)
        MaxMessageCount: 10## 一个区块里最大的交易数
        AbsoluteMaxBytes: 99 MB## 一个区块的最大字节数,任何时候都不能超过
        PreferredMaxBytes: 512 KB## 一个区块的建议字节数,如果一个交易消息的大小超过了这个值, 就会被放入另外一个更大的区块中
    Kafka:## kafka模式的时候kafka节点的地址,通常至少配2个
        Brokers:
            - 127.0.0.1:9092
    EtcdRaft:## 定义了EtcdRaft排序类型被选择时的配置
        Consenters:
            - Host: orderer.example.com
              Port: 7050
              ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt
              ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt
            - Host: orderer2.example.com
              Port: 7050
              ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt
              ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt
            - Host: orderer3.example.com
              Port: 7050
              ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt
              ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt
            - Host: orderer4.example.com
              Port: 7050
              ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt
              ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt
            - Host: orderer5.example.com
              Port: 7050
              ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt
              ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt
    Organizations: ## 参与维护Orderer的组织,默认为空
    # 定义本层级的排序节点策略,其权威路径为 /Channel/Orderer/
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
        BlockValidation:
            Type: ImplicitMeta
            Rule: "ANY Writers"

Channel

Channel配置段用来定义要写入创世区块或配置交易的通道参数。

Channel: &ChannelDefaults# 定义本层级的通道访问策略,其权威路径为 /Channel/
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers: # Writes策略定义了调用Broadcast API提交交易的许可规则
            Type: ImplicitMeta
            Rule: "ANY Writers"
           
        Admins:# Admin策略定义了修改本层级配置的许可规则
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
    Capabilities:
        <<: *ChannelCapabilities
 # Capabilities配置描通道层级的能力需求,这里直接引用
    # 前面Capabilities配置段中的ChannelCapabilities配置项

Profiles

Profiles配置段用来定义用于configtxgen工具的配置入口。包含联盟(consortium)的配置入口可以用来生成排序节点的创世区块。

Profiles:
# TwoOrgsOrdererGenesis用来生成orderer启动时所需的block,用于生成创世区块,名字可以任意
		# 需要包含Orderer和Consortiums两部分
    TwoOrgsOrdererGenesis:
        <<: *ChannelDefaults## 通道为默认配置,这里直接引用上面channel配置段中的ChannelDefaults
        Orderer:
            <<: *OrdererDefaults## Orderer为默认配置,这里直接引用上面orderer配置段中的OrdererDefaults
            Organizations:
                - *OrdererOrg## 这里直接引用上面Organizations配置段中的OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities	## 这里直接引用上面Capabilities配置段中的OrdererCapabilities
        Consortiums: # 联盟为默认的 SampleConsortium 联盟,添加了两个组织,表示orderer所服务的联盟列表
            SampleConsortium: ##  创建更多应用通道时的联盟引用 TwoOrgsChannel 所示
                Organizations:
                    - *Org1
                    - *Org2
    TwoOrgsChannel: # TwoOrgsChannel用来生成channel配置信息,名字可以任意
		# 需要包含Consortium和Applicatioon两部分。 
        Consortium: SampleConsortium 	## 通道所关联的联盟名称
        <<: *ChannelDefaults ## 通道为默认配置,这里直接引用上面channel配置段中的ChannelDefaults
        Application:
            <<: *ApplicationDefaults ## 这里直接引用上面Application配置段中的ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
            Capabilities:
                <<: *ApplicationCapabilities ## 这里直接引用上面Capabilities配置段中的ApplicationCapabilities

    SampleDevModeKafka: # SampleInsecureKafka定义了一个使用Kfaka排序节点的配置
        <<: *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

    SampleMultiNodeEtcdRaft: # SampleInsecureKafka定义了一个使用EtcdRaft排序节点的配置
        <<: *ChannelDefaults
        Capabilities:
            <<: *ChannelCapabilities
        Orderer:
            <<: *OrdererDefaults
            OrdererType: etcdraft
            EtcdRaft:
                Consenters:
                - Host: orderer.example.com
                  Port: 7050
                  ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt
                  ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt
                - Host: orderer2.example.com
                  Port: 7050
                  ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt
                  ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt
                - Host: orderer3.example.com
                  Port: 7050
                  ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt
                  ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt
                - Host: orderer4.example.com
                  Port: 7050
                  ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt
                  ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt
                - Host: orderer5.example.com
                  Port: 7050
                  ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt
                  ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt
            Addresses:
                - orderer.example.com:7050
                - orderer2.example.com:7050
                - orderer3.example.com:7050
                - orderer4.example.com:7050
                - orderer5.example.com:7050

            Organizations:
            - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Application:
            <<: *ApplicationDefaults
            Organizations:
            - <<: *OrdererOrg
        Consortiums:
            SampleConsortium:
                Organizations:
                - *Org1
                - *Org2

你可能感兴趣的:(区块链)