Merge pull request #1524 from ViktorTigerstrom/2022-06-update-fail-holding-cell-htlcs...
authorMatt Corallo <649246+TheBlueMatt@users.noreply.github.com>
Thu, 9 Jun 2022 00:12:20 +0000 (17:12 -0700)
committerGitHub <noreply@github.com>
Thu, 9 Jun 2022 00:12:20 +0000 (17:12 -0700)
Pass `counterparty_node_id` to `fail_holding_cell_htlcs`

1  2 
lightning/src/ln/channelmanager.rs

index 990621c221adaabda96f481e4c5005310070e034,9002885a699ea06595ba6c98ee3a56342507aa30..3fa136e9af862403f5957dd245c53d6951ccf3b1
@@@ -3620,7 -3620,10 +3620,10 @@@ impl<Signer: Sign, M: Deref, T: Deref, 
        // Fail a list of HTLCs that were just freed from the holding cell. The HTLCs need to be
        // failed backwards or, if they were one of our outgoing HTLCs, then their failure needs to
        // be surfaced to the user.
-       fn fail_holding_cell_htlcs(&self, mut htlcs_to_fail: Vec<(HTLCSource, PaymentHash)>, channel_id: [u8; 32]) {
+       fn fail_holding_cell_htlcs(
+               &self, mut htlcs_to_fail: Vec<(HTLCSource, PaymentHash)>, channel_id: [u8; 32],
+               _counterparty_node_id: &PublicKey
+       ) {
                for (htlc_src, payment_hash) in htlcs_to_fail.drain(..) {
                        match htlc_src {
                                HTLCSource::PreviousHopData(HTLCPreviousHopData { .. }) => {
                                hash_map::Entry::Vacant(_) => break Err(MsgHandleErrInternal::send_err_msg_no_close("Failed to find corresponding channel".to_owned(), msg.channel_id))
                        }
                };
-               self.fail_holding_cell_htlcs(htlcs_to_fail, msg.channel_id);
+               self.fail_holding_cell_htlcs(htlcs_to_fail, msg.channel_id, counterparty_node_id);
                match res {
                        Ok((pending_forwards, mut pending_failures, finalized_claim_htlcs,
                                short_channel_id, channel_outpoint)) =>
                        }
                };
                post_handle_chan_restoration!(self, chan_restoration_res);
-               self.fail_holding_cell_htlcs(htlcs_failed_forward, msg.channel_id);
+               self.fail_holding_cell_htlcs(htlcs_failed_forward, msg.channel_id, counterparty_node_id);
  
                if let Some(channel_ready_msg) = need_lnd_workaround {
                        self.internal_channel_ready(counterparty_node_id, &channel_ready_msg)?;
                                match chan.maybe_free_holding_cell_htlcs(&self.logger) {
                                        Ok((commitment_opt, holding_cell_failed_htlcs)) => {
                                                if !holding_cell_failed_htlcs.is_empty() {
-                                                       failed_htlcs.push((holding_cell_failed_htlcs, *channel_id));
+                                                       failed_htlcs.push((
+                                                               holding_cell_failed_htlcs,
+                                                               *channel_id,
+                                                               chan.get_counterparty_node_id()
+                                                       ));
                                                }
                                                if let Some((commitment_update, monitor_update)) = commitment_opt {
                                                        if let Err(e) = self.chain_monitor.update_channel(chan.get_funding_txo().unwrap(), monitor_update) {
                }
  
                let has_update = has_monitor_update || !failed_htlcs.is_empty() || !handle_errors.is_empty();
-               for (failures, channel_id) in failed_htlcs.drain(..) {
-                       self.fail_holding_cell_htlcs(failures, channel_id);
+               for (failures, channel_id, counterparty_node_id) in failed_htlcs.drain(..) {
+                       self.fail_holding_cell_htlcs(failures, channel_id, &counterparty_node_id);
                }
  
                for (counterparty_node_id, err) in handle_errors.drain(..) {
@@@ -7358,8 -7365,8 +7365,8 @@@ mod tests 
                        final_cltv_expiry_delta: TEST_FINAL_CLTV,
                };
                let route = find_route(
 -                      &nodes[0].node.get_our_node_id(), &route_params, nodes[0].network_graph, None,
 -                      nodes[0].logger, &scorer, &random_seed_bytes
 +                      &nodes[0].node.get_our_node_id(), &route_params, &nodes[0].network_graph.read_only(),
 +                      None, nodes[0].logger, &scorer, &random_seed_bytes
                ).unwrap();
                nodes[0].node.send_spontaneous_payment(&route, Some(payment_preimage)).unwrap();
                check_added_monitors!(nodes[0], 1);
                // To start (2), send a keysend payment but don't claim it.
                let payment_preimage = PaymentPreimage([42; 32]);
                let route = find_route(
 -                      &nodes[0].node.get_our_node_id(), &route_params, nodes[0].network_graph, None,
 -                      nodes[0].logger, &scorer, &random_seed_bytes
 +                      &nodes[0].node.get_our_node_id(), &route_params, &nodes[0].network_graph.read_only(),
 +                      None, nodes[0].logger, &scorer, &random_seed_bytes
                ).unwrap();
                let (payment_hash, _) = nodes[0].node.send_spontaneous_payment(&route, Some(payment_preimage)).unwrap();
                check_added_monitors!(nodes[0], 1);
                let scorer = test_utils::TestScorer::with_penalty(0);
                let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
                let route = find_route(
 -                      &payer_pubkey, &route_params, network_graph, Some(&first_hops.iter().collect::<Vec<_>>()),
 -                      nodes[0].logger, &scorer, &random_seed_bytes
 +                      &payer_pubkey, &route_params, &network_graph.read_only(),
 +                      Some(&first_hops.iter().collect::<Vec<_>>()), nodes[0].logger, &scorer,
 +                      &random_seed_bytes
                ).unwrap();
  
                let test_preimage = PaymentPreimage([42; 32]);
                let scorer = test_utils::TestScorer::with_penalty(0);
                let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
                let route = find_route(
 -                      &payer_pubkey, &route_params, network_graph, Some(&first_hops.iter().collect::<Vec<_>>()),
 -                      nodes[0].logger, &scorer, &random_seed_bytes
 +                      &payer_pubkey, &route_params, &network_graph.read_only(),
 +                      Some(&first_hops.iter().collect::<Vec<_>>()), nodes[0].logger, &scorer,
 +                      &random_seed_bytes
                ).unwrap();
  
                let test_preimage = PaymentPreimage([42; 32]);
@@@ -7692,7 -7697,7 +7699,7 @@@ pub mod bench 
                        _ => panic!(),
                }
  
 -              let dummy_graph = NetworkGraph::new(genesis_hash);
 +              let dummy_graph = NetworkGraph::new(genesis_hash, &logger_a);
  
                let mut payment_count: u64 = 0;
                macro_rules! send_payment {