1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
use ckb_chain_spec::consensus::TWO_IN_TWO_OUT_CYCLES;
use ckb_jsonrpc_types::FeeRateDef;
use ckb_types::core::{Cycle, FeeRate};
use serde::Deserialize;
use std::path::PathBuf;
const DEFAULT_MIN_FEE_RATE: FeeRate = FeeRate::from_u64(1000);
const DEFAULT_MAX_TX_VERIFY_CYCLES: Cycle = TWO_IN_TWO_OUT_CYCLES * 20;
const DEFAULT_MAX_ANCESTORS_COUNT: usize = 25;
#[derive(Clone, Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub(crate) struct TxPoolConfig {
max_mem_size: usize,
max_cycles: Cycle,
pub(crate) max_verify_cache_size: Option<usize>,
pub(crate) max_conflict_cache_size: Option<usize>,
pub(crate) max_committed_txs_hash_cache_size: Option<usize>,
#[serde(default = "default_keep_rejected_tx_hashes_days")]
keep_rejected_tx_hashes_days: u8,
#[serde(default = "default_keep_rejected_tx_hashes_count")]
keep_rejected_tx_hashes_count: u64,
#[serde(with = "FeeRateDef")]
min_fee_rate: FeeRate,
max_tx_verify_cycles: Cycle,
max_ancestors_count: usize,
#[serde(default)]
persisted_data: PathBuf,
#[serde(default)]
recent_reject: PathBuf,
}
fn default_keep_rejected_tx_hashes_days() -> u8 {
7
}
fn default_keep_rejected_tx_hashes_count() -> u64 {
10_000_000
}
impl Default for crate::TxPoolConfig {
fn default() -> Self {
TxPoolConfig::default().into()
}
}
impl Default for TxPoolConfig {
fn default() -> Self {
Self {
max_mem_size: 20_000_000,
max_cycles: 200_000_000_000,
max_verify_cache_size: None,
max_conflict_cache_size: None,
max_committed_txs_hash_cache_size: None,
keep_rejected_tx_hashes_days: default_keep_rejected_tx_hashes_days(),
keep_rejected_tx_hashes_count: default_keep_rejected_tx_hashes_count(),
min_fee_rate: DEFAULT_MIN_FEE_RATE,
max_tx_verify_cycles: DEFAULT_MAX_TX_VERIFY_CYCLES,
max_ancestors_count: DEFAULT_MAX_ANCESTORS_COUNT,
persisted_data: Default::default(),
recent_reject: Default::default(),
}
}
}
impl From<TxPoolConfig> for crate::TxPoolConfig {
fn from(input: TxPoolConfig) -> Self {
let TxPoolConfig {
max_mem_size,
max_cycles,
max_verify_cache_size: _,
max_conflict_cache_size: _,
max_committed_txs_hash_cache_size: _,
keep_rejected_tx_hashes_days,
keep_rejected_tx_hashes_count,
min_fee_rate,
max_tx_verify_cycles,
max_ancestors_count,
persisted_data,
recent_reject,
} = input;
Self {
max_mem_size,
max_cycles,
min_fee_rate,
max_tx_verify_cycles,
max_ancestors_count,
keep_rejected_tx_hashes_days,
keep_rejected_tx_hashes_count,
persisted_data,
recent_reject,
}
}
}