ariadne_simulator/
simple_sim.rs1use crate::*;
2use rand_chacha::ChaCha20Rng;
3
4#[derive(clap::Parser, Debug)]
6pub struct Command {
7 #[arg(long, short = 'P')]
9 permissioned_seats: u16,
10 #[arg(long, short = 'R')]
12 registered_seats: u16,
13 #[arg(long, short = 'p')]
15 permissioned_file: Option<String>,
16 #[arg(long, short = 'r')]
18 registered_file: Option<String>,
19 #[arg(long, default_value = "1")]
21 repetitions: u32,
22 #[arg(long, default_value = "v2")]
24 ariadne_version: AriadneVersion,
25}
26
27impl Command {
28 pub fn execute(self, mut rng: ChaCha20Rng) {
30 let registered_candidates: Vec<(String, u128)> =
31 self.registered_file.map(load_registered).unwrap_or_default();
32
33 let permissioned_candidates: Vec<String> =
34 self.permissioned_file.map(load_permissioned).unwrap_or_default();
35
36 log::info!("Number of registered candidates: {}", registered_candidates.len());
37 log::info!("Number of permissioned candidates: {}", permissioned_candidates.len());
38
39 for i in 0..self.repetitions {
40 if i % 100 == 0 && i > 0 {
41 log::info!("Generation progress: {i}/{}", self.repetitions);
42 }
43
44 let selected = self
45 .ariadne_version
46 .select_authorities(
47 self.registered_seats,
48 self.permissioned_seats,
49 registered_candidates.clone(),
50 permissioned_candidates.clone(),
51 &mut rng,
52 )
53 .expect("Selection failed");
54 println!("{}", serde_json::to_string(&selected).unwrap());
55 }
56 }
57}