]> Untitled Git - bdk/commitdiff
use electurm-client updated
authorRiccardo Casatta <riccardo@casatta.it>
Tue, 24 Nov 2020 11:16:49 +0000 (12:16 +0100)
committerRiccardo Casatta <riccardo@casatta.it>
Mon, 30 Nov 2020 12:25:23 +0000 (13:25 +0100)
Cargo.toml
examples/repl.rs
src/blockchain/any.rs
src/blockchain/electrum.rs
src/blockchain/utils.rs
testutils/Cargo.toml
testutils/src/lib.rs

index 54b46230ea90916f3f64f515becc8fa291ed8603..2cd3302685c8eb06176df84d1b94fddd29995c41 100644 (file)
@@ -15,7 +15,7 @@ rand = "^0.7"
 
 # Optional dependencies
 sled = { version = "0.34", optional = true }
-electrum-client = { version = "0.3.0-beta.1", optional = true }
+electrum-client = { version = "0.4.0-beta.1", optional = true }
 reqwest = { version = "0.10", optional = true, features = ["json"] }
 futures = { version = "0.3", optional = true }
 clap = { version = "2.33", optional = true }
index 09e75f9e916690195e0fac46defe11cb11ee3a56..ee0c9a45fe27529487768d61bdb893a1611a5807 100644 (file)
@@ -102,6 +102,8 @@ fn main() {
         None => AnyBlockchainConfig::Electrum(ElectrumBlockchainConfig {
             url: matches.value_of("server").unwrap().to_string(),
             socks5: matches.value_of("proxy").map(ToString::to_string),
+            retry: 10,
+            timeout: 10,
         }),
     };
     let wallet = Arc::new(
index 09b7c4b514141f1329791eb5e7ecec97f4d0af74..b3df1705dbc3c3ba1907398d523ec9af0cf81f03 100644 (file)
@@ -40,7 +40,7 @@
 //! # use bdk::Wallet;
 //! # #[cfg(feature = "electrum")]
 //! # {
-//! let electrum_blockchain = ElectrumBlockchain::from(electrum_client::Client::new("...", None)?);
+//! let electrum_blockchain = ElectrumBlockchain::from(electrum_client::Client::new("...")?);
 //! let wallet_electrum: Wallet<AnyBlockchain, _> = Wallet::new(
 //!     "...",
 //!     None,
index a134158c0f277c3659c7452776d26a900d1b865e..e65b53da7069e72e95d2c9ae3a610c0d26c979e1 100644 (file)
@@ -32,7 +32,7 @@
 //!
 //! ```no_run
 //! # use bdk::blockchain::electrum::ElectrumBlockchain;
-//! let client = electrum_client::Client::new("ssl://electrum.blockstream.info:50002", None)?;
+//! let client = electrum_client::Client::new("ssl://electrum.blockstream.info:50002")?;
 //! let blockchain = ElectrumBlockchain::from(client);
 //! # Ok::<(), bdk::Error>(())
 //! ```
@@ -44,7 +44,7 @@ use log::{debug, error, info, trace};
 
 use bitcoin::{BlockHeader, Script, Transaction, Txid};
 
-use electrum_client::{Client, ElectrumApi};
+use electrum_client::{Client, ConfigBuilder, ElectrumApi, Socks5Config};
 
 use self::utils::{ELSGetHistoryRes, ElectrumLikeSync};
 use super::*;
@@ -62,7 +62,7 @@ pub struct ElectrumBlockchain(Client);
 #[cfg(feature = "test-electrum")]
 #[bdk_blockchain_tests(crate)]
 fn local_electrs() -> ElectrumBlockchain {
-    ElectrumBlockchain::from(Client::new(&testutils::get_electrum_url(), None).unwrap())
+    ElectrumBlockchain::from(Client::new(&testutils::get_electrum_url()).unwrap())
 }
 
 impl std::convert::From<Client> for ElectrumBlockchain {
@@ -117,7 +117,7 @@ impl Blockchain for ElectrumBlockchain {
 }
 
 impl ElectrumLikeSync for Client {
-    fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script>>(
+    fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script> + Clone>(
         &self,
         scripts: I,
     ) -> Result<Vec<Vec<ELSGetHistoryRes>>, Error> {
@@ -141,14 +141,14 @@ impl ElectrumLikeSync for Client {
             .map_err(Error::Electrum)
     }
 
-    fn els_batch_transaction_get<'s, I: IntoIterator<Item = &'s Txid>>(
+    fn els_batch_transaction_get<'s, I: IntoIterator<Item = &'s Txid> + Clone>(
         &self,
         txids: I,
     ) -> Result<Vec<Transaction>, Error> {
         self.batch_transaction_get(txids).map_err(Error::Electrum)
     }
 
-    fn els_batch_block_header<I: IntoIterator<Item = u32>>(
+    fn els_batch_block_header<I: IntoIterator<Item = u32> + Clone>(
         &self,
         heights: I,
     ) -> Result<Vec<BlockHeader>, Error> {
@@ -161,15 +161,24 @@ impl ElectrumLikeSync for Client {
 pub struct ElectrumBlockchainConfig {
     pub url: String,
     pub socks5: Option<String>,
+    pub retry: u8,
+    pub timeout: u8,
 }
 
 impl ConfigurableBlockchain for ElectrumBlockchain {
     type Config = ElectrumBlockchainConfig;
 
     fn from_config(config: &Self::Config) -> Result<Self, Error> {
-        Ok(ElectrumBlockchain(Client::new(
+        let socks5 = config.socks5.as_ref().map(Socks5Config::new);
+        let electrum_config = ConfigBuilder::new()
+            .retry(config.retry)
+            .socks5(socks5)?
+            .timeout(config.timeout)?
+            .build();
+
+        Ok(ElectrumBlockchain(Client::from_config(
             config.url.as_str(),
-            config.socks5.as_deref(),
+            electrum_config,
         )?))
     }
 }
index d2e8f9908eb9934668cb8a6ef24af3c5759a58d7..8fb0f342a2e50940ba2652cba347d71782def771 100644 (file)
@@ -47,17 +47,17 @@ pub struct ELSGetHistoryRes {
 /// Implements the synchronization logic for an Electrum-like client.
 #[maybe_async]
 pub trait ElectrumLikeSync {
-    fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script>>(
+    fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script> + Clone>(
         &self,
         scripts: I,
     ) -> Result<Vec<Vec<ELSGetHistoryRes>>, Error>;
 
-    fn els_batch_transaction_get<'s, I: IntoIterator<Item = &'s Txid>>(
+    fn els_batch_transaction_get<'s, I: IntoIterator<Item = &'s Txid> + Clone>(
         &self,
         txids: I,
     ) -> Result<Vec<Transaction>, Error>;
 
-    fn els_batch_block_header<I: IntoIterator<Item = u32>>(
+    fn els_batch_block_header<I: IntoIterator<Item = u32> + Clone>(
         &self,
         heights: I,
     ) -> Result<Vec<BlockHeader>, Error>;
index 77b4e4505eba3930fd15c9accab18a93c3c0e1a7..a70550a1a7a9d7f7399baddd6674f75111163d6f 100644 (file)
@@ -16,4 +16,4 @@ serde_json = "1.0"
 serial_test = "0.4"
 bitcoin = "0.25"
 bitcoincore-rpc = "0.12"
-electrum-client = "0.3.0-beta.1"
+electrum-client = "0.4.0-beta.1"
index 55b526a264e65ffc8bb9aaa8cb08228fea5cb4d9..12de77cf17db137b288e93a9b5ecf15f3b00313d 100644 (file)
@@ -270,7 +270,7 @@ impl TestClient {
     pub fn new() -> Self {
         let url = env::var("MAGICAL_RPC_URL").unwrap_or("127.0.0.1:18443".to_string());
         let client = RpcClient::new(format!("http://{}", url), get_auth()).unwrap();
-        let electrum = ElectrumClient::new(&get_electrum_url(), None).unwrap();
+        let electrum = ElectrumClient::new(&get_electrum_url()).unwrap();
 
         TestClient { client, electrum }
     }