From 517fb53760626ada00551716fd35dbd84ed6d48e Mon Sep 17 00:00:00 2001 From: valued mammal Date: Tue, 22 Oct 2024 09:12:32 -0400 Subject: [PATCH] fix(wallet): fix building change signers in `load_with_params` 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 | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/crates/wallet/src/wallet/mod.rs b/crates/wallet/src/wallet/mod.rs index 562e684c..58b504dc 100644 --- a/crates/wallet/src/wallet/mod.rs +++ b/crates/wallet/src/wallet/mod.rs @@ -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)?; -- 2.49.0