Hyperledger Fabric继peer启动之后的源码解析一

Hyperledger Fabric 链码启动过程实现 注:本文最早发表于 2017-09-22. 简介 这里讲的 Chaincode 是用户链码(User Chaincode,UCC),对应用开发者来说十分重要,它提供了基于区块链分布式账本的状态处理逻辑,基于它可以开发出多种复杂的应用。 Hyperledger Fabric 中,Chaincode 默认运行在 Docker 容器中。Peer 通过调用 Docker 阅读详情

对图中peer节点启动之后的peer address 172.17.0.3:7051灰色部分的的代码提取分析,7051:peer gRPC 服务监听端口。下面是Hyperledger中相关监听的服务端口

默认包括:以下监听的服务端口对应hyperledger0.6版本,与其他版本无关。

7050: REST 服务端口

7051:peer gRPC 服务监听端口

7052:peer CLI 端口

7053:peer 事件服务端口

7054:eCAP7055:eCAA

7056:tCAP

7057:tCAA

7058:tlsCAP

7059:tlsCAA

图中的CacheConfiguration()这个函数到底做了什么?请看下面

// CacheConfiguration计算和缓存经常使用的常量且计算常量做为包变量,按照惯例前面的全局变量

// 已经被嵌入在这里为了保留原始的抽象状态
func CacheConfiguration() (err error) {
    // getLocalAddress 返回正在操作的本地peer的address:port,受到env:peer.addressAutoDetect的影响
    getLocalAddress := func() (peerAddress string, err error) {
        if viper.GetBool("peer.addressAutoDetect") {
            // 需要从peer.address设置中获取端口号,并将其添加到已经确定的主机ip后
            _, port, err := net.SplitHostPort(viper.GetString("peer.address"))
            if err != nil {
                err = fmt.Errorf("Error auto detecting Peer's address: %s", err)
                return "", err
            }
            peerAddress = net.JoinHostPort(GetLocalIP(), port)
            peerLogger.Infof("Auto detected peer address: %s", peerAddress)
        } else {
            peerAddress = viper.GetString("peer.address")
        }
        return
    }

    // getPeerEndpoint 对于这个Peer实例来说,返回PeerEndpoint,受到env:peer.addressAutoDetect的影响
    getPeerEndpoint := func() (*pb.PeerEndpoint, error) {
        var peerAddress string
        var peerType pb.PeerEndpoint_Type
        peerAddress, err := getLocalAddress()
        if err != nil {
            return nil, err
        }
        if viper.GetBool("peer.validator.enabled") {
            peerType = pb.PeerEndpoint_VALIDATOR
        } else {
            peerType = pb.PeerEndpoint_NON_VALIDATOR
        }
        return &pb.PeerEndpoint{ID: &pb.PeerID{Name: viper.GetString("peer.id")}, Address: peerAddress, Type: peerType}, nil
    }

    localAddress, localAddressError = getLocalAddress()
    peerEndpoint, peerEndpointError = getPeerEndpoint()

    syncStateSnapshotChannelSize = viper.GetInt("peer.sync.state.snapshot.channelSize")
    syncStateDeltasChannelSize = viper.GetInt("peer.sync.state.deltas.channelSize")
    syncBlocksChannelSize = viper.GetInt("peer.sync.blocks.channelSize")
    validatorEnabled = viper.GetBool("peer.validator.enabled")

    securityEnabled = viper.GetBool("security.enabled")

    configurationCached = true

    if localAddressError != nil {
        return localAddressError
    } else if peerEndpointError != nil {
        return peerEndpointError
    }
    return
}

// cacheConfiguration如果检查失败打一个错误日志
func cacheConfiguration() {
    if err := CacheConfiguration(); err != nil {
        peerLogger.Errorf("Execution continues after CacheConfiguration() failure : %s", err)
    }
}
// GetPeerEndpoint 从缓存配置中返回peerEndpoint
func GetPeerEndpoint() (*pb.PeerEndpoint, error) {
    if !configurationCached {
        cacheConfiguration()
    }
    return peerEndpoint, peerEndpointError
}

// cacheConfiguration如果检查失败打一个错误日志
func cacheConfiguration() {
    if err := CacheConfiguration(); err != nil {
        peerLogger.Errorf("Execution continues after CacheConfiguration() failure : %s", err)
    }


ESP32S3编译micropython固件 编译ESP32芯片的micropython固件 阅读详情

相关推荐

使用嘉立创绘制STM32F103T8C6最小系统板

使用嘉立创EDA绘制一个属于自己的STM32最小系统板

weixin_67887035的博客 1万+

Linux网络设置

ifconfig 查看所有活动的网络接口信息 ifconfig 网络接口 hostname 查看主机名称 hostname [主机名] (修改主机名称) bash route 查看路由表条目 route -n (将路由记录中的地址信息显示为数字形式) netstat 查看网络连接情况 netstat [选项] 通过netstat命令可以查看当前操作系统的网络连接状态、路由表、接口统计等信息,它是了解网络状态及排除网络服务故障的有效工具。 -a:显示主机中所有活动的网络连接信息(包括

MIsaka的博客 593

总结-NuerIPS2023-Direct Preference Optimization:Your Language Model is Secretly a Reward Model

对比PPO,DPO的泛化能力更强。

m0_60361484的博客 1608

Qt中网络编程(网络接口,TCP,UDP)

网络接口信息获取 QNetwork提供QHostInfo类提供的静态函数,进行主机名的查找,使用OS提供的查找机制获取一个与主机名关联的IP地址或者获取一个IP地址关联的主机名 QHostInfo中的静态函数fromName(会阻塞并返回QHostInfo一个对象,这个对象的address函数可以获取其主机的IP地址列表)与lookupHost(异步获取,每找到主机就会发送信号)可以进行主机信

lovebird_27的专栏 2万+

FPGA实战笔记——SDRAM乒乓缓存与OV5640视频采集(VGA显示优化篇)

本文详细介绍了基于FPGA的SDRAM乒乓缓存技术在OV5640视频采集与VGA显示优化中的应用。通过设计多时钟域同步和双Bank乒乓缓存策略,有效解决了摄像头30fps输出与VGA 60fps显示之间的帧率不匹配问题,实现了720P高清视频的流畅稳定显示,为实时图像处理系统提供了可靠的硬件解决方案。

ss78901的博客 884

实战指南:基于Windows Server构建企业级AAA认证体系

本文详细介绍了如何在Windows Server环境下构建企业级AAA认证体系,涵盖AD域服务部署、NPS服务器配置及华为设备对接实战。通过整合Radius协议与AD域账号管理,实现网络设备的统一认证与权限控制,提升企业IT安全管理效率。特别适用于需要零成本实现AAA认证的中大型企业。

weixin_28304023的博客 422

QT基础知识-通信(第四天)

1,Linux通信流程简介 服务器端:创建socket(监听套接字),绑定bind,服务器端监听listen,接受accept(通信套接字)。 客户端:创建socket,连接connect 2,Qt中的通信机制 ...

一个小孩 1666

4.4 线上vs离线:使用 Langfuse 实现智能体的全方位无死角评估

本文介绍了如何利用Langfuse工具实现AI智能体的全方位评估,包括线上和离线两种评估方式。线上评估通过收集用户实时反馈(如点赞/点踩)来监控真实表现,而离线评估则通过创建标准化数据集进行批量测试和自动评分。文章详细演示了如何为"旅小智"AI应用添加反馈功能、创建评估数据集,并利用Langfuse SDK进行自动化评估和分析。通过这两种评估方式的结合,开发者可以建立数据驱动的AI质量保障体系,实现持续优化和版本迭代。

yonggeit的博客 3312

Linux 网络设置————超详细,看了肯定会!!!!

前言查看及测试网络查看指定的网络接口信息查看主机名称查看路由表条目查看网络连接情况测试网络连接测试 DNS 域名解析设置网络地址参数使用网络配置命令禁用、激活网络接口为网卡绑定虚拟接口添加、删除默认网关记录修改主机的名称修改网络配置文件启用、禁用网络接口配置主机名称配置文件域名解析配置文件本地主机映射文件 查看及测试网络配置是管理 Linux 网络服务的第一步,本节将学习 Linux 操作系统中的网络查看及测试命令。其中讲解的大多数命令以普通用户权限就可以完成操作,但普通用户在执行/sbin/目录中的命令时

著名艺术家 4013

热力学仿真软件:Fluent_(8).材料属性设置

在 Fluent 中,材料属性主要包括密度、比热容、导热系数、黏度等物理性质。这些属性在不同的仿真场景中有着不同的作用,例如在流体仿真中,密度和黏度是必不可少的;在传热仿真中,导热系数和比热容是主要考虑的因素。如果所需的材料不在材料库中,或者需要对现有材料进行修改,用户可以自定义材料属性。在主菜单中选择Materials。点击打开材料编辑器。在材料编辑器中,点击Create按钮,输入新的材料名称。选择材料类型(如FluidSolid等)。在属性栏中填写所需的材料属性。

kkchenjj的博客 1494

OpenDataLab 大模型训练数据集下载记录

大模型 训练数据集

u013558123的博客 3347

fabric 启动peer_fabric网络环境启动过程详解

作者:Tiny熊来源:区块链兄弟原文链接:http://t.cn/ELoD2h2本文约1700字+,阅读(观看)需要10分钟著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。这篇文章对fabric的网络环境启动过程进行讲解,也就是我们上节讲到的启动测试fabric网络环境时运行network_setup.sh这个文件的执行流程fabric网络环境启动过程详解上一节我们讲到 fab...

weixin_39865440的博客 383

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Hyperledger Fabric继peer启动之后的源码解析二

如图所示,我们要分析的是registering BLOCK,registering CHAINCODE,registering REJECTION和registering REGISTER的整个过程 下图是代码流程图 func createEventHubServer() (net.Listener, *grpc.Server, error) {     v

Hacker的博客 1222

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Hyperledger Fabric继peer启动之后的源码解析三

我们都知道,Hyperledger用的数据库是rocksDB,如果你不做修改的话,数据会存储在/var/hyperledger/production/db目录下。 现在我们来分析一下图中灰色部分的相关代码。 代码结构图如下 // 启动数据库, 初始化openchainDB实例并打开数据库.注意该方法不能保证正确行为的并发调用 func Start() {     opencha

Hacker的博客 2335

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mousetrap 机制深度解析:Hyperledger Fabric 的 peer 命令如何识别 Windows 双击启动并引导用户

在 Windows 上双击一个命令行工具的可执行文件,几乎不会得到想要的结果——程序往往打印一段帮助信息后瞬间退出,普通用户只会看到一个"闪过的黑窗口"。`mousetrap` 就是为解决这一痛点而生的微型库:它只回答一个问题——"当前进程是否是被用户在资源管理器中双击启动的"。Hyperledger Fabric 仓库以间接依赖的形式引入了 mousetrap v1.1.0(见 [go.mod]

gitblog_01088的博客 1084

Hyperledger Fabric Peer 节点部署实战指南:从证书、存储到 core.yaml 配置与启动排障

本文是一份基于 Hyperledger Fabric 官方部署文档([docs/source/deploypeer/peerdeploy.md](https://link.gitcode.com/i/4d133560fc54cbe48cf9b5866e6a778d))整理而成的 Peer 节点部署指南,覆盖二进制与配置文件的获取、证书与存储等前置条件、`core.yaml` 关键参数配置、`pee

gitblog_01424的博客 726

Hyperledger fabric 源码分析之 peer 服务启动过程

peer 服务是主服务。 该服务支持各种 peer 命令。 包括查询状态,和启动、停止节点服务等。 serve 函数 最重要的是 func serve(args []string) error 函数。 当执行 peer node start 命令时候被调用,启动一个节点服务。 首先是进行配置管理,根据配置信息和一些计算来构建 cache 结构,探测节点信息等。

yeasy的专栏 1万+

Hyperledger Fabric peer node 命令完全指南:启动、暂停恢复、账本重置回滚与数据库维护

`peer node` 是 Hyperledger Fabric 管理员对 Peer 节点进行生命周期与账本维护的核心命令集合,涵盖节点启动、通道暂停/恢复、账本重置/回滚、数据库重建与格式升级、通道退出等操作。本文以 `docs/source/commands/peernode.md` 为主体,结合本仓库 `internal/peer/node/` 下的源码实现,逐条讲解每个子命令的用途、参数、

gitblog_00462的博客 696

Hyperledger Fabric从源码分析链码容器启动过程

链码容器启动过程 每个实例化之后的链码都会以容器的形式启动起来,下面举一个byfn.sh启动的例子: $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS

pigff的博客 2054

hyperledger-fabric1.1 单机多点部署(3)-部署peer0.org1节点

有了Orderer排序服务启动文件,还需要专门为Peer节点所准备的docker-peer.yaml启动文件。 docker-peer.yaml内部源码如下 version: "2" service: couchdb: container_name: couchdb image: hyperledger/fabric-couchdb # Comment/...

tank_ft的博客 948

Fabric.Peer源码分析

Fabric.Peer源码分析 这部分,主要分析链码安装到实例化(启动容器)的过程。操作链码是通过peer chaincode命令进行的,这就是我们所谓的一个命令行的客户端,通过它我们就可以和fabric交互,注意peer node start启动的peer服务,即启动一个peer节点。 以下是从e2e_cli/scripts/scripts.sh提取的安装、实例化链码的命令,注意该命令前,要先完...

longtails的博客 966

Hyperledger Fabric从源码分析账本

参考资料: 官方文档——账本关键概念 Fabric源码分析之九数据库存储源码分析leveldb fabric源码解析5——kvledger初始化 文章目录什么是账本?世界状态区块链命名空间源码分析idStorehistorydbProviderledgerStoreProvidervdbProvider账本存储目录结构 什么是账本? Fabric 中的账本存储了有关业务对象的重要事实信息,既包括了对象属性当前的值,也包括产生这些当前值的交易的历史。这两个概念可以用下面的术语来概括,即账本包括

pigff的博客 1340

Hyperledger Fabric 服务发现(Service Discovery)完全指南:原理、配置与 discover CLI 实战

Hyperledger Fabric 是面向企业的许可制分布式账本框架,其**服务发现(Service Discovery)**模块负责在去中心化网络中同步"哪些 Peer 在线、谁装了链码、背书策略是什么"等关键元数据,是 Fabric Gateway 与客户端应用能够自动完成背书节点选择、交易提交的前提。本文基于当前仓库中的官方文档 [discovery-overview.rst](https

gitblog_00287的博客 1102

Fabric1.4源码解析:Peer节点启动过程

看一下Peer节点的启动过程,通常在Fabric网络中,Peer节点的启动方式有两种,通过Docker容器启动,或者是通过执行命令直接启动。 一般情况下,我们都是执行docker-compose -f docker-*.yaml up命令通过容器启动了Peer节点,而如果直接启动Peer节点则是执行了peer node start这条命令。看起来,这两种方式所使用的命令毫无关系,但事实上,在Doc...

weixin_30832983的博客 450

Hyperledger Fabric 进程模型解析:ifrit 的 Runner、Process 与 grouper 编排机制

ifrit 是 Go 语言的一个小型进程模型库,被 Hyperledger Fabric 作为 vendor 依赖引入,用于在集成测试框架中启动、编排和监控 orderer、peer 以及 CouchDB 等外部进程。本文将围绕 [vendor/github.com/tedsuo/ifrit/README.md](https://link.gitcode.com/i/2d4e777cbed5c66

gitblog_07472的博客 401

Hyperledger Fabric智能合约开发实战:Chaincode容器化部署与gRPC通信原理

Hyperledger Fabric是一个开源的企业级区块链平台,支持智能合约(Chaincode)的开发与部署。Chaincode作为Fabric的核心组件,运行在隔离的容器环境中,并通过gRPC协议与Peer节点通信,确保交易的安全性和可靠性。本文将详细介绍Chaincode的容器化部署流程及gRPC通信原理,帮助开发者快速掌握智能合约开发的关键技术。 ## 一、Chaincode容器化部署

gitblog_00077的博客 766
上一篇: 央行数字货币系统 Demo 明年要推出了,区块链真的要起飞了吗?
下一篇: Hyperledger Fabric继peer启动之后的源码解析二
The_Web3_社区
博客等级 码龄10年 388粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

The_Web3_社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值