fedimint_testing_core/
config.rs1use 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
13pub fn local_config_gen_params(
17 peers: &[PeerId],
18 base_port: u16,
19 enable_mint_fees: bool,
20) -> anyhow::Result<HashMap<PeerId, ConfigGenParams>> {
21 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 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}