# 以太坊节点和客户端的多样性

By [puluo](https://paragraph.com/@puluo) · 2022-08-01

---

[edition://0xF2cb51fA8568c232fDF6e830Aa3231493f1DCC52?editionId=0](https://etherscan.io/address/0xF2cb51fA8568c232fDF6e830Aa3231493f1DCC52)

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

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

许多以太坊执行客户端和共识客户端存在于多种编程语言中，例如 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，并将在合并后向执行客户端提供权益证明共识机制。

---

*Originally published on [puluo](https://paragraph.com/@puluo/CgusbLQ6m3thaYfW6YBc)*
