diff --git a/api/bitcoin/all-features.txt b/api/bitcoin/all-features.txt index 3c96686aa..42dc57c40 100644 --- a/api/bitcoin/all-features.txt +++ b/api/bitcoin/all-features.txt @@ -7584,6 +7584,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 8b2c5b307..38f161761 100644 --- a/api/bitcoin/default-features.txt +++ b/api/bitcoin/default-features.txt @@ -7237,6 +7237,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 6d9ac2ce7..a2b304b11 100644 --- a/api/bitcoin/no-features.txt +++ b/api/bitcoin/no-features.txt @@ -6596,6 +6596,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/bitcoin/src/bip32.rs b/bitcoin/src/bip32.rs index f8ade73aa..04d45124c 100644 --- a/bitcoin/src/bip32.rs +++ b/bitcoin/src/bip32.rs @@ -452,6 +452,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 {