主页 > imtoken钱包地址 > 深入挖掘:为什么以太坊节点同步如此缓慢?

深入挖掘:为什么以太坊节点同步如此缓慢?

imtoken钱包地址 2023-08-29 05:10:44

在本文中,我们将详细了解在同步以太坊节点的过程中会发生什么?

同步以太坊节点对很多人来说是一件非常痛苦的事情。每个与以太坊接触的人都对此感到不好。

深入了解:为什么以太坊节点同步这么慢?

目前以太坊钱包默认的同步模式称为快速同步。与其重新处理从创世块开始的所有传输(可能需要数周时间),不如快速同步下载块,然后验证与工作​​量证明相关的数据。下载所有块很简单,但是一个快速的过程可以相对快速地重组整个区块链。很多人错误地认为,因为他们有块,他们正在同步。

不幸的是,这不是问题的症结所在,因为没有进行转账(也就是说,为了验证区块链的有效性,没有进行转账),所以我们没有任何账户状态(即余额、记录,智能合约代码和数据)。这些要求单独下载并与最新块进行交叉检查。这部分称为状态前缀树的下载,实际上与区块下载是并发运行的;同时它比下载块需要更长的时间。

那么,什么是状态前缀树?在以太坊主网上,有无数个账户,记录着每个用户的余额、数据等,

这些账户本身不足以运行节点一个节点放多少个以太坊地址好,它们需要与每个块一起加密,以便节点可以验证账户不是欺诈性的。这种加密连接是通过在帐户上创建树状数据结构来完成的,每个级别都连接到下面的级别,然后连接到更小的级别,直到您到达单个根数据。这种包含所有账户和中间密码证明的海量数据结构被称为状态前缀树。

那么为什么要问这个问题呢?这种树状数据结构由数百万个小型密码证明连接起来。为了得到一个同步节点,你需要下载所有账户的数据,而这些加密证明也验证了网络中没有任何东西试图欺骗你。. 这本身就已经是一个很夸张的数字了。更混乱的部分是这些数据在不断变化:每个块(15 秒),从树中删除大约 1000 个节点,然后添加大约 2000 个新节点。这意味着需要同步数据库的节点正在以每秒 200 次的速度变化。最糟糕的是,你在同步的时候,网络还在往前走,你下载的时候可能开始下载的状态很小一个节点放多少个以太坊地址好,所以你的节点需要一直跟随网络,并且还需要获取所有最近的数据。但是,当您实际获取所有数据时,您的本地节点无法使用它,因为它无法以加密方式证明任何帐户的任何信息。

如果你看到主网后面有 64 个区块,你就没有完全同步,甚至没有关闭。您只完成了区块下载部分,状态下载仍在进行中。您可以通过无尽的导入状态条目列表查看您自己的状态 [...]。您还需要等到您的节点出来后再上线。

问:节点只依赖于输入的状态?

A:节点没有暂停,只是事先不知道整个状态前缀树有多大,所以一直运行,直到找到并下载整个数据。

原因是以太坊区块中只有一个状态根,即根节点的单个哈希。当节点开始同步时,它会一直到 1 个节点并尝试下载。该节点,您最多可以定位 16 个新节点并尝试下载这些节点。随着我们继续下载,大多数节点将针对我们当时不知道的新节点进行基准测试。这就是为什么你需要考虑为什么它会停留在同一个数字上。随着时间的推移,节点会发现和下载树数据。

问:我在主网后被困在 64 个区块?

A:如上所述,您不再是持卡人,您刚刚完成了区块下载阶段,正在等待状态下载完成。这部分比下载块花费的时间要长得多。

Q:为什么下载状态需要这么长时间,我的带宽很高?

A:状态同步取决于磁盘 I/O,而不是带宽。

以太坊的状态前缀树包含数百万个节点,其中大部分节点对应一个哈希,最多对应 16 个其他哈希。在磁盘上,这是一个可怕的存储,因为其中几乎没有结构,只有随机数来反映更多的随机数。这会使底层数据库变得混乱,因为它没有优化存储并使用任何有意义的方式来查找数据。

不仅存储数据非常不理想,而且由于每秒 200 次更改和对过去数据的修改,我们甚至无法下载它,这是一种适当的预处理方法,可以在底层数据库不多的情况下使其导入速度更快。最终的结果是,即使是快速更新也会导致磁盘输入输出成本很高,这对机械硬盘来说是一个非常大的挑战。

问:所以,我不能用硬盘运行完整节点?

答:不幸的是,没有。与等待当前数据相比,在硬盘驱动器上进行快速同步需要更多时间。当您等待时,硬盘驱动器无法跟上主网传输处理的读写需求。

但是,您应该能够将硬盘驱动器用于轻型客户端,因为对系统资源的影响最小。如果你想运行一个完整的节点,那么 SSD 是唯一的选择。