From d7c8ab4b6972ec964a17b56b9f3e024a49aebb7a Mon Sep 17 00:00:00 2001 From: cygnet Date: Thu, 6 Nov 2025 16:30:31 +0100 Subject: [PATCH 1/3] Make rayon optional --- Cargo.toml | 2 +- src/client/client.rs | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 757a43a..bedbe57 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" diff --git a/src/client/client.rs b/src/client/client.rs index 0a4c1d0..58f0908 100644 --- a/src/client/client.rs +++ b/src/client/client.rs @@ -108,16 +108,33 @@ 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() + // 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 shared_secrets: Vec = tweak_data_iterator .map(|tweak| sp_utils::receiving::calculate_ecdh_shared_secret(&tweak, b_scan)) .collect(); - let items: Result> = shared_secrets - .into_par_iter() + // parallel iterator using rayon + #[cfg(feature = "rayon")] + let shared_secrets_iterator = shared_secrets.into_par_iter(); + + // regular iterator + #[cfg(not(feature = "rayon"))] + let shared_secrets_iterator = shared_secrets.into_iter(); + + let items: Result> = shared_secrets_iterator .map(|secret| { let spks = self.sp_receiver.get_spks_from_shared_secret(&secret)?; From 9d6fff5a1625db2078dc5e50e2da6bfd92f446a2 Mon Sep 17 00:00:00 2001 From: cygnet Date: Thu, 6 Nov 2025 21:37:28 +0100 Subject: [PATCH 2/3] Combine separate iterations --- src/client/client.rs | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/src/client/client.rs b/src/client/client.rs index 58f0908..0772d60 100644 --- a/src/client/client.rs +++ b/src/client/client.rs @@ -122,20 +122,9 @@ impl SpClient { #[cfg(not(feature = "rayon"))] let tweak_data_iterator = tweak_data_vec.into_iter(); - let shared_secrets: Vec = tweak_data_iterator - .map(|tweak| sp_utils::receiving::calculate_ecdh_shared_secret(&tweak, b_scan)) - .collect(); - - // parallel iterator using rayon - #[cfg(feature = "rayon")] - let shared_secrets_iterator = shared_secrets.into_par_iter(); - - // regular iterator - #[cfg(not(feature = "rayon"))] - let shared_secrets_iterator = shared_secrets.into_iter(); - - let items: Result> = shared_secrets_iterator - .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())) From 199ddbc0978ff06abe722e8e4a9b99725f76b256 Mon Sep 17 00:00:00 2001 From: cygnet Date: Fri, 7 Nov 2025 01:08:54 +0100 Subject: [PATCH 3/3] Set blindbit-backend and rayon as default features --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index bedbe57..1bf7e31 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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"]