ledger_bitcoin_client

Crates.ioledger_bitcoin_client
lib.rsledger_bitcoin_client
version0.5.0
sourcesrc
created_at2022-11-28 10:12:57.53558
updated_at2024-08-23 14:02:20.51981
descriptionLedger Bitcoin application client
homepage
repositoryhttps://github.com/LedgerHQ/app-bitcoin-new
max_upload_size
id724352
size303,095
Salvatore Ingala (bigspider)

documentation

https://docs.rs/ledger_bitcoin_client/

README

Ledger Bitcoin application client

Client library in Rust for the Ledger Bitcoin application with minimal dependencies.

If you wish to contribute to this library, please read CONTRIBUTING.md.

Minimum Supported Rust Version

bitcoin_client_rs should always compile using Rust 1.60.

Getting started

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.

The async feature

The 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>;
}

The no-std support

Work in progress.

Example

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
Commit count: 990

cargo fmt