Skip to content

Commit 40c4384

Browse files
blockifier: split execution summary to tx & builtins (#7738)
1 parent c3e5223 commit 40c4384

File tree

8 files changed

+26
-11
lines changed

8 files changed

+26
-11
lines changed

crates/blockifier/src/blockifier/transaction_executor.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ impl<S: StateReader> TransactionExecutor<S> {
161161
&transactional_state,
162162
&tx_state_changes_keys,
163163
&tx_execution_info.summarize(&self.block_context.versioned_constants),
164+
&tx_execution_info.summarize_builtins(),
164165
&tx_execution_info.receipt.resources,
165166
&self.block_context.versioned_constants,
166167
)?;

crates/blockifier/src/bouncer.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@ impl Bouncer {
503503
state_reader: &S,
504504
tx_state_changes_keys: &StateChangesKeys,
505505
tx_execution_summary: &ExecutionSummary,
506+
tx_builtin_counters: &BuiltinCounterMap,
506507
tx_resources: &TransactionResources,
507508
versioned_constants: &VersionedConstants,
508509
) -> TransactionExecutorResult<()> {
@@ -526,7 +527,7 @@ impl Bouncer {
526527
tx_resources,
527528
&marginal_state_changes_keys,
528529
versioned_constants,
529-
&tx_execution_summary.builtin_counters,
530+
tx_builtin_counters,
530531
&self.bouncer_config.builtin_weights,
531532
)?;
532533

@@ -862,6 +863,7 @@ pub fn get_particia_update_resources(n_visited_storage_entries: usize) -> Execut
862863
pub fn verify_tx_weights_within_max_capacity<S: StateReader>(
863864
state_reader: &S,
864865
tx_execution_summary: &ExecutionSummary,
866+
tx_builtin_counters: &BuiltinCounterMap,
865867
tx_resources: &TransactionResources,
866868
tx_state_changes_keys: &StateChangesKeys,
867869
bouncer_config: &BouncerConfig,
@@ -874,7 +876,7 @@ pub fn verify_tx_weights_within_max_capacity<S: StateReader>(
874876
tx_resources,
875877
tx_state_changes_keys,
876878
versioned_constants,
877-
&tx_execution_summary.builtin_counters,
879+
tx_builtin_counters,
878880
&bouncer_config.builtin_weights,
879881
)?
880882
.bouncer_weights;

crates/blockifier/src/bouncer_test.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ fn test_bouncer_try_update_sierra_gas(
217217

218218
// Prepare the resources to be added to the bouncer.
219219
let execution_summary = ExecutionSummary::default();
220+
let builtin_counters = BuiltinCounterMap::default();
220221
let tx_resources = TransactionResources {
221222
// Only the `sierra_gas` field is varied.
222223
computation: ComputationResources { sierra_gas: added_gas, ..Default::default() },
@@ -231,6 +232,7 @@ fn test_bouncer_try_update_sierra_gas(
231232
let mut result = verify_tx_weights_within_max_capacity(
232233
&transactional_state,
233234
&execution_summary,
235+
&builtin_counters,
234236
&tx_resources,
235237
&tx_state_changes_keys,
236238
&bouncer.bouncer_config,
@@ -250,6 +252,7 @@ fn test_bouncer_try_update_sierra_gas(
250252
&transactional_state,
251253
&tx_state_changes_keys,
252254
&execution_summary,
255+
&builtin_counters,
253256
&tx_resources,
254257
&block_context.versioned_constants,
255258
);
@@ -295,6 +298,7 @@ fn test_bouncer_try_update_n_txs(
295298
&first_transactional_state,
296299
&first_tx_state_changes_keys,
297300
&ExecutionSummary::default(),
301+
&BuiltinCounterMap::default(),
298302
&TransactionResources::default(),
299303
&block_context.versioned_constants,
300304
);
@@ -310,6 +314,7 @@ fn test_bouncer_try_update_n_txs(
310314
&second_transactional_state,
311315
&second_tx_state_changes_keys,
312316
&ExecutionSummary::default(),
317+
&BuiltinCounterMap::default(),
313318
&TransactionResources::default(),
314319
&block_context.versioned_constants,
315320
);

crates/blockifier/src/concurrency/worker_logic.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,7 @@ impl<S: StateReader> WorkerExecutor<S> {
336336
&tx_versioned_state,
337337
&tx_state_changes_keys,
338338
&tx_execution_info.summarize(&self.block_context.versioned_constants),
339+
&tx_execution_info.summarize_builtins(),
339340
&tx_execution_info.receipt.resources,
340341
&self.block_context.versioned_constants,
341342
);

crates/blockifier/src/execution/call_info.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::blockifier_versioned_constants::VersionedConstants;
1717
use crate::execution::contract_class::TrackedResource;
1818
use crate::execution::entry_point::CallEntryPoint;
1919
use crate::state::cached_state::StorageEntry;
20-
use crate::utils::{add_maps, u64_from_usize};
20+
use crate::utils::u64_from_usize;
2121

2222
#[cfg_attr(feature = "transaction_serde", derive(serde::Deserialize))]
2323
#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize)]
@@ -104,7 +104,6 @@ pub struct ExecutionSummary {
104104
pub visited_storage_entries: HashSet<StorageEntry>,
105105
pub l2_to_l1_payload_lengths: Vec<usize>,
106106
pub event_summary: EventSummary,
107-
pub builtin_counters: BuiltinCounterMap,
108107
}
109108

110109
impl Add for ExecutionSummary {
@@ -115,7 +114,6 @@ impl Add for ExecutionSummary {
115114
self.executed_class_hashes.extend(other.executed_class_hashes);
116115
self.visited_storage_entries.extend(other.visited_storage_entries);
117116
self.l2_to_l1_payload_lengths.extend(other.l2_to_l1_payload_lengths);
118-
add_maps(&mut self.builtin_counters, &other.builtin_counters);
119117
self.event_summary += other.event_summary;
120118
self
121119
}
@@ -257,7 +255,6 @@ impl CallInfo {
257255
let mut visited_storage_entries: HashSet<StorageEntry> = HashSet::new();
258256
let mut event_summary = EventSummary::default();
259257
let mut l2_to_l1_payload_lengths = Vec::new();
260-
let mut builtin_counters = BuiltinCounterMap::new();
261258

262259
for call_info in self.iter() {
263260
// Class hashes.
@@ -282,8 +279,6 @@ impl CallInfo {
282279
.map(|message| message.message.payload.0.len()),
283280
);
284281

285-
add_maps(&mut builtin_counters, &call_info.builtin_counters);
286-
287282
// Events: all event resources in the execution tree, unless executing a 0.13.1 block.
288283
if !versioned_constants.ignore_inner_event_resources {
289284
event_summary += call_info.specific_event_summary();
@@ -307,7 +302,6 @@ impl CallInfo {
307302
visited_storage_entries,
308303
l2_to_l1_payload_lengths,
309304
event_summary,
310-
builtin_counters,
311305
}
312306
}
313307

crates/blockifier/src/transaction/objects.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use crate::fee::fee_checks::FeeCheckError;
2828
use crate::fee::fee_utils::get_fee_by_gas_vector;
2929
use crate::fee::receipt::TransactionReceipt;
3030
use crate::transaction::errors::{TransactionExecutionError, TransactionPreValidationError};
31+
use crate::utils::add_maps;
3132

3233
#[cfg(test)]
3334
#[path = "objects_test.rs"]
@@ -217,6 +218,13 @@ impl TransactionExecutionInfo {
217218
pub fn summarize(&self, versioned_constants: &VersionedConstants) -> ExecutionSummary {
218219
CallInfo::summarize_many(self.non_optional_call_infos(), versioned_constants)
219220
}
221+
222+
pub fn summarize_builtins(&self) -> BuiltinCounterMap {
223+
self.non_optional_call_infos().fold(BuiltinCounterMap::new(), |mut acc, call_info| {
224+
add_maps(&mut acc, &call_info.builtin_counters);
225+
acc
226+
})
227+
}
220228
}
221229
pub trait ExecutionResourcesTraits {
222230
fn total_n_steps(&self) -> usize;

crates/blockifier/src/transaction/objects_test.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,13 +236,15 @@ fn test_summarize(
236236
total_event_keys: 0,
237237
total_event_data_size: 0,
238238
},
239-
// TODO(Meshi): Change it to a relevant value for this test.
240-
builtin_counters: HashMap::new(),
241239
};
240+
// TODO(Meshi): Change it to a relevant value for this test.
241+
let expected_builtins = HashMap::new();
242242

243243
// Call the summarize method.
244244
let actual_summary = tx_execution_info.summarize(VersionedConstants::latest_constants());
245+
let actual_builtins = tx_execution_info.summarize_builtins();
245246

246247
// Compare the actual result with the expected result.
247248
assert_eq!(actual_summary, expected_summary);
249+
assert_eq!(actual_builtins, expected_builtins);
248250
}

crates/blockifier/src/transaction/transaction_execution.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ impl<U: UpdatableState> ExecutableTransaction<U> for Transaction {
149149
// Check if the transaction is too large to fit any block.
150150
// TODO(Yoni, 1/8/2024): consider caching these two.
151151
let tx_execution_summary = tx_execution_info.summarize(&block_context.versioned_constants);
152+
let tx_builtin_counters = tx_execution_info.summarize_builtins();
152153
let mut tx_state_changes_keys = state.to_state_diff()?.state_maps.keys();
153154
tx_state_changes_keys.update_sequencer_key_in_storage(
154155
&block_context.to_tx_context(self),
@@ -158,6 +159,7 @@ impl<U: UpdatableState> ExecutableTransaction<U> for Transaction {
158159
verify_tx_weights_within_max_capacity(
159160
state,
160161
&tx_execution_summary,
162+
&tx_builtin_counters,
161163
&tx_execution_info.receipt.resources,
162164
&tx_state_changes_keys,
163165
&block_context.bouncer_config,

0 commit comments

Comments
 (0)