以太坊是一个由众多计算机(称为节点)组成的分布式网络,这些计算机运行着能够验证区块和交易数据的软件。要将您的计算机转变为以太坊节点,必须安装并运行相应的软件。构成一个节点需要两个独立的软件组件(称为“客户端”)。
理解节点与客户端
节点 是指运行以太坊客户端软件、并与其他同样运行该软件的计算机相连形成网络的任何实例。而 客户端 则是以太坊的一种具体实现,它依据协议规则验证数据,确保网络安全。一个完整的节点需要同时运行两种客户端:共识客户端和执行客户端。
- 执行客户端(又称执行引擎、EL 客户端或之前的 Eth1 客户端):监听网络中广播的新交易,在以太坊虚拟机(EVM)中执行它们,并维护当前所有以太坊数据的最新状态和数据库。
- 共识客户端(又称信标节点、CL 客户端或之前的 Eth2 客户端):实现权益证明(Proof-of-Stake)共识算法,使得网络能够基于执行客户端验证过的数据达成一致。此外,还可以在共识客户端上附加一个名为“验证器”的第三方软件,允许节点参与网络的安全维护。
这两种客户端协同工作,跟踪以太坊链的头部,并允许用户与以太坊网络进行交互。这种多软件模块化协作的设计被称为“封装复杂性”,它使得“合并”(The Merge)得以无缝执行,让客户端软件更易于维护和开发,并允许单个客户端(例如在第二层生态系统中)被重用。
客户端多样性的重要性
执行客户端和共识客户端均有由不同团队用多种编程语言开发的多种实现。
拥有多个客户端实现可以通过减少对单一代码库的依赖来增强网络强度。理想的目标是实现多样性,避免任何单一客户端主导网络,从而消除潜在的单点故障。多样的编程语言也能吸引更广泛的开发者社区,让他们能用自己偏好的语言创建集成。
所有这些实现都遵循统一的规范。规范定义了以太坊网络和区块链的功能运作方式。
如何查看网络中的节点
多个追踪器提供了以太坊网络中节点的实时概览。需要注意的是,由于去中心化网络的特性,这些爬虫程序只能提供网络的有限视图,并且报告的结果可能有所不同。
- Etherscan 的 节点追踪地图
- Bitfly 的 Ethernodes
- Chainsafe 的 Nodewatch(爬取共识节点)
- MigaLabs 的 Monitoreth(分布式网络监控工具)
以太坊节点的不同类型
如果您想运行自己的节点,需要了解有不同类型的节点以不同的方式消耗数据。实际上,客户端可以运行三种不同类型的节点:轻量节点、全节点和归档节点。此外,还有不同的同步策略可选,这些策略可以缩短同步时间。同步是指节点获取以太坊最新状态信息的速度。
全节点
全节点对区块链进行逐块验证,包括下载并验证每个区块的区块体和状态数据。全节点有不同的类型——有些从创世区块开始,验证区块链整个历史中的每一个区块。其他则从它们信任为有效的较新区块(例如 Geth 的“快照同步”)开始验证。无论验证从何处开始,全节点只在本地保存相对较新的数据(通常是最近的 128 个区块),并可以删除旧数据以节省磁盘空间。当需要时,旧数据可以重新生成。
- 存储完整的区块链数据(尽管会定期修剪,因此全节点并不存储自创世以来的所有状态数据)
- 参与区块验证,验证所有区块和状态。
- 所有状态都可以从本地存储检索或由全节点通过“快照”重新生成。
- 服务网络,并根据请求提供数据。
归档节点
归档节点是从创世开始验证每个区块且永不删除任何已下载数据的全节点。
- 存储全节点保存的所有内容,并构建历史状态档案。如果您需要查询诸如在第 4,000,000 个区块时的账户余额,或者简单地、可靠地测试您自己的交易集而无需使用追踪来挖掘它们,就需要这种节点。
- 这些数据量达到 TB 级别,使得归档节点对普通用户吸引力较低,但对于区块浏览器、钱包供应商和链分析等服务非常 handy(方便)。
以归档模式以外的任何模式同步客户端将导致区块链数据被修剪。这意味着没有所有历史状态的存档,但全节点能够按需构建它们。
轻量节点
轻量节点不下载每个区块,只下载区块头。这些区块头包含有关区块内容的摘要信息。轻量节点所需的任何其他信息都会向全节点请求。然后,轻量节点可以独立地根据区块头中的状态根来验证接收到的数据。轻量节点使得用户无需运行全节点所需的高性能硬件或高带宽即可参与以太坊网络。最终,轻量节点或许能在手机或嵌入式设备上运行。轻量节点不参与共识(即它们不能成为矿工/验证者),但它们可以像全节点一样访问以太坊区块链,并具有相同的功能性和安全保证。
轻客户端是以太坊的一个活跃开发领域,我们预计很快会看到用于共识层和执行层的新轻客户端。通过 gossip 网络提供轻客户端数据也存在潜在途径。这样做的好处是,gossip 网络可以支持一个轻节点网络,而无需全节点来服务请求。
以太坊尚未支持大量的轻量节点,但轻节点支持是一个预计在不久的将来会迅速发展的领域。特别是,像 Nimbus、Helios 和 LodeStar 这样的客户端目前正 heavily focused on light nodes( heavily focused on light nodes)。
为什么要运行以太坊节点?
运行节点可以让您直接、无需信任且私密地使用以太坊,同时通过保持网络的健壮和去中心化来支持网络。
对您的好处
运行您自己的节点使您能够以私密、自给自足和无需信任的方式使用以太坊。您不需要信任网络,因为您可以通过自己的客户端验证数据。“不要信任,要验证”是一个流行的区块链 mantra(信条)。
- 您的节点自行根据共识规则验证所有交易和区块。这意味着您不必依赖网络中的任何其他节点或完全信任它们。
- 您可以将以太坊钱包与您自己的节点一起使用。您可以更安全、更私密地使用去中心化应用(dApps),因为您不必将您的地址和余额泄露给中介。一切都可以通过您自己的客户端进行检查。MetaMask、Frame 和许多其他钱包都提供 RPC 导入功能,允许它们使用您的节点。
- 您可以运行和自托管其他依赖于以太坊数据的服务。例如,这可能是信标链验证器、第二层(Layer 2)软件、基础设施、区块浏览器、支付处理器等。
- 您可以提供自己的自定义 RPC 端点。您甚至可以向社区公开提供这些端点,以帮助他们避免大型中心化提供商。
- 您可以使用进程间通信(IPC) 连接到您的节点,或者重写节点以将您的程序作为插件加载。这实现了低延迟,这在很多情况下都有很大帮助,例如在使用 web3 库处理大量数据时,或者当您需要尽可能快地替换您的交易时(即抢先交易)。
- 您可以直接质押 ETH 来保护网络并获得奖励。请参阅 独立质押 开始。
对网络的好处
多样化的节点集对于以太坊的健康、安全和运营弹性至关重要。
- 全节点强制执行共识规则,因此它们不会被欺骗接受不遵守规则的区块。这提供了额外的网络安全性,因为如果所有节点都是不进行完全验证的轻量节点,验证者就可能攻击网络。
- 如果发生克服权益证明加密经济防御的攻击,可以通过全节点选择遵循诚实链来进行社会恢复。
- 网络中更多的节点意味着更多样化、更健壮的网络,这是去中心化的终极目标,它能够实现抗审查和可靠的系统。
- 全节点为依赖区块链数据的轻量级客户端提供访问。轻量节点不存储整个区块链,而是通过区块头中的状态根验证数据。如果需要,它们可以向全节点请求更多信息。
即使您不运行验证器,运行全节点也会让整个以太坊网络受益。
如何运行您自己的节点
对运行自己的以太坊客户端感兴趣吗?
对于初学者友好的介绍,请访问我们的运行节点页面了解更多信息。
如果您是技术型用户,请深入阅读关于如何启动您自己的节点的更多细节和选项。
替代方案与节点服务
设置您自己的节点可能会花费您的时间和资源,但您并不总是需要运行自己的实例。在这种情况下,您可以使用第三方 API 提供商。有关使用这些服务的概述,请查看节点即服务。
如果您所在社区有人运行具有公共 API 的以太坊节点,您可以通过自定义 RPC 将您的钱包指向该社区节点,与随机受信任的第三方相比,这样可以获得更多的隐私。
另一方面,如果您运行一个客户端,您可以与可能需要它的朋友分享。
执行客户端详解
以太坊社区维护着多个开源执行客户端(以前称为“Eth1 客户端”或“以太坊客户端”),由不同的团队使用不同的编程语言开发。这使得网络更强大、更多样化。理想的目标是实现多样性,避免任何客户端占主导地位,以减少任何单点故障。
所有客户端都通过客户端测试,并积极维护以跟上网络升级。
每个客户端都有独特的用例和优势,因此您应根据自己的偏好进行选择。多样性允许实现专注于不同的功能和用户群体。您可以根据功能、支持、编程语言或许可证来选择客户端。
主流执行客户端介绍
- Besu: Hyperledger Besu 是一个适用于公共和许可网络的企业级以太坊客户端。它用 Java 编写,采用 Apache 2.0 许可。
- Erigon: Erigon(以前称为 Turbo-Geth)最初是 Go Ethereum 的一个分支,旨在提高速度和磁盘空间效率。它用 Go 编写,是完全重新架构的以太坊实现。
- Go Ethereum (Geth): 是以太坊协议的最原始实现之一。它是目前最广泛使用的客户端,拥有最大的用户群和为用户和开发人员提供的各种工具。它用 Go 编写,完全开源,采用 GNU LGPL v3 许可。
- Nethermind: Nethermind 是一个使用 C# .NET 技术栈创建的以太坊实现,采用 LGPL-3.0 许可,在所有主要平台(包括 ARM)上运行。它提供了出色的性能。
- Reth (Rust Ethereum): 是一个专注于用户友好、高度模块化、快速高效的以太坊全节点实现。它最初由 Paradigm 构建和推动,采用 Apache 和 MIT 许可。
- EthereumJS (Beta): 以太坊JS执行客户端用 TypeScript 编写,由许多包组成。它仍处于开发早期,尚未推荐用于生产环境。
共识客户端详解
有多个共识客户端(以前称为“Eth2”客户端)来支持共识升级。它们负责所有与共识相关的逻辑,包括分叉选择算法、处理证明以及管理权益证明奖励和惩罚。
主流共识客户端介绍
- Lighthouse: 用 Rust 编写,采用 Apache-2.0 许可。自信标链创世以来一直稳定且可用于生产环境。
- Lodestar: 用 Typescript 编写,采用 LGPL-3.0 许可。是面向独立质押者、开发人员和研究人员的最新共识客户端之一。
- Nimbus: 用 Nim 编写,采用 Apache-2.0 许可。注重资源效率,易于在资源受限的设备和企业基础设施上运行。
- Prysm: 用 Go 编写,采用 GPL-3.0 许可。功能全面,具有可选的 Webapp UI,并优先考虑用户体验、文档和可配置性。
- Teku: 是最初的信标链创世客户端之一。用 Java 编写,采用 Apache 2.0 许可。提供非常灵活的部署选项。
- Grandine: 用 Rust 编写,采用 GPL-3.0 许可。速度快、性能高、轻量级。
同步模式深度解析
为了跟踪和验证网络中的当前数据,以太坊客户端需要与最新的网络状态同步。这是通过从对等点下载数据、加密验证其完整性并构建本地区块链数据库来完成的。
同步模式代表了此过程的不同方法,各有不同的权衡。客户端在同步算法的实现上也各不相同。请始终参考您所选客户端的官方文档以了解具体实现细节。
执行层同步模式
执行层可以在不同模式下运行,以适应不同的用例,从重新执行区块链的世界状态到仅从受信任的检查点同步链的尖端。
- 全同步: 下载所有区块(包括头和区块体),并通过从创世开始执行每个区块来逐步重新生成区块链的状态。信任最小化,提供最高安全性。
- 快速同步: 下载所有区块(包括头、交易和收据),但在达到最近的头部之前,它依赖于收据,然后切换到导入和处理区块以提供全节点。
- 快照同步: 从已知是真实区块链一部分的较新“受信任”检查点开始同步。节点保存定期检查点,同时删除超过特定年龄的数据。这些快照用于按需重新生成状态数据,而不是永久存储。是目前以太坊主网默认的最快同步策略。
- 轻同步: 下载所有区块头、区块数据,并随机验证一些。只从受信任的检查点同步链的尖端。注意 轻同步尚未与权益证明以太坊一起工作——新版本的轻同步应该很快就会推出!
共识层同步模式
- 乐观同步: 一种合并后的同步策略,允许执行节点通过既定方法进行同步。执行引擎可以乐观地导入信标区块而不完全验证它们,找到最新的头部,然后开始用上述方法同步链。
- 检查点同步 (又称弱主观性同步): 基于弱主观性假设,可以从最近的弱主观性检查点而不是创世开始同步信标链。显著加快了初始同步时间。
常见问题
问:运行一个以太坊节点需要什么硬件条件?
答:硬件要求因节点类型而异。全节点通常需要至少 2TB 的 SSD 存储空间、8GB 以上的 RAM 和稳定的高速互联网连接。归档节点需要更多的存储空间(数 TB)。轻量节点要求则低得多。具体请参考您选择的客户端文档。
问:运行节点能赚取收益吗?
答:直接运行全节点或归档节点本身并不直接产生收益。然而,如果您在节点上附加一个验证器客户端并质押至少 32 个 ETH,您就可以参与验证区块并获得 staking 奖励。这被称为独立质押(Solo Staking)。
问:执行客户端和共识客户端必须来自同一个团队吗?
答:不需要。执行客户端和共识客户端可以混合匹配(例如,使用 Geth 作为执行客户端,使用 Lighthouse 作为共识客户端)。这种互操作性是以太坊客户端多样性的一个重要方面。
问:轻量节点安全吗?
答:是的,轻量节点通过验证区块头中的状态根来确保安全,其安全保证与全节点相同。它们不参与共识,但可以安全地访问和验证区块链数据。
问:为什么客户端多样性很重要?
答:如果绝大多数节点都运行同一个客户端,那么该客户端中的一个关键错误就可能导致网络大规模中断或分叉。拥有多个强大且广泛使用的客户端可以最大限度地降低这种系统性风险,使网络更加健壮和抗脆弱。
问:同步一个全节点需要多长时间?
答:同步时间取决于网络状态、您的硬件、互联网速度和选择的同步模式。使用快照同步,可能在几天内完成。从创世开始的全同步可能需要更长时间。共识客户端的同步通常比执行客户端快。