]> git.bitcoin.ninja Git - rust-lightning/commit
Replay MPP claims via background events using new CM metadata
authorMatt Corallo <git@bluematt.me>
Mon, 30 Sep 2024 20:09:01 +0000 (20:09 +0000)
committerMatt Corallo <git@bluematt.me>
Thu, 24 Oct 2024 17:44:33 +0000 (17:44 +0000)
commit4896e20086ef555e70ec171278e66bd14788a265
tree8168ecc9cf9ff387b9416c834716a717a1d5872a
parent254b78fd3553c977a00f9b81cf829e81427b0a04
Replay MPP claims via background events using new CM metadata

When we claim an MPP payment, then crash before persisting all the
relevant `ChannelMonitor`s, we rely on the payment data being
available in the `ChannelManager` on restart to re-claim any parts
that haven't yet been claimed. This is fine as long as the
`ChannelManager` was persisted before the `PaymentClaimable` event
was processed, which is generally the case in our
`lightning-background-processor`, but may not be in other cases or
in a somewhat rare race.

In order to fix this, we need to track where all the MPP parts of
a payment are in the `ChannelMonitor`, allowing us to re-claim any
missing pieces without reference to any `ChannelManager` data.

Further, in order to properly generate a `PaymentClaimed` event
against the re-started claim, we have to store various payment
metadata with the HTLC list as well.

Here we finally implement claiming using the new MPP part list and
metadata stored in `ChannelMonitor`s. In doing so, we use much more
of the existing HTLC-claiming pipeline in `ChannelManager`,
utilizing the on-startup background events flow as well as properly
re-applying the RAA-blockers to ensure preimages cannot be lost.
lightning/src/ln/channel.rs
lightning/src/ln/channelmanager.rs
lightning/src/ln/reload_tests.rs