96a9aa6e63474dbd93a2ef969eef5b07c79e6491 feat(chain): refactor `merge_chains` (志宇) 2f22987c9e924800f8682b2dcbdde60fd26b069a chore(chain): fix comment (志宇) daf588f016ec3118c875db8ed6b55fa03683f0f6 feat(chain): optimize `merge_chains` (志宇) 77d35954c1f3a18f767267e9097f63ca11c709ec feat(chain)!: rm `local_chain::Update` (志宇) 1269b0610efb7bd86d92a909800f9330568c797a test(chain): fix incorrect test case (志宇) 72fe65b65f297ebb7160eee6859c46e29c2d9528 feat(esplora)!: simplify chain update logic (志宇) eded1a7ea0c6a4b9664826df4f77b714cbad0bcc feat(chain): introduce `CheckPoint::insert` (志宇) 519cd75d23fbb72321b0b189dca12afbfd78c0c7 test(esplora): move esplora tests into src files (志宇) a6e613e6b978b995abf6c92a16df0300b113aa2c test(esplora): add `test_finalize_chain_update` (志宇) 494d253493f1bc914adba16a28ccf1bc0a0f4ec8 feat(testenv): add `genesis_hash` method (志宇) 886d72e3d541d088320bbdad6804057f32aca684 chore(chain)!: rm `missing_heights` and `missing_heights_from` methods (志宇) bd62aa0fe199d676710c9909617198d62f4897c0 feat(esplora)!: remove `EsploraExt::update_local_chain` (志宇) 1e997939837e9c1f0c087d6d28ac12e373c8c05f feat(testenv): add `make_checkpoint_tip` (志宇) Pull request description: Fixes #1354 ### Description Built on top of both #1369 and #1373, we simplify the `EsploraExt` API by removing the `update_local_chain` method and having `full_scan` and `sync` update the local chain in the same call. The `full_scan` and `sync` methods now takes in an additional input (`local_tip`) which provides us with the view of the `LocalChain` before the update. These methods now return structs `FullScanUpdate` and `SyncUpdate`. The examples are updated to use this new API. `TxGraph::missing_heights` and `tx_graph::ChangeSet::missing_heights_from` are no longer needed, therefore they are removed. Additionally, we used this opportunity to simplify the logic which updates `LocalChain`. We got rid of the `local_chain::Update` struct (which contained the update `CheckPoint` tip and a `bool` which signaled whether we want to introduce blocks below point of agreement). It turns out we can use something like `CheckPoint::insert` so the chain source can craft an update based on the old tip. This way, we can make better use of `merge_chains`' optimization that compares the `Arc` pointers of the local and update chain (before we were crafting the update chain NOT based on top of the previous local chain). With this, we no longer need the `Update::introduce_older_block` field since the logic will naturally break when we reach a matching `Arc` pointer. ### Notes to the reviewers * Obtaining the `LocalChain`'s update now happens within `EsploraExt::full_scan` and `EsploraExt::sync`. Creating the `LocalChain` update is now split into two methods (`fetch_latest_blocks` and `chain_update`) that are called before and after fetching transactions and anchors. * We need to duplicate code for `bdk_esplora`. One for blocking and one for async. ### Changelog notice * Changed `EsploraExt` API so that sync only requires one round of fetching data. The `local_chain_update` method is removed and the `local_tip` parameter is added to the `full_scan` and `sync` methods. * Removed `TxGraph::missing_heights` and `tx_graph::ChangeSet::missing_heights_from` methods. * Introduced `CheckPoint::insert` which allows convenient checkpoint-insertion. This is intended for use by chain-sources when crafting an update. * Refactored `merge_chains` to also return the resultant `CheckPoint` tip. * Optimized the update `LocalChain` logic - use the update `CheckPoint` as the new `CheckPoint` tip when possible. ### Checklists #### All Submissions: * [x] I've signed all my commits * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md) * [x] I ran `cargo fmt` and `cargo clippy` before committing #### New Features: * [x] I've added tests for the new feature * [x] I've added docs for the new feature ACKs for top commit: LLFourn: ACK 96a9aa6e63474dbd93a2ef969eef5b07c79e6491 Tree-SHA512: 3d4f2eab08a1fe94eb578c594126e99679f72e231680b2edd4bfb018ba1d998ca123b07acb2d19c644d5887fc36b8e42badba91cd09853df421ded04de45bf69
38 lines
1.5 KiB
TOML
38 lines
1.5 KiB
TOML
[package]
|
|
name = "bdk_esplora"
|
|
version = "0.11.0"
|
|
edition = "2021"
|
|
homepage = "https://bitcoindevkit.org"
|
|
repository = "https://github.com/bitcoindevkit/bdk"
|
|
documentation = "https://docs.rs/bdk_esplora"
|
|
description = "Fetch data from esplora in the form that accepts"
|
|
license = "MIT OR Apache-2.0"
|
|
readme = "README.md"
|
|
|
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
|
|
|
[dependencies]
|
|
bdk_chain = { path = "../chain", version = "0.12.0", default-features = false }
|
|
esplora-client = { version = "0.7.0", default-features = false }
|
|
async-trait = { version = "0.1.66", optional = true }
|
|
futures = { version = "0.3.26", optional = true }
|
|
|
|
# use these dependencies if you need to enable their /no-std features
|
|
bitcoin = { version = "0.31.0", optional = true, default-features = false }
|
|
miniscript = { version = "11.0.0", optional = true, default-features = false }
|
|
|
|
[dev-dependencies]
|
|
bdk_testenv = { path = "../testenv", default_features = false }
|
|
electrsd = { version= "0.27.1", features = ["bitcoind_25_0", "esplora_a33e97e1", "legacy"] }
|
|
tokio = { version = "1", features = ["rt", "rt-multi-thread", "macros"] }
|
|
anyhow = "1"
|
|
|
|
[features]
|
|
default = ["std", "async-https", "blocking-https-rustls"]
|
|
std = ["bdk_chain/std"]
|
|
async = ["async-trait", "futures", "esplora-client/async"]
|
|
async-https = ["async", "esplora-client/async-https"]
|
|
async-https-rustls = ["async", "esplora-client/async-https-rustls"]
|
|
blocking = ["esplora-client/blocking"]
|
|
blocking-https-rustls = ["esplora-client/blocking-https-rustls"]
|