EIP-4488: 通过限制总 Calldata 来降低交易 Calldata 的 gas 成本
大幅降低交易 calldata 的 gas 成本,并同时限制一个区块中的总交易 calldata
Authors | Vitalik Buterin (@vbuterin), Ansgar Dietrichs (@adietrichs) |
---|---|
Created | 2021-11-23 |
Discussion Link | https://ethereum-magicians.org/t/eip-4488-transaction-calldata-gas-cost-reduction-with-total-calldata-limit/7555 |
摘要
降低交易 calldata 的 gas 成本,并增加一个区块中总交易 calldata 的数量限制。
动机
Rollup 在短期和中期,甚至可能是长期内,都是以太坊唯一的无需信任的扩容解决方案。L1 上的交易费用已经高昂了好几个月,因此迫切需要采取任何必要措施来帮助促进整个生态系统向 Rollup 的转移。Rollup 显著降低了许多以太坊用户的费用:Optimism 和 Arbitrum 经常提供比以太坊基础层本身低约 3-8 倍的费用,而具有更好数据压缩且可以避免包含签名的 ZK Rollup 的费用比基础层低约 40-100 倍。
然而,即使是这些费用对于许多用户来说也太昂贵了。Rollup 本身长期不足的长期解决方案一直是数据分片,这将为 Rollup 向链添加约 1-2 MB/秒的专用数据空间。然而,数据分片仍然需要相当长的时间才能完成实施和部署。因此,需要一种短期解决方案来进一步降低 Rollup 的成本,并激励整个生态系统过渡到以 Rollup 为中心的以太坊。
本 EIP 提出了一种快速实施的短期解决方案,该方案还可以减轻安全风险。
规范
参数 | 值 |
---|---|
NEW_CALLDATA_GAS_COST |
3 |
BASE_MAX_CALLDATA_PER_BLOCK |
1,048,576 |
CALLDATA_PER_TX_STIPEND |
300 |
将交易 calldata 的 gas 成本降低到每个字节 NEW_CALLDATA_GAS_COST
,无论该字节是零还是非零。
添加一条规则,只有当 sum(len(tx.calldata) for tx in block.txs) <= BASE_MAX_CALLDATA_PER_BLOCK + len(block.txs) * CALLDATA_PER_TX_STIPEND
时,区块才有效。
理由
一个自然的替代方案是在不增加限制的情况下降低 NEW_CALLDATA_GAS_COST
。然而,这提出了一个安全问题:如今,平均区块大小为 60-90 kB,但_最大_区块大小为 30M / 16 = 1,875,000
字节(加上大约一千字节的区块和交易开销)。简单地将 calldata gas 成本从 16 降低到 3 会将最大区块大小增加到 10M 字节。这将把以太坊 p2p 网络层推到前所未有的压力水平,并有破坏网络的风险;几年前对约 500 kB 区块的一些先前实时测试已经关闭了一些引导节点。
降低成本和限制的提议实现了降低的大部分好处,因为 Rollup 在短期内不太可能_主导_以太坊区块空间,因此 1.5 MB 将足够,同时防止了大部分安全风险。
历史上,以太坊协议社区一直对多维度资源限制规则(在本例中为 gas 和 calldata)持怀疑态度,因为这些规则大大增加了提议者(今天的矿工,合并后的验证者)需要解决的出块问题的复杂性。如今,提议者可以通过简单地按优先级费用从高到低的顺序选择交易来生成具有接近最佳费用收入的区块。在多维度世界中,提议者将不得不处理多维度约束。多维度背包问题比单维度等效问题复杂得多,并且矿池构建的经过良好优化的专有实现很可能胜过默认的开源实现。
今天,以下两个关键原因使得这个问题比以前小:
- EIP-1559 意味着,至少在大多数情况下,区块提议者正在解决的问题_不是_背包问题。相反,区块提议者只是包括他们可以找到的具有足够基本费用和优先级费用的所有交易。因此,简单的算法也经常会产生接近最佳的结果。
- 用于矿工可提取价值 (MEV) 提取的复杂专有策略的存在意味着分散式的最佳区块生产在中长期已经是失败的事业。研究正在转向将利于专业化的区块体生成任务与验证者的角色分开的解决方案(“提议者/构建者分离”)。与根本性变化相反,今天二维背包问题仅仅是“又一个”MEV 机会。
因此,值得重新思考历史上对多维度资源限制的反对,并将其视为一种在保持安全性的同时实现适度可扩展性收益的务实方式。
此外,在实践中,补贴机制使二维优化问题变得更不重要。所有交易的 90%(示例取自区块 13500000, 13501000 ... 13529000
)的 calldata 小于 300 字节。因此,如果一个简单的交易选择算法过度填充了提议者正在创建的区块的 calldata,提议者仍然可以从其 mempool 中继续添加 90% 的交易。
向后兼容性
这是一个向后不兼容的 gas 重新定价,需要计划内的网络升级。
用户将能够继续运行,无需进行任何更改。
矿工将能够继续运行,无需进行任何更改,除非当总 calldata 大小达到最大值时,停止向区块添加新交易的规则。但是,他们可以添加一些实用的启发式方法,以在这种情况下实现更接近最佳的回报:例如,如果一个区块填充到大小限制,他们可以重复删除最后一个数据密集型交易,并尽可能多地用数据轻量型交易替换它,直到这样做不再有利可图。
安全注意事项
该提案不会增加链的_突发_数据容量(事实上,它略有减少)。但是,_平均_数据容量将会增加。这意味着历史存储的存储需求将会增加。最坏的情况是理论上的长期最大值为每 12 秒插槽约 1,262,861 字节,或每年约 3.0 TB。
我们建议在实施此 EIP 的同时或之后不久实施 EIP-4444 或一些类似的历史到期提案,以减轻这种风险。
版权
版权及相关权利通过 CC0 放弃。
Citation
Please cite this document as:
Vitalik Buterin (@vbuterin), Ansgar Dietrichs (@adietrichs), "EIP-4488: 通过限制总 Calldata 来降低交易 Calldata 的 gas 成本 [DRAFT]," Ethereum Improvement Proposals, no. 4488, November 2021. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-4488.