以太坊执行客户端和共识客户端各自的作用及意义
前言:
以太坊自从 The Merge(合并) 后,系统结构分成两个明确的层次:
✅ 执行客户端(Execution Client)
✅ 共识客户端(Consensus Client)
它们之间的职责清晰分工,通过 Engine API 协同工作。
🧱 执行客户端(Execution Client)
✅ 主要职责:
功能 说明
- 📦 交易执行 处理所有交易、部署/调用智能合约。
- 📚 状态管理 维护账户余额、存储状态(State)、合约状态等。
- ⛓ 区块构建 构造和传播区块(但从合并后不再负责最终共识)。
- 🧾 JSON-RPC API 提供 web3, eth, net 等接口供外部调用(如 DApps、钱包)。
- 📁 数据存储 保存区块链数据,如区块、交易、状态树等。
🔧 常见客户端:
- Geth (Go Ethereum)
- Nethermind
- Besu
- Erigon
🔄 与共识层交互:
接收来自共识客户端的出块请求(via Engine API)。
返回构建好的 block payload。
验证 block 后返回结果给共识客户端。
🌐 共识客户端(Consensus Client)
✅ 主要职责:
功能 说明
- 🧑⚖️ 区块共识 参与 PoS 共识(投票、提议、证明),决定哪个区块被接受。
- 🕒 时间管理 管理 slot/epoch(每 12 秒一个 slot)以推动网络共识节奏。
- 📬 区块提议 当自己成为 proposer 时,请执行层生成区块内容。
- ✅ 区块验证 验证所有接收到的区块内容是否正确并签名确认。
- 📊 最终性确认 跟踪哪些区块被视为“最终确定”不可回滚。
🔧 常见客户端:
- Prysm
- Lighthouse
- Teku
- Nimbus
- Lodestar
🔗 与执行层交互:
通过 Engine API 请求执行客户端构建或验证区块。
提供验证者服务,连接验证者客户端(或集成验证者模块)。
🔄 两者如何协同工作?
典型流程:
- 共识客户端在某个时间点被选为 proposer。
- 它调用执行客户端的 Engine API 请求构造区块 payload。
- 执行客户端执行交易、打包区块并返回。
- 共识客户端验证 payload 并广播区块。
- 其他节点接收到后也通过自己的执行客户端验证区块内容是否有效。
- 共识客户端参与投票以确定区块是否成为“最终确定区块”。
🧠 类比帮助理解:
系统角色 类比
- 执行客户端 工厂工人,负责“干活”——执行交易、跑合约、记录账本。
- 共识客户端 经理人,负责“决策”——谁出块、哪个区块被接受、维持节奏。
- Engine API 对讲机,让两者协同沟通、配合工作。
🔐 为什么要分离?
- ⛓ 扩展性:允许独立更新执行和共识层,提高模块化。
- 🔒 安全性:各司其职,逻辑清晰,减少单点故障。
- 🔄 客户端多样性:用户可以自由组合执行+共识客户端,如:
- Geth + Prysm
- Nethermind + Lighthouse
- Besu + Teku 等等