From 13a83d562221460bb9798a075dd2bd05342a9c36 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Fri, 6 Feb 2026 10:11:01 -0800 Subject: [PATCH 1/8] Refactor missing peer/channel error from ChannelManager message handlers We have the same error being returned from several `ChannelManager` message handlers, so we DRY it up. Doing so also lets us get rid of the inlined `format!` call, which for some reason prevents `rustfmt` from formatting code around it. --- lightning/src/ln/channelmanager.rs | 343 ++++++++++++++++------------- lightning/src/ln/payment_tests.rs | 18 +- lightning/src/ln/reload_tests.rs | 14 +- lightning/src/ln/shutdown_tests.rs | 6 +- 4 files changed, 212 insertions(+), 169 deletions(-) diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index e840d705b8e..a069b01f532 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -939,6 +939,7 @@ struct MsgHandleErrInternal { shutdown_finish: Option<(ShutdownResult, Option<(msgs::ChannelUpdate, NodeId, NodeId)>)>, tx_abort: Option, } + impl MsgHandleErrInternal { fn send_err_msg_no_close(err: String, channel_id: ChannelId) -> Self { Self { @@ -954,6 +955,20 @@ impl MsgHandleErrInternal { } } + fn no_such_peer(counterparty_node_id: &PublicKey, channel_id: ChannelId) -> Self { + let err = + format!("No such peer for the passed counterparty_node_id {counterparty_node_id}"); + Self::send_err_msg_no_close(err, channel_id) + } + + fn no_such_channel_for_peer(counterparty_node_id: &PublicKey, channel_id: ChannelId) -> Self { + let err = format!( + "Got a message for a channel from the wrong node! No such channel_id {} for the passed counterparty_node_id {}", + channel_id, counterparty_node_id + ); + Self::send_err_msg_no_close(err, channel_id) + } + fn from_no_close(err: msgs::LightningError) -> Self { Self { err, closes_channel: false, shutdown_finish: None, tx_abort: None } } @@ -10812,9 +10827,10 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), - common_fields.temporary_channel_id) + MsgHandleErrInternal::no_such_peer( + counterparty_node_id, + common_fields.temporary_channel_id, + ) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -10884,7 +10900,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.common_fields.temporary_channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.common_fields.temporary_channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -10905,7 +10921,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } } }, - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.common_fields.temporary_channel_id)) + hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.common_fields.temporary_channel_id)) } }; let mut pending_events = self.pending_events.lock().unwrap(); @@ -10925,49 +10941,59 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let best_block = *self.best_block.read().unwrap(); let per_peer_state = self.per_peer_state.read().unwrap(); - let peer_state_mutex = per_peer_state.get(counterparty_node_id) - .ok_or_else(|| { - debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.temporary_channel_id) - })?; + let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { + debug_assert!(false); + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.temporary_channel_id) + })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; - let (mut chan, funding_msg_opt, monitor) = - match peer_state.channel_by_id.remove(&msg.temporary_channel_id) - .map(Channel::into_unfunded_inbound_v1) - { - Some(Ok(inbound_chan)) => { - let logger = WithChannelContext::from(&self.logger, &inbound_chan.context, None); - match inbound_chan.funding_created(msg, best_block, &self.signer_provider, &&logger) { - Ok(res) => res, - Err((inbound_chan, err)) => { - // We've already removed this inbound channel from the map in `PeerState` - // above so at this point we just need to clean up any lingering entries - // concerning this channel as it is safe to do so. - debug_assert!(matches!(err, ChannelError::Close(_))); - let mut chan = Channel::from(inbound_chan); - return Err(self.locked_handle_force_close( + let (mut chan, funding_msg_opt, monitor) = match peer_state + .channel_by_id + .remove(&msg.temporary_channel_id) + .map(Channel::into_unfunded_inbound_v1) + { + Some(Ok(inbound_chan)) => { + let logger = WithChannelContext::from(&self.logger, &inbound_chan.context, None); + match inbound_chan.funding_created(msg, best_block, &self.signer_provider, &&logger) + { + Ok(res) => res, + Err((inbound_chan, err)) => { + // We've already removed this inbound channel from the map in `PeerState` + // above so at this point we just need to clean up any lingering entries + // concerning this channel as it is safe to do so. + debug_assert!(matches!(err, ChannelError::Close(_))); + let mut chan = Channel::from(inbound_chan); + return Err(self + .locked_handle_force_close( &mut peer_state.closed_channel_monitor_update_ids, &mut peer_state.in_flight_monitor_updates, err, &mut chan, - ).1); - }, - } - }, - Some(Err(mut chan)) => { - let err_msg = format!("Got an unexpected funding_created message from peer with counterparty_node_id {}", counterparty_node_id); - let err = ChannelError::close(err_msg); - return Err(self.locked_handle_force_close( + ) + .1); + }, + } + }, + Some(Err(mut chan)) => { + let err_msg = format!("Got an unexpected funding_created message from peer with counterparty_node_id {}", counterparty_node_id); + let err = ChannelError::close(err_msg); + return Err(self + .locked_handle_force_close( &mut peer_state.closed_channel_monitor_update_ids, &mut peer_state.in_flight_monitor_updates, err, &mut chan, - ).1); - }, - None => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.temporary_channel_id)) - }; + ) + .1); + }, + None => { + return Err(MsgHandleErrInternal::no_such_channel_for_peer( + counterparty_node_id, + msg.temporary_channel_id, + )) + }, + }; let funded_channel_id = chan.context.channel_id(); @@ -11114,7 +11140,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(&counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), ChannelId([0; 32])) + MsgHandleErrInternal::no_such_peer(&counterparty_node_id, ChannelId([0; 32])) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); @@ -11152,7 +11178,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); @@ -11209,10 +11235,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), - channel_id, - ) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -11228,26 +11251,27 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ Err((error, splice_funding_failed)) => { if let Some(splice_funding_failed) = splice_funding_failed { let pending_events = &mut self.pending_events.lock().unwrap(); - pending_events.push_back((events::Event::SpliceFailed { - channel_id, - counterparty_node_id: *counterparty_node_id, - user_channel_id: channel.context().get_user_id(), - abandoned_funding_txo: splice_funding_failed.funding_txo, - channel_type: splice_funding_failed.channel_type.clone(), - contributed_inputs: splice_funding_failed.contributed_inputs, - contributed_outputs: splice_funding_failed.contributed_outputs, - }, None)); + pending_events.push_back(( + events::Event::SpliceFailed { + channel_id, + counterparty_node_id: *counterparty_node_id, + user_channel_id: channel.context().get_user_id(), + abandoned_funding_txo: splice_funding_failed.funding_txo, + channel_type: splice_funding_failed.channel_type.clone(), + contributed_inputs: splice_funding_failed.contributed_inputs, + contributed_outputs: splice_funding_failed.contributed_outputs, + }, + None, + )); } Err(MsgHandleErrInternal::from_chan_no_close(error, channel_id)) }, } }, - hash_map::Entry::Vacant(_) => { - Err(MsgHandleErrInternal::send_err_msg_no_close(format!( - "Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", - counterparty_node_id), channel_id) - ) - } + hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer( + counterparty_node_id, + channel_id, + )), } } @@ -11289,9 +11313,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(&counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), - msg.channel_id) + MsgHandleErrInternal::no_such_peer(&counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -11386,7 +11408,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } }, hash_map::Entry::Vacant(_) => { - Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + Err(MsgHandleErrInternal::no_such_channel_for_peer(&counterparty_node_id, msg.channel_id)) } } } @@ -11398,9 +11420,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), - msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -11467,7 +11487,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ Ok(()) }, hash_map::Entry::Vacant(_) => { - Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) } } } @@ -11479,9 +11499,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), - msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -11519,7 +11537,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ Ok(persist) }, hash_map::Entry::Vacant(_) => { - Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) } } } @@ -11532,7 +11550,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -11583,7 +11601,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } }, hash_map::Entry::Vacant(_) => { - Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) } } } @@ -11596,13 +11614,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!( - "Can't find a peer matching the passed counterparty node_id {}", - counterparty_node_id - ), - msg.channel_id, - ) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -11681,7 +11693,10 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ }, } } else { - return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)); + return Err(MsgHandleErrInternal::no_such_channel_for_peer( + counterparty_node_id, + msg.channel_id, + )); } } for htlc_source in dropped_htlcs.drain(..) { @@ -11703,13 +11718,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!( - "Can't find a peer matching the passed counterparty node_id {}", - counterparty_node_id - ), - msg.channel_id, - ) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let logger; let tx_err: Option<(_, Result)> = { @@ -11724,10 +11733,12 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ try_channel_entry!(self, peer_state, res, chan_entry); debug_assert_eq!(tx_shutdown_result.is_some(), chan.is_shutdown()); if let Some(msg) = closing_signed { - peer_state.pending_msg_events.push(MessageSendEvent::SendClosingSigned { - node_id: counterparty_node_id.clone(), - msg, - }); + peer_state.pending_msg_events.push( + MessageSendEvent::SendClosingSigned { + node_id: counterparty_node_id.clone(), + msg, + }, + ); } if let Some((tx, close_res)) = tx_shutdown_result { // We're done with this channel, we've got a signed closing transaction and @@ -11735,18 +11746,34 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ // also implies there are no pending HTLCs left on the channel, so we can // fully delete it from tracking (the channel monitor is still around to // watch for old state broadcasts)! - let err = self.locked_handle_funded_coop_close(&mut peer_state.closed_channel_monitor_update_ids, &mut peer_state.in_flight_monitor_updates, close_res, chan); + let err = self.locked_handle_funded_coop_close( + &mut peer_state.closed_channel_monitor_update_ids, + &mut peer_state.in_flight_monitor_updates, + close_res, + chan, + ); chan_entry.remove(); Some((tx, Err(err))) } else { None } } else { - return try_channel_entry!(self, peer_state, Err(ChannelError::close( - "Got a closing_signed message for an unfunded channel!".into())), chan_entry); + return try_channel_entry!( + self, + peer_state, + Err(ChannelError::close( + "Got a closing_signed message for an unfunded channel!".into() + )), + chan_entry + ); } }, - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + hash_map::Entry::Vacant(_) => { + return Err(MsgHandleErrInternal::no_such_channel_for_peer( + counterparty_node_id, + msg.channel_id, + )) + }, } }; mem::drop(per_peer_state); @@ -11796,7 +11823,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -11809,7 +11836,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ "Got an update_add_htlc message for an unfunded channel!".into())), chan_entry); } }, - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) } Ok(()) } @@ -11823,28 +11850,32 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!( - "Can't find a peer matching the passed counterparty node_id {}", - counterparty_node_id - ), - msg.channel_id, - ) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; match peer_state.channel_by_id.entry(msg.channel_id) { hash_map::Entry::Occupied(mut chan_entry) => { if let Some(chan) = chan_entry.get_mut().as_funded_mut() { - let res = try_channel_entry!(self, peer_state, chan.update_fulfill_htlc(&msg), chan_entry); + let res = try_channel_entry!( + self, + peer_state, + chan.update_fulfill_htlc(&msg), + chan_entry + ); if let HTLCSource::PreviousHopData(prev_hop) = &res.0 { - let logger = WithChannelContext::from(&self.logger, &chan.context, None); + let logger = + WithChannelContext::from(&self.logger, &chan.context, None); log_trace!(logger, "Holding the next revoke_and_ack until the preimage is durably persisted in the inbound edge's ChannelMonitor", ); - peer_state.actions_blocking_raa_monitor_updates.entry(msg.channel_id) + peer_state + .actions_blocking_raa_monitor_updates + .entry(msg.channel_id) .or_insert_with(Vec::new) - .push(RAAMonitorUpdateBlockingAction::from_prev_hop_data(&prev_hop)); + .push(RAAMonitorUpdateBlockingAction::from_prev_hop_data( + &prev_hop, + )); } // Note that we do not need to push an `actions_blocking_raa_monitor_updates` // entry here, even though we *do* need to block the next RAA monitor update. @@ -11852,15 +11883,30 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ // `ReleaseRAAChannelMonitorUpdate` action to the event generated when the // outbound HTLC is claimed. This is guaranteed to all complete before we // process the RAA as messages are processed from single peers serially. - funding_txo = chan.funding.get_funding_txo().expect("We won't accept a fulfill until funded"); + funding_txo = chan + .funding + .get_funding_txo() + .expect("We won't accept a fulfill until funded"); next_user_channel_id = chan.context.get_user_id(); res } else { - return try_channel_entry!(self, peer_state, Err(ChannelError::close( - "Got an update_fulfill_htlc message for an unfunded channel!".into())), chan_entry); + return try_channel_entry!( + self, + peer_state, + Err(ChannelError::close( + "Got an update_fulfill_htlc message for an unfunded channel!" + .into() + )), + chan_entry + ); } }, - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + hash_map::Entry::Vacant(_) => { + return Err(MsgHandleErrInternal::no_such_channel_for_peer( + counterparty_node_id, + msg.channel_id, + )) + }, } }; self.claim_funds_internal( @@ -11888,7 +11934,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -11901,7 +11947,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ "Got an update_fail_htlc message for an unfunded channel!".into())), chan_entry); } }, - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) } Ok(()) } @@ -11914,7 +11960,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -11932,7 +11978,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } Ok(()) }, - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) } } @@ -11943,7 +11989,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -11998,7 +12044,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } Ok(()) }, - hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) } } @@ -12008,7 +12054,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -12040,7 +12086,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } Ok(()) }, - hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), channel_id)) + hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, channel_id)) } } @@ -12150,7 +12196,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let mut peer_state_lock = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) }).map(|mtx| mtx.lock().unwrap())?; let peer_state = &mut *peer_state_lock; match peer_state.channel_by_id.entry(msg.channel_id) { @@ -12186,7 +12232,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ "Got a revoke_and_ack message for an unfunded channel!".into())), chan_entry); } }, - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) } }; self.fail_holding_cell_htlcs(htlcs_to_fail, msg.channel_id, counterparty_node_id); @@ -12203,7 +12249,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -12217,7 +12263,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ "Got an update_fee message for an unfunded channel!".into())), chan_entry); } }, - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) } Ok(()) } @@ -12227,9 +12273,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), - msg.channel_id + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id ) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); @@ -12275,9 +12319,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ return try_channel_entry!(self, peer_state, err, chan_entry); } }, - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close( - format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), - msg.channel_id + hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id )) } } @@ -12288,7 +12330,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -12318,7 +12360,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ "Got an announcement_signatures message for an unfunded channel!".into())), chan_entry); } }, - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", counterparty_node_id), msg.channel_id)) + hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) } Ok(()) } @@ -12387,9 +12429,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), - msg.channel_id + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id ) })?; let logger = WithContext::from(&self.logger, Some(*counterparty_node_id), Some(msg.channel_id), None); @@ -12478,9 +12518,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ my_current_funding_locked: None, }, }); - return Err(MsgHandleErrInternal::send_err_msg_no_close( - format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", - counterparty_node_id), msg.channel_id) + return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id) ) } } @@ -12506,7 +12544,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -12516,10 +12554,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ // Look for the channel match peer_state.channel_by_id.entry(msg.channel_id) { - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::send_err_msg_no_close(format!( - "Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}, channel_id {}", - counterparty_node_id, msg.channel_id, - ), msg.channel_id)), + hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)), hash_map::Entry::Occupied(mut chan_entry) => { if self.config.read().unwrap().reject_inbound_splices { let err = ChannelError::WarnAndDisconnect( @@ -12553,17 +12588,14 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let peer_state_mutex = per_peer_state.get(counterparty_node_id) .ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close(format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), msg.channel_id) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; // Look for the channel match peer_state.channel_by_id.entry(msg.channel_id) { - hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::send_err_msg_no_close(format!( - "Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", - counterparty_node_id - ), msg.channel_id)), + hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)), hash_map::Entry::Occupied(mut chan_entry) => { if let Some(ref mut funded_channel) = chan_entry.get_mut().as_funded_mut() { let splice_ack_res = funded_channel.splice_ack( @@ -12588,13 +12620,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { debug_assert!(false); - MsgHandleErrInternal::send_err_msg_no_close( - format!( - "Can't find a peer matching the passed counterparty node_id {}", - counterparty_node_id - ), - msg.channel_id, - ) + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -12602,11 +12628,10 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ // Look for the channel match peer_state.channel_by_id.entry(msg.channel_id) { hash_map::Entry::Vacant(_) => { - let err = format!( - "Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", + return Err(MsgHandleErrInternal::no_such_channel_for_peer( counterparty_node_id, - ); - return Err(MsgHandleErrInternal::send_err_msg_no_close(err, msg.channel_id)); + msg.channel_id, + )); }, hash_map::Entry::Occupied(mut chan_entry) => { if let Some(chan) = chan_entry.get_mut().as_funded_mut() { diff --git a/lightning/src/ln/payment_tests.rs b/lightning/src/ln/payment_tests.rs index 6e47e21ca8b..32a93d20936 100644 --- a/lightning/src/ln/payment_tests.rs +++ b/lightning/src/ln/payment_tests.rs @@ -895,8 +895,13 @@ fn do_retry_with_no_persist(confirm_before_reload: bool) { } => { assert_eq!(node_id, node_b_id); nodes[1].node.handle_error(node_a_id, msg); - check_closed_event(&nodes[1], 1, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", - &node_b_id)) }, &[node_a_id], 100000); + let peer_msg = format!( + "Got a message for a channel from the wrong node! No such channel_id {} for the passed counterparty_node_id {}", + chan_id, node_b_id + ); + let reason = + ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(peer_msg) }; + check_closed_event(&nodes[1], 1, reason, &[node_a_id], 100000); check_added_monitors(&nodes[1], 1); assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1); nodes[1].tx_broadcaster.clear(); @@ -1101,11 +1106,12 @@ fn do_test_completed_payment_not_retryable_on_reload(use_dust: bool) { } => { assert_eq!(node_id, node_b_id); nodes[1].node.handle_error(node_a_id, msg); - let msg = format!( - "Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", - &node_b_id + let peer_msg = format!( + "Got a message for a channel from the wrong node! No such channel_id {} for the passed counterparty_node_id {}", + chan_id, node_b_id ); - let reason = ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(msg) }; + let reason = + ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(peer_msg) }; check_closed_event(&nodes[1], 1, reason, &[node_a_id], 100000); check_added_monitors(&nodes[1], 1); bs_commitment_tx = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0); diff --git a/lightning/src/ln/reload_tests.rs b/lightning/src/ln/reload_tests.rs index c7e7175602d..919ed969161 100644 --- a/lightning/src/ln/reload_tests.rs +++ b/lightning/src/ln/reload_tests.rs @@ -691,7 +691,11 @@ fn do_test_data_loss_protect(reconnect_panicing: bool, substantially_old: bool, if let MessageSendEvent::HandleError { ref action, .. } = nodes[0].node.get_and_clear_pending_msg_events()[1] { match action { &ErrorAction::SendErrorMessage { ref msg } => { - assert_eq!(msg.data, format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", &nodes[1].node.get_our_node_id())); + let peer_msg = format!( + "Got a message for a channel from the wrong node! No such channel_id {} for the passed counterparty_node_id {}", + chan.2, nodes[1].node.get_our_node_id() + ); + assert_eq!(msg.data, peer_msg); err_msgs_0.push(msg.clone()); }, _ => panic!("Unexpected event!"), @@ -703,8 +707,12 @@ fn do_test_data_loss_protect(reconnect_panicing: bool, substantially_old: bool, nodes[1].node.handle_error(nodes[0].node.get_our_node_id(), &err_msgs_0[0]); assert!(nodes[1].node.list_usable_channels().is_empty()); check_added_monitors(&nodes[1], 1); - check_closed_event(&nodes[1], 1, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", &nodes[1].node.get_our_node_id())) } - , &[nodes[0].node.get_our_node_id()], 1000000); + let peer_msg = format!( + "Got a message for a channel from the wrong node! No such channel_id {} for the passed counterparty_node_id {}", + chan.2, nodes[1].node.get_our_node_id() + ); + let reason = ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(peer_msg) }; + check_closed_event(&nodes[1], 1, reason, &[nodes[0].node.get_our_node_id()], 1000000); check_closed_broadcast!(nodes[1], false); } } diff --git a/lightning/src/ln/shutdown_tests.rs b/lightning/src/ln/shutdown_tests.rs index 50c8f72f9be..870f00ee9df 100644 --- a/lightning/src/ln/shutdown_tests.rs +++ b/lightning/src/ln/shutdown_tests.rs @@ -836,7 +836,11 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) { // closing_signed so we do it ourselves check_closed_broadcast!(nodes[1], false); check_added_monitors(&nodes[1], 1); - let reason = ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(format!("Got a message for a channel from the wrong node! No such channel for the passed counterparty_node_id {}", &node_b_id)) }; + let peer_msg = format!( + "Got a message for a channel from the wrong node! No such channel_id {} for the passed counterparty_node_id {}", + chan_1.2, node_b_id + ); + let reason = ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(peer_msg) }; check_closed_event(&nodes[1], 1, reason, &[node_a_id], 100000); } From b967390934c871b13c4af3713908e7530f499aae Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Fri, 6 Feb 2026 13:50:43 -0800 Subject: [PATCH 2/8] Refactor missing peer/channel APIError from ChannelManager methods We have the same error being returned from several `ChannelManager` API methods, so we DRY it up. Doing so also lets us get rid of the inlined `format!` call, which for some reason prevents `rustfmt` from formatting code around it. --- lightning/src/ln/channelmanager.rs | 143 +++++++++++------------------ lightning/src/ln/payment_tests.rs | 2 +- lightning/src/util/errors.rs | 25 +++++ 3 files changed, 80 insertions(+), 90 deletions(-) diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index a069b01f532..efd5026ff25 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -3844,8 +3844,9 @@ impl< { let per_peer_state = self.per_peer_state.read().unwrap(); - let peer_state_mutex = per_peer_state.get(counterparty_node_id) - .ok_or_else(|| APIError::ChannelUnavailable { err: format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}") })?; + let peer_state_mutex = per_peer_state + .get(counterparty_node_id) + .ok_or_else(|| APIError::no_such_peer(counterparty_node_id))?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -3909,12 +3910,7 @@ impl< } }, hash_map::Entry::Vacant(_) => { - return Err(APIError::ChannelUnavailable { - err: format!( - "Channel with id {} not found for the passed counterparty node_id {}", - chan_id, counterparty_node_id, - ), - }); + return Err(APIError::no_such_channel_for_peer(chan_id, counterparty_node_id)); }, } } @@ -4209,11 +4205,7 @@ impl< ) -> Result<(), APIError> { let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = - per_peer_state.get(peer_node_id).ok_or_else(|| APIError::ChannelUnavailable { - err: format!( - "Can't find a peer matching the passed counterparty node_id {peer_node_id}", - ), - })?; + per_peer_state.get(peer_node_id).ok_or_else(|| APIError::no_such_peer(peer_node_id))?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; let logger = WithContext::from(&self.logger, Some(*peer_node_id), Some(*channel_id), None); @@ -4257,11 +4249,7 @@ impl< // events anyway. Ok(()) } else { - Err(APIError::ChannelUnavailable { - err: format!( - "Channel with id {channel_id} not found for the passed counterparty node_id {peer_node_id}", - ), - }) + Err(APIError::no_such_channel_for_peer(channel_id, peer_node_id)) } } @@ -4605,11 +4593,10 @@ impl< ) -> Result<(), APIError> { let per_peer_state = self.per_peer_state.read().unwrap(); - let peer_state_mutex = match per_peer_state.get(counterparty_node_id).ok_or_else(|| { - APIError::ChannelUnavailable { - err: format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), - } - }) { + let peer_state_mutex = match per_peer_state + .get(counterparty_node_id) + .ok_or_else(|| APIError::no_such_peer(counterparty_node_id)) + { Ok(p) => p, Err(e) => return Err(e), }; @@ -4654,12 +4641,9 @@ impl< }) } }, - hash_map::Entry::Vacant(_) => Err(APIError::ChannelUnavailable { - err: format!( - "Channel with id {} not found for the passed counterparty node_id {}", - channel_id, counterparty_node_id, - ), - }), + hash_map::Entry::Vacant(_) => { + Err(APIError::no_such_channel_for_peer(channel_id, counterparty_node_id)) + }, } } @@ -4685,11 +4669,10 @@ impl< ) -> Result<(), APIError> { let per_peer_state = self.per_peer_state.read().unwrap(); - let peer_state_mutex = match per_peer_state.get(counterparty_node_id).ok_or_else(|| { - APIError::ChannelUnavailable { - err: format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}"), - } - }) { + let peer_state_mutex = match per_peer_state + .get(counterparty_node_id) + .ok_or_else(|| APIError::no_such_peer(counterparty_node_id)) + { Ok(p) => p, Err(e) => return Err(e), }; @@ -4742,12 +4725,9 @@ impl< }) } }, - hash_map::Entry::Vacant(_) => Err(APIError::ChannelUnavailable { - err: format!( - "Channel with id {} not found for the passed counterparty node_id {}", - channel_id, counterparty_node_id, - ), - }), + hash_map::Entry::Vacant(_) => { + Err(APIError::no_such_channel_for_peer(channel_id, counterparty_node_id)) + }, } } @@ -5965,12 +5945,12 @@ impl< /// which checks the correctness of the funding transaction given the associated channel. #[rustfmt::skip] fn funding_transaction_generated_intern) -> Result>( - &self, temporary_channel_id: ChannelId, counterparty_node_id: PublicKey, funding_transaction: Transaction, is_batch_funding: bool, - mut find_funding_output: FundingOutput, is_manual_broadcast: bool, - ) -> Result<(), APIError> { + &self, temporary_channel_id: ChannelId, counterparty_node_id: PublicKey, funding_transaction: Transaction, is_batch_funding: bool, + mut find_funding_output: FundingOutput, is_manual_broadcast: bool, + ) -> Result<(), APIError> { let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(&counterparty_node_id) - .ok_or_else(|| APIError::ChannelUnavailable { err: format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}") })?; + .ok_or_else(|| APIError::no_such_peer(&counterparty_node_id))?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -6410,9 +6390,7 @@ impl< let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex_opt = per_peer_state.get(counterparty_node_id); if peer_state_mutex_opt.is_none() { - funding_tx_signed_result = Err(APIError::ChannelUnavailable { - err: format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}") - }); + funding_tx_signed_result = Err(APIError::no_such_peer(counterparty_node_id)); return NotifyOption::SkipPersistNoEvents; } @@ -6550,12 +6528,8 @@ impl< } }, hash_map::Entry::Vacant(_) => { - funding_tx_signed_result = Err(APIError::ChannelUnavailable { - err: format!( - "Channel with id {} not found for the passed counterparty node_id {}", - channel_id, counterparty_node_id - ), - }); + funding_tx_signed_result = + Err(APIError::no_such_channel_for_peer(channel_id, counterparty_node_id)); return NotifyOption::SkipPersistNoEvents; }, } @@ -6638,15 +6612,16 @@ impl< let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self); let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(counterparty_node_id) - .ok_or_else(|| APIError::ChannelUnavailable { err: format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}") })?; + .ok_or_else(|| APIError::no_such_peer(counterparty_node_id))?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; for channel_id in channel_ids { if !peer_state.has_channel(channel_id) { - return Err(APIError::ChannelUnavailable { - err: format!("Channel with id {} not found for the passed counterparty node_id {}", channel_id, counterparty_node_id), - }); + return Err(APIError::no_such_channel_for_peer( + channel_id, + counterparty_node_id, + )); }; } for channel_id in channel_ids { @@ -6741,12 +6716,9 @@ impl< let outbound_scid_alias = { let peer_state_lock = self.per_peer_state.read().unwrap(); - let peer_state_mutex = - peer_state_lock.get(&next_node_id).ok_or_else(|| APIError::ChannelUnavailable { - err: format!( - "Can't find a peer matching the passed counterparty node_id {next_node_id}" - ), - })?; + let peer_state_mutex = peer_state_lock + .get(&next_node_id) + .ok_or_else(|| APIError::no_such_peer(&next_node_id))?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; match peer_state.channel_by_id.get(next_hop_channel_id) { @@ -6779,11 +6751,10 @@ impl< logger, "Channel not found when attempting to forward intercepted HTLC" ); - return Err(APIError::ChannelUnavailable { - err: format!( - "Channel with id {next_hop_channel_id} not found for the passed counterparty node_id {next_node_id}" - ), - }); + return Err(APIError::no_such_channel_for_peer( + next_hop_channel_id, + &next_node_id, + )); }, } }; @@ -10565,11 +10536,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { log_error!(logger, "Can't find peer matching the passed counterparty node_id"); - - let err_str = format!( - "Can't find a peer matching the passed counterparty node_id {counterparty_node_id}" - ); - APIError::ChannelUnavailable { err: err_str } + APIError::no_such_peer(counterparty_node_id) })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -13236,9 +13203,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex_opt = per_peer_state.get(counterparty_node_id); if peer_state_mutex_opt.is_none() { - result = Err(APIError::ChannelUnavailable { - err: format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}") - }); + result = Err(APIError::no_such_peer(counterparty_node_id)); return notify; } @@ -13272,10 +13237,10 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } }, hash_map::Entry::Vacant(_) => { - result = Err(APIError::ChannelUnavailable { - err: format!("Channel with id {} not found for the passed counterparty node_id {}", - channel_id, counterparty_node_id), - }); + result = Err(APIError::no_such_channel_for_peer( + channel_id, + counterparty_node_id, + )); }, } @@ -13293,9 +13258,7 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let initiator = { let per_peer_state = self.per_peer_state.read().unwrap(); let peer_state_mutex = per_peer_state.get(counterparty_node_id) - .ok_or_else(|| APIError::ChannelUnavailable { - err: format!("Can't find a peer matching the passed counterparty node_id {counterparty_node_id}") - })?; + .ok_or_else(|| APIError::no_such_peer(counterparty_node_id))?; let mut peer_state = peer_state_mutex.lock().unwrap(); match peer_state.channel_by_id.entry(*channel_id) { hash_map::Entry::Occupied(mut chan_entry) => { @@ -13307,10 +13270,12 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ }) } }, - hash_map::Entry::Vacant(_) => return Err(APIError::ChannelUnavailable { - err: format!("Channel with id {} not found for the passed counterparty node_id {}", - channel_id, counterparty_node_id), - }), + hash_map::Entry::Vacant(_) => { + return Err(APIError::no_such_channel_for_peer( + channel_id, + counterparty_node_id, + )) + }, } }; self.check_free_holding_cells(); @@ -20340,13 +20305,13 @@ mod tests { #[rustfmt::skip] fn check_unkown_peer_error(res_err: Result, expected_public_key: PublicKey) { - let expected_message = format!("Can't find a peer matching the passed counterparty node_id {}", expected_public_key); + let expected_message = format!("No such peer for the passed counterparty_node_id {}", expected_public_key); check_api_error_message(expected_message, res_err) } #[rustfmt::skip] fn check_channel_unavailable_error(res_err: Result, expected_channel_id: ChannelId, peer_node_id: PublicKey) { - let expected_message = format!("Channel with id {} not found for the passed counterparty node_id {}", expected_channel_id, peer_node_id); + let expected_message = format!("No such channel_id {} for the passed counterparty_node_id {}", expected_channel_id, peer_node_id); check_api_error_message(expected_message, res_err) } diff --git a/lightning/src/ln/payment_tests.rs b/lightning/src/ln/payment_tests.rs index 32a93d20936..0eace2eab08 100644 --- a/lightning/src/ln/payment_tests.rs +++ b/lightning/src/ln/payment_tests.rs @@ -2312,7 +2312,7 @@ fn do_test_intercepted_payment(test: InterceptTest) { let unknown_chan_id_err = nodes[1].node.forward_intercepted_htlc(intercept_id, &chan_id, node_c_id, outbound_amt); let err = format!( - "Channel with id {} not found for the passed counterparty node_id {}", + "No such channel_id {} for the passed counterparty_node_id {}", chan_id, node_c_id, ); assert_eq!(unknown_chan_id_err, Err(APIError::ChannelUnavailable { err })); diff --git a/lightning/src/util/errors.rs b/lightning/src/util/errors.rs index eaaf0130ca2..cd72d60327f 100644 --- a/lightning/src/util/errors.rs +++ b/lightning/src/util/errors.rs @@ -9,7 +9,10 @@ //! Error types live here. +use bitcoin::secp256k1::PublicKey; + use crate::ln::script::ShutdownScript; +use crate::ln::types::ChannelId; #[allow(unused_imports)] use crate::prelude::*; @@ -90,6 +93,28 @@ impl fmt::Debug for APIError { } } +impl APIError { + pub(crate) fn no_such_peer(counterparty_node_id: &PublicKey) -> Self { + Self::ChannelUnavailable { + err: format!( + "No such peer for the passed counterparty_node_id {}", + counterparty_node_id + ), + } + } + + pub(crate) fn no_such_channel_for_peer( + channel_id: &ChannelId, counterparty_node_id: &PublicKey, + ) -> Self { + Self::ChannelUnavailable { + err: format!( + "No such channel_id {} for the passed counterparty_node_id {}", + channel_id, counterparty_node_id + ), + } + } +} + impl_writeable_tlv_based_enum_upgradable!(APIError, (0, APIMisuseError) => { (0, err, required), }, (2, FeeRateTooHigh) => { From 4d35de573cac7ac4fe610687b6010cd4284346f4 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Tue, 10 Feb 2026 14:08:59 -0800 Subject: [PATCH 3/8] Rustfmt ChannelManager::internal_tx_complete --- lightning/src/ln/channelmanager.rs | 60 +++++++++++++++++------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index efd5026ff25..9a62d775e2e 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -11274,14 +11274,14 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ }) } - #[rustfmt::skip] - fn internal_tx_complete(&self, counterparty_node_id: PublicKey, msg: &msgs::TxComplete) -> Result { + fn internal_tx_complete( + &self, counterparty_node_id: PublicKey, msg: &msgs::TxComplete, + ) -> Result { let per_peer_state = self.per_peer_state.read().unwrap(); - let peer_state_mutex = per_peer_state.get(&counterparty_node_id) - .ok_or_else(|| { - debug_assert!(false); - MsgHandleErrInternal::no_such_peer(&counterparty_node_id, msg.channel_id) - })?; + let peer_state_mutex = per_peer_state.get(&counterparty_node_id).ok_or_else(|| { + debug_assert!(false); + MsgHandleErrInternal::no_such_peer(&counterparty_node_id, msg.channel_id) + })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; match peer_state.channel_by_id.entry(msg.channel_id) { @@ -11291,8 +11291,11 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ Ok(tx_complete_result) => { let mut persist = NotifyOption::SkipPersistNoEvents; - if let Some(interactive_tx_msg_send) = tx_complete_result.interactive_tx_msg_send { - let msg_send_event = interactive_tx_msg_send.into_msg_send_event(counterparty_node_id); + if let Some(interactive_tx_msg_send) = + tx_complete_result.interactive_tx_msg_send + { + let msg_send_event = + interactive_tx_msg_send.into_msg_send_event(counterparty_node_id); peer_state.pending_msg_events.push(msg_send_event); persist = NotifyOption::SkipPersistHandleEvents; }; @@ -11307,7 +11310,6 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ }, None, )); - // // We have a successful signing session that we need to persist. persist = NotifyOption::DoPersist; } @@ -11345,10 +11347,12 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ }); } if let Some(tx_signatures) = tx_signatures { - peer_state.pending_msg_events.push(MessageSendEvent::SendTxSignatures { - node_id: counterparty_node_id, - msg: tx_signatures, - }); + peer_state.pending_msg_events.push( + MessageSendEvent::SendTxSignatures { + node_id: counterparty_node_id, + msg: tx_signatures, + }, + ); } // We have a successful signing session that we need to persist. @@ -11360,23 +11364,27 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ Err((error, splice_funding_failed)) => { if let Some(splice_funding_failed) = splice_funding_failed { let pending_events = &mut self.pending_events.lock().unwrap(); - pending_events.push_back((events::Event::SpliceFailed { - channel_id: msg.channel_id, - counterparty_node_id, - user_channel_id: chan.context().get_user_id(), - abandoned_funding_txo: splice_funding_failed.funding_txo, - channel_type: splice_funding_failed.channel_type.clone(), - contributed_inputs: splice_funding_failed.contributed_inputs, - contributed_outputs: splice_funding_failed.contributed_outputs, - }, None)); + pending_events.push_back(( + events::Event::SpliceFailed { + channel_id: msg.channel_id, + counterparty_node_id, + user_channel_id: chan.context().get_user_id(), + abandoned_funding_txo: splice_funding_failed.funding_txo, + channel_type: splice_funding_failed.channel_type.clone(), + contributed_inputs: splice_funding_failed.contributed_inputs, + contributed_outputs: splice_funding_failed.contributed_outputs, + }, + None, + )); } Err(MsgHandleErrInternal::from_chan_no_close(error, msg.channel_id)) }, } }, - hash_map::Entry::Vacant(_) => { - Err(MsgHandleErrInternal::no_such_channel_for_peer(&counterparty_node_id, msg.channel_id)) - } + hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer( + &counterparty_node_id, + msg.channel_id, + )), } } From 146f29a9a9edcac5c1a1cd6b52c28a300d7aced7 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Tue, 10 Feb 2026 14:09:33 -0800 Subject: [PATCH 4/8] Rustfmt ChannelManager::internal_tx_signatures --- lightning/src/ln/channelmanager.rs | 52 ++++++++++++++++++------------ 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index 9a62d775e2e..dfdbfe4c07d 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -11388,15 +11388,14 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } } - #[rustfmt::skip] - fn internal_tx_signatures(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxSignatures) - -> Result<(), MsgHandleErrInternal> { + fn internal_tx_signatures( + &self, counterparty_node_id: &PublicKey, msg: &msgs::TxSignatures, + ) -> Result<(), MsgHandleErrInternal> { let per_peer_state = self.per_peer_state.read().unwrap(); - let peer_state_mutex = per_peer_state.get(counterparty_node_id) - .ok_or_else(|| { - debug_assert!(false); - MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) - })?; + let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { + debug_assert!(false); + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) + })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; match peer_state.channel_by_id.entry(msg.channel_id) { @@ -11424,19 +11423,28 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ debug_assert!(counterparty_initial_commitment_signed_result.is_none()); if let Some(tx_signatures) = tx_signatures { - peer_state.pending_msg_events.push(MessageSendEvent::SendTxSignatures { - node_id: *counterparty_node_id, - msg: tx_signatures, - }); + peer_state.pending_msg_events.push( + MessageSendEvent::SendTxSignatures { + node_id: *counterparty_node_id, + msg: tx_signatures, + }, + ); } if let Some(splice_locked) = splice_locked { - peer_state.pending_msg_events.push(MessageSendEvent::SendSpliceLocked { - node_id: *counterparty_node_id, - msg: splice_locked, - }); + peer_state.pending_msg_events.push( + MessageSendEvent::SendSpliceLocked { + node_id: *counterparty_node_id, + msg: splice_locked, + }, + ); } if let Some((ref funding_tx, ref tx_type)) = funding_tx { - self.broadcast_interactive_funding(chan, funding_tx, Some(tx_type.clone()), &self.logger); + self.broadcast_interactive_funding( + chan, + funding_tx, + Some(tx_type.clone()), + &self.logger, + ); } if let Some(splice_negotiated) = splice_negotiated { self.pending_events.lock().unwrap().push_back(( @@ -11446,7 +11454,8 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ user_channel_id: chan.context.get_user_id(), new_funding_txo: splice_negotiated.funding_txo, channel_type: splice_negotiated.channel_type, - new_funding_redeem_script: splice_negotiated.funding_redeem_script, + new_funding_redeem_script: splice_negotiated + .funding_redeem_script, }, None, )); @@ -11461,9 +11470,10 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } Ok(()) }, - hash_map::Entry::Vacant(_) => { - Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) - } + hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer( + counterparty_node_id, + msg.channel_id, + )), } } From 0eadc17ebea02f483e2fb36d9e3392928fd39487 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Tue, 10 Feb 2026 14:10:07 -0800 Subject: [PATCH 5/8] Rustfmt ChannelManager::internal_tx_abort --- lightning/src/ln/channelmanager.rs | 46 ++++++++++++++++-------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index dfdbfe4c07d..3a3003eca9d 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -11477,21 +11477,21 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } } - #[rustfmt::skip] - fn internal_tx_abort(&self, counterparty_node_id: &PublicKey, msg: &msgs::TxAbort) - -> Result { + fn internal_tx_abort( + &self, counterparty_node_id: &PublicKey, msg: &msgs::TxAbort, + ) -> Result { let per_peer_state = self.per_peer_state.read().unwrap(); - let peer_state_mutex = per_peer_state.get(counterparty_node_id) - .ok_or_else(|| { - debug_assert!(false); - MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) - })?; + let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { + debug_assert!(false); + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) + })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; match peer_state.channel_by_id.entry(msg.channel_id) { hash_map::Entry::Occupied(mut chan_entry) => { let res = chan_entry.get_mut().tx_abort(msg, &self.logger); - let (tx_abort, splice_failed) = try_channel_entry!(self, peer_state, res, chan_entry); + let (tx_abort, splice_failed) = + try_channel_entry!(self, peer_state, res, chan_entry); let persist = if tx_abort.is_some() || splice_failed.is_some() { NotifyOption::DoPersist @@ -11508,22 +11508,26 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ if let Some(splice_funding_failed) = splice_failed { let pending_events = &mut self.pending_events.lock().unwrap(); - pending_events.push_back((events::Event::SpliceFailed { - channel_id: msg.channel_id, - counterparty_node_id: *counterparty_node_id, - user_channel_id: chan_entry.get().context().get_user_id(), - abandoned_funding_txo: splice_funding_failed.funding_txo, - channel_type: splice_funding_failed.channel_type, - contributed_inputs: splice_funding_failed.contributed_inputs, - contributed_outputs: splice_funding_failed.contributed_outputs, - }, None)); + pending_events.push_back(( + events::Event::SpliceFailed { + channel_id: msg.channel_id, + counterparty_node_id: *counterparty_node_id, + user_channel_id: chan_entry.get().context().get_user_id(), + abandoned_funding_txo: splice_funding_failed.funding_txo, + channel_type: splice_funding_failed.channel_type, + contributed_inputs: splice_funding_failed.contributed_inputs, + contributed_outputs: splice_funding_failed.contributed_outputs, + }, + None, + )); } Ok(persist) }, - hash_map::Entry::Vacant(_) => { - Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) - } + hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer( + counterparty_node_id, + msg.channel_id, + )), } } From e1d0566dd2d8f163986e4ee0fa971a8986b06112 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Tue, 10 Feb 2026 14:10:23 -0800 Subject: [PATCH 6/8] Rustfmt ChannelManager::internal_splice_ack --- lightning/src/ln/channelmanager.rs | 40 ++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index 3a3003eca9d..89056ef11e3 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -12571,33 +12571,47 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } /// Handle incoming splice request ack, transition channel to splice-pending (unless some check fails). - #[rustfmt::skip] - fn internal_splice_ack(&self, counterparty_node_id: &PublicKey, msg: &msgs::SpliceAck) -> Result<(), MsgHandleErrInternal> { + fn internal_splice_ack( + &self, counterparty_node_id: &PublicKey, msg: &msgs::SpliceAck, + ) -> Result<(), MsgHandleErrInternal> { let per_peer_state = self.per_peer_state.read().unwrap(); - let peer_state_mutex = per_peer_state.get(counterparty_node_id) - .ok_or_else(|| { - debug_assert!(false); - MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) - })?; + let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { + debug_assert!(false); + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) + })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; // Look for the channel match peer_state.channel_by_id.entry(msg.channel_id) { - hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)), + hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer( + counterparty_node_id, + msg.channel_id, + )), hash_map::Entry::Occupied(mut chan_entry) => { if let Some(ref mut funded_channel) = chan_entry.get_mut().as_funded_mut() { let splice_ack_res = funded_channel.splice_ack( - msg, &self.signer_provider, &self.entropy_source, - &self.get_our_node_id(), &self.logger + msg, + &self.signer_provider, + &self.entropy_source, + &self.get_our_node_id(), + &self.logger, ); - let tx_msg_opt = try_channel_entry!(self, peer_state, splice_ack_res, chan_entry); + let tx_msg_opt = + try_channel_entry!(self, peer_state, splice_ack_res, chan_entry); if let Some(tx_msg) = tx_msg_opt { - peer_state.pending_msg_events.push(tx_msg.into_msg_send_event(counterparty_node_id.clone())); + peer_state + .pending_msg_events + .push(tx_msg.into_msg_send_event(counterparty_node_id.clone())); } Ok(()) } else { - try_channel_entry!(self, peer_state, Err(ChannelError::close("Channel is not funded, cannot be spliced".into())), chan_entry) + try_channel_entry!( + self, + peer_state, + Err(ChannelError::close("Channel is not funded, cannot be spliced".into())), + chan_entry + ) } }, } From 775261921261ff91b94781edfce10e08a0b0d2be Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Tue, 10 Feb 2026 14:12:12 -0800 Subject: [PATCH 7/8] Rustfmt ChannelManager::internal_splice_init --- lightning/src/ln/channelmanager.rs | 38 ++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index 89056ef11e3..eb526c41f19 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -12527,14 +12527,14 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } /// Handle incoming splice request, transition channel to splice-pending (unless some check fails). - #[rustfmt::skip] - fn internal_splice_init(&self, counterparty_node_id: &PublicKey, msg: &msgs::SpliceInit) -> Result<(), MsgHandleErrInternal> { + fn internal_splice_init( + &self, counterparty_node_id: &PublicKey, msg: &msgs::SpliceInit, + ) -> Result<(), MsgHandleErrInternal> { let per_peer_state = self.per_peer_state.read().unwrap(); - let peer_state_mutex = per_peer_state.get(counterparty_node_id) - .ok_or_else(|| { - debug_assert!(false); - MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) - })?; + let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { + debug_assert!(false); + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) + })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; @@ -12543,19 +12543,28 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ // Look for the channel match peer_state.channel_by_id.entry(msg.channel_id) { - hash_map::Entry::Vacant(_) => return Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)), + hash_map::Entry::Vacant(_) => { + return Err(MsgHandleErrInternal::no_such_channel_for_peer( + counterparty_node_id, + msg.channel_id, + )) + }, hash_map::Entry::Occupied(mut chan_entry) => { if self.config.read().unwrap().reject_inbound_splices { let err = ChannelError::WarnAndDisconnect( - "Inbound channel splices are currently not allowed".to_owned() + "Inbound channel splices are currently not allowed".to_owned(), ); return Err(MsgHandleErrInternal::from_chan_no_close(err, msg.channel_id)); } if let Some(ref mut funded_channel) = chan_entry.get_mut().as_funded_mut() { let init_res = funded_channel.splice_init( - msg, our_funding_contribution, &self.signer_provider, &self.entropy_source, - &self.get_our_node_id(), &self.logger + msg, + our_funding_contribution, + &self.signer_provider, + &self.entropy_source, + &self.get_our_node_id(), + &self.logger, ); let splice_ack_msg = try_channel_entry!(self, peer_state, init_res, chan_entry); peer_state.pending_msg_events.push(MessageSendEvent::SendSpliceAck { @@ -12564,7 +12573,12 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ }); Ok(()) } else { - try_channel_entry!(self, peer_state, Err(ChannelError::close("Channel is not funded, cannot be spliced".into())), chan_entry) + try_channel_entry!( + self, + peer_state, + Err(ChannelError::close("Channel is not funded, cannot be spliced".into())), + chan_entry + ) } }, } From fb6d61aa50226a1eb55b66a1d0e22e5abde85aaf Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Tue, 10 Feb 2026 14:15:24 -0800 Subject: [PATCH 8/8] Rustfmt ChannelManager::internal_commitment_signed --- lightning/src/ln/channelmanager.rs | 38 ++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index eb526c41f19..a21456f0fd5 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -11971,15 +11971,15 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } } - #[rustfmt::skip] - fn internal_commitment_signed(&self, counterparty_node_id: &PublicKey, msg: &msgs::CommitmentSigned) -> Result<(), MsgHandleErrInternal> { + fn internal_commitment_signed( + &self, counterparty_node_id: &PublicKey, msg: &msgs::CommitmentSigned, + ) -> Result<(), MsgHandleErrInternal> { let best_block = *self.best_block.read().unwrap(); let per_peer_state = self.per_peer_state.read().unwrap(); - let peer_state_mutex = per_peer_state.get(counterparty_node_id) - .ok_or_else(|| { - debug_assert!(false); - MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) - })?; + let peer_state_mutex = per_peer_state.get(counterparty_node_id).ok_or_else(|| { + debug_assert!(false); + MsgHandleErrInternal::no_such_peer(counterparty_node_id, msg.channel_id) + })?; let mut peer_state_lock = peer_state_mutex.lock().unwrap(); let peer_state = &mut *peer_state_lock; match peer_state.channel_by_id.entry(msg.channel_id) { @@ -11988,12 +11988,22 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ let logger = WithChannelContext::from(&self.logger, &chan.context(), None); let funding_txo = chan.funding().get_funding_txo(); let (monitor_opt, monitor_update_opt) = try_channel_entry!( - self, peer_state, chan.commitment_signed(msg, best_block, &self.signer_provider, &self.fee_estimator, &&logger), - chan_entry); + self, + peer_state, + chan.commitment_signed( + msg, + best_block, + &self.signer_provider, + &self.fee_estimator, + &&logger + ), + chan_entry + ); if let Some(chan) = chan.as_funded_mut() { if let Some(monitor) = monitor_opt { - let monitor_res = self.chain_monitor.watch_channel(monitor.channel_id(), monitor); + let monitor_res = + self.chain_monitor.watch_channel(monitor.channel_id(), monitor); if let Ok(persist_state) = monitor_res { if let Some(data) = self.handle_initial_monitor( &mut peer_state.in_flight_monitor_updates, @@ -12008,7 +12018,8 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ self.handle_post_monitor_update_chan_resume(data); } } else { - let logger = WithChannelContext::from(&self.logger, &chan.context, None); + let logger = + WithChannelContext::from(&self.logger, &chan.context, None); log_error!(logger, "Persisting initial ChannelMonitor failed, implying the channel ID was duplicated"); let msg = "Channel ID was a duplicate"; let reason = ClosureReason::ProcessingError { err: msg.to_owned() }; @@ -12033,7 +12044,10 @@ This indicates a bug inside LDK. Please report this error at https://github.com/ } Ok(()) }, - hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer(counterparty_node_id, msg.channel_id)) + hash_map::Entry::Vacant(_) => Err(MsgHandleErrInternal::no_such_channel_for_peer( + counterparty_node_id, + msg.channel_id, + )), } }