Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-7707: 激励访问列表的供应

这个 EIP 提议更新访问列表的 gas 成本参数,以激励它们的使用并提高交易执行效率。

Authors Ben Adams (@benaadams), Oleg Iakushkin (@OlegJakushkin)
Created 2024-05-12
Discussion Link https://ethereum-magicians.org/t/eip-7707-align-incentives-for-access-list-provisioning/20025
Requires EIP-2930

摘要

本 EIP 降低了访问列表数据的 gas 成本,从而激励在交易中包含完整且有效的访问列表,以提高执行层客户端的数据加载效率。

动机

虽然 EIP-2930 引入了 accessLists 作为 SLOAD 预热的机制,通过提前告知 EVM 交易将访问哪些存储槽来降低 gas 成本, 但由于涉及的节省与惩罚相比,其实际使用受到限制且不常见。为了使每个包含的地址达到收支平衡,每个地址需要 24 个存储键,并且在 25+ 时每个键可以节省100 gas; 相反,包含未使用的密钥的惩罚是 1900 gas,因此未使用一个密钥时的收支平衡点是 43 个密钥

这种情况使得 accessLists 的收支平衡和风险回报率在常规事务中很少具有吸引力, 在常规交易中,先前的交易可能导致采取不同的分支,并访问一组略有不同的 存储槽。此外,需要非常多的 SLOAD 才能开始实现收支平衡。

对于某些客户端,数据加载占区块执行时间的 >70%。这部分是由于顺序事务执行和有效随机访问数据的迭代搜索造成的。

虽然 NVMe 驱动器具有巨大的吞吐量和 IOPS;这是通过多个队列操作的并发吞吐量,如果以完全顺序的方式访问数据,并且一个请求等待前一个请求完成,即端到端堆叠各个 IOPS 延迟,它们不具有这种性能,这不会提供接近这些驱动器可以提供的最大吞吐量(这与 HDD 世界不同,在 HDD 世界中,磁头需要寻找不同的物理位置来进行每次读取)。网络附加存储或云数据磁盘的情况类似;但是这里的延迟比本地直接 CPU 连接的 NVMe 驱动器(即通过网卡)放大的更大。

如果节点对要为区块执行预加载哪些数据有更清晰的了解;则可以并行完成,从而在从执行事务中发现数据时,可以隐藏访问该数据的许多延迟。非常类似于 CPU 上的指令流水线隐藏内存访问延迟的方式;可以对事务的数据访问进行流水线处理。这可以导致更快/更便宜的区块执行,并有助于将来并行 Tx 执行的数据依赖性提示,就像在其他新兴链上一样,这些链在开发时考虑了更现代的硬件。

规范

我们将更新 EIP-2930 参数:

常量
ACCESS_LIST_STORAGE_KEY_COST 320
ACCESS_LIST_ADDRESS_COST 512

理由

如简介中所述,gas 成本效益分析并不鼓励链的用户提供 accessList 提示,即使该机制已经在协议中(并且调用 eth_createAccessList 会给他们或钱包正确列表包含)。因此,我们建议降低这些数据访问列表的定价,使其更符合 calldata。

平衡小的 call_dataaccess_lists 成本之间的竞争环境,(并激励来自事务发送者的 access_lists 供应,因为它们需要以更快的方式进行事务执行),价格模型更新如下所示:

使用 STANDARD_TOKEN_COST * tokens_in_access_lists,其中 tokens_in_access_lists = bytes_in_access_lists * 4,使其与发送纯小型调用数据一样昂贵。所以我们将得到:

  • 地址为 32*4*4 = 512 (而不是 2400,减少 4.6 倍)

  • 存储键为 20*4*4 = 320 (而不是 1900,减少 5.9 倍)

这意味着用户像往常一样为链上数据包含付费 call_data。它改变了原始的 EIP-2930 逻辑,即“覆盖带宽成本”,但未详细描述,并且 可能已过时。

应该注意的是,这不是第一次提出 EIP-2930 的补充。在 EIP-3521 中,已经提出了一项减少,但它仅关注 ACCESS_LIST_ADDRESS_COST

例子

当前

Inst Type Access List Keys for address OP Price AccessList Key Price AccessList Address Price Total gas per OP
SLOAD Cold Not included - 2100 0 0 2100
SLOAD Warm Not included - 100 0 0 100
SLOAD Warm Included - 100 - - 100
SLOAD Cold Included 1 100 1900 2400 4400
SLOAD None Included 1 0 1900 2400 4300
SLOAD Cold Included 10 100 1900 240 2240
SLOAD None Included 10 0 1900 240 2140
SLOAD Cold Included 50 100 1900 48 2048
SLOAD None Included 50 0 1900 48 1948

建议

Inst Type Access List Keys for address OP Price AccessList Key Price AccessList Address Price Total gas per OP
SLOAD Cold Not included - 2100 0 0 2100
SLOAD Warm Not included - 100 0 0 100
SLOAD Warm Included - 100 - - 100
SLOAD Cold Included 1 100 320 512 932
SLOAD None Included 1 0 320 512 832
SLOAD Cold Included 10 100 320 51.2 471
SLOAD None Included 10 0 320 51.2 371
SLOAD Cold Included 50 100 320 10.24 430
SLOAD None Included 50 0 320 10.24 330

- 已经在变热时付费

向后兼容性

此 EIP 对 EIP-2930 进行了 小幅更新,以应对现代执行的挑战和能力。

安全考虑

EIP-2930 相同

版权

通过 CC0 放弃版权和相关权利。

Citation

Please cite this document as:

Ben Adams (@benaadams), Oleg Iakushkin (@OlegJakushkin), "EIP-7707: 激励访问列表的供应 [DRAFT]," Ethereum Improvement Proposals, no. 7707, May 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7707.