Crates.io | bitcoin_hwi |
lib.rs | bitcoin_hwi |
version | 0.4.1 |
source | src |
created_at | 2022-04-30 18:50:12.106175 |
updated_at | 2023-09-07 11:15:46.322403 |
description | Rust wrapper for the Bitcoin Core Hardware Wallet Interface. |
homepage | |
repository | https://github.com/bitcoindevkit/rust-hwi |
max_upload_size | |
id | 578298 |
size | 60,345 |
NB: This is a temporary fork of https://github.com/bitcoindevkit/rust-hwi. The plan is the full rewrite from scratch not to depend and not to work with the command-line python hwi
utility and use libusb
directly from rust - with improved data types and error reporting.
Here is the copy of the original README:
Rust wrapper for HWI.
This library internally uses PyO3 to call HWI's functions. It is not a re-implementation of HWI in native Rust.
The MSRV for this project is 1.48.0
. To build with the MSRV you will need to pin some dependencies:
cargo update -p serde_json --precise 1.0.99
cargo update -p serde --precise 1.0.156
cargo update -p once_cell --precise 1.14.0
cargo update -p quote --precise 1.0.30
cargo update -p proc-macro2 --precise 1.0.65
Python 3 is required. The libraries and udev rules for each device must also be installed. Some libraries will need to be installed
For Ubuntu/Debian:
sudo apt install libusb-1.0-0-dev libudev-dev python3-dev
For Centos:
sudo yum -y install python3-devel libusbx-devel systemd-devel
For macOS:
brew install libusb
git clone https://github.com/bitcoindevkit/rust-hwi.git && cd rust-hwi
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
use bitcoin::Network;
use bitcoin::bip32::DerivationPath;
use hwi::error::Error;
use hwi::HWIClient;
use std::str::FromStr;
fn main() -> Result<(), Error> {
let mut devices = HWIClient::enumerate()?;
if devices.is_empty() {
panic!("No devices found!");
}
let first_device = devices.remove(0)?;
let client = HWIClient::get_client(&first_device, true, Network::Bitcoin.into())?;
let derivation_path = DerivationPath::from_str("m/44'/1'/0'/0/0").unwrap();
let s = client.sign_message("I love BDK wallet", &derivation_path)?;
println!("{:?}", s.signature);
Ok(())
}
To run the tests, you need to have a hardware wallet plugged in. If you don't have a HW for testing, you can try:
Don't use a device with funds for testing!
Either use a testing device with no funds, or use a simulator.
You can run the tests with cargo test
.