diff --git a/simlib/mixnet-sims/Cargo.toml b/simlib/mixnet-sims/Cargo.toml index 33a6759..94cf492 100644 --- a/simlib/mixnet-sims/Cargo.toml +++ b/simlib/mixnet-sims/Cargo.toml @@ -8,6 +8,7 @@ anyhow = "1.0.93" clap = { version = "4.5.20", features = ["derive"] } crossbeam = "0.8.4" ctrlc = "3.4" +humantime = "2" parking_lot = "0.12.3" rand = "0.8" serde = { version = "1.0.214", features = ["derive"] } diff --git a/simlib/mixnet-sims/config/mixnode.json b/simlib/mixnet-sims/config/mixnode.json index 8c9b3b0..817b5c8 100644 --- a/simlib/mixnet-sims/config/mixnode.json +++ b/simlib/mixnet-sims/config/mixnode.json @@ -38,12 +38,12 @@ ], "connected_peers_count": 3, "data_message_lottery_interval": "20s", - "stake_proportion": "1.0", + "stake_proportion": 1.0, "epoch_duration": "432000s", "slot_duration": "20s", "persistent_transmission": { - "max_emission_frequency": "1.0", - "drop_message_probability": "0.0" + "max_emission_frequency": 1.0, + "drop_message_probability": 0.0 }, "number_of_mix_layers": 4, "max_delay_seconds": 10, diff --git a/simlib/mixnet-sims/src/settings.rs b/simlib/mixnet-sims/src/settings.rs index c057eb9..14e949c 100644 --- a/simlib/mixnet-sims/src/settings.rs +++ b/simlib/mixnet-sims/src/settings.rs @@ -1,6 +1,6 @@ use netrunner::settings::SimulationSettings; use nomos_mix::persistent_transmission::PersistentTransmissionSettings; -use serde::Deserialize; +use serde::{Deserialize, Deserializer}; use std::time::Duration; #[derive(Deserialize)] @@ -8,12 +8,23 @@ pub struct SimSettings { #[serde(flatten)] pub simulation_settings: SimulationSettings, pub connected_peers_count: usize, + #[serde(deserialize_with = "deserialize_duration_with_human_time")] pub data_message_lottery_interval: Duration, pub stake_proportion: f64, + #[serde(deserialize_with = "deserialize_duration_with_human_time")] pub epoch_duration: Duration, + #[serde(deserialize_with = "deserialize_duration_with_human_time")] pub slot_duration: Duration, pub persistent_transmission: PersistentTransmissionSettings, pub number_of_mix_layers: usize, pub max_delay_seconds: u64, pub slots_per_epoch: usize, } + +fn deserialize_duration_with_human_time<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + let s = String::deserialize(deserializer)?; + humantime::parse_duration(&s).map_err(serde::de::Error::custom) +}