Skip to main content

cdk_mintd/env_vars/
bdk.rs

1//! BDK environment variables
2
3use std::env;
4
5use crate::config::Bdk;
6
7pub const BDK_MNEMONIC_ENV_VAR: &str = "CDK_MINTD_BDK_MNEMONIC";
8pub const BDK_NETWORK_ENV_VAR: &str = "CDK_MINTD_BDK_NETWORK";
9pub const BDK_BITCOIND_RPC_HOST_ENV_VAR: &str = "CDK_MINTD_BDK_BITCOIND_RPC_HOST";
10pub const BDK_BITCOIND_RPC_PORT_ENV_VAR: &str = "CDK_MINTD_BDK_BITCOIND_RPC_PORT";
11pub const BDK_BITCOIND_RPC_USER_ENV_VAR: &str = "CDK_MINTD_BDK_BITCOIND_RPC_USER";
12pub const BDK_BITCOIND_RPC_PASSWORD_ENV_VAR: &str = "CDK_MINTD_BDK_BITCOIND_RPC_PASSWORD";
13pub const BDK_WALLET_RESCAN_FROM_HEIGHT_ENV_VAR: &str = "CDK_MINTD_BDK_WALLET_RESCAN_FROM_HEIGHT";
14pub const BDK_CHAIN_SOURCE_TYPE_ENV_VAR: &str = "CDK_MINTD_BDK_CHAIN_SOURCE_TYPE";
15pub const BDK_ESPLORA_URL_ENV_VAR: &str = "CDK_MINTD_BDK_ESPLORA_URL";
16pub const BDK_ESPLORA_PARALLEL_REQUESTS_ENV_VAR: &str = "CDK_MINTD_BDK_ESPLORA_PARALLEL_REQUESTS";
17pub const BDK_ELECTRUM_URL_ENV_VAR: &str = "CDK_MINTD_BDK_ELECTRUM_URL";
18pub const BDK_ELECTRUM_BATCH_SIZE_ENV_VAR: &str = "CDK_MINTD_BDK_ELECTRUM_BATCH_SIZE";
19pub const BDK_NUM_CONFS_ENV_VAR: &str = "CDK_MINTD_BDK_NUM_CONFS";
20pub const BDK_FEE_PERCENT_ENV_VAR: &str = "CDK_MINTD_BDK_FEE_PERCENT";
21pub const BDK_RESERVE_FEE_MIN_ENV_VAR: &str = "CDK_MINTD_BDK_RESERVE_FEE_MIN";
22pub const BDK_MIN_RECEIVE_AMOUNT_SAT_ENV_VAR: &str = "CDK_MINTD_BDK_MIN_RECEIVE_AMOUNT_SAT";
23pub const BDK_MIN_SEND_AMOUNT_SAT_ENV_VAR: &str = "CDK_MINTD_BDK_MIN_SEND_AMOUNT_SAT";
24pub const BDK_SYNC_INTERVAL_SECS_ENV_VAR: &str = "CDK_MINTD_BDK_SYNC_INTERVAL_SECS";
25pub const BDK_TARGET_BLOCK_TIME_SECS_ENV_VAR: &str = "CDK_MINTD_BDK_TARGET_BLOCK_TIME_SECS";
26pub const BDK_BATCH_POLL_INTERVAL_SECS_ENV_VAR: &str = "CDK_MINTD_BDK_BATCH_POLL_INTERVAL_SECS";
27pub const BDK_BATCH_MAX_BATCH_SIZE_ENV_VAR: &str = "CDK_MINTD_BDK_BATCH_MAX_BATCH_SIZE";
28pub const BDK_BATCH_STANDARD_DEADLINE_SECS_ENV_VAR: &str =
29    "CDK_MINTD_BDK_BATCH_STANDARD_DEADLINE_SECS";
30pub const BDK_BATCH_ECONOMY_DEADLINE_SECS_ENV_VAR: &str =
31    "CDK_MINTD_BDK_BATCH_ECONOMY_DEADLINE_SECS";
32pub const BDK_FEE_OPTIONS_ENV_VAR: &str = "CDK_MINTD_BDK_FEE_OPTIONS";
33pub const BDK_FEE_FALLBACK_SAT_PER_VB_ENV_VAR: &str = "CDK_MINTD_BDK_FEE_FALLBACK_SAT_PER_VB";
34pub const BDK_FEE_CACHE_TTL_SECS_ENV_VAR: &str = "CDK_MINTD_BDK_FEE_CACHE_TTL_SECS";
35pub const BDK_QUOTE_MAX_INPUT_COUNT_ENV_VAR: &str = "CDK_MINTD_BDK_QUOTE_MAX_INPUT_COUNT";
36pub const BDK_QUOTE_FIXED_SAFETY_SAT_ENV_VAR: &str = "CDK_MINTD_BDK_QUOTE_FIXED_SAFETY_SAT";
37pub const BDK_QUOTE_SAFETY_MULTIPLIER_ENV_VAR: &str = "CDK_MINTD_BDK_QUOTE_SAFETY_MULTIPLIER";
38
39impl Bdk {
40    pub fn from_env(mut self) -> Self {
41        if let Ok(mnemonic) = env::var(BDK_MNEMONIC_ENV_VAR) {
42            self.mnemonic = Some(mnemonic);
43        }
44
45        if let Ok(network) = env::var(BDK_NETWORK_ENV_VAR) {
46            self.network = Some(network);
47        }
48
49        if let Ok(bitcoind_rpc_host) = env::var(BDK_BITCOIND_RPC_HOST_ENV_VAR) {
50            self.bitcoind_rpc_host = Some(bitcoind_rpc_host);
51        }
52
53        if let Ok(bitcoind_rpc_port) = env::var(BDK_BITCOIND_RPC_PORT_ENV_VAR) {
54            if let Ok(bitcoind_rpc_port) = bitcoind_rpc_port.parse::<u16>() {
55                self.bitcoind_rpc_port = Some(bitcoind_rpc_port);
56            }
57        }
58
59        if let Ok(bitcoind_rpc_user) = env::var(BDK_BITCOIND_RPC_USER_ENV_VAR) {
60            self.bitcoind_rpc_user = Some(bitcoind_rpc_user);
61        }
62
63        if let Ok(bitcoind_rpc_password) = env::var(BDK_BITCOIND_RPC_PASSWORD_ENV_VAR) {
64            self.bitcoind_rpc_password = Some(bitcoind_rpc_password);
65        }
66
67        if let Ok(wallet_rescan_from_height) = env::var(BDK_WALLET_RESCAN_FROM_HEIGHT_ENV_VAR) {
68            if let Ok(wallet_rescan_from_height) = wallet_rescan_from_height.parse::<u32>() {
69                self.wallet_rescan_from_height = Some(wallet_rescan_from_height);
70            }
71        }
72
73        if let Ok(chain_source_type) = env::var(BDK_CHAIN_SOURCE_TYPE_ENV_VAR) {
74            self.chain_source_type = Some(chain_source_type);
75        }
76
77        if let Ok(esplora_url) = env::var(BDK_ESPLORA_URL_ENV_VAR) {
78            self.esplora_url = Some(esplora_url);
79        }
80
81        if let Ok(esplora_parallel_requests) = env::var(BDK_ESPLORA_PARALLEL_REQUESTS_ENV_VAR) {
82            if let Ok(esplora_parallel_requests) = esplora_parallel_requests.parse::<usize>() {
83                self.esplora_parallel_requests = esplora_parallel_requests;
84            }
85        }
86
87        if let Ok(electrum_url) = env::var(BDK_ELECTRUM_URL_ENV_VAR) {
88            self.electrum_url = Some(electrum_url);
89        }
90
91        if let Ok(electrum_batch_size) = env::var(BDK_ELECTRUM_BATCH_SIZE_ENV_VAR) {
92            if let Ok(electrum_batch_size) = electrum_batch_size.parse::<usize>() {
93                self.electrum_batch_size = electrum_batch_size;
94            }
95        }
96
97        if let Ok(num_confs) = env::var(BDK_NUM_CONFS_ENV_VAR) {
98            if let Ok(num_confs) = num_confs.parse::<u32>() {
99                self.num_confs = num_confs;
100            }
101        }
102
103        if let Ok(fee_percent) = env::var(BDK_FEE_PERCENT_ENV_VAR) {
104            if let Ok(fee_percent) = fee_percent.parse::<f32>() {
105                self.fee_percent = fee_percent;
106            }
107        }
108
109        if let Ok(reserve_fee_min) = env::var(BDK_RESERVE_FEE_MIN_ENV_VAR) {
110            if let Ok(reserve_fee_min) = reserve_fee_min.parse::<u64>() {
111                self.reserve_fee_min = reserve_fee_min.into();
112            }
113        }
114
115        if let Ok(min_receive_amount_sat) = env::var(BDK_MIN_RECEIVE_AMOUNT_SAT_ENV_VAR) {
116            if let Ok(min_receive_amount_sat) = min_receive_amount_sat.parse::<u64>() {
117                self.min_receive_amount_sat = min_receive_amount_sat;
118            }
119        }
120
121        if let Ok(min_send_amount_sat) = env::var(BDK_MIN_SEND_AMOUNT_SAT_ENV_VAR) {
122            if let Ok(min_send_amount_sat) = min_send_amount_sat.parse::<u64>() {
123                self.min_send_amount_sat = min_send_amount_sat;
124            }
125        }
126
127        if let Ok(sync_interval_secs) = env::var(BDK_SYNC_INTERVAL_SECS_ENV_VAR) {
128            if let Ok(sync_interval_secs) = sync_interval_secs.parse::<u64>() {
129                self.sync_interval_secs = sync_interval_secs;
130            }
131        }
132
133        if let Ok(target_block_time_secs) = env::var(BDK_TARGET_BLOCK_TIME_SECS_ENV_VAR) {
134            if let Ok(target_block_time_secs) = target_block_time_secs.parse::<u64>() {
135                self.batch_config.target_block_time_secs = target_block_time_secs;
136            }
137        }
138
139        if let Ok(poll_interval_secs) = env::var(BDK_BATCH_POLL_INTERVAL_SECS_ENV_VAR) {
140            if let Ok(poll_interval_secs) = poll_interval_secs.parse::<u64>() {
141                self.batch_config.poll_interval_secs = poll_interval_secs;
142            }
143        }
144
145        if let Ok(max_batch_size) = env::var(BDK_BATCH_MAX_BATCH_SIZE_ENV_VAR) {
146            if let Ok(max_batch_size) = max_batch_size.parse::<usize>() {
147                self.batch_config.max_batch_size = max_batch_size;
148            }
149        }
150
151        if let Ok(standard_deadline_secs) = env::var(BDK_BATCH_STANDARD_DEADLINE_SECS_ENV_VAR) {
152            if let Ok(standard_deadline_secs) = standard_deadline_secs.parse::<u64>() {
153                self.batch_config.standard_deadline_secs = Some(standard_deadline_secs);
154            }
155        }
156
157        if let Ok(economy_deadline_secs) = env::var(BDK_BATCH_ECONOMY_DEADLINE_SECS_ENV_VAR) {
158            if let Ok(economy_deadline_secs) = economy_deadline_secs.parse::<u64>() {
159                self.batch_config.economy_deadline_secs = Some(economy_deadline_secs);
160            }
161        }
162
163        if let Ok(fee_options) = env::var(BDK_FEE_OPTIONS_ENV_VAR) {
164            self.batch_config.fee_options = fee_options
165                .split(',')
166                .map(|tier| tier.trim().to_string())
167                .collect();
168        }
169
170        if let Ok(fallback_sat_per_vb) = env::var(BDK_FEE_FALLBACK_SAT_PER_VB_ENV_VAR) {
171            if let Ok(fallback_sat_per_vb) = fallback_sat_per_vb.parse::<f64>() {
172                self.batch_config.fee_fallback_sat_per_vb = fallback_sat_per_vb;
173            }
174        }
175
176        if let Ok(cache_ttl_secs) = env::var(BDK_FEE_CACHE_TTL_SECS_ENV_VAR) {
177            if let Ok(cache_ttl_secs) = cache_ttl_secs.parse::<u64>() {
178                self.batch_config.fee_cache_ttl_secs = cache_ttl_secs;
179            }
180        }
181
182        if let Ok(max_input_count) = env::var(BDK_QUOTE_MAX_INPUT_COUNT_ENV_VAR) {
183            if let Ok(max_input_count) = max_input_count.parse::<usize>() {
184                self.batch_config.quote_max_input_count = max_input_count;
185            }
186        }
187
188        if let Ok(fixed_safety_sat) = env::var(BDK_QUOTE_FIXED_SAFETY_SAT_ENV_VAR) {
189            if let Ok(fixed_safety_sat) = fixed_safety_sat.parse::<u64>() {
190                self.batch_config.quote_fixed_safety_sat = fixed_safety_sat;
191            }
192        }
193
194        if let Ok(safety_multiplier) = env::var(BDK_QUOTE_SAFETY_MULTIPLIER_ENV_VAR) {
195            if let Ok(safety_multiplier) = safety_multiplier.parse::<f64>() {
196                self.batch_config.quote_safety_multiplier = safety_multiplier;
197            }
198        }
199
200        self
201    }
202}