什么是以太坊节点和客户端

节点是运行以太坊客户端软件的计算机。也就是说用户需要在设备上有一个应用程序,即所谓的客户端,来运行节点。以太坊客户端可以验证每个区块中的所有交易,保持网络安全和数据准确。在以太坊合并之前,运行一个全节点需要一个软件(或两个运行一个挖矿节点)。在以太坊合并之后,需要两个客户端软件来运行一个全节点(三个来运行一个验证节点)。一个来处理和传输交易(执行客户端),一个来处理区块传输和分叉选择(共识客户端)以及一个可选的验证客户端,用于处理区块生产和对从同类型节点接收到的区块进行“投票”。

许多以太坊执行客户端和共识客户端存在于多种编程语言中,例如 Go、Rust、JavaScript、Typescript、Python、C#.NET、Nim 和 Java。这些客户端共同点是都遵循同一个规则,并影响以太坊网络和区块链功能运行方式。

节点类型

事实上,客户端可以运行 3 种不同类型的节点——全节点(full)、轻节点(light)、和归档节点(archive)。

全节点

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

  • 存储完整的区块链数据。
  • 参与区块验证,验证所有区块和状态。
  • 所有状态都可以从全节点导出。
  • 提供网络服务,并根据请求提供数据。

轻节点

轻节点不是下载每个区块,而是下载区块头(block headers)。这些标头仅包含有关区块内容的概括信息。以太坊目前还不支持大量的轻节点,但轻节点支持是一个有望在不久的将来快速发展的领域。

  • 轻节点所需的任何其他信息都从全节点请求。
  • 轻节点可以根据区块头中的状态根独立验证数据的有效性。
  • 轻节点使用户能够参与以太坊网络,而无需强大的硬件或运行全节点所需的高带宽。
  • 轻节点可能会在手机或嵌入式设备上运行。轻节点不参与共识(即它们不能是矿工/验证者),但它们可以使用与全节点相同的功能访问以太坊区块链。

归档节点

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

  • 存储保存在全节点中的所有内容,并建立历史状态的存档。如果你想查询#4,000,000区块的账户余额,或者简单而可靠地测试你自己的交易数据集,而不使用OpenEthereum挖掘它们,则需要此功能。
  • 这些数据以兆兆字节(terabytes)为单位,这使得归档节点对普通用户的吸引力不大,但对于区块浏览器、钱包供应商和区块链分析等服务来说却很方便。

总之,要想获得链上数据,就需要建立全节点、轻节点以及归档节点。Tokenview就建立了这样的节点集群。作为以太坊生态的节点之一,Tokenview也是以太坊节点的服务提供商。截止目前,已为10000+家企业提供了以太坊数据 API服务及节点搭建服务。通过稳定、快速的数据接口实时调取区块链数据,可免除自建节点、同步区块、空间占用、运维等成本。

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

对个人的好处

运行自己的节点能够以真正私有、自给自足和去信任的方式使用以太坊。无需信任网络,自行通过客户端验证数据。“Don't trust, verify”就是一个非常受欢迎的流行区块链口号。

  • 节点会根据共识规则自行验证所有交易和区块。这意味着不必依赖网络中其它节点,也不必完全信任他们。
  • 不必将地址和余额泄露给随机节点。一切都可以通过自己的客户端核实。
  • 如果使用自己的节点,Dapp可以更加安全和私密,Metamask,MyEtherWallet和其他一些钱包可以轻松地指向本地节点。
  • 使用自己的节点可以编写自定义的 RPC 端点。
  • 可以使用Inter-process Communications (IPC) 连接到自己的节点或重写节点以插件的形式加载你的程序。这提供了低延迟,这对于尽可能快地替换你的交易(即抢先交易)是必需的。

对网络的好处

多样化的节点对以太坊的健康、安全和运行弹性非常重要。

  • 它们为依赖于区块链数据的轻节点提供访问区块链数据的机会。 在使用高峰期,需要有足够多的全节点来帮助轻节点同步。轻节点不存储整个区块链,而是通过区块头中的状态根来验证数据。如果需要的话,它们可以从区块中请求更多的信息。
  • 全节点强制执行PoW共识机制,它们不接受不遵循规则的区块。这为网络提供了额外的安全性,因为如果所有节点都是轻节点,不进行全面验证,区块生产者可能会攻击网络,例如创建奖励更高的区块。

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

执行客户端(原ETH1客户端)

以太坊社区维护着多个开源执行客户端(以前称为“Eth1 客户端”,或简称为“以太坊客户端”),由不同团队使用不同的编程语言开发。这使得网络更强大和多样化。理想的目标是在没有任何客户端主导的情况下实现多样性,以减少任何单点故障。

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

(2)OpenEthereum是一个快速、功能丰富的以太坊客户端,提供快速可靠的服务所需基础架构,这些服务需要快速同步和最大限度的运行时间。注意:OpenEthereum已被弃用,不再进行维护。最好切换到另一个客户端实现。

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

  • 性能优化的虚拟机。
  • 状态访问。
  • 网络和丰富的功能,如Prometheus/Graphana仪表盘、seq企业日志支持、JSON RPC追踪和分析插件。

Nethermind也拥有详细的文档,强大的开发支持,在线社区以及为高级用户提供全天候支持。

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

(5)Erigon(原Turbo‐Geth)是Go以太坊的一个分叉,以速度和磁盘空间效率为目标。Erigon是一个完全重新架构的以太坊实现,目前用Go编写,但计划用其他语言实现。Erigon的目标是提供更快、更模块化、更优化的以太坊实现。它可以在3天内使用不到2TB的磁盘空间执行完全归档节点同步。

共识客户端(原ETH2客户端)

有多个共识客户端(以前称为“ETH2”客户端)来支持共识升级。它们正在运行Beacon Chain,并将在合并后向执行客户端提供权益证明共识机制。

参考文章:https://ethereum.org/en/developers/docs/nodes-and-clients/