@@ -307,6 +307,11 @@ def generic_call(
307307 push (evm .stack , U256 (0 ))
308308 return
309309
310+ # EIP-7702: warm the delegated address only after all entry preconditions
311+ # (gas, balance, depth) have passed. Idempotent for non-delegation paths,
312+ # where `code_address` is the call target the caller already warmed.
313+ evm .accessed_addresses .add (code_address )
314+
310315 tx_state = evm .message .tx_env .state
311316 code_hash = get_account (tx_state , code_address ).code_hash
312317 code = get_code (tx_state , code_hash )
@@ -419,8 +424,6 @@ def call(evm: Evm) -> None:
419424 # check enough gas for delegation access
420425 extra_gas += delegation_access_cost
421426 check_gas (evm , extra_gas + extend_memory .cost )
422- if code_address not in evm .accessed_addresses :
423- evm .accessed_addresses .add (code_address )
424427
425428 message_call_gas = calculate_message_call_gas (
426429 value ,
@@ -519,8 +522,6 @@ def callcode(evm: Evm) -> None:
519522 # check enough gas for delegation access
520523 extra_gas += delegation_access_cost
521524 check_gas (evm , extra_gas + extend_memory .cost )
522- if code_address not in evm .accessed_addresses :
523- evm .accessed_addresses .add (code_address )
524525
525526 message_call_gas = calculate_message_call_gas (
526527 value ,
@@ -675,8 +676,6 @@ def delegatecall(evm: Evm) -> None:
675676 # check enough gas for delegation access
676677 extra_gas += delegation_access_cost
677678 check_gas (evm , extra_gas + extend_memory .cost )
678- if code_address not in evm .accessed_addresses :
679- evm .accessed_addresses .add (code_address )
680679
681680 message_call_gas = calculate_message_call_gas (
682681 U256 (0 ),
@@ -760,8 +759,6 @@ def staticcall(evm: Evm) -> None:
760759 # check enough gas for delegation access
761760 extra_gas += delegation_access_cost
762761 check_gas (evm , extra_gas + extend_memory .cost )
763- if code_address not in evm .accessed_addresses :
764- evm .accessed_addresses .add (code_address )
765762
766763 message_call_gas = calculate_message_call_gas (
767764 U256 (0 ),
0 commit comments