#hardware-wallet #hwi #bitcoin #python #native #interface #hwi-client

bitcoin_hwi

Rust 语言封装 Bitcoin Core 硬件钱包接口

4 个版本 (2 个重大变更)

0.4.1 2023 年 9 月 7 日
0.4.0 2023 年 9 月 6 日
0.3.0 2023 年 1 月 25 日
0.2.0 2022 年 4 月 30 日

#2937 in 神奇豆子

Download history 14/week @ 2024-03-24 41/week @ 2024-03-31 11/week @ 2024-04-07 12/week @ 2024-04-14 34/week @ 2024-04-21 15/week @ 2024-04-28 15/week @ 2024-05-05 11/week @ 2024-05-12 14/week @ 2024-05-19 20/week @ 2024-05-26 14/week @ 2024-06-02 16/week @ 2024-06-09 39/week @ 2024-06-16 13/week @ 2024-06-23 2/week @ 2024-06-30 4/week @ 2024-07-07

每月 60 次下载
用于 5 crates

MIT 许可证

49KB
1K SLoC

rust-hwi

注意:这是 https://github.com/bitcoindevkit/rust-hwi 的临时分支。计划从头开始全面重写,不依赖于也不与命令行 python hwi 工具一起工作,并直接从 rust 使用 libusb - 具有改进的数据类型和错误报告。

以下是原始 README 的副本

Rust 语言封装 HWI

Crate Info API Docs Rustc Version 1.41+ Chat on Discord

这个库内部使用 PyO3 来调用 HWI 的函数。它不是在本地 Rust 中重新实现 HWI。

MSRV

此项目的 MSRV 是 1.48.0。要使用 MSRV 构建,您需要固定一些依赖项

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。还必须安装每个设备的库和 udev 规则。某些库需要安装

对于 Ubuntu/Debian

sudo apt install libusb-1.0-0-dev libudev-dev python3-dev

对于 Centos

sudo yum -y install python3-devel libusbx-devel systemd-devel

对于 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 安装所有依赖项
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(())
}

测试

要运行测试,您需要连接一个硬件钱包。如果您没有用于测试的硬件钱包,您可以尝试

请不要使用带有资金的设备进行测试!

可以使用没有资金的测试设备,或者使用模拟器。

可以使用以下命令运行测试:cargo test

依赖项

~10–17MB
~181K SLoC