区块链教程Fabric1.0源代码分析配置交易-生成通道配置-兄弟连

简介:

Fabric 1.0源代码笔记 之 configtx(配置交易) #configtxgen(生成通道配置)

1、configtxgen概述

configtxgen,用于生成通道配置,具体有如下三种用法:

  • 生成Orderer服务启动的初始区块(即系统通道的创世区块文件)
        * configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
  • 生成新建应用通道的配置交易(即用于创建应用通道的配置交易文件)
        * configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
  • 生成锚节点配置更新文件
        * configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP

    
configtxgen代码分布在common/configtx/tool目录,目录结构如下:

  • localconfig/config.go,configtx.yaml配置文件相关的结构体及方法。

2、configtx.yaml配置文件示例

Profiles:
    TwoOrgsOrdererGenesis: #Orderer系统通道配置
        Orderer:
            <<: *OrdererDefaults #引用OrdererDefaults并合并到当前
            Organizations: #属于Orderer通道的组织
                - *OrdererOrg 
        Consortiums: #Orderer所服务的联盟列表
            SampleConsortium:
                Organizations:
                    - *Org1
                    - *Org2
    TwoOrgsChannel: #应用通道配置
        Consortium: SampleConsortium #应用通道关联的联盟
        Application: 
            <<: *ApplicationDefaults #引用ApplicationDefaults并合并到当前
            Organizations: #初始加入应用通道的组织
                - *Org1
                - *Org2
Organizations:
    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP # MSP ID
        MSPDir: crypto-config/ordererOrganizations/example.com/msp #MSP相关文件本地路径
    - &Org1
        Name: Org1MSP
        ID: Org1MSP
        MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
        AnchorPeers: #锚节点地址,用于跨组织的Gossip通信
            - Host: peer0.org1.example.com
              Port: 7051
    - &Org2
        Name: Org2MSP
        ID: Org2MSP
        MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
        AnchorPeers: #锚节点地址,用于跨组织的Gossip通信
            - Host: peer0.org2.example.com
              Port: 7051
Orderer: &OrdererDefaults
    OrdererType: solo # Orderer共识插件类型,分solo或kafka
    Addresses:
        - orderer.example.com:7050 #服务地址
    BatchTimeout: 2s #创建批量交易的最大超时,一批交易构成一个块
    BatchSize: #写入区块内的交易个数
        MaxMessageCount: 10 #一批消息的最大个数
        AbsoluteMaxBytes: 98 MB #一批交易的最大字节数,任何时候均不能超过
        PreferredMaxBytes: 512 KB #批量交易的建议字节数
    Kafka:
        Brokers: #Kafka端口
            - 127.0.0.1:9092
    Organizations: #参与维护Orderer的组织,默认空
Application: &ApplicationDefaults
    Organizations: #加入到通道的组织信息,此处为不包括任何组织

配置文件解读:

  • 每个Profile表示某种场景下的通道配置模板,包括Orderer系统通道模板和应用通道模板,其中TwoOrgsOrdererGenesis为系统通道模板,TwoOrgsChannel为应用通道模板。
  • Orderer系统通道模板,包括Orderer和Consortiums,其中Orderer指定系统通道配置,Consortiums为Orderer服务的联盟列表。
  • 应用通道,包括Application和Consortium,其中Application为应用通道的配置,Consortium为应用通道所关联的联盟名称。
        

附:YAML 语言教程
-表示数组,&表示锚点,*表示引用,<<表示合并到当前数据。

3、configtx.yaml配置文件相关的结构体及方法

3.1、configtx.yaml配置文件相关的结构体定义

type TopLevel struct {
    Profiles      map[string]*Profile //通道配置
    Organizations []*Organization //组织
    Application   *Application //应用通道配置
    Orderer       *Orderer //系统通道配置
}

type Profile struct { //通道配置:系统通道配置或应用通道配置
    Consortium  string //应用通道配置中通道所关联的联盟名称
    Application *Application //应用通道配置
    Orderer     *Orderer //系统通道配置
    Consortiums map[string]*Consortium //系统通道配置中Orderer服务的联盟列表
}

type Consortium struct { //联盟,即组织列表
    Organizations []*Organization //组织
}

type Application struct { //应用通道配置,即初始加入通道的组织
    Organizations []*Organization
}

type Organization struct { //组织
    Name           string //组织名称
    ID             string //组织MSP ID
    MSPDir         string //组织MSP文件所在路径
    AdminPrincipal string //管理员身份规则
    AnchorPeers []*AnchorPeer //锚节点列表
}

type AnchorPeer struct { //锚节点,即主机和端口
    Host string
    Port int
}

type Orderer struct { //系统通道配置
    OrdererType   string //共识插件类型
    Addresses     []string //Orderer服务地址
    BatchTimeout  time.Duration //批处理超时
    BatchSize     BatchSize //批处理大小
    Kafka         Kafka //Kafka
    Organizations []*Organization //参与维护Orderer的组织,默认空
    MaxChannels   uint64 //Orderer最大通道数
}

type BatchSize struct { //批处理大小
    MaxMessageCount   uint32 //最大交易数量
    AbsoluteMaxBytes  uint32 //最大字节数
    PreferredMaxBytes uint32 //建议字节数
}

type Kafka struct {
    Brokers []string //Kafka Broker
}
//代码在common/configtx/tool/localconfig/config.go

3.2、configtx.yaml配置文件相关的方法

//获取指定profile的Profile结构
func Load(profile string) *Profile 
//将Profile校验并补充完整
func (p *Profile) completeInitialization(configDir string) 
func translatePaths(configDir string, org *Organization) 
//代码在common/configtx/tool/localconfig/config.go

4、Generator接口及实现

Generator接口定义:

type Generator interface {
    bootstrap.Helper
    ChannelTemplate() configtx.Template //获取用于初始化通道的模板
    GenesisBlockForChannel(channelID string) *cb.Block //用于outputBlock
}
//代码在common/configtx/tool/provisional/provisional.go

未完待续欢迎关注兄弟连区块链教程分享!

相关文章
|
7月前
|
安全 区块链
区块链积分商城系统开发详细指南//需求功能/指南教程/源码流程
Developing a blockchain points mall system involves multiple aspects such as blockchain technology, smart contracts, front-end development, and business logic design. The following is the general process for developing a blockchain points mall system
|
7月前
|
存储 供应链 安全
【区块链】智能交易模式下的数据安全流通模型
【区块链】智能交易模式下的数据安全流通模型
381 1
|
7月前
|
安全 数据挖掘 API
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(下)
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(下)
149 1
|
15天前
|
存储 监控 供应链
区块链如何防止欺诈性交易
区块链如何防止欺诈性交易
|
7月前
|
数据可视化 数据挖掘 区块链
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(上)
《区块链公链数据分析简易速速上手小册》第4章:交易数据分析(2024 最新版)(上)
304 0
|
7月前
|
存储 算法 API
面向企业的区块链教程(一)(2)
面向企业的区块链教程(一)
107 6
|
6月前
|
存储 供应链 安全
区块链技术防止交易被篡改的能力主要依赖于其独特的架构和机制
**区块链技术通过分布式存储、去中心化网络、哈希链接、共识机制及加密算法确保交易防篡改。每个区块含前块哈希,篡改将破坏链式结构;共识机制如PoW、PoS保证交易验证;智能合约增强安全性。多层防护保障数据完整性和安全性,支撑其在多个行业中的应用。**
|
6月前
|
算法 安全 区块链
区块链如何实现交易匿名性
**区块链匿名性摘要:** - 匿名性源于公钥/私钥系统,公钥作地址,私钥验证交易,不透露身份信息。 - Coin Mixing 和 CoinJoining 混合交易,使资金流向难以追踪。 - 匿名币如 Monero、Zcash 使用零知识证明和环签名技术增强匿名。 - 隐身地址和一次性地址增加隐私,公私钥交换确保安全交易而不暴露身份。 - 多层次加密与协议结合,保障区块链交易隐私。
|
6月前
|
供应链 监控 区块链
区块链如何确保供应链交易的透明度
**区块链提升供应链透明度:** 创建不可篡改交易记录,确保数据真实完整;实时监控各个环节,增强状态可见性;追踪产品全生命周期,消费者可追溯源头;共享信息平台减少欺诈,提高协同效率与诚信度。这些机制打造透明、可信的供应链网络。
|
7月前
|
安全 区块链
区块链游戏系统开发步骤需求丨功能逻辑丨规则玩法丨指南教程丨源码详细
Developing blockchain game systems has been a highly anticipated field in recent years. By combining blockchain technology and game mechanics, players can enjoy a brand new gaming experience and higher game credibility.