ckb_app_config/legacy/
tx_pool.rs1use crate::configs::default_max_tx_verify_workers;
2use ckb_chain_spec::consensus::TWO_IN_TWO_OUT_CYCLES;
3use ckb_jsonrpc_types::FeeRateDef;
4use ckb_types::core::{Cycle, FeeRate};
5use serde::Deserialize;
6use std::cmp;
7use std::path::PathBuf;
8
9const DEFAULT_MIN_FEE_RATE: FeeRate = FeeRate::from_u64(1000);
11const DEFAULT_MIN_RBF_RATE: FeeRate = FeeRate::from_u64(1500);
13const DEFAULT_MAX_TX_VERIFY_CYCLES: Cycle = TWO_IN_TWO_OUT_CYCLES * 20;
15const DEFAULT_MAX_ANCESTORS_COUNT: usize = 1_000;
17const DEFAULT_EXPIRY_HOURS: u8 = 12;
19const DEFAULT_MAX_TX_POOL_SIZE: usize = 180_000_000;
21
22#[derive(Clone, Debug, Deserialize)]
23#[serde(deny_unknown_fields)]
24#[allow(dead_code)]
25pub(crate) struct TxPoolConfig {
26 #[serde(default = "default_max_tx_pool_size")]
27 max_tx_pool_size: usize,
28 max_mem_size: Option<usize>,
29 max_cycles: Option<Cycle>,
30 pub(crate) max_verify_cache_size: Option<usize>,
31 pub(crate) max_conflict_cache_size: Option<usize>,
32 pub(crate) max_committed_txs_hash_cache_size: Option<usize>,
33 #[serde(default = "default_max_tx_verify_workers")]
34 max_tx_verify_workers: usize,
35 #[serde(default = "default_keep_rejected_tx_hashes_days")]
36 keep_rejected_tx_hashes_days: u8,
37 #[serde(default = "default_keep_rejected_tx_hashes_count")]
38 keep_rejected_tx_hashes_count: u64,
39 #[serde(with = "FeeRateDef")]
40 min_fee_rate: FeeRate,
41 #[serde(with = "FeeRateDef", default = "default_min_rbf_rate")]
42 min_rbf_rate: FeeRate,
43 max_tx_verify_cycles: Cycle,
44 max_ancestors_count: usize,
45 #[serde(default)]
46 persisted_data: PathBuf,
47 #[serde(default)]
48 recent_reject: PathBuf,
49 #[serde(default = "default_expiry_hours")]
50 expiry_hours: u8,
51}
52
53fn default_keep_rejected_tx_hashes_days() -> u8 {
54 7
55}
56
57fn default_keep_rejected_tx_hashes_count() -> u64 {
58 10_000_000
59}
60
61fn default_expiry_hours() -> u8 {
62 DEFAULT_EXPIRY_HOURS
63}
64
65fn default_max_tx_pool_size() -> usize {
66 DEFAULT_MAX_TX_POOL_SIZE
67}
68
69fn default_min_rbf_rate() -> FeeRate {
70 DEFAULT_MIN_RBF_RATE
71}
72
73impl Default for crate::TxPoolConfig {
74 fn default() -> Self {
75 TxPoolConfig::default().into()
76 }
77}
78
79impl Default for TxPoolConfig {
80 fn default() -> Self {
81 Self {
82 max_mem_size: None,
83 max_tx_pool_size: DEFAULT_MAX_TX_POOL_SIZE,
84 max_cycles: None,
85 max_verify_cache_size: None,
86 max_conflict_cache_size: None,
87 max_committed_txs_hash_cache_size: None,
88 max_tx_verify_workers: default_max_tx_verify_workers(),
89 keep_rejected_tx_hashes_days: default_keep_rejected_tx_hashes_days(),
90 keep_rejected_tx_hashes_count: default_keep_rejected_tx_hashes_count(),
91 min_fee_rate: DEFAULT_MIN_FEE_RATE,
92 min_rbf_rate: DEFAULT_MIN_RBF_RATE,
93 max_tx_verify_cycles: DEFAULT_MAX_TX_VERIFY_CYCLES,
94 max_ancestors_count: DEFAULT_MAX_ANCESTORS_COUNT,
95 persisted_data: Default::default(),
96 recent_reject: Default::default(),
97 expiry_hours: DEFAULT_EXPIRY_HOURS,
98 }
99 }
100}
101
102impl From<TxPoolConfig> for crate::TxPoolConfig {
103 fn from(input: TxPoolConfig) -> Self {
104 let TxPoolConfig {
105 max_mem_size: _,
106 max_tx_pool_size,
107 max_cycles: _,
108 max_verify_cache_size: _,
109 max_conflict_cache_size: _,
110 max_committed_txs_hash_cache_size: _,
111 max_tx_verify_workers,
112 keep_rejected_tx_hashes_days,
113 keep_rejected_tx_hashes_count,
114 min_fee_rate,
115 min_rbf_rate,
116 max_tx_verify_cycles,
117 max_ancestors_count,
118 persisted_data,
119 recent_reject,
120 expiry_hours,
121 } = input;
122
123 Self {
124 max_tx_pool_size,
125 min_fee_rate,
126 min_rbf_rate,
127 max_tx_verify_cycles,
128 max_tx_verify_workers,
129 max_ancestors_count: cmp::max(DEFAULT_MAX_ANCESTORS_COUNT, max_ancestors_count),
130 keep_rejected_tx_hashes_days,
131 keep_rejected_tx_hashes_count,
132 persisted_data,
133 recent_reject,
134 expiry_hours,
135 }
136 }
137}