From 63d5bcee934febe4d38622b677131bbe2e1a0abe Mon Sep 17 00:00:00 2001 From: Alekos Filini Date: Wed, 9 Mar 2022 18:38:11 +0100 Subject: [PATCH] [wallet] Add more getters --- src/wallet/mod.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/wallet/mod.rs b/src/wallet/mod.rs index 6986cf01..5f43b565 100644 --- a/src/wallet/mod.rs +++ b/src/wallet/mod.rs @@ -456,6 +456,29 @@ where signers.add_external(signer.id(&self.secp), ordering, signer); } + /// Get the signers + /// + /// ## Example + /// + /// ``` + /// # use bdk::{Wallet, KeychainKind}; + /// # use bdk::bitcoin::Network; + /// # use bdk::database::MemoryDatabase; + /// let wallet = Wallet::new("wpkh(tprv8ZgxMBicQKsPe73PBRSmNbTfbcsZnwWhz5eVmhHpi31HW29Z7mc9B4cWGRQzopNUzZUT391DeDJxL2PefNunWyLgqCKRMDkU1s2s8bAfoSk/84'/0'/0'/0/*)", None, Network::Testnet, MemoryDatabase::new())?; + /// for secret_key in wallet.get_signers(KeychainKind::External).signers().iter().filter_map(|s| s.descriptor_secret_key()) { + /// // secret_key: tprv8ZgxMBicQKsPe73PBRSmNbTfbcsZnwWhz5eVmhHpi31HW29Z7mc9B4cWGRQzopNUzZUT391DeDJxL2PefNunWyLgqCKRMDkU1s2s8bAfoSk/84'/0'/0'/0/* + /// println!("secret_key: {}", secret_key); + /// } + /// + /// Ok::<(), Box>(()) + /// ``` + pub fn get_signers(&self, keychain: KeychainKind) -> Arc { + match keychain { + KeychainKind::External => Arc::clone(&self.signers), + KeychainKind::Internal => Arc::clone(&self.change_signers), + } + } + /// Add an address validator /// /// See [the `address_validator` module](address_validator) for an example. @@ -463,6 +486,11 @@ where self.address_validators.push(validator); } + /// Get the address validators + pub fn get_address_validators(&self) -> &[Arc] { + &self.address_validators + } + /// Start building a transaction. /// /// This returns a blank [`TxBuilder`] from which you can specify the parameters for the transaction. @@ -1556,6 +1584,18 @@ where Ok(()) } + + /// Return the checksum of the public descriptor associated to `keychain` + /// + /// Internally calls [`Self::get_descriptor_for_keychain`] to fetch the right descriptor + pub fn descriptor_checksum(&self, keychain: KeychainKind) -> String { + self.get_descriptor_for_keychain(keychain) + .to_string() + .splitn(2, '#') + .next() + .unwrap() + .to_string() + } } /// Return a fake wallet that appears to be funded for testing.