devimint/federation/
config.rs

1use bitcoincore_rpc::bitcoin::Network;
2use fedimint_core::config::{EmptyGenParams, ServerModuleConfigGenParamsRegistry};
3use fedimint_core::default_esplora_server;
4use fedimint_core::envs::{BitcoinRpcConfig, FM_USE_UNKNOWN_MODULE_ENV, is_env_var_set};
5use fedimint_ln_server::LightningInit;
6use fedimint_ln_server::common::config::{
7    LightningGenParams, LightningGenParamsConsensus, LightningGenParamsLocal,
8};
9use fedimint_meta_server::{MetaGenParams, MetaInit};
10use fedimint_mint_server::MintInit;
11use fedimint_mint_server::common::config::{MintGenParams, MintGenParamsConsensus};
12use fedimint_server::core::ServerModuleInit as _;
13use fedimint_unknown_server::UnknownInit;
14use fedimint_unknown_server::common::config::UnknownGenParams;
15use fedimint_wallet_client::config::{
16    WalletGenParams, WalletGenParamsConsensus, WalletGenParamsLocal,
17};
18use fedimint_wallet_server::WalletInit;
19use fedimintd::envs::{FM_DISABLE_META_MODULE_ENV, FM_PORT_ESPLORA_ENV};
20
21use crate::util::supports_lnv2;
22
23/// Duplicate default fedimint module setup
24pub fn attach_default_module_init_params(
25    bitcoin_rpc: &BitcoinRpcConfig,
26    module_init_params: &mut ServerModuleConfigGenParamsRegistry,
27    network: Network,
28    finality_delay: u32,
29) {
30    module_init_params.attach_config_gen_params(
31        LightningInit::kind(),
32        LightningGenParams {
33            local: LightningGenParamsLocal {
34                bitcoin_rpc: bitcoin_rpc.clone(),
35            },
36            consensus: LightningGenParamsConsensus { network },
37        },
38    );
39
40    module_init_params.attach_config_gen_params(
41        MintInit::kind(),
42        MintGenParams {
43            local: EmptyGenParams::default(),
44            consensus: MintGenParamsConsensus::new(
45                2,
46                fedimint_mint_common::config::FeeConsensus::zero(),
47            ),
48        },
49    );
50
51    module_init_params.attach_config_gen_params(
52        WalletInit::kind(),
53        WalletGenParams {
54            local: WalletGenParamsLocal {
55                bitcoin_rpc: bitcoin_rpc.clone(),
56            },
57            consensus: WalletGenParamsConsensus {
58                network,
59                finality_delay,
60                client_default_bitcoin_rpc: default_esplora_server(
61                    network,
62                    std::env::var(FM_PORT_ESPLORA_ENV).ok(),
63                ),
64                fee_consensus: fedimint_wallet_client::config::FeeConsensus::default(),
65            },
66        },
67    );
68
69    if supports_lnv2() {
70        module_init_params.attach_config_gen_params(
71            fedimint_lnv2_server::LightningInit::kind(),
72            fedimint_lnv2_common::config::LightningGenParams {
73                local: fedimint_lnv2_common::config::LightningGenParamsLocal {
74                    bitcoin_rpc: bitcoin_rpc.clone(),
75                },
76                consensus: fedimint_lnv2_common::config::LightningGenParamsConsensus {
77                    fee_consensus: fedimint_lnv2_common::config::FeeConsensus::new(1000)
78                        .expect("Relative fee is within range"),
79                    network,
80                },
81            },
82        );
83    }
84
85    if !is_env_var_set(FM_DISABLE_META_MODULE_ENV) {
86        module_init_params.attach_config_gen_params(MetaInit::kind(), MetaGenParams::default());
87    }
88
89    if is_env_var_set(FM_USE_UNKNOWN_MODULE_ENV) {
90        module_init_params
91            .attach_config_gen_params(UnknownInit::kind(), UnknownGenParams::default());
92    }
93}