Skip to content

Commit 119a3e9

Browse files
blockifier: split execution summary to tx & builtins
1 parent 3d4cd1c commit 119a3e9

File tree

5 files changed

+53
-23
lines changed

5 files changed

+53
-23
lines changed

crates/blockifier/src/bouncer.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use crate::blockifier::transaction_executor::{
1313
TransactionExecutorResult,
1414
};
1515
use crate::blockifier_versioned_constants::VersionedConstants;
16-
use crate::execution::call_info::{BuiltinCounterMap, ExecutionSummary};
16+
use crate::execution::call_info::{BuiltinCounterMap, ExecutionSummary, SummaryWithBuiltins};
1717
use crate::fee::gas_usage::get_onchain_data_segment_length;
1818
use crate::fee::resources::TransactionResources;
1919
use crate::state::cached_state::{StateChangesKeys, StorageEntry};
@@ -502,12 +502,13 @@ impl Bouncer {
502502
&mut self,
503503
state_reader: &S,
504504
tx_state_changes_keys: &StateChangesKeys,
505-
tx_execution_summary: &ExecutionSummary,
505+
summary: &SummaryWithBuiltins,
506506
tx_resources: &TransactionResources,
507507
versioned_constants: &VersionedConstants,
508508
) -> TransactionExecutorResult<()> {
509509
// The countings here should be linear in the transactional state changes and execution info
510510
// rather than the cumulative state attributes.
511+
let (tx_execution_summary, tx_builtin_counters) = summary;
511512
let marginal_state_changes_keys =
512513
tx_state_changes_keys.difference(&self.state_changes_keys);
513514
let marginal_executed_class_hashes = tx_execution_summary
@@ -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

@@ -861,20 +862,21 @@ pub fn get_particia_update_resources(n_visited_storage_entries: usize) -> Execut
861862
#[allow(clippy::result_large_err)]
862863
pub fn verify_tx_weights_within_max_capacity<S: StateReader>(
863864
state_reader: &S,
864-
tx_execution_summary: &ExecutionSummary,
865+
summary: &SummaryWithBuiltins,
865866
tx_resources: &TransactionResources,
866867
tx_state_changes_keys: &StateChangesKeys,
867868
bouncer_config: &BouncerConfig,
868869
versioned_constants: &VersionedConstants,
869870
) -> TransactionExecutionResult<()> {
871+
let (tx_execution_summary, tx_builtin_counters) = summary;
870872
let tx_weights = get_tx_weights(
871873
state_reader,
872874
&tx_execution_summary.executed_class_hashes,
873875
tx_execution_summary.visited_storage_entries.len(),
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: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,8 @@ 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();
221+
let summary = (execution_summary, builtin_counters);
220222
let tx_resources = TransactionResources {
221223
// Only the `sierra_gas` field is varied.
222224
computation: ComputationResources { sierra_gas: added_gas, ..Default::default() },
@@ -230,7 +232,7 @@ fn test_bouncer_try_update_sierra_gas(
230232
// Check that the transaction is not too large.
231233
let mut result = verify_tx_weights_within_max_capacity(
232234
&transactional_state,
233-
&execution_summary,
235+
&summary,
234236
&tx_resources,
235237
&tx_state_changes_keys,
236238
&bouncer.bouncer_config,
@@ -249,7 +251,7 @@ fn test_bouncer_try_update_sierra_gas(
249251
result = bouncer.try_update(
250252
&transactional_state,
251253
&tx_state_changes_keys,
252-
&execution_summary,
254+
&summary,
253255
&tx_resources,
254256
&block_context.versioned_constants,
255257
);
@@ -294,7 +296,7 @@ fn test_bouncer_try_update_n_txs(
294296
let mut result = bouncer.try_update(
295297
&first_transactional_state,
296298
&first_tx_state_changes_keys,
297-
&ExecutionSummary::default(),
299+
&(ExecutionSummary::default(), BuiltinCounterMap::default()),
298300
&TransactionResources::default(),
299301
&block_context.versioned_constants,
300302
);
@@ -309,7 +311,7 @@ fn test_bouncer_try_update_n_txs(
309311
result = bouncer.try_update(
310312
&second_transactional_state,
311313
&second_tx_state_changes_keys,
312-
&ExecutionSummary::default(),
314+
&(ExecutionSummary::default(), BuiltinCounterMap::default()),
313315
&TransactionResources::default(),
314316
&block_context.versioned_constants,
315317
);

crates/blockifier/src/execution/call_info.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,15 @@ impl EventSummary {
9797

9898
pub type BuiltinCounterMap = HashMap<BuiltinName, usize>;
9999

100+
pub type SummaryWithBuiltins = (ExecutionSummary, BuiltinCounterMap);
101+
100102
#[derive(Clone, Debug, Default, PartialEq)]
101103
pub struct ExecutionSummary {
102104
pub charged_resources: ChargedResources,
103105
pub executed_class_hashes: HashSet<ClassHash>,
104106
pub visited_storage_entries: HashSet<StorageEntry>,
105107
pub l2_to_l1_payload_lengths: Vec<usize>,
106108
pub event_summary: EventSummary,
107-
pub builtin_counters: BuiltinCounterMap,
108109
}
109110

110111
impl Add for ExecutionSummary {
@@ -115,7 +116,6 @@ impl Add for ExecutionSummary {
115116
self.executed_class_hashes.extend(other.executed_class_hashes);
116117
self.visited_storage_entries.extend(other.visited_storage_entries);
117118
self.l2_to_l1_payload_lengths.extend(other.l2_to_l1_payload_lengths);
118-
add_maps(&mut self.builtin_counters, &other.builtin_counters);
119119
self.event_summary += other.event_summary;
120120
self
121121
}
@@ -257,7 +257,6 @@ impl CallInfo {
257257
let mut visited_storage_entries: HashSet<StorageEntry> = HashSet::new();
258258
let mut event_summary = EventSummary::default();
259259
let mut l2_to_l1_payload_lengths = Vec::new();
260-
let mut builtin_counters = BuiltinCounterMap::new();
261260

262261
for call_info in self.iter() {
263262
// Class hashes.
@@ -282,8 +281,6 @@ impl CallInfo {
282281
.map(|message| message.message.payload.0.len()),
283282
);
284283

285-
add_maps(&mut builtin_counters, &call_info.builtin_counters);
286-
287284
// Events: all event resources in the execution tree, unless executing a 0.13.1 block.
288285
if !versioned_constants.ignore_inner_event_resources {
289286
event_summary += call_info.specific_event_summary();
@@ -307,10 +304,19 @@ impl CallInfo {
307304
visited_storage_entries,
308305
l2_to_l1_payload_lengths,
309306
event_summary,
310-
builtin_counters,
311307
}
312308
}
313309

310+
311+
pub fn summarize_many_builtins<'a>(
312+
call_infos: impl Iterator<Item = &'a CallInfo>,
313+
) -> BuiltinCounterMap {
314+
call_infos.fold(BuiltinCounterMap::new(), |mut acc, call_info| {
315+
add_maps(&mut acc, &call_info.builtin_counters);
316+
acc
317+
})
318+
}
319+
314320
pub fn summarize_many<'a>(
315321
call_infos: impl Iterator<Item = &'a CallInfo>,
316322
versioned_constants: &VersionedConstants,

crates/blockifier/src/transaction/objects.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use starknet_api::transaction::{
2222

2323
use crate::abi::constants as abi_constants;
2424
use crate::blockifier_versioned_constants::VersionedConstants;
25-
use crate::execution::call_info::{BuiltinCounterMap, CallInfo, ExecutionSummary};
25+
use crate::execution::call_info::{BuiltinCounterMap, CallInfo, SummaryWithBuiltins};
2626
use crate::execution::stack_trace::ErrorStack;
2727
use crate::fee::fee_checks::FeeCheckError;
2828
use crate::fee::fee_utils::get_fee_by_gas_vector;
@@ -208,14 +208,25 @@ impl TransactionExecutionInfo {
208208
.chain(self.fee_transfer_call_info.iter())
209209
}
210210

211+
pub fn non_optional_call_infos_no_fee_transfer(&self) -> impl Iterator<Item = &CallInfo> {
212+
self.validate_call_info.iter().chain(self.execute_call_info.iter())
213+
}
214+
211215
pub fn is_reverted(&self) -> bool {
212216
self.revert_error.is_some()
213217
}
214218

215219
/// Returns a summary of transaction execution, including executed class hashes, visited storage
216220
/// entries, L2-to-L1_payload_lengths, and the number of emitted events.
217-
pub fn summarize(&self, versioned_constants: &VersionedConstants) -> ExecutionSummary {
218-
CallInfo::summarize_many(self.non_optional_call_infos(), versioned_constants)
221+
pub fn summarize(&self, versioned_constants: &VersionedConstants) -> SummaryWithBuiltins {
222+
let summary = CallInfo::summarize_many(self.non_optional_call_infos(), versioned_constants);
223+
let builtins = self.summarize_builtins();
224+
225+
(summary, builtins)
226+
}
227+
228+
pub fn summarize_builtins(&self) -> BuiltinCounterMap {
229+
CallInfo::summarize_many_builtins(self.non_optional_call_infos_no_fee_transfer())
219230
}
220231
}
221232
pub trait ExecutionResourcesTraits {

crates/blockifier/src/transaction/objects_test.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,11 @@ fn test_events_counter_in_tx_execution_info(
142142
};
143143

144144
assert_eq!(
145-
tx_execution_info.summarize(VersionedConstants::latest_constants()).event_summary.n_events,
145+
tx_execution_info
146+
.summarize(VersionedConstants::latest_constants())
147+
.0
148+
.event_summary
149+
.n_events,
146150
n_validate_events + n_execute_events + n_fee_transfer_events + n_inner_calls
147151
);
148152
}
@@ -171,7 +175,11 @@ fn test_events_counter_in_tx_execution_info_with_inner_call_info(#[case] n_execu
171175
};
172176

173177
assert_eq!(
174-
tx_execution_info.summarize(VersionedConstants::latest_constants()).event_summary.n_events,
178+
tx_execution_info
179+
.summarize(VersionedConstants::latest_constants())
180+
.0
181+
.event_summary
182+
.n_events,
175183
n_execute_events
176184
+ n_fee_transfer_events
177185
+ n_execution_events
@@ -236,13 +244,14 @@ fn test_summarize(
236244
total_event_keys: 0,
237245
total_event_data_size: 0,
238246
},
239-
// TODO(Meshi): Change it to a relevant value for this test.
240-
builtin_counters: HashMap::new(),
241247
};
248+
// TODO(Meshi): Change it to a relevant value for this test.
249+
let expected_builtins = HashMap::new();
250+
let expected_summary_with_builtins = (expected_summary, expected_builtins);
242251

243252
// Call the summarize method.
244253
let actual_summary = tx_execution_info.summarize(VersionedConstants::latest_constants());
245254

246255
// Compare the actual result with the expected result.
247-
assert_eq!(actual_summary, expected_summary);
256+
assert_eq!(actual_summary, expected_summary_with_builtins);
248257
}

0 commit comments

Comments
 (0)