diff --git a/Cargo.toml b/Cargo.toml index 681da7f0..8892415d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,7 +31,7 @@ async-trait = { version = "0.1", optional = true } rocksdb = { version = "0.14", default-features = false, features = ["snappy"], optional = true } cc = { version = ">=1.0.64", optional = true } socks = { version = "0.3", optional = true } -hwi = { version = "0.3.0", optional = true } +hwi = { version = "0.4.0", optional = true, features = [ "use-miniscript"] } bip39 = { version = "1.0.1", optional = true } bitcoinconsensus = { version = "0.19.0-3", optional = true } diff --git a/examples/hardware_signer.rs b/examples/hardware_signer.rs index 81343bcf..d1c25f1a 100644 --- a/examples/hardware_signer.rs +++ b/examples/hardware_signer.rs @@ -2,6 +2,7 @@ use bdk::bitcoin::{Address, Network}; use bdk::blockchain::{Blockchain, ElectrumBlockchain}; use bdk::database::MemoryDatabase; use bdk::hwi::{types::HWIChain, HWIClient}; +use bdk::miniscript::{Descriptor, DescriptorPublicKey}; use bdk::signer::SignerOrdering; use bdk::wallet::{hardwaresigner::HWISigner, AddressIndex}; use bdk::{FeeRate, KeychainKind, SignOptions, SyncOptions, Wallet}; @@ -23,26 +24,27 @@ fn main() -> Result<(), Box> { println!("Hold tight, I'm connecting to your hardware wallet..."); // Listing all the available hardware wallet devices... - let devices = HWIClient::enumerate()?; - let first_device = devices - .first() - .expect("No devices found. Either plug in a hardware wallet, or start a simulator."); + let mut devices = HWIClient::enumerate()?; + if devices.is_empty() { + panic!("No devices found. Either plug in a hardware wallet, or start a simulator."); + } + let first_device = devices.remove(0)?; // ...and creating a client out of the first one - let client = HWIClient::get_client(first_device, true, HWIChain::Test)?; + let client = HWIClient::get_client(&first_device, true, HWIChain::Test)?; println!("Look what I found, a {}!", first_device.model); // Getting the HW's public descriptors - let descriptors = client.get_descriptors(None)?; + let descriptors = client.get_descriptors::>(None)?; println!( "The hardware wallet's descriptor is: {}", descriptors.receive[0] ); // Creating a custom signer from the device - let custom_signer = HWISigner::from_device(first_device, HWIChain::Test)?; + let custom_signer = HWISigner::from_device(&first_device, HWIChain::Test)?; let mut wallet = Wallet::new( - &descriptors.receive[0], - Some(&descriptors.internal[0]), + descriptors.receive[0].clone(), + Some(descriptors.internal[0].clone()), Network::Testnet, MemoryDatabase::default(), )?; diff --git a/src/wallet/hardwaresigner.rs b/src/wallet/hardwaresigner.rs index 58246392..230cd4cf 100644 --- a/src/wallet/hardwaresigner.rs +++ b/src/wallet/hardwaresigner.rs @@ -24,9 +24,12 @@ //! # use std::sync::Arc; //! # //! # fn main() -> Result<(), Box> { -//! let devices = HWIClient::enumerate()?; -//! let first_device = devices.first().expect("No devices found!"); -//! let custom_signer = HWISigner::from_device(first_device, HWIChain::Test)?; +//! let mut devices = HWIClient::enumerate()?; +//! if devices.is_empty() { +//! panic!("No devices found!"); +//! } +//! let first_device = devices.remove(0)?; +//! let custom_signer = HWISigner::from_device(&first_device, HWIChain::Test)?; //! //! # let mut wallet = Wallet::new( //! # "", diff --git a/src/wallet/mod.rs b/src/wallet/mod.rs index c400c5a4..1a2a4f6a 100644 --- a/src/wallet/mod.rs +++ b/src/wallet/mod.rs @@ -5546,11 +5546,14 @@ pub(crate) mod test { use hwi::types::HWIChain; use hwi::HWIClient; - let devices = HWIClient::enumerate().unwrap(); - let device = devices.first().expect("No devices found"); - let client = HWIClient::get_client(device, true, HWIChain::Regtest).unwrap(); - let descriptors = client.get_descriptors(None).unwrap(); - let custom_signer = HWISigner::from_device(device, HWIChain::Regtest).unwrap(); + let mut devices = HWIClient::enumerate().unwrap(); + if devices.is_empty() { + panic!("No devices found!"); + } + let device = devices.remove(0).unwrap(); + let client = HWIClient::get_client(&device, true, HWIChain::Regtest).unwrap(); + let descriptors = client.get_descriptors::(None).unwrap(); + let custom_signer = HWISigner::from_device(&device, HWIChain::Regtest).unwrap(); let (mut wallet, _, _) = get_funded_wallet(&descriptors.internal[0]); wallet.add_signer(