]> Untitled Git - bdk/commitdiff
feat(wallet): Add infallible Wallet get_address(), get_internal_address functions
authorSteve Myers <steve@notmandatory.org>
Thu, 16 Nov 2023 17:18:11 +0000 (11:18 -0600)
committerSteve Myers <steve@notmandatory.org>
Thu, 16 Nov 2023 17:18:11 +0000 (11:18 -0600)
refactor!(wallet)!: rename fallible Wallet try_get_address(), try_get_internal_address functions

crates/bdk/src/wallet/mod.rs
example-crates/wallet_electrum/src/main.rs
example-crates/wallet_esplora_async/src/main.rs
example-crates/wallet_esplora_blocking/src/main.rs

index 005d75f9e79a12b914db9baac91d1d5f0e2b6047..240cc10508c10428a683d1aff42bfe124367802b 100644 (file)
@@ -259,6 +259,29 @@ impl Wallet {
     }
 }
 
+impl<D> Wallet<D>
+where
+    D: PersistBackend<ChangeSet, WriteError = core::convert::Infallible>,
+{
+    /// Infallibly return a derived address using the external descriptor, see [`AddressIndex`] for
+    /// available address index selection strategies. If none of the keys in the descriptor are derivable
+    /// (i.e. does not end with /*) then the same address will always be returned for any [`AddressIndex`].
+    pub fn get_address(&mut self, address_index: AddressIndex) -> AddressInfo {
+        self.try_get_address(address_index).unwrap()
+    }
+
+    /// Infallibly return a derived address using the internal (change) descriptor.
+    ///
+    /// If the wallet doesn't have an internal descriptor it will use the external descriptor.
+    ///
+    /// see [`AddressIndex`] for available address index selection strategies. If none of the keys
+    /// in the descriptor are derivable (i.e. does not end with /*) then the same address will always
+    /// be returned for any [`AddressIndex`].
+    pub fn get_internal_address(&mut self, address_index: AddressIndex) -> AddressInfo {
+        self.try_get_internal_address(address_index).unwrap()
+    }
+}
+
 /// The error type when constructing a fresh [`Wallet`].
 ///
 /// Methods [`new`] and [`new_with_genesis_hash`] may return this error.
@@ -611,27 +634,37 @@ impl<D> Wallet<D> {
     /// Return a derived address using the external descriptor, see [`AddressIndex`] for
     /// available address index selection strategies. If none of the keys in the descriptor are derivable
     /// (i.e. does not end with /*) then the same address will always be returned for any [`AddressIndex`].
-    pub fn get_address(&mut self, address_index: AddressIndex) -> AddressInfo
+    ///
+    /// A `PersistBackend<ChangeSet>::WriteError` will result if unable to persist the new address
+    /// to the `PersistBackend`.
+    pub fn try_get_address(
+        &mut self,
+        address_index: AddressIndex,
+    ) -> Result<AddressInfo, D::WriteError>
     where
         D: PersistBackend<ChangeSet>,
     {
         self._get_address(KeychainKind::External, address_index)
-            .expect("persistence backend must not fail")
     }
 
     /// Return a derived address using the internal (change) descriptor.
     ///
     /// If the wallet doesn't have an internal descriptor it will use the external descriptor.
     ///
+    /// A `PersistBackend<ChangeSet>::WriteError` will result if unable to persist the new address
+    /// to the `PersistBackend`.
+    ///
     /// see [`AddressIndex`] for available address index selection strategies. If none of the keys
     /// in the descriptor are derivable (i.e. does not end with /*) then the same address will always
     /// be returned for any [`AddressIndex`].
-    pub fn get_internal_address(&mut self, address_index: AddressIndex) -> AddressInfo
+    pub fn try_get_internal_address(
+        &mut self,
+        address_index: AddressIndex,
+    ) -> Result<AddressInfo, D::WriteError>
     where
         D: PersistBackend<ChangeSet>,
     {
         self._get_address(KeychainKind::Internal, address_index)
-            .expect("persistence backend must not fail")
     }
 
     /// Return a derived address using the specified `keychain` (external/internal).
index 6f9d93ea248d86311e49ecf693bd88599db9f5d0..9d4c6c5a4f27759ce4a6a90f485849fa2792ba81 100644 (file)
@@ -29,7 +29,7 @@ fn main() -> Result<(), anyhow::Error> {
         Network::Testnet,
     )?;
 
-    let address = wallet.get_address(bdk::wallet::AddressIndex::New);
+    let address = wallet.try_get_address(bdk::wallet::AddressIndex::New)?;
     println!("Generated Address: {}", address);
 
     let balance = wallet.get_balance();
index c438505c0961975a5c467867f6e5d44cffa271f9..fb8f7b5105a9568232ff80155c2c02776872eac2 100644 (file)
@@ -27,7 +27,7 @@ async fn main() -> Result<(), anyhow::Error> {
         Network::Testnet,
     )?;
 
-    let address = wallet.get_address(AddressIndex::New);
+    let address = wallet.try_get_address(AddressIndex::New)?;
     println!("Generated Address: {}", address);
 
     let balance = wallet.get_balance();
index b0c0a9382ea3fd764fe350a037ccd211abecd9cf..09e7c3ad4abea9f96e65c7a5209354486c33679f 100644 (file)
@@ -26,7 +26,7 @@ fn main() -> Result<(), anyhow::Error> {
         Network::Testnet,
     )?;
 
-    let address = wallet.get_address(AddressIndex::New);
+    let address = wallet.try_get_address(AddressIndex::New)?;
     println!("Generated Address: {}", address);
 
     let balance = wallet.get_balance();