mina_node_testing/scenarios/simulation/
small.rs

1use std::time::Duration;
2
3use mina_p2p_messages::v2::{BlockTimeTimeStableV1, PROTOCOL_CONSTANTS};
4use node::transition_frontier::genesis::{GenesisConfig, NonStakers};
5
6use crate::{
7    scenarios::{ClusterRunner, RunCfgAdvanceTime},
8    simulator::{Simulator, SimulatorConfig, SimulatorRunUntil},
9};
10
11/// Small simulation.
12///
13/// Run until `epoch_count < 8`.
14///
15/// - **whale** block producers: **2**.
16/// - **fish** block producers: **4**.
17/// - seed nodes: **2**.
18/// - normal nodes: **2**.
19#[derive(documented::Documented, Default, Clone, Copy)]
20pub struct SimulationSmall;
21
22impl SimulationSmall {
23    pub async fn run(self, mut runner: ClusterRunner<'_>) {
24        let initial_time = redux::Timestamp::global_now();
25        let mut constants = PROTOCOL_CONSTANTS.clone();
26        constants.genesis_state_timestamp =
27            BlockTimeTimeStableV1((u64::from(initial_time) / 1_000_000).into());
28        let genesis_cfg = GenesisConfig::Counts {
29            whales: 2,
30            fish: 4,
31            non_stakers: NonStakers::None,
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: 6,
40            advance_time: RunCfgAdvanceTime::Rand(10..=200),
41            run_until: SimulatorRunUntil::Epoch(3),
42            run_until_timeout: Duration::from_secs(30 * 60),
43            recorder: Default::default(),
44        };
45        let mut simulator = Simulator::new(initial_time, cfg);
46        simulator.setup_and_run(&mut runner).await;
47    }
48}