Skip to content

Commit 463672f

Browse files
authored
fix(specs): Ensure tracking before first access (#1722)
1 parent f902fce commit 463672f

File tree

1 file changed

+24
-12
lines changed
  • src/ethereum/forks/amsterdam/vm/instructions

1 file changed

+24
-12
lines changed

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

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ def generic_create(
110110

111111
evm.accessed_addresses.add(contract_address)
112112

113+
# Track address access for BAL
114+
track_address_access(state.change_tracker, contract_address)
115+
113116
if account_has_code_or_nonce(
114117
state, contract_address
115118
) or account_has_storage(state, contract_address):
@@ -145,8 +148,6 @@ def generic_create(
145148
parent_evm=evm,
146149
)
147150

148-
track_address_access(state.change_tracker, contract_address)
149-
150151
child_evm = process_create_message(child_message)
151152

152153
if child_evm.error:
@@ -341,8 +342,6 @@ def generic_call(
341342
parent_evm=evm,
342343
)
343344

344-
track_address_access(evm.message.block_env.state.change_tracker, to)
345-
346345
child_evm = process_message(child_message)
347346

348347
if child_evm.error:
@@ -396,6 +395,9 @@ def call(evm: Evm) -> None:
396395
evm.accessed_addresses.add(to)
397396
access_gas_cost = GAS_COLD_ACCOUNT_ACCESS
398397

398+
# Track address access for BAL
399+
track_address_access(evm.message.block_env.state.change_tracker, to)
400+
399401
code_address = to
400402
(
401403
disable_precompiles,
@@ -485,6 +487,11 @@ def callcode(evm: Evm) -> None:
485487
evm.accessed_addresses.add(code_address)
486488
access_gas_cost = GAS_COLD_ACCOUNT_ACCESS
487489

490+
# Track address access for BAL
491+
track_address_access(
492+
evm.message.block_env.state.change_tracker, code_address
493+
)
494+
488495
(
489496
disable_precompiles,
490497
code_address,
@@ -503,10 +510,6 @@ def callcode(evm: Evm) -> None:
503510
)
504511
charge_gas(evm, message_call_gas.cost + extend_memory.cost)
505512

506-
track_address_access(
507-
evm.message.block_env.state.change_tracker, code_address
508-
)
509-
510513
# OPERATION
511514
evm.memory += b"\x00" * extend_memory.expand_by
512515
sender_balance = get_account(
@@ -560,6 +563,11 @@ def selfdestruct(evm: Evm) -> None:
560563
evm.accessed_addresses.add(beneficiary)
561564
gas_cost += GAS_COLD_ACCOUNT_ACCESS
562565

566+
# Track address access for BAL
567+
track_address_access(
568+
evm.message.block_env.state.change_tracker, beneficiary
569+
)
570+
563571
if (
564572
not is_account_alive(evm.message.block_env.state, beneficiary)
565573
and get_account(
@@ -635,6 +643,11 @@ def delegatecall(evm: Evm) -> None:
635643
evm.accessed_addresses.add(code_address)
636644
access_gas_cost = GAS_COLD_ACCOUNT_ACCESS
637645

646+
# Track address access for BAL
647+
track_address_access(
648+
evm.message.block_env.state.change_tracker, code_address
649+
)
650+
638651
(
639652
disable_precompiles,
640653
code_address,
@@ -648,10 +661,6 @@ def delegatecall(evm: Evm) -> None:
648661
)
649662
charge_gas(evm, message_call_gas.cost + extend_memory.cost)
650663

651-
track_address_access(
652-
evm.message.block_env.state.change_tracker, code_address
653-
)
654-
655664
# OPERATION
656665
evm.memory += b"\x00" * extend_memory.expand_by
657666
generic_call(
@@ -708,6 +717,9 @@ def staticcall(evm: Evm) -> None:
708717
evm.accessed_addresses.add(to)
709718
access_gas_cost = GAS_COLD_ACCOUNT_ACCESS
710719

720+
# Track address access for BAL
721+
track_address_access(evm.message.block_env.state.change_tracker, to)
722+
711723
code_address = to
712724
(
713725
disable_precompiles,

0 commit comments

Comments
 (0)