Crates.io | ledger_bitcoin_client |
lib.rs | ledger_bitcoin_client |
version | 0.5.0 |
source | src |
created_at | 2022-11-28 10:12:57.53558 |
updated_at | 2024-08-23 14:02:20.51981 |
description | Ledger Bitcoin application client |
homepage | |
repository | https://github.com/LedgerHQ/app-bitcoin-new |
max_upload_size | |
id | 724352 |
size | 303,095 |
Client library in Rust for the Ledger Bitcoin application with minimal dependencies.
If you wish to contribute to this library, please read CONTRIBUTING.md.
bitcoin_client_rs
should always compile using Rust 1.60.
The client::BitcoinClient
struct implements the methods that call and
interpret the commands between the Ledger device and your software.
pub struct BitcoinClient<T: Transport> {...}
impl<T: Transport> BitcoinClient<T> {
pub fn get_extended_pubkey(
&self,
path: &bitcoin::util::bip32::DerivationPath,
display: bool,
) -> Result<bitcoin::util::bip32::ExtendedPubKey, BitcoinClientError<T::Error>>;
}
It requires an internal connection implementing the client::Transport
Trait.
pub trait Transport {
type Error: Debug;
fn exchange(&self, command: &APDUCommand) -> Result<(StatusWord, Vec<u8>), Self::Error>;
}
In order to satisfy this Trait, it is possible to import the
ledger-transport-hid
crate from https://github.com/Zondax/ledger-rs.
Please, read the examples/ledger_hwi/src/transport.rs
file to find an example.
async
featureThe optional feature async
adds the async_client
module to the crate
and imports the async_trait
library. The async_client::BitcoinClient
struct is an asynchronous equivalent to the BitcoinClient
struct. It
requires an internal connection implementing the async_client::Transport
Trait.
#[async_trait]
pub trait Transport {
type Error: Debug;
async fn exchange(&self, command: &APDUCommand) -> Result<(StatusWord, Vec<u8>), Self::Error>;
}
no-std
supportWork in progress.
The code source for a simple tool to communicate with either a Ledger device or Speculos
emulator can be found in the examples
directory.
Example of a command to retrieve the extended pubkey with the given derivation path and display it on the device screen:
cargo run --package ledger_hwi -- \
get-extended-pubkey --derivation-path "m/44'/0'/0'/0/0" --display