configtx.yaml 是 Hyperledger Fabric 区块链网络运维工具 configtxgen 用于生成通道创世块或通道交易的配置文件,configtx.yaml 的内容直接决定了所生成的创世区块的内容。本文将给出 configtx.yaml 的详细中文说明。
如果需要快速掌握 Fabric 区块链的链码与应用开发,推荐访问汇智网的在线互动教程:
- Fabric 区块链 Java 开发详解
- Fabric 区块链 NodeJS 开发详解
Capabilities / 通道能力配置
Capabilities 段用来定义 fabric 网络的能力。这是版本 v1.0.0 引入的一个新的配置段,当与版本 v1.0.x 的对等节点与排序节点混合组网时不可使用。
Capabilities 段定义了 fabric 程序要加入网络所必须支持的特性。例如,如果添加了一个新的 MSP 类型,那么更新的程序可能会根据该类型识别并验证签名,但是老版本的程序就没有办法验证这些交易。这可能导致不同版本的 fabric 程序中维护的世界状态不一致。
因此,通过定义通道的能力,就明确了不满足该能力要求的 fabric 程序,将无法处理交易,除非升级到新的版本。对于 v1.0.x 的程序而言,如果在 Capabilities 段定义了任何能力,即使声明不需要支持这些能力,都会导致其有意崩溃。
Capabilities:
# Global 配置同时应用于排序节点和对等节点,并且必须被两种节点同时支持。# 将该配置项设置为 ture 表明要求节点具备该能力
Global: &ChannelCapabilities
V1_3: true
# Orderer 配置仅应用于排序节点,不需考虑对等节点的升级。将该配置项
# 设置为 true 表明要求排序节点具备该能力
Orderer: &OrdererCapabilities
V1_1: true
# Application 配置仅应用于对等网络,不需考虑排序节点的升级。将该配置项
# 设置为 true 表明要求对等节点具备该能力
Application: &ApplicationCapabilities
V1_3: true
Organizations / 组织机构配置
Organizations 配置段用来定义组织机构实体,以便在后续配置中引用。例如,下面的配置文件中,定义了三个机构,可以分别使用 ExampleCom、Org1ExampleCom 和 Org2ExampleCom 引用其配置:
Organizations:
- &ExampleCom
Name: ExampleCom
ID: example.com
AdminPrincipal: Role.ADMIN
MSPDir: ./ordererOrganizations/example.com/msp
Policies:
Readers:
Type: Signature
Rule: OR('example.com.member')
Writers:
Type: Signature
Rule: OR('example.com.member')
Admins:
Type: Signature
Rule: OR('example.com.admin')
Endorsement:
Type: Signature
Rule: OR('example.com.member')
- &Org1ExampleCom
Name: Org1ExampleCom
ID: org1.example.com
MSPDir: ./peerOrganizations/org1.example.com/msp
AdminPrincipal: Role.ADMIN
AnchorPeers:
- Host: peer0.org1.example.com
Port: 7051
Policies:
Readers:
Type: Signature
Rule: OR('org1.example.com.member')
Writers:
Type: Signature
Rule: OR('org1.example.com.member')
Admins:
Type: Signature
Rule: OR('org1.example.com.admin')
Endorsement:
Type: Signature
Rule: OR('org1.example.com.member')
- &Org2ExampleCom
Name: Org2ExampleCom
ID: org2.example.com
MSPDir: ./peerOrganizations/org2.example.com/msp
AdminPrincipal: Role.ADMIN
AnchorPeers:
- Host: peer0.org2.example.com
Port: 7051
Policies:
Readers:
Type: Signature
Rule: OR('org2.example.com.member')
Writers:
Type: Signature
Rule: OR('org2.example.com.member')
Admins:
Type: Signature
Rule: OR('org2.example.com.admin')
Endorsement:
Type: Signature
Rule: OR('org2.example.com.member')
Orderer / 排序节点配置
Orderer 配置段用来定义要编码写入创世区块或通道交易的排序节点参数。
Orderer: &OrdererDefaults
# 排序节点类型用来指定要启用的排序节点实现,不同的实现对应不同的共识算法。# 目前可用的类型为:solo 和 kafka
OrdererType: solo
Addresses:
- orderer0.example.com:7050
BatchTimeout: 2s
BatchSize:
MaxMessageCount: 10
AbsoluteMaxBytes: 98 MB
PreferredMaxBytes: 512 KB
MaxChannels: 0
Kafka:
Brokers:
- kafka0:9092
- kafka1:9092
- kafka2:9092
- kafka3:9092
Organizations:
# 定义本层级的排序节点策略,其权威路径为 /Channel/Orderer/<PolicyName>
Policies:
Readers:
Type: ImplicitMeta
Rule: ANY Readers
Writers:
Type: ImplicitMeta
Rule: ANY Writers
Admins:
Type: ImplicitMeta
Rule: MAJORITY Admins
# BlockValidation 配置项指定了哪些签名必须包含在区块中,以便对等节点进行验证
BlockValidation:
Type: ImplicitMeta
Rule: ANY Writers
# Capabilities 配置描述排序节点层级的能力需求,这里直接引用
# 前面 Capabilities 配置段中的 OrdererCapabilities 配置项
Capabilities:
<<: *OrdererCapabilities
Channel / 通道配置
Channel 配置段用来定义要写入创世区块或配置交易的通道参数。
Channel: &ChannelDefaults
# 定义本层级的通道访问策略,其权威路径为 /Channel/<PolicyName>
Policies:
Readers:
Type: ImplicitMeta
Rule: ANY Readers
# Writes 策略定义了调用 Broadcast API 提交交易的许可规则
Writers:
Type: ImplicitMeta
Rule: ANY Writers
# Admin 策略定义了修改本层级配置的许可规则
Admins:
Type: ImplicitMeta
Rule: MAJORITY Admins
# Capabilities 配置描通道层级的能力需求,这里直接引用
# 前面 Capabilities 配置段中的 ChannelCapabilities 配置项
Capabilities:
<<: *ChannelCapabilities
Application / 应用配置
Application 配置段用来定义要写入创世区块或配置交易的应用参数。
Application: &ApplicationDefaults
ACLs: &ACLsDefault
# ACLs 配置段为系统中各种资源提供默认的策略。# 这里所说的“资源”,可以是系统链码的函数,例如 qscc 系统链码的 GetBlockByNumber 方法
# 也可以是其他资源,例如谁可以接收区块事件。# 这个配置段不是用来定义资源或 API,而仅仅是定义资源的访问控制策略
#
# 用户可以在通道定义中重写这些默认策略
#---New Lifecycle System Chaincode (_lifecycle) function to policy mapping for access control--#
# _lifecycle 系统链码 CommitChaincodeDefinition 函数的 ACL 定义
_lifecycle/CommitChaincodeDefinition: /Channel/Application/Writers
# _lifecycle 系统链码的 QueryChaincodeDefinition 函数的 ACL 定义
_lifecycle/QueryChaincodeDefinition: /Channel/Application/Readers
# _lifecycle 系统链码的 QueryNamespaceDefinitions 函数的 ACL 定义
_lifecycle/QueryNamespaceDefinitions: /Channel/Application/Readers
#---Lifecycle System Chaincode (lscc) function to policy mapping for access control---#
# lscc 系统链码的 getid 函数的 ACL 定义
lscc/ChaincodeExists: /Channel/Application/Readers
# lscc 系统链码的 getdepspec 函数的 ACL 定义
lscc/GetDeploymentSpec: /Channel/Application/Readers
# lscc 系统链码的 getccdata 函数的 ACL 定义
lscc/GetChaincodeData: /Channel/Application/Readers
# lscc 系统链码的 getchaincodes 函数的 ACL 定义
lscc/GetInstantiatedChaincodes: /Channel/Application/Readers
#---Query System Chaincode (qscc) function to policy mapping for access control---#
# qscc 系统链码的 GetChainInfo 函数的 ACL 定义
qscc/GetChainInfo: /Channel/Application/Readers
# qscc 系统链码的 GetBlockByNumber 函数的 ACL 定义
qscc/GetBlockByNumber: /Channel/Application/Readers
# qscc 系统 链码的 GetBlockByHash 函数的 ACL 定义
qscc/GetBlockByHash: /Channel/Application/Readers
# qscc 系统链码的 GetTransactionByID 函数的 ACL 定义
qscc/GetTransactionByID: /Channel/Application/Readers
# qscc 系统链码 GetBlockByTxID 函数的 ACL 定义
qscc/GetBlockByTxID: /Channel/Application/Readers
#---Configuration System Chaincode (cscc) function to policy mapping for access control---#
# cscc 系统链码的 GetConfigBlock 函数的 ACl 定义
cscc/GetConfigBlock: /Channel/Application/Readers
# cscc 系统链码的 GetConfigTree 函数的 ACL 定义
cscc/GetConfigTree: /Channel/Application/Readers
# cscc 系统链码的 SimulateConfigTreeUpdate 函数的 ACL 定义
cscc/SimulateConfigTreeUpdate: /Channel/Application/Readers
#---Miscellanesous peer function to policy mapping for access control---#
# 访问对等节点上的链码的 ACL 策略定义
peer/Propose: /Channel/Application/Writers
# 从链码中访问其他链码的 ACL 策略定义
peer/ChaincodeToChaincode: /Channel/Application/Readers
#---Events resource to policy mapping for access control###---#
# 发送区块事件的 ACL 策略定义
event/Block: /Channel/Application/Readers
# 发送过滤的区块事件的 ACL 策略定义
event/FilteredBlock: /Channel/Application/Readers
# Organizations 配置列出参与到网络中的机构清单
Organizations:
# 定义本层级的应用控制策略,其权威路径为 /Channel/Application/<PolicyName>
Policies: &ApplicationDefaultPolicies
Readers:
Type: ImplicitMeta
Rule: "ANY Readers"
Writers:
Type: ImplicitMeta
Rule: "ANY Writers"
Admins:
Type: ImplicitMeta
Rule: "MAJORITY Admins"
LifecycleEndorsement:
Type: ImplicitMeta
Rule: "ANY Endorsement"
Endorsement:
Type: ImplicitMeta
Rule: "ANY Endorsement"
# Capabilities 配置描述应用层级的能力需求,这里直接引用
# 前面 Capabilities 配置段中的 ApplicationCapabilities 配置项
Capabilities:
<<: *ApplicationCapabilities
Profiles / 配置入口
Profiles 配置段用来定义用于 configtxgen 工具的配置入口。包含委员会(consortium)的配置入口可以用来生成排序节点的创世区块。如果在排序节点的创世区块中正确定义了 consortium 的成员,那么可以仅使用机构成员名称和委员会的名称来生成通道创建请求。
Profiles:
# SampleInsecureSolo 定义了一个使用 Solo 排序节点的简单配置
SampleInsecureSolo:
<<: *ChannelDefaults
Orderer:
<<: *OrdererDefaults
Organizations:
- *ExampleCom
Capabilities:
<<: *OrdererCapabilities
Application:
<<: *ApplicationDefaults
Organizations:
- *ExampleCom
Capabilities:
<<: *ApplicationCapabilities
Policies:
Readers:
Type: ImplicitMeta
Rule: ANY Readers
Writers:
Type: ImplicitMeta
Rule: ANY Writers
Admins:
Type: ImplicitMeta
Rule: MAJORITY Admins
LifecycleEndorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
Endorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
Consortiums:
SampleConsortium:
Organizations:
- *Org1ExampleCom
- *Org2ExampleCom
# SampleInsecureKafka 定义了一个使用 Kfaka 排序节点的配置
SampleInsecureKafka:
<<: *ChannelDefaults
Orderer:
<<: *OrdererDefaults
OrdererType: kafka
Addresses:
- orderer0.example.com:7050
- orderer1.example.com:7050
- orderer2.example.com:7050
Organizations:
- *ExampleCom
Capabilities:
<<: *OrdererCapabilities
Application:
<<: *ApplicationDefaults
Organizations:
- *ExampleCom
Capabilities:
<<: *ApplicationCapabilities
Policies:
Readers:
Type: ImplicitMeta
Rule: ANY Readers
Writers:
Type: ImplicitMeta
Rule: ANY Writers
Admins:
Type: ImplicitMeta
Rule: MAJORITY Admins
LifecycleEndorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
Endorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
Consortiums:
SampleConsortium:
Organizations:
- *ExampleCom
- *Org1ExampleCom
- *Org2ExampleCom
# SampleSingleMSPSolo 定义了一个使用 Solo 排序节点、包含单一 MSP 的配置
SampleSingleMSPSolo:
Orderer:
<<: *OrdererDefaults
Organizations:
- *ExampleCom
Capabilities:
<<: *OrdererCapabilities
Application:
<<: *ApplicationDefaults
Organizations:
- *ExampleCom
Capabilities:
<<: *ApplicationCapabilities
Policies:
Readers:
Type: ImplicitMeta
Rule: ANY Readers
Writers:
Type: ImplicitMeta
Rule: ANY Writers
Admins:
Type: ImplicitMeta
Rule: MAJORITY Admins
LifecycleEndorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
Endorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
Consortiums:
SampleConsortium:
Organizations:
- *ExampleCom
- *Org1ExampleCom
- *Org2ExampleCom
# SampleEmptyInsecureChannel 定义了一个不包含成员与访问控制策略的通道
SampleEmptyInsecureChannel:
Capabilities:
<<: *ChannelCapabilities
Consortium: SampleConsortium
Application:
Organizations:
- *ExampleCom
Capabilities:
<<: *ApplicationCapabilities
Policies:
Readers:
Type: ImplicitMeta
Rule: ANY Readers
Writers:
Type: ImplicitMeta
Rule: ANY Writers
Admins:
Type: ImplicitMeta
Rule: MAJORITY Admins
LifecycleEndorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
Endorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
# SysTestChannel 定义了一个用于测试的通道
SysTestChannel:
<<: *ChannelDefaults
Capabilities:
<<: *ChannelCapabilities
Consortium: SampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1ExampleCom
- *Org2ExampleCom
Capabilities:
<<: *ApplicationCapabilities
Policies:
Readers:
Type: ImplicitMeta
Rule: ANY Readers
Writers:
Type: ImplicitMeta
Rule: ANY Writers
Admins:
Type: ImplicitMeta
Rule: MAJORITY Admins
LifecycleEndorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
Endorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
# SampleSingleMSPChannel 定义了一个仅包含单一成员机构的通道。# 该配置通常与 SampleSingleMSPSolo 或 SampleSingleMSPKafka 同时使用
SampleSingleMSPChannel:
<<: *ChannelDefaults
Capabilities:
<<: *ChannelCapabilities
Consortium: SampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1ExampleCom
- *Org2ExampleCom
Capabilities:
<<: *ApplicationCapabilities
Policies:
Readers:
Type: ImplicitMeta
Rule: ANY Readers
Writers:
Type: ImplicitMeta
Rule: ANY Writers
Admins:
Type: ImplicitMeta
Rule: MAJORITY Admins
LifecycleEndorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
Endorsement:
Type: ImplicitMeta
Rule: ANY Endorsement
汇智网原创,转载请标明出处。