Alert Source Discuss
🚧 Stagnant Standards Track: Core

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.