好的,各位技术同道,欢迎再次光临我的博客。在上一篇文章中,我们聊了如何搭建一个以太坊测试节点,并提到了节点需要同时运行“执行客户端”和“共识客户端”。很多朋友对此表示了浓厚兴趣,想深入了解这两者究竟是什么,它们是如何分工的。

今天,我们就来一场深度解析,彻底搞懂以太坊这对幕后功臣——执行客户端(Execution Client, EL)与共识客户端(Consensus Client, CL)。理解它们的运作方式,是理解后合并时代(Post-Merge)以太坊架构的关键。
在这里插入图片描述

一切的起点:以太坊“合并” (The Merge)

要理解为什么会有两个客户端,我们必须回到以太坊发展史上里程碑式的事件——“合并”。在这里插入图片描述

在2022年9月之前,以太坊采用的是工作量证明 (Proof-of-Work, PoW) 共识机制。在那个时代,一个节点软件(比如大家熟知的Geth)几乎包揽了所有工作:它既要处理交易、运行智能合约,也要通过“挖矿”来创建新区块、达成网络共识。这种单一架构虽然简单,但PoW机制的巨大能耗和性能瓶颈,促使以太坊向更高效、更环保的权益证明 (Proof-of-Stake, PoS) 转型。

“合并”就是这一转型的核心,它将原有的PoW链(执行层)与一条全新的PoS链(信标链,Beacon Chain,即共识层)“合并”在了一起。从此,一个完整的以太坊节点被解耦为两个独立但紧密协作的模块,分别负责“执行”和“共识”。

执行客户端 (EL):以太坊的“大脑”与“状态机”

我们可以将执行客户端想象成以太坊网络的“大脑”和“计算引擎”。它的核心职责是处理一切与“状态”相关的事情。

核心职责
  1. 处理交易与状态转换:这是EL最核心的功能。当用户发送一笔转账或与智能合约交互时,交易被广播到网络中。EL会监听这些交易,验证其有效性(如签名是否正确、格式是否合规),然后将它们放入本地的交易池(Mempool)中。最关键的是,EL内置了以太坊虚拟机 (EVM)。它负责执行交易中的代码,从而更新以太坊的“世界状态”,比如账户余额的增减、智能合约中存储的数据变更等。

  2. 提供面向用户的API:我们日常开发和交互所依赖的接口,几乎都是由EL提供的。当我们使用MetaMask钱包查看余额,或者我们的DApp应用调用web3.js库发送交易时,它们背后都是在与EL的JSON-RPC API进行通信。eth_getBalanceeth_sendRawTransaction这些熟悉的命令,都是EL在为我们服务。

  3. 构建区块“载荷” (Payload):在PoS机制下,EL不再决定何时创建区块,但它负责准备区块的内容。当共识客户端通知它需要一个新的区块时,EL会从交易池中筛选出一批交易,执行它们,然后将这批交易打包成一个“执行载荷 (Execution Payload)”,交给共识客户端。

流行示例
  • Geth (Go Ethereum):最老牌、最主流的客户端,由以太坊基金会用Go语言开发。
  • Nethermind:一个功能强大的.NET客户端,以其性能和企业级功能而闻名。
  • Erigon:一个专注于效率和磁盘优化的Go语言客户端,以其极低的存储占用而受到节点运营商的喜爱。
  • Besu:由ConsenSys开发的企业级Java客户端。

通俗比喻:如果把以太坊节点比作一辆车,执行客户端就是发动机和变速箱。它提供动力(执行交易),管理车辆的内部状态(仪表盘数据),但它自己不决定方向盘怎么打。

共识客户端 (CL):以太坊的“心脏”与“导航员”

共识客户端是PoS机制的守护者,负责维护网络的安全和一致性。我们可以把它看作是以太坊网络的“心脏”和“交通规则的执行者”。在这里插入图片描述

核心职责
  1. 管理权益证明共识:这是CL的全部工作重心。它负责处理信标链(Beacon Chain)上的一切事务,包括跟踪验证者(Validators)、处理他们的质押(Stake)和罚没(Slashing)。
  2. 区块的提议与验证:CL根据PoS协议的规则,为验证者分配任务。在某个时间点(Slot),它会指定一个验证者来提议 (Propose) 一个新区块。其他验证者则需要对这个区块进行证明 (Attest),即投票确认该区块的有效性。
  3. 维护分叉选择规则 (Fork-Choice Rule):网络中可能同时出现多个竞争区块,CL需要通过一个名为LMD-GHOST的算法来决定哪条链才是“权威”的主链。这套规则是保证所有诚实节点最终视图一致的关键。
  4. 网络同步:CL负责与网络中其他共识客户端进行P2P通信,广播和接收新的区块及证明,保持自身与整个网络的同步。
流行示例
  • Prysm:由Prysmatic Labs开发的主流Go语言客户端。
  • Lighthouse:一个性能卓越的Rust语言客户端,非常注重安全和效率。
  • Teku:与Besu师出同门的Java客户端,由ConsenSys开发。
  • Nimbus:一个资源占用极低的Nim语言客户端,非常适合资源受限的设备。

通俗比喻:回到汽车的比喻,共识客户端就是司机和GPS导航系统。它决定何时踩油门(提议区块),遵守交通规则(共识算法),并沿着正确的路线行驶(分叉选择)。

双剑合璧:它们如何协同工作?

EL和CL这两个独立的软件,通过一个名为**引擎API (Engine API)**的本地RPC接口进行通信。这是一个经过身份验证的、高度专用的接口,与我们常用的JSON-RPC API完全不同。

让我们通过一个新区块诞生的全过程来看看它们如何协作:

  1. 分配任务 (CL):CL的信标链协议知道,在当前的Slot,轮到本地节点上的验证者提议一个新区块了。
  2. 请求载荷 (CL -> EL):CL通过引擎API向EL发送请求:“嘿,轮到我了!请给我准备一个区块内容(执行载荷)。”
  3. 构建载荷 (EL):EL收到请求后,立刻从自己的交易池中挑选交易,在EVM中执行它们,生成一个新的世界状态,然后将这批交易打包成一个执行载荷。
  4. 返回载荷 (EL -> CL):EL将打包好的执行载荷通过引擎API返回给CL。
  5. 封装与广播 (CL):CL拿到执行载荷后,将其封装进一个“信标区块”中,附加上所有的共识信息(如提议者签名、最新的证明等),然后将这个完整的、全新的区块广播到整个以太坊网络。

其他节点收到这个新区块后,也会进行类似的反向验证流程,CL和EL再次通过引擎API协作,确保区块在共识和执行层面都完全有效。

为什么采用模块化设计?

这种看似复杂的设计,实际上是以太坊深思熟虑的结果,它带来了巨大的优势:

  • 专注与效率:允许客户端团队专注于特定领域。Geth团队可以全力优化EVM性能,而Lighthouse团队可以深耕PoS共识算法,这大大加快了各自的创新速度。
  • 客户端多样性与网络韧性:这是最重要的优势。如果网络中大部分节点都使用同一种EL客户端(比如Geth),一旦Geth出现严重Bug,整个网络可能陷入瘫痪。但在模块化设计下,用户可以自由组合,比如使用Lighthouse (CL) + Nethermind (EL)。即使Lighthouse出现Bug,只要Nethermind是好的,节点的部分功能依然可用,反之亦然。这种“混合搭配”极大地增强了整个网络的健壮性,避免了单点故障。
  • 灵活性与可升级性:未来如果需要对共识算法进行升级,主要修改的将是CL客户端,EL客户端可能只需少量适配。反之亦然。这使得以太坊未来的升级更加平滑和低风险。

结论

执行客户端(EL)和共识客户端(CL)的二元架构,是后合并时代以太坊的核心。EL是处理交易和状态的“大脑”,CL是维护网络安全和一致性的“心脏”。它们通过引擎API紧密协作,共同构成了今天我们所见的这个更安全、更环保、更具扩展性的以太坊。

理解这种分工,不仅能帮助我们更好地运行一个节点,更能让我们欣赏到以太坊背后精妙绝伦的工程设计。下一次当我们进行链上交互时,不妨想象一下这两个客户端在我们的节点后台不知疲倦地协同工作的场景吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91841.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91841.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91841.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Debian-10,用glibc二进制预编译包,安装Mysql-5.7.44 笔记250716

Debian-10,用glibc二进制预编译包,安装Mysql-5.7.44 笔记250716 📦 一步脚本 #!/bin/bash### 安装依赖 apt install -y libaio1 libnuma1 libncurses5### 下载MySQL-5.7.44 的 glib二进制包: mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz ,(如果不存在) mkdir…

用逻辑回归(Logistic Regression)处理鸢尾花(iris)数据集

# 导入必要的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from…

华大北斗TAU1201-1216A00高精度双频GNSS定位模块 自动驾驶专用

在万物互联的时代,您还在为定位不准、信号丢失而烦恼吗?TAU1201-1216A00华大北斗高精度定位模块TAU1201是一款高性能的双频GNSS定位模块,搭载了华大北斗的CYNOSURE III GNSS SoC 芯片,该模块支持新一代北斗三号信号体制&#xff0…

坚持继续布局32位MCU,进一步完善产品阵容,96Mhz主频CW32L012新品发布!

在全球MCU市场竞争加剧、国产替代加速的背景下,嵌入式设备对核心控制芯片的性能、功耗、可靠性及性价比提出了前所未有的严苛需求。为适应市场竞争,2025年7月16日,武汉芯源半导体正式推出基于CW32L01x系列低功耗微控制器家族的全新成员&#…

用线性代数推导码分多址(CDMA)

什么是码分多址 码分多址:CDMA允许多个用户同时、在同一频率上传输数据。它通过给每个用户分配唯一的、相互正交的二进制序列来实现区分。用户的数据比特被这个码片序列扩展成一个高速率的信号,然后在接收端通过相同的码片序列进行相关运算来回复原数据 …

mac 配置svn

1.查看brew的版本:brew install subversion2.安装brew命令:bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"3.把路径添加到path环境变量:echo export PATH"/opt/homebrew/b…

使用 .NET Core 的原始 WebSocket

在 Web 开发中,后端存在一些值得注意的通信协议,用于将更改通知给已连接的客户端。所有这些协议都用于处理同一件事。但鲜为人知的协议很少,鲜为人知的协议也很少。今天,将讨论 WebSocket,它在开发中使用最少&#xff…

编程实现Word自动排版:从理论到实践的全面指南

在现代办公环境中,文档排版是一项常见但耗时的工作。特别是对于需要处理大量文档的专业人士来说,手动排版不仅费时费力,还容易出现不一致的问题。本文将深入探讨如何通过编程方式实现Word文档的自动排版,从理论基础到实际应用&…

力扣经典算法篇-25-删除链表的倒数第 N 个结点(计算链表的长度,利用栈先进后出特性,双指针法)

1、题干 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1:输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输入:head [1], n 1 输出:[] 示例 3&…

VIT速览

当我们取到一张图片,我们会把它划分为一个个patch,如上图把一张图片划分为了9个patch,然后通过一个embedding把他们转换成一个个token,每个patch对应一个token,然后在输入到transformer encoder之前还要经过一个class …

【服务器与部署 14】消息队列部署:RabbitMQ、Kafka生产环境搭建指南

【服务器与部署 14】消息队列部署:RabbitMQ、Kafka生产环境搭建指南 关键词:消息队列、RabbitMQ集群、Kafka集群、消息中间件、异步通信、微服务架构、高可用部署、消息持久化、生产环境配置、分布式系统 摘要:本文从实际业务场景出发&#x…

LeetCode中等题--167.两数之和II-输入有序数组

1. 题目 给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 <…

【C# in .NET】19. 探秘抽象类:具体实现与抽象契约的桥梁

探秘抽象类:具体实现与抽象契约的桥梁 在.NET类型系统中,抽象类是连接具体实现与抽象契约的关键桥梁,它既具备普通类的状态承载能力,又拥有类似接口的行为约束特性。本文将从 IL 代码结构、CLR 类型加载机制、方法调度逻辑三个维度,全面揭示抽象类的底层工作原理,通过与…

Apache RocketMQ + “太乙” = 开源贡献新体验

Apache RocketMQ 是 Apache 基金会托管的顶级项目&#xff0c;自 2012 年诞生于阿里巴巴&#xff0c;服务于淘宝等核心交易系统&#xff0c;历经多次双十一万亿级数据洪峰稳定性验证&#xff0c;至今已有十余年发展历程。RocketMQ 致力于构建低延迟、高并发、高可用、高可靠的分…

永磁同步电机控制算法--弱磁控制(变交轴CCR-VQV)

一、原理介绍CCR-FQV弱磁控制不能较好的利用逆变器的直流侧电压&#xff0c;造成电机的调速范围窄、效率低和带载能力差。为了解决CCR-FQV弱磁控制存在的缺陷&#xff0c;可以在电机运行过程中根据工况的不同实时的改变交轴电压给定uq的值&#xff0c;实施 CCR-VQV弱磁控制。…

达梦数据守护集群搭建(1主1实时备库1同步备库1异步备库)

目录 1 环境信息 1.1 目录信息 1.2 其他环境信息 2 环境准备 2.1 新建dmdba用户 2.2 关闭防火墙 2.3 关闭Selinux 2.4 关闭numa和透明大页 2.5 修改文件打开最大数 2.6 修改磁盘调度 2.7 修改cpufreq模式 2.8 信号量修改 2.9 修改sysctl.conf 2.10 修改 /etc/sy…

电感与电容充、放电极性判断和电感选型

目录 一、电感 二、电容 三、电感选型 一、电感 充电&#xff1a;左右-为例 放电&#xff1a;极性相反&#xff0c;左-右 二、电容 充电&#xff1a;左右-为例 放电&#xff1a;左右-&#xff08;与充电极性一致&#xff09; 三、电感选型 主要考虑额定电流和饱和电流。…

新建模范式Mamba——“Selectivity is All You Need?”

目录 一、快速走进和理解Mamba建模架构 &#xff08;一&#xff09;从Transformer的统治地位谈起 &#xff08;二&#xff09;另一条道路&#xff1a;结构化状态空间模型&#xff08;SSM&#xff09; &#xff08;三&#xff09;Mamba 的核心创新&#xff1a;Selective SSM…

Python实现Word文档中图片的自动提取与加载:从理论到实践

在现代办公和文档处理中&#xff0c;Word文档已经成为最常用的文件格式之一。这些文档不仅包含文本内容&#xff0c;还经常嵌入各种图片、图表和其他媒体元素。在许多场景下&#xff0c;我们需要从Word文档中提取这些图片&#xff0c;例如进行内容分析、创建图像数据库、或者在…

Kafka、RabbitMQ 与 RocketMQ 高可靠消息保障方案对比分析

Kafka、RabbitMQ 与 RocketMQ 高可靠消息保障方案对比分析 在分布式系统中&#xff0c;消息队列承担着异步解耦、流量削峰、削峰填谷等重要职责。为了保证应用的数据一致性和业务可靠性&#xff0c;各大消息中间件都提供了多种高可靠消息保障机制。本文以Kafka、RabbitMQ和Rock…