diff --git a/consensus/src/pipeline/body_processor/body_validation_in_context.rs b/consensus/src/pipeline/body_processor/body_validation_in_context.rs index 17e1bd888c..308c5fabd0 100644 --- a/consensus/src/pipeline/body_processor/body_validation_in_context.rs +++ b/consensus/src/pipeline/body_processor/body_validation_in_context.rs @@ -26,6 +26,7 @@ impl BlockBodyProcessor { } fn check_block_transactions_in_context(self: &Arc, block: &Block) -> BlockProcessResult<()> { + // TODO: this is somewhat expensive during ibd, as it incurs cache misses. let pmt = Lazy::new(|| { let (pmt, _) = self .window_manager @@ -35,6 +36,12 @@ impl BlockBodyProcessor { }); for tx in block.transactions.iter() { + + // quick check to avoid the expensive Lazy eval (in most cases). + if tx.lock_time == 0 { + continue; + }; + if let Err(e) = self.transaction_validator.utxo_free_tx_validation(tx, block.header.daa_score, &pmt) { return Err(RuleError::TxInContextFailed(tx.id(), e)); }