Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_eight/fork.py
Original file line number Diff line number Diff line change
Expand Up @@ -710,7 +710,6 @@ def process_unchecked_system_transaction(
accessed_storage_keys=set(),
disable_precompiles=False,
parent_evm=None,
disable_create_opcodes=False,
)

system_tx_output = process_message_call(system_tx_message)
Expand Down
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_eight/utils/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,4 @@ def prepare_message(
accessed_storage_keys=set(tx_env.access_list_storage_keys),
disable_precompiles=False,
parent_evm=None,
disable_create_opcodes=False,
)
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_eight/vm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@ class Message:
accessed_storage_keys: Set[Tuple[Address, Bytes32]]
disable_precompiles: bool
parent_evm: Optional["Evm"]
disable_create_opcodes: bool


@final
Expand Down
12 changes: 6 additions & 6 deletions src/ethereum/forks/monad_eight/vm/eoa_delegation.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ def recover_authority(authorization: Authorization) -> Address:

def access_delegation(
evm: Evm, address: Address
) -> Tuple[bool, bool, Address, Bytes, Uint]:
) -> Tuple[bool, Address, Bytes, Uint]:
"""
Get the delegation address, code, and the cost of access from the address.

Expand All @@ -135,15 +135,15 @@ def access_delegation(

Returns
-------
delegation : `Tuple[bool, bool, Address, Bytes, Uint]`
The disable precompiles, disable creates, delegation address, code, and
access gas cost.
delegation : `Tuple[bool, Address, Bytes, Uint]`
The disable precompiles, delegation address, code, and access gas
cost.

"""
tx_state = evm.message.tx_env.state
code = get_code(tx_state, get_account(tx_state, address).code_hash)
if not is_valid_delegation(code):
return False, False, address, code, Uint(0)
return False, address, code, Uint(0)

address = Address(code[EOA_DELEGATION_MARKER_LENGTH:])
if address in evm.accessed_addresses:
Expand All @@ -153,7 +153,7 @@ def access_delegation(
access_gas_cost = GasCosts.COLD_ACCOUNT_ACCESS
code = get_code(tx_state, get_account(tx_state, address).code_hash)

return True, True, address, code, access_gas_cost
return True, address, code, access_gas_cost


def set_delegation(message: Message) -> U256:
Expand Down
20 changes: 7 additions & 13 deletions src/ethereum/forks/monad_eight/vm/instructions/system.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from ...state_tracker import (
account_has_code_or_nonce,
get_account,
get_code,
increment_nonce,
is_account_alive,
move_ether,
Expand All @@ -30,7 +31,7 @@
compute_create2_contract_address,
to_address_masked,
)
from ...vm.eoa_delegation import access_delegation
from ...vm.eoa_delegation import access_delegation, is_valid_delegation
from .. import (
Evm,
Message,
Expand Down Expand Up @@ -83,7 +84,11 @@ def generic_create(
evm.gas_left -= create_message_gas
if evm.message.is_static:
raise WriteInStaticContext
if evm.message.disable_create_opcodes:
tx_state = evm.message.tx_env.state
recipient_code = get_code(
tx_state, get_account(tx_state, evm.message.current_target).code_hash
)
if is_valid_delegation(recipient_code):
raise CreateIn7702Context
evm.return_data = b""

Expand Down Expand Up @@ -126,7 +131,6 @@ def generic_create(
accessed_storage_keys=evm.accessed_storage_keys.copy(),
disable_precompiles=False,
parent_evm=evm,
disable_create_opcodes=False,
)
child_evm = process_create_message(child_message)

Expand Down Expand Up @@ -288,7 +292,6 @@ def generic_call(
memory_output_size: U256,
code: Bytes,
disable_precompiles: bool,
disable_create_opcodes: bool,
) -> None:
"""
Perform the core logic of the `CALL*` family of opcodes.
Expand Down Expand Up @@ -324,7 +327,6 @@ def generic_call(
accessed_storage_keys=evm.accessed_storage_keys.copy(),
disable_precompiles=disable_precompiles,
parent_evm=evm,
disable_create_opcodes=disable_create_opcodes,
)
child_evm = process_message(child_message)

Expand Down Expand Up @@ -382,7 +384,6 @@ def call(evm: Evm) -> None:
code_address = to
(
disable_precompiles,
disable_create_opcodes,
code_address,
code,
delegated_access_gas_cost,
Expand Down Expand Up @@ -427,7 +428,6 @@ def call(evm: Evm) -> None:
memory_output_size,
code,
disable_precompiles,
disable_create_opcodes,
)

# PROGRAM COUNTER
Expand Down Expand Up @@ -472,7 +472,6 @@ def callcode(evm: Evm) -> None:

(
disable_precompiles,
disable_create_opcodes,
code_address,
code,
delegated_access_gas_cost,
Expand Down Expand Up @@ -514,7 +513,6 @@ def callcode(evm: Evm) -> None:
memory_output_size,
code,
disable_precompiles,
disable_create_opcodes,
)

# PROGRAM COUNTER
Expand Down Expand Up @@ -615,7 +613,6 @@ def delegatecall(evm: Evm) -> None:

(
disable_precompiles,
disable_create_opcodes,
code_address,
code,
delegated_access_gas_cost,
Expand Down Expand Up @@ -648,7 +645,6 @@ def delegatecall(evm: Evm) -> None:
memory_output_size,
code,
disable_precompiles,
disable_create_opcodes,
)

# PROGRAM COUNTER
Expand Down Expand Up @@ -691,7 +687,6 @@ def staticcall(evm: Evm) -> None:
code_address = to
(
disable_precompiles,
disable_create_opcodes,
code_address,
code,
delegated_access_gas_cost,
Expand Down Expand Up @@ -724,7 +719,6 @@ def staticcall(evm: Evm) -> None:
memory_output_size,
code,
disable_precompiles,
disable_create_opcodes,
)

# PROGRAM COUNTER
Expand Down
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_eight/vm/interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,6 @@ def process_message_call(message: Message) -> MessageCallOutput:
get_account(tx_state, delegated_address).code_hash,
)
message.code_address = delegated_address
message.disable_create_opcodes = True

evm = process_message(message)

Expand Down
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_next/fork.py
Original file line number Diff line number Diff line change
Expand Up @@ -727,7 +727,6 @@ def process_unchecked_system_transaction(
accessed_storage_keys=set(),
disable_precompiles=False,
parent_evm=None,
disable_create_opcodes=False,
)

system_tx_output = process_message_call(system_tx_message)
Expand Down
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_next/utils/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,4 @@ def prepare_message(
accessed_storage_keys=set(tx_env.access_list_storage_keys),
disable_precompiles=False,
parent_evm=None,
disable_create_opcodes=False,
)
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_next/vm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,6 @@ class Message:
accessed_storage_keys: Set[Tuple[Address, Bytes32]]
disable_precompiles: bool
parent_evm: Optional["Evm"]
disable_create_opcodes: bool


@final
Expand Down
12 changes: 6 additions & 6 deletions src/ethereum/forks/monad_next/vm/eoa_delegation.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ def recover_authority(authorization: Authorization) -> Address:

def access_delegation(
evm: Evm, address: Address
) -> Tuple[bool, bool, Address, Bytes, Uint]:
) -> Tuple[bool, Address, Bytes, Uint]:
"""
Get the delegation address, code, and the cost of access from the address.

Expand All @@ -135,15 +135,15 @@ def access_delegation(

Returns
-------
delegation : `Tuple[bool, bool, Address, Bytes, Uint]`
The disable precompiles, disable creates, delegation address, code, and
access gas cost.
delegation : `Tuple[bool, Address, Bytes, Uint]`
The disable precompiles, delegation address, code, and access gas
cost.

"""
tx_state = evm.message.tx_env.state
code = get_code(tx_state, get_account(tx_state, address).code_hash)
if not is_valid_delegation(code):
return False, False, address, code, Uint(0)
return False, address, code, Uint(0)

address = Address(code[EOA_DELEGATION_MARKER_LENGTH:])
if address in evm.accessed_addresses:
Expand All @@ -153,7 +153,7 @@ def access_delegation(
access_gas_cost = GasCosts.COLD_ACCOUNT_ACCESS
code = get_code(tx_state, get_account(tx_state, address).code_hash)

return True, True, address, code, access_gas_cost
return True, address, code, access_gas_cost


def set_delegation(message: Message) -> U256:
Expand Down
20 changes: 7 additions & 13 deletions src/ethereum/forks/monad_next/vm/instructions/system.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from ...state_tracker import (
account_has_code_or_nonce,
get_account,
get_code,
increment_nonce,
is_account_alive,
move_ether,
Expand All @@ -30,7 +31,7 @@
compute_create2_contract_address,
to_address_masked,
)
from ...vm.eoa_delegation import access_delegation
from ...vm.eoa_delegation import access_delegation, is_valid_delegation
from .. import (
Evm,
Message,
Expand Down Expand Up @@ -84,7 +85,11 @@ def generic_create(
evm.gas_left -= create_message_gas
if evm.message.is_static:
raise WriteInStaticContext
if evm.message.disable_create_opcodes:
tx_state = evm.message.tx_env.state
recipient_code = get_code(
tx_state, get_account(tx_state, evm.message.current_target).code_hash
)
if is_valid_delegation(recipient_code):
raise CreateIn7702Context
evm.return_data = b""

Expand Down Expand Up @@ -127,7 +132,6 @@ def generic_create(
accessed_storage_keys=evm.accessed_storage_keys.copy(),
disable_precompiles=False,
parent_evm=evm,
disable_create_opcodes=False,
)
child_evm = process_create_message(child_message)

Expand Down Expand Up @@ -292,7 +296,6 @@ def generic_call(
memory_output_size: U256,
code: Bytes,
disable_precompiles: bool,
disable_create_opcodes: bool,
) -> None:
"""
Perform the core logic of the `CALL*` family of opcodes.
Expand Down Expand Up @@ -328,7 +331,6 @@ def generic_call(
accessed_storage_keys=evm.accessed_storage_keys.copy(),
disable_precompiles=disable_precompiles,
parent_evm=evm,
disable_create_opcodes=disable_create_opcodes,
)
child_evm = process_message(child_message)

Expand Down Expand Up @@ -386,7 +388,6 @@ def call(evm: Evm) -> None:
code_address = to
(
disable_precompiles,
disable_create_opcodes,
code_address,
code,
delegated_access_gas_cost,
Expand Down Expand Up @@ -439,7 +440,6 @@ def call(evm: Evm) -> None:
memory_output_size,
code,
disable_precompiles,
disable_create_opcodes,
)

# PROGRAM COUNTER
Expand Down Expand Up @@ -484,7 +484,6 @@ def callcode(evm: Evm) -> None:

(
disable_precompiles,
disable_create_opcodes,
code_address,
code,
delegated_access_gas_cost,
Expand Down Expand Up @@ -528,7 +527,6 @@ def callcode(evm: Evm) -> None:
memory_output_size,
code,
disable_precompiles,
disable_create_opcodes,
)

# PROGRAM COUNTER
Expand Down Expand Up @@ -629,7 +627,6 @@ def delegatecall(evm: Evm) -> None:

(
disable_precompiles,
disable_create_opcodes,
code_address,
code,
delegated_access_gas_cost,
Expand Down Expand Up @@ -664,7 +661,6 @@ def delegatecall(evm: Evm) -> None:
memory_output_size,
code,
disable_precompiles,
disable_create_opcodes,
)

# PROGRAM COUNTER
Expand Down Expand Up @@ -707,7 +703,6 @@ def staticcall(evm: Evm) -> None:
code_address = to
(
disable_precompiles,
disable_create_opcodes,
code_address,
code,
delegated_access_gas_cost,
Expand Down Expand Up @@ -742,7 +737,6 @@ def staticcall(evm: Evm) -> None:
memory_output_size,
code,
disable_precompiles,
disable_create_opcodes,
)

# PROGRAM COUNTER
Expand Down
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_next/vm/interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,6 @@ def process_message_call(message: Message) -> MessageCallOutput:
get_account(tx_state, delegated_address).code_hash,
)
message.code_address = delegated_address
message.disable_create_opcodes = True

evm = process_message(message)

Expand Down
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_nine/fork.py
Original file line number Diff line number Diff line change
Expand Up @@ -727,7 +727,6 @@ def process_unchecked_system_transaction(
accessed_storage_keys=set(),
disable_precompiles=False,
parent_evm=None,
disable_create_opcodes=False,
)

system_tx_output = process_message_call(system_tx_message)
Expand Down
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_nine/utils/message.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,4 @@ def prepare_message(
accessed_storage_keys=set(tx_env.access_list_storage_keys),
disable_precompiles=False,
parent_evm=None,
disable_create_opcodes=False,
)
1 change: 0 additions & 1 deletion src/ethereum/forks/monad_nine/vm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,6 @@ class Message:
accessed_storage_keys: Set[Tuple[Address, Bytes32]]
disable_precompiles: bool
parent_evm: Optional["Evm"]
disable_create_opcodes: bool


@final
Expand Down
Loading
Loading