in librabft-v2/src/main.rs [18:55]
fn main() {
let args = get_arguments();
env_logger::init();
let seed = args.seed.unwrap_or_else(|| rand::thread_rng().gen());
warn!("seed: {}", seed);
let context_factory = |author, num_nodes| {
let mut context = SimulatedContext::new(author, num_nodes, args.commands_per_epoch);
let config = NodeConfig {
target_commit_interval: args.target_commit_interval,
delta: args.delta,
gamma: args.gamma,
lambda: args.lambda,
};
let mut node = NodeState::make_initial_state(&context, config, NodeTime(0));
block_on(node.save_node(&mut context)).unwrap();
context
};
let delay_distribution = simulator::RandomDelay::new(args.mean, args.variance);
let mut sim = simulator::Simulator::<
NodeState<SimulatedContext>,
SimulatedContext,
DataSyncNotification<SimulatedContext>,
DataSyncRequest,
DataSyncResponse<SimulatedContext>,
>::new(seed, args.nodes, delay_distribution, context_factory);
let contexts = sim.loop_until(
simulator::GlobalTime(args.max_clock),
args.output_data_files,
);
warn!("Commands executed per node: {:#?}", {
let x: Vec<_> = contexts
.iter()
.map(|context| context.committed_history().len())
.collect();
x
});
info!("SMR contexts: {:#?}", contexts);
}