Skip to content

Fix wallet UTXO reuse for funding transactions and onchain spends - #1037

Draft
tnull wants to merge 2 commits into
lightningdevkit:mainfrom
tnull:2026-08-fix-wallet-utxo-reuse
Draft

Fix wallet UTXO reuse for funding transactions and onchain spends#1037
tnull wants to merge 2 commits into
lightningdevkit:mainfrom
tnull:2026-08-fix-wallet-utxo-reuse

Conversation

@tnull

@tnull tnull commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

Fixes #41.

For the longest time BDK didn't offer any UTXO locking mechanisms and only considered transactions canonical once seen in the mempool during syncing. This always left a gap between the time of transaction signing/broadcast and the time of sync during which the wallet could double-spend itself. Since bdk_wallet v3.0 they finally offer UTXO locking APIs which we finally use here to close this gap for funding transactions and onchain spends.

Note: We intentionally leave splicing transactions out-of-scope of this PR because with #962 and #930 there are related PRs inflight. Depending on the order these land, this PR or they need to be updated to marry the two approaches. (cc @jkczyz)

@tnull tnull added this to the 0.8 milestone Aug 10, 2026
@tnull
tnull requested a review from wpaulino August 10, 2026 12:41
@ldk-reviews-bot

ldk-reviews-bot commented Aug 10, 2026

Copy link
Copy Markdown

👋 Hi! This PR is now in draft status.
I'll wait to assign reviewers until you mark it as ready for review.
Just convert it out of draft status when you're ready for review!

tnull added 2 commits August 10, 2026 15:52
Record wallet transactions before broadcast and reserve funding inputs
until their transactions are durable. This prevents concurrent
operations from selecting the same inputs. Dropped transactions remain
recoverable through the existing rebroadcast path.

Co-Authored-By: HAL 9000
Locally inserted transactions can be newer than Bitcoin Core's latest
mempool timestamp. Reporting that stale timestamp for an eviction makes
BDK ignore it and leaves the transaction's inputs unavailable.

Use the later of the local observation time and Bitcoin Core's mempool
time. This makes local transactions evictable without regressing nodes
whose Bitcoin Core clock is ahead of the application clock.

Co-Authored-By: HAL 9000
@tnull
tnull force-pushed the 2026-08-fix-wallet-utxo-reuse branch from 5385ef8 to 2932580 Compare August 10, 2026 14:03
@tnull
tnull marked this pull request as draft August 10, 2026 14:12
@tnull

tnull commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator Author

Drafting this for now as it might make sense to wait for #962 to land first, and then rebase this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Don't double-spend ourselves on sequential channel opens

2 participants