2023-02-21 16:23:08 +11:00
# The Bitcoin Dev Kit
2020-01-22 23:13:11 +01:00
2023-03-01 17:02:06 +11:00
< div align = "center" >
< h1 > BDK< / h1 >
2020-05-06 17:27:40 +02:00
2023-03-01 17:02:06 +11:00
< img src = "./static/bdk.png" width = "220" / >
2020-05-06 17:27:40 +02:00
2023-03-01 17:02:06 +11:00
< p >
< strong > A modern, lightweight, descriptor-based wallet library written in Rust!< / strong >
< / p >
2020-09-07 11:16:41 +02:00
2023-03-01 17:02:06 +11:00
< p >
< a href = "https://crates.io/crates/bdk" > < img alt = "Crate Info" src = "https://img.shields.io/crates/v/bdk.svg" / > < / a >
< a href = "https://github.com/bitcoindevkit/bdk/blob/master/LICENSE" > < img alt = "MIT or Apache-2.0 Licensed" src = "https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg" / > < / a >
< a href = "https://github.com/bitcoindevkit/bdk/actions?query=workflow%3ACI" > < img alt = "CI Status" src = "https://github.com/bitcoindevkit/bdk/workflows/CI/badge.svg" > < / a >
< a href = "https://coveralls.io/github/bitcoindevkit/bdk?branch=master" > < img src = "https://coveralls.io/repos/github/bitcoindevkit/bdk/badge.svg?branch=master" / > < / a >
< a href = "https://docs.rs/bdk" > < img alt = "API Docs" src = "https://img.shields.io/badge/docs.rs-bdk-green" / > < / a >
< a href = "https://blog.rust-lang.org/2021/12/02/Rust-1.57.0.html" > < img alt = "Rustc Version 1.57.0+" src = "https://img.shields.io/badge/rustc-1.57.0%2B-lightgrey.svg" / > < / a >
< a href = "https://discord.gg/d7NkDKm" > < img alt = "Chat on Discord" src = "https://img.shields.io/discord/753336465005608961?logo=discord" > < / a >
< / p >
2020-09-07 11:16:41 +02:00
2023-03-01 17:02:06 +11:00
< h4 >
< a href = "https://bitcoindevkit.org" > Project Homepage< / a >
< span > | < / span >
< a href = "https://docs.rs/bdk" > Documentation< / a >
< / h4 >
< / div >
2020-09-07 11:16:41 +02:00
2023-03-01 17:02:06 +11:00
## About
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.
2020-09-07 11:16:41 +02:00
2023-03-01 17:02:06 +11:00
> ⚠ 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 😁)
2023-08-21 14:05:09 +02:00
> For a release timeline see the [`BDK 1.0 project page`].
2020-09-07 11:16:41 +02:00
2023-03-01 17:02:06 +11:00
## Architecture
2020-09-07 11:16:41 +02:00
2023-03-01 17:02:06 +11:00
The project is split up into several crates in the `/crates` directory:
2020-09-07 11:16:41 +02:00
2023-03-01 17:02:06 +11:00
- [`bdk` ](./crates/bdk ): Contains the central high level `Wallet` type that is built from the low-level mechanisms provided by the other components
- [`chain` ](./crates/chain ): Tools for storing and indexing chain data
- [`file_store` ](./crates/file_store ): A (experimental) persistence backend for storing chain data in a single file.
- [`esplora` ](./crates/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` ](./crates/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.
2020-09-07 11:16:41 +02:00
2023-08-21 14:05:09 +02:00
Fully working examples of how to use these components are in `/example-crates` :
- [`example_cli` ](./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` .
- [`example_electrum` ](./example-crates/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` library.
2023-08-22 14:03:47 +02:00
- [`wallet_esplora_blocking` ](./example-crates/wallet_esplora_blocking ): Uses the `Wallet` to sync and spend using the Esplora blocking interface.
2023-08-21 14:05:09 +02:00
- [`wallet_esplora_async` ](./example-crates/wallet_esplora_async ): Uses the `Wallet` to sync and spend using the Esplora asynchronous interface.
- [`wallet_electrum` ](./example-crates/wallet_electrum ): Uses the `Wallet` to sync and spend using Electrum.
2023-03-01 17:02:06 +11:00
2023-08-21 14:05:09 +02:00
[`BDK 1.0 project page` ]: https://github.com/orgs/bitcoindevkit/projects/14
2023-03-01 17:02:06 +11:00
[`rust-miniscript` ]: https://github.com/rust-bitcoin/rust-miniscript
[`rust-bitcoin` ]: https://github.com/rust-bitcoin/rust-bitcoin
2023-08-21 14:05:09 +02:00
[`esplora-client` ]: https://docs.rs/esplora-client/
[`electrum-client` ]: https://docs.rs/electrum-client/
[`bdk_chain` ]: https://docs.rs/bdk-chain/
2023-07-24 12:44:48 +02:00
## Minimum Supported Rust Version (MSRV)
This library should compile with any combination of features with Rust 1.57.0.
To build with the MSRV you will need to pin dependencies as follows:
2023-08-30 12:12:33 -05:00
```shell
2023-07-24 12:44:48 +02:00
# log 0.4.19 has MSRV 1.60.0+
cargo update -p log --precise "0.4.18"
2023-08-03 10:35:53 +02:00
# tempfile 3.7.0 has MSRV 1.63.0+
2023-07-24 12:44:48 +02:00
cargo update -p tempfile --precise "3.6.0"
2023-11-20 20:02:31 -05:00
# reqwest 0.11.19 has MSRV 1.63.0+
cargo update -p reqwest --precise "0.11.18"
# hyper-rustls 0.24.1 has MSRV 1.60.0+
cargo update -p hyper-rustls --precise 0.24.0
2023-10-06 11:19:22 +08:00
# rustls 0.21.7 has MSRV 1.60.0+
2023-11-16 11:56:09 -06:00
cargo update -p rustls:0.21.9 --precise "0.21.1"
2023-08-30 12:12:33 -05:00
# rustls 0.20.9 has MSRV 1.60.0+
cargo update -p rustls:0.20.9 --precise "0.20.8"
2023-10-06 11:19:22 +08:00
# tokio 1.33 has MSRV 1.63.0+
2023-10-13 20:45:40 +03:00
cargo update -p tokio --precise "1.29.1"
2023-09-25 21:08:52 -05:00
# tokio-util 0.7.9 doesn't build with MSRV 1.57.0
cargo update -p tokio-util --precise "0.7.8"
2023-08-21 15:25:57 -05:00
# flate2 1.0.27 has MSRV 1.63.0+
2023-10-13 20:45:40 +03:00
cargo update -p flate2 --precise "1.0.26"
2023-08-21 15:25:57 -05:00
# h2 0.3.21 has MSRV 1.63.0+
cargo update -p h2 --precise "0.3.20"
2023-10-06 11:19:22 +08:00
# rustls-webpki 0.100.3 has MSRV 1.60.0+
2023-09-04 01:01:04 -05:00
cargo update -p rustls-webpki:0.100.3 --precise "0.100.1"
# rustls-webpki 0.101.2 has MSRV 1.60.0+
2023-10-13 20:45:40 +03:00
cargo update -p rustls-webpki:0.101.7 --precise "0.101.1"
2023-10-06 11:19:22 +08:00
# zip 0.6.6 has MSRV 1.59.0+
2023-10-13 20:45:40 +03:00
cargo update -p zip --precise "0.6.2"
2023-09-29 15:20:45 +02:00
# time 0.3.14 has MSRV 1.59.0+
cargo update -p time --precise "0.3.13"
2023-10-06 11:19:22 +08:00
# byteorder 1.5.0 has MSRV 1.60.0+
cargo update -p byteorder --precise "1.4.3"
# webpki 0.22.4 requires `ring:0.17.2` which has MSRV 1.61.0+
cargo update -p webpki --precise "0.22.2"
2023-10-13 20:45:40 +03:00
# os_str_bytes 6.6.0 has MSRV 1.61.0+
cargo update -p os_str_bytes --precise 6.5.1
# sct 0.7.1 has MSRV 1.61.0+
cargo update -p sct --precise 0.7.0
# cc 1.0.82 has MSRV 1.61.0+
cargo update -p cc --precise "1.0.81"
2023-11-13 10:15:34 +01:00
# jobserver 0.1.27 has MSRV 1.66.0+
cargo update -p jobserver --precise "0.1.26"
2023-07-24 12:44:48 +02:00
```
2023-08-19 11:01:17 -05:00
## License
Licensed under either of
* Apache License, Version 2.0, ([LICENSE-APACHE ](LICENSE-APACHE ) or < https: // www . apache . org / licenses / LICENSE-2 . 0 > )
* MIT license ([LICENSE-MIT ](LICENSE-MIT ) or < https: // opensource . org / licenses / MIT > )
at your option.
### Contribution
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.