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_data
和 access_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.