IS_STATIC opcode
The EIP-2970 proposal is related to the Ethereum blockchain and suggests the addition of a new opcode called IS_STATIC. This opcode would allow smart contract developers to check whether their contract is being called in a static or non-static context. In a static context, the contract is being called for view or pure functions, which do not modify the state of the blockchain. In a non-static context, the contract is being called for functions that modify the state of the blockchain. The IS_STATIC opcode would help developers optimize their code by allowing them to skip unnecessary checks and operations when their contract is being called in a static context. This proposal is still in draft form and has not yet been implemented.
Video
Original
Simple Summary
Add a IS_STATIC (0x4A)
opcode that pushes 1
if the current context is static (ie. the execution is in a STATICCALL
or a descendant thereof, so state-changing operations are not possible), and 0
if it is not.
Abstract
Motivation
The main intended use case is to allow account abstraction (EIP 2938) to be extended so that accounts can allow static calls from the outside (which are harmless to AA's security model) but not state-changing calls.
Specification
Add a IS_STATIC (0x4A)
opcode that pushes 1
if the current context is static (ie. the execution is in a STATICCALL
or a descendant thereof, so state-changing operations are not possible), and 0
if it is not.
Rationale
Determining staticness is already possibly using the following hacky technique: make a CALL
with limited gas, and inside that CALL
issue one LOG
and exit. If the context is static, the CALL
would fail and leave a 0 on the stack; if the context is non-static, the CALL
would succeed. However, this technique is fragile against changes to gas costs, and is needlessly wasteful. Hence, the status quo neither allows a reasonably effective way of determining whether or not the context is static, nor provides any kind of invariant that executions that do not fail outright will execute the same way in a static and non-static context. This EIP provides a cleaner way of determining staticness.
Backwards Compatibility
TBD
Security Considerations
TBD
Copyright
Copyright and related rights waived via CC0.
Not miss a beat of EIPs' update?
Subscribe EIPs Fun to receive the latest updates of EIPs Good for Buidlers to follow up.
View all