Crate ledger_lib
source ·Expand description
A Ledger hardware wallet communication library
Device provides a high-level API for exchanging APDUs with Ledger devices using the ledger_proto traits. This is suitable for extension with application-specific interface traits, and automatically implemented over Exchange for low-level byte exchange with devices.
LedgerProvider and LedgerHandle provide a high-level tokio-compatible Transport
for application integration, supporting connecting to and interacting with ledger devices.
This uses a pinned thread to avoid thread safety issues with hidapi
and async executors.
Low-level Transport implementations are provided for USB/HID, BLE and TCP, with a Generic implementation providing a common interface over all enabled transports.
Safety
Transports are currently marked as Send
due to limitations of async_trait and are NOT all
thread safe. If you’re calling this from an async context, please use LedgerProvider.
This will be corrected when the unstable async trait feature is stabilised,
which until then can be opted-into using the unstable_async_trait
feature
Examples
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(())
}
Re-exports
pub use info::LedgerInfo;
pub use transport::Transport;
Modules
- Device information types and connection filters
- Low-level transport implementations for communication with ledger devices and nano apps
Structs
- Ledger device handle for interacting with LedgerProvider backed devices
- Ledger provider manages device discovery and connection
Enums
- Ledger interface error type
- Device discovery filter
Constants
Traits
- Exchange trait provides a low-level interface for byte-wise exchange of APDU commands with a ledger devices