1use massa_models::block::BlockDeserializerArgs;
4use massa_models::node::NodeId;
5use massa_time::MassaTime;
6use serde::Deserialize;
7use std::{net::SocketAddr, path::PathBuf};
8
9use substruct::SubStruct;
10
11#[derive(Debug, Deserialize, Clone, Copy)]
13pub enum IpType {
14 Both,
16 IPv4,
18 IPv6,
20}
21
22#[derive(Debug, Deserialize, Clone)]
24pub struct BootstrapConfig {
25 pub bootstrap_list: Vec<(SocketAddr, NodeId)>,
27 pub bootstrap_protocol: IpType,
29 pub bootstrap_whitelist_path: PathBuf,
31 pub bootstrap_blacklist_path: PathBuf,
33 pub listen_addr: Option<SocketAddr>,
35 pub connect_timeout: MassaTime,
37 pub bootstrap_timeout: MassaTime,
40 pub read_timeout: MassaTime,
42 pub write_timeout: MassaTime,
44 pub read_error_timeout: MassaTime,
46 pub write_error_timeout: MassaTime,
48 pub retry_delay: MassaTime,
50 pub max_ping: MassaTime,
52 pub max_clock_delta: MassaTime,
54 pub cache_duration: MassaTime,
56 pub keep_ledger: bool,
58 pub max_simultaneous_bootstraps: u32,
60 pub per_ip_min_interval: MassaTime,
62 pub ip_list_max_size: usize,
64 pub rate_limit: u64,
66 pub thread_count: u8,
68 pub t0: MassaTime,
70 pub genesis_timestamp: MassaTime,
72 pub periods_per_cycle: u64,
74 pub max_datastore_key_length: u8,
76 pub randomness_size_bytes: usize,
78 pub endorsement_count: u32,
80 pub max_advertise_length: u32,
82 pub max_listeners_per_peer: u32,
84 pub max_bootstrap_blocks_length: u32,
86 pub max_operations_per_block: u32,
88 pub max_bootstrap_error_length: u64,
90 pub max_final_state_elements_size: u32,
92 pub max_versioning_elements_size: u32,
94 pub max_final_state_batch_allocation: u64,
96 pub max_versioning_batch_allocation: u64,
98 pub max_datastore_entry_count: u64,
100 pub max_datastore_value_length: u64,
102 pub max_op_datastore_entry_count: u64,
104 pub max_op_datastore_key_length: u8,
106 pub max_op_datastore_value_length: u64,
108 pub max_function_name_length: u16,
110 pub max_parameters_size: u32,
112 pub max_ledger_changes_count: u64,
114 pub max_changes_slot_count: u64,
116 pub max_rolls_length: u64,
118 pub max_production_stats_length: u64,
120 pub max_credits_length: u64,
122 pub max_executed_ops_length: u64,
124 pub max_ops_changes_length: u64,
126 pub consensus_bootstrap_part_size: u64,
128 pub max_consensus_block_ids: u64,
130 pub mip_store_stats_block_considered: usize,
132 pub max_denunciations_per_block_header: u32,
134 pub max_denunciation_changes_length: u64,
136 pub chain_id: u64,
138}
139
140#[allow(missing_docs)]
142#[derive(Debug, Deserialize, Clone, SubStruct)]
143#[parent(type = "BootstrapConfig")]
144pub struct BootstrapSrvBindCfg {
145 pub rate_limit: u64,
146 pub thread_count: u8,
147 pub max_datastore_key_length: u8,
148 pub randomness_size_bytes: usize,
149 pub consensus_bootstrap_part_size: u64,
150 pub max_consensus_block_ids: u64,
151 pub write_error_timeout: MassaTime,
152}
153
154#[allow(missing_docs)]
156#[derive(Debug, Deserialize, Clone, SubStruct)]
157#[parent(type = "BootstrapConfig")]
158pub struct BootstrapClientConfig {
159 pub rate_limit: u64,
160 pub endorsement_count: u32,
161 pub max_listeners_per_peer: u32,
162 pub max_advertise_length: u32,
163 pub max_bootstrap_blocks_length: u32,
164 pub max_operations_per_block: u32,
165 pub thread_count: u8,
166 pub randomness_size_bytes: usize,
167 pub max_bootstrap_error_length: u64,
168 pub max_final_state_elements_size: u32,
169 pub max_versioning_elements_size: u32,
170 pub max_final_state_batch_allocation: u64,
171 pub max_versioning_batch_allocation: u64,
172 pub max_datastore_entry_count: u64,
173 pub max_datastore_key_length: u8,
174 pub max_datastore_value_length: u64,
175 pub max_ledger_changes_count: u64,
176 pub max_changes_slot_count: u64,
177 pub max_rolls_length: u64,
178 pub max_production_stats_length: u64,
179 pub max_credits_length: u64,
180 pub max_executed_ops_length: u64,
181 pub max_ops_changes_length: u64,
182 pub mip_store_stats_block_considered: usize,
183 pub max_denunciations_per_block_header: u32,
184 pub max_denunciation_changes_length: u64,
185 pub chain_id: u64,
186}
187
188#[allow(missing_docs)]
190#[derive(SubStruct)]
191#[parent(type = "BootstrapClientConfig")]
192pub struct BootstrapServerMessageDeserializerArgs {
193 pub thread_count: u8,
194 pub endorsement_count: u32,
195 pub max_advertise_length: u32,
196 pub max_listeners_per_peer: u32,
197 pub max_bootstrap_blocks_length: u32,
198 pub max_operations_per_block: u32,
199 pub max_final_state_elements_size: u32,
200 pub max_versioning_elements_size: u32,
201 pub max_final_state_batch_allocation: u64,
202 pub max_versioning_batch_allocation: u64,
203 pub max_ledger_changes_count: u64,
204 pub max_datastore_key_length: u8,
205 pub max_datastore_value_length: u64,
206 pub max_datastore_entry_count: u64,
207 pub max_bootstrap_error_length: u64,
208 pub max_changes_slot_count: u64,
209 pub max_rolls_length: u64,
210 pub max_production_stats_length: u64,
211 pub max_credits_length: u64,
212 pub max_executed_ops_length: u64,
213 pub max_ops_changes_length: u64,
214 pub mip_store_stats_block_considered: usize,
215 pub max_denunciations_per_block_header: u32,
216 pub max_denunciation_changes_length: u64,
217 pub chain_id: u64,
218}
219
220impl From<&BootstrapServerMessageDeserializerArgs> for BlockDeserializerArgs {
225 fn from(value: &BootstrapServerMessageDeserializerArgs) -> Self {
226 Self {
227 thread_count: value.thread_count,
228 max_operations_per_block: value.max_operations_per_block,
229 endorsement_count: value.endorsement_count,
230 max_denunciations_per_block_header: value.max_denunciations_per_block_header,
231 last_start_period: None,
232 chain_id: value.chain_id,
233 }
234 }
235}