From 606a0d62163ac7a20dcef7c4145380b363f2cef2 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 26 Feb 2021 09:07:42 +0000 Subject: [PATCH] Publish autogenerated nightly docs --- .../bdk/descriptor/error/enum.Error.html | 24 ++++---- .../latest/bdk/descriptor/error/index.html | 2 +- .../nightly/latest/bdk/descriptor/index.html | 2 +- .../descriptor/policy/enum.PolicyError.html | 2 +- .../bdk/descriptor/trait.ExtractPolicy.html | 4 +- .../latest/bdk/keys/enum.KeyError.html | 2 +- .../bdk/nightly/latest/search-index.js | 2 +- .../latest/src/bdk/descriptor/error.rs.html | 4 ++ .../latest/src/bdk/descriptor/mod.rs.html | 56 ++++++++++++++++++- 9 files changed, 79 insertions(+), 19 deletions(-) diff --git a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html index 7d10dc76e9..9b5802b617 100644 --- a/static/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html +++ b/static/docs-rs/bdk/nightly/latest/bdk/descriptor/error/enum.Error.html @@ -1,10 +1,11 @@ bdk::descriptor::error::Error - Rust -

Enum bdk::descriptor::error::Error[][src]

pub enum Error {
+

Enum bdk::descriptor::error::Error[][src]

pub enum Error {
     InvalidHDKeyPath,
     InvalidDescriptorChecksum,
     HardenedDerivationXpub,
+    DuplicatedKeys,
     Key(KeyError),
     Policy(PolicyError),
     InvalidDescriptorCharacter(char),
@@ -19,6 +20,7 @@
 
InvalidHDKeyPath

Invalid HD Key path, such as having a wildcard but a length != 1

InvalidDescriptorChecksum

The provided descriptor doesn’t match its checksum

HardenedDerivationXpub

The descriptor contains hardened derivation steps on public extended keys

+
DuplicatedKeys

The descriptor contains multiple keys with the same BIP32 fingerprint

Error thrown while working with keys

Policy(PolicyError)

Error while extracting and manipulating policies

InvalidDescriptorCharacter(char)

Invalid character found in the descriptor checksum

@@ -28,19 +30,19 @@
Miniscript(Error)

Miniscript error

Hex(Error)

Hex decoding error

Trait Implementations

impl Debug for Error[src]

impl Display for Error[src]

impl Error for Error[src]

impl Display for Error[src]

impl Error for Error[src]

impl From<Error> for Error[src]

impl From<Error> for Error[src]

impl From<Error> for Error[src]

impl From<Error> for Error[src]

impl From<Error> for Error[src]

impl From<Error> for Error[src]

impl From<KeyError> for Error[src]

impl From<PolicyError> for Error[src]

impl From<Error> for Error[src]

impl From<Error> for Error[src]

impl From<Error> for Error[src]

impl From<Error> for Error[src]

impl From<Error> for Error[src]

impl From<KeyError> for Error[src]

impl From<PolicyError> for Error[src]

Auto Trait Implementations

impl RefUnwindSafe for Error

impl Send for Error

impl Sync for Error

impl Unpin for Error

impl UnwindSafe for Error

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl From<PolicyError> for Error[src]

impl From<PolicyError> for Error[src]

impl From<PolicyError> for Error[src]

impl PartialEq<PolicyError> for PolicyError[src]

impl From<Error> for KeyError[src]

impl From<Error> for KeyError[src]

impl From<KeyError> for Error[src]

impl From<KeyError> for Error[src]

impl From<KeyError> for Error[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

 // Magical Bitcoin Library
 // Written in 2020 by
@@ -117,6 +119,8 @@
     InvalidDescriptorChecksum,
     /// The descriptor contains hardened derivation steps on public extended keys
     HardenedDerivationXpub,
+    /// The descriptor contains multiple keys with the same BIP32 fingerprint
+    DuplicatedKeys,
 
     /// Error thrown while working with [`keys`](crate::keys)
     Key(crate::keys::KeyError),
diff --git a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html
index a9028ad1af..c3d46a1f46 100644
--- a/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html
+++ b/static/docs-rs/bdk/nightly/latest/src/bdk/descriptor/mod.rs.html
@@ -788,6 +788,33 @@
 785
 786
 787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
 
 // Magical Bitcoin Library
 // Written in 2020 by
@@ -818,7 +845,7 @@
 //! This module contains generic utilities to work with descriptors, plus some re-exported types
 //! from [`miniscript`].
 
-use std::collections::{BTreeMap, HashMap};
+use std::collections::{BTreeMap, HashMap, HashSet};
 use std::ops::Deref;
 
 use bitcoin::util::bip32::{
@@ -1016,6 +1043,24 @@
         return Err(DescriptorError::HardenedDerivationXpub);
     }
 
+    // Ensure that there are no duplicated keys
+    let mut found_keys = HashSet::new();
+    let descriptor_contains_duplicated_keys = descriptor.for_any_key(|k| {
+        if let DescriptorPublicKey::XPub(xkey) = k.as_key() {
+            let fingerprint = xkey.root_fingerprint(secp);
+            if found_keys.contains(&fingerprint) {
+                return true;
+            }
+
+            found_keys.insert(fingerprint);
+        }
+
+        false
+    });
+    if descriptor_contains_duplicated_keys {
+        return Err(DescriptorError::DuplicatedKeys);
+    }
+
     Ok((descriptor, keymap))
 }
 
@@ -1574,6 +1619,15 @@
             result.unwrap_err(),
             DescriptorError::HardenedDerivationXpub
         ));
+
+        let descriptor = "wsh(multi(2,tpubD6NzVbkrYhZ4XHndKkuB8FifXm8r5FQHwrN6oZuWCz13qb93rtgKvD4PQsqC4HP4yhV3tA2fqr2RbY5mNXfM7RxXUoeABoDtsFUq2zJq6YK/0/*,tpubD6NzVbkrYhZ4XHndKkuB8FifXm8r5FQHwrN6oZuWCz13qb93rtgKvD4PQsqC4HP4yhV3tA2fqr2RbY5mNXfM7RxXUoeABoDtsFUq2zJq6YK/1/*))";
+        let result = into_wallet_descriptor_checked(descriptor, &secp, Network::Testnet);
+
+        assert!(result.is_err());
+        assert!(matches!(
+            result.unwrap_err(),
+            DescriptorError::DuplicatedKeys
+        ));
     }
 }
 
-- 2.49.0