diff --git a/crates/committer_cli/src/tests/utils/objects.rs b/crates/committer_cli/src/tests/utils/objects.rs index db2b8d3140..0f8a2e239c 100644 --- a/crates/committer_cli/src/tests/utils/objects.rs +++ b/crates/committer_cli/src/tests/utils/objects.rs @@ -11,7 +11,7 @@ use starknet_api::core::{ Nonce, PatriciaKey, }; -use starknet_api::execution_resources::GasVector; +use starknet_api::execution_resources::{GasAmount, GasVector}; use starknet_api::state::{StorageKey, ThinStateDiff}; use starknet_api::transaction::{ Event, @@ -49,7 +49,11 @@ pub(crate) fn get_transaction_output_for_hash( }, }], execution_status: expected_execution_status, - gas_consumed: GasVector { l1_gas: 0, l2_gas: 0, l1_data_gas: 64 }, + gas_consumed: GasVector { + l1_gas: GasAmount(0), + l2_gas: GasAmount(0), + l1_data_gas: GasAmount(64), + }, messages_sent: vec![MessageToL1 { from_address: ContractAddress(PatriciaKey::from(2_u128)), to_address: EthAddress::try_from(Felt::from_bytes_be_slice(&[1_u8])) diff --git a/crates/papyrus_execution/src/objects.rs b/crates/papyrus_execution/src/objects.rs index b4f8e0b5f0..bbef0bf51f 100644 --- a/crates/papyrus_execution/src/objects.rs +++ b/crates/papyrus_execution/src/objects.rs @@ -388,14 +388,7 @@ fn vm_resources_to_execution_resources( steps: vm_resources.n_steps as u64, builtin_instance_counter, memory_holes: vm_resources.n_memory_holes as u64, - da_gas_consumed: StarknetApiGasVector { - l1_gas: l1_gas.0.try_into().map_err(|_| ExecutionError::GasConsumedOutOfRange)?, - l2_gas: l2_gas.0.try_into().map_err(|_| ExecutionError::GasConsumedOutOfRange)?, - l1_data_gas: l1_data_gas - .0 - .try_into() - .map_err(|_| ExecutionError::GasConsumedOutOfRange)?, - }, + da_gas_consumed: StarknetApiGasVector { l1_gas, l2_gas, l1_data_gas }, gas_consumed: StarknetApiGasVector::default(), }) } diff --git a/crates/papyrus_protobuf/src/converters/receipt.rs b/crates/papyrus_protobuf/src/converters/receipt.rs index 5aac611d18..052c4bf5e5 100644 --- a/crates/papyrus_protobuf/src/converters/receipt.rs +++ b/crates/papyrus_protobuf/src/converters/receipt.rs @@ -332,7 +332,11 @@ impl TryFrom for ExecutionResources { impl From for GasVector { fn from(value: protobuf::receipt::execution_resources::GasVector) -> Self { - GasVector { l1_gas: value.l1_gas, l1_data_gas: value.l1_data_gas, l2_gas: value.l2_gas } + GasVector { + l1_gas: starknet_api::execution_resources::GasAmount(value.l1_gas), + l1_data_gas: starknet_api::execution_resources::GasAmount(value.l1_data_gas), + l2_gas: starknet_api::execution_resources::GasAmount(value.l2_gas), + } } } @@ -359,9 +363,9 @@ impl From for protobuf::receipt::ExecutionResources { impl From for protobuf::receipt::execution_resources::GasVector { fn from(value: GasVector) -> Self { protobuf::receipt::execution_resources::GasVector { - l1_gas: value.l1_gas, - l1_data_gas: value.l1_data_gas, - l2_gas: value.l2_gas, + l1_gas: value.l1_gas.0, + l1_data_gas: value.l1_data_gas.0, + l2_gas: value.l2_gas.0, } } } diff --git a/crates/papyrus_rpc/src/v0_8/transaction.rs b/crates/papyrus_rpc/src/v0_8/transaction.rs index c246ad5bb7..542dec8de6 100644 --- a/crates/papyrus_rpc/src/v0_8/transaction.rs +++ b/crates/papyrus_rpc/src/v0_8/transaction.rs @@ -26,6 +26,7 @@ use starknet_api::core::{ Nonce, }; use starknet_api::data_availability::DataAvailabilityMode; +use starknet_api::execution_resources::GasAmount; use starknet_api::serde_utils::bytes_from_hex_str; use starknet_api::transaction::{ AccountDeploymentData, @@ -902,8 +903,8 @@ pub struct ComputationResources { #[derive(Debug, Default, Clone, Eq, Hash, PartialEq, Deserialize, Serialize, PartialOrd, Ord)] pub struct DataAvailabilityResources { - pub l1_gas: u64, - pub l1_data_gas: u64, + pub l1_gas: GasAmount, + pub l1_data_gas: GasAmount, } impl Add for ExecutionResources { diff --git a/crates/papyrus_storage/src/serialization/serializers.rs b/crates/papyrus_storage/src/serialization/serializers.rs index d51ab4ca31..815e7f7d7e 100644 --- a/crates/papyrus_storage/src/serialization/serializers.rs +++ b/crates/papyrus_storage/src/serialization/serializers.rs @@ -64,7 +64,7 @@ use starknet_api::deprecated_contract_class::{ StructType, TypedParameter, }; -use starknet_api::execution_resources::{Builtin, ExecutionResources, GasVector}; +use starknet_api::execution_resources::{Builtin, ExecutionResources, GasAmount, GasVector}; use starknet_api::hash::{PoseidonHash, StarkHash}; use starknet_api::state::{ ContractClass, @@ -284,14 +284,15 @@ auto_storage_serde! { View = 0, } pub struct GasPrice(pub u128); + pub struct GasAmount(pub u64); pub struct GasPricePerToken { pub price_in_fri: GasPrice, pub price_in_wei: GasPrice, } pub struct GasVector { - pub l1_gas: u64, - pub l1_data_gas: u64, - pub l2_gas: u64, + pub l1_gas: GasAmount, + pub l1_data_gas: GasAmount, + pub l2_gas: GasAmount, } pub struct GlobalRoot(pub StarkHash); pub struct H160(pub [u8; 20]); diff --git a/crates/papyrus_test_utils/src/lib.rs b/crates/papyrus_test_utils/src/lib.rs index 9347e6123c..a3145d67c9 100644 --- a/crates/papyrus_test_utils/src/lib.rs +++ b/crates/papyrus_test_utils/src/lib.rs @@ -85,7 +85,7 @@ use starknet_api::deprecated_contract_class::{ StructType, TypedParameter, }; -use starknet_api::execution_resources::{Builtin, ExecutionResources, GasVector}; +use starknet_api::execution_resources::{Builtin, ExecutionResources, GasAmount, GasVector}; use starknet_api::felt; use starknet_api::hash::{PoseidonHash, StarkHash}; use starknet_api::rpc_transaction::{ @@ -637,6 +637,7 @@ auto_impl_get_test_instance! { pub enum FunctionType { Function = 0, } + pub struct GasAmount(pub u64); pub struct GasPrice(pub u128); pub struct GasPricePerToken { pub price_in_fri: GasPrice, @@ -1130,7 +1131,11 @@ impl GetTestInstance for ExecutionResources { impl GetTestInstance for GasVector { fn get_test_instance(rng: &mut ChaCha8Rng) -> Self { - Self { l1_gas: rng.next_u64(), l2_gas: rng.next_u64(), l1_data_gas: rng.next_u64() } + Self { + l1_gas: GasAmount(rng.next_u64()), + l2_gas: GasAmount(rng.next_u64()), + l1_data_gas: GasAmount(rng.next_u64()), + } } } diff --git a/crates/starknet_api/src/block_hash/test_utils.rs b/crates/starknet_api/src/block_hash/test_utils.rs index ddf7786dbc..08bd00af94 100644 --- a/crates/starknet_api/src/block_hash/test_utils.rs +++ b/crates/starknet_api/src/block_hash/test_utils.rs @@ -4,7 +4,7 @@ use starknet_types_core::felt::Felt; use super::block_hash_calculator::TransactionOutputForHash; use crate::core::{ClassHash, CompiledClassHash, ContractAddress, EthAddress, Nonce}; -use crate::execution_resources::GasVector; +use crate::execution_resources::{GasAmount, GasVector}; use crate::state::ThinStateDiff; use crate::transaction::{ Fee, @@ -24,7 +24,11 @@ pub(crate) fn get_transaction_output() -> TransactionOutputForHash { messages_sent: vec![generate_message_to_l1(34), generate_message_to_l1(56)], events: vec![], execution_status, - gas_consumed: GasVector { l1_gas: 16580, l2_gas: 0, l1_data_gas: 32 }, + gas_consumed: GasVector { + l1_gas: GasAmount(16580), + l2_gas: GasAmount(0), + l1_data_gas: GasAmount(32), + }, } } diff --git a/crates/starknet_api/src/execution_resources.rs b/crates/starknet_api/src/execution_resources.rs index 41e17d2ade..cb86082f38 100644 --- a/crates/starknet_api/src/execution_resources.rs +++ b/crates/starknet_api/src/execution_resources.rs @@ -1,6 +1,7 @@ use std::collections::HashMap; use serde::{Deserialize, Serialize}; +use starknet_types_core::felt::Felt; use strum_macros::EnumIter; use crate::block::{GasPrice, NonzeroGasPrice}; @@ -18,11 +19,19 @@ use crate::transaction::Fee; Eq, PartialEq, PartialOrd, + Ord, Serialize, Deserialize, + Hash, )] pub struct GasAmount(pub u64); +impl From for Felt { + fn from(gas_amount: GasAmount) -> Self { + Self::from(gas_amount.0) + } +} + macro_rules! impl_from_uint_for_gas_amount { ($($uint:ty),*) => { $( @@ -59,10 +68,10 @@ impl GasAmount { #[derive(Debug, Default, Deserialize, Serialize, Clone, Eq, PartialEq)] pub struct GasVector { - pub l1_gas: u64, - pub l1_data_gas: u64, + pub l1_gas: GasAmount, + pub l1_data_gas: GasAmount, #[serde(default)] - pub l2_gas: u64, + pub l2_gas: GasAmount, } /// The execution resources used by a transaction. diff --git a/crates/starknet_client/src/reader/objects/transaction.rs b/crates/starknet_client/src/reader/objects/transaction.rs index 179fb61826..aa1cdd5f37 100644 --- a/crates/starknet_client/src/reader/objects/transaction.rs +++ b/crates/starknet_client/src/reader/objects/transaction.rs @@ -14,7 +14,7 @@ use starknet_api::core::{ EthAddress, Nonce, }; -use starknet_api::execution_resources::GasVector; +use starknet_api::execution_resources::{GasAmount, GasVector}; use starknet_api::hash::StarkHash; use starknet_api::transaction::{ AccountDeploymentData, @@ -716,8 +716,8 @@ impl From for starknet_api::execution_resources::ExecutionRe None => GasVector { // It's hardcoded that this field is 0 for pre-v0.13.2 blocks (this field is // only used in calculating the receipt hash) - l1_gas: 0, - l2_gas: 0, + l1_gas: GasAmount(0), + l2_gas: GasAmount(0), l1_data_gas: da_gas_consumed.l1_data_gas, }, },