]> Untitled Git - bdk/commit
fix(wallet_esplora): missing_heights uses the...
authorDaniela Brozzoni <danielabrozzoni@protonmail.com>
Fri, 6 Oct 2023 14:29:21 +0000 (16:29 +0200)
committerDaniela Brozzoni <danielabrozzoni@protonmail.com>
Mon, 9 Oct 2023 13:09:14 +0000 (15:09 +0200)
commitb1461f05d05a0b9cf056a9604032468064ca1a05
treefe4e2fa4a92d31d37fc4473721bc96450fafd24a
parent77cde96229b4f4816a432e7db336a26ced7b0e28
fix(wallet_esplora): missing_heights uses the...
...graph update

Fixes #1151.
When wallet_esplora_* was used to sync a wallet containing a transaction
confirmed some time ago (more than 10-15 blocks ago), the transaction would
be stuck in an "unconfirmed" state forever.

At the first scan time, `update_local_chain` would just fetch the last 10 to
15 blocks (depending on the server used), and `tx_graph.missing_heights`
wouldn't return the tx's confirmation block as it was called on the
original, non-updated tx_graph.
So, after the first scan, we would have a transaction in memory with an
anchor that doesn't exist in our local_chain, and try_get_chain_position
would return unconfirmed.

When scanning again, missing_heights would find the missing anchor, but
`update_local_chain` wouldn't include it as it's older than
ASSUME_FINAL_DEPTH.

The missing block would be downloaded every time, but never included in
the local_chain, and the transaction would remain unconfirmed forever.

Here we call missing_heights on the updated graph, so that it can
correctly return the anchor height, and `update_local_chain` can
fetch it and include it in the chain.
example-crates/wallet_esplora_async/src/main.rs
example-crates/wallet_esplora_blocking/src/main.rs