Skip to content

Rust wrapper for the Bitcoin Core Hardware Wallet Interface

License

Notifications You must be signed in to change notification settings

ulixee/rust-hwi

 
 

Repository files navigation

rust-hwi

Rust wrapper for the Bitcoin Hardware Wallet Interface library.

Crate Info API Docs Rustc Version 1.63+ Chat on Discord

This library internally uses PyO3 to call HWI's functions. It is not a re-implementation of HWI in native Rust.

MSRV

The MSRV for this project is 1.63.0.

Prerequisites

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

Install

  • Clone the repo
git clone https://github.com/bitcoindevkit/rust-hwi.git && cd rust-hwi
  • Create a virtualenv:
virtualenv -p python3 venv
source venv/bin/activate
  • Install all the dependencies using pip:
pip install -r requirements.txt

Usage

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(())
}

Testing

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.

About

Rust wrapper for the Bitcoin Core Hardware Wallet Interface

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%