节点和客户端

以太坊是一个由计算机组成的分布式网络,这些计算机运行可验证区块和交易数据的软件,称为节点。

软件应用程序(客户端)必须在电脑上运行,将你的电脑变成一个以太坊节点。

注意:仍然可以仅运行执行客户端。 然而,在合并之后,将不再可以继续这样做。

合并后,执行客户端和共识客户端必须一起运行,以使用户能够访问以太坊网络。

一些测试网(例如 Kiln、Ropsten)已经完成了它们自己的合并,这意味着仅运行执行客户端已经不足以访问这些网络,除非执行客户端与可以跟踪链头的共识客户端连接在一起。

什么是节点和客户端?

“节点”是指任何以太坊客户端软件的实例,它连接到也运行以太坊软件的其他计算机,形成一个网络。

客户端是以太坊的实现,它根据协议规则验证数据并保持网络安全。

合并后的以太坊由两部分组成:执行层和共识层。 这两层网络是由不同的客户端软件运行。

在本页面,我们分别称他们为“执行客户端”和“共识客户端”。

执行客户端(也称为执行引擎、EL 客户端或旧称“以太坊 1”客户端)侦听网络中广播的新交易,在以太坊虚拟机中执行它们,并保存所有当前以太坊数据的最新状态和数据库。

共识客户端(也称为信标节点、CL 客户端或旧称“以太坊 2”客户端)实现了权益证明共识算法,使网络能够根据来自执行客户端的经过验证的数据达成一致。

在合并之前,共识层和执行层是独立的网络,以太坊上的所有交易和用户活动都发生在现在的执行层。

一个客户端软件为矿工生产的区块提供执行环境和共识验证。

2020 年 12 月后,共识层即信标链一直单独运行。

它引入了权益证明,并根据来自以太坊网络的数据协调验证者网络。

通过合并,以太坊连接这些网络并过渡到权益证明。

执行客户端和共识客户端共同验证以太坊的状态。

各种软件协同工作的模块化设计称为封装复杂性。

这种方法更轻松地实现了顺利合并,并支持各客户端的重用,例如在二层网络生态系统中的重用。

结构图

已连接执行客户端和共识客户端的简化图。

客户端多样性

执行客户端和共识客户端采用各种不同编程语言编写,并由不同团队开发。

多种客户端实现减少了对于单一代码库的依赖,使网络更强大。

理想的目标是实现多样性,即没有任何客户端在网络中占据主导地位,从而排除潜在的单点故障。

语言多样化令开发者社区更加广泛,并允许他们用自己喜欢的语言创建集成。

了解有关客户端多样性的更多信息。

这些实现的共同点是它们都遵循一种规范。 这些规范规定了以太坊网络和区块链如何运作。

规范定义了每个技术细节,并有以下几种形式:

  • 最初为以太坊黄皮书

  • 执行规范

  • 共识规范

  • 在各种网络升级中实现的以太坊改进提案

跟踪网络中的节点

多种跟踪器提供以太坊网络中节点的实时概览。

请注意,由于去中心化网络的性质,这些爬虫只能提供有限的网络视图,并且可能会报告不同的结果

  • 节点地图,由 Etherscan 提供

  • 以太坊节点,由 Bitfly 提供

  • 以太坊节点爬虫

  • Nodewatch 由 Chainsafe 提供,爬取共识节点

节点类型

如果你想运行自己的节点,就应该明白节点有几种不同类型并且使用数据的方式亦不同。

事实上,客户端可以运行三种不同类型的节点:轻节点、全节点和归档节点。

还有不同同步策略的选项,可以实现更快的同步时间。

同步是指节点能以多快的速度获取最新以太坊状态信息。

全节点

  • 存储全部区块链数据(会定期修剪,所以全节点并不存储包含创世块在内的所有状态数据)

  • 参与区块验证,验证所有区块和状态。

  • 所有状态都可以从全节点中获取(尽管非常久远的状态是通过向归档节点发出请求重建的)。

  • 为网络提供服务,并应要求提供数据。

轻节点

轻节点不下载所有区块,而是下载区块头。 这些区块头只包含区块内容的摘要信息。 轻节点所需的任何其他信息都从全节点请求。

然后,轻节点可以根据区块头中的状态根独自验证收到的数据。

轻节点可以让用户加入以太坊网络,无需运行全节点所需的功能强大的硬件或高带宽。

最终,轻节点也许能在手机和嵌入式设备中运行。

轻节点不参与共识(即它们不能成为矿工或验证者),但可以访问以太坊区块链,其功能与全节点相同。

执行客户端 Geth 有一个轻量同步选项。

然而,Geth 轻节点依赖于提供轻节点数据的全节点。

很少有全节点选择提供轻节点数据,这意味着轻节点通常无法找到对等节点。

共识层目前没有生产就绪的轻客户端,但是,有几个正在开发中。

可能还有一些方法可供在 gossip 网络上提供轻客户端数据。

这是有利的,因为 gossip 网络可以支持轻节点网络,而无需全节点来满足请求。

以太坊目前还不支持大量轻节点,但轻节点支持是一个有望在不久的将来快速发展的领域。

归档节点

存储全节点中保存的所有内容,并建立历史状态存档。

如果你想查询区块 #4,000,000 的帐户余额,或者想简单可靠地测试自己的一组交易而不使用跟踪挖掘它们,则需要归档节点。

这些数据以太字节为单位,这使得归档节点对普通用户的吸引力较低,但对于区块浏览器、钱包供应商和链分析等服务来说却很方便。

以归档以外的任何方式同步客户端将导致区块链数据被修剪。

这意味着,没有所有历史状态的存档,但全节点能够在需要时构建它们。

为什么我要运行一个以太坊节

….

拓展阅读

启动您自己的以太坊节点

客户端多样性

节点即服务

参考资料

https://ethereum.org/zh/developers/docs/nodes-and-clients/