kaspa_mining/mempool/
config.rs1use kaspa_consensus_core::constants::TX_VERSION;
2
3pub(crate) const DEFAULT_MAXIMUM_TRANSACTION_COUNT: usize = 1_000_000;
4pub(crate) const DEFAULT_MEMPOOL_SIZE_LIMIT: usize = 1_000_000_000;
5pub(crate) const DEFAULT_MAXIMUM_BUILD_BLOCK_TEMPLATE_ATTEMPTS: u64 = 5;
6
7pub(crate) const DEFAULT_TRANSACTION_EXPIRE_INTERVAL_SECONDS: u64 = 24 * 60 * 60;
8pub(crate) const DEFAULT_TRANSACTION_EXPIRE_SCAN_INTERVAL_SECONDS: u64 = 60;
9pub(crate) const DEFAULT_ACCEPTED_TRANSACTION_EXPIRE_INTERVAL_SECONDS: u64 = 120;
10pub(crate) const DEFAULT_ACCEPTED_TRANSACTION_EXPIRE_SCAN_INTERVAL_SECONDS: u64 = 10;
11pub(crate) const DEFAULT_ORPHAN_EXPIRE_INTERVAL_SECONDS: u64 = 60;
12pub(crate) const DEFAULT_ORPHAN_EXPIRE_SCAN_INTERVAL_SECONDS: u64 = 10;
13
14pub(crate) const DEFAULT_MAXIMUM_ORPHAN_TRANSACTION_MASS: u64 = 100_000;
15pub(crate) const DEFAULT_MAXIMUM_ORPHAN_TRANSACTION_COUNT: u64 = 500;
16
17pub(crate) const DEFAULT_MINIMUM_RELAY_TRANSACTION_FEE: u64 = 1000;
20
21pub(crate) const DEFAULT_MINIMUM_STANDARD_TRANSACTION_VERSION: u16 = TX_VERSION;
26pub(crate) const DEFAULT_MAXIMUM_STANDARD_TRANSACTION_VERSION: u16 = TX_VERSION;
27
28#[derive(Clone, Debug)]
29pub struct Config {
30 pub maximum_transaction_count: usize,
31 pub mempool_size_limit: usize,
32 pub maximum_build_block_template_attempts: u64,
33 pub transaction_expire_interval_daa_score: u64,
34 pub transaction_expire_scan_interval_daa_score: u64,
35 pub transaction_expire_scan_interval_milliseconds: u64,
36 pub accepted_transaction_expire_interval_daa_score: u64,
37 pub accepted_transaction_expire_scan_interval_daa_score: u64,
38 pub accepted_transaction_expire_scan_interval_milliseconds: u64,
39 pub orphan_expire_interval_daa_score: u64,
40 pub orphan_expire_scan_interval_daa_score: u64,
41 pub maximum_orphan_transaction_mass: u64,
42 pub maximum_orphan_transaction_count: u64,
43 pub accept_non_standard: bool,
44 pub maximum_mass_per_block: u64,
45 pub minimum_relay_transaction_fee: u64,
46 pub minimum_standard_transaction_version: u16,
47 pub maximum_standard_transaction_version: u16,
48 pub network_blocks_per_second: u64,
49}
50
51impl Config {
52 #[allow(clippy::too_many_arguments)]
53 pub fn new(
54 maximum_transaction_count: usize,
55 mempool_size_limit: usize,
56 maximum_build_block_template_attempts: u64,
57 transaction_expire_interval_daa_score: u64,
58 transaction_expire_scan_interval_daa_score: u64,
59 transaction_expire_scan_interval_milliseconds: u64,
60 accepted_transaction_expire_interval_daa_score: u64,
61 accepted_transaction_expire_scan_interval_daa_score: u64,
62 accepted_transaction_expire_scan_interval_milliseconds: u64,
63 orphan_expire_interval_daa_score: u64,
64 orphan_expire_scan_interval_daa_score: u64,
65 maximum_orphan_transaction_mass: u64,
66 maximum_orphan_transaction_count: u64,
67 accept_non_standard: bool,
68 maximum_mass_per_block: u64,
69 minimum_relay_transaction_fee: u64,
70 minimum_standard_transaction_version: u16,
71 maximum_standard_transaction_version: u16,
72 network_blocks_per_second: u64,
73 ) -> Self {
74 Self {
75 maximum_transaction_count,
76 mempool_size_limit,
77 maximum_build_block_template_attempts,
78 transaction_expire_interval_daa_score,
79 transaction_expire_scan_interval_daa_score,
80 transaction_expire_scan_interval_milliseconds,
81 accepted_transaction_expire_interval_daa_score,
82 accepted_transaction_expire_scan_interval_daa_score,
83 accepted_transaction_expire_scan_interval_milliseconds,
84 orphan_expire_interval_daa_score,
85 orphan_expire_scan_interval_daa_score,
86 maximum_orphan_transaction_mass,
87 maximum_orphan_transaction_count,
88 accept_non_standard,
89 maximum_mass_per_block,
90 minimum_relay_transaction_fee,
91 minimum_standard_transaction_version,
92 maximum_standard_transaction_version,
93 network_blocks_per_second,
94 }
95 }
96
97 pub const fn build_default(target_milliseconds_per_block: u64, relay_non_std_transactions: bool, max_block_mass: u64) -> Self {
100 Self {
101 maximum_transaction_count: DEFAULT_MAXIMUM_TRANSACTION_COUNT,
102 mempool_size_limit: DEFAULT_MEMPOOL_SIZE_LIMIT,
103 maximum_build_block_template_attempts: DEFAULT_MAXIMUM_BUILD_BLOCK_TEMPLATE_ATTEMPTS,
104 transaction_expire_interval_daa_score: DEFAULT_TRANSACTION_EXPIRE_INTERVAL_SECONDS * 1000 / target_milliseconds_per_block,
105 transaction_expire_scan_interval_daa_score: DEFAULT_TRANSACTION_EXPIRE_SCAN_INTERVAL_SECONDS * 1000
106 / target_milliseconds_per_block,
107 transaction_expire_scan_interval_milliseconds: DEFAULT_TRANSACTION_EXPIRE_SCAN_INTERVAL_SECONDS * 1000,
108 accepted_transaction_expire_interval_daa_score: DEFAULT_ACCEPTED_TRANSACTION_EXPIRE_INTERVAL_SECONDS * 1000
109 / target_milliseconds_per_block,
110 accepted_transaction_expire_scan_interval_daa_score: DEFAULT_ACCEPTED_TRANSACTION_EXPIRE_SCAN_INTERVAL_SECONDS * 1000
111 / target_milliseconds_per_block,
112 accepted_transaction_expire_scan_interval_milliseconds: DEFAULT_ACCEPTED_TRANSACTION_EXPIRE_SCAN_INTERVAL_SECONDS * 1000,
113 orphan_expire_interval_daa_score: DEFAULT_ORPHAN_EXPIRE_INTERVAL_SECONDS * 1000 / target_milliseconds_per_block,
114 orphan_expire_scan_interval_daa_score: DEFAULT_ORPHAN_EXPIRE_SCAN_INTERVAL_SECONDS * 1000 / target_milliseconds_per_block,
115 maximum_orphan_transaction_mass: DEFAULT_MAXIMUM_ORPHAN_TRANSACTION_MASS,
116 maximum_orphan_transaction_count: DEFAULT_MAXIMUM_ORPHAN_TRANSACTION_COUNT,
117 accept_non_standard: relay_non_std_transactions,
118 maximum_mass_per_block: max_block_mass,
119 minimum_relay_transaction_fee: DEFAULT_MINIMUM_RELAY_TRANSACTION_FEE,
120 minimum_standard_transaction_version: DEFAULT_MINIMUM_STANDARD_TRANSACTION_VERSION,
121 maximum_standard_transaction_version: DEFAULT_MAXIMUM_STANDARD_TRANSACTION_VERSION,
122 network_blocks_per_second: 1000 / target_milliseconds_per_block,
123 }
124 }
125
126 pub fn apply_ram_scale(mut self, ram_scale: f64) -> Self {
127 self.maximum_transaction_count = (self.maximum_transaction_count as f64 * ram_scale.min(1.0)) as usize;
129 self.mempool_size_limit = (self.mempool_size_limit as f64 * ram_scale.min(1.0)) as usize;
130 self
131 }
132
133 pub(crate) fn minimum_feerate(&self) -> f64 {
135 self.minimum_relay_transaction_fee as f64 / 1000.0
137 }
138}