diff --git a/crates/blockifier/src/blockifier/transaction_executor.rs b/crates/blockifier/src/blockifier/transaction_executor.rs index e05583da78b..2f8a4d94623 100644 --- a/crates/blockifier/src/blockifier/transaction_executor.rs +++ b/crates/blockifier/src/blockifier/transaction_executor.rs @@ -161,6 +161,7 @@ impl TransactionExecutor { &transactional_state, &tx_state_changes_keys, &tx_execution_info.summarize(&self.block_context.versioned_constants), + &tx_execution_info.summarize_builtins(), &tx_execution_info.receipt.resources, &self.block_context.versioned_constants, )?; diff --git a/crates/blockifier/src/bouncer.rs b/crates/blockifier/src/bouncer.rs index e5897356984..e503d131acb 100644 --- a/crates/blockifier/src/bouncer.rs +++ b/crates/blockifier/src/bouncer.rs @@ -503,6 +503,7 @@ impl Bouncer { state_reader: &S, tx_state_changes_keys: &StateChangesKeys, tx_execution_summary: &ExecutionSummary, + tx_builtin_counters: &BuiltinCounterMap, tx_resources: &TransactionResources, versioned_constants: &VersionedConstants, ) -> TransactionExecutorResult<()> { @@ -526,7 +527,7 @@ impl Bouncer { tx_resources, &marginal_state_changes_keys, versioned_constants, - &tx_execution_summary.builtin_counters, + tx_builtin_counters, &self.bouncer_config.builtin_weights, )?; @@ -862,6 +863,7 @@ pub fn get_particia_update_resources(n_visited_storage_entries: usize) -> Execut pub fn verify_tx_weights_within_max_capacity( state_reader: &S, tx_execution_summary: &ExecutionSummary, + tx_builtin_counters: &BuiltinCounterMap, tx_resources: &TransactionResources, tx_state_changes_keys: &StateChangesKeys, bouncer_config: &BouncerConfig, @@ -874,7 +876,7 @@ pub fn verify_tx_weights_within_max_capacity( tx_resources, tx_state_changes_keys, versioned_constants, - &tx_execution_summary.builtin_counters, + tx_builtin_counters, &bouncer_config.builtin_weights, )? .bouncer_weights; diff --git a/crates/blockifier/src/bouncer_test.rs b/crates/blockifier/src/bouncer_test.rs index 24521882458..29540bc74ff 100644 --- a/crates/blockifier/src/bouncer_test.rs +++ b/crates/blockifier/src/bouncer_test.rs @@ -217,6 +217,7 @@ fn test_bouncer_try_update_sierra_gas( // Prepare the resources to be added to the bouncer. let execution_summary = ExecutionSummary::default(); + let builtin_counters = BuiltinCounterMap::default(); let tx_resources = TransactionResources { // Only the `sierra_gas` field is varied. computation: ComputationResources { sierra_gas: added_gas, ..Default::default() }, @@ -231,6 +232,7 @@ fn test_bouncer_try_update_sierra_gas( let mut result = verify_tx_weights_within_max_capacity( &transactional_state, &execution_summary, + &builtin_counters, &tx_resources, &tx_state_changes_keys, &bouncer.bouncer_config, @@ -250,6 +252,7 @@ fn test_bouncer_try_update_sierra_gas( &transactional_state, &tx_state_changes_keys, &execution_summary, + &builtin_counters, &tx_resources, &block_context.versioned_constants, ); @@ -295,6 +298,7 @@ fn test_bouncer_try_update_n_txs( &first_transactional_state, &first_tx_state_changes_keys, &ExecutionSummary::default(), + &BuiltinCounterMap::default(), &TransactionResources::default(), &block_context.versioned_constants, ); @@ -310,6 +314,7 @@ fn test_bouncer_try_update_n_txs( &second_transactional_state, &second_tx_state_changes_keys, &ExecutionSummary::default(), + &BuiltinCounterMap::default(), &TransactionResources::default(), &block_context.versioned_constants, ); diff --git a/crates/blockifier/src/concurrency/worker_logic.rs b/crates/blockifier/src/concurrency/worker_logic.rs index e1178d57e19..826600f0328 100644 --- a/crates/blockifier/src/concurrency/worker_logic.rs +++ b/crates/blockifier/src/concurrency/worker_logic.rs @@ -336,6 +336,7 @@ impl WorkerExecutor { &tx_versioned_state, &tx_state_changes_keys, &tx_execution_info.summarize(&self.block_context.versioned_constants), + &tx_execution_info.summarize_builtins(), &tx_execution_info.receipt.resources, &self.block_context.versioned_constants, ); diff --git a/crates/blockifier/src/execution/call_info.rs b/crates/blockifier/src/execution/call_info.rs index 3200edf4888..124549634bb 100644 --- a/crates/blockifier/src/execution/call_info.rs +++ b/crates/blockifier/src/execution/call_info.rs @@ -17,7 +17,7 @@ use crate::blockifier_versioned_constants::VersionedConstants; use crate::execution::contract_class::TrackedResource; use crate::execution::entry_point::CallEntryPoint; use crate::state::cached_state::StorageEntry; -use crate::utils::{add_maps, u64_from_usize}; +use crate::utils::u64_from_usize; #[cfg_attr(feature = "transaction_serde", derive(serde::Deserialize))] #[derive(Clone, Debug, Default, Eq, PartialEq, Serialize)] @@ -104,7 +104,6 @@ pub struct ExecutionSummary { pub visited_storage_entries: HashSet, pub l2_to_l1_payload_lengths: Vec, pub event_summary: EventSummary, - pub builtin_counters: BuiltinCounterMap, } impl Add for ExecutionSummary { @@ -115,7 +114,6 @@ impl Add for ExecutionSummary { self.executed_class_hashes.extend(other.executed_class_hashes); self.visited_storage_entries.extend(other.visited_storage_entries); self.l2_to_l1_payload_lengths.extend(other.l2_to_l1_payload_lengths); - add_maps(&mut self.builtin_counters, &other.builtin_counters); self.event_summary += other.event_summary; self } @@ -257,7 +255,6 @@ impl CallInfo { let mut visited_storage_entries: HashSet = HashSet::new(); let mut event_summary = EventSummary::default(); let mut l2_to_l1_payload_lengths = Vec::new(); - let mut builtin_counters = BuiltinCounterMap::new(); for call_info in self.iter() { // Class hashes. @@ -282,8 +279,6 @@ impl CallInfo { .map(|message| message.message.payload.0.len()), ); - add_maps(&mut builtin_counters, &call_info.builtin_counters); - // Events: all event resources in the execution tree, unless executing a 0.13.1 block. if !versioned_constants.ignore_inner_event_resources { event_summary += call_info.specific_event_summary(); @@ -307,7 +302,6 @@ impl CallInfo { visited_storage_entries, l2_to_l1_payload_lengths, event_summary, - builtin_counters, } } diff --git a/crates/blockifier/src/transaction/objects.rs b/crates/blockifier/src/transaction/objects.rs index e5359d09f10..c5eab1bd87c 100644 --- a/crates/blockifier/src/transaction/objects.rs +++ b/crates/blockifier/src/transaction/objects.rs @@ -28,6 +28,7 @@ use crate::fee::fee_checks::FeeCheckError; use crate::fee::fee_utils::get_fee_by_gas_vector; use crate::fee::receipt::TransactionReceipt; use crate::transaction::errors::{TransactionExecutionError, TransactionPreValidationError}; +use crate::utils::add_maps; #[cfg(test)] #[path = "objects_test.rs"] @@ -217,6 +218,13 @@ impl TransactionExecutionInfo { pub fn summarize(&self, versioned_constants: &VersionedConstants) -> ExecutionSummary { CallInfo::summarize_many(self.non_optional_call_infos(), versioned_constants) } + + pub fn summarize_builtins(&self) -> BuiltinCounterMap { + self.non_optional_call_infos().fold(BuiltinCounterMap::new(), |mut acc, call_info| { + add_maps(&mut acc, &call_info.builtin_counters); + acc + }) + } } pub trait ExecutionResourcesTraits { fn total_n_steps(&self) -> usize; diff --git a/crates/blockifier/src/transaction/objects_test.rs b/crates/blockifier/src/transaction/objects_test.rs index dec02a0f6e8..c097ddd4996 100644 --- a/crates/blockifier/src/transaction/objects_test.rs +++ b/crates/blockifier/src/transaction/objects_test.rs @@ -236,13 +236,15 @@ fn test_summarize( total_event_keys: 0, total_event_data_size: 0, }, - // TODO(Meshi): Change it to a relevant value for this test. - builtin_counters: HashMap::new(), }; + // TODO(Meshi): Change it to a relevant value for this test. + let expected_builtins = HashMap::new(); // Call the summarize method. let actual_summary = tx_execution_info.summarize(VersionedConstants::latest_constants()); + let actual_builtins = tx_execution_info.summarize_builtins(); // Compare the actual result with the expected result. assert_eq!(actual_summary, expected_summary); + assert_eq!(actual_builtins, expected_builtins); } diff --git a/crates/blockifier/src/transaction/transaction_execution.rs b/crates/blockifier/src/transaction/transaction_execution.rs index ddce072e1db..1ecb31500bb 100644 --- a/crates/blockifier/src/transaction/transaction_execution.rs +++ b/crates/blockifier/src/transaction/transaction_execution.rs @@ -149,6 +149,7 @@ impl ExecutableTransaction for Transaction { // Check if the transaction is too large to fit any block. // TODO(Yoni, 1/8/2024): consider caching these two. let tx_execution_summary = tx_execution_info.summarize(&block_context.versioned_constants); + let tx_builtin_counters = tx_execution_info.summarize_builtins(); let mut tx_state_changes_keys = state.to_state_diff()?.state_maps.keys(); tx_state_changes_keys.update_sequencer_key_in_storage( &block_context.to_tx_context(self), @@ -158,6 +159,7 @@ impl ExecutableTransaction for Transaction { verify_tx_weights_within_max_capacity( state, &tx_execution_summary, + &tx_builtin_counters, &tx_execution_info.receipt.resources, &tx_state_changes_keys, &block_context.bouncer_config,