Skip to content

Commit df07bce

Browse files
committed
update exec-specs and delegation logic
1 parent 76628ca commit df07bce

File tree

8 files changed

+71
-67
lines changed

8 files changed

+71
-67
lines changed

cairo/ethereum/prague/utils/message.cairo

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ from ethereum.prague.state import get_account, State, StateStruct, get_account_c
1616
from ethereum.prague.utils.address import compute_contract_address
1717
from ethereum.prague.transactions import Transaction
1818
from ethereum.prague.transactions_types import get_data, get_to, get_value
19-
from ethereum.prague.vm.eoa_delegation import get_delegated_code_address
2019

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

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

8784
let (empty_data: felt*) = alloc();
8885
tempvar empty_bytes_struct = new BytesStruct(empty_data, 0);
@@ -103,30 +100,7 @@ func prepare_message{
103100
let target_account = get_account{state=state}(current_target);
104101
tempvar code_address = OptionalAddress(new Address(current_target.value));
105102
let target_code = get_account_code{state=state}(current_target, target_account);
106-
let delegated_address = get_delegated_code_address(target_code);
107-
if (cast(delegated_address.value, felt) != 0) {
108-
assert disabled_precompiles = bool(1);
109-
hashdict_write{dict_ptr=access_list_addresses_ptr}(1, delegated_address.value, 1);
110-
tempvar delegated_address_ = Address([delegated_address.value]);
111-
let target_account = get_account{state=state}(delegated_address_);
112-
let target_code = get_account_code{state=state}(delegated_address_, target_account);
113-
tempvar state = state;
114-
tempvar access_list_addresses_ptr = access_list_addresses_ptr;
115-
tempvar range_check_ptr = range_check_ptr;
116-
tempvar target_code = target_code;
117-
tempvar bitwise_ptr = bitwise_ptr;
118-
tempvar keccak_ptr = keccak_ptr;
119-
tempvar poseidon_ptr = poseidon_ptr;
120-
} else {
121-
assert disabled_precompiles = bool(0);
122-
tempvar state = state;
123-
tempvar access_list_addresses_ptr = access_list_addresses_ptr;
124-
tempvar range_check_ptr = range_check_ptr;
125-
tempvar target_code = target_code;
126-
tempvar bitwise_ptr = bitwise_ptr;
127-
tempvar keccak_ptr = keccak_ptr;
128-
tempvar poseidon_ptr = poseidon_ptr;
129-
}
103+
130104
tempvar access_list_addresses_ptr = access_list_addresses_ptr;
131105
tempvar state = state;
132106
tempvar msg_data = msg_data;
@@ -181,7 +155,7 @@ func prepare_message{
181155
is_static=bool(0),
182156
accessed_addresses=accessed_addresses,
183157
accessed_storage_keys=accessed_storage_keys,
184-
disable_precompiles=disabled_precompiles,
158+
disable_precompiles=bool(0),
185159
parent_evm=Evm(cast(0, EvmStruct*)),
186160
),
187161
);

cairo/ethereum/prague/vm/eoa_delegation.cairo

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -390,30 +390,6 @@ func set_delegation{
390390
raise('InvalidBlock');
391391
}
392392

393-
let message_code_address_account = get_account{state=state}(Address([message.value.code_address.value]));
394-
let message_code = get_account_code{state=state}(Address([message.value.code_address.value]), message_code_address_account);
395-
MessageImpl.set_code{message=message}(message_code);
396-
397-
let is_delegated_final_check = is_valid_delegation(message_code);
398-
399-
if (is_delegated_final_check.value != FALSE) {
400-
MessageImpl.set_disable_precompiles(bool(TRUE));
401-
402-
let delegated_code_address = get_delegated_code_address(message_code);
403-
MessageImpl.set_code_address(delegated_code_address);
404-
405-
set_address_add{set_address=accessed_addresses}(Address([message.value.code_address.value]));
406-
MessageImpl.set_accessed_addresses{message=message}(accessed_addresses);
407-
408-
let message_code_address_account_post_delegation = get_account{state=state}(Address([message.value.code_address.value]));
409-
let message_code_post_delegation = get_account_code{state=state}(Address([message.value.code_address.value]), message_code_address_account_post_delegation);
410-
MessageImpl.set_code{message=message}(message_code_post_delegation);
411-
412-
BlockEnvImpl.set_state{block_env=block_env}(state);
413-
MessageImpl.set_block_env(block_env);
414-
return final_refund_counter;
415-
}
416-
417393
BlockEnvImpl.set_state{block_env=block_env}(state);
418394
MessageImpl.set_block_env(block_env);
419395
MessageImpl.set_accessed_addresses(accessed_addresses);

cairo/ethereum/prague/vm/interpreter.cairo

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ from ethereum_types.numeric import Uint, bool, SetUint, SetUintStruct, SetUintDi
1111
from ethereum.prague.blocks import TupleLog, TupleLogStruct, Log
1212
from ethereum.prague.vm.gas import GasConstants, charge_gas
1313
from ethereum.prague.fork_types import (
14+
Address,
1415
SetAddress,
1516
SetTupleAddressBytes32,
1617
SetTupleAddressBytes32Struct,
@@ -19,6 +20,7 @@ from ethereum.prague.fork_types import (
1920
SetTupleAddressBytes32DictAccess,
2021
)
2122

23+
from ethereum.utils.hash_dicts import set_address_add
2224
from ethereum.prague.trie import TrieTupleAddressBytes32U256, TrieTupleAddressBytes32U256Struct
2325
from ethereum.prague.vm.evm_impl import Evm, EvmStruct, Message, MessageImpl, MessageStruct
2426
from ethereum.prague.vm.env_impl import BlockEnvironment, BlockEnvImpl, TransactionEnvImpl
@@ -54,8 +56,10 @@ from ethereum.prague.state import (
5456
set_code,
5557
State,
5658
StateStruct,
59+
get_account,
60+
get_account_code,
5761
)
58-
from ethereum.prague.vm.eoa_delegation import set_delegation
62+
from ethereum.prague.vm.eoa_delegation import set_delegation, get_delegated_code_address
5963

6064
from ethereum.prague.vm.evm_impl import EvmImpl
6165

@@ -557,7 +561,55 @@ func process_message_call{
557561
let range_check96_ptr = cast([ap - 4], felt*);
558562
let add_mod_ptr = cast([ap - 3], ModBuiltin*);
559563
let mul_mod_ptr = cast([ap - 2], ModBuiltin*);
560-
let message = Message(cast([ap - 1], MessageStruct*));
564+
tempvar message = Message(cast([ap - 1], MessageStruct*));
565+
566+
let maybe_delegated_address = get_delegated_code_address(message.value.code);
567+
if (maybe_delegated_address.value != 0) {
568+
tempvar delegated_address = Address([maybe_delegated_address.value]);
569+
MessageImpl.set_disable_precompiles{message=message}(bool(1));
570+
let accessed_addresses = message.value.accessed_addresses;
571+
set_address_add{set_address=accessed_addresses}(delegated_address);
572+
MessageImpl.set_accessed_addresses{message=message}(accessed_addresses);
573+
574+
MessageImpl.set_code_address{message=message}(maybe_delegated_address);
575+
576+
let message_code_address_account_post_delegation = get_account{state=state}(
577+
delegated_address
578+
);
579+
let message_code_post_delegation = get_account_code{state=state}(
580+
delegated_address, message_code_address_account_post_delegation
581+
);
582+
MessageImpl.set_code{message=message}(message_code_post_delegation);
583+
584+
BlockEnvImpl.set_state{block_env=block_env}(state);
585+
MessageImpl.set_block_env{message=message}(block_env);
586+
587+
tempvar range_check_ptr = range_check_ptr;
588+
tempvar bitwise_ptr = bitwise_ptr;
589+
tempvar keccak_ptr = keccak_ptr;
590+
tempvar poseidon_ptr = poseidon_ptr;
591+
tempvar range_check96_ptr = range_check96_ptr;
592+
tempvar add_mod_ptr = add_mod_ptr;
593+
tempvar mul_mod_ptr = mul_mod_ptr;
594+
tempvar message = message;
595+
} else {
596+
tempvar range_check_ptr = range_check_ptr;
597+
tempvar bitwise_ptr = bitwise_ptr;
598+
tempvar keccak_ptr = keccak_ptr;
599+
tempvar poseidon_ptr = poseidon_ptr;
600+
tempvar range_check96_ptr = range_check96_ptr;
601+
tempvar add_mod_ptr = add_mod_ptr;
602+
tempvar mul_mod_ptr = mul_mod_ptr;
603+
tempvar message = message;
604+
}
605+
let range_check_ptr = [ap - 8];
606+
let bitwise_ptr = cast([ap - 7], BitwiseBuiltin*);
607+
let keccak_ptr = cast([ap - 6], felt*);
608+
let poseidon_ptr = cast([ap - 5], PoseidonBuiltin*);
609+
let range_check96_ptr = cast([ap - 4], felt*);
610+
let add_mod_ptr = cast([ap - 3], ModBuiltin*);
611+
let mul_mod_ptr = cast([ap - 2], ModBuiltin*);
612+
tempvar message = Message(cast([ap - 1], MessageStruct*));
561613

562614
// Regular message call path
563615
let evm = process_message(message);
@@ -596,7 +648,9 @@ func process_message_call{
596648
if (cast(evm.value.error, felt) != 0) {
597649
finalize_evm{evm=evm}();
598650
%{ trace_tx_end %}
599-
let msg = create_empty_message_call_output(evm.value.gas_left, refund_counter, evm.value.error);
651+
let msg = create_empty_message_call_output(
652+
evm.value.gas_left, refund_counter, evm.value.error
653+
);
600654
return (msg, block_env);
601655
}
602656

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ dev-dependencies = [
5151
]
5252

5353
[tool.uv.sources]
54-
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "9e5f36b4d7f8e8ae2d8831d2460fbd88648fcdee" }
54+
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "fceaa9b8d0598e1a208acaca537d2c48676d9593" }
5555
cairo-addons = { workspace = true }
5656
cairo-ec = { workspace = true }
5757
cairo-core = { workspace = true }

python/cairo-ec/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,6 @@ known_first_party = [
5555
]
5656

5757
[tool.uv.sources]
58-
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "9e5f36b4d7f8e8ae2d8831d2460fbd88648fcdee" }
58+
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "fceaa9b8d0598e1a208acaca537d2c48676d9593" }
5959
cairo-addons = { workspace = true }
6060
cairo-core = { workspace = true }

python/keth-types/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ known_first_party = [
3030

3131

3232
[tool.uv.sources]
33-
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "9e5f36b4d7f8e8ae2d8831d2460fbd88648fcdee" }
33+
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "fceaa9b8d0598e1a208acaca537d2c48676d9593" }

python/mpt/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,6 @@ known_first_party = [
5353
]
5454

5555
[tool.uv.sources]
56-
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "9e5f36b4d7f8e8ae2d8831d2460fbd88648fcdee" }
56+
ethereum-execution = { git = "https://github.com/kkrt-labs/execution-specs.git", rev = "fceaa9b8d0598e1a208acaca537d2c48676d9593" }
5757
cairo-addons = { workspace = true }
5858
cairo-core = { workspace = true }

uv.lock

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)