复制成功

分享至

主页 > 数字货币 >

Monad联创:坎昆之后,Rollup的性能瓶颈是什么?

2024.03.26

原文作者:Monad 联合创始人 Keone Hon

编译:Odaily 星球日报 Azuma

编者案:北京时间 3 月 26 日上午,Monad 联合创始人 Keone Hon 于个人 X 发布了一篇关于 Rollup 性能状况的深度长文。文中,Keone 详述了坎昆升级之后 Rollup 的理论 TPS 上限该如何计算,并解释了为何升级之后部分 Layer 2 (Base)的单笔交易费用仍高达数美元,此外 Keone 还概述了 Rollup 所面临的一些瓶颈限制以及潜在的改进方向。

Monad联创:坎昆之后,Rollup的性能瓶颈是什么?

以下为 Keone 的原文内容,由 Odaily 星球日报编译,为了方便读者阅读,译者在原文基础上做了一定补充。

最近市场上有一些关于 Rollup 执行瓶颈和 Gas 限制的讨论,这不仅涉及 Layer 1 ,也包括了 Layer 2 。我将在下文中讨论这些瓶颈问题。

数据可用性(DA)

随着 Blob 数据结构(EIP-4844)在坎昆升级中被引入,以太坊的数据可用性(DA)已得到了大幅改进,Layer 2 的数据同步交易已无需再与普通 Layer 1 交易在同一个费用市场中竞价。

当前,Blob 的容量状况大概是每个区块(12 秒)产出 3 个 125 kb 的 Blob,即每秒 31.25 kb,鉴于一笔交易的大小大概是 100 字节,这意味着所有 Rollup 的共享 TPS 大概是 300 左右。

当然了,这里有一些信息需要特别备注。

  • 一是如果 Rollup 采用了更好的交易数据压缩技术,可缩减单笔交易大小的话,TPS 便可实现增长。

  • 二是理论上 Rollup 除了可以采用 Blob 同步数据之外,还可继续采用 calldata 同步数据(即坎昆升级之前的旧方案),尽管这样做会带来额外的复杂性。

  • 三是不同 ZK-rollup 发布状态的方式存在差异(尤其是 zkSync Era 和 Starknet),因此对于这些 Rollup 来说,计算方式及结果也会有所不同。

  • Rollup 的 gas 限制

    最近,Base 由于其 gas 费用的激增而引发了较大关注,一笔普通的交易在该网络上的费用已上涨到了几美元。

    为什么坎昆升级之后,Base 网络只降低了一段时间,现在又回到甚至超过了升级之前的水准呢?这是因为 Base 上的区块存在一个 gas 总额限制,该限制系通过其代码中的一个参数来执行。

    Base 目前所采用的 gas 参数与 Optimism 相同,即每个 Layer 2 区块(2 秒)存在 500 万 gas 的总额限制,当该网络之上的需求(交易总数)超过供应(区块空间)之时,价格结算便会采取按需执行的机制,从而导致该网络 gas 的飙升。

    为什么 Base 不去提高这一 gas 总额限制呢?或者换句话说,为什么 Rollup 需要设置一个 gas 总额限制呢?除了前文提到的数据可用性存在 TPS 上限之外,这里其实还有另外两大原因,分别是对执行吞吐量的瓶颈以及状态增长的隐患。

    问题一:执行吞吐量的瓶颈

    一般而言,EVM Rollup 运行的都是一个 fork 自 Geth 的 EVM,这意味着它们与 Geth 客户端有着相似的性能特征。

    Geth 的客户端是单线程的(即一次只能处理一个任务),它使用了 LevelDB/PebbleDB 编码,在 merkle patricia trie(MPT)中存储其状态。这是一种通用数据库,使用着另一种树结构(LSM 树)作为底层在固态硬盘(SSD)上存储数据。

    对于 Rollup 而言,“状态访问”(从 merkle trie 读取数值)和“状态更新”(在每个区块结束时更新 merkle trie)是执行过程中成本最高的环节。之所以如此,是因为从固态硬盘上单次读取的成本是 40-100 微秒,且由于 merkle trie 数据结构被嵌入到另一个数据结构(LSM 树)中,导致需要进行许多非必要的额外查找。

    这个环节可以想象为在一个复杂的文件系统中查找特定文件的过程。你需要从根目录(trie 根节点)一直找到目标文件(叶节点)。在查找每个文件时,都需要查找数据库 LevelDB 中的特定键,而在 LevelDB 内部又必须通过另一个名为 LSM 树的数据结构来执行实际的数据存储操作,这样的过程造成了许多额外的查找步骤。这些额外的步骤让整个数据读取和更新变得相当慢且低效。

    在 Monad 的设计中,我们通过 MonadDb 解决了这一问题。MonadDb 是一个自定义数据库,支持直接在磁盘上存储 merkle trie,避免了 LevelDb 的开销;支持异步 IO,允许多个读取并行处理;绕过了文件系统。

    此外,Monad 采用的“乐观并行执行”(optimistic parallel execution)机制允许多笔交易并行进行,且能够从 MonadDb 中并行地提取其状态。

    然而,Rollup 没有这些优化,因此在执行吞吐量上存在瓶颈。

    免责声明:数字资产交易涉及重大风险,本资料不应作为投资决策依据,亦不应被解释为从事投资交易的建议。请确保充分了解所涉及的风险并谨慎投资。OKEx学院仅提供信息参考,不构成任何投资建议,用户一切投资行为与本站无关。

    加⼊OKEx全球社群

    和全球数字资产投资者交流讨论

    扫码加入OKEx社群

    相关推荐

    industry-frontier