diff --git a/src/database/keyvalue.rs b/src/database/keyvalue.rs index 80fdfb31..fb285322 100644 --- a/src/database/keyvalue.rs +++ b/src/database/keyvalue.rs @@ -646,7 +646,7 @@ mod test { assert_eq!(tree.get_last_index(ScriptType::Internal).unwrap(), None); let res = tree.increment_last_index(ScriptType::External).unwrap(); - assert_eq!(res, 1337); + assert_eq!(res, 1338); let res = tree.increment_last_index(ScriptType::Internal).unwrap(); assert_eq!(res, 0); @@ -654,7 +654,7 @@ mod test { tree.get_last_index(ScriptType::External).unwrap(), Some(1338) ); - assert_eq!(tree.get_last_index(ScriptType::Internal).unwrap(), Some(1)); + assert_eq!(tree.get_last_index(ScriptType::Internal).unwrap(), Some(0)); } // TODO: more tests... diff --git a/src/descriptor/extended_key.rs b/src/descriptor/extended_key.rs index 9e6fc10a..71347f16 100644 --- a/src/descriptor/extended_key.rs +++ b/src/descriptor/extended_key.rs @@ -59,6 +59,14 @@ impl DescriptorExtendedKey { let path_as_vec: Vec = path.clone().into(); final_path.extend_from_slice(&path_as_vec); } + let our_path: Vec = self.path_with_index(index).into(); + final_path.extend_from_slice(&our_path); + + final_path.into() + } + + pub fn path_with_index(&self, index: u32) -> DerivationPath { + let mut final_path: Vec = Vec::new(); let our_path: Vec = self.path.clone().into(); final_path.extend_from_slice(&our_path); let other_path: Vec = self.final_index.as_path(index).into(); @@ -67,6 +75,7 @@ impl DescriptorExtendedKey { final_path.into() } + pub fn derive( &self, ctx: &secp256k1::Secp256k1, @@ -81,10 +90,10 @@ impl DescriptorExtendedKey { index: u32, ) -> Result { if let Some(xprv) = self.secret { - let derive_priv = xprv.derive_priv(ctx, &self.full_path(index))?; + let derive_priv = xprv.derive_priv(ctx, &self.path_with_index(index))?; Ok(ExtendedPubKey::from_private(ctx, &derive_priv)) } else { - Ok(self.pubkey.derive_pub(ctx, &self.full_path(index))?) + Ok(self.pubkey.derive_pub(ctx, &self.path_with_index(index))?) } } diff --git a/src/descriptor/mod.rs b/src/descriptor/mod.rs index bca3ddd7..ac241b53 100644 --- a/src/descriptor/mod.rs +++ b/src/descriptor/mod.rs @@ -479,7 +479,7 @@ mod test { .to_string(), "mqwpxxvfv3QbM8PU8uBx2jaNt9btQqvQNx" ); - assert_eq!(desc.get_secret_keys().len(), 1); + assert_eq!(desc.get_secret_keys().into_iter().collect::>().len(), 1); } #[test] @@ -503,7 +503,7 @@ mod test { .to_string(), "mqwpxxvfv3QbM8PU8uBx2jaNt9btQqvQNx" ); - assert_eq!(desc.get_secret_keys().len(), 0); + assert_eq!(desc.get_secret_keys().into_iter().collect::>().len(), 0); } #[test] @@ -527,7 +527,7 @@ mod test { .to_string(), "mhtuS1QaEV4HPcK4bWk4Wvpd64SUjiC5Zt" ); - assert_eq!(desc.get_xprv().len(), 0); + assert_eq!(desc.get_xprv().into_iter().collect::>().len(), 0); } #[test]