-
Notifications
You must be signed in to change notification settings - Fork 39
/
types.rs
302 lines (261 loc) · 8.69 KB
/
types.rs
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
use std::collections::HashMap;
use std::net::SocketAddr;
use std::path::PathBuf;
use serde::Deserialize;
use tentacle_multiaddr::MultiAddr;
use protocol::types::{Hex, H160, H256, U256};
pub const DEFAULT_BROADCAST_TXS_SIZE: usize = 200;
pub const DEFAULT_BROADCAST_TXS_INTERVAL: u64 = 200; // milliseconds
pub const DEFAULT_OVERLORD_GAP: usize = 5;
pub const DEFAULT_SYNC_TXS_CHUNK_SIZE: usize = 5000;
pub const DEFAULT_CACHE_SIZE: usize = 100;
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigApi {
pub http_listening_address: Option<SocketAddr>,
pub ws_listening_address: Option<SocketAddr>,
pub maxconn: u32,
pub max_payload_size: u32,
pub enable_dump_profile: Option<bool>,
#[serde(default)]
pub client_version: String,
#[serde(default = "default_gas_cap")]
pub gas_cap: u64,
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigGraphQLTLS {
pub private_key_file_path: PathBuf,
pub certificate_chain_file_path: PathBuf,
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigNetwork {
pub bootstraps: Option<Vec<ConfigNetworkBootstrap>>,
pub allowlist: Option<Vec<String>>,
pub allowlist_only: Option<bool>,
pub trust_interval_duration: Option<u64>,
pub trust_max_history_duration: Option<u64>,
pub fatal_ban_duration: Option<u64>,
pub soft_ban_duration: Option<u64>,
pub max_connected_peers: Option<usize>,
pub same_ip_conn_limit: Option<usize>,
pub inbound_conn_limit: Option<usize>,
pub listening_address: MultiAddr,
pub rpc_timeout: Option<u64>,
pub selfcheck_interval: Option<u64>,
pub send_buffer_size: Option<usize>,
pub write_timeout: Option<u64>,
pub recv_buffer_size: Option<usize>,
pub max_frame_length: Option<usize>,
pub max_wait_streams: Option<usize>,
pub ping_interval: Option<u64>,
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigNetworkBootstrap {
pub multi_address: MultiAddr,
}
fn default_overlord_gap() -> usize {
DEFAULT_OVERLORD_GAP
}
fn default_sync_txs_chunk_size() -> usize {
DEFAULT_SYNC_TXS_CHUNK_SIZE
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigConsensus {
#[serde(default = "default_overlord_gap")]
pub overlord_gap: usize,
#[serde(default = "default_sync_txs_chunk_size")]
pub sync_txs_chunk_size: usize,
}
fn default_broadcast_txs_size() -> usize {
DEFAULT_BROADCAST_TXS_SIZE
}
fn default_broadcast_txs_interval() -> u64 {
DEFAULT_BROADCAST_TXS_INTERVAL
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigMempool {
pub pool_size: u64,
pub timeout_gap: u64,
#[serde(default = "default_broadcast_txs_size")]
pub broadcast_txs_size: usize,
#[serde(default = "default_broadcast_txs_interval")]
pub broadcast_txs_interval: u64,
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigExecutor {
pub light: bool,
pub triedb_cache_size: usize,
}
fn default_cache_size() -> usize {
DEFAULT_CACHE_SIZE
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigRocksDB {
pub max_open_files: i32,
#[serde(default = "default_cache_size")]
pub cache_size: usize,
pub options_file: Option<PathBuf>,
}
impl Default for ConfigRocksDB {
fn default() -> Self {
Self {
max_open_files: 64,
cache_size: default_cache_size(),
options_file: None,
}
}
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigIbc {
pub uri: String,
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigLogger {
pub filter: String,
pub log_to_console: bool,
pub console_show_file_and_line: bool,
pub log_to_file: bool,
pub metrics: bool,
pub log_path: PathBuf,
pub file_size_limit: u64,
#[serde(default)]
pub modules_level: HashMap<String, String>,
}
impl Default for ConfigLogger {
fn default() -> Self {
Self {
filter: "info".into(),
log_to_console: true,
console_show_file_and_line: false,
log_to_file: true,
metrics: true,
log_path: "logs/".into(),
file_size_limit: 1024 * 1024 * 1024, // GiB
modules_level: HashMap::new(),
}
}
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigJaeger {
pub service_name: Option<String>,
pub tracing_address: Option<SocketAddr>,
pub tracing_batch_size: Option<usize>,
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigPrometheus {
pub listening_address: Option<SocketAddr>,
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigCrossChain {
pub axon_udt_hash: H256,
pub ckb_uri: String,
pub mercury_uri: String,
pub indexer_uri: String,
pub start_block_number: u64,
pub pk: Hex,
pub enable: bool,
pub checkpoint_interval: u64,
pub admin_address: H160,
pub node_address: H160,
pub selection_lock_hash: H256,
pub checkpoint_type_hash: H256,
pub acs_lock_code_hash: H256,
pub request_type_code_hash: H256,
}
#[derive(Clone, Debug, Deserialize)]
pub struct BlockchainConfig {
pub name: String,
pub id: u8,
pub tx_hash: H256,
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConfigInteroperabilityExtension {
pub blockchain_extension_transaction_hashes: Vec<BlockchainConfig>,
}
impl From<ConfigInteroperabilityExtension> for HashMap<u8, H256> {
fn from(ie: ConfigInteroperabilityExtension) -> Self {
ie.blockchain_extension_transaction_hashes
.into_iter()
.map(|v| (v.id, v.tx_hash))
.collect()
}
}
impl ConfigInteroperabilityExtension {
pub fn get_hashes(&self) -> Vec<H256> {
self.blockchain_extension_transaction_hashes
.iter()
.map(|v| v.tx_hash)
.collect()
}
}
#[derive(Clone, Debug, Deserialize)]
pub struct MnemonicAccountsConfig {
pub mnemonic: String,
pub initial_index: Option<u32>,
pub path: Option<String>,
pub count: u32,
pub balance: U256,
}
#[derive(Clone, Debug, Deserialize)]
pub struct Config {
// crypto
pub privkey: Hex,
// db config
pub data_path: PathBuf,
pub accounts: MnemonicAccountsConfig,
pub rpc: ConfigApi,
pub network: ConfigNetwork,
pub mempool: ConfigMempool,
pub executor: ConfigExecutor,
pub consensus: ConfigConsensus,
#[serde(default)]
pub logger: ConfigLogger,
#[serde(default)]
pub rocksdb: ConfigRocksDB,
pub jaeger: Option<ConfigJaeger>,
pub prometheus: Option<ConfigPrometheus>,
pub cross_client: ConfigCrossChain,
pub epoch_len: u64,
pub crosschain_contract_address: H160,
pub wckb_contract_address: H160,
pub ibc: Option<ConfigIbc>,
pub interoperability_extension: ConfigInteroperabilityExtension,
}
impl Config {
pub fn data_path_for_system_contract(&self) -> PathBuf {
let mut path_state = self.data_path.clone();
path_state.push("rocksdb");
path_state.push("system_contract");
path_state
}
pub fn data_path_for_state(&self) -> PathBuf {
let mut path_state = self.data_path.clone();
path_state.push("rocksdb");
path_state.push("state_data");
path_state
}
pub fn data_path_for_block(&self) -> PathBuf {
let mut path_state = self.data_path.clone();
path_state.push("rocksdb");
path_state.push("block_data");
path_state
}
pub fn data_path_for_crosschain(&self) -> PathBuf {
let mut path_state = self.data_path.clone();
path_state.push("rocksdb");
path_state.push("crosschain");
path_state
}
pub fn data_path_for_txs_wal(&self) -> PathBuf {
let mut path_state = self.data_path.clone();
path_state.push("txs_wal");
path_state
}
pub fn data_path_for_consensus_wal(&self) -> PathBuf {
let mut path_state = self.data_path.clone();
path_state.push("consensus_wal");
path_state
}
}
fn default_gas_cap() -> u64 {
25_000_000
}