火星独家 | 一文深度解读以太坊节点运作机制和客户端多样性

以太坊

编译 | Bite@火星财经APP

11月11日,Infura的意外状况让以太坊充提出现宕机,Infura为什么能产生这么大的影响?其实,通俗一点讲,Infura就是一个可以让DAPP或者交易所快速接入以太坊平台,而不需要本地运行以太坊节点。本篇文章将针对以太坊节点做深度解读,希望对成为以太坊2.0信标链的验证者节点有所帮助。

延伸阅读:

火星独家 | 参与以太坊2.0质押没有32个ETH怎么办?这些机构了解一下

火星独家 | 牛市发动机启动,深度解析ETH 2.0六大看点

火星独家 | 为什么说以太坊2.0是“懒惰验证者的安全天堂”?

在深入了解并运行以太坊客户端实例之前,应该了解去中心化网络的概念。

1. 什么是节点和客户端?

以太坊去中心化运行工作方式需要一个可以验证区块和交易数据的分布式节点网络。用户需要在设备上有一个应用程序,即所谓的客户端,来运行节点。

以太坊是由分散式节点所组成的网路架构,这些节点称为以太坊节点或以太坊客户端。以太坊客户端可以验证每个区块中的所有交易,保持网络安全和数据的准确性。

通过网站(点击查看)可以看到以太坊网络节点的实时视图,截至11月18日,分布在全世界各地的以太坊节点总共约139万左右。(最近数量激增)

以太坊

以太坊客户端存在各种语言中(下文详述),这些客户端共同点是都遵循同一个规则,并影响以太坊网络和区块链功能运行方式。

以太坊

2. 节点类型

如果想成为节点,应该了解不同种类数据节点。事实上,客户端可以运行3种不同类型的节点–轻节点、全节点和归档节点此外,还可以选择不同的同步策略,从而实现更快的时间同步(同步指的是如何快速获得以太坊状态的最新信息)。

(1)全节点

全节点是拥有完整区块链帐本资料的节点,具备独立验证的能力来确认交易之有效性。主要在处理下列四件事:

a. 存储区块链完整数据;

b. 参与区块验证,验证所有区块和状态;

c. 所有状态都可以从一个完整的节点中导出;

d. 为网络提供服务,并根据请求提供数据;

(2)轻节点

轻节点顾名思义即是轻量级的节点,具体定义是不储存或维护完整的区块链副本,只储存最小量的状态来作为发送或传递交易讯息的节点。

a. 存储标头链;

b. 可以对照区块标头中的状态根验证数据的有效性;

c. 对于低容量、无法承受存储千兆字节的区块链数据的设备很有用,比如嵌入式设备或手机;

(3)归档节点

归档节点是在全节点的基础之上,额外储存了每个区块高度的区块状态,包括个人帐户与合约帐户之当时余额等信息,即针对每个区块高度当下的状态进行快照并存档。

a. 存储所有保存完整节点的内容,并建立历史状态的归档。

b. 这些数据以兆兆字节为单位,使得归档节点对普通用户吸引力不大,但对于区块探索者、钱包供应商和链分析等服务来说却很方便。

除存档以外的任何模式同步客户端,都会导致区块链数据的删除。归档节点能让你快速回到某个区块高度去查询当下状态。归档节点 保存了区块链上的完整历史纪录与资料,以及所有区块高度的当时全网状态。

3. 为什么要运行以太坊节点? 

运行自己的节点可以通过去信任方式使用以太坊,无需信任网络,自行用客户端验证数据。“Don’t trust, verify”就是一个非常受欢迎的流行区块链口号。节点根据共识规则验证所有交易和区块,意味着不必依赖网络中其它节点,也不必完全信任他们。

如果使用自己的节点,Dapp可以更加安全和私密,MetamaskMyEtherWallet和其他一些钱包可以轻松地指向本地节点。

以太坊

4. 网络效益

多样化节点对以太坊的健康、安全和运行弹性至关重要。它们为依赖区块链的轻节点提供访问区块链数据的机会。在使用高峰期,需要有足够的完整节点帮助轻节点同步。轻节点不存储整个区块链,而是通过区块标头中的状态根来验证数据。如果需要的话,可以从区块中请求更多的信息。

全节点执行工作证明共识机制,它们不接受不遵循规则的区块,这在网络中提供了额外的安全性。如果所有的节点都是轻节点,不做全面验证,矿工可能会攻击网络,例如创建具有更高奖励的区块。

如果运行全节点,整个以太坊网络都会从中受益。

5. 提供商

运行自己的节点可能比较困难,在这种情况下,你可以使用第三方API提供商,如Infura、Alchemy或QuikNode。另外ArchiveNode是一个由社区资助的归档节点,将以太坊区块链上的归档数据给那些买不起的独立开发者。

如果有人在社区中运行带有公共API的以太坊节点,你可以通过Custom RPC将轻钱包(如MetaMask)指向社区节点,这样比随机受托的第三方更具隐私。

另一方面,如果你运行一个客户端,你可以与你的朋友分享,他们可能需要它。

6. 客户端

不同团队使用不同的编程语言开发以太坊客户端,这使得网络更加强大和多样化。理想目标是在没有任何客户端主导的情况下实现多样性,以减少任何单点故障。

这个表格总结了不同的客户端,这些客户端都在积极地工作、维护,并通过客户端测试。

以太坊

每个客户端都有独特的用例和优势,可以根据自己的喜好来选择,客户端的多样性可以集中在不同功能和用户受众上。你可能希望根据功能、支持、编程语言或许可证来选择客户端。

(1)Geth

Go Ethereum(简称Geth)是以太坊协议的原始实现之一。目前,它是受众最广泛的客户端,拥有最大用户群,为用户和开发者提供各种工具。它是用Go语言编写,完全开源,并采用GNU LGPL v3授权。

(2)Open Ethereum

OpenEthereum是一个快速、功能丰富的以太坊客户端,提供快速可靠的服务所需基础架构,这些服务需要快速同步和最大限度的运行时间。OpenEthereum的目标是成为最快、最轻、最安全的以太坊客户端。它提供了一个干净、模块化的代码库,具有以下优势:

a. 易于定制

b. 轻集成到服务或产品中

c. 最小内存和存储空间占用

OpenEthereum使用最新Rust编程语言开发,并以GPLv3进行授权。

(3)Nethermind

Nethermind是用C# .NET技术栈创建的以太坊实现,包括ARM在内的所有主要平台上运行。它提供了强大的性能,包括:

a. 性能强劲的虚拟机;

b. 状态访问;

c. 网络和丰富功能,如Prometheus/Graphana仪表盘、seq企业日志支持、JSON RPC追踪和分析插件。

(4)Besu

Hyperledger Besu是一个用于公共网络和许可网络的企业级以太坊客户端。它运行所有以太坊主网功能,从追踪到GraphQL,具有广泛的监控,并由ConsenSys支持,无论是在开放的社区渠道还是通过企业的商业SLA。它是用Java编写的,并获得Apache 2.0许可。Hyperledger Besu是一个以Apache 2.0许可开发并以Java编写的开源以太坊客户端。它运行在以太坊公共网络,专用网络以及测试网络(如Rinkeby,Ropsten和Grli)上。Besu实施工作量证明(Ethash)和权限证明(IBFT 2.0和Clique)共识机制。

7. 硬件

每个客户端对硬件的要求不同,但一般都不高,节点只需要保持同步即可。不要把它和挖矿混为一谈,挖矿需要更多的计算能力。不过,同步时间和性能确实会随着更强大的硬件而提高。根据需求和要求,以太坊可以在电脑、家庭服务器、单板电脑或云端的虚拟专用服务器上运行。

运行自己的节点的一个简单方法是使用像DAppNode这样的“即插即用”盒子。它为运行客户端和依赖客户端的应用程序提供了硬件,并提供简单的用户界面。

8. 配置要求

在安装任何客户端之前,请确保计算机有足够的资源来运行。最低和推荐的要求可以在下面找到,然而关键部分是磁盘空间。同步以太坊区块链是非常重视输入/输出。最好有一个固态硬盘(SSD),在HDD上运行以太坊客户端,你需要至少8GB的RAM作为缓存。

(1)最低配置

最低双核CPU;

最低4GB内存与SSD,硬盘空间8GB以上;

8 MBit/s带宽;

(2)推荐配置

4核CPU;

16GB以上内存;

高速固态硬盘,至少500GB的可用空间;

25+MBit/s带宽;

根据使用的软件和同步模式,需要数百GB的磁盘空间。大概的数字和增长情况可以在下面找到。

以太坊

运行以太坊节点最方便、最便宜的方式是使用Raspberry Pi等ARM架构的单板电脑。ARM 中以太坊提供了Geth、Parity、Nethermind和Besu客户端的图片。像这样小巧、实惠、高效的设备是在家里运行节点的理想选择。

参考文章:

NODES AND CLIENTS