Geth和Parity(现已改名Open Ethereum)可以说是两个最常见的以太坊客户端。因此,我们将通过本文详细介绍如何运行这些客户端。
当我们在这篇技术文章中提及“节点”一词时,我们指的是以太坊客户端。
以太坊客户端是指某个实现以太坊规范,并通过点对点网络与其他以太坊客户端进行通信的软件应用程序。如果不同的以太坊客户端都遵从参考规范和标准化通信协议,那么它们可以相互操作。尽管这些不同的客户端由不同的团队以不同的编程语言实现,但它们都“说”相同的协议,并遵循相同的规则。如此一来,这些客户端都可以用于与同一个以太坊网络进行操作和交互。 ——Andreas M.Antonopoulos《精通以太坊》
Geth和Parity(现已改名Open Ethereum)可以说是两个最常见的以太坊客户端。因此,我们将通过本文详细介绍如何运行这些客户端。
图1 以太坊客户端相关信息 来源:https://github.com/ConsenSys/ethereum-developer-tools-list#ethereum-clients
作为以太坊网络的参与者,我们所享受的客户端多样性表明这是一个健康的生态系统。尽管存在众多不同的客户端,并且这些客户端都是各自独立开发的、具有各自的功能集,但它们仍可与其他以太坊客户端实现互操作。网络内部的互操作性非常重要,因为它进一步促进了诸如“远程客户端”以及“钱包”一类的软件的采用,从而改善大众用户的体验。
在这里,首先你要读懂一些新的术语。我们从左往右依次进行介绍:
运行全节点意味着你正在计算机上运行以太坊网络的完整实现。这种做法的鲁棒性最好。然而,为了支持全节点同步及进行相关维护工作,你需要花费不少的时间、精力以及相关的硬件和带宽成本。
在以太坊上开发并不需要运行全节点。
一个全节点需要超过80 GB的磁盘存储空间来存储以太坊的链数据。链数据是指一条从创世区块到最新的最优区块的不断扩展的链。
以太坊全节点的公认标准是:完全同步且验证从创世区块到具有最高累积工作量的最新最优区块的所有交易、合约部署及执行过程;重新计算从创世区块到最新最优的每一个连续区块的状态;在磁盘上记录下从创世区块到最新最优的所有的历史区块;在维护最新状态的同时,对久远的数据进行修建。
在本文中,全节点的含义就清楚了:从创世区块到累积工作量最大的最新最优区块的所有区块数据都存储在全节点的磁盘上。全节点可以修剪状态数据,因为当节点保留所有历史区块的记录时,它随时可以重新计算任何历史状态。
(https://dev.to/5chdn/the-ethereum-blockchain-size-will-not-exceed-1tb-anytime-soon-58a)
Geth和Parity客户端均支持更快的同步模式,其分别为“快速同步(fast sync)”和“压缩同步(warp sync)”。每个客户端实际同步的方式会有细微的差异。
完全同步
当Geth节点进行完全同步时,它从创世区块开始,并逐个区块地处理每一笔连续的交易,直到到达最新的最优区块。这是一个十分耗时的过程。
当Geth节点进行快速同步时,它在下载所有区块的同时,并行下载交易收据(而不是处理每一笔连续的交易),然后提取完整的最新状态数据库,之后如上所述切换到完全同步模式。
当Parity节点不进行压缩,而是直接进行存档同步时,它从创世区块开始,逐个区块地处理每一笔连续的交易,直到达到最新的最优区块。在这个过程中,它计算并保存每个区块的所有状态数据。这是一个既耗时又耗费存储的过程。
当Parity节点不进行压缩,而是直接进行快速同步时,它从创世区块开始,逐个区块地处理每一笔连续的交易,直到到达最新的区块。在这个过程中,它会修剪久远的状态,并在磁盘上保留最新状态。这是一个耗时的过程。
当Parity节点进行压缩且快速同步时,它将跳过几乎所有的区块处理过程,而是直接将适当的数据注入数据库。压缩同步从网络中获取最新的快照,将其还原,然后继续同步新的得到验证的区块。
轻节点意味着你正在运行以太坊网络的被缩减过的实现。轻节点仅验证区块头和其他需要验证的内容。
补充阅读
以太坊轻客户端协议规范:
https://github.com/ethereum/wiki/wiki/Light-client-protocol
作者:Wil
原文链接:
https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!