Skip to content
Draft
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
30 changes: 2 additions & 28 deletions cairo/ethereum/prague/utils/message.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ from ethereum.prague.state import get_account, State, StateStruct, get_account_c
from ethereum.prague.utils.address import compute_contract_address
from ethereum.prague.transactions import Transaction
from ethereum.prague.transactions_types import get_data, get_to, get_value
from ethereum.prague.vm.eoa_delegation import get_delegated_code_address

from starkware.cairo.common.alloc import alloc
from starkware.cairo.common.cairo_builtins import BitwiseBuiltin, PoseidonBuiltin
Expand Down Expand Up @@ -76,13 +75,11 @@ func prepare_message{
let data = get_data(tx);

let state = block_env.value.state;
local disabled_precompiles: bool;
if (cast(to.value.bytes0, felt) != 0) {
let caller_account = get_account{state=state}(tx_env.value.origin);
// wont't underflow: the nonce of the caller is always incremented by 1 before `prepare_message`.
let nonce = Uint(caller_account.value.nonce.value - 1);
let current_target = compute_contract_address(tx_env.value.origin, nonce);
assert disabled_precompiles = bool(0);

let (empty_data: felt*) = alloc();
tempvar empty_bytes_struct = new BytesStruct(empty_data, 0);
Expand All @@ -103,30 +100,7 @@ func prepare_message{
let target_account = get_account{state=state}(current_target);
tempvar code_address = OptionalAddress(new Address(current_target.value));
let target_code = get_account_code{state=state}(current_target, target_account);
let delegated_address = get_delegated_code_address(target_code);
if (cast(delegated_address.value, felt) != 0) {
assert disabled_precompiles = bool(1);
hashdict_write{dict_ptr=access_list_addresses_ptr}(1, delegated_address.value, 1);
tempvar delegated_address_ = Address([delegated_address.value]);
let target_account = get_account{state=state}(delegated_address_);
let target_code = get_account_code{state=state}(delegated_address_, target_account);
tempvar state = state;
tempvar access_list_addresses_ptr = access_list_addresses_ptr;
tempvar range_check_ptr = range_check_ptr;
tempvar target_code = target_code;
tempvar bitwise_ptr = bitwise_ptr;
tempvar keccak_ptr = keccak_ptr;
tempvar poseidon_ptr = poseidon_ptr;
} else {
assert disabled_precompiles = bool(0);
tempvar state = state;
tempvar access_list_addresses_ptr = access_list_addresses_ptr;
tempvar range_check_ptr = range_check_ptr;
tempvar target_code = target_code;
tempvar bitwise_ptr = bitwise_ptr;
tempvar keccak_ptr = keccak_ptr;
tempvar poseidon_ptr = poseidon_ptr;
}

tempvar access_list_addresses_ptr = access_list_addresses_ptr;
tempvar state = state;
tempvar msg_data = msg_data;
Expand Down Expand Up @@ -181,7 +155,7 @@ func prepare_message{
is_static=bool(0),
accessed_addresses=accessed_addresses,
accessed_storage_keys=accessed_storage_keys,
disable_precompiles=disabled_precompiles,
disable_precompiles=bool(0),
parent_evm=Evm(cast(0, EvmStruct*)),
),
);
Expand Down
24 changes: 0 additions & 24 deletions cairo/ethereum/prague/vm/eoa_delegation.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -390,30 +390,6 @@ func set_delegation{
raise('InvalidBlock');
}

let message_code_address_account = get_account{state=state}(Address([message.value.code_address.value]));
let message_code = get_account_code{state=state}(Address([message.value.code_address.value]), message_code_address_account);
MessageImpl.set_code{message=message}(message_code);

let is_delegated_final_check = is_valid_delegation(message_code);

if (is_delegated_final_check.value != FALSE) {
MessageImpl.set_disable_precompiles(bool(TRUE));

let delegated_code_address = get_delegated_code_address(message_code);
MessageImpl.set_code_address(delegated_code_address);

set_address_add{set_address=accessed_addresses}(Address([message.value.code_address.value]));
MessageImpl.set_accessed_addresses{message=message}(accessed_addresses);

let message_code_address_account_post_delegation = get_account{state=state}(Address([message.value.code_address.value]));
let message_code_post_delegation = get_account_code{state=state}(Address([message.value.code_address.value]), message_code_address_account_post_delegation);
MessageImpl.set_code{message=message}(message_code_post_delegation);

BlockEnvImpl.set_state{block_env=block_env}(state);
MessageImpl.set_block_env(block_env);
return final_refund_counter;
}

BlockEnvImpl.set_state{block_env=block_env}(state);
MessageImpl.set_block_env(block_env);
MessageImpl.set_accessed_addresses(accessed_addresses);
Expand Down
60 changes: 57 additions & 3 deletions cairo/ethereum/prague/vm/interpreter.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ from ethereum_types.numeric import Uint, bool, SetUint, SetUintStruct, SetUintDi
from ethereum.prague.blocks import TupleLog, TupleLogStruct, Log
from ethereum.prague.vm.gas import GasConstants, charge_gas
from ethereum.prague.fork_types import (
Address,
SetAddress,
SetTupleAddressBytes32,
SetTupleAddressBytes32Struct,
Expand All @@ -19,6 +20,7 @@ from ethereum.prague.fork_types import (
SetTupleAddressBytes32DictAccess,
)

from ethereum.utils.hash_dicts import set_address_add
from ethereum.prague.trie import TrieTupleAddressBytes32U256, TrieTupleAddressBytes32U256Struct
from ethereum.prague.vm.evm_impl import Evm, EvmStruct, Message, MessageImpl, MessageStruct
from ethereum.prague.vm.env_impl import BlockEnvironment, BlockEnvImpl, TransactionEnvImpl
Expand Down Expand Up @@ -54,8 +56,10 @@ from ethereum.prague.state import (
set_code,
State,
StateStruct,
get_account,
get_account_code,
)
from ethereum.prague.vm.eoa_delegation import set_delegation
from ethereum.prague.vm.eoa_delegation import set_delegation, get_delegated_code_address

from ethereum.prague.vm.evm_impl import EvmImpl

Expand Down Expand Up @@ -557,7 +561,55 @@ func process_message_call{
let range_check96_ptr = cast([ap - 4], felt*);
let add_mod_ptr = cast([ap - 3], ModBuiltin*);
let mul_mod_ptr = cast([ap - 2], ModBuiltin*);
let message = Message(cast([ap - 1], MessageStruct*));
tempvar message = Message(cast([ap - 1], MessageStruct*));

let maybe_delegated_address = get_delegated_code_address(message.value.code);
if (maybe_delegated_address.value != 0) {
tempvar delegated_address = Address([maybe_delegated_address.value]);
MessageImpl.set_disable_precompiles{message=message}(bool(1));
let accessed_addresses = message.value.accessed_addresses;
set_address_add{set_address=accessed_addresses}(delegated_address);
MessageImpl.set_accessed_addresses{message=message}(accessed_addresses);

MessageImpl.set_code_address{message=message}(maybe_delegated_address);

let message_code_address_account_post_delegation = get_account{state=state}(
delegated_address
);
let message_code_post_delegation = get_account_code{state=state}(
delegated_address, message_code_address_account_post_delegation
);
MessageImpl.set_code{message=message}(message_code_post_delegation);

BlockEnvImpl.set_state{block_env=block_env}(state);
MessageImpl.set_block_env{message=message}(block_env);

tempvar range_check_ptr = range_check_ptr;
tempvar bitwise_ptr = bitwise_ptr;
tempvar keccak_ptr = keccak_ptr;
tempvar poseidon_ptr = poseidon_ptr;
tempvar range_check96_ptr = range_check96_ptr;
tempvar add_mod_ptr = add_mod_ptr;
tempvar mul_mod_ptr = mul_mod_ptr;
tempvar message = message;
} else {
tempvar range_check_ptr = range_check_ptr;
tempvar bitwise_ptr = bitwise_ptr;
tempvar keccak_ptr = keccak_ptr;
tempvar poseidon_ptr = poseidon_ptr;
tempvar range_check96_ptr = range_check96_ptr;
tempvar add_mod_ptr = add_mod_ptr;
tempvar mul_mod_ptr = mul_mod_ptr;
tempvar message = message;
}
let range_check_ptr = [ap - 8];
let bitwise_ptr = cast([ap - 7], BitwiseBuiltin*);
let keccak_ptr = cast([ap - 6], felt*);
let poseidon_ptr = cast([ap - 5], PoseidonBuiltin*);
let range_check96_ptr = cast([ap - 4], felt*);
let add_mod_ptr = cast([ap - 3], ModBuiltin*);
let mul_mod_ptr = cast([ap - 2], ModBuiltin*);
tempvar message = Message(cast([ap - 1], MessageStruct*));

// Regular message call path
let evm = process_message(message);
Expand Down Expand Up @@ -596,7 +648,9 @@ func process_message_call{
if (cast(evm.value.error, felt) != 0) {
finalize_evm{evm=evm}();
%{ trace_tx_end %}
let msg = create_empty_message_call_output(evm.value.gas_left, refund_counter, evm.value.error);
let msg = create_empty_message_call_output(
evm.value.gas_left, refund_counter, evm.value.error
);
return (msg, block_env);
}

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ dev-dependencies = [
]

[tool.uv.sources]
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "9e5f36b4d7f8e8ae2d8831d2460fbd88648fcdee" }
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "fceaa9b8d0598e1a208acaca537d2c48676d9593" }
cairo-addons = { workspace = true }
cairo-ec = { workspace = true }
cairo-core = { workspace = true }
Expand Down
2 changes: 1 addition & 1 deletion python/cairo-ec/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,6 @@ known_first_party = [
]

[tool.uv.sources]
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "9e5f36b4d7f8e8ae2d8831d2460fbd88648fcdee" }
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "fceaa9b8d0598e1a208acaca537d2c48676d9593" }
cairo-addons = { workspace = true }
cairo-core = { workspace = true }
2 changes: 1 addition & 1 deletion python/keth-types/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,4 @@ known_first_party = [


[tool.uv.sources]
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "9e5f36b4d7f8e8ae2d8831d2460fbd88648fcdee" }
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "fceaa9b8d0598e1a208acaca537d2c48676d9593" }
2 changes: 1 addition & 1 deletion python/mpt/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,6 @@ known_first_party = [
]

[tool.uv.sources]
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "9e5f36b4d7f8e8ae2d8831d2460fbd88648fcdee" }
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "fceaa9b8d0598e1a208acaca537d2c48676d9593" }
cairo-addons = { workspace = true }
cairo-core = { workspace = true }
16 changes: 8 additions & 8 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading