diff --git a/crates/blockifier/src/execution/call_info.rs b/crates/blockifier/src/execution/call_info.rs index 3dac2bd6e4b..c3c470061f3 100644 --- a/crates/blockifier/src/execution/call_info.rs +++ b/crates/blockifier/src/execution/call_info.rs @@ -4,7 +4,7 @@ use std::ops::Add; use cairo_vm::vm::runners::cairo_runner::ExecutionResources; use serde::Serialize; -use starknet_api::core::{ClassHash, ContractAddress, EthAddress, PatriciaKey}; +use starknet_api::core::{ClassHash, ContractAddress, PatriciaKey}; use starknet_api::state::StorageKey; use starknet_api::transaction::{EventContent, L2ToL1Payload}; use starknet_api::{felt, patricia_key}; @@ -55,7 +55,7 @@ impl MessageL1CostInfo { #[derive(Clone, Debug, Default, Eq, PartialEq, Serialize)] pub struct MessageToL1 { - pub to_address: EthAddress, + pub to_address: Felt, pub payload: L2ToL1Payload, } @@ -144,7 +144,7 @@ impl TestExecutionSummary { .map(|i| OrderedL2ToL1Message { order: i, message: MessageToL1 { - to_address: EthAddress::default(), + to_address: Felt::default(), payload: L2ToL1Payload(vec![Felt::default()]), }, }) diff --git a/crates/blockifier/src/execution/deprecated_syscalls/mod.rs b/crates/blockifier/src/execution/deprecated_syscalls/mod.rs index 9e75f5be6b4..104b121e417 100644 --- a/crates/blockifier/src/execution/deprecated_syscalls/mod.rs +++ b/crates/blockifier/src/execution/deprecated_syscalls/mod.rs @@ -3,45 +3,26 @@ use cairo_vm::vm::vm_core::VirtualMachine; use serde::Deserialize; use starknet_api::block::{BlockNumber, BlockTimestamp}; use starknet_api::core::{ - calculate_contract_address, - ClassHash, - ContractAddress, - EntryPointSelector, - EthAddress, + calculate_contract_address, ClassHash, ContractAddress, EntryPointSelector, }; use starknet_api::deprecated_contract_class::EntryPointType; use starknet_api::state::StorageKey; use starknet_api::transaction::{ - Calldata, - ContractAddressSalt, - EventContent, - EventData, - EventKey, - L2ToL1Payload, + Calldata, ContractAddressSalt, EventContent, EventData, EventKey, L2ToL1Payload, }; use starknet_types_core::felt::Felt; use strum_macros::EnumIter; use self::hint_processor::{ - execute_inner_call, - execute_library_call, - felt_to_bool, - read_call_params, - read_calldata, - read_felt_array, - DeprecatedSyscallExecutionError, - DeprecatedSyscallHintProcessor, + execute_inner_call, execute_library_call, felt_to_bool, read_call_params, read_calldata, + read_felt_array, DeprecatedSyscallExecutionError, DeprecatedSyscallHintProcessor, }; use super::syscalls::exceeds_event_size_limit; use crate::execution::call_info::{MessageToL1, OrderedEvent, OrderedL2ToL1Message}; use crate::execution::common_hints::ExecutionMode; use crate::execution::entry_point::{CallEntryPoint, CallType, ConstructorContext}; use crate::execution::execution_utils::{ - execute_deployment, - felt_from_ptr, - write_felt, - write_maybe_relocatable, - ReadOnlySegment, + execute_deployment, felt_from_ptr, write_felt, write_maybe_relocatable, ReadOnlySegment, }; #[cfg(test)] @@ -676,7 +657,7 @@ impl SyscallRequest for SendMessageToL1Request { vm: &VirtualMachine, ptr: &mut Relocatable, ) -> DeprecatedSyscallResult { - let to_address = EthAddress::try_from(felt_from_ptr(vm, ptr)?)?; + let to_address = felt_from_ptr(vm, ptr)?; let payload = L2ToL1Payload(read_felt_array::(vm, ptr)?); Ok(SendMessageToL1Request { message: MessageToL1 { to_address, payload } }) diff --git a/crates/blockifier/src/execution/syscalls/mod.rs b/crates/blockifier/src/execution/syscalls/mod.rs index e8849b6f943..b7a29bc0cc7 100644 --- a/crates/blockifier/src/execution/syscalls/mod.rs +++ b/crates/blockifier/src/execution/syscalls/mod.rs @@ -3,37 +3,19 @@ use cairo_vm::vm::vm_core::VirtualMachine; use num_traits::ToPrimitive; use starknet_api::block::{BlockHash, BlockNumber}; use starknet_api::core::{ - calculate_contract_address, - ClassHash, - ContractAddress, - EntryPointSelector, - EthAddress, + calculate_contract_address, ClassHash, ContractAddress, EntryPointSelector, }; use starknet_api::deprecated_contract_class::EntryPointType; use starknet_api::state::StorageKey; use starknet_api::transaction::{ - Calldata, - ContractAddressSalt, - EventContent, - EventData, - EventKey, - L2ToL1Payload, + Calldata, ContractAddressSalt, EventContent, EventData, EventKey, L2ToL1Payload, }; use starknet_types_core::felt::Felt; use self::hint_processor::{ - create_retdata_segment, - execute_inner_call, - execute_library_call, - felt_to_bool, - read_call_params, - read_calldata, - read_felt_array, - write_segment, - EmitEventError, - SyscallExecutionError, - SyscallHintProcessor, - BLOCK_NUMBER_OUT_OF_RANGE_ERROR, + create_retdata_segment, execute_inner_call, execute_library_call, felt_to_bool, + read_call_params, read_calldata, read_felt_array, write_segment, EmitEventError, + SyscallExecutionError, SyscallHintProcessor, BLOCK_NUMBER_OUT_OF_RANGE_ERROR, }; use crate::abi::constants; use crate::execution::call_info::{MessageToL1, OrderedEvent, OrderedL2ToL1Message}; @@ -41,11 +23,7 @@ use crate::execution::contract_class::ContractClass; use crate::execution::deprecated_syscalls::DeprecatedSyscallSelector; use crate::execution::entry_point::{CallEntryPoint, CallType, ConstructorContext}; use crate::execution::execution_utils::{ - execute_deployment, - felt_from_ptr, - write_felt, - write_maybe_relocatable, - ReadOnlySegment, + execute_deployment, felt_from_ptr, write_felt, write_maybe_relocatable, ReadOnlySegment, }; use crate::execution::syscalls::hint_processor::{INVALID_INPUT_LENGTH_ERROR, OUT_OF_GAS_ERROR}; use crate::transaction::transaction_utils::update_remaining_gas; @@ -57,6 +35,9 @@ pub mod secp; #[cfg(test)] #[path = "syscalls_test.rs"] pub mod syscalls_test; +#[cfg(test)] +#[path = "syscalls_test_katana.rs"] +pub mod syscalls_test_katana; pub type SyscallResult = Result; pub type WriteResponseResult = SyscallResult<()>; @@ -564,7 +545,7 @@ pub struct SendMessageToL1Request { impl SyscallRequest for SendMessageToL1Request { // The Cairo struct contains: `to_address`, `payload_size`, `payload`. fn read(vm: &VirtualMachine, ptr: &mut Relocatable) -> SyscallResult { - let to_address = EthAddress::try_from(felt_from_ptr(vm, ptr)?)?; + let to_address = felt_from_ptr(vm, ptr)?; let payload = L2ToL1Payload(read_felt_array::(vm, ptr)?); Ok(SendMessageToL1Request { message: MessageToL1 { to_address, payload } }) @@ -709,7 +690,7 @@ pub fn keccak( if remainder != 0 { return Err(SyscallExecutionError::SyscallError { error_data: vec![ - Felt::from_hex(INVALID_INPUT_LENGTH_ERROR).map_err(SyscallExecutionError::from)?, + Felt::from_hex(INVALID_INPUT_LENGTH_ERROR).map_err(SyscallExecutionError::from)? ], }); } diff --git a/crates/blockifier/src/execution/syscalls/syscalls_test.rs b/crates/blockifier/src/execution/syscalls/syscalls_test.rs index a5cb5696306..d4beaa1c06b 100644 --- a/crates/blockifier/src/execution/syscalls/syscalls_test.rs +++ b/crates/blockifier/src/execution/syscalls/syscalls_test.rs @@ -7,31 +7,13 @@ use cairo_vm::vm::runners::cairo_runner::ExecutionResources; use num_traits::Pow; use pretty_assertions::assert_eq; use rstest::rstest; -use starknet_api::core::{ - calculate_contract_address, - ChainId, - ContractAddress, - EthAddress, - PatriciaKey, -}; +use starknet_api::core::{calculate_contract_address, ChainId, ContractAddress, PatriciaKey}; use starknet_api::data_availability::DataAvailabilityMode; use starknet_api::state::StorageKey; use starknet_api::transaction::{ - AccountDeploymentData, - Calldata, - ContractAddressSalt, - EventContent, - EventData, - EventKey, - Fee, - L2ToL1Payload, - PaymasterData, - Resource, - ResourceBounds, - ResourceBoundsMapping, - Tip, - TransactionHash, - TransactionVersion, + AccountDeploymentData, Calldata, ContractAddressSalt, EventContent, EventData, EventKey, Fee, + L2ToL1Payload, PaymasterData, Resource, ResourceBounds, ResourceBoundsMapping, Tip, + TransactionHash, TransactionVersion, }; use starknet_api::{calldata, felt}; use starknet_types_core::felt::Felt; @@ -41,48 +23,27 @@ use crate::abi::abi_utils::selector_from_name; use crate::abi::constants; use crate::context::ChainInfo; use crate::execution::call_info::{ - CallExecution, - CallInfo, - MessageToL1, - OrderedEvent, - OrderedL2ToL1Message, - Retdata, + CallExecution, CallInfo, MessageToL1, OrderedEvent, OrderedL2ToL1Message, Retdata, }; use crate::execution::common_hints::ExecutionMode; use crate::execution::entry_point::{CallEntryPoint, CallType}; use crate::execution::errors::EntryPointExecutionError; use crate::execution::syscalls::hint_processor::{ - EmitEventError, - BLOCK_NUMBER_OUT_OF_RANGE_ERROR, - L1_GAS, - L2_GAS, - OUT_OF_GAS_ERROR, + EmitEventError, BLOCK_NUMBER_OUT_OF_RANGE_ERROR, L1_GAS, L2_GAS, OUT_OF_GAS_ERROR, }; use crate::execution::syscalls::SyscallSelector; use crate::state::state_api::{State, StateReader}; use crate::test_utils::contracts::FeatureContract; use crate::test_utils::initial_test_state::test_state; use crate::test_utils::{ - calldata_for_deploy_test, - create_calldata, - get_syscall_resources, - trivial_external_entry_point_new, - trivial_external_entry_point_with_address, - CairoVersion, - BALANCE, - CHAIN_ID_NAME, - CURRENT_BLOCK_NUMBER, - CURRENT_BLOCK_NUMBER_FOR_VALIDATE, - CURRENT_BLOCK_TIMESTAMP, - CURRENT_BLOCK_TIMESTAMP_FOR_VALIDATE, - TEST_SEQUENCER_ADDRESS, + calldata_for_deploy_test, create_calldata, get_syscall_resources, + trivial_external_entry_point_new, trivial_external_entry_point_with_address, CairoVersion, + BALANCE, CHAIN_ID_NAME, CURRENT_BLOCK_NUMBER, CURRENT_BLOCK_NUMBER_FOR_VALIDATE, + CURRENT_BLOCK_TIMESTAMP, CURRENT_BLOCK_TIMESTAMP_FOR_VALIDATE, TEST_SEQUENCER_ADDRESS, }; use crate::transaction::constants::QUERY_VERSION_BASE_BIT; use crate::transaction::objects::{ - CommonAccountFields, - CurrentTransactionInfo, - DeprecatedTransactionInfo, - TransactionInfo, + CommonAccountFields, CurrentTransactionInfo, DeprecatedTransactionInfo, TransactionInfo, }; use crate::versioned_constants::VersionedConstants; use crate::{check_entry_point_execution_error_for_custom_hint, nonce, retdata, storage_key}; @@ -601,9 +562,11 @@ fn test_library_call_assert_fails() { ..trivial_external_entry_point_new(test_contract) }; - assert!( - entry_point_call.execute_directly(&mut state).unwrap_err().to_string().contains("x != y") - ); + assert!(entry_point_call + .execute_directly(&mut state) + .unwrap_err() + .to_string() + .contains("x != y")); } #[test] @@ -844,7 +807,6 @@ fn test_send_message_to_l1() { ..trivial_external_entry_point_new(test_contract) }; - let to_address = EthAddress::try_from(to_address).unwrap(); let message = MessageToL1 { to_address, payload: L2ToL1Payload(payload) }; assert_eq!( diff --git a/crates/blockifier/src/execution/syscalls/syscalls_test_katana.rs b/crates/blockifier/src/execution/syscalls/syscalls_test_katana.rs new file mode 100644 index 00000000000..6a0a5228e84 --- /dev/null +++ b/crates/blockifier/src/execution/syscalls/syscalls_test_katana.rs @@ -0,0 +1,51 @@ +use cairo_vm::Felt252; +use pretty_assertions::assert_eq; +use starknet_api::felt; +use starknet_api::transaction::{Calldata, L2ToL1Payload}; + +use crate::abi::abi_utils::selector_from_name; +use crate::context::ChainInfo; +use crate::execution::call_info::{CallExecution, MessageToL1, OrderedL2ToL1Message}; +use crate::execution::entry_point::CallEntryPoint; +use crate::test_utils::contracts::FeatureContract; +use crate::test_utils::initial_test_state::test_state; +use crate::test_utils::{trivial_external_entry_point_new, CairoVersion, BALANCE}; + +#[test] +fn test_send_message_to_l1_with_longer_than_eth_address() { + let test_contract = FeatureContract::TestContract(CairoVersion::Cairo1); + let chain_info = &ChainInfo::create_for_testing(); + let mut state = test_state(chain_info, BALANCE, &[(test_contract, 1)]); + + let to_address = Felt252::MAX; + let payload = vec![felt!(2019_u16), felt!(2020_u16), felt!(2021_u16)]; + let calldata = Calldata( + [ + vec![ + to_address, + // TODO(Ori, 1/2/2024): Write an indicative expect message explaining why the + // convertion works. + felt!(u64::try_from(payload.len()).expect("Failed to convert usize to u64.")), + ], + payload.clone(), + ] + .concat() + .into(), + ); + let entry_point_call = CallEntryPoint { + entry_point_selector: selector_from_name("test_send_message_to_l1"), + calldata, + ..trivial_external_entry_point_new(test_contract) + }; + + let message = MessageToL1 { to_address, payload: L2ToL1Payload(payload) }; + + assert_eq!( + entry_point_call.execute_directly(&mut state).unwrap().execution, + CallExecution { + l2_to_l1_messages: vec![OrderedL2ToL1Message { order: 0, message }], + gas_consumed: 22990, + ..Default::default() + } + ); +} diff --git a/crates/blockifier/src/transaction/transactions_test.rs b/crates/blockifier/src/transaction/transactions_test.rs index e868179078c..3bb7d4efa01 100644 --- a/crates/blockifier/src/transaction/transactions_test.rs +++ b/crates/blockifier/src/transaction/transactions_test.rs @@ -9,7 +9,7 @@ use num_traits::Pow; use once_cell::sync::Lazy; use pretty_assertions::assert_eq; use rstest::{fixture, rstest}; -use starknet_api::core::{ChainId, ClassHash, ContractAddress, EthAddress, Nonce, PatriciaKey}; +use starknet_api::core::{ChainId, ClassHash, ContractAddress, Nonce, PatriciaKey}; use starknet_api::deprecated_contract_class::EntryPointType; use starknet_api::state::StorageKey; use starknet_api::transaction::{ @@ -684,7 +684,7 @@ fn test_invoke_tx_advanced_operations( let expected_msg = OrderedL2ToL1Message { order: 0, message: MessageToL1 { - to_address: EthAddress::try_from(to_address).unwrap(), + to_address, payload: L2ToL1Payload(vec![felt!(12_u32), felt!(34_u32)]), }, }; diff --git a/crates/committer_cli/src/tests/utils/objects.rs b/crates/committer_cli/src/tests/utils/objects.rs index c75d6c1dc19..7b06fd65932 100644 --- a/crates/committer_cli/src/tests/utils/objects.rs +++ b/crates/committer_cli/src/tests/utils/objects.rs @@ -1,29 +1,12 @@ use indexmap::indexmap; use starknet_api::block_hash::block_hash_calculator::{ - TransactionHashingData, - TransactionOutputForHash, -}; -use starknet_api::core::{ - ClassHash, - CompiledClassHash, - ContractAddress, - EthAddress, - Nonce, - PatriciaKey, + TransactionHashingData, TransactionOutputForHash, }; +use starknet_api::core::{ClassHash, CompiledClassHash, ContractAddress, Nonce, PatriciaKey}; use starknet_api::state::{StorageKey, ThinStateDiff}; use starknet_api::transaction::{ - Event, - EventContent, - EventData, - EventKey, - Fee, - GasVector, - L2ToL1Payload, - MessageToL1, - RevertedTransactionExecutionStatus, - TransactionExecutionStatus, - TransactionHash, + Event, EventContent, EventData, EventKey, Fee, GasVector, L2ToL1Payload, MessageToL1, + RevertedTransactionExecutionStatus, TransactionExecutionStatus, TransactionHash, TransactionSignature, }; use starknet_types_core::felt::Felt; @@ -52,8 +35,7 @@ pub(crate) fn get_transaction_output_for_hash( gas_consumed: GasVector { l1_gas: 0, l1_data_gas: 64 }, messages_sent: vec![MessageToL1 { from_address: ContractAddress(PatriciaKey::from(2_u128)), - to_address: EthAddress::try_from(Felt::from_bytes_be_slice(&[1_u8])) - .expect("to_address"), + to_address: Felt::from_bytes_be_slice(&[1_u8]), payload: L2ToL1Payload(vec![Felt::from_bytes_be_slice(&[0_u8])]), }], } diff --git a/crates/papyrus_protobuf/src/converters/receipt.rs b/crates/papyrus_protobuf/src/converters/receipt.rs index 5f9ae8994a3..5b4957a41b8 100644 --- a/crates/papyrus_protobuf/src/converters/receipt.rs +++ b/crates/papyrus_protobuf/src/converters/receipt.rs @@ -2,19 +2,9 @@ use std::collections::HashMap; use starknet_api::core::{ContractAddress, EthAddress, PatriciaKey}; use starknet_api::transaction::{ - Builtin, - DeclareTransactionOutput, - DeployAccountTransactionOutput, - DeployTransactionOutput, - ExecutionResources, - Fee, - GasVector, - InvokeTransactionOutput, - L1HandlerTransactionOutput, - L2ToL1Payload, - MessageToL1, - RevertedTransactionExecutionStatus, - TransactionExecutionStatus, + Builtin, DeclareTransactionOutput, DeployAccountTransactionOutput, DeployTransactionOutput, + ExecutionResources, Fee, GasVector, InvokeTransactionOutput, L1HandlerTransactionOutput, + L2ToL1Payload, MessageToL1, RevertedTransactionExecutionStatus, TransactionExecutionStatus, TransactionOutput, }; use starknet_types_core::felt::Felt; @@ -402,6 +392,7 @@ impl TryFrom for MessageToL1 { let to_address = EthAddress::try_from(value.to_address.ok_or( ProtobufConversionError::MissingField { field_description: "MessageToL1::to_address" }, )?)?; + let to_address = Felt::from(to_address); let payload = L2ToL1Payload( value.payload.into_iter().map(Felt::try_from).collect::, _>>()?, @@ -414,7 +405,9 @@ impl TryFrom for MessageToL1 { impl From for protobuf::MessageToL1 { fn from(value: MessageToL1) -> Self { let from_address = Felt::from(value.from_address).into(); - let to_address = value.to_address.into(); + // Note(@kariy): this is probably not very safe but we don't use this crate so it's fine for our purposes. + let to_address = + protobuf::EthereumAddress { elements: value.to_address.to_bytes_be().to_vec() }; let payload = value.payload.0.into_iter().map(protobuf::Felt252::from).collect(); protobuf::MessageToL1 { from_address: Some(from_address), diff --git a/crates/papyrus_rpc/src/v0_7/transaction.rs b/crates/papyrus_rpc/src/v0_7/transaction.rs index 94c01af3ab5..080f06edf4a 100644 --- a/crates/papyrus_rpc/src/v0_7/transaction.rs +++ b/crates/papyrus_rpc/src/v0_7/transaction.rs @@ -18,31 +18,14 @@ use papyrus_storage::StorageTxn; use serde::{Deserialize, Deserializer, Serialize, Serializer}; use starknet_api::block::{BlockHash, BlockNumber, BlockStatus}; use starknet_api::core::{ - ClassHash, - CompiledClassHash, - ContractAddress, - EntryPointSelector, - EthAddress, - Nonce, + ClassHash, CompiledClassHash, ContractAddress, EntryPointSelector, EthAddress, Nonce, }; use starknet_api::data_availability::DataAvailabilityMode; use starknet_api::serde_utils::bytes_from_hex_str; use starknet_api::transaction::{ - AccountDeploymentData, - Calldata, - ContractAddressSalt, - DeployTransaction, - Fee, - L1HandlerTransaction, - MessageToL1, - PaymasterData, - Resource, - ResourceBounds, - Tip, - TransactionExecutionStatus, - TransactionHash, - TransactionSignature, - TransactionVersion, + AccountDeploymentData, Calldata, ContractAddressSalt, DeployTransaction, Fee, + L1HandlerTransaction, MessageToL1, PaymasterData, Resource, ResourceBounds, Tip, + TransactionExecutionStatus, TransactionHash, TransactionSignature, TransactionVersion, }; use starknet_client::writer::objects::transaction as client_transaction; use starknet_types_core::felt::Felt; @@ -1226,7 +1209,7 @@ fn l1_handler_message_hash( pub struct MessageFromL1 { // TODO: fix serialization of EthAddress in SN_API to fit the spec. #[serde(serialize_with = "serialize_eth_address")] - pub from_address: EthAddress, + pub from_address: Felt, pub to_address: ContractAddress, pub entry_point_selector: EntryPointSelector, pub payload: Calldata, diff --git a/crates/papyrus_storage/src/serialization/serializers.rs b/crates/papyrus_storage/src/serialization/serializers.rs index c259ee3426c..d75f428a705 100644 --- a/crates/papyrus_storage/src/serialization/serializers.rs +++ b/crates/papyrus_storage/src/serialization/serializers.rs @@ -7,9 +7,7 @@ use std::sync::Arc; use byteorder::BigEndian; use cairo_lang_casm::hints::Hint; use cairo_lang_starknet_classes::casm_contract_class::{ - CasmContractClass, - CasmContractEntryPoint, - CasmContractEntryPoints, + CasmContractClass, CasmContractEntryPoint, CasmContractEntryPoints, }; use cairo_lang_starknet_classes::NestedIntList; use cairo_lang_utils::bigint::BigUintAsHex; @@ -19,108 +17,39 @@ use num_bigint::BigUint; use parity_scale_codec::{Decode, Encode}; use primitive_types::H160; use starknet_api::block::{ - BlockHash, - BlockNumber, - BlockSignature, - BlockStatus, - BlockTimestamp, - GasPrice, - GasPricePerToken, - StarknetVersion, + BlockHash, BlockNumber, BlockSignature, BlockStatus, BlockTimestamp, GasPrice, + GasPricePerToken, StarknetVersion, }; use starknet_api::core::{ - ClassHash, - CompiledClassHash, - ContractAddress, - EntryPointSelector, - EthAddress, - EventCommitment, - GlobalRoot, - Nonce, - PatriciaKey, - ReceiptCommitment, - SequencerContractAddress, - StateDiffCommitment, + ClassHash, CompiledClassHash, ContractAddress, EntryPointSelector, EventCommitment, GlobalRoot, + Nonce, PatriciaKey, ReceiptCommitment, SequencerContractAddress, StateDiffCommitment, TransactionCommitment, }; use starknet_api::crypto::utils::Signature; use starknet_api::data_availability::{DataAvailabilityMode, L1DataAvailabilityMode}; use starknet_api::deprecated_contract_class::{ - ConstructorType, - ContractClass as DeprecatedContractClass, - ContractClassAbiEntry, - EntryPoint as DeprecatedEntryPoint, - EntryPointOffset, - EntryPointType as DeprecatedEntryPointType, - EventAbiEntry, - EventType, - FunctionAbiEntry, - FunctionStateMutability, - FunctionType, - L1HandlerType, - Program, - StructAbiEntry, - StructMember, - StructType, - TypedParameter, + ConstructorType, ContractClass as DeprecatedContractClass, ContractClassAbiEntry, + EntryPoint as DeprecatedEntryPoint, EntryPointOffset, + EntryPointType as DeprecatedEntryPointType, EventAbiEntry, EventType, FunctionAbiEntry, + FunctionStateMutability, FunctionType, L1HandlerType, Program, StructAbiEntry, StructMember, + StructType, TypedParameter, }; use starknet_api::hash::{PoseidonHash, StarkHash}; use starknet_api::state::{ - ContractClass, - EntryPoint, - EntryPointType, - FunctionIndex, - StorageKey, - ThinStateDiff, + ContractClass, EntryPoint, EntryPointType, FunctionIndex, StorageKey, ThinStateDiff, }; use starknet_api::transaction::{ - AccountDeploymentData, - Builtin, - Calldata, - ContractAddressSalt, - DeclareTransaction, - DeclareTransactionOutput, - DeclareTransactionV0V1, - DeclareTransactionV2, - DeclareTransactionV3, - DeployAccountTransaction, - DeployAccountTransactionOutput, - DeployAccountTransactionV1, - DeployAccountTransactionV3, - DeployTransaction, - DeployTransactionOutput, - Event, - EventContent, - EventData, - EventIndexInTransactionOutput, - EventKey, - ExecutionResources, - Fee, - GasVector, - InvokeTransaction, - InvokeTransactionOutput, - InvokeTransactionV0, - InvokeTransactionV1, - InvokeTransactionV3, - L1HandlerTransaction, - L1HandlerTransactionOutput, - L1ToL2Payload, - L2ToL1Payload, - MessageToL1, - MessageToL2, - PaymasterData, - Resource, - ResourceBounds, - ResourceBoundsMapping, - RevertedTransactionExecutionStatus, - Tip, - Transaction, - TransactionExecutionStatus, - TransactionHash, - TransactionOffsetInBlock, - TransactionOutput, - TransactionSignature, - TransactionVersion, + AccountDeploymentData, Builtin, Calldata, ContractAddressSalt, DeclareTransaction, + DeclareTransactionOutput, DeclareTransactionV0V1, DeclareTransactionV2, DeclareTransactionV3, + DeployAccountTransaction, DeployAccountTransactionOutput, DeployAccountTransactionV1, + DeployAccountTransactionV3, DeployTransaction, DeployTransactionOutput, Event, EventContent, + EventData, EventIndexInTransactionOutput, EventKey, ExecutionResources, Fee, GasVector, + InvokeTransaction, InvokeTransactionOutput, InvokeTransactionV0, InvokeTransactionV1, + InvokeTransactionV3, L1HandlerTransaction, L1HandlerTransactionOutput, L1ToL2Payload, + L2ToL1Payload, MessageToL1, MessageToL2, PaymasterData, Resource, ResourceBounds, + ResourceBoundsMapping, RevertedTransactionExecutionStatus, Tip, Transaction, + TransactionExecutionStatus, TransactionHash, TransactionOffsetInBlock, TransactionOutput, + TransactionSignature, TransactionVersion, }; use starknet_types_core::felt::Felt; use tracing::warn; @@ -128,11 +57,7 @@ use tracing::warn; use crate::body::events::EventIndex; use crate::body::TransactionIndex; use crate::compression_utils::{ - compress, - decompress, - decompress_from_reader, - serialize_and_compress, - IsCompressed, + compress, decompress, decompress_from_reader, serialize_and_compress, IsCompressed, }; use crate::db::serialization::{StorageSerde, StorageSerdeError}; use crate::db::table_types::NoValue; @@ -250,8 +175,8 @@ auto_storage_serde! { External = 1, L1Handler = 2, } - // TODO(dan): consider implementing directly with no H160 dependency. - pub struct EthAddress(pub H160); + // // TODO(dan): consider implementing directly with no H160 dependency. + // pub struct EthAddress(pub H160); pub struct EventAbiEntry { pub data: Vec, pub keys: Vec, @@ -318,12 +243,12 @@ auto_storage_serde! { BaseLayerBlock = 6, } pub struct MessageToL1 { - pub to_address: EthAddress, + pub to_address: Felt, pub payload: L2ToL1Payload, pub from_address: ContractAddress, } pub struct MessageToL2 { - pub from_address: EthAddress, + pub from_address: Felt, pub payload: L1ToL2Payload, } pub enum NestedIntList { diff --git a/crates/papyrus_test_utils/src/lib.rs b/crates/papyrus_test_utils/src/lib.rs index 369dafa4d90..dd5a81c999f 100644 --- a/crates/papyrus_test_utils/src/lib.rs +++ b/crates/papyrus_test_utils/src/lib.rs @@ -15,17 +15,10 @@ use std::sync::Arc; use cairo_lang_casm::hints::{CoreHint, CoreHintBase, Hint}; use cairo_lang_casm::operand::{ - BinOpOperand, - CellRef, - DerefOrImmediate, - Operation, - Register, - ResOperand, + BinOpOperand, CellRef, DerefOrImmediate, Operation, Register, ResOperand, }; use cairo_lang_starknet_classes::casm_contract_class::{ - CasmContractClass, - CasmContractEntryPoint, - CasmContractEntryPoints, + CasmContractClass, CasmContractEntryPoint, CasmContractEntryPoints, }; use cairo_lang_starknet_classes::NestedIntList; use cairo_lang_utils::bigint::BigUintAsHex; @@ -38,112 +31,40 @@ use rand_chacha::ChaCha8Rng; use reqwest::Client; use serde::{Deserialize, Serialize}; use starknet_api::block::{ - Block, - BlockBody, - BlockHash, - BlockHeader, - BlockNumber, - BlockSignature, - BlockStatus, - BlockTimestamp, - GasPrice, - GasPricePerToken, - StarknetVersion, + Block, BlockBody, BlockHash, BlockHeader, BlockNumber, BlockSignature, BlockStatus, + BlockTimestamp, GasPrice, GasPricePerToken, StarknetVersion, }; use starknet_api::core::{ - ClassHash, - CompiledClassHash, - ContractAddress, - EntryPointSelector, - EthAddress, - EventCommitment, - GlobalRoot, - Nonce, - ReceiptCommitment, - SequencerContractAddress, - StateDiffCommitment, + ClassHash, CompiledClassHash, ContractAddress, EntryPointSelector, EthAddress, EventCommitment, + GlobalRoot, Nonce, ReceiptCommitment, SequencerContractAddress, StateDiffCommitment, TransactionCommitment, }; use starknet_api::crypto::utils::Signature; use starknet_api::data_availability::{DataAvailabilityMode, L1DataAvailabilityMode}; use starknet_api::deprecated_contract_class::{ - ConstructorType, - ContractClass as DeprecatedContractClass, - ContractClassAbiEntry, - EntryPoint as DeprecatedEntryPoint, - EntryPointOffset, - EntryPointType as DeprecatedEntryPointType, - EventAbiEntry, - EventType, - FunctionAbiEntry, - FunctionStateMutability, - FunctionType, - L1HandlerType, - Program, - StructAbiEntry, - StructMember, - StructType, - TypedParameter, + ConstructorType, ContractClass as DeprecatedContractClass, ContractClassAbiEntry, + EntryPoint as DeprecatedEntryPoint, EntryPointOffset, + EntryPointType as DeprecatedEntryPointType, EventAbiEntry, EventType, FunctionAbiEntry, + FunctionStateMutability, FunctionType, L1HandlerType, Program, StructAbiEntry, StructMember, + StructType, TypedParameter, }; use starknet_api::felt; use starknet_api::hash::{PoseidonHash, StarkHash}; use starknet_api::state::{ - ContractClass, - EntryPoint, - EntryPointType, - FunctionIndex, - StateDiff, - StorageKey, - ThinStateDiff, + ContractClass, EntryPoint, EntryPointType, FunctionIndex, StateDiff, StorageKey, ThinStateDiff, }; use starknet_api::transaction::{ - AccountDeploymentData, - Builtin, - Calldata, - ContractAddressSalt, - DeclareTransaction, - DeclareTransactionOutput, - DeclareTransactionV0V1, - DeclareTransactionV2, - DeclareTransactionV3, - DeployAccountTransaction, - DeployAccountTransactionOutput, - DeployAccountTransactionV1, - DeployAccountTransactionV3, - DeployTransaction, - DeployTransactionOutput, - Event, - EventContent, - EventData, - EventIndexInTransactionOutput, - EventKey, - ExecutionResources, - Fee, - GasVector, - InvokeTransaction, - InvokeTransactionOutput, - InvokeTransactionV0, - InvokeTransactionV1, - InvokeTransactionV3, - L1HandlerTransaction, - L1HandlerTransactionOutput, - L1ToL2Payload, - L2ToL1Payload, - MessageToL1, - MessageToL2, - PaymasterData, - Resource, - ResourceBounds, - ResourceBoundsMapping, - RevertedTransactionExecutionStatus, - Tip, - Transaction, - TransactionExecutionStatus, - TransactionHash, - TransactionOffsetInBlock, - TransactionOutput, - TransactionSignature, - TransactionVersion, + AccountDeploymentData, Builtin, Calldata, ContractAddressSalt, DeclareTransaction, + DeclareTransactionOutput, DeclareTransactionV0V1, DeclareTransactionV2, DeclareTransactionV3, + DeployAccountTransaction, DeployAccountTransactionOutput, DeployAccountTransactionV1, + DeployAccountTransactionV3, DeployTransaction, DeployTransactionOutput, Event, EventContent, + EventData, EventIndexInTransactionOutput, EventKey, ExecutionResources, Fee, GasVector, + InvokeTransaction, InvokeTransactionOutput, InvokeTransactionV0, InvokeTransactionV1, + InvokeTransactionV3, L1HandlerTransaction, L1HandlerTransactionOutput, L1ToL2Payload, + L2ToL1Payload, MessageToL1, MessageToL2, PaymasterData, Resource, ResourceBounds, + ResourceBoundsMapping, RevertedTransactionExecutionStatus, Tip, Transaction, + TransactionExecutionStatus, TransactionHash, TransactionOffsetInBlock, TransactionOutput, + TransactionSignature, TransactionVersion, }; use starknet_types_core::felt::Felt; @@ -691,12 +612,12 @@ auto_impl_get_test_instance! { pub struct L1ToL2Payload(pub Vec); pub struct L2ToL1Payload(pub Vec); pub struct MessageToL1 { - pub to_address: EthAddress, + pub to_address: Felt, pub payload: L2ToL1Payload, pub from_address: ContractAddress, } pub struct MessageToL2 { - pub from_address: EthAddress, + pub from_address: Felt, pub payload: L1ToL2Payload, } pub struct Nonce(pub Felt); diff --git a/crates/starknet_api/src/block_hash/test_utils.rs b/crates/starknet_api/src/block_hash/test_utils.rs index 47af4ea6c4a..dcb29b536b2 100644 --- a/crates/starknet_api/src/block_hash/test_utils.rs +++ b/crates/starknet_api/src/block_hash/test_utils.rs @@ -1,16 +1,11 @@ use indexmap::indexmap; -use primitive_types::H160; use starknet_types_core::felt::Felt; use super::block_hash_calculator::TransactionOutputForHash; -use crate::core::{ClassHash, CompiledClassHash, ContractAddress, EthAddress, Nonce}; +use crate::core::{ClassHash, CompiledClassHash, ContractAddress, Nonce}; use crate::state::ThinStateDiff; use crate::transaction::{ - Fee, - GasVector, - L2ToL1Payload, - MessageToL1, - RevertedTransactionExecutionStatus, + Fee, GasVector, L2ToL1Payload, MessageToL1, RevertedTransactionExecutionStatus, TransactionExecutionStatus, }; @@ -31,7 +26,7 @@ pub(crate) fn get_transaction_output() -> TransactionOutputForHash { pub(crate) fn generate_message_to_l1(seed: u64) -> MessageToL1 { MessageToL1 { from_address: ContractAddress::from(seed), - to_address: EthAddress(H160::from_low_u64_be(seed + 1)), + to_address: Felt::from(seed + 1), payload: L2ToL1Payload(vec![Felt::from(seed + 2), Felt::from(seed + 3)]), } } diff --git a/crates/starknet_api/src/transaction.rs b/crates/starknet_api/src/transaction.rs index d3d6f45b373..2f5a937922a 100644 --- a/crates/starknet_api/src/transaction.rs +++ b/crates/starknet_api/src/transaction.rs @@ -10,29 +10,17 @@ use strum_macros::EnumIter; use crate::block::{BlockHash, BlockNumber}; use crate::core::{ - ChainId, - ClassHash, - CompiledClassHash, - ContractAddress, - EntryPointSelector, - EthAddress, - Nonce, + ChainId, ClassHash, CompiledClassHash, ContractAddress, EntryPointSelector, Nonce, }; use crate::data_availability::DataAvailabilityMode; use crate::hash::StarkHash; use crate::serde_utils::PrefixedBytesAsHex; use crate::transaction_hash::{ - get_declare_transaction_v0_hash, - get_declare_transaction_v1_hash, - get_declare_transaction_v2_hash, - get_declare_transaction_v3_hash, - get_deploy_account_transaction_v1_hash, - get_deploy_account_transaction_v3_hash, - get_deploy_transaction_hash, - get_invoke_transaction_v0_hash, - get_invoke_transaction_v1_hash, - get_invoke_transaction_v3_hash, - get_l1_handler_transaction_hash, + get_declare_transaction_v0_hash, get_declare_transaction_v1_hash, + get_declare_transaction_v2_hash, get_declare_transaction_v3_hash, + get_deploy_account_transaction_v1_hash, get_deploy_account_transaction_v3_hash, + get_deploy_transaction_hash, get_invoke_transaction_v0_hash, get_invoke_transaction_v1_hash, + get_invoke_transaction_v3_hash, get_l1_handler_transaction_hash, }; use crate::StarknetApiError; @@ -767,7 +755,7 @@ macro_rules! calldata { /// An L1 to L2 message. #[derive(Debug, Default, Clone, Eq, PartialEq, Hash, Deserialize, Serialize, PartialOrd, Ord)] pub struct MessageToL2 { - pub from_address: EthAddress, + pub from_address: Felt, pub payload: L1ToL2Payload, } @@ -775,7 +763,7 @@ pub struct MessageToL2 { #[derive(Debug, Default, Clone, Eq, PartialEq, Hash, Deserialize, Serialize, PartialOrd, Ord)] pub struct MessageToL1 { pub from_address: ContractAddress, - pub to_address: EthAddress, + pub to_address: Felt, pub payload: L2ToL1Payload, } diff --git a/crates/starknet_client/src/reader/objects/test_utils.rs b/crates/starknet_client/src/reader/objects/test_utils.rs index c00a73e52ab..a3297a3f4e7 100644 --- a/crates/starknet_client/src/reader/objects/test_utils.rs +++ b/crates/starknet_client/src/reader/objects/test_utils.rs @@ -2,50 +2,23 @@ use std::collections::HashMap; use papyrus_test_utils::{auto_impl_get_test_instance, get_number_of_variants, GetTestInstance}; use starknet_api::core::{ - ClassHash, - CompiledClassHash, - ContractAddress, - EntryPointSelector, - EthAddress, - Nonce, + ClassHash, CompiledClassHash, ContractAddress, EntryPointSelector, Nonce, }; use starknet_api::hash::StarkHash; use starknet_api::state::{EntryPoint, EntryPointType}; use starknet_api::transaction::{ - AccountDeploymentData, - Calldata, - ContractAddressSalt, - Event, - Fee, - GasVector, - L1ToL2Payload, - L2ToL1Payload, - PaymasterData, - ResourceBoundsMapping, - Tip, - TransactionHash, - TransactionOffsetInBlock, - TransactionSignature, - TransactionVersion, + AccountDeploymentData, Calldata, ContractAddressSalt, Event, Fee, GasVector, L1ToL2Payload, + L2ToL1Payload, PaymasterData, ResourceBoundsMapping, Tip, TransactionHash, + TransactionOffsetInBlock, TransactionSignature, TransactionVersion, }; use starknet_types_core::felt::Felt; use crate::reader::objects::state::ContractClass; use crate::reader::objects::transaction::{ - Builtin, - DeployTransaction, - ExecutionResources, - IntermediateDeclareTransaction, - IntermediateDeployAccountTransaction, - IntermediateInvokeTransaction, - L1HandlerTransaction, - L1ToL2Message, - L1ToL2Nonce, - L2ToL1Message, - ReservedDataAvailabilityMode, - Transaction, - TransactionExecutionStatus, - TransactionReceipt, + Builtin, DeployTransaction, ExecutionResources, IntermediateDeclareTransaction, + IntermediateDeployAccountTransaction, IntermediateInvokeTransaction, L1HandlerTransaction, + L1ToL2Message, L1ToL2Nonce, L2ToL1Message, ReservedDataAvailabilityMode, Transaction, + TransactionExecutionStatus, TransactionReceipt, }; auto_impl_get_test_instance! { @@ -145,7 +118,7 @@ auto_impl_get_test_instance! { pub revert_error: Option, } pub struct L1ToL2Message { - pub from_address: EthAddress, + pub from_address: Felt, pub to_address: ContractAddress, pub selector: EntryPointSelector, pub payload: L1ToL2Payload, @@ -154,7 +127,7 @@ auto_impl_get_test_instance! { pub struct L1ToL2Nonce(pub StarkHash); pub struct L2ToL1Message { pub from_address: ContractAddress, - pub to_address: EthAddress, + pub to_address: Felt, pub payload: L2ToL1Payload, } pub struct ExecutionResources { diff --git a/crates/starknet_client/src/reader/objects/transaction.rs b/crates/starknet_client/src/reader/objects/transaction.rs index e1cf6ee17c0..54e7a5659ce 100644 --- a/crates/starknet_client/src/reader/objects/transaction.rs +++ b/crates/starknet_client/src/reader/objects/transaction.rs @@ -7,40 +7,19 @@ use std::collections::HashMap; use serde::{Deserialize, Serialize}; use serde_repr::{Deserialize_repr, Serialize_repr}; use starknet_api::core::{ - ClassHash, - CompiledClassHash, - ContractAddress, - EntryPointSelector, - EthAddress, - Nonce, + ClassHash, CompiledClassHash, ContractAddress, EntryPointSelector, Nonce, }; use starknet_api::hash::StarkHash; use starknet_api::transaction::{ - AccountDeploymentData, - Calldata, - ContractAddressSalt, - DeclareTransactionOutput, - DeployAccountTransactionOutput, - DeployTransactionOutput, - Event, - Fee, - GasVector, - InvokeTransactionOutput, - L1HandlerTransactionOutput, - L1ToL2Payload, - L2ToL1Payload, - MessageToL1, - PaymasterData, - ResourceBoundsMapping, - RevertedTransactionExecutionStatus as SnApiRevertedTransactionExecutionStatus, - Tip, - TransactionExecutionStatus as SnApiTransactionExecutionStatus, - TransactionHash, - TransactionOffsetInBlock, - TransactionOutput, - TransactionSignature, - TransactionVersion, + AccountDeploymentData, Calldata, ContractAddressSalt, DeclareTransactionOutput, + DeployAccountTransactionOutput, DeployTransactionOutput, Event, Fee, GasVector, + InvokeTransactionOutput, L1HandlerTransactionOutput, L1ToL2Payload, L2ToL1Payload, MessageToL1, + PaymasterData, ResourceBoundsMapping, + RevertedTransactionExecutionStatus as SnApiRevertedTransactionExecutionStatus, Tip, + TransactionExecutionStatus as SnApiTransactionExecutionStatus, TransactionHash, + TransactionOffsetInBlock, TransactionOutput, TransactionSignature, TransactionVersion, }; +use starknet_types_core::felt::Felt; use strum_macros::EnumIter; use tracing::error; @@ -825,7 +804,7 @@ pub struct L1ToL2Nonce(pub StarkHash); #[derive(Debug, Default, Deserialize, Serialize, Clone, Eq, PartialEq)] pub struct L1ToL2Message { - pub from_address: EthAddress, + pub from_address: Felt, pub to_address: ContractAddress, pub selector: EntryPointSelector, pub payload: L1ToL2Payload, @@ -845,7 +824,7 @@ impl From for starknet_api::transaction::MessageToL2 { #[derive(Debug, Default, Deserialize, Serialize, Clone, Eq, PartialEq)] pub struct L2ToL1Message { pub from_address: ContractAddress, - pub to_address: EthAddress, + pub to_address: Felt, pub payload: L2ToL1Payload, }