🚧 Stagnant
Standards Track: Core
EIP-2970: IS_STATIC 操作码
EIP-2970: IS_STATIC 操作码
Authors | Vitalik Buterin (@vbuterin) |
---|---|
Created | 2020-09-13 |
Discussion Link | https://ethereum-magicians.org/t/is-static-opcode-useful-for-aa/4609 |
简述
添加一个 IS_STATIC (0x4A)
操作码,如果当前上下文是静态的(即,执行处于 STATICCALL
或其后代中,因此无法进行状态更改操作),则压入 1
,如果不是,则压入 0
。
摘要
动机
主要预期用例是允许扩展账户抽象(EIP 2938),以便账户可以允许来自外部的静态调用(这对 AA 的安全模型无害),但不允许更改状态的调用。
规范
添加一个 IS_STATIC (0x4A)
操作码,如果当前上下文是静态的(即,执行处于 STATICCALL
或其后代中,因此无法进行状态更改操作),则压入 1
,如果不是,则压入 0
。
理由
确定静态性已经可以通过以下黑客技术实现:使用有限的 gas 进行 CALL
,并在该 CALL
内部发出一个 LOG
并退出。如果上下文是静态的,则 CALL
将失败并在堆栈上留下 0;如果上下文是非静态的,则 CALL
将成功。但是,这种技术对于 gas 成本的变化来说是脆弱的,并且是不必要的浪费。因此,现状既不允许以合理有效的方式确定上下文是否为静态的,也不提供任何类型的保证,即不完全失败的执行在静态和非静态上下文中将以相同的方式执行。此 EIP 提供了一种更简洁的确定静态性的方法。
向后兼容性
待定
安全考虑
待定
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Vitalik Buterin (@vbuterin), "EIP-2970: IS_STATIC 操作码 [DRAFT]," Ethereum Improvement Proposals, no. 2970, September 2020. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2970.