Skip to content

Commit 84b22c0

Browse files
authored
fix(specs): delay get_code calls in CALL-like opcodes (#2473)
Signed-off-by: jsign <jsign.uy@gmail.com>
1 parent 852715c commit 84b22c0

1 file changed

Lines changed: 4 additions & 19 deletions

File tree

  • src/ethereum/forks/amsterdam/vm/instructions

src/ethereum/forks/amsterdam/vm/instructions/system.py

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,6 @@ def generic_call(
293293
memory_input_size: U256,
294294
memory_output_start_position: U256,
295295
memory_output_size: U256,
296-
code: Bytes,
297296
disable_precompiles: bool,
298297
) -> None:
299298
"""
@@ -308,6 +307,10 @@ def generic_call(
308307
push(evm.stack, U256(0))
309308
return
310309

310+
tx_state = evm.message.tx_env.state
311+
code_hash = get_account(tx_state, code_address).code_hash
312+
code = get_code(tx_state, code_hash)
313+
311314
call_data = memory_read_bytes(
312315
evm.memory, memory_input_start_position, memory_input_size
313316
)
@@ -419,9 +422,6 @@ def call(evm: Evm) -> None:
419422
if code_address not in evm.accessed_addresses:
420423
evm.accessed_addresses.add(code_address)
421424

422-
code_hash = get_account(tx_state, code_address).code_hash
423-
code = get_code(tx_state, code_hash)
424-
425425
message_call_gas = calculate_message_call_gas(
426426
value,
427427
gas,
@@ -452,7 +452,6 @@ def call(evm: Evm) -> None:
452452
memory_input_size,
453453
memory_output_start_position,
454454
memory_output_size,
455-
code,
456455
is_delegated,
457456
)
458457

@@ -523,9 +522,6 @@ def callcode(evm: Evm) -> None:
523522
if code_address not in evm.accessed_addresses:
524523
evm.accessed_addresses.add(code_address)
525524

526-
code_hash = get_account(tx_state, code_address).code_hash
527-
code = get_code(tx_state, code_hash)
528-
529525
message_call_gas = calculate_message_call_gas(
530526
value,
531527
gas,
@@ -557,7 +553,6 @@ def callcode(evm: Evm) -> None:
557553
memory_input_size,
558554
memory_output_start_position,
559555
memory_output_size,
560-
code,
561556
is_delegated,
562557
)
563558

@@ -666,7 +661,6 @@ def delegatecall(evm: Evm) -> None:
666661
check_gas(evm, access_gas_cost + extend_memory.cost)
667662

668663
# STATE ACCESS
669-
tx_state = evm.message.tx_env.state
670664
if is_cold_access:
671665
evm.accessed_addresses.add(code_address)
672666

@@ -684,9 +678,6 @@ def delegatecall(evm: Evm) -> None:
684678
if code_address not in evm.accessed_addresses:
685679
evm.accessed_addresses.add(code_address)
686680

687-
code_hash = get_account(tx_state, code_address).code_hash
688-
code = get_code(tx_state, code_hash)
689-
690681
message_call_gas = calculate_message_call_gas(
691682
U256(0),
692683
gas,
@@ -711,7 +702,6 @@ def delegatecall(evm: Evm) -> None:
711702
memory_input_size,
712703
memory_output_start_position,
713704
memory_output_size,
714-
code,
715705
is_delegated,
716706
)
717707

@@ -756,7 +746,6 @@ def staticcall(evm: Evm) -> None:
756746
check_gas(evm, access_gas_cost + extend_memory.cost)
757747

758748
# STATE ACCESS
759-
tx_state = evm.message.tx_env.state
760749
if is_cold_access:
761750
evm.accessed_addresses.add(to)
762751

@@ -774,9 +763,6 @@ def staticcall(evm: Evm) -> None:
774763
if code_address not in evm.accessed_addresses:
775764
evm.accessed_addresses.add(code_address)
776765

777-
code_hash = get_account(tx_state, code_address).code_hash
778-
code = get_code(tx_state, code_hash)
779-
780766
message_call_gas = calculate_message_call_gas(
781767
U256(0),
782768
gas,
@@ -801,7 +787,6 @@ def staticcall(evm: Evm) -> None:
801787
memory_input_size,
802788
memory_output_start_position,
803789
memory_output_size,
804-
code,
805790
is_delegated,
806791
)
807792

0 commit comments

Comments
 (0)