节点架构
一个以太坊节点由两个客户端组成:执行客户端和共识客户端。为了让节点能够提议新区块,它还必须运行一个验证者客户端。
当以太坊使用工作量证明 (PoW)时,一个执行客户端就足以运行一个完整的以太坊节点。然而,自从实施权益证明 (PoS)以来,执行客户端必须与另一个称为共识客户端的软件一起使用。
下图展示了这两个以太坊客户端之间的关系。这两个客户端连接到各自的点对点 (P2P) 网络。需要独立的 P2P 网络,因为执行客户端在其 P2P 网络上广播交易,从而使它们能够管理本地交易池,而共识客户端在其 P2P 网络上广播区块,从而实现共识和链的增长。
执行客户端有多种选择,包括埃里贡 (Erigon)、奈瑟曼德 (Nethermind) 和 Besu。
为了使这种双客户端结构发挥作用,共识客户端必须将打包的交易传递给执行客户端。执行客户端在本地执行这些交易,以验证交易没有违反任何以太坊规则,并且提议的以太坊状态更新是正确的。当一个节点被选为区块生产者时,其共识客户端实例会向执行客户端请求打包的交易,以将其包含在新区块中并执行它们以更新全局状态。共识客户端通过使用 Engine API (opens in a new tab) 的本地 RPC 连接来驱动执行客户端。
执行客户端的作用是什么?
执行客户端负责交易验证、处理和广播,以及状态管理和支持以太坊虚拟机 (EVM)。它不负责区块构建、区块广播或处理共识逻辑。这些属于共识客户端的职责范围。
执行客户端创建执行负载——交易列表、更新的状态树以及其他与执行相关的数据。共识客户端将执行负载包含在每个区块中。执行客户端还负责重新执行新区块中的交易,以确保它们是有效的。执行交易是在执行客户端的嵌入式计算机上完成的,该计算机被称为以太坊虚拟机 (EVM)。
执行客户端还通过 RPC 方法提供以太坊的用户接口,使用户能够查询以太坊区块链、提交交易和部署智能合约。RPC 调用通常由 Web3js (opens in a new tab)、Web3py (opens in a new tab) 等库或浏览器钱包等用户界面来处理。
总而言之,执行客户端是:
- 用户访问以太坊的网关
- 以太坊虚拟机、以太坊状态和交易池的所在地。
共识客户端的作用是什么?
共识客户端处理使节点能够与以太坊网络保持同步的所有逻辑。这包括从对等节点接收区块并运行分叉选择算法,以确保节点始终遵循积累了最多证明(按验证者有效余额加权)的链。与执行客户端类似,共识客户端拥有自己的 P2P 网络,通过该网络共享区块和证明。
共识客户端不参与证明或提议区块——这是由验证者完成的,验证者是共识客户端的可选附加组件。没有验证者的共识客户端只跟进链的头部,使节点保持同步。这使用户能够使用其执行客户端与以太坊进行交易,并确信他们处于正确的链上。
验证者
质押并运行验证者软件使节点有资格被选中提议新区块。节点运营商可以通过在存款合约中存入 32 ETH,将验证者添加到其共识客户端中。验证者客户端与共识客户端捆绑在一起,可以随时添加到节点中。验证者处理证明和区块提案。它还使节点能够累积奖励,或因惩罚或罚没而损失 ETH。
节点组件比较
| 执行客户端 | 共识客户端 | 验证者 |
|---|---|---|
| 在其 P2P 网络上广播交易 | 在其 P2P 网络上广播区块和证明 | 提议区块 |
| 执行/重新执行交易 | 运行分叉选择算法 | 累积奖励/惩罚 |
| 验证传入的状态变更 | 跟踪链的头部 | 进行证明 |
| 管理状态树和收据树 | 管理信标状态(包含共识和执行信息) | 需要质押 32 ETH |
| 创建执行负载 | 跟踪 RANDAO(一种为验证者选择和其他共识操作提供可验证随机性的算法)中累积的随机性 | 可能会被罚没 |
| 暴露用于与以太坊交互的 JSON-RPC API | 跟踪合理化和最终确定性 |
