作者:@keoneHD
翻译:白话区块链
最近有一些关于L1和L2的执行瓶颈和gas限制的讨论。下面我将讨论几个瓶颈问题。
1、DA
随着blob数据(EIP-4844)的引入,Eth DA相比以前变得更便宜了(因为它不必与普通的L1交易在优先燃气拍卖中竞争)。
中位容量是每12秒块内的3倍125 kb的blob数据,即31.25 kb/s。当前交易大约为100字节,因此这相当于所有rollups的约300 tps。
注:
-
通过更好地压缩交易数据,这个数字可能会增加。
-
Rollups理论上可以同时利用calldata和blob数据,但这样做会增加复杂性。
-
一些ZK-rollups发布状态差异(特别是zkSync Era和Starknet),因此对于它们来说,计算方式是不同的。
-
2、Rollup gas限制
最近,Base引起了很多关注,因为gas费用飙升,仅进行简单的交换就需要支付几美元。这是因为Base上的区块有一个gas限制,在任何供应有限的资源中,当需求超过供应时,清算价格就会变成导致需求与供应匹配的价格。这个gas限制是代码中的一个参数。
Base目前使用与Optimism相同的gas目标(每个L2区块500万gas,即每2秒500万gas)。
为什么Base不提高gas限制呢?(或者更一般地说,为什么任何rollup都需要gas限制?)虽然它们可以(而且可能会)提高gas限制,但除了DA之外,还有两个额外的动机来保持gas限制较低:执行吞吐量和对状态增长的担忧。
3、执行吞吐量
EVM rollups通常运行一个EVM,这是基于geth的EVM分支。这意味着它们具有类似于geth客户端的性能特征。
geth客户端是单线程的,并使用Merkle Patricia Trie(MPT)将其状态存储在使用LevelDB/PebbleDB编码的数据结构中。这些都是使用另一种树结构(LSM树)在SSD上存储数据的通用数据库。
状态访问(从Merkle Trie中读取值)和状态更新(在每个区块结束时更新Merkle Trie)是执行过程中最昂贵的部分。当考虑到从SSD中读取一个值的成本为40-100微秒,并且由于Merkle Trie数据结构被嵌入到另一个数据结构中,会存在很多多余的查找操作,这是有道理的。
一个简单的思维图像:你正在导航到Merkle Trie底部的一个节点,也就是从根节点到叶子节点的遍历过程。你访问的每个节点都需要在LevelDB中查找一个键。但是,每个LevelDB查找操作都需要在底层的LSM树中导航,从而在此过程中访问许多LSM树节点。
在Monad中,我们通过MonadDb来解决这个问题。MonadDb是一个自定义数据库,具有以下特点:
1)直接将Merkle Trie存储在磁盘上,避免了LevelDb的开销;
2)支持异步IO,允许多个读操作并行进行;
3)绕过文件系统。此外,Monad中的乐观并行执行允许多个事务并行进行,并从MonadDb中并行获取它们的状态依赖关系。
然而,Rollups没有这些优化,因此在执行吞吐量上存在瓶颈。
注:Erigon/reth在数据库效率方面提供了一些改进,一些rollups的客户端基于这些客户端(尤其是op-reth)。Erigon/reth使用了扁平化的数据结构,对于读取操作降低了查找成本;但是它不支持异步读取或多线程。此外,每个区块后仍然需要重新计算Merkle根,这个过程非常缓慢。
4、关于状态增长的担忧
与任何其他区块链一样,Rollups也限制吞吐量,以防止其活跃状态增长过快。
一个常见的说法是状态增长令人担忧,因为如果状态增长很大,SSD的容量要求将不得不增加。然而,我认为这有点不准确。SSD相对便宜(一个高质量的2 TB SSD约售价200美元),而目前经过近10年历史的完整以太坊状态大小仅为约200 GB。从纯存储角度来看,还有增长的空间。
更大的担忧是随着状态变得越来越大,任何给定状态的查找时间也会变长。这是因为Merkle Patricia Trie在一个节点只有一个子节点时使用“快捷方式”,这减少了Trie的有效深度,从而加快了查找速度。随着Merkle Trie变得更满,可用的“快捷方式”越来越少。
对于状态增长的担忧最终可以归结为对状态访问效率低下的类似担忧。为了使状态增长更可行,需要加快状态访问。
5、结语:为什么不通过硬件解决这个问题?
L2(目前)是中心化的,一个单独的序列器维护状态并生成区块。人们可能会问:为什么不将该序列器运行在具有极高RAM要求的硬件上,以便将所有状态存储在内存中?
两个原因:
首先,这并未解决以太坊DA的瓶颈问题,尽管目前(在Base的情况下)不是制约因素,但最终将成为一个重要瓶颈。
其次,更重要的是:去中心化。
尽管序列化高度集中化,但其他人仍然能够独立运行回放相同交易历史并维护相同状态的节点,这一点非常重要。
在L1上的原始交易数据和状态承诺并不足以还原完整状态。任何需要可靠访问完整状态的人(例如商家、交易平台或自动交易者)都应该运行一个完整的L2节点来处理交易并拥有最新的全局状态副本。
Rollups仍然是区块链,而区块链之所以有趣,是因为它们通过共享全局状态实现全球协调。对于任何区块链来说,高性能的软件都是必需的;仅仅依靠硬件是不够的。
来源:https://twitter.com/keoneHD/status/1772399862778065006