ckb_app_config/legacy/
tx_pool.rs

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