Skip to main content

ckb_app_config/legacy/
tx_pool.rs

1use 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
9// default min fee rate, 1000 shannons per kilobyte
10const DEFAULT_MIN_FEE_RATE: FeeRate = FeeRate::from_u64(1000);
11// default min rbf rate, 1500 shannons per kilobyte
12const DEFAULT_MIN_RBF_RATE: FeeRate = FeeRate::from_u64(1500);
13// default max tx verify cycles
14const DEFAULT_MAX_TX_VERIFY_CYCLES: Cycle = TWO_IN_TWO_OUT_CYCLES * 20;
15// default max ancestors count
16const DEFAULT_MAX_ANCESTORS_COUNT: usize = 1_000;
17// Default expiration time for pool transactions in hours
18const DEFAULT_EXPIRY_HOURS: u8 = 12;
19// Default max_tx_pool_size 180mb
20const 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}