peer channel create解析

目的

  1. peer channel create命令如何进行操作,以及操作选项
  2. peer channel create命令的内部逻辑流程分析(不涉及到远程orderer执行)

简介

peer channel create 是用于创建通道的命令,该命令首先构造一个common.Evelope的消息包,然后发送给orderer,由orderer完成通道的创建。而create构造消息的过程依赖于通道配置文件channel.tx,channel.tx的生成依赖于configtx.yaml。我们用一张图来展示整个流程的大致步骤:

那么创建通过命令执行后做了哪些事情?

  1. 创建了基于通道名称对应的通道
  2. 配置了通道上的锚节点?(虽然配置文件当中包含,但是待进一步确认

命令分析

命令选项

查看fabric文档Commands Reference部分,peer channel create的命令行选项如下:

参数名 含义
-o 连接的orderer的地址,hostname:port
-c channel的名称,默认为mychannel
-f 配置的交易信息(暂时还没搞清楚)
–tls 和orderer通信时是否启用tls
–cafile 使用tls时,所使用的orderer的证书

操作样例

我们以fabric/example/e2e_cli为例,在e2e_cli目录下中script/script.sh文件,createChannel函数中,创建channel语句为:

peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt

其中的变量含义如下:

变量名 含义
$CHANNEL_NAME 采用的是默认,为mychannel
$CORE_PEER_TLS_ENABLED /e2e_cli/base/peer-base.yaml中定义的环境变量,为true
- CORE_PEER_TLS_ENABLED=true
$ORDERER_CA orderer的证书
ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
目录在e2e_cli/crypto-config目录下

该命令执行过程:

  1. 发送消息,创建了channel,名字为$CHANNEL_NAME
  2. 获取创世区块,并且用protobuf进行序列化,本地生成了一个文件$CHANNEL_NAME.block

我们查fabric/protos/orderer/ab.ptoro当中rpc接口的定义描述。

service AtomicBroadcast {// broadcast receives a reply of Acknowledgement for each common.Envelope in order, indicating success or type of failurerpc Broadcast(stream common.Envelope) returns (stream BroadcastResponse) {}// deliver first requires an Envelope of type DELIVER_SEEK_INFO with Payload data as a mashaled SeekInfo message, then a stream of block replies is received.rpc Deliver(stream common.Envelope) returns (stream DeliverResponse) {}
}

update操作调用的是Broadcast接口,我们看到发送的数据类型是common.Envelope。那common.Envelope包含哪些内容呢?

我们从代码中分析,构造的消息类型是common.Envelope,而构造该消息的信息来自channel.tx,那我们继续追踪common.Evelope的构造过程,以及channel.tx如如何生成的。

源码分析

common.Envelope消息构造

fabric/peer/channel/create.go当中,我们顺着 createCmd函数进行分析createCmd -> create -> executeCreate -> sendCreateChainTransaction -> createChannelFromConfigTx/sanityCheckAndSignConfigTx;

再分析sanityCheckAndSignConfigTx函数sanityCheckAndSignConfigTx -> CreateSignedEnvelope,CreateSignedEnvelope即为整个功能的核心,包含了构造消息的过程,再结合代码上下文,得出以下数据构造流程图:

channel.tx文件的生成和查看

channel.tx文件生成

我们以example/e2e_cli为例,其生成文件的脚本为generateChannelArtifacts.sh

我们找到generateChannelArtifacts函数,该函数当中包含以下生成channel.tx文件的命令:

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

该命令是创建一个通道创建交易数据,执行该命令之后,channel.tx生成。

其中的变量的含义如下:

变量 含义
$CONFIGTXGEN 即configtxgen
$CHANNEL_NAME 通道名称

configtxgen依赖于configtx.yaml,而上面命令在生成channel.tx时是读取configtx.yaml的TwoOrgsChannel配置项。我们来看下TwoOrgsChannel相关的配置包含了一致性算法类型,所包含的组织

    TwoOrgsChannel:Consortium: SampleConsortiumApplication:<<: *ApplicationDefaultsOrganizations:- *Org1- *Org2

Org1和Org2的配置包含组织名称、ID、MSP目录、锚节点信息,详细如下:

- &Org1# DefaultOrg defines the organization which is used in the sampleconfig# of the fabric.git development environmentName: Org1MSP# ID to load the MSP definition asID: Org1MSPMSPDir: crypto-config/peerOrganizations/org1.example.com/mspAnchorPeers:# AnchorPeers defines the location of peers which can be used# for cross org gossip communication.  Note, this value is only# encoded in the genesis block in the Application section context- Host: peer0.org1.example.comPort: 7051- &Org2# DefaultOrg defines the organization which is used in the sampleconfig# of the fabric.git development environmentName: Org2MSP# ID to load the MSP definition asID: Org2MSPMSPDir: crypto-config/peerOrganizations/org2.example.com/mspAnchorPeers:# AnchorPeers defines the location of peers which can be used# for cross org gossip communication.  Note, this value is only# encoded in the genesis block in the Application section context- Host: peer0.org2.example.comPort: 7051

ApplicationDefaults的配置:

Application: &ApplicationDefaults# Organizations is the list of orgs which are defined as participants on# the application side of the networkOrganizations:

关于yaml的语法,可以参考阮一峰的科普教程YAML 语言教程。

总结一下:

channel.t是configtxgen通过根据配置文件configtx.yaml生成的,channel.tx大致包含以下信息:

  1. 通道名称
  2. 通道当中的组织
  3. 组织的锚节点

channel.tx文件查看

channel.tx实际上是经过序列化的protobuf数据,为了方便查看,可以转换成json格式;configtxgen也提供查看的命令。

可以通过工具configtxgen查看json格式数据

configtxgen -inspectChannelCreateTx channel.tx

问题

orderer.example.com域名是如何解析的?

我们注意到,在channel.tx文件生成小结中,peer channel create命令连接了orderer服务地址(orderer.example.com:7050):

peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt

该orderer服务地址是通过域名来表示的,在fabric整个网络中是通过什么实现的呢?

查看资料我们了解到,docker-compose本身就支持通过servicename进行访问,因此可以通过这种方式访问。

参考:Networking in Compose

channel.tx文件分析?

在channel.tx文件查看小节中,channel.tx可以转换成json数据进行查看,json格式含义以及字段含义,实际和configtx.yaml存在什么样的关系?单独一篇进行分分析

参考

  1. Channel Configuration (configtxgen)
  2. Networking in Compose

peer channel create解析相关推荐

  1. 区块链教程Fabric1.0源代码分析Peer peer channel命令及子命令实现

    区块链教程Fabric1.0源代码分析Peer peer channel命令及子命令实现,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实 ...

  2. Fabric 1.0源代码分析(33) Peer #peer channel命令及子命令实现

    # Fabric 1.0源代码笔记 之 Peer #peer channel命令及子命令实现 ## 1.peer channel create子命令实现(创建通道) ### 1.1.初始化Ordere ...

  3. Unity 之 ShaderGraph Channel节点解析汇总

    Unity 之 ShaderGraph Channel节点解析汇总 一,Split 拆分节点 1.1 属性说明 1.2 示例演示 二,Combine 结合节点 2.1 属性说明 2.2 示例演示 三, ...

  4. channel的解析和配置方法

    RMAN channel是指RMAN和数据库server session的连接.RMAN本身不会做备份还原操作,当我们连接RMAN的时候,RMAN会在目标数据库上分配server sessions.c ...

  5. Fabric核心模块之Peer解析

    主要讲Fabric核心模块中Peer Peer模块命令 peer模块是Fabric中最重要的模块,也是在Fabric系统使用最多的模块.peer模块在Fabric中被称为主节点模块,主要负责存储区块链 ...

  6. 兄弟连区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令一

    区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初 ...

  7. 阿里云多机部署Fabric 1order节点多个peer节点

    多机部署需要有N个固定的IP服务器地址,把order节点和peer节点放在不同的服务器上,如图所示 1.首先,更改配置文件crypto-config.yaml OrdererOrgs:- Name: ...

  8. fabric 启动peer_Hyperledger Fabric Peer 常用命令总结

    Peer 常用命令:#peer chaincode --help #peer channel list --help --logging-level #:debug,info,notice,warni ...

  9. Hyperledger Fabric 二进制安装部署 Peer 节点

    Hyperledger Fabric 二进制安装部署 Peer 节点 规划网络拓扑 3 个 orderer 节点; 组织 org1 , org1 下有两个 peer 节点, peer0 和 peer1 ...

  10. channel的配置、链码的安装和实例化。

    https://hyperledger-fabric.readthedocs.io/zh_CN/release-1.4/build_network.html (1)进入basic-network目录, ...

最新文章

  1. 平均获客成本_获客成本创新高,英语流利说(LAIX.US)获客难流利
  2. java链式编程_Java 链式编程 和 lombok 实现链式编程
  3. php超星查课接口,这是一个可以查询超星课程的接口,请教一下该怎么用啊
  4. 后怎么恢复_爬山后小腿肌肉酸痛怎么办 ?这样来恢复!|新生活公社
  5. 多个小int的乘法小心溢出哦(记洛谷P1615题WA的经历,Java语言描述)
  6. MiniFrameworkPHP开源框架
  7. ControllerChannelManager分析
  8. jQuery Validate 表单验证插件----在class属性中添加校验规则进行简单的校验
  9. 使用Python在ArcGIS中编程杂谈
  10. GIS + 现代农业”,将会擦出怎样的火花?——智慧农业专题论坛侧记
  11. Source Insight4.0的在整个工程中查找内容
  12. java开源魂斗罗源代码_C++魂斗罗源代码
  13. 快搜新爬虫研发的曲折之路,十年磨一剑
  14. unity Layer CullingMask
  15. 二硬脂酰磷脂酰乙醇胺-聚乙二醇-巯基吡啶 DSPE-PEG-OPSS;常用于脂质体的合成
  16. Java: 猜拳游戏
  17. visualSVN server的安装和使用
  18. IDEA安装激活一条龙服务
  19. ajax get传递数组参数吗,ajax 传递数组参数
  20. 时隔27年,微软IE浏览器正式退出历史舞台,一个时代的结束

热门文章

  1. t检验(t test)
  2. 萧红_拔剑-浆糊的传说_新浪博客
  3. jboss mysql cluster_jboss之mod_cluster集群
  4. བྱ་དེ་ཁྲུང་ཁྲུང་དཀར་པོ།།--洁白的仙鹤/仓央嘉措情歌--IPA--藏语...
  5. 五一济南酒店数据出炉,做一个酒店管理APP多少钱?
  6. PHP开发安全之近墨者浅谈(转)
  7. DDoS和CC攻击的技术原理区别
  8. LDT面试:实验室开发诊断试剂监管模式(Laboratory Developed Test,LDT)
  9. word文档去掉复制过来的背景颜色
  10. ubuntu安装uTorrent种子下载器