consensus_config/
parameters.rs1use mysten_network::Multiaddr;
5use serde::{Deserialize, Serialize};
6use std::{path::PathBuf, time::Duration};
7
8#[derive(Clone, Debug, Deserialize, Serialize)]
16pub struct Parameters {
17 #[serde(skip)]
20 pub db_path: PathBuf,
21
22 #[serde(default = "Parameters::default_leader_timeout")]
25 pub leader_timeout: Duration,
26
27 #[serde(default = "Parameters::default_min_round_delay")]
32 pub min_round_delay: Duration,
33
34 #[serde(default = "Parameters::default_max_forward_time_drift")]
36 pub max_forward_time_drift: Duration,
37
38 #[serde(default = "Parameters::default_max_blocks_per_sync")]
45 pub max_blocks_per_sync: usize,
46
47 #[serde(default = "Parameters::default_max_blocks_per_fetch")]
49 pub max_blocks_per_fetch: usize,
50
51 #[serde(default = "Parameters::default_sync_last_known_own_block_timeout")]
55 pub sync_last_known_own_block_timeout: Duration,
56
57 #[serde(default = "Parameters::default_round_prober_interval_ms")]
59 pub round_prober_interval_ms: u64,
60
61 #[serde(default = "Parameters::default_round_prober_request_timeout_ms")]
63 pub round_prober_request_timeout_ms: u64,
64
65 #[serde(default = "Parameters::default_propagation_delay_stop_proposal_threshold")]
69 pub propagation_delay_stop_proposal_threshold: u32,
70
71 #[serde(default = "Parameters::default_dag_state_cached_rounds")]
77 pub dag_state_cached_rounds: u32,
78
79 #[serde(default = "Parameters::default_commit_sync_parallel_fetches")]
82 pub commit_sync_parallel_fetches: usize,
83
84 #[serde(default = "Parameters::default_commit_sync_batch_size")]
88 pub commit_sync_batch_size: u32,
89
90 #[serde(default = "Parameters::default_commit_sync_batches_ahead")]
93 pub commit_sync_batches_ahead: usize,
94
95 #[serde(default = "TonicParameters::default")]
97 pub tonic: TonicParameters,
98
99 #[serde(default = "InternalParameters::default")]
101 pub internal: InternalParameters,
102
103 #[serde(skip)]
106 pub listen_address_override: Option<Multiaddr>,
107}
108
109impl Parameters {
110 pub(crate) fn default_leader_timeout() -> Duration {
111 Duration::from_millis(200)
112 }
113
114 pub(crate) fn default_min_round_delay() -> Duration {
115 if cfg!(msim) || std::env::var("__TEST_ONLY_CONSENSUS_USE_LONG_MIN_ROUND_DELAY").is_ok() {
116 Duration::from_millis(400)
120 } else if cfg!(test) {
121 Duration::from_millis(250)
123 } else {
124 Duration::from_millis(50)
125 }
126 }
127
128 pub(crate) fn default_max_forward_time_drift() -> Duration {
129 Duration::from_millis(500)
130 }
131
132 pub(crate) fn default_max_blocks_per_sync() -> usize {
133 if cfg!(msim) {
134 4
136 } else {
137 32
138 }
139 }
140
141 pub(crate) fn default_max_blocks_per_fetch() -> usize {
142 if cfg!(msim) {
143 10
145 } else {
146 1000
147 }
148 }
149
150 pub(crate) fn default_sync_last_known_own_block_timeout() -> Duration {
151 if cfg!(msim) {
152 Duration::from_millis(500)
153 } else {
154 Duration::from_secs(5)
157 }
158 }
159
160 pub(crate) fn default_round_prober_interval_ms() -> u64 {
161 if cfg!(msim) { 1000 } else { 5000 }
162 }
163
164 pub(crate) fn default_round_prober_request_timeout_ms() -> u64 {
165 if cfg!(msim) { 800 } else { 4000 }
166 }
167
168 pub(crate) fn default_propagation_delay_stop_proposal_threshold() -> u32 {
169 if cfg!(msim) { 2 } else { 5 }
171 }
172
173 pub(crate) fn default_dag_state_cached_rounds() -> u32 {
174 if cfg!(msim) {
175 5
177 } else {
178 500
179 }
180 }
181
182 pub(crate) fn default_commit_sync_parallel_fetches() -> usize {
183 8
184 }
185
186 pub(crate) fn default_commit_sync_batch_size() -> u32 {
187 if cfg!(msim) {
188 5
190 } else {
191 100
192 }
193 }
194
195 pub(crate) fn default_commit_sync_batches_ahead() -> usize {
196 32
199 }
200}
201
202impl Default for Parameters {
203 fn default() -> Self {
204 Self {
205 db_path: PathBuf::default(),
206 leader_timeout: Parameters::default_leader_timeout(),
207 min_round_delay: Parameters::default_min_round_delay(),
208 max_forward_time_drift: Parameters::default_max_forward_time_drift(),
209 max_blocks_per_sync: Parameters::default_max_blocks_per_sync(),
210 max_blocks_per_fetch: Parameters::default_max_blocks_per_fetch(),
211 sync_last_known_own_block_timeout:
212 Parameters::default_sync_last_known_own_block_timeout(),
213 round_prober_interval_ms: Parameters::default_round_prober_interval_ms(),
214 round_prober_request_timeout_ms: Parameters::default_round_prober_request_timeout_ms(),
215 propagation_delay_stop_proposal_threshold:
216 Parameters::default_propagation_delay_stop_proposal_threshold(),
217 dag_state_cached_rounds: Parameters::default_dag_state_cached_rounds(),
218 commit_sync_parallel_fetches: Parameters::default_commit_sync_parallel_fetches(),
219 commit_sync_batch_size: Parameters::default_commit_sync_batch_size(),
220 commit_sync_batches_ahead: Parameters::default_commit_sync_batches_ahead(),
221 tonic: TonicParameters::default(),
222 internal: InternalParameters::default(),
223 listen_address_override: None,
224 }
225 }
226}
227
228#[derive(Clone, Debug, Deserialize, Serialize)]
229pub struct TonicParameters {
230 #[serde(default = "TonicParameters::default_keepalive_interval")]
234 pub keepalive_interval: Duration,
235
236 #[serde(default = "TonicParameters::default_connection_buffer_size")]
240 pub connection_buffer_size: usize,
241
242 #[serde(default = "TonicParameters::default_excessive_message_size")]
246 pub excessive_message_size: usize,
247
248 #[serde(default = "TonicParameters::default_message_size_limit")]
254 pub message_size_limit: usize,
255
256 #[serde(default = "TonicParameters::default_observer_server_port")]
260 pub observer_server_port: Option<u16>,
261
262 #[serde(default = "TonicParameters::default_observer_allowlist")]
267 pub observer_allowlist: Vec<String>,
268}
269
270impl TonicParameters {
271 pub fn is_observer_server_enabled(&self) -> bool {
272 self.observer_server_port.is_some()
273 }
274
275 fn default_keepalive_interval() -> Duration {
276 Duration::from_secs(10)
277 }
278
279 fn default_connection_buffer_size() -> usize {
280 32 << 20
281 }
282
283 fn default_excessive_message_size() -> usize {
284 16 << 20
285 }
286
287 fn default_message_size_limit() -> usize {
288 64 << 20
289 }
290
291 fn default_observer_server_port() -> Option<u16> {
292 None
293 }
294
295 fn default_observer_allowlist() -> Vec<String> {
296 Vec::new()
297 }
298}
299
300impl Default for TonicParameters {
301 fn default() -> Self {
302 Self {
303 keepalive_interval: TonicParameters::default_keepalive_interval(),
304 connection_buffer_size: TonicParameters::default_connection_buffer_size(),
305 excessive_message_size: TonicParameters::default_excessive_message_size(),
306 message_size_limit: TonicParameters::default_message_size_limit(),
307 observer_server_port: TonicParameters::default_observer_server_port(),
308 observer_allowlist: TonicParameters::default_observer_allowlist(),
309 }
310 }
311}
312
313#[derive(Clone, Debug, Deserialize, Serialize)]
315pub struct InternalParameters {
316 #[serde(default = "InternalParameters::default_skip_equivocation_validation")]
318 pub skip_equivocation_validation: bool,
319}
320
321impl InternalParameters {
322 fn default_skip_equivocation_validation() -> bool {
323 false
324 }
325}
326
327impl Default for InternalParameters {
328 fn default() -> Self {
329 Self {
330 skip_equivocation_validation: InternalParameters::default_skip_equivocation_validation(
331 ),
332 }
333 }
334}