Skip to content

Commit 6b287df

Browse files
committed
f Switch to rustls, retry failed request once
1 parent f38e031 commit 6b287df

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ lightning-transaction-sync = { version = "0.0.114", features = ["esplora-async"]
4141
#lightning-rapid-gossip-sync = { path = "../rust-lightning/lightning-rapid-gossip-sync" }
4242
#lightning-transaction-sync = { path = "../rust-lightning/lightning-transaction-sync", features = ["esplora-async"] }
4343

44-
bdk = { version = "0.27.1", default-features = false, features = ["async-interface", "use-esplora-async", "key-value-db", "reqwest-default-tls"]}
44+
bdk = { version = "0.27.1", default-features = false, features = ["async-interface", "use-esplora-async", "key-value-db"]}
45+
reqwest = { version = "0.11", default-features = false, features = ["json", "rustls-tls"] }
4546
bitcoin = "0.29.2"
4647

4748
rand = "0.8.5"

src/wallet.rs

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use bitcoin::{Script, Transaction, TxOut};
2626

2727
use std::collections::HashMap;
2828
use std::sync::{Arc, Condvar, Mutex, RwLock};
29+
use std::time::Duration;
2930

3031
pub struct Wallet<D>
3132
where
@@ -79,12 +80,34 @@ where
7980
}
8081

8182
let sync_options = SyncOptions { progress: None };
82-
let res = match self.inner.lock().unwrap().sync(&self.blockchain, sync_options).await {
83+
let wallet_lock = self.inner.lock().unwrap();
84+
let res = match wallet_lock.sync(&self.blockchain, sync_options).await {
8385
Ok(()) => Ok(()),
84-
Err(e) => {
85-
log_error!(self.logger, "Wallet sync error: {}", e);
86-
Err(From::from(e))
87-
}
86+
Err(e) => match e {
87+
bdk::Error::Esplora(ref be) => match **be {
88+
bdk::blockchain::esplora::EsploraError::Reqwest(_) => {
89+
tokio::time::sleep(Duration::from_secs(1)).await;
90+
log_error!(
91+
self.logger,
92+
"Sync failed due to HTTP connection error, retrying: {}",
93+
e
94+
);
95+
let sync_options = SyncOptions { progress: None };
96+
wallet_lock
97+
.sync(&self.blockchain, sync_options)
98+
.await
99+
.map_err(|e| From::from(e))
100+
}
101+
_ => {
102+
log_error!(self.logger, "Sync failed due to Esplora error: {}", e);
103+
Err(From::from(e))
104+
}
105+
},
106+
_ => {
107+
log_error!(self.logger, "Wallet sync error: {}", e);
108+
Err(From::from(e))
109+
}
110+
},
88111
};
89112

90113
drop(guard);

0 commit comments

Comments
 (0)