@@ -2743,35 +2743,47 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitorImpl<Signer> {
27432743 fn closure_conf_target ( & self ) -> ConfirmationTarget {
27442744 // Treat the sweep as urgent as long as there is at least one HTLC which is pending on a
27452745 // valid commitment transaction.
2746+ let mut minimum_expiry = None ;
2747+ let update_minimum_expiry = |local_minimum : Option < u32 > , global_minimum : & mut Option < u32 > | {
2748+ if let Some ( expiry) = local_minimum {
2749+ * global_minimum = Some ( global_minimum. map_or ( expiry, |m| cmp:: min ( expiry, m) ) ) ;
2750+ }
2751+ } ;
2752+
27462753 if !self . current_holder_commitment_tx . htlc_outputs . is_empty ( ) {
2747- let minimum_expiry = self . current_holder_commitment_tx . htlc_outputs
2754+ let local_minimum_expiry = self . current_holder_commitment_tx . htlc_outputs
27482755 . iter ( )
27492756 . map ( |o| o. 0 . cltv_expiry )
27502757 . min ( ) ;
2751- return ConfirmationTarget :: UrgentOnChainSweep ( minimum_expiry) ;
2758+ update_minimum_expiry ( local_minimum_expiry , & mut minimum_expiry) ;
27522759 }
27532760 if self . prev_holder_signed_commitment_tx . as_ref ( ) . map ( |t| !t. htlc_outputs . is_empty ( ) ) . unwrap_or ( false ) {
2754- let minimum_expiry = self . prev_holder_signed_commitment_tx . as_ref ( ) . map ( |t| t. htlc_outputs
2761+ let local_minimum_expiry = self . prev_holder_signed_commitment_tx . as_ref ( ) . map ( |t| t. htlc_outputs
27552762 . iter ( )
27562763 . map ( |o| o. 0 . cltv_expiry )
27572764 . min ( )
27582765 ) . flatten ( ) ;
2759- return ConfirmationTarget :: UrgentOnChainSweep ( minimum_expiry) ;
2766+ update_minimum_expiry ( local_minimum_expiry , & mut minimum_expiry) ;
27602767 }
27612768 if let Some ( txid) = self . current_counterparty_commitment_txid {
27622769 let claimable_outpoints = self . counterparty_claimable_outpoints . get ( & txid) . unwrap ( ) ;
27632770 if !claimable_outpoints. is_empty ( ) {
2764- let minimum_expiry = claimable_outpoints. iter ( ) . map ( |o|o. 0 . cltv_expiry ) . min ( ) ;
2765- return ConfirmationTarget :: UrgentOnChainSweep ( minimum_expiry) ;
2771+ let local_minimum_expiry = claimable_outpoints. iter ( ) . map ( |o|o. 0 . cltv_expiry ) . min ( ) ;
2772+ update_minimum_expiry ( local_minimum_expiry , & mut minimum_expiry) ;
27662773 }
27672774 }
27682775 if let Some ( txid) = self . prev_counterparty_commitment_txid {
27692776 let claimable_outpoints = self . counterparty_claimable_outpoints . get ( & txid) . unwrap ( ) ;
27702777 if !claimable_outpoints. is_empty ( ) {
2771- let minimum_expiry = claimable_outpoints. iter ( ) . map ( |o|o. 0 . cltv_expiry ) . min ( ) ;
2772- return ConfirmationTarget :: UrgentOnChainSweep ( minimum_expiry) ;
2778+ let local_minimum_expiry = claimable_outpoints. iter ( ) . map ( |o|o. 0 . cltv_expiry ) . min ( ) ;
2779+ update_minimum_expiry ( local_minimum_expiry , & mut minimum_expiry) ;
27732780 }
27742781 }
2782+
2783+ if let Some ( global_minimum) = minimum_expiry {
2784+ return ConfirmationTarget :: UrgentOnChainSweep ( Some ( global_minimum) )
2785+ }
2786+
27752787 ConfirmationTarget :: OutputSpendingFee
27762788 }
27772789
0 commit comments