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
12/// Creates the config gen params for each peer
13///
14/// Uses peers * 2 ports offset from `base_port`
15pub fn local_config_gen_params(
16    peers: &[PeerId],
17    base_port: u16,
18) -> anyhow::Result<HashMap<PeerId, ConfigGenParams>> {
19    // Generate TLS cert and private key
20    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    // Generate the P2P and API URL on 2 different ports for each peer
31    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}