--- /dev/null
+use std::env;
+
+fn main() {
+ let electrum = env::var_os("CARGO_FEATURE_ELECTRUM").map(|_| "electrum".to_string());
+ let esplora = env::var_os("CARGO_FEATURE_ESPLORA").map(|_| "esplora".to_string());
+ let compact_filters = env::var_os("CARGO_FEATURE_COMPACT_FILTERS").map(|_| "compact_filters".to_string());
+
+ let blockchain_features : Vec<String> = vec!(electrum, esplora, compact_filters)
+ .iter()
+ .map(|f| f.to_owned())
+ .flatten()
+ .collect();
+
+ if blockchain_features.len() > 1 {
+ panic!("At most one blockchain client feature can be enabled but these features were enabled: {:?}", blockchain_features)
+ }
+}
where
D: BatchDatabase,
{
- #[cfg(all(
- feature = "electrum",
- any(feature = "esplora", feature = "compact_filters")
- ))]
- compile_error!("Only one blockchain client feature can be enabled at a time.");
-
#[cfg(feature = "electrum")]
let config = AnyBlockchainConfig::Electrum(ElectrumBlockchainConfig {
url: wallet_opts.electrum_opts.electrum.clone(),
timeout: wallet_opts.electrum_opts.timeout,
});
- #[cfg(all(
- feature = "esplora",
- any(feature = "electrum", feature = "compact_filters")
- ))]
- compile_error!("Only one blockchain client feature can be enabled at a time.");
-
#[cfg(feature = "esplora")]
let config = AnyBlockchainConfig::Esplora(EsploraBlockchainConfig {
base_url: wallet_opts.esplora_opts.server.clone(),
concurrency: Some(wallet_opts.esplora_opts.concurrency),
});
- #[cfg(all(
- feature = "compact_filters",
- any(feature = "electrum", feature = "esplora")
- ))]
- compile_error!("Only one blockchain client feature can be enabled at a time.");
-
#[cfg(feature = "compact_filters")]
let config = {
let mut peers = vec![];
use structopt::StructOpt;
use crate::OfflineWalletSubCommand::*;
+#[cfg(any(feature = "electrum", feature = "esplora", feature = "compact_filters"))]
use crate::OnlineWalletSubCommand::*;
use bdk::bitcoin::consensus::encode::{deserialize, serialize, serialize_hex};
+#[cfg(any(feature = "electrum", feature = "esplora", feature = "compact_filters"))]
use bdk::bitcoin::hashes::hex::FromHex;
use bdk::bitcoin::secp256k1::Secp256k1;
use bdk::bitcoin::util::bip32::{DerivationPath, ExtendedPrivKey, KeySource};
use bdk::bitcoin::util::psbt::PartiallySignedTransaction;
use bdk::bitcoin::{Address, Network, OutPoint, Script, Txid};
+#[cfg(any(feature = "electrum", feature = "esplora", feature = "compact_filters"))]
use bdk::blockchain::{log_progress, Blockchain};
use bdk::database::BatchDatabase;
use bdk::descriptor::Segwitv0;
)]
#[derive(Debug, StructOpt, Clone, PartialEq)]
#[structopt(rename_all = "snake")]
+#[cfg(any(feature = "electrum", feature = "esplora", feature = "compact_filters"))]
pub enum OnlineWalletSubCommand {
/// Syncs with the chosen blockchain server
Sync {
///
/// Online wallet sub-commands are described in [`OnlineWalletSubCommand`]. See [`crate`] for
/// example usage.
+#[cfg(any(feature = "electrum", feature = "esplora", feature = "compact_filters"))]
#[maybe_async]
pub fn handle_online_wallet_subcommand<C, D>(
wallet: &Wallet<C, D>,