阶段式同步(staged sync)重构自 Go-Ethereum 的完全同步模式(full sync),以实现更好的性能。
阶段式同步需要进行大量读写操作。虽然我们的目标是能够在机械硬盘上同步节点,但是我们仍建议使用固态硬盘。
顾名思义,阶段式同步需要依次执行 10 个阶段。
Turbo-Geth 客户端会向每个对等节点了解该节点的 HEAD 区块(即最新区块),然后依次执行每个阶段、寻找本地 HEAD 区块和对等节点的 HEAD 区块之间缺失的区块。
第一个阶段(下载区块头)会设置本地 HEAD 区块。
各阶段会按顺序执行。在每个阶段执行期间,只有节点本地的状态达到目标状态,该阶段才会结束。
也就是说,在理想情况下(没有出现网络中断、应用没有重启等问题),每个阶段只需执行一次,即可完成初始同步。
以太坊突破1900美元/枚:金色财经报道,行情显示,以太坊突破1900美元/枚,日内涨2.16%。[2023/4/26 14:28:10]
最后一阶段结束后,整个同步流程会重新开始,寻找新的区块头下载。
EthStorage获以太坊基金会资助,将用于以太坊L1合约的L2动态数据集存储证明研究:2月23日消息,以太坊基金会于近日公布2022年第四季度受赠项目及分配信息,EthStorage再获殊荣,所得资助将用于以太坊L1合约的L2动态数据集存储证明研究。在此之前,EthStorage团队已获以太坊基金会官方对于数据可用(Data Availability)研究的资助。
据悉,Layer2 Community Grants 2022是一项由以太坊基金会资助的赠款计划,以鼓励围绕Layer2应用程序开发和用户教育。本轮资助总额原计划为75万美元,由于提案质量很高,以太坊基金会将预算提升至94
以太坊NFT二层扩容方案ImmutableX将于3月21日公布2项重大更新:3月15日消息,据官方网站及推文内容显示,以太坊 NFT 二层扩容方案 ImmutableX 将于未来 2 个月公布 4 项重大更新,官方认为该更新系 IMX「史上最大一次 Token 效用升级,将永久改变 IMX 的基础」。据悉,其中 2 项升级将于北京时间 3 月 21 日凌晨公布[2023/3/16 13:06:38]
通过 ETL 进行预处理
在将数据插入数据库之前,一些阶段会使用我们的 ETL 框架根据键值对数据进行排序。
这样就可以极大减少数据库写入放大(write amplification)的情况。
因此,当我们生成索引或者说哈希值化状态(Hashed State)时,我们会执行一个多步骤流程。
数据:近24小时以太坊2.0合约质押新增9504ETH:据欧科云链链上大师数据显示,截至上午10时,以太坊2.0存款合约地址已收到628.89万ETH,占当前以太坊供应量的5.39%,近24小时新增9504ETH。[2021/7/15 0:53:29]
将处理过的数据写入位于数据目录的几个临时文件中;
然后使用一个堆栈(heap)把临时文件中的数据插入到数据库中,并且使按照能够最小化数据库写入放大现象的顺序插入数据。
这种优化有时会将写入速度提高几个数量级。
每个阶段都包含两个函数,分别是向前推进阶段的ExecFunc 和向后回退阶段的 UnwindFunc。
从理论上来说,部分阶段可以离线工作,但是当前版本并未实现这一功能。
阶段 1 :下载区块头
湘潭县局天易派出所破获一起以太坊币盗窃案:湖南省湘潭县局官方微博称,1月18日,湘潭县天易派出所接到杨某某报警称自己手机IMTOKEN钱包内的3.9个以太坊数字货币不见了,损失价值大约在19000元左右。民警迅速赶到现场详细了解该新型犯罪的作案手段和过程,围绕数字货币及IMTOKEN电子钱包进行系统学习,并查阅相关法律条文,通过询问杨某某及分析梳理平台交易记录和异常数据,确定白石镇的马某某有重大作案嫌疑。
1月27日,迫于机关抓捕压力,马某某主动到派出所投案自首。经讯问:马某某如实交代了其趁帮杨某某操作手机时,窃取杨某某IMTOKEN钱包助记词(密码),后私自登陆其账户将杨某某账户内的3.9个以太坊币分两次卖掉的犯罪事实。目前,马某某已被机关依法刑事拘留,追回赃款19700元已返还受害人,案件仍在进一步办理中。[2021/1/28 14:14:17]
在这一阶段,我们会下载本地 HEAD 区块和对等节点的 HEAD 区块之间的所有区块头。
Circle向以太坊网络再度增发1,884万枚USDC:据DAppTotal.com稳定币专题页面数据显示:09月20日23时48分 ,USDC发行方Circle向以太坊网络新增发1笔价值1,884万美元的USDC, 块高度为:10900135,交易哈希值为:0x35602d3f041495e3a8e990058aa844be1082f2164bf3f5dcb0b0e489117a7797 。截至目前,Circle在以太坊网络上的ERC20 USDC总发行量已达2,341,168,165枚。[2020/9/21]
这一阶段是 CPU 密集型的,适合使用多核处理器,因为要验证区块头的工作量证明。
由于区块链重组,大多数回退都是在这一阶段开始的。
这一阶段会推动本地 HEAD 的指针(指向更新的区块)。
阶段 2 :区块哈希值
从区块头中抽取出一个从区块哈希值映射成区块号(blockHash -> blockNumber)的索引表,以支持更快速的查找功能,并让同步过程对机械硬盘更为友好。
阶段 3 :下载区块体
在这一阶段,我们会将上一阶段已下载区块头的区块体也下载下来。
这一阶段需要保持良好的联网连接。绝大多数数据都在这一阶段下载。
阶段 4 :复原发送者
这一阶段会复原出并存储每个已下载区块中的每笔交易的发送者。
这一阶段同样是 CPU 密集型的,适合使用多核处理器。
这一阶段不需要联网。
阶段 5 :执行区块
在这一阶段,我们会执行之前下载的所有区块中的每一笔交易。
需要注意的一点是,在执行区块的过程中,我们不会验证根哈希,甚至不会创建默克尔树。
这一阶段是单线程的,无需联网,需占用大量磁盘空间。如果区块执行失败,可以回退该阶段。
阶段 6 :计算状态根
这一阶段会构建默克尔树,并验证当前状态的根哈希。
这一阶段也会构建中间哈希值(Intermediate Hashes),并将它们存储到数据库中。
如果之前没有存储任何中间哈希值(这种情况可能在第一个初始同步期间发生),这一阶段会构建出完整的默克尔树及其根哈希。
如果数据库中没有中间哈希值,这一阶段就会利用区块的历史记录来弄清楚哪些哈希值已经过时,哪些哈希值是最新的,然后使用最新的哈希值来构建部分默克尔树,只重构过时的哈希值。
如果根哈希无法匹配,就会向后回退一个区块。
阶段 7 :生成哈希值化状态
在执行期间,Turbo-Geth 使用无格式状态存储(Plain state storage)。
无格式状态(Plain State):在标准状态(我们称之为 “哈希值化状态”)中,账户和存储项的地址是 keccak256(address) ,但是在一般状态中,二者的地址就是 address 。
尽管如此,为了确保一些 API 能够正常运作并与其它客户端保持兼容,我们也会生成哈希值化状态。
如果哈希值化状态不是空值,我们会查看历史记录变更集(History ChangeSet),并且只更新已更改的项。
这个阶段不需要联网。
阶段 8、9、10 :生成索引
同步期间会生成 3 个索引。
这 3 个索引可能会被禁用,因为所有 API 都不使用它们。
交易查询索引
该索引表由从交易哈希值到区块号的映射构成。
账户历史索引
该索引存储了从账户地址到区块列表(在这些区块中,该账户的状态有了更改)的映射。
存储历史索引
该索引存储了从存储项地址到区块列表(其中,该存储项在一定程度上有了更改)的映射。
在这一阶段,我们会启动交易池或更新其状态。例如,如果我们已下载的区块中包含了某些交易,就把这些交易从交易池中移除。
在回退时,我们会将被回退的区块中的交易重新添加到交易池中。
原文链接:
https://github.com/ledgerwatch/turbo-geth/tree/master/eth/stagedsync
作者: Alex Sharov
翻译&校对: 闵敏 & 阿剑
目前有一种趋势,即DeFi团队会发布未经审计的协议。然而,审计人员仍然为这些项目的安全性提供了宝贵的意见。The Block带大家深入了解68个DeFi项目的审计和bug赏金计划.
1900/1/1 0:00:00文章系金色财经专栏作者币圈北冥供稿,发表言论仅代表其个人观点,仅供学习交流!金色盘面不会主动提供任何交易指导,亦不会收取任何费用指导交易,请读者仔细甄别,谨防上当.
1900/1/1 0:00:00Kava 今日在推特宣布,Kava Labs 与 Swipe Wallet 建立了战略合作关系,来进一步发展 USDX 的 DeFi 生态.
1900/1/1 0:00:00以太坊轻钱包 MetaMask 8 月 21 日发文,称将改进 MetaMask 软件使用许可方式.
1900/1/1 0:00:001.DeFi总市值:177.02亿美元 市值前十币种涨跌幅,金色财经制图,数据来源CoinGecko金色午报 | 10月17日午间重要动态一览:7:00-12:00关键词:挖矿木马、门罗币、数字.
1900/1/1 0:00:00金色财经? 区块链8月19日讯? ?以太坊联合创始人Vitalik Buterin于8月17日在其个人网站发布《区块链验证的哲学》论文,金色财经将本文编译如下: 一个区块链最强大的一个特性.
1900/1/1 0:00:00