From 47cba7a6551709107ac74f9509851e123adfc9c3 Mon Sep 17 00:00:00 2001 From: Marko Bencun Date: Mon, 24 Jun 2024 13:49:57 +0200 Subject: [PATCH 1/2] bip32: add from_32_slice method to DerivationPath ChildNumber has a `From` impl, but converting `&[u32]` to a `DerivationPath` was still difficult. --- bitcoin/src/bip32.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/bitcoin/src/bip32.rs b/bitcoin/src/bip32.rs index 6ace63289..a3667d640 100644 --- a/bitcoin/src/bip32.rs +++ b/bitcoin/src/bip32.rs @@ -453,6 +453,19 @@ impl DerivationPath { /// assert_eq!(path.to_u32_vec(), vec![84 + HARDENED, HARDENED, HARDENED, 0, 1]); /// ``` pub fn to_u32_vec(&self) -> Vec { self.into_iter().map(|&el| el.into()).collect() } + + /// Creates a derivation path from a slice of u32s. + /// ``` + /// use bitcoin::bip32::DerivationPath; + /// + /// const HARDENED: u32 = 0x80000000; + /// let expected = vec![84 + HARDENED, HARDENED, HARDENED, 0, 1]; + /// let path = DerivationPath::from_u32_slice(expected.as_slice()); + /// assert_eq!(path.to_u32_vec(), expected); + /// ``` + pub fn from_u32_slice(numbers: &[u32]) -> Self { + numbers.iter().map(|&n| ChildNumber::from(n)).collect() + } } impl fmt::Display for DerivationPath { From a7731b2f330aef0b4808a39ca46243fd566f2e41 Mon Sep 17 00:00:00 2001 From: Marko Bencun Date: Mon, 24 Jun 2024 16:03:50 +0200 Subject: [PATCH 2/2] api: Run just check-api --- api/bitcoin/all-features.txt | 1 + api/bitcoin/default-features.txt | 1 + api/bitcoin/no-features.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/api/bitcoin/all-features.txt b/api/bitcoin/all-features.txt index 998fb3762..9a9b78083 100644 --- a/api/bitcoin/all-features.txt +++ b/api/bitcoin/all-features.txt @@ -7543,6 +7543,7 @@ pub fn bitcoin::bip32::DerivationPath::from(numbers: &'a [bitcoin::bip32::ChildN pub fn bitcoin::bip32::DerivationPath::from(numbers: alloc::vec::Vec) -> Self pub fn bitcoin::bip32::DerivationPath::from_iter(iter: T) -> Self where T: core::iter::traits::collect::IntoIterator pub fn bitcoin::bip32::DerivationPath::from_str(path: &str) -> core::result::Result +pub fn bitcoin::bip32::DerivationPath::from_u32_slice(numbers: &[u32]) -> Self pub fn bitcoin::bip32::DerivationPath::hardened_children(&self) -> bitcoin::bip32::DerivationPathIterator<'_> pub fn bitcoin::bip32::DerivationPath::hash<__H: core::hash::Hasher>(&self, state: &mut __H) pub fn bitcoin::bip32::DerivationPath::index(&self, index: I) -> &Self::Output diff --git a/api/bitcoin/default-features.txt b/api/bitcoin/default-features.txt index c5831a048..849387a77 100644 --- a/api/bitcoin/default-features.txt +++ b/api/bitcoin/default-features.txt @@ -7196,6 +7196,7 @@ pub fn bitcoin::bip32::DerivationPath::from(numbers: &'a [bitcoin::bip32::ChildN pub fn bitcoin::bip32::DerivationPath::from(numbers: alloc::vec::Vec) -> Self pub fn bitcoin::bip32::DerivationPath::from_iter(iter: T) -> Self where T: core::iter::traits::collect::IntoIterator pub fn bitcoin::bip32::DerivationPath::from_str(path: &str) -> core::result::Result +pub fn bitcoin::bip32::DerivationPath::from_u32_slice(numbers: &[u32]) -> Self pub fn bitcoin::bip32::DerivationPath::hardened_children(&self) -> bitcoin::bip32::DerivationPathIterator<'_> pub fn bitcoin::bip32::DerivationPath::hash<__H: core::hash::Hasher>(&self, state: &mut __H) pub fn bitcoin::bip32::DerivationPath::index(&self, index: I) -> &Self::Output diff --git a/api/bitcoin/no-features.txt b/api/bitcoin/no-features.txt index 09e04724d..e015c7e81 100644 --- a/api/bitcoin/no-features.txt +++ b/api/bitcoin/no-features.txt @@ -6559,6 +6559,7 @@ pub fn bitcoin::bip32::DerivationPath::from(numbers: &'a [bitcoin::bip32::ChildN pub fn bitcoin::bip32::DerivationPath::from(numbers: alloc::vec::Vec) -> Self pub fn bitcoin::bip32::DerivationPath::from_iter(iter: T) -> Self where T: core::iter::traits::collect::IntoIterator pub fn bitcoin::bip32::DerivationPath::from_str(path: &str) -> core::result::Result +pub fn bitcoin::bip32::DerivationPath::from_u32_slice(numbers: &[u32]) -> Self pub fn bitcoin::bip32::DerivationPath::hardened_children(&self) -> bitcoin::bip32::DerivationPathIterator<'_> pub fn bitcoin::bip32::DerivationPath::hash<__H: core::hash::Hasher>(&self, state: &mut __H) pub fn bitcoin::bip32::DerivationPath::index(&self, index: I) -> &Self::Output