use massa_models::block::BlockDeserializerArgs;
use massa_models::node::NodeId;
use massa_time::MassaTime;
use serde::Deserialize;
use std::{net::SocketAddr, path::PathBuf};
use substruct::SubStruct;
#[derive(Debug, Deserialize, Clone, Copy)]
pub enum IpType {
Both,
IPv4,
IPv6,
}
#[derive(Debug, Deserialize, Clone)]
pub struct BootstrapConfig {
pub bootstrap_list: Vec<(SocketAddr, NodeId)>,
pub bootstrap_protocol: IpType,
pub bootstrap_whitelist_path: PathBuf,
pub bootstrap_blacklist_path: PathBuf,
pub listen_addr: Option<SocketAddr>,
pub connect_timeout: MassaTime,
pub bootstrap_timeout: MassaTime,
pub read_timeout: MassaTime,
pub write_timeout: MassaTime,
pub read_error_timeout: MassaTime,
pub write_error_timeout: MassaTime,
pub retry_delay: MassaTime,
pub max_ping: MassaTime,
pub max_clock_delta: MassaTime,
pub cache_duration: MassaTime,
pub keep_ledger: bool,
pub max_simultaneous_bootstraps: u32,
pub per_ip_min_interval: MassaTime,
pub ip_list_max_size: usize,
pub rate_limit: u64,
pub thread_count: u8,
pub periods_per_cycle: u64,
pub max_datastore_key_length: u8,
pub randomness_size_bytes: usize,
pub endorsement_count: u32,
pub max_advertise_length: u32,
pub max_listeners_per_peer: u32,
pub max_bootstrap_blocks_length: u32,
pub max_operations_per_block: u32,
pub max_bootstrap_error_length: u64,
pub max_final_state_elements_size: u32,
pub max_versioning_elements_size: u32,
pub max_datastore_entry_count: u64,
pub max_datastore_value_length: u64,
pub max_op_datastore_entry_count: u64,
pub max_op_datastore_key_length: u8,
pub max_op_datastore_value_length: u64,
pub max_function_name_length: u16,
pub max_parameters_size: u32,
pub max_ledger_changes_count: u64,
pub max_changes_slot_count: u64,
pub max_rolls_length: u64,
pub max_production_stats_length: u64,
pub max_credits_length: u64,
pub max_executed_ops_length: u64,
pub max_ops_changes_length: u64,
pub consensus_bootstrap_part_size: u64,
pub max_consensus_block_ids: u64,
pub mip_store_stats_block_considered: usize,
pub max_denunciations_per_block_header: u32,
pub max_denunciation_changes_length: u64,
pub chain_id: u64,
}
#[allow(missing_docs)]
#[derive(Debug, Deserialize, Clone, SubStruct)]
#[parent(type = "BootstrapConfig")]
pub struct BootstrapSrvBindCfg {
pub rate_limit: u64,
pub thread_count: u8,
pub max_datastore_key_length: u8,
pub randomness_size_bytes: usize,
pub consensus_bootstrap_part_size: u64,
pub write_error_timeout: MassaTime,
}
#[allow(missing_docs)]
#[derive(Debug, Deserialize, Clone, SubStruct)]
#[parent(type = "BootstrapConfig")]
pub struct BootstrapClientConfig {
pub rate_limit: u64,
pub endorsement_count: u32,
pub max_listeners_per_peer: u32,
pub max_advertise_length: u32,
pub max_bootstrap_blocks_length: u32,
pub max_operations_per_block: u32,
pub thread_count: u8,
pub randomness_size_bytes: usize,
pub max_bootstrap_error_length: u64,
pub max_final_state_elements_size: u32,
pub max_versioning_elements_size: u32,
pub max_datastore_entry_count: u64,
pub max_datastore_key_length: u8,
pub max_datastore_value_length: u64,
pub max_ledger_changes_count: u64,
pub max_changes_slot_count: u64,
pub max_rolls_length: u64,
pub max_production_stats_length: u64,
pub max_credits_length: u64,
pub max_executed_ops_length: u64,
pub max_ops_changes_length: u64,
pub mip_store_stats_block_considered: usize,
pub max_denunciations_per_block_header: u32,
pub max_denunciation_changes_length: u64,
pub chain_id: u64,
}
#[allow(missing_docs)]
#[derive(SubStruct)]
#[parent(type = "BootstrapClientConfig")]
pub struct BootstrapServerMessageDeserializerArgs {
pub thread_count: u8,
pub endorsement_count: u32,
pub max_advertise_length: u32,
pub max_listeners_per_peer: u32,
pub max_bootstrap_blocks_length: u32,
pub max_operations_per_block: u32,
pub max_final_state_elements_size: u32,
pub max_versioning_elements_size: u32,
pub max_ledger_changes_count: u64,
pub max_datastore_key_length: u8,
pub max_datastore_value_length: u64,
pub max_datastore_entry_count: u64,
pub max_bootstrap_error_length: u64,
pub max_changes_slot_count: u64,
pub max_rolls_length: u64,
pub max_production_stats_length: u64,
pub max_credits_length: u64,
pub max_executed_ops_length: u64,
pub max_ops_changes_length: u64,
pub mip_store_stats_block_considered: usize,
pub max_denunciations_per_block_header: u32,
pub max_denunciation_changes_length: u64,
pub chain_id: u64,
}
impl From<&BootstrapServerMessageDeserializerArgs> for BlockDeserializerArgs {
fn from(value: &BootstrapServerMessageDeserializerArgs) -> Self {
Self {
thread_count: value.thread_count,
max_operations_per_block: value.max_operations_per_block,
endorsement_count: value.endorsement_count,
max_denunciations_per_block_header: value.max_denunciations_per_block_header,
last_start_period: None,
chain_id: value.chain_id,
}
}
}