8 releases (4 breaking)
0.5.0 | Aug 23, 2024 |
---|---|
0.4.1 | Mar 20, 2024 |
0.4.0 | Jan 22, 2024 |
0.3.2 | Aug 10, 2023 |
0.1.0 |
|
#2 in #pubkey
392 downloads per month
Used in async-hwi
110KB
2.5K
SLoC
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
Dependencies
~8.5MB
~102K SLoC