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
257impl TonicParameters {
258 fn default_keepalive_interval() -> Duration {
259 Duration::from_secs(10)
260 }
261
262 fn default_connection_buffer_size() -> usize {
263 32 << 20
264 }
265
266 fn default_excessive_message_size() -> usize {
267 16 << 20
268 }
269
270 fn default_message_size_limit() -> usize {
271 64 << 20
272 }
273}
274
275impl Default for TonicParameters {
276 fn default() -> Self {
277 Self {
278 keepalive_interval: TonicParameters::default_keepalive_interval(),
279 connection_buffer_size: TonicParameters::default_connection_buffer_size(),
280 excessive_message_size: TonicParameters::default_excessive_message_size(),
281 message_size_limit: TonicParameters::default_message_size_limit(),
282 }
283 }
284}
285
286#[derive(Clone, Debug, Deserialize, Serialize)]
288pub struct InternalParameters {
289 #[serde(default = "InternalParameters::default_skip_equivocation_validation")]
291 pub skip_equivocation_validation: bool,
292}
293
294impl InternalParameters {
295 fn default_skip_equivocation_validation() -> bool {
296 false
297 }
298}
299
300impl Default for InternalParameters {
301 fn default() -> Self {
302 Self {
303 skip_equivocation_validation: InternalParameters::default_skip_equivocation_validation(
304 ),
305 }
306 }
307}