kaspa_consensus_core/api/
args.rs

1use std::collections::HashMap;
2
3use crate::tx::TransactionId;
4
5/// A struct provided to consensus for transaction validation processing calls
6#[derive(Clone, Debug, Default)]
7pub struct TransactionValidationArgs {
8    /// Optional fee/mass threshold above which a bound transaction in not rejected
9    pub feerate_threshold: Option<f64>,
10}
11
12impl TransactionValidationArgs {
13    pub fn new(feerate_threshold: Option<f64>) -> Self {
14        Self { feerate_threshold }
15    }
16}
17
18/// A struct provided to consensus for transactions validation batch processing calls
19pub struct TransactionValidationBatchArgs {
20    tx_args: HashMap<TransactionId, TransactionValidationArgs>,
21}
22
23impl TransactionValidationBatchArgs {
24    const DEFAULT_ARGS: TransactionValidationArgs = TransactionValidationArgs { feerate_threshold: None };
25
26    pub fn new() -> Self {
27        Self { tx_args: HashMap::new() }
28    }
29
30    /// Set some fee/mass threshold for transaction `transaction_id`.
31    pub fn set_feerate_threshold(&mut self, transaction_id: TransactionId, feerate_threshold: f64) {
32        self.tx_args
33            .entry(transaction_id)
34            .and_modify(|x| x.feerate_threshold = Some(feerate_threshold))
35            .or_insert(TransactionValidationArgs::new(Some(feerate_threshold)));
36    }
37
38    pub fn get(&self, transaction_id: &TransactionId) -> &TransactionValidationArgs {
39        self.tx_args.get(transaction_id).unwrap_or(&Self::DEFAULT_ARGS)
40    }
41}
42
43impl Default for TransactionValidationBatchArgs {
44    fn default() -> Self {
45        Self::new()
46    }
47}