宇宙链 宇宙链
Ctrl+D收藏宇宙链

以太坊阶段式同步:重构完全同步模式(Full Sync)

作者:

时间:1900/1/1 0:00:00

阶段式同步重构自Go-Ethereum的完全同步模式,以实现更好的性能。

阶段式同步需要进行大量读写操作。虽然我们的目标是能够在机械硬盘上同步节点,但是我们仍建议使用固态硬盘。

顾名思义,阶段式同步需要依次执行10个阶段。

阶段式同步是如何运作的

Turbo-Geth客户端会向每个对等节点了解该节点的HEAD区块,然后依次执行每个阶段、寻找本地HEAD区块和对等节点的HEAD区块之间缺失的区块。

第一个阶段会设置本地HEAD区块。

各阶段会按顺序执行。在每个阶段执行期间,只有节点本地的状态达到目标状态,该阶段才会结束。

也就是说,在理想情况下,每个阶段只需执行一次,即可完成初始同步。

最后一阶段结束后,整个同步流程会重新开始,寻找新的区块头下载。

以太坊核心开发人员:自2020年以来只有0.04%的以太坊验证者被移除:金色财经报道,以太坊核心开发人员Superphiz表示,自2020年12月1日启动信标链以来,以太坊生态系统只削减了226个验证者,仅占524,060个验证者的0.04%。最大的削减事件之一发生在2021年2月4日,当时质押基础设施提供商Staked的75个验证器因生产竞争区块而被削减。Staked说,违反认证是由于“技术问题”造成的。

削减是一个验证者违反权益证明共识规则的过程,这通常会导致该验证者从网络中移除并削减一部分质押的以太坊。Superphiz表示,这种被大幅削减的可能性很小,这表明人们不应该因为这个特定原因而担心抵押ETH。Superphiz指出许多移除是由于“系统迁移失败”造成的。[2023/2/23 12:24:35]

如果你在两个阶段之间重启应用,应用会从第一阶段开始重启。

芝商所(CME)宣布推出微型比特币和以太坊期权:3月28日消息,芝商所(CME)宣布推出微型比特币和以太坊期权,一份期权合约代表 0.1 枚比特币或以太坊。(金十)[2022/3/28 14:23:00]

如果你在某个阶段执行期间重启应用,应用会从当前阶段开始重启,以完成该阶段。

每个阶段需要耗时多久?

通过下方的饼状图,我们可以看出每个阶段的耗时占比。虽然这些数据并不精确,但是足以作为参考。

重组/回退

如果区块链发生重组,我们需要“回退”部分同步数据。

回退指的是从最后一个阶段倒退回第一个阶段。但是,需要注意的一点是,我们执行完回退之后才会更新交易池,因此我们知道新的nonce。

回退的阶段顺序如下例所示。

state.unwindOrder=*Stage{

以太坊开发者:Etherscan可显示使用EIP-1559能节省的交易费用:以太坊开发者Tim Beiko发推表示,当前Etherscan页面已可显示使用EIP-1559能节省的交易费用。[2021/7/8 0:36:10]

??//Unwindingoftxpool(reinjectingtransactionsintothepoolneedstohappenafterunwindingexecution)

??stages,stages,stages,stages,stages,stages,stages,stages,stages,stages,

?}

通过?ETL?进行预处理

在将数据插入数据库之前,一些阶段会使用我们的ETL框架根据键值对数据进行排序。

这样就可以极大减少数据库写入放大的情况。

数据:以太坊链上交易次数一周下跌10%,Gas费与MEV三连跌:受到以太坊链上交易次数稳中有降的影响,今日以太坊Gas价格也处于较低水平。根据Etherscan的监测,5月25日以太坊链上交易次数约为128.94万次,较7日前减少了约9.52%,较5月9日创造的本月单日交易量最高值下降了约24.89%。

根据北京时间16:00的数据,如果用户想要以较低的速度(大约9分36秒)打包自己的交易,仅需支付31 gwei;如果想要以平均速度(大约30秒)打包交易,需要支付40 gwei的Gas价格;如果想要快速地(大约30秒)打包交易,需要支付47 gwei。

目前ERC20代币转账在低、中、高三种确认速度水平下需要分别支付的Gas费约为5.83美元、7.52美元和8.84美元。

从趋势来看,以太坊上的平均Gas价格已连续3天下降。 今日平均Gas价格为38 gwei,最高Gas价格为46 gwei,二者7日下跌均超过65%。目前,平均Gas价格处于自今年以来的较低水平。

受其影响, 最近3天MEV(最大可提取价值)也大幅减少。截至17:00,今天的MEV仅为1588.9 ETH,较昨日下降约64.73%,较3日前下降约为86.58%。(PAData)[2021/5/26 22:47:22]

因此,当我们生成索引或者说哈希值化状态时,我们会执行一个多步骤流程。

以太坊未确认交易为100,577笔:金色财经消息,据OKLink数据显示,以太坊未确认交易100,577笔,当前全网算力为239.32TH/s,全网难度为3.21P,当前持币地址为48,091,135个,同比增加103,855个,24h链上交易量为3,970,895.91ETH,当前平均出块时间为13s。[2020/9/30]

将处理过的数据写入位于数据目录的几个临时文件中;

然后使用一个堆栈把临时文件中的数据插入到数据库中,并且使按照能够最小化数据库写入放大现象的顺序插入数据。

这种优化有时会将写入速度提高几个数量级。

各阶段

每个阶段都包含两个函数,分别是向前推进阶段的ExecFunc?和向后回退阶段的?UnwindFunc。

从理论上来说,部分阶段可以离线工作,但是当前版本并未实现这一功能。

阶段1:下载区块头

在这一阶段,我们会下载本地HEAD区块和对等节点的HEAD区块之间的所有区块头。

这一阶段是CPU密集型的,适合使用多核处理器,因为要验证区块头的工作量证明。

由于区块链重组,大多数回退都是在这一阶段开始的。

这一阶段会推动本地HEAD的指针。

阶段2:区块哈希值

从区块头中抽取出一个从区块哈希值映射成区块号的索引表,以支持更快速的查找功能,并让同步过程对机械硬盘更为友好。

阶段3:下载区块体

在这一阶段,我们会将上一阶段已下载区块头的区块体也下载下来。

这一阶段需要保持良好的联网连接。绝大多数数据都在这一阶段下载。

阶段4:复原发送者

这一阶段会复原出并存储每个已下载区块中的每笔交易的发送者。

这一阶段同样是CPU密集型的,适合使用多核处理器。

这一阶段不需要联网。

阶段5:执行区块

在这一阶段,我们会执行之前下载的所有区块中的每一笔交易。

需要注意的一点是,在执行区块的过程中,我们不会验证根哈希,甚至不会创建默克尔树。

这一阶段是单线程的,无需联网,需占用大量磁盘空间。如果区块执行失败,可以回退该阶段。

阶段6:计算状态根

这一阶段会构建默克尔树,并验证当前状态的根哈希。

这一阶段也会构建中间哈希值,并将它们存储到数据库中。

如果之前没有存储任何中间哈希值,这一阶段会构建出完整的默克尔树及其根哈希。

如果数据库中没有中间哈希值,这一阶段就会利用区块的历史记录来弄清楚哪些哈希值已经过时,哪些哈希值是最新的,然后使用最新的哈希值来构建部分默克尔树,只重构过时的哈希值。

如果根哈希无法匹配,就会向后回退一个区块。

这一阶段不需要联网。

阶段7:生成哈希值化状态

在执行期间,Turbo-Geth使用无格式状态存储。

无格式状态:在标准状态中,账户和存储项的地址是?keccak256(address)?,但是在一般状态中,二者的地址就是?address?。

尽管如此,为了确保一些API能够正常运作并与其它客户端保持兼容,我们也会生成哈希值化状态。

如果哈希值化状态不是空值,我们会查看历史记录变更集,并且只更新已更改的项。

这个阶段不需要联网。

阶段8、9、10?:生成索引

同步期间会生成3个索引。

这3个索引可能会被禁用,因为所有API都不使用它们。

这一阶段不需要联网。

交易查询索引

该索引表由从交易哈希值到区块号的映射构成。

账户历史索引

该索引存储了从账户地址到区块列表的映射。

存储历史索引

该索引存储了从存储项地址到区块列表的映射。

阶段11:交易池

在这一阶段,我们会启动交易池或更新其状态。例如,如果我们已下载的区块中包含了某些交易,就把这些交易从交易池中移除。

在回退时,我们会将被回退的区块中的交易重新添加到交易池中。

这个阶段不需要联网。

原文链接:

https://github.com/ledgerwatch/turbo-geth/tree/master/eth/stagedsync

作者:?AlexSharov

翻译&校对:闵敏?&?阿剑

标签:以太坊STATAGETH以太坊行情币有什么用status币预测DataGOld币总量ETHw币官方近况

以太坊价格今日行情热门资讯
DC/EP真的要来了!Filecoin有望乘风而起?

2020年8月14日,商务部印发《全面深化服务贸易创新发展试点总体方案》,其中公布了数字人民币试点地区.

1900/1/1 0:00:00
ETP产品8月17日延迟恢复交易服务通知

尊敬的用户: 为了给您提供更好的交易体验,原定的14:00-14:10ETP产品暂停交易服务,将延迟至14:30.

1900/1/1 0:00:00
WBF关于OPEN API优化升级的公告

尊敬的用户: 为了提升服务质量,进一步优化API交易体验,WBF已于新加坡时间2020年8月17日对API进行优化升级。本次更新内容如下:1.接口加密验证升级:签名方式从MD5升级为HmacSHA256.

1900/1/1 0:00:00
币海生金:大饼开始发力晚间是否突破12000 BTC晚间操作策略

晚间复盘:虽未回调到达预定进场点位但整体思路没有任何问题,午间后回调后进入上行趋势,最高突破目标11900,晚间思路维持白盘思路不变回调做多,关注下方11800第一支撑位,不破可进场多单.

1900/1/1 0:00:00
火币发起 DeFi 联盟,联合 Maker、Compound、NEST 社区、dYdX 共同成立

DeFi联盟由MakerDAO、Compound、NEST社区、dYdX共同发起,将推进DeFi研发,建立通用协议和标准,促进全球跨境协作和生态系统发展.

1900/1/1 0:00:00
区块链关键技术 在国内外发展有何侧重?

导读 国内外针对区块链技术的发展重点、部署策略和研发过程都有所不同。国内外区块链发展几乎同时起步,从全球来看,全球区块链发展正从全面否定与全面推崇的感性认识趋于理性认识,国外内都更加专注于探索区块链潜在的应用价值和商业模式.

1900/1/1 0:00:00