diff --git a/core/src/transaction_priority_details.rs b/core/src/transaction_priority_details.rs index e7d137de34..7f816cad2a 100644 --- a/core/src/transaction_priority_details.rs +++ b/core/src/transaction_priority_details.rs @@ -23,6 +23,7 @@ pub trait GetTransactionPriorityDetails { let prioritization_fee_details = compute_budget .process_instructions( instructions, + true, // use default units per instruction true, // don't reject txs that use set compute unit price ix ) .ok()?; diff --git a/program-runtime/src/compute_budget.rs b/program-runtime/src/compute_budget.rs index b36c8325b4..31432f387f 100644 --- a/program-runtime/src/compute_budget.rs +++ b/program-runtime/src/compute_budget.rs @@ -126,6 +126,7 @@ impl ComputeBudget { pub fn process_instructions<'a>( &mut self, instructions: impl Iterator, + default_units_per_instruction: bool, support_set_compute_unit_price_ix: bool, ) -> Result { let mut num_non_compute_budget_instructions: usize = 0; @@ -220,15 +221,18 @@ impl ComputeBudget { self.heap_size = Some(bytes as usize); } - self.compute_unit_limit = updated_compute_unit_limit - .or_else(|| { + self.compute_unit_limit = if default_units_per_instruction { + updated_compute_unit_limit.or_else(|| { Some( (num_non_compute_budget_instructions as u32) .saturating_mul(DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT), ) }) - .unwrap_or(MAX_COMPUTE_UNIT_LIMIT) - .min(MAX_COMPUTE_UNIT_LIMIT) as u64; + } else { + updated_compute_unit_limit + } + .unwrap_or(MAX_COMPUTE_UNIT_LIMIT) + .min(MAX_COMPUTE_UNIT_LIMIT) as u64; Ok(prioritization_fee .map(|fee_type| PrioritizationFeeDetails::new(fee_type, self.compute_unit_limit)) @@ -271,8 +275,11 @@ mod tests { Hash::default(), )); let mut compute_budget = ComputeBudget::default(); - let result = compute_budget - .process_instructions(tx.message().program_instructions_iter(), $type_change); + let result = compute_budget.process_instructions( + tx.message().program_instructions_iter(), + true, + $type_change, + ); assert_eq!($expected_result, result); assert_eq!(compute_budget, $expected_budget); }; diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index dc5d116f08..c0453d8064 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -108,8 +108,8 @@ use { epoch_schedule::EpochSchedule, feature, feature_set::{ - self, add_set_compute_unit_price_ix, disable_fee_calculator, - enable_early_verification_of_account_modifications, FeatureSet, + self, add_set_compute_unit_price_ix, default_units_per_instruction, + disable_fee_calculator, enable_early_verification_of_account_modifications, FeatureSet, }, fee::FeeStructure, fee_calculator::{FeeCalculator, FeeRateGovernor}, @@ -4542,6 +4542,7 @@ impl Bank { Measure::start("compute_budget_process_transaction_time"); let process_transaction_result = compute_budget.process_instructions( tx.message().program_instructions_iter(), + feature_set.is_active(&default_units_per_instruction::id()), feature_set.is_active(&add_set_compute_unit_price_ix::id()), ); compute_budget_process_transaction_time.stop(); @@ -4836,6 +4837,7 @@ impl Bank { let prioritization_fee_details = compute_budget .process_instructions( message.program_instructions_iter(), + false, support_set_compute_unit_price_ix, ) .unwrap_or_default();