VERTU官网

详解以太坊节点是如何运行的

信息来源自Coinmetrics,略有修改,作者Alex R. Mead

本文仅限于技术层面的讨论,请读者自觉遵守所在地区的法律法规。

在消费者级硬件上轻松设置和运行以太坊节点的能力是以太坊网络去中心化特性的一个关键卖点。但是对于一般人来说,设置一个节点并在家里运行它到底有多大的实用性呢?随着合并的完成,这个问题在加密社区中出现了很多次。在本周的文章,我们将介绍在家中设置和运行以太坊节点所需的步骤。我们将从基本硬件和网络需求开始,接着介绍软件下载/编译/安装,最后介绍节点的运行步骤和维护。在整篇文章中,我们将提供来自Coin Metrics团队自2022年6月以来一直持续运行的Geth/Lighthouse节点的见解。

 

硬件和网络要求

计算机

要开始设置和运行你自己的以太坊节点,你需要一台计算机和一个互联网连接。计算机将需要满足两个一般要求:足够的RAM和足够的磁盘空间。

 

每个节点客户端都规定了RAM需求(见下文),但任何具有16g RAM的现代计算机通常都可以很好地工作。我们建议你在专用的计算机上运行以太坊节点,这意味着计算机的唯一工作就是运行以太坊节点。没有流媒体Netflix、编辑视频或其他前台/后台进程,只是运行你的节点。

 

在RAM之后,你需要确保你的计算机有足够的磁盘空间来存储当前的以太坊区块链(记住,合并后,它现在有两个部分:执行层和共识层信标链),而且还要有合理的空间让区块链继续增长。目前,一个好的经验法则是使用2tb的固态硬盘(SSD)。SSD是必不可少的,因为它可以支持足够快的读写行为,因此节点可以本地同步现有的链,并在链增长时对其进行永久性维护。

 

对于我们的节点,我们运行的是带有16 MB RAM的Dell OptiPlex 5080和英特尔酷睿i7处理器。这台机器是直接从戴尔通过他们的网页购买的“现货”。此外,为了补充内置磁盘空间,我们通过USB-C Type 3连接器连接了一个2TB的三星便携式SSD T7。



网络连接

要与以太坊网络同步,你需要至少25MBit/sec的下载速度,这是大多数住宅互联网套餐都能满足的规格。对于我们的节点,我们使用的是美国中西部可用的标准Comcast套餐,据称下载速度为250 MBit/秒,每月总数据下载速度为1.2 tb。一般位于发达经济体的大都市地区都会向用户提供这种服务包或类似的服务。

 

软件

 

合并后,所有以太坊节点必须同时运行两个软件,一个共识层节点和一个执行层节点。Ethereum.org列出了以下执行层节点:Geth、Nethermind、Besu、Erigon和Akula。对于共识层节点,它列出了Lighthouse、Lodestar、Nimbus、Prysm和Teku。

 

对这些不同软件的分析超出了本文的范围。我们决定分别为我们的执行层和共识层运行可靠的Geth和备受尊敬的Lighthouse。

 

操作系统(OS)

 

在深入研究运行以太坊协议的软件之前,先简单介绍一下操作系统的选择。我们决定运行Ubuntu 22.04 LTS,裸机版。裸机意味着操作系统直接运行在处理器的芯片上。没有虚拟机,没有Docker容器,只有计算机上的“老式”操作系统。在裸机上运行提供了对硬件资源的最佳利用,而不需要虚拟化的“开销”。Ubuntu 22.04 LTS可免费下载,我们选择它的部分原因是因为加密货币和Linux社区的独立性。

 

要在戴尔电脑上安装Ubuntu操作系统,我们必须对运行Windows 10的现有硬盘进行分区。这个过程的详细说明列在了Ubuntu的网页上,需要一个u盘USB来在新分区上加载新的操作系统。安装操作系统可能很棘手,也许是一个非技术性节点操作员要克服的第一个真正的“瓶颈”。应该注意的是,在Windows 10上可以运行相同的系统,因此这不是一个真正必要的步骤。此外,互联网上有许多资源可以解决这个问题,所以我们认为对于一个有动机的、有良好计算机技能的用户来说,完成这个任务还算是正常的。

 

执行层:Geth

 

根据clientdiversity.org的数据,Geth是目前使用最多的以太坊节点,约占所有以太坊客户端的80%。虽然这对于网络来说并不理想,但这是我们节点正在运行的客户端。对于我们的客户端可执行程序(例如,当你启动节点时我们的操作系统实际运行的程序),我们采用了一种“不信任,去核实”的方式,以确定软件的构成。因此,我们使用Git从官方Go Ethereum存储库下载了源代码。在整个本地代码库中,我们使用了GNU Make构建Geth客户端,此外还使用了来自Go Ethereum的其他几个支持软件。Go Ethereum的网页上对每一步都有详细的说明。

 

下载源代码、编译它,并将它安装到你的机器上,这是真正的软件工程师式的工作。这对普通计算机用户来说很可能是一个很难的任务。因此,如果从源代码编译太过困难,Geth还提供了预构建的二进制文件,你可以从他们的网页下载。但是请注意,虽然这些二进制文件非常可靠,但实际上你信任的是它们的组成。通过源代码的使用方法,每一行代码都可以被单独分析,因此无需信任。

 

共识层:Lighthouse

 

本着与Geth相同的精神,我们从官方Lighthouse资源库下载了Lighthouse,并从源代码中进行了编译。与Geth类似,如果没有软件经验,编译Lighthouse可能非常棘手。因此,Lighthouse也可以使用预先构建的二进制文件。

 

运行节点

 

在实际运行节点时,请记住操作者必须在同一台机器上运行两个程序(执行客户端和共识客户端)——在我们的例子中是Geth和Lighthouse。此外,每个客户端都需要将大量的数据写入磁盘,这就引出了我们的第一步,将SSD装载到文件系统。

 

安装SSD

 

与编译源代码类似,查找物理SSD驱动器并“安装它”对普通计算机用户来说并不容易。它需要使用终端程序和浏览计算机文件夹结构的能力。对于我们的节点,我们选择将SSD安装到主目录~/ethereum文件夹。在这个文件夹中(请记住,它实际上位于SSD上!)我们创建了另外两个文件夹~/ethereum/execution_layer和~/ethereum/consensus_layer。这些文件夹(或者程序员称之为目录)将保存节点所需的所有文件,包括区块链本身。

 

运行节点软件

 

有了节点将运行安装程序的文件位置,我们现在可以运行节点软件本身。我们首先按照Go Ethereum网页上的步骤,其中包括使用clef设置一个用户帐户,然后用几个参数启动geth本身,最重要的是将——datadir设置为我们SSD上的~/ethereum/execution_layer文件夹(即目录)。Mainnet的chainid是“1”(不带引号)。此外,geth必须连接到共识层客户端(在我们的例子中是Lighthouse),所以必须配置一些额外的参数,Go Ethereum在其网页部分“Connecting to Consensus Clients”中解释了这些参数。

 

该命令将启动主网区块链的同步进程,截至目前,主网区块链是一个超过600GB的资源(2022年10月)。当我们在2022年6月启动最初的节点同步时,这个过程花了大约5天时间。

 

共识层客户端Lighthouse的运行方式与上面的Geth相同。同样,请确保将datadir正确指向给SSD,以确保你有足够的磁盘空间来存储所有需要的数据。此外,Lighthouse需要与Geth进行通信,因为他们都在支持合并后的以太坊。Lighthouse文档中连接到执行引擎一节提供了关于此连接过程的具体说明。对我们的节点来说,同步信标链花费了大约两天时间。请注意,我们首先同步了主网链(即Geth),然后启动了信标链(即Lighthouse)的同步。

 

Mount SSD:

$sudo mount /dev/sda ~/ethereum

 

Run clef:

$clef –keystore ~/ethereum/execution_layer/keystore

         –configdir ~/ethereum/execution_layer/clef

         –chainid 1

 

Run geth:

$geth –datadir ~/ethereum/execution_layer

          –signer=~/ethereum/execution_layer/clef/clef.ipc

          –mainnet

          –syncmode snap

          –http

          –authrpc.jwtsecret ~/ethereum/execution_layer/geth/jwtsecret

          –authrpc.addr localhost

          –authrpc.port 8551

          –authrpc.vhosts localhosts

          –cache 1024

 

Run lighthouse:

$lighthouse breacon_node

          –network mainnet

          –datadir ~/ethereum/consensus_layer

          –http

          –execution-endpoint localhost:8551

          –execution-jwt ~/ethereum/execution_layer/geth/jwtsecret



使用你的节点

当节点同步时,预期会下载大量数据。这实际上是以太坊的整个区块链历史被复制到了你的本地计算机。完全下载这些信息后,你可以查询本地节点的任何信息,并不去信任任何人来验证以太坊系统。有了这样的设置,当涉及到以太坊网络和所有与之相关的DApp时,你就可以真正实现“不信任,去核实”这句话了。

使用本地托管的Geth或Lighthouse节点组件的RPC连接到你的节点是很简单的。这些API在执行层和共识层都有很好的文档记录。对于Python用户来说,使用开源的Web3.py模块是一个很好的选择,博客文章和论坛回答免费提供了许多示例,比如如Stack Overflow。如果你不熟悉API,会经历一个学习曲线。然而,有了Python和这个生态系统可用的大量资源,有动机的用户肯定可以在网上找到资源来学习他们需要的一切。

节点性能

随着权益证明(PoS)作为共识机制,以太坊的区块时间极为可预测。区块每12秒产生一次,具有高度的一致性,其他通信(例如证明)在区块传播中以6秒的间隔发生。运行一个专用节点的情况(即计算机只运行以太坊)在下图显示的CPU和网络活动监视器中显示的非常清楚。这与预期完全一致,系统的“理论”与观测到的数据相匹配总是一个令人安心的迹象。


▵ 以太坊节点:标准操作的CPU负载百分比和网络数据速率。


为了进一步展示节点的运行情况,我们调用了共识层的端点来复原所有验证器的集合(即/eth/v1/beacon/states/{state_id}/validators)。该查询的运行时间为几分钟,如下所示,在请求处理期间,CPU的使用率明显增加,然后在处理请求后后又降回“正常”状态。


以太坊节点:提供API调用的信标节点,然后恢复到正常的节点操作负载。


持续的节点运行

 

就像所有的软件系统一样,新的版本正在不断开发中。对于Geth和Lighthouse来说,这也不例外——而且,你必须不时地更新节点软件。对我们来说,这包括从Github存储库中提取最新版本,编译新的可执行文件,并使用最新的稳定版本重新启动Geth和Lighthouse。对于我们的简单节点,我们只需重新编译并重新启动。而对于面向生产的节点来说,部署具有开发、组织和完全监控的生产环境更为适合。如果你不自己编译,你可以下载最新的预编译二进制文件并使用这些文件重启节点。此外,操作系统也需要更新。这对于避免操作系统层面的安全问题特别重要。

 

对于我们的节点来说,一开始有一个学习曲线来让节点连续运行。管理每个进程的RAM利用率是第一个障碍,因为在没有足够RAM的情况下,计算机会“随机”关闭。此外,最初该节点使用的是WiFi,而无线路由器由于数据过载而崩溃。解决了这些问题(即缓存限制和有线以太网)后,该节点已经连续运行了几个月而没有停机。

 

结论

 

使用消费级计算机硬件和基于住宅的互联网连接可以运行自己的本地以太坊节点。虽然对大多数用户来说,在本地运行从源代码编译的客户端(共识层和执行层)可能是一个挑战,但对于最常用的客户端来说,可以使用预编译的可执行程序。此外,设置一个SSD来存储区块链并让操作系统(OS)运行对大多数用户来说是一个挑战,但它仍然在一个有耐心和学习意愿的积极用户的能力范围内。

 

节点操作者的下一步是决定是否成为验证者。为此,节点必须在本地运行第三个客户端(Lighthousee也有一个验证者客户端),并且必须质押32个以太币。这比本节点的设置要复杂一些。此外,还应注意离线惩罚和和弄丢质押的以太币私钥可能带来的风险。因此,用户应该在运行之前了解自己在做什么。考虑到运行节点的复杂性,最好在运行你自己节点的至少一个月之后再做决定。

##### 注:本文转载自FastDaily,我司发表或转载上述内容,对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担责任。image