1 个不稳定版本

0.1.0 2023年6月16日

硬件支持分类下排名1520

Download history 13/week @ 2024-03-11 75/week @ 2024-03-18 15/week @ 2024-03-25 99/week @ 2024-04-01 21/week @ 2024-04-08 15/week @ 2024-04-15 7/week @ 2024-04-22 31/week @ 2024-04-29 22/week @ 2024-05-06 33/week @ 2024-05-13 179/week @ 2024-05-20 83/week @ 2024-05-27 142/week @ 2024-06-03 1/week @ 2024-06-10 21/week @ 2024-06-17 18/week @ 2024-06-24

每月下载量183
2个crate中使用

Apache-2.0

82KB
1.5K SLoC

Ledger硬件钱包通信库

提供了使用[ledger_proto] traits与Ledger设备交换APDUs的高层API。[Device]适用于扩展特定应用接口的traits,并在[Exchange]上自动实现,以进行与设备的高级字节交换。

[LedgerProvider]和[LedgerHandle]提供了适用于应用集成的高层tokio兼容[Transport],支持连接到并与Ledger设备交互。这使用固定线程以避免与hidapi和异步执行器相关的线程安全问题。

提供了针对USB/HID、BLE和TCP的低级[Transport]实现,一个通用实现提供对所有启用的传输的共同接口。

安全性

由于[async_trait]的限制,传输目前被标记为Send,并且不是所有都是线程安全的。如果您从异步上下文调用此功能,请使用[LedgerProvider]。

当不稳定异步trait功能稳定时,这将得到纠正,在此之前,可以通过使用unstable_async_trait功能选择加入。

示例

use ledger_lib::{LedgerProvider, Filters, Transport, Device, DEFAULT_TIMEOUT};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // Fetch provider handle
    let mut provider = LedgerProvider::init().await;

    // List available devices
    let devices = provider.list(Filters::Any).await?;

    // Check we have -a- device to connect to
    if devices.is_empty() {
        return Err(anyhow::anyhow!("No devices found"));
    }

    // Connect to the first device
    let mut ledger = provider.connect(devices[0].clone()).await?;

    // Request device information
    let info = ledger.app_info(DEFAULT_TIMEOUT).await?;
    println!("info: {info:?}");

    Ok(())
}

依赖项

~8–39MB
~589K SLoC