better derivation path building

This commit is contained in:
davemo88 2021-03-11 21:35:16 -05:00
parent 396ffb42f9
commit 201bd6ee02
No known key found for this signature in database
GPG Key ID: 2DE8C063FF02FB83

View File

@ -223,15 +223,21 @@ impl Signer for DescriptorXKey<ExtendedPrivKey> {
}; };
let derived_key = match self.origin.clone() { let derived_key = match self.origin.clone() {
Some((_fingerprint, path)) => { Some((_fingerprint, origin_path)) => {
let split_origin_path: Vec<&ChildNumber> = path.into_iter().collect(); let deriv_path = DerivationPath::from(
let mut deriv_path = DerivationPath::default(); full_path
for (i, child) in full_path.into_iter().cloned().enumerate() { .into_iter()
match split_origin_path.get(i) { .enumerate()
Some(_) => continue, .filter_map(|(i, child)| {
None => deriv_path = deriv_path.extend(&[child]), if i >= origin_path.len() {
} Some(child)
} } else {
None
}
})
.cloned()
.collect::<Vec<ChildNumber>>(),
);
self.xkey.derive_priv(&secp, &deriv_path).unwrap() self.xkey.derive_priv(&secp, &deriv_path).unwrap()
} }
None => self.xkey.derive_priv(&secp, &full_path).unwrap(), None => self.xkey.derive_priv(&secp, &full_path).unwrap(),