]> git.bitcoin.ninja Git - rust-lightning/commit
Force-close channels if their feerate gets stale without any update
authorMatt Corallo <git@bluematt.me>
Sun, 5 May 2024 23:22:23 +0000 (23:22 +0000)
committerMatt Corallo <git@bluematt.me>
Mon, 10 Jun 2024 15:17:58 +0000 (15:17 +0000)
commit5a1cc288b756fa39bcb33563da67841c2f757173
tree87e2ddbbb871ac1232859b5cdfe9add0807742ce
parent66e6ee563bc4e2d2e5337914e24929d271265c06
Force-close channels if their feerate gets stale without any update

For quite some time, LDK has force-closed channels if the peer
sends us a feerate update which is below our `FeeEstimator`'s
concept of a channel lower-bound. This is intended to ensure that
channel feerates are always sufficient to get our commitment
transaction confirmed on-chain if we do need to force-close.

However, we've never checked our channel feerate regularly - if a
peer is offline (or just uninterested in updating the channel
feerate) and the prevailing feerates on-chain go up, we'll simply
ignore it and allow our commitment transaction to sit around with a
feerate too low to get confirmed.

Here we rectify this oversight by force-closing channels with stale
feerates, checking after each block. However, because fee
estimators are often buggy and force-closures piss off users, we
only do so rather conservatively. Specifically, we only force-close
if a channel's feerate is below the minimum `FeeEstimator`-provided
minimum across the last day.

Further, because fee estimators are often especially buggy on
startup (and because peers haven't had a chance to update the
channel feerates yet), we don't force-close channels until we have
a full day of feerate lower-bound history.

This should reduce the incidence of force-closures substantially,
but it is expected this will still increase force-closures somewhat
substantially depending on the users' `FeeEstimator`.

Fixes #993
fuzz/src/full_stack.rs
lightning/src/ln/channel.rs
lightning/src/ln/channelmanager.rs