mina_node_testing/scenarios/simulation/
small_forever_real_time.rs

1use std::time::Duration;
2
3use mina_p2p_messages::v2;
4use node::transition_frontier::genesis::{GenesisConfig, NonStakers};
5
6use crate::{
7    scenarios::{ClusterRunner, RunCfgAdvanceTime},
8    simulator::{Simulator, SimulatorConfig, SimulatorRunUntil},
9};
10
11/// Small never-ending simulation.
12///
13/// Node's use real time.
14///
15/// - **whale** block producers: **1**.
16/// - **fish** block producers: **2**.
17/// - seed nodes: **2**.
18/// - normal nodes: **2**.
19#[derive(documented::Documented, Default, Clone, Copy)]
20pub struct SimulationSmallForeverRealTime;
21
22impl SimulationSmallForeverRealTime {
23    pub async fn run(self, mut runner: ClusterRunner<'_>) {
24        let initial_time = redux::Timestamp::global_now();
25        let mut constants = v2::PROTOCOL_CONSTANTS.clone();
26        constants.genesis_state_timestamp =
27            v2::BlockTimeTimeStableV1((u64::from(initial_time) / 1_000_000).into());
28        let genesis_cfg = GenesisConfig::Counts {
29            whales: 1,
30            fish: 2,
31            non_stakers: NonStakers::Count(100),
32            constants,
33        };
34        let cfg = SimulatorConfig {
35            genesis: genesis_cfg.into(),
36            seed_nodes: 2,
37            normal_nodes: 2,
38            snark_workers: 1,
39            block_producers: 3,
40            advance_time: RunCfgAdvanceTime::Real,
41            run_until: SimulatorRunUntil::Forever,
42            run_until_timeout: Duration::MAX,
43            recorder: Default::default(),
44        };
45        let mut simulator = Simulator::new(initial_time, cfg);
46        simulator.setup_and_run(&mut runner).await;
47    }
48}