主页 > imtoken苹果app > 什么是以太坊网络节点? 为什么以太坊节点同步这么慢?

什么是以太坊网络节点? 为什么以太坊节点同步这么慢?

imtoken苹果app 2024-01-25 05:10:10

什么是以太坊网络节点?

与其他区块链一样,以太坊具有点对点网络协议。 以太坊区块链数据库由连接到网络的众多节点维护和更新。 每个网络节点都运行一个以太坊模拟器并执行相同的指令。

以太坊是由称为以太坊节点或以太坊客户端的去中心化节点组成的网络架构。 任何拥有足够计算机硬件设备的人都可以作为节点加入以太坊网络,贡献算力获得区块挖矿奖励。 截至 2020 年 5 月,全球约有 5,756 个以太坊节点分布。

在目前的以太坊网络中,各个节点之间是相互平等的,相互之间实时通信,同步区块数据,打包交易(挖矿),以维持以太坊区块链的运行。

以太坊节点所做的工作如下:

接收交易:接收来自DApp、钱包或其他节点的交易信息。

接收区块:接收其他节点的区块信息,并同步到最新的区块高度。

验证:验证新区块的正确性,验证待处理交易的有效性。

执行:处理交易,执行计算和改变状态值,并将它们打包成新的区块。

挖矿:利用计算机算力计算出nonce值,最先找到nonce值出块并广播的矿工可以获得该块奖励和所有交易手续费(Gas)。

共识:通过共识机制达成全网账本或区块重组(reorg)的一致性。

以太坊不受任何人控制或拥有——它是一个由世界各地许多人创建的开源项目。 也正是这几千个分布在世界各地的节点不间断的工作,维系着以太坊区块链的正常运行。

为什么以太坊节点同步这么慢?

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

以太坊钱包目前默认的同步方式称为快速同步。 快速同步不是重新处理来自创世块的所有传输(这需要数周时间),而是下载块,然后只验证和工作量证明相关的数据。 下载所有区块很简单,但快速过程会相对快速地重组整个区块链。 很多人错误地认为,因为他们有块,所以他们正在同步。

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

那么以太坊的节点相当于什么,什么是状态前缀树呢? 在以太坊主网中,有无数的账户,这些账户会跟踪每个用户的余额、数据等,单靠这些账户是不足以运行一个节点的,它们需要与每个区块进行加密连接,以便节点可以验证账户是否有没有被欺诈。 这种加密连接是通过在账户上创建一个树状数据结构来完成的,每一级都连接到下面的级别,然后再连接到更小的级别,直到到达一个单一的根数据。 这个庞大的数据结构包含了所有的账户和中间的密码学证明,被称为状态前缀树。

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

如果你看到主网后面有 64 个区块,你就没有完全同步,甚至没有接近。 您刚刚完成块下载部分,状态下载仍在进行中。 您可以通过无穷无尽的导入状态条目查看您自己的状态 [...]。 您还需要等待它们在您的节点上线之前出现。

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

A:节点不会停顿,它只是事先不知道整个状态前缀树有多大,所以一直往前走,直到整个数据都被发现并下载下来。

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

问:我是否卡在了主网之后的 64 个区块?

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

Q:为什么下载状态要这么久,我有高带宽?

A:状态同步受限于磁盘 I/O,而非带宽。

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

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

问:那么,我不能使用硬盘来运行全节点吗?

答:很遗憾,这是不可能的。 与等待当前数据相比以太坊的节点相当于什么,在硬盘驱动器上进行快速同步将花费更多时间。 即使你等了,硬盘也跟不上主网传输处理的读写需求。

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