Any attempts to make state-changing operations inside an execution instance with STATIC set to true will instead throw an exception. These operations include CREATE, CREATE2, LOG0, LOG1, LOG2, LOG3, LOG4, SSTORE, and SELFDESTRUCT. They also include CALL with a non-zero value. As an exception, CALLCODE is not considered state-changing, even with a non-zero value.
LOG*
is the major reason token contracts would have code in the “fallback” function
.transfer
be KINDA_STATIC_CALL
, which allows LOG*
. :wink:
gas > 2300
restriction to clients anyway. Presently we have an invariant that's not explicitly enforced anywhere. We should add a guard that explicitly ensures the invariant is preserved.
CALL
with value > 0
and gas < 2300
will automatically provide 2300 gas instead.