From 8926c25f5385d458e7a094166ab77d33cbf3c891 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Fri, 29 Jun 2018 16:37:45 -0400 Subject: [PATCH] Also avoid pruning preimages for previous local tx in ChannelMonitor --- src/ln/channelmonitor.rs | 47 +++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/src/ln/channelmonitor.rs b/src/ln/channelmonitor.rs index eefe51f3e..6c372c9be 100644 --- a/src/ln/channelmonitor.rs +++ b/src/ln/channelmonitor.rs @@ -294,26 +294,37 @@ impl ChannelMonitor { } } - let local_signed_commitment_tx = &self.current_local_signed_commitment_tx; - let min_idx = self.get_min_seen_secret(); - let remote_hash_commitment_number = &mut self.remote_hash_commitment_number; - self.payment_preimages.retain(|&k, _| { - for &(ref htlc, _s1, _s2) in &local_signed_commitment_tx.as_ref().expect("Channel needs at least an initial commitment tx !").htlc_outputs { - if k == htlc.payment_hash { - return true + if !self.payment_preimages.is_empty() { + let local_signed_commitment_tx = self.current_local_signed_commitment_tx.as_ref().expect("Channel needs at least an initial commitment tx !"); + let prev_local_signed_commitment_tx = self.prev_local_signed_commitment_tx.as_ref(); + let min_idx = self.get_min_seen_secret(); + let remote_hash_commitment_number = &mut self.remote_hash_commitment_number; + + self.payment_preimages.retain(|&k, _| { + for &(ref htlc, _, _) in &local_signed_commitment_tx.htlc_outputs { + if k == htlc.payment_hash { + return true + } } - } - let contains = if let Some(cn) = remote_hash_commitment_number.get(&k) { - if *cn < min_idx { - return true + if let Some(prev_local_commitment_tx) = prev_local_signed_commitment_tx { + for &(ref htlc, _, _) in prev_local_commitment_tx.htlc_outputs.iter() { + if k == htlc.payment_hash { + return true + } + } } - true - } else { false }; - if contains { - remote_hash_commitment_number.remove(&k); - } - false - }); + let contains = if let Some(cn) = remote_hash_commitment_number.get(&k) { + if *cn < min_idx { + return true + } + true + } else { false }; + if contains { + remote_hash_commitment_number.remove(&k); + } + false + }); + } Ok(()) } -- 2.39.5