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-1109 和 EIP-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.