Skip to content

Commit fe1b7d1

Browse files
authored
fix: type 4 transaction accessed address addition in wrong place (#1255)
* add fix for accessing address in type 4 tx * remove unnecessary import * reformat
1 parent f07df38 commit fe1b7d1

File tree

3 files changed

+13
-22
lines changed

3 files changed

+13
-22
lines changed

src/ethereum/prague/utils/message.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
Message specific functions used in this prague version of
1313
specification.
1414
"""
15+
1516
from ethereum_types.bytes import Bytes, Bytes0
1617
from ethereum_types.numeric import Uint
1718

1819
from ..fork_types import Address
1920
from ..state import get_account
2021
from ..transactions import Transaction
2122
from ..vm import BlockEnvironment, Message, TransactionEnvironment
22-
from ..vm.eoa_delegation import get_delegated_code_address
2323
from ..vm.precompiled_contracts.mapping import PRE_COMPILED_CONTRACTS
2424
from .address import compute_contract_address
2525

@@ -51,8 +51,6 @@ def prepare_message(
5151
accessed_addresses.update(PRE_COMPILED_CONTRACTS.keys())
5252
accessed_addresses.update(tx_env.access_list_addresses)
5353

54-
disable_precompiles = False
55-
5654
if isinstance(tx.to, Bytes0):
5755
current_target = compute_contract_address(
5856
tx_env.origin,
@@ -65,13 +63,6 @@ def prepare_message(
6563
current_target = tx.to
6664
msg_data = tx.data
6765
code = get_account(block_env.state, tx.to).code
68-
69-
delegated_address = get_delegated_code_address(code)
70-
if delegated_address is not None:
71-
disable_precompiles = True
72-
accessed_addresses.add(delegated_address)
73-
code = get_account(block_env.state, delegated_address).code
74-
7566
code_address = tx.to
7667
else:
7768
raise AssertionError("Target must be address or empty bytes")
@@ -94,6 +85,6 @@ def prepare_message(
9485
is_static=False,
9586
accessed_addresses=accessed_addresses,
9687
accessed_storage_keys=set(tx_env.access_list_storage_keys),
97-
disable_precompiles=disable_precompiles,
88+
disable_precompiles=False,
9889
parent_evm=None,
9990
)

src/ethereum/prague/vm/eoa_delegation.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -201,15 +201,5 @@ def set_delegation(message: Message) -> U256:
201201

202202
if message.code_address is None:
203203
raise InvalidBlock("Invalid type 4 transaction: no target")
204-
message.code = get_account(state, message.code_address).code
205-
206-
if is_valid_delegation(message.code):
207-
message.disable_precompiles = True
208-
message.code_address = Address(
209-
message.code[EOA_DELEGATION_MARKER_LENGTH:]
210-
)
211-
message.accessed_addresses.add(message.code_address)
212-
213-
message.code = get_account(state, message.code_address).code
214204

215205
return refund_counter

src/ethereum/prague/vm/interpreter.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
1212
A straightforward interpreter that executes EVM code.
1313
"""
14+
1415
from dataclasses import dataclass
1516
from typing import Optional, Set, Tuple
1617

@@ -37,14 +38,15 @@
3738
begin_transaction,
3839
commit_transaction,
3940
destroy_storage,
41+
get_account,
4042
increment_nonce,
4143
mark_account_created,
4244
move_ether,
4345
rollback_transaction,
4446
set_code,
4547
)
4648
from ..vm import Message
47-
from ..vm.eoa_delegation import set_delegation
49+
from ..vm.eoa_delegation import get_delegated_code_address, set_delegation
4850
from ..vm.gas import GAS_CODE_DEPOSIT, charge_gas
4951
from ..vm.precompiled_contracts.mapping import PRE_COMPILED_CONTRACTS
5052
from . import Evm
@@ -122,6 +124,14 @@ def process_message_call(message: Message) -> MessageCallOutput:
122124
else:
123125
if message.tx_env.authorizations != ():
124126
refund_counter += set_delegation(message)
127+
128+
delegated_address = get_delegated_code_address(message.code)
129+
if delegated_address is not None:
130+
message.disable_precompiles = True
131+
message.accessed_addresses.add(delegated_address)
132+
message.code = get_account(block_env.state, delegated_address).code
133+
message.code_address = delegated_address
134+
125135
evm = process_message(message)
126136

127137
if evm.error:

0 commit comments

Comments
 (0)