Prevent ChannelForceClosed monitor update error after detecting spend
authorWilmer Paulino <wilmer@wilmerpaulino.com>
Thu, 4 May 2023 22:16:17 +0000 (15:16 -0700)
committerWilmer Paulino <wilmer@wilmerpaulino.com>
Thu, 4 May 2023 22:22:25 +0000 (15:22 -0700)
If we detected a spend for a channel onchain prior to handling its
`ChannelForceClosed` monitor update, we'd log a concerning error
message and return an error unnecessarily. The channel has already been
closed, so handling the `ChannelForceClosed` monitor update at this
point should be a no-op.

lightning/src/chain/channelmonitor.rs

index 7d1a325c7210500696495677511c2686a47c7b90..bf3008774f0ea94c477268e709507a76df433db0 100644 (file)
@@ -2457,7 +2457,9 @@ impl<Signer: WriteableEcdsaChannelSigner> ChannelMonitorImpl<Signer> {
 
                self.latest_update_id = updates.update_id;
 
-               if ret.is_ok() && self.funding_spend_seen {
+               // Refuse updates after we've detected a spend onchain, but only if we haven't processed a
+               // force closed monitor update yet.
+               if ret.is_ok() && self.funding_spend_seen && self.latest_update_id != CLOSED_CHANNEL_UPDATE_ID {
                        log_error!(logger, "Refusing Channel Monitor Update as counterparty attempted to update commitment after funding was spent");
                        Err(())
                } else { ret }