diff --git a/crates/blockifier/src/bouncer.rs b/crates/blockifier/src/bouncer.rs index e503d131acb..0af7ae46e40 100644 --- a/crates/blockifier/src/bouncer.rs +++ b/crates/blockifier/src/bouncer.rs @@ -786,8 +786,6 @@ pub fn get_tx_weights( add_maps(&mut builtin_counters_without_casm_hash_computation, tx_builtin_counters); // The transaction builtin counters does not include the transaction overhead ('additional') // resources. - // TODO(AvivG): Builtins from `fee_transfer_call_info` are counted twice - in `os_vm_resources` - // and again in `tx_builtin_counters`. Remove the duplication. add_maps( &mut builtin_counters_without_casm_hash_computation, &tx_resources.computation.os_vm_resources.prover_builtins(), diff --git a/crates/blockifier/src/transaction/objects.rs b/crates/blockifier/src/transaction/objects.rs index c5eab1bd87c..ed4593dc317 100644 --- a/crates/blockifier/src/transaction/objects.rs +++ b/crates/blockifier/src/transaction/objects.rs @@ -209,6 +209,12 @@ impl TransactionExecutionInfo { .chain(self.fee_transfer_call_info.iter()) } + /// Returns call infos excluding fee transfer (to avoid double-counting in bouncer + /// calculations). + pub fn non_optional_call_infos_without_fee_transfer(&self) -> impl Iterator { + self.validate_call_info.iter().chain(self.execute_call_info.iter()) + } + pub fn is_reverted(&self) -> bool { self.revert_error.is_some() } @@ -220,10 +226,15 @@ impl TransactionExecutionInfo { } 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 - }) + let mut builtin_counters = BuiltinCounterMap::new(); + // Remove fee transfer builtins to avoid double-counting in `get_tx_weights` + // in bouncer.rs (already included in os_vm_resources). + for call_info_iter in self.non_optional_call_infos_without_fee_transfer() { + for call_info in call_info_iter.iter() { + add_maps(&mut builtin_counters, &call_info.builtin_counters); + } + } + builtin_counters } } pub trait ExecutionResourcesTraits {