OrdererOrgs:
- Name: Orderer
Domain: example.com #域名
EnableNodeOUs: true
Specs:
- Hostname: orderer #hostname+Domain的值组成Orderer节点完整域名
SANS:
- localhostPeerOrgs:
- Name: Org1
Domain: org1.example.com #完整域名:peer0.org1.example.com
EnableNodeOUs: true #在msp下生产config.yaml文件
Template:
Count: 1 #指定节点数量
SANS:
- localhost
Users:
Count: 1 #指定用户数PeerOrgs:
- Name: Org2
Domain: org2.example.com
EnableNodeOUs: true
Template:
Count: 1
SANS:
- localhost
Users:
Count: 1
configtx文件主要用于生成创世区块、创建通道配置交易和创建锚节点更新配置交易(配置交易是Fabric中交易的一种,它可以被order节点解析并用来配置order节点)。
configtx.yaml文件分为几大section:Organizations, Capabilities, Application, Orderer, CHANNEL, Profile。
##################################################################
# Section: Organizations
##################################################################
Organizations: #指定OrdererOrg和PeerOrg的权限信息
- &OrdererOrg
Name: OrdererOrg
ID: OrdererMSP
MSPDir: ../organizations/ordererOrganizations/example.com/msp
Policies:
Readers:
Type: Signature
Rule: "OR('OrdererMSP.member')"
Writers:
Type: Signature
Rule: "OR('OrdererMSP.member')"
Admins:
Type: Signature
Rule: "OR('OrdererMSP.admin')"
OrdererEndpoints:
- orderer.example.com:7050
- &Org1
Name: Org1MSP
ID: Org1MSP
MSPDir: ../organizations/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')"
Endorsement:
Type: Signature
Rule: "OR('Org1MSP.peer')"
- &Org2
Name: Org2MSP
ID: Org2MSP
MSPDir: ../organizations/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')"
Endorsement:
Type: Signature
Rule: "OR('Org2MSP.peer')"##################################################################
# SECTION: Capabilities
#Capabilities配置段,capability直接翻译是能力,这里可以理解为对Fabric网络中组件版本的控制, 通过版本进而控制相应的特性。新更新的特性旧版本的组件不支持, 就可能无法验证或提交transaction从而导致不同版本的节点上有不同的账本,因此使用Capabilities来使不支持特性的旧组件终止处理transaction直到其更新升级Channel表示orderers和peers同时都要满足,Orderer只需要orderers满足,Application只需要peers满足即可。
##################################################################
Capabilities: #指定通道的权限信息
Channel: &ChannelCapabilities
V2_0: true //通道版本号
Orderer: &OrdererCapabilities
V2_0: true //orderer版本
Application: &ApplicationCapabilities
V2_0: true //应用版本
##################################################################
# SECTION: Application 应用程序
#Application配置段用来定义要写入创世区块或配置交易的应用参数。
# Application配置段,一些和应用有关的将会编进创世区块或配置transaction的应用相关的参数,其中 organizations:在此处不进行配置,在后面profiles配置段中,根据需要生成的文件类型进行配置。##################################################################
Application: &ApplicationDefaults #指定初始加入通道的组织
Organizations:
Policies: # 定义本层级的应用控制策略
Readers:
Type: ImplicitMeta
Rule: "ANY Readers"
Writers:
Type: ImplicitMeta
Rule: "ANY Writers"
Admins:
Type: ImplicitMeta
Rule: "MAJORITY Admins"
LifecycleEndorsement:
Type: ImplicitMeta
Rule: "MAJORITY Endorsement"
Endorsement:
Type: ImplicitMeta
Rule: "MAJORITY Endorsement"
Capabilities:
<<: *ApplicationCapabilities
##################################################################
# SECTION: Orderer 排序节点
#Orderer配置段用来定义要编码写入创世区块或通道交易的排序节点参数。
##################################################################
Orderer: &OrdererDefaults #指定Orderer节点的信息
OrdererType: etcdraft //排序算法
Addresses:
- orderer.flight.com:7050 //排序节点地址与端口号
EtcdRaft: //raft共识配置
Consenters:
- Host: orderer.flight.com
Port: 7050
ClientTLSCert: ../organizations/ordererOrganizations/flight.com/orderers/orderer.flight.com/tls/server.crt //客户端TLS认证路径
ServerTLSCert: ../organizations/ordererOrganizations/flight.com/orderers/orderer.flight.com/tls/server.crt //服务器端TLS认证路径
BatchTimeout: 2s //批处理超时时间
BatchSize: //与消息相关的批处理大小
MaxMessageCount: 10 //一个区块最大交易数
AbsoluteMaxBytes: 99 MB //一个区块最大字节数
PreferredMaxBytes: 512 KB //一个区块的建议字节数&#xff08;若超过&#xff0c;放入更大的区块&#xff09;
Organizations:
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: &ChannelDefaults # 定义本层级的通道访问策略
Policies:
Readers: //可以invoke “deliver”API的
Type: ImplicitMeta
Rule: "ANY Readers"
Writers: //可以invoke “broadcast”API的
Type: ImplicitMeta
Rule: "ANY Writers"
Admins: # 默认情况下&#xff0c;谁可以在此配置级别上修改元素
Type: ImplicitMeta
Rule: "MAJORITY Admins"
Capabilities: # Capabilities配置描通道层级的能力需求&#xff0c;这里直接引用
<<: *ChannelCapabilities
##################################################################
# Profile# 自定义配置部分
# profiles配置段相当于configtxgen工具的统一入口&#xff0c;通过设置不同的configtxgen -profile参数决定要使用 configtxgen生成什么文件&#xff0c;profiles配置段通过使用上面准备好的配置段来根据需要配置不同的文件&#xff08;虽然可以显示配置但是最好采用引用默认配置的方式&#xff0c;有封装的意思&#xff09;。
##################################################################
Profiles: //这个部分按照项目角色来更改
TwoOrgsApplicationGenesis: #组织定义标识符,可自定义,命令中的 -profile参数二者要保持一致
<<: *ChannelDefaults # 引用为 ChannelCapabilities 的属性
Orderer: # 配置属性&#xff0c;系统关键字&#xff0c;不能修改
<<: *OrdererDefaults # 引用为 OrdererDefaults 的属性
Organizations:
- *OrdererOrg # 引用为 OrdererOrg 的属性
Capabilities:
<<: *OrdererCapabilities
Consortiums: # 定义了系统中包含的组织
SampleConsortium:
Organizations: # 系统中包含的组织
- *Org1 # 引用了下文包含的配置
- *Org2
TwoOrgsChannel: # 通道定义标识符&#xff0c;可自定义
Consortium: SampleConsortium
<<: *ChannelDefaults
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org2
Capabilities:
<<: *ApplicationCapabilities
configtxgen --help
# 输出创始块区块文件的路径和名字
&#96;-outputBlock string&#96;
# 指定创建的channel的名字, 如果没指定系统会提供一个默认的名字.
&#96;-channelID string&#96;
# 表示输通道文件路径和名字
&#96;-outputCreateChannelTx string&#96;
# 指定配置文件中的节点
&#96;-profile string&#96;
# 更新channel的配置信息
&#96;-outputAnchorPeersUpdate string&#96;
# 指定所属的组织名称
&#96;-asOrg string&#96;
生成创始块文件&#xff0c;其中-profile后面对应的是我们在前面配置文件中所定义的名称&#xff0c;-outputBlock指定生成的创世块文件路径以及名称&#xff0c;-channelID为通道的名称&#xff08;通道的名称随意起&#xff0c;但是注意要与下面生成通道文件时的通道名称不同&#xff09;。使用以下命令在当前目录下的channel-artifacts目录下得到一个文件genesis.block。
configtxgen -profile TwoOrgsApplicationGenesis -outputBlock ./channel-artifacts/genesis.block -channelID fabric-channel
生成通道文件&#xff0c;其中-profile后面对应的是我们在前面配置文件中所定义的名称&#xff0c;-outputBlock指定生成的通道文件路径以及名称&#xff0c;-channelID 为通道的名称。通道的名称随意起&#xff0c;但是注意要与上面生成创世块文件时的通道名称不同&#xff09;。使用以下命令在当前目录下的channel-artifacts目录下得到一个文件channel.tx。
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
生成锚节点更新文件&#xff0c;其中-profile后面对应的是我们在前面配置文件中所定义的名称&#xff0c;-outputBlock指定生成的锚节点文件路径以及名称&#xff0c;-channelID为通道的名称&#xff08;要与上面生成通道文件时的通道名称相同&#xff09;。使用以下命令在当前目录下的channel-artifacts目录下得到一个文件Org1MSPanchors.tx。
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP