Turbo-Geth 作为一个纯粹出于好奇心的项目,始于 2017 年(没错,就是在 CryptoKitties 导致的疯狂拥堵时期)。一开始是为了探究基于 trie 的数据库模式的替代方案。在 2018 年 3 月,Turbo-Geth 项目从以太坊基金会处获得了一笔小额的奖金(2.5 万美元)。

在 2019 年第一第二季度,Turbo-Geth 被用作状态租金(State Rent)研究的状态分析平台。到了 2019 年第三第四季度,Turbo-Geth 也被用于执行无状态以太坊的回溯检验(back testing)。在 Devcon5 举办以前,我认为它在概念上已经很可靠了。

在 Devcon5 上,我提议在一年内不再接受 EIP,好把所有的实现都转成类似的数据模式。但因为大家有所怀疑,而且 「核心开发者」 团体也没有这个积极性,我的提议没有被采纳。

怀疑意见主要围绕着高效计算和更新状态根哈希的方法。在 2020 年 3 月 的 EthCC 2020 大会上,我们提出了解决方案:额外的数据结构,叫做 「中间哈希值(Intermediate Hashes)」。接下来几个月里我们就完全实现了这个方案。

阶段式同步(staged sync)的想法来自于对按表写入变更量(per-table write churn)的测量值的观察。对数据变更(churn)的解决的方案是在一个预先排序号的序列中插入数据。我们在 2019 年末仔细观察了这些现象,但我们的第一个实验性的实现在 2020 年 2 月才表现出有重大的性能优势。

阶段式同步在架构层面上是一个非常重大的改变(但没有大改数据模式),我们在 2020 年 3 月至 7 月实现了这一功能。正是有了它,我们才能大幅(10 倍)压缩同步时间。

在 2020 年 8 月,我们又发现了将状态表示数据从 50 GB 缩减到 10 GB 的方法。

在 2020 年 9 月,「中间哈希值」 功能的粒度做得更细,将计算状态根哈希的速度提升了 4 倍(从 200 ms 缩减到 50 ms),同时将其数据规模从 7 GB 减小到了 2.5 GB.

当前我们正在开发合适的日志索引(indexing of logs)

那么,这一切到底意味着什么呢?

其实,这都不意味着什么,因为当前的实现还没有到达效率的极限。

还有几个 「未解之谜」:

  1. 对久远历史中的状态的默克尔证明还无法高效生成(对近期历史的默克尔证明的生成效率是没问题的。可以通过引入中间哈希值的快照来缓解(这些数据相对来说也不大)

  2. 一些共识计算无法与阶段性同步协调工作,理想情况下,应该共同设计两者

Silkworm

创建一个符合 Apache 2.0 协议、用 C++ 实现的模块化以太坊实现的想法,始于 2019 年初,因为那时我们看到 「Aleth」 项目基本上已经被放弃了。

但那并不是一个好时机。

到了 2020 年 5 月~6 月,时机终于到来。出现了 4 大转机:

  1. 我们从 BoltDB 切换成了 LMDB (用 C 语言实现的数据库),这就能保证 Turbo-Geth 和 Silkworm 之间的数据库兼容性。

  2. 阶段式同步模式_自然而然地_将实现分解成了相对独立的组件,这些组件基本上都通过数据库中的记录来交互(或者说通过内存中的 page 来交互,如果交互都发生在一个数据库的事务内的话)。这就意味着,我们可以逐个逐个组件创建 C++ 实现。

  3. 更早的 EVM 实验(使用 EVMC 接口)暴露出了使用跨语言接口的巨大开销,而 EVMC 的双重接口又加剧了这一点。

  4. 我们觉得已经有了足够的经验,能在一个可预期的时间内(1 年内,而不是 5 到 10 年)、靠着一些专家的帮助,就能完成这一切了。

未来

启动 Silkworm 项目也打开了我们的思路,比如我们可以把实现逐个逐个地迁移到其它编程语言(比如 Rust) 上。

我相信,以太坊 1.0 即使不引入分片,也能扩展至少 10 倍的吞吐量。我们主要面临三个方面的挑战:

  1. 区块的 Gas 上限更高会更容易招致 DOS 攻击。Turbe-geth 的安全极限可能是其它实现的 10 倍高;而 Silkworm 可能会更高。

  2. 更高的 Gas 上限会产生(数据量)更大的区块。这就会反过来产生两个问题:

    • 区块传输问题。这可以通过预先共识来处理(本质上就是牺牲交易时延来换取交易吞吐量)

    • 区块下载和存储问题。可以通过使用专门化的存储网络比如 BitTorrent 来解决(这些工作已经在进行中)。

推荐阅读

或是未来10年最强风口:产业区块链时代正式到来

区块链落地应用盘点:五大领域应用告诉你“区块链能做什么”

区块链将引爆跨学科研究,比特币只是第一颗“核弹”

5分钟看懂区块链如何提升中国企业活力与效能!

一文读懂区块链项目的法律问题,通证激励、链改可行吗?

比特币技术堆栈的创新:今非昔比

区块链入门 | 什么是DAO?

更多关键词:矿工 | 51%攻击

燃点 | 孟岩 | 白硕 | 肖风

长铗 | 李国权 | 蚂蚁金服 | 来学嘉

不用分片也能扩展 10 倍性能?简单了解以太坊 Turbo-Geth 客户端相关推荐

  1. 如何让你的Nginx 提升10倍性能?

    来源:www.zcfy.cc/article/10-tips-for-10x-application-performance-nginx-22.html 原文:https://www.nginx.co ...

  2. 面试官:我想用Nginx提升系统10倍性能,你有哪些建议?

    提升Web应用的性能从未像今天这样刻不容缓. 在线经济活动的比例日益提高,就连发展中国家和地区的经济活动都已经有5%以上在线进行了(相关数据请参考本文后面的资源).在这个超级链接.随时在线的现代世界, ...

  3. 太厉害了!我用 Nginx 提升系统10倍性能

    题图-斗罗大陆-献祭 提升Web应用的性能从未像今天这样刻不容缓. 在线经济活动的比例日益提高,就连发展中国家和地区的经济活动都已经有5%以上在线进行了.在这个超级链接.随时在线的现代世界,用户的期望 ...

  4. 提高 10 倍性能,揭秘淘宝、天猫背后的图片存储如何扛住双十一巨流?| 问底中国 IT 技术演进...

    2019天猫"双11",零点钟声刚过去1分36秒,成交额已突破100亿元人民币,最终成交额为2684亿,又一次刷新了世界记录. 对象存储OSS作为淘宝.天猫.支付宝等核心阿里App ...

  5. 【手把手】如何在10分钟内搭建一个以太坊私有链?

    在开发以太坊时,很多时候需要搭建一条以太坊私有链,这篇来自作者熊丽兵的文章,手把手教你10分钟内如何在Mac上进行搭建. 作者 | 熊丽兵 整理 | 科科 阅读本文前,你应该对以太坊语言有所了解,如果 ...

  6. 硬刚马斯克,为何不能简单地“将区块大小增加10倍?”| Vitalik Buterin

    撰文:Vitalik Buterin 编辑:南风 特别感谢 Felix Lange, Martin Swende, Marius van der Wijden 和 Mark Tyneway 的反馈和审 ...

  7. ETH2.0将开启超级牛市,BitOffer以太坊ETF基金涨幅超10倍

    近日,以太坊团队发布公告称,将于12月1日上线以太坊2.0信标链主网,以太坊2.0升级将会给整个加密行业布局带来巨大颠覆,将智能合约推向一个新的高度,推动加密货币市场提前进入牛市.据BitOffer交 ...

  8. 10倍效率提升的低代码IDE

    什么是低代码IDE呢? 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器.调试器和图形用户界面 ...

  9. 提速 10 倍 Go 语言开发实战内容, 从零开始开发

    在当今流行的编程语言中,Go 语言独树一帜,因为其简单易学.性能强劲且原生支持并发的特点,深受开发者的青睐.Go 语言在技术 上的关注度也在逐年上升.Go语言也逐渐成为进入大厂的通行证. 不时的有人问 ...

最新文章

  1. 6种常见的Git错误以及解决的办法
  2. Intellij IDEA 默认打开上次项目设置与取消设置
  3. boost::fruchterman_reingold_force_directed_layout用法的测试程序
  4. 3.IDA-数据显示窗口(导出窗口、导入窗口、String窗口、...窗口)
  5. 第106届印度科学大会:牛顿和爱因斯坦的理论惨遭印度科学家驳斥
  6. jzoj4245-er【dp,贪心】
  7. Linux SSH使用公钥私钥实现免登陆 以及 登陆失败、公钥失效的处理转
  8. iOS OpenGL ES2.0教程   Lesson03 旋转
  9. Android中 Bitmap转JPG PNG
  10. 01改变世界:没有计算器的日子怎么过——手动时期的计算工具
  11. 词向量发展史-共现矩阵-SVD-NNLM-Word2Vec-Glove-ELMo
  12. jsp四大作用域介绍
  13. The Innovation | Volume 3 Issue 3 Live Now
  14. IIR无限冲激响应和FIR有限冲激响应数字滤波器有什么区别?
  15. 开发人员的windows工具箱
  16. 常用网络广告类型:CPC,CPA,CPS,CPM,CPT,PPC详解
  17. Hive中数据倾斜和小文件过多的解决方案
  18. Mybatis学习记录(四)——Mybatis实现模糊查询的三种方法
  19. 局域网内部管理行为应该如何控制?
  20. 用C++画心形曲线: 送给母亲的心(母亲节2020.5.10)

热门文章

  1. 各路由初始登录地址和账号密码
  2. c语言如何初始化程序,浅谈C语言的初始化
  3. 2022商业版游戏陪玩陪聊系统最新源码+视频教程+全套素材
  4. HashKey2019数字资产全球峰会将于3月21日在香港召开
  5. CSS颜色混合模式特效
  6. 解决:Clipping input data to the valid range for imshow with RGB data
  7. leetcode——第993题——二叉树的堂兄弟节点
  8. dpi和ppi换算_DPI、PPI、DP、PX 的详细计算方法及算法来源是什么?
  9. 鸿蒙系统大文件夹怎么调整大小,win7系统打开窗口太大或太小的调整方法
  10. 面试题:打印螺旋数字