]> git.bitcoin.ninja Git - rust-lightning/commitdiff
Preserve funding_transaction for the later lifecycle of the channel, simple solution
authoroptout <13562139+optout21@users.noreply.github.com>
Mon, 28 Oct 2024 21:29:47 +0000 (22:29 +0100)
committeroptout <13562139+optout21@users.noreply.github.com>
Mon, 28 Oct 2024 21:29:47 +0000 (22:29 +0100)
lightning/src/ln/channel.rs

index 42458e4769fd7a66adbe9e4987676c16690283fa..a62ba97f6161ac009e95e699abb814e134e36c95 100644 (file)
@@ -5481,17 +5481,17 @@ impl<SP: Deref> Channel<SP> where
                // If we're past (or at) the AwaitingChannelReady stage on an outbound channel, try to
                // (re-)broadcast the funding transaction as we may have declined to broadcast it when we
                // first received the funding_signed.
-               let mut funding_broadcastable =
+               let mut funding_broadcastable = None;
+               if let Some(funding_transaction) = &self.context.funding_transaction {
                        if self.context.is_outbound() &&
                                (matches!(self.context.channel_state, ChannelState::AwaitingChannelReady(flags) if !flags.is_set(AwaitingChannelReadyFlags::WAITING_FOR_BATCH)) ||
                                matches!(self.context.channel_state, ChannelState::ChannelReady(_)))
                        {
-                               self.context.funding_transaction.take()
-                       } else { None };
-               // That said, if the funding transaction is already confirmed (ie we're active with a
-               // minimum_depth over 0) don't bother re-broadcasting the confirmed funding tx.
-               if matches!(self.context.channel_state, ChannelState::ChannelReady(_)) && self.context.minimum_depth != Some(0) {
-                       funding_broadcastable = None;
+                               // Broadcast only if not yet confirmed
+                               if self.context.get_funding_tx_confirmation_height().is_none() {
+                                       funding_broadcastable = Some(funding_transaction.clone())
+                               }
+                       }
                }
 
                // We will never broadcast the funding transaction when we're in MonitorUpdateInProgress
@@ -7893,6 +7893,7 @@ impl<SP: Deref> OutboundV1Channel<SP> where SP::Target: SignerProvider {
                        self.context.minimum_depth = Some(COINBASE_MATURITY);
                }
 
+               debug_assert!(self.context.funding_transaction.is_none());
                self.context.funding_transaction = Some(funding_transaction);
                self.context.is_batch_funding = Some(()).filter(|_| is_batch_funding);