fedimint_testing_core/
config.rs
1use std::collections::{BTreeMap, HashMap};
2use std::sync::LazyLock;
3
4use fedimint_core::PeerId;
5use fedimint_core::module::ApiAuth;
6use fedimint_server::config::{ConfigGenParams, PeerEndpoints, PeerSetupCode};
7use fedimint_server::net::p2p_connector::gen_cert_and_key;
8use tokio_rustls::rustls;
9
10pub static API_AUTH: LazyLock<ApiAuth> = LazyLock::new(|| ApiAuth("pass".to_string()));
11
12pub fn local_config_gen_params(
16 peers: &[PeerId],
17 base_port: u16,
18) -> anyhow::Result<HashMap<PeerId, ConfigGenParams>> {
19 let tls_keys: HashMap<PeerId, (rustls::Certificate, rustls::PrivateKey)> = peers
21 .iter()
22 .map(|peer| {
23 (
24 *peer,
25 gen_cert_and_key(&format!("peer-{}", peer.to_usize())).unwrap(),
26 )
27 })
28 .collect();
29
30 let connections: BTreeMap<PeerId, PeerSetupCode> = peers
32 .iter()
33 .map(|peer| {
34 let peer_port = base_port + u16::from(*peer) * 3;
35
36 let p2p_url = format!("fedimint://127.0.0.1:{peer_port}");
37 let api_url = format!("ws://127.0.0.1:{}", peer_port + 1);
38
39 let params = PeerSetupCode {
40 name: format!("peer-{}", peer.to_usize()),
41 endpoints: PeerEndpoints::Tcp {
42 api_url: api_url.parse().expect("Should parse"),
43 p2p_url: p2p_url.parse().expect("Should parse"),
44 cert: tls_keys[peer].0.clone().0,
45 },
46 federation_name: None,
47 };
48 (*peer, params)
49 })
50 .collect();
51
52 peers
53 .iter()
54 .map(|peer| {
55 let params = ConfigGenParams {
56 identity: *peer,
57 api_auth: API_AUTH.clone(),
58 tls_key: Some(tls_keys[peer].1.clone()),
59 iroh_api_sk: None,
60 iroh_p2p_sk: None,
61 peers: connections.clone(),
62 meta: BTreeMap::new(),
63 };
64 Ok((*peer, params))
65 })
66 .collect()
67}