fedimint_testing_core/
config.rs

1use std::collections::{BTreeMap, HashMap};
2use std::sync::{Arc, LazyLock};
3
4use fedimint_core::PeerId;
5use fedimint_core::module::ApiAuth;
6use fedimint_core::setup_code::{PeerEndpoints, PeerSetupCode};
7use fedimint_server::config::ConfigGenParams;
8use fedimint_server::net::p2p_connector::gen_cert_and_key;
9use tokio_rustls::rustls;
10
11pub static API_AUTH: LazyLock<ApiAuth> = LazyLock::new(|| ApiAuth("pass".to_string()));
12
13/// Creates the config gen params for each peer
14///
15/// Uses peers * 2 ports offset from `base_port`
16pub fn local_config_gen_params(
17    peers: &[PeerId],
18    base_port: u16,
19    enable_mint_fees: bool,
20) -> anyhow::Result<HashMap<PeerId, ConfigGenParams>> {
21    // Generate TLS cert and private key
22    let tls_keys: HashMap<
23        PeerId,
24        (
25            rustls::pki_types::CertificateDer<'static>,
26            Arc<rustls::pki_types::PrivateKeyDer<'static>>,
27        ),
28    > = peers
29        .iter()
30        .map(|peer| {
31            (
32                *peer,
33                gen_cert_and_key(&format!("peer-{}", peer.to_usize())).unwrap(),
34            )
35        })
36        .collect();
37
38    // Generate the P2P and API URL on 2 different ports for each peer
39    let connections: BTreeMap<PeerId, PeerSetupCode> = peers
40        .iter()
41        .map(|peer| {
42            let peer_port = base_port + u16::from(*peer) * 3;
43
44            let p2p_url = format!("fedimint://127.0.0.1:{peer_port}");
45            let api_url = format!("ws://127.0.0.1:{}", peer_port + 1);
46
47            let params = PeerSetupCode {
48                name: format!("peer-{}", peer.to_usize()),
49                endpoints: PeerEndpoints::Tcp {
50                    api_url: api_url.parse().expect("Should parse"),
51                    p2p_url: p2p_url.parse().expect("Should parse"),
52                    cert: tls_keys[peer].0.as_ref().to_vec(),
53                },
54                federation_name: None,
55                disable_base_fees: Some(!enable_mint_fees),
56            };
57            (*peer, params)
58        })
59        .collect();
60
61    peers
62        .iter()
63        .map(|peer| {
64            let params = ConfigGenParams {
65                identity: *peer,
66                api_auth: API_AUTH.clone(),
67                tls_key: Some(tls_keys[peer].1.clone()),
68                iroh_api_sk: None,
69                iroh_p2p_sk: None,
70                peers: connections.clone(),
71                meta: BTreeMap::new(),
72                disable_base_fees: !enable_mint_fees,
73            };
74            Ok((*peer, params))
75        })
76        .collect()
77}