use kaspa_consensus_core::tx::Transaction;
use crate::constants::LOCK_TIME_THRESHOLD;
use super::{
errors::{TxResult, TxRuleError},
TransactionValidator,
};
impl TransactionValidator {
pub fn utxo_free_tx_validation(&self, tx: &Transaction, ctx_daa_score: u64, ctx_block_time: u64) -> TxResult<()> {
self.check_tx_is_finalized(tx, ctx_daa_score, ctx_block_time)
}
fn check_tx_is_finalized(&self, tx: &Transaction, ctx_daa_score: u64, ctx_block_time: u64) -> TxResult<()> {
if tx.lock_time == 0 {
return Ok(());
}
let block_time_or_daa_score = if tx.lock_time < LOCK_TIME_THRESHOLD { ctx_daa_score } else { ctx_block_time };
if tx.lock_time < block_time_or_daa_score {
return Ok(());
}
for (i, input) in tx.inputs.iter().enumerate() {
if input.sequence != u64::MAX {
return Err(TxRuleError::NotFinalized(i));
}
}
Ok(())
}
}