阶段式同步重构自Go-Ethereum的完全同步模式,以实现更好的性能。
阶段式同步需要进行大量读写操作。虽然我们的目标是能够在机械硬盘上同步节点,但是我们仍建议使用固态硬盘。
顾名思义,阶段式同步需要依次执行10个阶段。
阶段式同步是如何运作的
Turbo-Geth客户端会向每个对等节点了解该节点的HEAD区块,然后依次执行每个阶段、寻找本地HEAD区块和对等节点的HEAD区块之间缺失的区块。
第一个阶段会设置本地HEAD区块。
各阶段会按顺序执行。在每个阶段执行期间,只有节点本地的状态达到目标状态,该阶段才会结束。
也就是说,在理想情况下,每个阶段只需执行一次,即可完成初始同步。
最后一阶段结束后,整个同步流程会重新开始,寻找新的区块头下载。
分析:比特币价格与加密交易所的USDT供应量负相关关系:一项新的分析表明,比特币价格与USDT在加密货币交易所的总供应量呈负相关关系。根据该报告,交易所中USDT数量下降可能很快推动BTC价格再次上涨。
加密货币监测公司Santiments编制的新数据将比特币价格在过去三个月的走势与交易所的USDT总供应量联系起来。从2月份开始,当时BTC交易价约为9500美元,交易所的USDT供应量相对较低。然而,在接下来的几周里,交易所的USDT供应量大幅增长,并在3月中旬达到三个月来的最高水平。与此同时,黑色星期四比特币价格大幅下跌,仅在几个小时内就下跌约50%。在大规模抛售之后,价值超过10亿美元的各种稳定币被存储在交易所。
自3月中旬以来,比特币一直在复苏,并且交易所的USDT供应量一直很高。然而,比特币最近经历了一次飙升,经过几天的波动,目前徘徊在9000美元左右。同时,交易所的USDT供应量一直在下降。
因此,Santiment得出结论,图表“清楚地表明,比特币的价格与交易所的USDT供应量之间存在负相关关系。随着稳定币USDT的这一指标下降,比特币有可能进一步推向9000美元甚至更高。”(Cryptopotato)[2020/5/5]
如果你在两个阶段之间重启应用,应用会从第一阶段开始重启。
分析:比特币隐含波动率上升是价格持续波动的迹象:一个月的已实现波动率图表显示,比特币价格的已实现波动率从1月27日开始遵循上升模式,为55%,并持续上升;直到2月8日波动率下降,达到52%。继3%的下跌之后,2月15日又出现一次大幅下跌,波动率几乎下降10%。但从2月15日开始已实现波动率持续上升,从2月15日的42%飙升至2月27日的57%,涨幅达15%。Skew数据显示,比特币隐含波动率(IV)正在上升。几周前,3个月IV从1万美元价格回调期间的3.5%高点降至3.2%。从2月23日至27日,一个月期间IV上升7%。在27日之后,IV没有显著变化,而且比特币价格相当稳定。然而从28日开始,IV开始缓慢上升。比较上述两张图表,2月18日至19日的价格跌幅并不是很大,从隐含波动率图表可以看出,波动率没有太大变化。然而,如第二张图表所示,2月24日至26日价格大幅下跌表明,波动性明显上升。由于比特币价格目前在9000美元附近,两者之间看不到太大波动,但波动模式的缓慢上升不容忽视。通过以上分析可预测,在不久的将来,比特币价格将继续波动,第三次减半在即,由于市场的表现,未来可能会经历更大的波动。(AMBCrypto)[2020/2/29]
如果你在某个阶段执行期间重启应用,应用会从当前阶段开始重启,以完成该阶段。
分析 | ethnews分析:以太坊或将进一步上涨至130美元:据ethnews分析,以太坊的价格突破了几个重要阻力位。ETH / USD在日线图上显示出积极迹象,表明将进一步上涨。在日线图上,以太坊100美元附近形成明显的底部形态,同时在100美元附近发现有强劲的买盘现象。因此,成功突破120美元的水平可能会使得以太坊进一步上涨至125美元和130美元的水平。同时,如果出现回调,下一个关键支撑位在110美元附近。[2019/2/11]
每个阶段需要耗时多久?
通过下方的饼状图,我们可以看出每个阶段的耗时占比。虽然这些数据并不精确,但是足以作为参考。
重组/回退
如果区块链发生重组,我们需要“回退”部分同步数据。
回退指的是从最后一个阶段倒退回第一个阶段。但是,需要注意的一点是,我们执行完回退之后才会更新交易池,因此我们知道新的nonce。
动态 | Parity以太坊节点软件更新已修复RPC漏洞:在8月29日发布的博客文章中,区块链软件开发公司Parity宣布已发布其以太坊节点软件更新,修复了远程过程调用(RPC)漏洞。虽然Parity预计运行其软件的大多数节点不受影响,但该公司仍建议运行Parity以太坊节点的所有节点都更新到此最新版本。(cointelegraph)[2019/8/30]
回退的阶段顺序如下例所示。
state.unwindOrder=*Stage{
??//Unwindingoftxpool(reinjectingtransactionsintothepoolneedstohappenafterunwindingexecution)
??stages,stages,stages,stages,stages,stages,stages,stages,stages,stages,
声音 | 以太坊联合创始人:Libra更似一台性能良好的监控器:以太坊联合创始人Mihai Alisie近日对Libra发表个人看法。其表示:“Libra更似一台性能良好的监控器,积极操纵着人们的一举一动。”理论上,分布式计算系统的一个重要元素是没有任何一个组织能够审查交易,或制定成为某区块链网络的成员的门槛。然而,Facebook推出的Libra却将区块链所特有的特性给扼杀了。Facebook希望将Libra支付网络推广到100家公司中。对此,Alisie预见的风险是:用户的交易掌控在这些大公司手中,他们可以封锁或冻结用户的交易,而这些情况在比特币或以太坊上是不可能发生的。[2019/7/12]
?}
通过?ETL?进行预处理
在将数据插入数据库之前,一些阶段会使用我们的ETL框架根据键值对数据进行排序。
这样就可以极大减少数据库写入放大的情况。
因此,当我们生成索引或者说哈希值化状态时,我们会执行一个多步骤流程。
将处理过的数据写入位于数据目录的几个临时文件中;
然后使用一个堆栈把临时文件中的数据插入到数据库中,并且使按照能够最小化数据库写入放大现象的顺序插入数据。
这种优化有时会将写入速度提高几个数量级。
各阶段
每个阶段都包含两个函数,分别是向前推进阶段的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
翻译&校对:闵敏?&?阿剑
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。