From 0150b1f6f6efd91f1fd07bdb263cb30505430415 Mon Sep 17 00:00:00 2001 From: Antoine Riard Date: Tue, 10 Dec 2019 15:45:30 -0500 Subject: [PATCH] Sanitize pending_claim_requests if no more outpoints to claim --- lightning/src/ln/channelmonitor.rs | 34 +++++++++++++++++++----------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/lightning/src/ln/channelmonitor.rs b/lightning/src/ln/channelmonitor.rs index 8c1670ca..154d8ccf 100644 --- a/lightning/src/ln/channelmonitor.rs +++ b/lightning/src/ln/channelmonitor.rs @@ -2414,26 +2414,36 @@ impl ChannelMonitor { } } - // If this is our transaction (or our counterparty spent all the outputs - // 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(mut entry) => { - if !entry.get().contains(&new_event) { - entry.get_mut().push(new_event); + macro_rules! clean_claim_request_after_safety_delay { + () => { + 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(mut entry) => { + if !entry.get().contains(&new_event) { + entry.get_mut().push(new_event); + } + }, + hash_map::Entry::Vacant(entry) => { + entry.insert(vec![new_event]); } - }, - hash_map::Entry::Vacant(entry) => { - entry.insert(vec![new_event]); } } + } + + // If this is our transaction (or our counterparty spent all the outputs + // before we could anyway with same inputs order than us), wait for + // ANTI_REORG_DELAY and clean the RBF tracking map. + if set_equality { + clean_claim_request_after_safety_delay!(); } else { // If false, generate new claim request with update outpoint set for input in tx.input.iter() { if let Some(input_material) = claim_material.per_input_material.remove(&input.previous_output) { claimed_outputs_material.push((input.previous_output, input_material)); } + // If there are no outpoints left to claim in this request, drop it entirely after ANTI_REORG_DELAY. + if claim_material.per_input_material.is_empty() { + clean_claim_request_after_safety_delay!(); + } } //TODO: recompute soonest_timelock to avoid wasting a bit on fees bump_candidates.insert(ancestor_claimable_txid.0.clone(), claim_material.clone()); -- 2.30.2