1#![deny(clippy::pedantic)]
2#![allow(clippy::cast_possible_wrap)]
3#![allow(clippy::missing_errors_doc)]
4#![allow(clippy::missing_panics_doc)]
5#![allow(clippy::must_use_candidate)]
6#![allow(clippy::return_self_not_must_use)]
7#![allow(clippy::large_futures)]
8
9use bitcoin::Network;
11use fedimint_core::envs::BitcoinRpcConfig;
12use fedimint_core::util::SafeUrl;
13pub use fedimintd::*;
14
15mod fedimintd;
16
17pub mod envs;
18use crate::envs::{FM_DEFAULT_ESPLORA_API_ENV, FM_PORT_ESPLORA_ENV};
19
20#[allow(clippy::map_unwrap_or)]
21pub fn default_esplora_server(network: Network) -> BitcoinRpcConfig {
22 let url = std::env::var(FM_DEFAULT_ESPLORA_API_ENV)
23 .ok()
24 .map(|s| SafeUrl::parse(&s).expect("Failed to parse default esplora server"))
25 .unwrap_or_else(|| match network {
26 Network::Bitcoin => SafeUrl::parse("https://blockstream.info/api/")
27 .expect("Failed to parse default esplora server"),
28 Network::Testnet => SafeUrl::parse("https://blockstream.info/testnet/api/")
29 .expect("Failed to parse default esplora server"),
30 Network::Regtest => SafeUrl::parse(&format!(
31 "http://127.0.0.1:{}/",
32 std::env::var(FM_PORT_ESPLORA_ENV).unwrap_or(String::from("50002"))
33 ))
34 .expect("Failed to parse default esplora server"),
35 Network::Signet => SafeUrl::parse("https://blockstream.info/signet/api/")
36 .expect("Failed to parse default esplora server"),
37 _ => panic!("Failed to parse default esplora server"),
38 });
39 BitcoinRpcConfig {
40 kind: "esplora".to_string(),
41 url,
42 }
43}