]> Untitled Git - bdk/commitdiff
[keys] Replace `(Fingerprint, DerivationPath)` with `KeySource`
authorAlekos Filini <alekos.filini@gmail.com>
Fri, 11 Dec 2020 10:14:30 +0000 (11:14 +0100)
committerAlekos Filini <alekos.filini@gmail.com>
Fri, 11 Dec 2020 10:16:41 +0000 (11:16 +0100)
src/descriptor/mod.rs
src/keys/bip39.rs
src/keys/mod.rs

index 38cc8d8e589f9cc8099a302ee10d8cf8b8a661d5..1fad0bae353c9d0d5045fe8c874636679e8b0ead 100644 (file)
@@ -31,7 +31,7 @@ use std::collections::{BTreeMap, HashMap};
 use std::fmt;
 
 use bitcoin::secp256k1::Secp256k1;
-use bitcoin::util::bip32::{ChildNumber, DerivationPath, ExtendedPubKey, Fingerprint};
+use bitcoin::util::bip32::{ChildNumber, DerivationPath, ExtendedPubKey, Fingerprint, KeySource};
 use bitcoin::util::psbt;
 use bitcoin::{Network, PublicKey, Script, TxOut};
 
@@ -65,7 +65,7 @@ pub type ExtendedDescriptor = Descriptor<DescriptorPublicKey>;
 ///
 /// [`psbt::Input`]: bitcoin::util::psbt::Input
 /// [`psbt::Output`]: bitcoin::util::psbt::Output
-pub type HDKeyPaths = BTreeMap<PublicKey, (Fingerprint, DerivationPath)>;
+pub type HDKeyPaths = BTreeMap<PublicKey, KeySource>;
 
 #[allow(missing_docs)] // TODO add missing docs and remove this allow
 /// Trait for types which can be converted into an [`ExtendedDescriptor`] and a [`KeyMap`] usable by a wallet in a specific [`Network`]
index b7f7765e47fa6cc7c57ada76e094fc317e4d80ae..b3223740bcda699a178d1c820d134a167babb287 100644 (file)
@@ -43,7 +43,7 @@ pub type MnemonicWithPassphrase = (Mnemonic, Option<String>);
 impl<Ctx: ScriptContext> DerivableKey<Ctx> for Seed {
     fn add_metadata(
         self,
-        source: Option<(bip32::Fingerprint, bip32::DerivationPath)>,
+        source: Option<bip32::KeySource>,
         derivation_path: bip32::DerivationPath,
     ) -> Result<DescriptorKey<Ctx>, KeyError> {
         let xprv = bip32::ExtendedPrivKey::new_master(Network::Bitcoin, &self.as_bytes())?;
@@ -60,7 +60,7 @@ impl<Ctx: ScriptContext> DerivableKey<Ctx> for Seed {
 impl<Ctx: ScriptContext> DerivableKey<Ctx> for MnemonicWithPassphrase {
     fn add_metadata(
         self,
-        source: Option<(bip32::Fingerprint, bip32::DerivationPath)>,
+        source: Option<bip32::KeySource>,
         derivation_path: bip32::DerivationPath,
     ) -> Result<DescriptorKey<Ctx>, KeyError> {
         let (mnemonic, passphrase) = self;
@@ -73,7 +73,7 @@ impl<Ctx: ScriptContext> DerivableKey<Ctx> for MnemonicWithPassphrase {
 impl<Ctx: ScriptContext> DerivableKey<Ctx> for Mnemonic {
     fn add_metadata(
         self,
-        source: Option<(bip32::Fingerprint, bip32::DerivationPath)>,
+        source: Option<bip32::KeySource>,
         derivation_path: bip32::DerivationPath,
     ) -> Result<DescriptorKey<Ctx>, KeyError> {
         (self, None).add_metadata(source, derivation_path)
index f8e36aaddc4519d61b2f84484f981436886005c2..807bbe641f2bbc1668f13d01b80ac795e9d0a1a4 100644 (file)
@@ -296,7 +296,7 @@ pub trait ToDescriptorKey<Ctx: ScriptContext>: Sized {
 /// When extra metadata are provided, a [`DerivableKey`] can be transofrmed into a
 /// [`DescriptorKey`]: the trait [`ToDescriptorKey`] is automatically implemented
 /// for `(DerivableKey, DerivationPath)` and
-/// `(DerivableKey, (Fingerprint, DerivationPath), DerivationPath)` tuples.
+/// `(DerivableKey, KeySource, DerivationPath)` tuples.
 ///
 /// For key types that don't encode any indication about the path to use (like bip39), it's
 /// generally recommended to implemented this trait instead of [`ToDescriptorKey`]. The same
@@ -307,7 +307,7 @@ pub trait DerivableKey<Ctx: ScriptContext> {
     /// Add a extra metadata, consume `self` and turn it into a [`DescriptorKey`]
     fn add_metadata(
         self,
-        origin: Option<(bip32::Fingerprint, bip32::DerivationPath)>,
+        origin: Option<bip32::KeySource>,
         derivation_path: bip32::DerivationPath,
     ) -> Result<DescriptorKey<Ctx>, KeyError>;
 }
@@ -315,7 +315,7 @@ pub trait DerivableKey<Ctx: ScriptContext> {
 impl<Ctx: ScriptContext> DerivableKey<Ctx> for bip32::ExtendedPubKey {
     fn add_metadata(
         self,
-        origin: Option<(bip32::Fingerprint, bip32::DerivationPath)>,
+        origin: Option<bip32::KeySource>,
         derivation_path: bip32::DerivationPath,
     ) -> Result<DescriptorKey<Ctx>, KeyError> {
         DescriptorPublicKey::XPub(DescriptorXKey {
@@ -331,7 +331,7 @@ impl<Ctx: ScriptContext> DerivableKey<Ctx> for bip32::ExtendedPubKey {
 impl<Ctx: ScriptContext> DerivableKey<Ctx> for bip32::ExtendedPrivKey {
     fn add_metadata(
         self,
-        origin: Option<(bip32::Fingerprint, bip32::DerivationPath)>,
+        origin: Option<bip32::KeySource>,
         derivation_path: bip32::DerivationPath,
     ) -> Result<DescriptorKey<Ctx>, KeyError> {
         DescriptorSecretKey::XPrv(DescriptorXKey {
@@ -383,7 +383,7 @@ where
 {
     fn add_metadata(
         self,
-        origin: Option<(bip32::Fingerprint, bip32::DerivationPath)>,
+        origin: Option<bip32::KeySource>,
         derivation_path: bip32::DerivationPath,
     ) -> Result<DescriptorKey<Ctx>, KeyError> {
         let descriptor_key = self.key.add_metadata(origin, derivation_path)?;
@@ -528,11 +528,7 @@ impl<Ctx: ScriptContext, T: DerivableKey<Ctx>> ToDescriptorKey<Ctx> for (T, bip3
 }
 
 impl<Ctx: ScriptContext, T: DerivableKey<Ctx>> ToDescriptorKey<Ctx>
-    for (
-        T,
-        (bip32::Fingerprint, bip32::DerivationPath),
-        bip32::DerivationPath,
-    )
+    for (T, bip32::KeySource, bip32::DerivationPath)
 {
     fn to_descriptor_key(self) -> Result<DescriptorKey<Ctx>, KeyError> {
         self.0.add_metadata(Some(self.1), self.2)