hyperledger fabric0.6 简析start
2017-06-28 17:59
387 查看
以下内容皆为个人理解,并未参照任何文章数据,如有理解错误,欢迎指正。
程序入口:peer/main.Go
在main.go中主要有四句重要代码,
![](https://img-blog.csdn.net/20161008144847574?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
peer/version : peer 版本。
node : 涉及本地节点的搭建,以及如何加入到网络,本机IP地址端口号,是VP节点还是NVP节点等。
network
: 远程登录devops服务器,查询所有peer节点。
chaincode
: chaincode三种操作deploy invoke query (通过命令行发送给devops服务器)
接着调用 mainCmd.Execute() 执行命令分发。
比较重要的模块是node,其中start命令负责该节点的初始化流程。
一、node/start
调用serve()函数
1. 调用 CacheConfiguration() 函数设置缓存数据,缓存数据包括该peer的LocalAdress、PeerEndpoint(是VP or NVP)等等
2. 设置服务器地址,创建服务器实例,后续代码会使用lis。
![](https://img-blog.csdn.net/20161008153942656?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3.创建 createEventHubServer 该函数创建事件Hub服务器(创建线程运行),同时为该服务器创建监听实例,调用
RegisterEventsServer 函数将EventHubServer注册到grpcService上。该函数有一部分关于TLS的调用,这里分析先不考虑HTTPS的情况,这并不影响我们分析fabric。
![](https://img-blog.csdn.net/20161008162836189?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4.db.Start() start database 数据库处理模块需单独分析。
5. getSecHelper() 这里不分析安全模块
6. 调用 registerChaincodeSupport() 该函数主要作用是将系统chaincode部署到Docker上,同时根据第一个参数chainname创建ChainCodeSupport
实例,
该实例包括 chaincode路径、超时时间、chainname等数据信息。将得到的ChainCodeSupport实例注册到grpcServer。
![](https://img-blog.csdn.net/20161008165750417?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
值得注意的有两个函数
1)RegisterSysCCs 该函数注册部署系统chaincode,后续我们会分析更常规的部署chaincode(非系统链码)
2) RegisterChaincodeSupportServer 该函数比较重要,该函数向grpcServer注册chainCodeSupport实例,同时传入chainCodeSupport的服务规范。
如图在_ChaincodeSupport_serviceDesc 函数中Streams tag下存在Handler: _ChaincodeSupport_Register_Handler ,在chainCodeSupport实例
注册完成后,会调用_ChaincodeSupport_Register_Handler 函数,该函数会调用chainCodeSupport实例的Register函数,传入参数中有Server与clent
的通信媒介stream,在Register函数中,chainCodeSupport实例会创建一个处理事件的handler,并运行processStream。
总结一下该流程:创建chainCodeSupport实例,并将该实例服务注册到grpcServer,grpcServer为该服务器生成stream,chainCodeSupport实例监控该stream的输入,当有数据输入时调用handler的HandleMessage的数据处理,经过分析判断chainCodeSupport的stream是与docker的chainCode通讯的媒介。
![](https://img-blog.csdn.net/20161008171056792?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
程序入口:peer/main.Go
在main.go中主要有四句重要代码,
peer/version : peer 版本。
node : 涉及本地节点的搭建,以及如何加入到网络,本机IP地址端口号,是VP节点还是NVP节点等。
network
: 远程登录devops服务器,查询所有peer节点。
chaincode
: chaincode三种操作deploy invoke query (通过命令行发送给devops服务器)
接着调用 mainCmd.Execute() 执行命令分发。
比较重要的模块是node,其中start命令负责该节点的初始化流程。
一、node/start
调用serve()函数
1. 调用 CacheConfiguration() 函数设置缓存数据,缓存数据包括该peer的LocalAdress、PeerEndpoint(是VP or NVP)等等
2. 设置服务器地址,创建服务器实例,后续代码会使用lis。
3.创建 createEventHubServer 该函数创建事件Hub服务器(创建线程运行),同时为该服务器创建监听实例,调用
RegisterEventsServer 函数将EventHubServer注册到grpcService上。该函数有一部分关于TLS的调用,这里分析先不考虑HTTPS的情况,这并不影响我们分析fabric。
4.db.Start() start database 数据库处理模块需单独分析。
5. getSecHelper() 这里不分析安全模块
6. 调用 registerChaincodeSupport() 该函数主要作用是将系统chaincode部署到Docker上,同时根据第一个参数chainname创建ChainCodeSupport
实例,
该实例包括 chaincode路径、超时时间、chainname等数据信息。将得到的ChainCodeSupport实例注册到grpcServer。
值得注意的有两个函数
1)RegisterSysCCs 该函数注册部署系统chaincode,后续我们会分析更常规的部署chaincode(非系统链码)
2) RegisterChaincodeSupportServer 该函数比较重要,该函数向grpcServer注册chainCodeSupport实例,同时传入chainCodeSupport的服务规范。
如图在_ChaincodeSupport_serviceDesc 函数中Streams tag下存在Handler: _ChaincodeSupport_Register_Handler ,在chainCodeSupport实例
注册完成后,会调用_ChaincodeSupport_Register_Handler 函数,该函数会调用chainCodeSupport实例的Register函数,传入参数中有Server与clent
的通信媒介stream,在Register函数中,chainCodeSupport实例会创建一个处理事件的handler,并运行processStream。
总结一下该流程:创建chainCodeSupport实例,并将该实例服务注册到grpcServer,grpcServer为该服务器生成stream,chainCodeSupport实例监控该stream的输入,当有数据输入时调用handler的HandleMessage的数据处理,经过分析判断chainCodeSupport的stream是与docker的chainCode通讯的媒介。
相关文章推荐
- hyperledger fabric0.6简析之peer start
- hyperledger fabric 简析start
- hyperledger fabric 简析start
- 002-主流区块链技术特点及Hyperledger Fabric V0.6版本特点
- 在Ubuntu中部署并测试HyperLedger Fabric 0.6
- CentOS上搭建Hyperledger Fabric0.6
- CentOS 7.1上部署Hyperledger/Fabric 0.6
- hyperledger fabric0.6 结构分析(二)
- hyperledger fabric0.6 结构分析(三)
- 二、主流区块链技术特点及Hyperledger Fabric V0.6版本特点
- 在Ubuntu中部署并测试HyperLedger Fabric 0.6
- Hyperledger Fabric 1.0 实例简析 第一课 network_setup.sh分析
- Hyperledger fabric0.6的链码接口整理
- Hyperledger fabric0.6 peer启动过程源码分析
- Hyperledger Fabric 1.0 链码(chaincode)的原理、接口和结构
- Hyperledger Fabric Client SDK for Go 下载与配置
- Hyperledger Fabric V1.0– 开发者快速入门
- Hyperledger Fabric Membership Service Providers (MSP)——成员服务
- hyperledger fabric 1.0.5 分布式部署 (三)
- Hyperledger Fabric Chaincode for Operators——实操智能合约