diff --git a/crates/esplora/src/async_ext.rs b/crates/esplora/src/async_ext.rs index 7796050f..fe5a82dc 100644 --- a/crates/esplora/src/async_ext.rs +++ b/crates/esplora/src/async_ext.rs @@ -12,7 +12,9 @@ use futures::stream::{FuturesOrdered, TryStreamExt}; use crate::map_confirmation_time; -#[async_trait(?Send)] +#[cfg(feature = "async")] +#[cfg_attr(target_arch = "wasm32", async_trait(?Send))] +#[cfg_attr(not(target_arch = "wasm32"), async_trait)] pub trait EsploraAsyncExt { /// Scan the blockchain (via esplora) for the data specified and returns a [`KeychainScan`]. /// @@ -28,12 +30,15 @@ pub trait EsploraAsyncExt { /// /// [`ChainPosition`]: bdk_chain::sparse_chain::ChainPosition #[allow(clippy::result_large_err)] // FIXME - async fn scan( + async fn scan( &self, local_chain: &BTreeMap, - keychain_spks: BTreeMap>, - txids: impl IntoIterator, - outpoints: impl IntoIterator, + keychain_spks: BTreeMap< + K, + impl IntoIterator + Send> + Send, + >, + txids: impl IntoIterator + Send> + Send, + outpoints: impl IntoIterator + Send> + Send, stop_gap: usize, parallel_requests: usize, ) -> Result, Error>; @@ -45,9 +50,9 @@ pub trait EsploraAsyncExt { async fn scan_without_keychain( &self, local_chain: &BTreeMap, - misc_spks: impl IntoIterator, - txids: impl IntoIterator, - outpoints: impl IntoIterator, + misc_spks: impl IntoIterator + Send> + Send, + txids: impl IntoIterator + Send> + Send, + outpoints: impl IntoIterator + Send> + Send, parallel_requests: usize, ) -> Result, Error> { let wallet_scan = self @@ -72,17 +77,25 @@ pub trait EsploraAsyncExt { } } -#[async_trait(?Send)] +#[cfg(feature = "async")] +#[cfg_attr(target_arch = "wasm32", async_trait(?Send))] +#[cfg_attr(not(target_arch = "wasm32"), async_trait)] impl EsploraAsyncExt for esplora_client::AsyncClient { - async fn scan( + #[allow(clippy::result_large_err)] // FIXME + async fn scan( &self, local_chain: &BTreeMap, - keychain_spks: BTreeMap>, - txids: impl IntoIterator, - outpoints: impl IntoIterator, + keychain_spks: BTreeMap< + K, + impl IntoIterator + Send> + Send, + >, + txids: impl IntoIterator + Send> + Send, + outpoints: impl IntoIterator + Send> + Send, stop_gap: usize, parallel_requests: usize, ) -> Result, Error> { + let txids = txids.into_iter(); + let outpoints = outpoints.into_iter(); let parallel_requests = parallel_requests.max(1); let mut scan = KeychainScan::default(); let update = &mut scan.update; @@ -204,7 +217,7 @@ impl EsploraAsyncExt for esplora_client::AsyncClient { } } - for txid in txids.into_iter() { + for txid in txids { let (tx, tx_status) = match (self.get_tx(&txid).await?, self.get_tx_status(&txid).await?) { (Some(tx), Some(tx_status)) => (tx, tx_status), @@ -227,7 +240,7 @@ impl EsploraAsyncExt for esplora_client::AsyncClient { } } - for op in outpoints.into_iter() { + for op in outpoints { let mut op_txs = Vec::with_capacity(2); if let (Some(tx), Some(tx_status)) = ( self.get_tx(&op.txid).await?,