以太坊客户端是实现以太坊规范,并通过对等网络与其他以太坊客户端进行通信的软件应用程序。运行客户端的实例(称为节点)会形成一个网络。 在 POS 升级之后。 一个节点需要运行两种客户端软件:共识客户端和执行客户端。
两个客户端软件相互协作(如下图),以追踪以太坊的链头,并允许用户与以太坊网络进行交互。
图源:https://ethereum.org/zh/developers/docs/nodes-and-clients/
虽然这些不同的客户端由不同的团队和不同的编程语言实现,但他们都“说”相同的协议并遵循相同的规则。
不同的以太坊客户端如果符合参考规范和标准化通信协议,就可以互操作。
不同团队开发的各种编程语言中都有执行客户端和共识客户端。 多种客户端是以太坊独有的优势,客户端多样性使网络对攻击和漏洞更具恢复能力。从而排除潜在的单点故障。
这些实现的共同点是它们都遵循同一套规范。 这些规范规定了以太坊网络和区块链如何运作。 此外,它们还定义了每项技术细节,你可以在以下内容中了解这些规范:
有多种开源的执行客户端,它们由不同的团队使用不同的编程语言开发。 这使得网络更强大、更多样化。 它的理想目标是实现多样性,即没有任何客户端占据主导地位,从而减少任何单点故障。
下表汇总了不同的客户端:
客户端 | 语言 | 操作系统: | 网络 | 同步策略 | 状态缓冲 |
---|---|---|---|---|---|
Geth | Go | Linux、Windows、macOS | 主网、Sepolia、Goerli | 快照、完全 | Archive、Pruned |
Nethermind | C#、.NET | Linux、Windows、macOS | 主网、Sepolia、Goerli 及其他 | 快照(不提供服务)、快速、完全 | Archive、Pruned |
Besu | Java | Linux、Windows、macOS | Mainnet, Sepolia, Goerli, 以及更多 | 快照、快速、完全 | Archive、Pruned |
Erigon | Go | Linux、Windows、macOS | Mainnet, Sepolia, Goerli, 以及更多 | 完全 | Archive、Pruned |
Reth | Rust语言 | Linux、Windows、macOS | 主网、Sepolia、Goerli 及其他 | 完全 | Archive、Pruned |
有关受支持网络的更多信息,请仔细阅读以太坊网络。
每种客户端都有独特的用例和优势,所以你应该根据自己的偏好来选择。
共识客户端负责所有共识相关的逻辑,包括分叉选择算法、处理认证与管理权益证明奖励及惩罚。
节选文章:
https://ethereum.org/zh/developers/docs/nodes-and-clients/client-diversity/