]> Untitled Git - bdk/commitdiff
deps(esplora): bump `esplora-client` to 0.11.0
authorvalued mammal <valuedmammal@protonmail.com>
Sat, 23 Nov 2024 21:47:23 +0000 (16:47 -0500)
committervalued mammal <valuedmammal@protonmail.com>
Wed, 4 Dec 2024 19:24:10 +0000 (14:24 -0500)
crates/esplora/Cargo.toml
crates/esplora/src/async_ext.rs
example-crates/example_wallet_esplora_async/Cargo.toml

index 3ebbd59c09370c3eaf52c7c4226fd9e2e98fb964..71ea4e8ed9bd5537f2267eb4d4425f550c581b8d 100644 (file)
@@ -16,12 +16,13 @@ workspace = true
 
 [dependencies]
 bdk_core = { path = "../core", version = "0.3.0", default-features = false }
-esplora-client = { version = "0.10.0", default-features = false }
+esplora-client = { version = "0.11.0", default-features = false } 
 async-trait = { version = "0.1.66", optional = true }
 futures = { version = "0.3.26", optional = true }
 miniscript = { version = "12.0.0", optional = true, default-features = false }
 
 [dev-dependencies]
+esplora-client = { version = "0.11.0" } 
 bdk_chain = { path = "../chain" }
 bdk_testenv = { path = "../testenv" }
 tokio = { version = "1", features = ["rt", "rt-multi-thread", "macros"] }
@@ -29,6 +30,7 @@ tokio = { version = "1", features = ["rt", "rt-multi-thread", "macros"] }
 [features]
 default = ["std", "async-https", "blocking-https"]
 std = ["bdk_chain/std", "miniscript?/std"]
+tokio = ["esplora-client/tokio"]
 async = ["async-trait", "futures", "esplora-client/async"]
 async-https = ["async", "esplora-client/async-https"]
 async-https-rustls = ["async", "esplora-client/async-https-rustls"]
index b9b7fa5670716add1e8324d02b17b0a5862a4f9c..4c1bd0ad791b93c05f736edd54e7692dedfcd28a 100644 (file)
@@ -5,6 +5,7 @@ use bdk_core::{
     bitcoin::{BlockHash, OutPoint, ScriptBuf, Txid},
     BlockId, CheckPoint, ConfirmationBlockTime, Indexed, TxUpdate,
 };
+use esplora_client::Sleeper;
 use futures::{stream::FuturesOrdered, TryStreamExt};
 
 use crate::{insert_anchor_from_status, insert_prevouts};
@@ -50,7 +51,11 @@ pub trait EsploraAsyncExt {
 
 #[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
 #[cfg_attr(not(target_arch = "wasm32"), async_trait)]
-impl EsploraAsyncExt for esplora_client::AsyncClient {
+impl<S> EsploraAsyncExt for esplora_client::AsyncClient<S>
+where
+    S: Sleeper + Clone + Send + Sync,
+    S::Sleep: Send,
+{
     async fn full_scan<K: Ord + Clone + Send, R: Into<FullScanRequest<K>> + Send>(
         &self,
         request: R,
@@ -165,8 +170,8 @@ impl EsploraAsyncExt for esplora_client::AsyncClient {
 /// block-based chain-sources). Therefore it's better to be conservative when setting the tip (use
 /// an earlier tip rather than a later tip) otherwise the caller may accidentally skip blocks when
 /// alternating between chain-sources.
-async fn fetch_latest_blocks(
-    client: &esplora_client::AsyncClient,
+async fn fetch_latest_blocks<S: Sleeper>(
+    client: &esplora_client::AsyncClient<S>,
 ) -> Result<BTreeMap<u32, BlockHash>, Error> {
     Ok(client
         .get_blocks(None)
@@ -179,8 +184,8 @@ async fn fetch_latest_blocks(
 /// Used instead of [`esplora_client::BlockingClient::get_block_hash`].
 ///
 /// This first checks the previously fetched `latest_blocks` before fetching from Esplora again.
-async fn fetch_block(
-    client: &esplora_client::AsyncClient,
+async fn fetch_block<S: Sleeper>(
+    client: &esplora_client::AsyncClient<S>,
     latest_blocks: &BTreeMap<u32, BlockHash>,
     height: u32,
 ) -> Result<Option<BlockHash>, Error> {
@@ -205,8 +210,8 @@ async fn fetch_block(
 ///
 /// We want to have a corresponding checkpoint per anchor height. However, checkpoints fetched
 /// should not surpass `latest_blocks`.
-async fn chain_update(
-    client: &esplora_client::AsyncClient,
+async fn chain_update<S: Sleeper>(
+    client: &esplora_client::AsyncClient<S>,
     latest_blocks: &BTreeMap<u32, BlockHash>,
     local_tip: &CheckPoint,
     anchors: &BTreeSet<(ConfirmationBlockTime, Txid)>,
@@ -271,13 +276,17 @@ async fn chain_update(
 /// script pubkey that contains a non-empty transaction history.
 ///
 /// Refer to [crate-level docs](crate) for more.
-async fn fetch_txs_with_keychain_spks<I: Iterator<Item = Indexed<ScriptBuf>> + Send>(
-    client: &esplora_client::AsyncClient,
+async fn fetch_txs_with_keychain_spks<I, S>(
+    client: &esplora_client::AsyncClient<S>,
     inserted_txs: &mut HashSet<Txid>,
     mut keychain_spks: I,
     stop_gap: usize,
     parallel_requests: usize,
-) -> Result<(TxUpdate<ConfirmationBlockTime>, Option<u32>), Error> {
+) -> Result<(TxUpdate<ConfirmationBlockTime>, Option<u32>), Error>
+where
+    I: Iterator<Item = Indexed<ScriptBuf>> + Send,
+    S: Sleeper + Clone + Send + Sync,
+{
     type TxsOfSpkIndex = (u32, Vec<esplora_client::Tx>);
 
     let mut update = TxUpdate::<ConfirmationBlockTime>::default();
@@ -346,14 +355,16 @@ async fn fetch_txs_with_keychain_spks<I: Iterator<Item = Indexed<ScriptBuf>> + S
 /// HTTP requests to make in parallel.
 ///
 /// Refer to [crate-level docs](crate) for more.
-async fn fetch_txs_with_spks<I: IntoIterator<Item = ScriptBuf> + Send>(
-    client: &esplora_client::AsyncClient,
+async fn fetch_txs_with_spks<I, S>(
+    client: &esplora_client::AsyncClient<S>,
     inserted_txs: &mut HashSet<Txid>,
     spks: I,
     parallel_requests: usize,
 ) -> Result<TxUpdate<ConfirmationBlockTime>, Error>
 where
+    I: IntoIterator<Item = ScriptBuf> + Send,
     I::IntoIter: Send,
+    S: Sleeper + Clone + Send + Sync,
 {
     fetch_txs_with_keychain_spks(
         client,
@@ -372,14 +383,16 @@ where
 /// `parallel_requests` specifies the maximum number of HTTP requests to make in parallel.
 ///
 /// Refer to [crate-level docs](crate) for more.
-async fn fetch_txs_with_txids<I: IntoIterator<Item = Txid> + Send>(
-    client: &esplora_client::AsyncClient,
+async fn fetch_txs_with_txids<I, S>(
+    client: &esplora_client::AsyncClient<S>,
     inserted_txs: &mut HashSet<Txid>,
     txids: I,
     parallel_requests: usize,
 ) -> Result<TxUpdate<ConfirmationBlockTime>, Error>
 where
+    I: IntoIterator<Item = Txid> + Send,
     I::IntoIter: Send,
+    S: Sleeper + Clone + Send + Sync,
 {
     let mut update = TxUpdate::<ConfirmationBlockTime>::default();
     // Only fetch for non-inserted txs.
@@ -421,14 +434,16 @@ where
 /// `parallel_requests` specifies the maximum number of HTTP requests to make in parallel.
 ///
 /// Refer to [crate-level docs](crate) for more.
-async fn fetch_txs_with_outpoints<I: IntoIterator<Item = OutPoint> + Send>(
-    client: &esplora_client::AsyncClient,
+async fn fetch_txs_with_outpoints<I, S>(
+    client: &esplora_client::AsyncClient<S>,
     inserted_txs: &mut HashSet<Txid>,
     outpoints: I,
     parallel_requests: usize,
 ) -> Result<TxUpdate<ConfirmationBlockTime>, Error>
 where
+    I: IntoIterator<Item = OutPoint> + Send,
     I::IntoIter: Send,
+    S: Sleeper + Clone + Send + Sync,
 {
     let outpoints = outpoints.into_iter().collect::<Vec<_>>();
     let mut update = TxUpdate::<ConfirmationBlockTime>::default();
index 2121b72e97bb6eaf53b083e9232d7d5c41cd8fc2..38458b78250a1d08cbf4d579402a294ec59252db 100644 (file)
@@ -7,6 +7,6 @@ edition = "2021"
 
 [dependencies]
 bdk_wallet = { path = "../../crates/wallet", features = ["rusqlite"] }
-bdk_esplora = { path = "../../crates/esplora", features = ["async-https"] }
+bdk_esplora = { path = "../../crates/esplora", features = ["async-https", "tokio"] }
 tokio = { version = "1", features = ["rt", "rt-multi-thread", "macros"] }
 anyhow = "1"