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 }
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};
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::<Descriptor<DescriptorPublicKey>>(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(),
)?;
//! # use std::sync::Arc;
//! #
//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
-//! 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(
//! # "",
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::<String>(None).unwrap();
+ let custom_signer = HWISigner::from_device(&device, HWIChain::Regtest).unwrap();
let (mut wallet, _, _) = get_funded_wallet(&descriptors.internal[0]);
wallet.add_signer(