Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-2046: 降低预编译合约静态调用的 gas 消耗

Authors Alex Beregszaszi (@axic)
Created 2019-05-17
Discussion Link https://ethereum-magicians.org/t/eip-2046-reduced-gas-cost-for-static-calls-made-to-precompiles/3291
Requires EIP-214, EIP-1352

简单总结

此更改降低了使用预编译合约的 gas 消耗。

摘要

将使用 STATICCALL 调用预编译合约的基本 gas 消耗从 700 降至 40。这应允许更有效地使用预编译合约,以及总成本低于 700 的预编译合约。

动机

Spurious Dragon 硬分叉显着增加了调用的成本,以计算从状态加载合约代码,而没有为预编译合约做出例外,预编译合约的“代码”始终被加载。

这使得某些预编译合约的使用不切实际。

FIXME: 用最近关于 ECC 重新定价的推理来扩展它。

规范

在区块 HF 之后,STATICCALL (0xfa) 指令根据提供的目标地址收取不同的基本 gas 消耗(Yellow Paper 中 Gcall 的符号):

  • 对于预编译合约(地址范围如 EIP-1352 所述),成本为 40
  • 对于每个其他地址,成本保持不变 (700)

理由

仅更改了 STATICCALL 指令以减少更改的影响。考虑到预编译合约(目前)没有状态并且无法更改状态,这不应成为限制因素。 但是,在 Byzantium 之前创建和部署的合约可能不会使用 STATICCALL,因此此更改不会降低它们的成本。

与 EIP-1109 将 gas 降低到 0 不同,此处未提出。成本 40 被保留为表示上下文切换所需的成本。

向后兼容性

此 EIP 应该是向后兼容的。唯一的影响是成本降低。由于成本没有降低到零,因此在 HF 之前部署的恶意代理合约不可能执行任何状态更改操作。

测试用例

待定

实现

待定

参考

这之前已作为 EIP-1109EIP-1231 的一部分提出。 然而,EIP-1109 后来变成了一种非常不同的方法。作者建议更改 EIP-1109

致谢

Jordi Baylina (@jbaylina) 和 Matthew Di Ferrante (@mattdf) 之前已经提出了这一点。

版权

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

Citation

Please cite this document as:

Alex Beregszaszi (@axic), "EIP-2046: 降低预编译合约静态调用的 gas 消耗 [DRAFT]," Ethereum Improvement Proposals, no. 2046, May 2019. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2046.