]> git.bitcoin.ninja Git - rust-lightning/commit
Store info about claimed payments, incl HTLCs in `ChannelMonitor`s
authorMatt Corallo <git@bluematt.me>
Mon, 16 Sep 2024 00:07:48 +0000 (00:07 +0000)
committerMatt Corallo <git@bluematt.me>
Thu, 24 Oct 2024 17:44:33 +0000 (17:44 +0000)
commit7790e30880f955d0e378ffd4e4062a7b4747c361
tree6ced58229c881497394dd03b2d21b13d6c3ba044
parentb8661ef6cf7f13c9f904fbd25c59fb59415f0d73
Store info about claimed payments, incl HTLCs in `ChannelMonitor`s

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 store the required MPP parts and metadata in
`ChannelMonitor`s and make them available to `ChannelManager` on
load.
lightning/src/chain/channelmonitor.rs
lightning/src/ln/channelmanager.rs
lightning/src/util/ser.rs