]> Untitled Git - bdk/commitdiff
fix(wallet): fix building change signers in `load_with_params`
authorvalued mammal <valuedmammal@protonmail.com>
Tue, 22 Oct 2024 13:12:32 +0000 (09:12 -0400)
committervalued mammal <valuedmammal@protonmail.com>
Mon, 28 Oct 2024 12:52:09 +0000 (08:52 -0400)
This fixes an issue that prevented change signers from being built
when using the `keymap` method on `LoadParams`. Now we always
build a `SignersContainer` with the internal keymap whenever a
change descriptor is loaded, although the signer may still be
empty if neither `keymap` nor `extract_keys` is used.

crates/wallet/src/wallet/mod.rs

index 562e684c1994773eeb3d636739c63b54d91574ec..58b504dc9d9d24093f0e93d792816d67457d5d5d 100644 (file)
@@ -551,7 +551,9 @@ impl Wallet {
         }
         let signers = Arc::new(SignersContainer::build(external_keymap, &descriptor, &secp));
 
-        let (mut change_descriptor, mut change_signers) = (None, Arc::new(SignersContainer::new()));
+        let mut change_descriptor = None;
+        let mut internal_keymap = params.change_descriptor_keymap;
+
         match (changeset.change_descriptor, params.check_change_descriptor) {
             // empty signer
             (None, None) => {}
@@ -592,17 +594,23 @@ impl Wallet {
                             expected: Some(exp_desc),
                         }));
                     }
-                    let mut internal_keymap = params.change_descriptor_keymap;
                     if params.extract_keys {
                         internal_keymap.extend(keymap);
                     }
-                    change_signers =
-                        Arc::new(SignersContainer::build(internal_keymap, &desc, &secp));
                     change_descriptor = Some(desc);
                 }
             },
         }
 
+        let change_signers = match change_descriptor {
+            Some(ref change_descriptor) => Arc::new(SignersContainer::build(
+                internal_keymap,
+                change_descriptor,
+                &secp,
+            )),
+            None => Arc::new(SignersContainer::new()),
+        };
+
         let index = create_indexer(descriptor, change_descriptor, params.lookahead)
             .map_err(LoadError::Descriptor)?;