From 475719d01cc5e4aa6566442583c3067f74bbd87c Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Mon, 9 Dec 2019 22:17:31 -0500 Subject: [PATCH] If 2 claimable-outpoint-spending txn are in 1 block, clean up properly This resolves an issue where we will never track 2 on-chain events which are waiting for ANTI_REORG_DELAY at the same height. This partially reverts and fixes "Move our_claim_txn_waiting_first_conf to pending_claim_requests". --- lightning/src/ln/channelmonitor.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lightning/src/ln/channelmonitor.rs b/lightning/src/ln/channelmonitor.rs index 296709d1..72f11fe2 100644 --- a/lightning/src/ln/channelmonitor.rs +++ b/lightning/src/ln/channelmonitor.rs @@ -2418,10 +2418,15 @@ impl ChannelMonitor { // before we could anyway), wait for ANTI_REORG_DELAY and clean the RBF // tracking map. if set_equality { + let new_event = OnchainEvent::Claim { claim_request: ancestor_claimable_txid.0.clone() }; match self.onchain_events_waiting_threshold_conf.entry(height + ANTI_REORG_DELAY - 1) { - hash_map::Entry::Occupied(_) => {}, + hash_map::Entry::Occupied(mut entry) => { + if !entry.get().contains(&new_event) { + entry.get_mut().push(new_event); + } + }, hash_map::Entry::Vacant(entry) => { - entry.insert(vec![OnchainEvent::Claim { claim_request: ancestor_claimable_txid.0.clone()}]); + entry.insert(vec![new_event]); } } } else { // If false, generate new claim request with update outpoint set @@ -2440,10 +2445,15 @@ impl ChannelMonitor { } } for (outpoint, input_material) in claimed_outputs_material.drain(..) { + let new_event = OnchainEvent::ContentiousOutpoint { outpoint, input_material }; match self.onchain_events_waiting_threshold_conf.entry(height + ANTI_REORG_DELAY - 1) { - hash_map::Entry::Occupied(_) => {}, + hash_map::Entry::Occupied(mut entry) => { + if !entry.get().contains(&new_event) { + entry.get_mut().push(new_event); + } + }, hash_map::Entry::Vacant(entry) => { - entry.insert(vec![OnchainEvent::ContentiousOutpoint { outpoint, input_material }]); + entry.insert(vec![new_event]); } } } -- 2.30.2