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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
use ckb_jsonrpc_types::Script;
use serde::{Deserialize, Serialize};
/// RPC modules.
#[derive(Clone, Debug, Copy, Eq, PartialEq, Serialize, Deserialize)]
#[allow(missing_docs)]
pub enum Module {
Net,
Chain,
Miner,
Pool,
Experiment,
Stats,
IntegrationTest,
Alert,
Subscription,
Debug,
Indexer,
RichIndexer,
Terminal,
}
/// RPC config options.
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Eq)]
#[serde(deny_unknown_fields)]
pub struct Config {
/// RPC server listen addresses.
pub listen_address: String,
/// RPC TCP server listen addresses.
///
/// Only TCP and WS are supported to subscribe events via the Subscription RPC module.
#[serde(default)]
pub tcp_listen_address: Option<String>,
/// RPC WS server listen addresses.
///
/// Only TCP and WS are supported to subscribe events via the Subscription RPC module.
#[serde(default)]
pub ws_listen_address: Option<String>,
/// Max request body size in bytes.
pub max_request_body_size: usize,
/// Number of RPC worker threads.
pub threads: Option<usize>,
/// Number of RPC batch limit.
pub rpc_batch_limit: Option<usize>,
/// Enabled RPC modules.
pub modules: Vec<Module>,
/// Rejects txs with scripts that might trigger known bugs
#[serde(default)]
pub reject_ill_transactions: bool,
/// Whether enable deprecated RPC methods.
///
/// Deprecated RPC methods are disabled by default.
#[serde(default)]
pub enable_deprecated_rpc: bool,
/// Customized extra well known lock scripts.
#[serde(default)]
pub extra_well_known_lock_scripts: Vec<Script>,
/// Customized extra well known type scripts.
#[serde(default)]
pub extra_well_known_type_scripts: Vec<Script>,
}
impl Config {
/// Checks whether the Net module is enabled.
pub fn net_enable(&self) -> bool {
self.modules.contains(&Module::Net)
}
/// Checks whether the Chain module is enabled.
pub fn chain_enable(&self) -> bool {
self.modules.contains(&Module::Chain)
}
/// Checks whether the Miner module is enabled.
pub fn miner_enable(&self) -> bool {
self.modules.contains(&Module::Miner)
}
/// Checks whether the Pool module is enabled.
pub fn pool_enable(&self) -> bool {
self.modules.contains(&Module::Pool)
}
/// Checks whether the Experiment module is enabled.
pub fn experiment_enable(&self) -> bool {
self.modules.contains(&Module::Experiment)
}
/// Checks whether the Stats module is enabled.
pub fn stats_enable(&self) -> bool {
self.modules.contains(&Module::Stats)
}
/// Checks whether the Subscription module is enabled.
pub fn subscription_enable(&self) -> bool {
self.modules.contains(&Module::Subscription)
}
/// Checks whether the IntegrationTest module is enabled.
pub fn integration_test_enable(&self) -> bool {
self.modules.contains(&Module::IntegrationTest)
}
/// Checks whether the Alert module is enabled.
pub fn alert_enable(&self) -> bool {
self.modules.contains(&Module::Alert)
}
/// Checks whether the Debug module is enabled.
pub fn debug_enable(&self) -> bool {
self.modules.contains(&Module::Debug)
}
/// Checks whether the Terminal module is enabled.
pub fn terminal_enable(&self) -> bool {
self.modules.contains(&Module::Terminal)
}
/// Checks whether the Indexer module is enabled.
pub fn indexer_enable(&self) -> bool {
self.modules.contains(&Module::Indexer)
}
/// Checks whether the Rich Indexer module is enabled.
pub fn rich_indexer_enable(&self) -> bool {
self.modules.contains(&Module::RichIndexer)
}
}