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

相关文章

GNSS CTS GNSS Start and Location Flow of Android15

目录 1. 本文概述2.CTS 测试3.Gnss Flow3.1 Gnss Start Flow3.2 Gnss Location Output Flow 1. 本文概述 本来是为了做Android 14 Gnss CTS 的相关环境的搭建和测试,然后在测试中遇到了一些问题,去寻找CTS源码(/cts/tests/tests/location/src/android/locat

Oracle Start With关键字

Oracle Start With关键字 前言 旨在记录一些Oracle使用中遇到的各种各样的问题. 同时希望能帮到和我遇到同样问题的人. Start With (树查询) 问题描述: 在数据库中, 有一种比较常见得 设计模式, 层级结构 设计模式, 具体到 Oracle table中, 字段特点如下: ID, DSC, PID; 三个字段, 分别表示 当前标识的 ID(主键), DSC 当

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

ElasticSearch底层原理简析

1.ElasticSearch简述 ElastiaSearch(以下简称ES)是一个基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,支持RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。ES设计用于云计算中,能够进行实时搜索,支持PB级搜索,具有稳定,可靠,快速,安装使用方便等

Oracle start with connect BY 死循环

解决办法 检查start with前有没有where条件, 如果有的话,套一层select,再 Oracle start with connect BY

MemSQL Start[c]UP 2.0 - Round 1A(构造)

题目链接:http://codeforces.com/problemset/problem/452/A 解题思路: 打个表暴力查找匹配。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <strin

Aloudata AIR :国内首个 Data Fabric 逻辑数据平台

AIR 的寓意是“极致轻盈的数据交付”:A - Adaptive 自适应,I - Integration 集成,R - Resilience 弹性 News:Aloudata AIR 发布 作为国内首个 Data Fabric 逻辑数据平台,Aloudata AIR 通过自研的数据虚拟化技术,轻松实现多源异构数据的集成整合和自适应加速,为 Data Fabric 数据架构理念在国内的实践落地开辟

matter中的Fabric(网络结构)

什么是Fabric? Fabric可以被理解为一组相互信任的设备和控制器,它们共享一个共同的信任域。这意味着在同一个Fabric中的设备和控制器之间可以进行安全的通信,而无需额外的身份验证或安全检查。每个Fabric有一个唯一的标识,确保Fabric之间是隔离的,防止权限混乱。一个Matter Fabric就是一个Matter网络,一个Matter Fabric中的所有节点共享同一个根证书,所以

QT教程:start()和startTimer()的区别

start() - QTimer 类的成员函数         start() 是 QTimer 类的成员函数,用于启动一个基于 QTimer 对象的定时器。QTimer 是 Qt 中常用的定时器类,它会在设定的时间间隔后发出 timeout() 信号。 用法 QTimer timer;timer.start(1000); // 每隔 1000 毫秒触发一次 timeout() 信号

【Android studio】 unable to start the daemon process

这几天在做一个安卓桌面项目时,突然发现android studio 不能用了。 提示: 网上的一些方法,要不就是: 1、删除C:\Users\<username>\.gradle 文件夹 2、File Menu - > Invalidate Caches/ Restart->Invalidate and Restart 3、C:\Users\<us