A modern, lightweight, descriptor-based wallet library written in Rust!
The bdk
libraries aims to provide well engineered and reviewed components for Bitcoin based applications.
It is built upon the excellent rust-bitcoin
and rust-miniscript
crates.
⚠ The Bitcoin Dev Kit developers are in the process of releasing a
v1.0
which is a fundamental re-write of how the library works. See for some background on this project: https://bitcoindevkit.org/blog/road-to-bdk-1/ (ignore the timeline 😁) For a release timeline see theBDK 1.0 project page
.
The project is split up into several crates in the /crates
directory:
wallet
: Contains the central high level Wallet
type that is built from the low-level mechanisms provided by the other componentschain
: Tools for storing and indexing chain datapersist
: Types that define data persistence of a BDK walletfile_store
: A (experimental) persistence backend for storing chain data in a single file.esplora
: Extends the esplora-client
crate with methods to fetch chain data from an esplora HTTP server in the form that bdk_chain
and Wallet
can consume.electrum
: Extends the electrum-client
crate with methods to fetch chain data from an electrum server in the form that bdk_chain
and Wallet
can consume.Fully working examples of how to use these components are in /example-crates
:
example_cli
: Library used by the example_*
crates. Provides utilities for syncing, showing the balance, generating addresses and creating transactions without using the bdk_wallet Wallet
.example_electrum
: A command line Bitcoin wallet application built on top of example_cli
and the electrum
crate. It shows the power of the bdk tools (chain
+ file_store
+ electrum
), without depending on the main bdk_wallet
library.example_esplora
: A command line Bitcoin wallet application built on top of example_cli
and the esplora
crate. It shows the power of the bdk tools (chain
+ file_store
+ esplora
), without depending on the main bdk_wallet
library.example_bitcoind_rpc_polling
: A command line Bitcoin wallet application built on top of example_cli
and the bitcoind_rpc
crate. It shows the power of the bdk tools (chain
+ file_store
+ bitcoind_rpc
), without depending on the main bdk_wallet
library.wallet_esplora_blocking
: Uses the Wallet
to sync and spend using the Esplora blocking interface.wallet_esplora_async
: Uses the Wallet
to sync and spend using the Esplora asynchronous interface.wallet_electrum
: Uses the Wallet
to sync and spend using Electrum.This library should compile with any combination of features with Rust 1.63.0.
To build with the MSRV you will need to pin dependencies as follows:
cargo update -p zstd-sys --precise "2.0.8+zstd.1.5.5"
cargo update -p time --precise "0.3.20"
cargo update -p home --precise "0.5.5"
cargo update -p proptest --precise "1.2.0"
cargo update -p url --precise "2.5.0"
cargo update -p cc --precise "1.0.105"
cargo update -p tokio --precise "1.38.1"
cargo update -p tokio-util --precise "0.7.11"
cargo update -p indexmap --precise "2.5.0"
cargo update -p security-framework-sys --precise "2.11.1"
cargo update -p rustls@0.23.18 --precise "0.23.17"
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.