节点和客户端
以太坊要以去中心化的方式工作,它需要一个分布式的节点网络,能够验证区块和交易数据。 您需要一个被称为客户端的应用程序,才能在您的设备上“运行”一个节点。
前置要求
在更深入地研究和运行自己的以太坊客户端实例之前,您应该了解去中心化网络的概念。 看看我们的以太坊介绍。
什么是节点和客户端?
“节点”是指一种称为客户端的软件。 客户端是一种以太坊的实现,它可以验证每个区块中的所有交易,从而确保网络安全和数据准确。
通过查看此节点图,您可以查看以太坊网络的实时视图。
许多以太坊客户端的实现已经以多种语言存在。 这些客户端实现的共同之处是它们都遵循了正式的规范。 此规范决定了以太坊网络和区块链的功能。
以太坊客户端功能的简化图表。
节点类型
如果您想运行自己的节点,您应该了解有不同类型的节点以不同的方式使用数据。 事实上,客户端可以运行三种不同类型的节点——轻量、完整和归档。 也有不同同步策略的选项,可加快同步时间。 同步是指它能以多快的速度获取有关以太坊状态的最新信息。
完整节点
- 存储完整的区块链数据。
- 参与区块验证,验证所有区块和状态。
- 所有状态都可以从一个完整的节点推出。
- 提供网络服务,并应要求提供数据。
轻节点
- 存储头链并请求其他所有内容。
- 可以对照区块头中的状态根来验证数据的有效性。
- 对于低容量的设备,如嵌入式设备或移动电话来说是有用的,这些设备无法储存数千兆字节的区块链数据。
归档节点
- 存储保留在完整节点中的所有内容,并建立历史状态档案。 如果您要查询诸如在块#4,000,000 处的帐户余额之类的信息,则需要。
- 这些数据以太字节为单位,这使存档节点对普通用户的吸引力降低,但对于诸如区块浏览器、钱包供应商和链分析之类的服务而言却很方便。
以存档以外的任何方式同步客户端将导致修剪的区块链数据。 这意味着,没有所有历史状态的档案,但是整个节点都可以按需构建它们。
为什么我要运行一个以太坊节点?
运行节点可以让您在支持生态系统的同时,不受信任地私下使用以太坊。
对您的好处
运行自己的节点使您能够以真正私有、自给自足和不信任的方式使用以太坊。 您无需信任网络,因为您可以自己与客户端验证数据。 “不信任,验证”是流行的区块链口头禅。
- 您的节点根据一致性规则自己验证所有交易和区块。 这意味着您不必依赖网络中的任何其他节点或完全信任它们。
- 您不必将地址和余额泄露到随机节点。 一切都可以由您自己的客户检查。
- 如果您使用自己的节点,则去中心化应用可以更安全和私有。 Metamask、MyTherWallet 和其他钱包可以轻松指向您自己的本地节点。
网络优势
多种节点对以太坊的健康、安全和运行弹性非常重要。
- 他们为依赖它的轻量级客户端提供对区块链数据的访问。 在使用高峰期,需要有足够的完整节点来帮助轻量节点同步。 轻量节点不存储整个区块链,而是通过区块头的状态根来验证数据。 如果有需要,他们可以要求区块提供更多信息。
- 完整的节点会强制执行工作量证明的共识规则,因此它们不会被欺骗来接受不遵循规则的代码块。 这为网络中提供了额外的安全性,因为如果所有节点都是轻型节点(不进行完全验证),则矿工可能会攻击网络,例如,创建具有更高奖励的区块。
如果您运行一个完整的节点,整个以太坊网络将从中受益。
运行您自己的节点
项目
ethnode - 运行一个以太坊节点(Geth 或 Parity)用于本地开发。
DAppNode-**在专用服务器上运行 Web3 节点(包括以太坊)的操作系统机器。**
资源
- 运行以太坊完整节点:完整指南 Nov 7, 2019 - Justin Leroux
- 节点配置备忘单 Jan 5, 2019 - Afri Schoeden
- 如何安装和运行一个 Geth 节点 October 4, 2020 - Sahil Sen
- 如何安装和运行一个 OpenEtherum(fka. Parity) 节点 2020 - Sahil Sen
替代方法
运行您自己的节点可能很困难,您不必总是运行您自己的实例。 在这种情况下,您可以使用第三方 API 提供商,如 Infura、Alchemy 或 QuikNode。 除了以上这些,ArchiveNode 是一个社区资助的节点。ArchiveNode 可以将以太坊上的数据带给无法运行自己的节点的独立开发者。
如果某人在您的社区里运行一个包含公共 API 的以太坊节点, 您可以通过自定义 RPC 将您的 light wallet(如 Metamask)指向社区节点 ,并比随机受托的第三方更加隐私。
另一方面,如果您运行一个客户端,您可以与可能需要它的朋友分享它。
客户端
以太坊为不同的客户设计不同的客户端,由不同的团队使用不同的编程语言开发。 这使得该网络更加强大和更加多样化。 理想的目标是在没有任何客户端支配的情况下实现多样性,以减少任何单点故障。
本表概括了不同的客户端。 所有这些都在积极工作,维护并通过了客户端测试。
客户端 | 语言 | 操作系统: | 网络 | 同步策略 | 状态缓冲 |
---|---|---|---|---|---|
Geth | Go | Linux, Windows, macOS | Mainnet、Görli、Rinkeby、Ropsten | 快速,完整 | Archive,Pruned |
OpenEtherum | Rust | Linux,Windows,macOS | Mainnet、Kovan、Ropsten 及更多 | Warp,完整 | Archive, Pruned |
Nethermind | C#, .NET | Linux,Windows,macOS | Mainnet、Gounderster、Ropsten、Rinkeby 及更多 | 快速,完整 | Archive, Pruned |
Besu | Java | Linux,Windows,macOS | Mainnet、Rinkeby、Ropsten 和 Görli | 快速,完整 | Archive, Pruned |
Trinity | Python | Linux,macOS | Mainnet、Kovan、Ropsten 及更多 | 完整,Beam,Fast/Header | Archive |
更多关于支持网络的信息,请在以太坊网络中查阅。
不同实现方式的优势
每个客户端都有独特的用例和优势,所以您应该根据自己的偏好来选择一个。 多样性使得执行工作能够侧重于不同的特征和用户群。 您可能想要根据功能、支持、编程语言或许可证选择一个客户端。
Go Ethereum
Go Ethereum(简称 Geth)是实现以太坊原始协议之一。 目前,它是使用最为广泛的客户端,拥有最大的用户群,为用户和开发者提供各种工具。 它用 Go 语言编写,完全开放源代码,并由 GNU LGPL v3 授权许可。
OpenEtherum
OpenEtherum 是一个快速、功能丰富、基于 CLI 的以太坊高级客户端。 它的诞生是为了给那些需要快速同步和最大运行时间的快速和可靠的服务提供必要的基础设施。 OpenEtherum 的目标是成为最快、最轻、最安全的以太坊客户端。 它提供了以下简洁的模块化代码:
- 易于自定义。
- 轻度融入服务或产品。
- 最小的内存和存储痕迹。
OpenEthereum 是使用最先进的 Rust 编程语言开发的,并由 GPLv3 授权许可。
Nethermind
Nethermind 是一个用 C# .NET 技术栈创建的以太坊协议,在包括 ARM 在内的所有主要平台上运行。 它表现出了优越的性能,具有:
- 优化虚拟机
- 状态访问
- 网络和丰富的功能,如 Promethe/Graphana 仪表盘、seq 企业日志支持、JSON RPC 跟踪和分析插件。
Nethermind 同样拥有详细文档,强大的开发支持,在线社区,并为高级用户提供 7*24 小时服务。
Besu
Hyperledger Besu 是一个企业级的以太坊客户端,用于公共和许可网络。 它运行所有的以太坊主网功能,从追踪到 GraphQL,有广泛的监控,并得到 ConsenSys 的支持,无论是在开放的社区渠道还是通过企业的商业 SLA。 它使用 Java 编写,并由 Apache 2.0 授权许可。
同步模式
- 完整——下载所有区块(包括区块头、交易和接收的数据),并通过执行每个区块来逐步生成区块链的状态。
- 快速(默认)— 下载所有区块(包括区块头、交易和接收的数据),验证所有区块头,下载区块状态并对区块头进行验证。
- 轻便——下载所有区块头、区块数据并对其进行随机验证。
- 压缩同步——每 5000 个区块,节点将对该区块的状态进行一次关键性的共识快照。 任何节点都可以通过网络获取这些快照,启用快速同步功能。 有关压缩同步的更多信息
- Beam 同步——一种同步模式,让您更快地进入。 它不需要长时间等候才能同步,而是随着时间的推移填充数据。 有关 Beam 的更多信息
- 区块头同步——你可以使用一个受信任的检查点,从一个较新的区块头开始同步,然后让后台进程最终填补空白。
您在设置时定义同步类型,如:
在 GETH 中设置简洁同步
geth --syncmode "light"
在 Trinity 中设置区块头同步
trinity --sync-from-checks eth://block/byhash/0xa65877df954e1ff20473ee8287252eee956c0d395a5791f1103a950a1e21?score=15835,269,727,022,672,760,774
硬件
硬件要求因客户端不同而已,但通常要求不是那么高,因为节点只需要保持同步。 不要把它与需要更多算力的挖矿混为一谈。 然而,更强大的硬件的确可以提升同步时间和性能。 根据您的需求和目的,以太坊可以在您的计算机、家庭服务器、单板计算机或云端虚拟私人服务器上运行。
运行你自己的节点的一个简单方法是使用即插即用的盒子,如 DAppNode。 一个简单的用户接口,为运行客户端和依赖客户端的应用程序提供了硬件。
要求
在安装任何客户端之前,请确保您的计算机有足够的资源运行它。 最低和建议的要求见下文,然而核心部分在于磁盘空间。 同步以太坊区块链即是进行高强度的输入/输出。 最好有一个固态硬盘 (SSD)。 要在机械硬盘上运行以太坊客户端,你将需要至少 8GB 的内存作为缓存使用。
最低要求
- 2 核以上 CPU
- 如果是固态硬盘,则内存需 4GB 以上。如果是机械硬盘,则内存需 8GB 以上。
- 8MBit/s 带宽
推荐的规格要求
- 具有 4 核以上快速 CPU
- 16GB 以上 RAM
- 快速固态硬盘,拥有至少 500 GB 可用空间
- 25MBit/s 以上带宽
根据你要使用的软件和同步模式,需要数百 GB 的磁盘空间。 大致规格如下:
客户端 | 磁盘大小(快速同步) | 磁盘大小(完整存档) |
---|---|---|
Geth | 400GB 以上 | 4.7TB 以上 |
OpenEtherum | 280GB 以上 | 4.6TB 以上 |
Nethermind | 200GB 以上 | 3TB 以上 |
Besu | 750GB 以上 | 4TB 以上 |
这些图表显示储存要求总是如何改变的。 关于 Geth 和 Parity 的最新数据,请参阅完整同步数据和归档同步数据。
单板计算机上的以太坊
运行以太坊节点的最方便和最便宜的方法是使用 Raspberry Pi 这样的 ARM 架构的单板计算机。 Ethereum on ARM提供 Geth、Parity、Nethermind 和 Besu 客户端的图像。 这是一个关于如何构建和设置 ARM 客户端的简单教程。
像这样的小型、实惠和高效的设备是在家里运行节点的理想选择。
以太坊 2.0 客户端
有新客户端支持以太坊 2.0 升级。 他们将运行信标链,并支持新的权益证明共识机制。
延伸阅读
互联网上有很多关于以太坊客户端的说明和信息,这里有几个可能会有帮助。
- 以太坊 101 - 第二部分 - 了解节点 - Wil Barnes,2019 年 2 月 13 日
- 运气以太坊全节点:勉励者指南 - Justin Leroux,2019 年 11 月 7 日
- 运行一个以太坊节点 - ETHHub,经常更新
- 分析成为以太坊完全验证节点的硬件要求 - Albert Palau,2018 年 9 月 24 日
- 在以太坊主网上运行 Hyperledger Besu 节点:优点、要求和设置 - Felipe Faraggi,2020 年 5 月 7 日
相关主题
相关教程
- 用 Geth 运行一个节点 - 如何下载、安装和运行 Geth。 涵盖了同步模式、Javascript 控制台等内容。
- 将您的 Raspberry Pi 4 变成一个以太坊 1.0 或以太坊 2.0 节点 - 安装指南 - 闪存您的 Raspberry Pi 4,插入以太网电缆,连接固态磁盘并给设备供电,将 Raspberry Pi 4 变成一个完整的以太坊 1.0 或以太坊 2.0 节点(信标链/验证者)。