Skip to content

Commit 920da05

Browse files
blockifier: add l3 compatibility for addresses
1 parent 2c4e54d commit 920da05

File tree

13 files changed

+78
-20
lines changed

13 files changed

+78
-20
lines changed

crates/apollo_batcher/src/cende_client_types.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,8 @@ fn get_l2_to_l1_messages(execution_info: &TransactionExecutionInfo) -> Vec<L2ToL
255255
let messages =
256256
call.execution.l2_to_l1_messages.iter().map(|l2_to_l1_message| L2ToL1Message {
257257
from_address: call.call.caller_address,
258-
to_address: l2_to_l1_message.message.to_address,
258+
to_address: EthAddress::try_from(l2_to_l1_message.message.to_address)
259+
.expect("Failed to convert L1Address to EthAddress"),
259260
payload: l2_to_l1_message.message.payload.clone(),
260261
});
261262
l2_to_l1_messages.extend(messages);

crates/apollo_consensus_orchestrator/src/cende/central_objects_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ use starknet_api::block::{
7979
};
8080
use starknet_api::consensus_transaction::InternalConsensusTransaction;
8181
use starknet_api::contract_class::{ContractClass, EntryPointType, SierraVersion};
82-
use starknet_api::core::{ClassHash, CompiledClassHash, EntryPointSelector, EthAddress};
82+
use starknet_api::core::{ClassHash, CompiledClassHash, EntryPointSelector, L1Address};
8383
use starknet_api::data_availability::{DataAvailabilityMode, L1DataAvailabilityMode};
8484
use starknet_api::executable_transaction::L1HandlerTransaction;
8585
use starknet_api::execution_resources::{GasAmount, GasVector};
@@ -502,7 +502,7 @@ fn call_info() -> CallInfo {
502502
l2_to_l1_messages: vec![OrderedL2ToL1Message {
503503
order: 1,
504504
message: MessageToL1 {
505-
to_address: EthAddress::try_from(felt!(1_u8)).unwrap(),
505+
to_address: L1Address::from(felt!(1_u8)),
506506
payload: L2ToL1Payload(felt_vector()),
507507
},
508508
}],

crates/apollo_rpc_execution/src/objects.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ use starknet_api::core::{
2929
ClassHash,
3030
ContractAddress,
3131
EntryPointSelector,
32+
EthAddress,
3233
Nonce,
3334
SequencerContractAddress,
3435
};
@@ -463,7 +464,8 @@ impl OrderedL2ToL1Message {
463464
order: blockifier_message.order,
464465
message: MessageToL1 {
465466
from_address,
466-
to_address: blockifier_message.message.to_address,
467+
to_address: EthAddress::try_from(blockifier_message.message.to_address)
468+
.expect("Failed to convert L1Address to EthAddress"),
467469
payload: blockifier_message.message.payload,
468470
},
469471
}

crates/blockifier/src/execution/call_info.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use cairo_vm::types::builtin_name::BuiltinName;
66
use cairo_vm::vm::runners::cairo_runner::ExecutionResources;
77
use serde::Serialize;
88
use starknet_api::block::{BlockHash, BlockNumber};
9-
use starknet_api::core::{ClassHash, ContractAddress, EthAddress};
9+
use starknet_api::core::{ClassHash, ContractAddress, L1Address};
1010
use starknet_api::execution_resources::{GasAmount, GasVector};
1111
use starknet_api::state::StorageKey;
1212
use starknet_api::transaction::fields::GasVectorComputationMode;
@@ -43,7 +43,7 @@ pub struct OrderedEvent {
4343
#[cfg_attr(feature = "transaction_serde", derive(serde::Deserialize))]
4444
#[derive(Debug, Default, Eq, PartialEq, Serialize)]
4545
pub struct MessageToL1 {
46-
pub to_address: EthAddress,
46+
pub to_address: L1Address,
4747
pub payload: L2ToL1Payload,
4848
}
4949

crates/blockifier/src/execution/deprecated_syscalls/hint_processor.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use starknet_api::core::{
2323
ClassHash,
2424
ContractAddress,
2525
EntryPointSelector,
26+
EthAddress,
2627
};
2728
use starknet_api::state::StorageKey;
2829
use starknet_api::transaction::constants::EXECUTE_ENTRY_POINT_NAME;
@@ -757,6 +758,9 @@ impl DeprecatedSyscallExecutor for DeprecatedSyscallHintProcessor<'_> {
757758
syscall_handler: &mut Self,
758759
) -> DeprecatedSyscallResult<SendMessageToL1Response> {
759760
let execution_context = &mut syscall_handler.context;
761+
if !execution_context.tx_context.block_context.chain_info.is_l3 {
762+
EthAddress::try_from(request.message.to_address)?;
763+
}
760764
let ordered_message_to_l1 = OrderedL2ToL1Message {
761765
order: execution_context.n_sent_messages_to_l1,
762766
message: request.message,

crates/blockifier/src/execution/deprecated_syscalls/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use deprecated_syscall_executor::{
66
};
77
use serde::Deserialize;
88
use starknet_api::block::{BlockNumber, BlockTimestamp};
9-
use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector, EthAddress};
9+
use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector};
1010
use starknet_api::state::StorageKey;
1111
use starknet_api::transaction::fields::{Calldata, ContractAddressSalt};
1212
use starknet_api::transaction::{EventContent, EventData, EventKey, L2ToL1Payload};
@@ -424,7 +424,8 @@ impl SyscallRequest for SendMessageToL1Request {
424424
vm: &VirtualMachine,
425425
ptr: &mut Relocatable,
426426
) -> DeprecatedSyscallExecutorBaseResult<SendMessageToL1Request> {
427-
let to_address = EthAddress::try_from(felt_from_ptr(vm, ptr)?)?;
427+
let to_address_felt = felt_from_ptr(vm, ptr)?;
428+
let to_address = to_address_felt.into();
428429
let payload =
429430
L2ToL1Payload(read_felt_array::<DeprecatedSyscallExecutorBaseError>(vm, ptr)?);
430431

crates/blockifier/src/execution/native/syscall_handler.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use cairo_native::starknet::{
1818
};
1919
use num_bigint::BigUint;
2020
use starknet_api::contract_class::EntryPointType;
21-
use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector, EthAddress};
21+
use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector, L1Address};
2222
use starknet_api::execution_resources::GasAmount;
2323
use starknet_api::state::StorageKey;
2424
use starknet_api::transaction::fields::{Calldata, ContractAddressSalt, TransactionSignature};
@@ -568,8 +568,7 @@ impl StarknetSyscallHandler for &mut NativeSyscallHandler<'_> {
568568
self.gas_costs().syscalls.send_message_to_l1.base_syscall_cost(),
569569
)?;
570570

571-
let to_address = EthAddress::try_from(to_address)
572-
.map_err(|err| self.handle_error(remaining_gas, err.into()))?;
571+
let to_address = L1Address::from(to_address);
573572
let message = MessageToL1 { to_address, payload: L2ToL1Payload(payload.to_vec()) };
574573

575574
self.base.send_message_to_l1(message).map_err(|err| self.handle_error(remaining_gas, err))

crates/blockifier/src/execution/syscalls/syscall_base.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use starknet_api::core::{
1111
ClassHash,
1212
ContractAddress,
1313
EntryPointSelector,
14+
EthAddress,
1415
Nonce,
1516
};
1617
use starknet_api::state::StorageKey;
@@ -391,6 +392,9 @@ impl<'state> SyscallHandlerBase<'state> {
391392
}
392393

393394
pub fn send_message_to_l1(&mut self, message: MessageToL1) -> SyscallResult<()> {
395+
if !self.context.tx_context.block_context.chain_info.is_l3 {
396+
EthAddress::try_from(message.to_address)?;
397+
}
394398
let ordered_message_to_l1 =
395399
OrderedL2ToL1Message { order: self.context.n_sent_messages_to_l1, message };
396400
self.l2_to_l1_messages.push(ordered_message_to_l1);

crates/blockifier/src/execution/syscalls/syscall_tests/send_message_to_l1.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ fn test_send_message_to_l1(runnable_version: RunnableCairo1) {
4242
..trivial_external_entry_point_new(test_contract)
4343
};
4444

45-
let to_address = EthAddress::try_from(to_address).unwrap();
45+
let to_address =
46+
EthAddress::try_from(to_address).expect("Failed to convert Felt to EthAddress").into();
4647
let message = MessageToL1 { to_address, payload: L2ToL1Payload(payload) };
4748

4849
let mut execution = entry_point_call.execute_directly(&mut state).unwrap().execution;
@@ -58,8 +59,8 @@ fn test_send_message_to_l1(runnable_version: RunnableCairo1) {
5859
OrderedL2ToL1Message {
5960
order: 0,
6061
message: MessageToL1 {
61-
to_address: EthAddress(
62-
0x00000000000000000000000000000000000004d2,
62+
to_address: L1Address(
63+
0x4d2,
6364
),
6465
payload: L2ToL1Payload(
6566
[

crates/blockifier/src/execution/syscalls/vm_syscall_utils.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use cairo_vm::vm::errors::vm_errors::VirtualMachineError;
99
use cairo_vm::vm::vm_core::VirtualMachine;
1010
use num_traits::ToPrimitive;
1111
use starknet_api::block::{BlockHash, BlockNumber};
12-
use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector, EthAddress};
12+
use starknet_api::core::{ClassHash, ContractAddress, EntryPointSelector};
1313
use starknet_api::execution_resources::GasAmount;
1414
use starknet_api::state::StorageKey;
1515
use starknet_api::transaction::fields::{Calldata, ContractAddressSalt, TransactionSignature};
@@ -404,7 +404,8 @@ impl SyscallRequest for SendMessageToL1Request {
404404
vm: &VirtualMachine,
405405
ptr: &mut Relocatable,
406406
) -> SyscallBaseResult<SendMessageToL1Request> {
407-
let to_address = EthAddress::try_from(felt_from_ptr(vm, ptr)?)?;
407+
let to_address_felt = felt_from_ptr(vm, ptr)?;
408+
let to_address = to_address_felt.into();
408409
let payload = L2ToL1Payload(read_felt_array::<SyscallExecutorBaseError>(vm, ptr)?);
409410

410411
Ok(SendMessageToL1Request { message: MessageToL1 { to_address, payload } })

0 commit comments

Comments
 (0)