hyperledger fabric 简析start

2024-06-11 07:18

本文主要是介绍hyperledger fabric 简析start,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

程序入口: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 fabric 简析start的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050500

相关文章

在Eclipse里面启动tomcat服务器出现Server Tomcat v8.0 Server at localhost failed to start.问题

可能的原因是由于在写注解@WebServlet里面的url是出现同名的uri导致tomcat启动失败,或者在配置web.xml部署描述符时出现同名的url-parrtens:

WPF 利用Process.Start()方法启动指定路径下的exe文件并传递参数

简单来说就是实现一个程序A 打开程序B,并且在打开的时候传递一些参数给B,最后在B窗口上显示出参数,这个小功能也是折腾了我半天。现在把我的过程整理记录下来。 1.首先我们得有一个被调用的程序,新建一个简单的WPF程序,命名为:argTest。里面加一个label,用来显示接收到的参数。直接运行该程序如下: 2.新建一个WPF程序用来启动我们的argTest.exe程序,命名为call。添加窗体

GOT和PLT原理简析

GOT(Global Offset Table)和PLT(Procedure Linkage Table)是Linux系统下面ELF格式的可执行文件中,用于定位全局变量和过程的数据信息。以C程序为例,一个程序可能会包含多个文件,可执行文件的生成过程通常由以下几步组成。 1. 编译器把每个.c文件编译成汇编(.s)文件。 2. 汇编器把每个(.s)文件转换为(.o)文件。 3. 链接器把多个.

网络数据包发送之dev_hard_start_xmit

int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,struct netdev_queue *txq){const struct net_device_ops *ops = dev->netdev_ops;int rc = NETDEV_TX_OK;unsigned int skb_len; /*

Android Glide, first start based on loadThumbnail, Kotlin(二)

Android Glide, first start based on loadThumbnail, Kotlin(二)   Android Glide, first start based on loadThumbnail, Kotlin(一)中有个小问题,通过loadThumbnail()采集到的缩略图真的就是整张图片的完整缩略图,直接放在正方形小格子里面,明显看到左右或者上下有空隙,因此

破除“数据孤岛”新策略:Data Fabric(数据编织)和逻辑数据平台

今天,我们已经进入到一个数据爆发的时代,仅 2022 年,我国数据产量就高达 8.1ZB,同比增长 22.7%,数据产量位居世界第二。数据作为新型生产资料,是企业数智化运营的基础,已快速融入到生产、分配、流通、开发、应用、服务等各环节之中,深刻改变着企业的生产方式、管理方式和经营模式。通过数据驱动,能够帮助企业不断提高业务决策效率和质量,适应快速变化的商业环境,构建新质生产力。 然而,伴随数据产

简析:分账系统

分账系统是一种基于银行或三方支付机构备付金账户,用于实现资金分配和结算的关键工具。它能够对交易过程中的资金进行准确的分配,确保每个参与者/合作伙伴按照规定的比例获得其应得的收益。本文将初步探讨分账系统的定义、功能、应用领域以及其在商业和金融行业中的重要性。 分账系统的定义 分账系统是一种用于将交易过程中的资金按照双方或者多方约定或规则进行分配的软件或工具。它能够跟踪交易流程中的资金流动,并根据

HTML5 Canvas与Fabric.js画自定义六边形

需求:canvas画布上画六边形 使用HTML5 Canvas原生方法是对context(代表整个画布位图的对象)进行操作,而使用Fabric.js,我们是对对象操作,只需要去实例化对象,设置对象的属性,然后将它们添加到canvas中。 参考文章 一、HTML5 Canvas onMounted(()=>{ //组件加载后绘制六角格形状if (hexCanvas.value) {drawHe

GCD简析(同步、异步、串行、并行)

/* * *需求规定:四个耗时任务A、B、C、D,要求先执行A,A执行完毕后才能开始B和C,但是B和C没有先后顺序,即并发执行,但是必须B和C都结束以后才能执行D。 *因为四个任务都是耗时任务,所以必须放入子线程中才行,否则会导致线程阻塞,又B和C并发执行,所以B和C是异步并发执行的任务。下面是具体代码。 */ //对任务A创建一个SERIAL队列,即同时只执行一个任务dispatch

解决centos使用parted命令分区出现的警告Partition 1 does not start on physical sector boundary

问题描述 最近因为工作需要,需把申请的Linux服务器大容量磁盘分区并挂载,在实施的过程中遇到了这样一个问题:使用parted命令分区完毕后,使用fdisk –l 命令查看磁盘分区情况,发现有一条警告信息(Partition 1 does not start on physical sector boundary.)大致意思是:分区1不是从物理扇区的边界开始的。如图所示: 查了好多资料都说