Rework closing channel balance computation#3096
Merged
Conversation
t-bast
commented
Jun 2, 2025
This was referenced Jun 2, 2025
We re-work the channel balance computation (`CheckBalance.scala`) used to continuously monitor the overall balance of the node. We previously assumed that all pending HTLCs would timeout on-chain, and monitored our mempool to deduplicate unconfirmed transactions and RBF attempts. But it is actually simpler to assume that all pending HTLCs will be fulfilled, and keep counting them in our off-chain balance until the spending transaction reaches `min-depth`. We introduce a distinction between recently confirmed transactions and deeply confirmed transactions in our on-chain balance: there will be cases where we don't know yet whether we'll be able to gets funds back and the information of pending on-chain funds lets us verify that our overall balance is looking good. It always eventually converges to be in our on-chain balance. Fixes #3085
c248e4d to
2589ceb
Compare
Member
Author
|
Rebased to fix conflicts with #3092. |
pm47
approved these changes
Jun 3, 2025
t-bast
added a commit
that referenced
this pull request
Jun 25, 2025
Our node balance computation was simplified in #3096, but it is now too simplistic during closing, where some of the balance may be duplicated between the off-chain part and unconfirmed or recently confirmed transactions. We deduplicate those by not counting in our off-chain balance of closing channels outputs that are spent by an unconfirmed or recently confirmed transaction that we've included in our on-chain balance. Fixes #3098
t-bast
added a commit
that referenced
this pull request
Jul 16, 2025
…3119) Our node balance computation was simplified in #3096, but it is now too simplistic during closing, where some of the balance may be duplicated between the off-chain part and unconfirmed or recently confirmed transactions. We deduplicate those by not counting in our off-chain balance of closing channels outputs that are spent by an unconfirmed or recently confirmed transaction that we've included in our on-chain balance. Fixes #3098
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
We re-work the channel balance computation (
CheckBalance.scala) used to continuously monitor the overall balance of the node. We previously assumed that all pending HTLCs would timeout on-chain, and monitored our mempool to deduplicate unconfirmed transactions and RBF attempts. But it is actually simpler to assume that all pending HTLCs will be fulfilled, and keep counting them in our off-chain balance until the spending transaction reachesmin-depth.We introduce a distinction between recently confirmed transactions and deeply confirmed transactions in our on-chain balance: there will be cases where we don't know yet whether we'll be able to gets funds back and the information of pending on-chain funds lets us verify that our overall balance is looking good. It always eventually converges to be in our on-chain balance.
Fixes #3085