]> Untitled Git - bdk/commitdiff
[wallet] Cleanup, remove unnecessary mutable references
authorAlekos Filini <alekos.filini@gmail.com>
Thu, 6 Aug 2020 08:44:40 +0000 (10:44 +0200)
committerAlekos Filini <alekos.filini@gmail.com>
Thu, 6 Aug 2020 12:28:12 +0000 (14:28 +0200)
src/blockchain/electrum.rs
src/blockchain/esplora.rs
src/blockchain/mod.rs
src/blockchain/utils.rs
src/wallet/mod.rs

index 8225f554e655f4842517e3ae9e81f39b0768dcfa..d0bc9710248f6233a244572f401cf37b86fde85c 100644 (file)
@@ -38,41 +38,41 @@ impl OnlineBlockchain for ElectrumBlockchain {
     }
 
     fn setup<D: BatchDatabase + DatabaseUtils, P: Progress>(
-        &mut self,
+        &self,
         stop_gap: Option<usize>,
         database: &mut D,
         progress_update: P,
     ) -> Result<(), Error> {
         self.0
-            .as_mut()
+            .as_ref()
             .ok_or(Error::OfflineClient)?
             .electrum_like_setup(stop_gap, database, progress_update)
     }
 
-    fn get_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
+    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
         Ok(self
             .0
-            .as_mut()
+            .as_ref()
             .ok_or(Error::OfflineClient)?
             .transaction_get(txid)
             .map(Option::Some)?)
     }
 
-    fn broadcast(&mut self, tx: &Transaction) -> Result<(), Error> {
+    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
         Ok(self
             .0
-            .as_mut()
+            .as_ref()
             .ok_or(Error::OfflineClient)?
             .transaction_broadcast(tx)
             .map(|_| ())?)
     }
 
-    fn get_height(&mut self) -> Result<usize, Error> {
+    fn get_height(&self) -> Result<usize, Error> {
         // TODO: unsubscribe when added to the client, or is there a better call to use here?
 
         Ok(self
             .0
-            .as_mut()
+            .as_ref()
             .ok_or(Error::OfflineClient)?
             .block_headers_subscribe()
             .map(|data| data.height)?)
@@ -81,7 +81,7 @@ impl OnlineBlockchain for ElectrumBlockchain {
 
 impl ElectrumLikeSync for Client {
     fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script>>(
-        &mut self,
+        &self,
         scripts: I,
     ) -> Result<Vec<Vec<ELSGetHistoryRes>>, Error> {
         self.batch_script_get_history(scripts)
@@ -105,7 +105,7 @@ impl ElectrumLikeSync for Client {
     }
 
     fn els_batch_script_list_unspent<'s, I: IntoIterator<Item = &'s Script>>(
-        &mut self,
+        &self,
         scripts: I,
     ) -> Result<Vec<Vec<ELSListUnspentRes>>, Error> {
         self.batch_script_list_unspent(scripts)
@@ -132,7 +132,7 @@ impl ElectrumLikeSync for Client {
             .map_err(Error::Electrum)
     }
 
-    fn els_transaction_get(&mut self, txid: &Txid) -> Result<Transaction, Error> {
+    fn els_transaction_get(&self, txid: &Txid) -> Result<Transaction, Error> {
         self.transaction_get(txid).map_err(Error::Electrum)
     }
 }
index 6ba6a59617d9b924257a8f535969025b7981628e..f49fdcfd4160f74b29d682406c47a0f6c2d53f64 100644 (file)
@@ -64,38 +64,38 @@ impl OnlineBlockchain for EsploraBlockchain {
     }
 
     fn setup<D: BatchDatabase + DatabaseUtils, P: Progress>(
-        &mut self,
+        &self,
         stop_gap: Option<usize>,
         database: &mut D,
         progress_update: P,
     ) -> Result<(), Error> {
         maybe_await!(self
             .0
-            .as_mut()
+            .as_ref()
             .ok_or(Error::OfflineClient)?
             .electrum_like_setup(stop_gap, database, progress_update))
     }
 
-    fn get_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error> {
+    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error> {
         Ok(await_or_block!(self
             .0
-            .as_mut()
+            .as_ref()
             .ok_or(Error::OfflineClient)?
             ._get_tx(txid))?)
     }
 
-    fn broadcast(&mut self, tx: &Transaction) -> Result<(), Error> {
+    fn broadcast(&self, tx: &Transaction) -> Result<(), Error> {
         Ok(await_or_block!(self
             .0
-            .as_mut()
+            .as_ref()
             .ok_or(Error::OfflineClient)?
             ._broadcast(tx))?)
     }
 
-    fn get_height(&mut self) -> Result<usize, Error> {
+    fn get_height(&self) -> Result<usize, Error> {
         Ok(await_or_block!(self
             .0
-            .as_mut()
+            .as_ref()
             .ok_or(Error::OfflineClient)?
             ._get_height())?)
     }
@@ -237,7 +237,7 @@ impl UrlClient {
 #[maybe_async]
 impl ElectrumLikeSync for UrlClient {
     fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script>>(
-        &mut self,
+        &self,
         scripts: I,
     ) -> Result<Vec<Vec<ELSGetHistoryRes>>, Error> {
         let future = async {
@@ -251,7 +251,7 @@ impl ElectrumLikeSync for UrlClient {
     }
 
     fn els_batch_script_list_unspent<'s, I: IntoIterator<Item = &'s Script>>(
-        &mut self,
+        &self,
         scripts: I,
     ) -> Result<Vec<Vec<ELSListUnspentRes>>, Error> {
         let future = async {
@@ -264,7 +264,7 @@ impl ElectrumLikeSync for UrlClient {
         await_or_block!(future)
     }
 
-    fn els_transaction_get(&mut self, txid: &Txid) -> Result<Transaction, Error> {
+    fn els_transaction_get(&self, txid: &Txid) -> Result<Transaction, Error> {
         Ok(await_or_block!(self._get_tx(txid))?
             .ok_or_else(|| EsploraError::TransactionNotFound(*txid))?)
     }
index 2a25051545da3e48b41050d01851fa49c274ff49..2c7081ac9586c5a691ee4152a17076099148944d 100644 (file)
@@ -46,13 +46,13 @@ pub trait OnlineBlockchain: Blockchain {
     fn get_capabilities(&self) -> HashSet<Capability>;
 
     fn setup<D: BatchDatabase + DatabaseUtils, P: Progress>(
-        &mut self,
+        &self,
         stop_gap: Option<usize>,
         database: &mut D,
         progress_update: P,
     ) -> Result<(), Error>;
     fn sync<D: BatchDatabase + DatabaseUtils, P: Progress>(
-        &mut self,
+        &self,
         stop_gap: Option<usize>,
         database: &mut D,
         progress_update: P,
@@ -60,10 +60,10 @@ pub trait OnlineBlockchain: Blockchain {
         maybe_await!(self.setup(stop_gap, database, progress_update))
     }
 
-    fn get_tx(&mut self, txid: &Txid) -> Result<Option<Transaction>, Error>;
-    fn broadcast(&mut self, tx: &Transaction) -> Result<(), Error>;
+    fn get_tx(&self, txid: &Txid) -> Result<Option<Transaction>, Error>;
+    fn broadcast(&self, tx: &Transaction) -> Result<(), Error>;
 
-    fn get_height(&mut self) -> Result<usize, Error>;
+    fn get_height(&self) -> Result<usize, Error>;
 }
 
 pub type ProgressData = (f32, Option<String>);
index 76bc5e70bdc3535a862c0e01f65680a8065a503e..f45ec03789cbec8d6e2d522c07deb6e1213d8136 100644 (file)
@@ -30,21 +30,21 @@ pub struct ELSListUnspentRes {
 #[maybe_async]
 pub trait ElectrumLikeSync {
     fn els_batch_script_get_history<'s, I: IntoIterator<Item = &'s Script>>(
-        &mut self,
+        &self,
         scripts: I,
     ) -> Result<Vec<Vec<ELSGetHistoryRes>>, Error>;
 
     fn els_batch_script_list_unspent<'s, I: IntoIterator<Item = &'s Script>>(
-        &mut self,
+        &self,
         scripts: I,
     ) -> Result<Vec<Vec<ELSListUnspentRes>>, Error>;
 
-    fn els_transaction_get(&mut self, txid: &Txid) -> Result<Transaction, Error>;
+    fn els_transaction_get(&self, txid: &Txid) -> Result<Transaction, Error>;
 
     // Provided methods down here...
 
     fn electrum_like_setup<D: BatchDatabase + DatabaseUtils, P: Progress>(
-        &mut self,
+        &self,
         stop_gap: Option<usize>,
         database: &mut D,
         _progress_update: P,
@@ -173,7 +173,7 @@ pub trait ElectrumLikeSync {
     }
 
     fn check_tx_and_descendant<D: DatabaseUtils + BatchDatabase>(
-        &mut self,
+        &self,
         database: &mut D,
         txid: &Txid,
         height: Option<u32>,
@@ -268,7 +268,7 @@ pub trait ElectrumLikeSync {
     }
 
     fn check_history<D: DatabaseUtils + BatchDatabase>(
-        &mut self,
+        &self,
         database: &mut D,
         script_pubkey: Script,
         txs: Vec<ELSGetHistoryRes>,
index c3c92d363ca997a41e7c4398108ead8806aa2ba2..018c215f69bd1b7efdc4d0a818344344602d218b 100644 (file)
@@ -37,7 +37,7 @@ pub struct Wallet<B: Blockchain, D: BatchDatabase> {
 
     current_height: Option<u32>,
 
-    client: RefCell<B>,
+    client: B,
     database: RefCell<D>,
 }
 
@@ -82,7 +82,7 @@ where
 
             current_height: None,
 
-            client: RefCell::new(B::offline()),
+            client: B::offline(),
             database: RefCell::new(database),
         })
     }
@@ -714,43 +714,15 @@ where
         descriptor: &str,
         change_descriptor: Option<&str>,
         network: Network,
-        mut database: D,
-        mut client: B,
+        database: D,
+        client: B,
     ) -> Result<Self, Error> {
-        database.check_descriptor_checksum(
-            ScriptType::External,
-            get_checksum(descriptor)?.as_bytes(),
-        )?;
-        let descriptor = ExtendedDescriptor::from_str(descriptor)?;
-        let change_descriptor = match change_descriptor {
-            Some(desc) => {
-                database.check_descriptor_checksum(
-                    ScriptType::Internal,
-                    get_checksum(desc)?.as_bytes(),
-                )?;
-
-                let parsed = ExtendedDescriptor::from_str(desc)?;
-                if !parsed.same_structure(descriptor.as_ref()) {
-                    return Err(Error::DifferentDescriptorStructure);
-                }
-
-                Some(parsed)
-            }
-            None => None,
-        };
+        let mut wallet = Self::new_offline(descriptor, change_descriptor, network, database)?;
 
-        let current_height = Some(maybe_await!(client.get_height())? as u32);
+        wallet.current_height = Some(maybe_await!(client.get_height())? as u32);
+        wallet.client = client;
 
-        Ok(Wallet {
-            descriptor,
-            change_descriptor,
-            network,
-
-            current_height,
-
-            client: RefCell::new(client),
-            database: RefCell::new(database),
-        })
+        Ok(wallet)
     }
 
     #[maybe_async]
@@ -813,7 +785,7 @@ where
             self.database.borrow_mut().commit_batch(address_batch)?;
         }
 
-        maybe_await!(self.client.borrow_mut().sync(
+        maybe_await!(self.client.sync(
             None,
             self.database.borrow_mut().deref_mut(),
             noop_progress(),
@@ -822,7 +794,7 @@ where
 
     #[maybe_async]
     pub fn broadcast(&self, tx: Transaction) -> Result<Txid, Error> {
-        maybe_await!(self.client.borrow_mut().broadcast(&tx))?;
+        maybe_await!(self.client.broadcast(&tx))?;
 
         Ok(tx.txid())
     }