1 个不稳定版本
0.1.0 | 2023年6月16日 |
---|
硬件支持分类下排名1520
每月下载量183次
在2个crate中使用
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