diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md
index 6c46c79dc9..6572057604 100644
--- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md
+++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md
@@ -1597,16 +1597,11 @@ The various `CALL*` (and other inter-contract control flow) operations will be d
syntax KItem ::= "#accessStorage" Account Int
// ---------------------------------------------
rule #accessStorage ACCT INDEX => .K ...
- ... ACCT |-> (TS:Set => TS |Set SetItem(INDEX)) ...
+ TS => TS[ACCT <- {TS[ACCT] orDefault .Set}:>Set |Set SetItem(INDEX)]
SCHED
requires Ghasaccesslist << SCHED >>
[preserves-definedness]
- rule #accessStorage ACCT INDEX => .K ...
- TS => TS[ACCT <- SetItem(INDEX)]
- SCHED
- requires Ghasaccesslist << SCHED >> andBool notBool ACCT in_keys(TS)
-
rule #accessStorage _ _ => .K ...
SCHED
requires notBool Ghasaccesslist << SCHED >>
@@ -2310,7 +2305,8 @@ Access List Gas
SCHED
requires Ghasaccesslist << SCHED >> andBool #usesAccessList(OP)
- rule #access [ _ , _ ] => .K ... _ [owise]
+ rule #access [ OP , _ ] => .K ... SCHED
+ requires notBool (Ghasaccesslist << SCHED >> andBool #usesAccessList(OP))
syntax InternalOp ::= #gasAccess ( Schedule, OpCode ) [symbol(#gasAccess)]
// --------------------------------------------------------------------------
diff --git a/kevm-pyk/src/kevm_pyk/summarizer.py b/kevm-pyk/src/kevm_pyk/summarizer.py
index bbf3e25dfc..5f35f7c8d1 100644
--- a/kevm-pyk/src/kevm_pyk/summarizer.py
+++ b/kevm-pyk/src/kevm_pyk/summarizer.py
@@ -433,8 +433,7 @@ def _build_spec(
# This is because #push doesn't handle `.Account`. And it's okay to be Int for other opcodes.
_init_subst['CALLER_CELL'] = KVariable('CALLER_CELL', KSort('Int')) # CALLER_CELL should be Int for CALLER.
_init_subst['ORIGIN_CELL'] = KVariable('ORIGIN_CELL', KSort('Int')) # ORIGIN_CELL should be Int for ORIGIN.
- inf_gas_cell = KEVM.inf_gas(KVariable('GAS_CELL', KSort('Gas')))
- _init_subst['GAS_CELL'] = inf_gas_cell # inf_gas to reduce the computation cost.
+ _init_subst['GAS_CELL'] = KEVM.inf_gas(KVariable('GAS_CELL', 'Gas')) # SLOAD & SSTORE must use infinite gas.
_init_subst.update(init_map)
init_subst = CSubst(Subst(_init_subst), init_constraints)
@@ -467,6 +466,9 @@ def _le(a: KInner, b: KInner) -> KInner:
init_subst: dict[str, KInner] = {}
final_subst: dict[str, KInner] = {}
+ if opcode_symbol == 'SSTORE':
+ init_subst['STATIC_CELL'] = KToken('false', KSort('Bool'))
+
if opcode_symbol in NOT_USEGAS_OPCODES:
# TODO: Should allow infGas to calculate gas. Skip for now.
init_subst['USEGAS_CELL'] = KToken('false', KSort('Bool'))
@@ -572,7 +574,7 @@ def create_kcfg_explore() -> KCFGExplore:
proof,
create_kcfg_explore=create_kcfg_explore,
max_depth=1,
- max_iterations=None,
+ max_iterations=300,
cut_point_rules=KEVMSemantics.cut_point_rules(
break_on_jumpi=False,
break_on_jump=False,