]> Untitled Git - bdk/commitdiff
refactor(wallet)!: remove redundant get_descriptor_for_keychain
authorGiovanni Napoli <giovanni.napoli@aminagroup.com>
Sat, 6 Jul 2024 11:39:49 +0000 (13:39 +0200)
committerGiovanni Napoli <giovanni.napoli@aminagroup.com>
Sat, 6 Jul 2024 11:39:49 +0000 (13:39 +0200)
Simplify Wallet::public_descriptor() and update Wallet internals to use
public_descriptor() instead of get_descriptor_for_keychain().

crates/wallet/src/wallet/export.rs
crates/wallet/src/wallet/mod.rs
crates/wallet/src/wallet/tx_builder.rs
crates/wallet/tests/wallet.rs

index bf86f926a6d7e260e90222a0822574dc4790d4d8..37f7fac0e22505fa08ffbdfd73b42d72295afb3f 100644 (file)
@@ -116,7 +116,7 @@ impl FullyNodedExport {
         include_blockheight: bool,
     ) -> Result<Self, &'static str> {
         let descriptor = wallet
-            .get_descriptor_for_keychain(KeychainKind::External)
+            .public_descriptor(KeychainKind::External)
             .to_string_with_secret(
                 &wallet
                     .get_signers(KeychainKind::External)
@@ -144,7 +144,7 @@ impl FullyNodedExport {
 
         let change_descriptor = {
             let descriptor = wallet
-                .get_descriptor_for_keychain(KeychainKind::Internal)
+                .public_descriptor(KeychainKind::Internal)
                 .to_string_with_secret(
                     &wallet
                         .get_signers(KeychainKind::Internal)
index 23d7eb114d0ecef60a088e351a1dfc2053b6aa8b..d66df797eaf453191254f9adca5f596e705c10e2 100644 (file)
@@ -1595,7 +1595,7 @@ impl Wallet {
                 let weighted_utxo = match txout_index.index_of_spk(&txout.script_pubkey) {
                     Some(&(keychain, derivation_index)) => {
                         let satisfaction_weight = self
-                            .get_descriptor_for_keychain(keychain)
+                            .public_descriptor(keychain)
                             .max_weight_to_satisfy()
                             .unwrap();
                         WeightedUtxo {
@@ -1763,16 +1763,15 @@ impl Wallet {
         )
     }
 
-    /// Return the "public" version of the wallet's descriptor, meaning a new descriptor that has
-    /// the same structure but with every secret key removed
+    /// Returns the descriptor used to create addresses for a particular `keychain`.
+    /// It's the "public" version of the wallet's descriptor, meaning a new descriptor that has
+    /// the same structure but with the all secret keys replaced by their corresponding public key.
     ///
-    /// This can be used to build a watch-only version of a wallet
+    /// This can be used to build a watch-only version of a wallet.
     pub fn public_descriptor(&self, keychain: KeychainKind) -> &ExtendedDescriptor {
         self.indexed_graph
             .index
-            .keychains()
-            .find(|(k, _)| *k == &keychain)
-            .map(|(_, d)| d)
+            .get_descriptor(&keychain)
             .expect("keychain must exist")
     }
 
@@ -1878,11 +1877,6 @@ impl Wallet {
         &self.secp
     }
 
-    /// Returns the descriptor used to create addresses for a particular `keychain`.
-    pub fn get_descriptor_for_keychain(&self, keychain: KeychainKind) -> &ExtendedDescriptor {
-        self.public_descriptor(keychain)
-    }
-
     /// The derivation index of this wallet. It will return `None` if it has not derived any addresses.
     /// Otherwise, it will return the index of the highest address it has derived.
     pub fn derivation_index(&self, keychain: KeychainKind) -> Option<u32> {
@@ -1918,7 +1912,7 @@ impl Wallet {
             .indexed_graph
             .index
             .index_of_spk(&txout.script_pubkey)?;
-        let descriptor = self.get_descriptor_for_keychain(keychain);
+        let descriptor = self.public_descriptor(keychain);
         descriptor.at_derivation_index(child).ok()
     }
 
@@ -1927,7 +1921,7 @@ impl Wallet {
             .map(|utxo| {
                 let keychain = utxo.keychain;
                 (utxo, {
-                    self.get_descriptor_for_keychain(keychain)
+                    self.public_descriptor(keychain)
                         .max_weight_to_satisfy()
                         .unwrap()
                 })
@@ -2140,7 +2134,7 @@ impl Wallet {
             ..psbt::Input::default()
         };
 
-        let desc = self.get_descriptor_for_keychain(keychain);
+        let desc = self.public_descriptor(keychain);
         let derived_descriptor = desc
             .at_derivation_index(child)
             .expect("child can't be hardened");
@@ -2180,7 +2174,7 @@ impl Wallet {
             if let Some(&(keychain, child)) =
                 self.indexed_graph.index.index_of_spk(&out.script_pubkey)
             {
-                let desc = self.get_descriptor_for_keychain(keychain);
+                let desc = self.public_descriptor(keychain);
                 let desc = desc
                     .at_derivation_index(child)
                     .expect("child can't be hardened");
@@ -2200,9 +2194,9 @@ impl Wallet {
 
     /// Return the checksum of the public descriptor associated to `keychain`
     ///
-    /// Internally calls [`Self::get_descriptor_for_keychain`] to fetch the right descriptor
+    /// Internally calls [`Self::public_descriptor`] to fetch the right descriptor
     pub fn descriptor_checksum(&self, keychain: KeychainKind) -> String {
-        self.get_descriptor_for_keychain(keychain)
+        self.public_descriptor(keychain)
             .to_string()
             .split_once('#')
             .unwrap()
index e8d6d3d0cc6499edf5617384b127fce1d7a6536d..0fbb56fff3f97fcf1f9d4296a48d864d5a14cb66 100644 (file)
@@ -296,7 +296,7 @@ impl<'a, Cs> TxBuilder<'a, Cs> {
                 .collect::<Result<Vec<_>, _>>()?;
 
             for utxo in utxos {
-                let descriptor = wallet.get_descriptor_for_keychain(utxo.keychain);
+                let descriptor = wallet.public_descriptor(utxo.keychain);
                 let satisfaction_weight = descriptor.max_weight_to_satisfy().unwrap();
                 self.params.utxos.push(WeightedUtxo {
                     satisfaction_weight,
index ad1db345d1864e321a05273a4fb0e5990ad247ed..7d036db0b7d194a302fccb04fa9ecad94f21ae4f 100644 (file)
@@ -151,7 +151,7 @@ fn load_recovers_wallet() -> anyhow::Result<()> {
             );
             let secp = Secp256k1::new();
             assert_eq!(
-                *wallet.get_descriptor_for_keychain(KeychainKind::External),
+                *wallet.public_descriptor(KeychainKind::External),
                 desc.into_wallet_descriptor(&secp, wallet.network())
                     .unwrap()
                     .0
@@ -1402,7 +1402,7 @@ fn test_add_foreign_utxo() {
         .assume_checked();
     let utxo = wallet2.list_unspent().next().expect("must take!");
     let foreign_utxo_satisfaction = wallet2
-        .get_descriptor_for_keychain(KeychainKind::External)
+        .public_descriptor(KeychainKind::External)
         .max_weight_to_satisfy()
         .unwrap();
 
@@ -1478,7 +1478,7 @@ fn test_calculate_fee_with_missing_foreign_utxo() {
         .assume_checked();
     let utxo = wallet2.list_unspent().next().expect("must take!");
     let foreign_utxo_satisfaction = wallet2
-        .get_descriptor_for_keychain(KeychainKind::External)
+        .public_descriptor(KeychainKind::External)
         .max_weight_to_satisfy()
         .unwrap();
 
@@ -1503,7 +1503,7 @@ fn test_add_foreign_utxo_invalid_psbt_input() {
     let (mut wallet, _) = get_funded_wallet_wpkh();
     let outpoint = wallet.list_unspent().next().expect("must exist").outpoint;
     let foreign_utxo_satisfaction = wallet
-        .get_descriptor_for_keychain(KeychainKind::External)
+        .public_descriptor(KeychainKind::External)
         .max_weight_to_satisfy()
         .unwrap();
 
@@ -1524,7 +1524,7 @@ fn test_add_foreign_utxo_where_outpoint_doesnt_match_psbt_input() {
     let tx2 = wallet2.get_tx(txid2).unwrap().tx_node.tx.clone();
 
     let satisfaction_weight = wallet2
-        .get_descriptor_for_keychain(KeychainKind::External)
+        .public_descriptor(KeychainKind::External)
         .max_weight_to_satisfy()
         .unwrap();
 
@@ -1568,7 +1568,7 @@ fn test_add_foreign_utxo_only_witness_utxo() {
     let utxo2 = wallet2.list_unspent().next().unwrap();
 
     let satisfaction_weight = wallet2
-        .get_descriptor_for_keychain(KeychainKind::External)
+        .public_descriptor(KeychainKind::External)
         .max_weight_to_satisfy()
         .unwrap();
 
@@ -3400,7 +3400,7 @@ fn test_taproot_foreign_utxo() {
     let utxo = wallet2.list_unspent().next().unwrap();
     let psbt_input = wallet2.get_psbt_input(utxo.clone(), None, false).unwrap();
     let foreign_utxo_satisfaction = wallet2
-        .get_descriptor_for_keychain(KeychainKind::External)
+        .public_descriptor(KeychainKind::External)
         .max_weight_to_satisfy()
         .unwrap();