diff --git a/Cargo.toml b/Cargo.toml index 757a43a..1bf7e31 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ anyhow = "1.0" serde = { version = "1.0.188", features = ["derive"] } serde_json = "1.0.107" bitcoin = { version = "0.31.1", features = ["serde", "rand", "base64"] } -rayon = "1.10.0" +rayon = { version = "1.10.0", optional = true } futures = "0.3" log = "0.4" async-trait = "0.1" @@ -22,4 +22,5 @@ hex = { version = "0.4.3", features = ["serde"], optional = true } bdk_coin_select = "0.4.0" [features] +default = ["blindbit-backend", "rayon"] blindbit-backend = ["reqwest", "hex"] diff --git a/src/client/client.rs b/src/client/client.rs index 0a4c1d0..0772d60 100644 --- a/src/client/client.rs +++ b/src/client/client.rs @@ -108,17 +108,23 @@ impl SpClient { &self, tweak_data_vec: Vec, ) -> Result> { + // if using rayon feature, import the preludes + #[cfg(feature = "rayon")] use rayon::prelude::*; + let b_scan = &self.get_scan_key(); - let shared_secrets: Vec = tweak_data_vec - .into_par_iter() - .map(|tweak| sp_utils::receiving::calculate_ecdh_shared_secret(&tweak, b_scan)) - .collect(); + // parallel iterator using rayon + #[cfg(feature = "rayon")] + let tweak_data_iterator = tweak_data_vec.into_par_iter(); + + // regular iterator + #[cfg(not(feature = "rayon"))] + let tweak_data_iterator = tweak_data_vec.into_iter(); - let items: Result> = shared_secrets - .into_par_iter() - .map(|secret| { + let items: Result> = tweak_data_iterator + .map(|tweak| { + let secret = sp_utils::receiving::calculate_ecdh_shared_secret(&tweak, b_scan); let spks = self.sp_receiver.get_spks_from_shared_secret(&secret)?; Ok((secret, spks.into_values()))