This commit changes the `LocalChain` implementation to have blocks stored as a linked-list. This allows the data-src thread to hold a shared ref to a single checkpoint and have access to the whole history of checkpoints without cloning or keeping a lock on `LocalChain`. The APIs of `bdk::Wallet`, `esplora` and `electrum` are also updated to reflect these changes. Note that the `esplora` crate is rewritten to anchor txs in the confirmation block (using the esplora API's tx status block_hash). This guarantees 100% consistency between anchor blocks and their transactions (instead of anchoring txs to the latest tip). `ExploraExt` now has separate methods for updating the `TxGraph` and `LocalChain`. A new method `TxGraph::missing_blocks` is introduced for finding "floating anchors" of a `TxGraph` update (given a chain). Additional changes: * `test_local_chain.rs` is refactored to make test cases easier to write. Additional tests are also added. * Examples are updated. * Fix `tempfile` dev dependency of `bdk_file_store` to work with MSRV Co-authored-by: LLFourn <lloyd.fourn@gmail.com>
BDK Esplora
BDK Esplora extends esplora_client
to update [bdk_chain
] structures
from an Esplora server.
Usage
There are two versions of the extension trait (blocking and async).
For blocking-only:
bdk_esplora = { version = "0.3", features = ["blocking"] }
For async-only:
bdk_esplora = { version = "0.3", features = ["async"] }
For async-only (with https):
bdk_esplora = { version = "0.3", features = ["async-https"] }
To use the extension traits:
// for blocking
use bdk_esplora::EsploraExt;
// for async
// use bdk_esplora::EsploraAsyncExt;
For full examples, refer to example-crates/wallet_esplora
(blocking) and example-crates/wallet_esplora_async
.