@@ -2986,8 +2986,11 @@ where
29862986 Ok(counterparty_node_id)
29872987 }
29882988
2989- fn force_close_sending_error(&self, channel_id: &ChannelId, counterparty_node_id: &PublicKey, broadcast: bool) -> Result<(), APIError> {
2989+ fn force_close_sending_error(&self, channel_id: &ChannelId, counterparty_node_id: &PublicKey, broadcast: bool, error_message: String)
2990+ -> Result<(), APIError> {
29902991 let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
2992+ log_debug!(self.logger,
2993+ "Force-closing channel, The error message sent to the peer : {}", error_message);
29912994 match self.force_close_channel_with_peer(channel_id, counterparty_node_id, None, broadcast) {
29922995 Ok(counterparty_node_id) => {
29932996 let per_peer_state = self.per_peer_state.read().unwrap();
@@ -2997,7 +3000,7 @@ where
29973000 events::MessageSendEvent::HandleError {
29983001 node_id: counterparty_node_id,
29993002 action: msgs::ErrorAction::DisconnectPeer {
3000- msg: Some(msgs::ErrorMessage { channel_id: *channel_id, data: "Channel force-closed" .to_owned() })
3003+ msg: Some(msgs::ErrorMessage { channel_id: *channel_id, data: error_message .to_owned() })
30013004 },
30023005 }
30033006 );
@@ -3008,13 +3011,13 @@ where
30083011 }
30093012 }
30103013
3011- /// Force closes a channel, immediately broadcasting the latest local transaction(s) and
3012- /// rejecting new HTLCs on the given channel. Fails if `channel_id` is unknown to
3013- /// the manager, or if the `counterparty_node_id` isn't the counterparty of the corresponding
3014- /// channel.
3015- pub fn force_close_broadcasting_latest_txn(&self, channel_id: &ChannelId, counterparty_node_id: &PublicKey)
3014+ /// Force closes a channel, immediately broadcasting the latest local transaction(s),
3015+ /// rejecting new HTLCs and sending a `error message` String to the peer on the given channel.
3016+ /// Fails if `channel_id` is unknown to the manager, or if the `counterparty_node_id`
3017+ /// isn't the counterparty of the corresponding channel.
3018+ pub fn force_close_broadcasting_latest_txn(&self, channel_id: &ChannelId, counterparty_node_id: &PublicKey, error_message: String )
30163019 -> Result<(), APIError> {
3017- self.force_close_sending_error(channel_id, counterparty_node_id, true)
3020+ self.force_close_sending_error(channel_id, counterparty_node_id, true, error_message )
30183021 }
30193022
30203023 /// Force closes a channel, rejecting new HTLCs on the given channel but skips broadcasting
@@ -3023,24 +3026,24 @@ where
30233026 ///
30243027 /// You can always broadcast the latest local transaction(s) via
30253028 /// [`ChannelMonitor::broadcast_latest_holder_commitment_txn`].
3026- pub fn force_close_without_broadcasting_txn(&self, channel_id: &ChannelId, counterparty_node_id: &PublicKey)
3029+ pub fn force_close_without_broadcasting_txn(&self, channel_id: &ChannelId, counterparty_node_id: &PublicKey, error_message: String )
30273030 -> Result<(), APIError> {
3028- self.force_close_sending_error(channel_id, counterparty_node_id, false)
3031+ self.force_close_sending_error(channel_id, counterparty_node_id, false, error_message )
30293032 }
30303033
30313034 /// Force close all channels, immediately broadcasting the latest local commitment transaction
30323035 /// for each to the chain and rejecting new HTLCs on each.
3033- pub fn force_close_all_channels_broadcasting_latest_txn(&self) {
3036+ pub fn force_close_all_channels_broadcasting_latest_txn(&self, error_message: String ) {
30343037 for chan in self.list_channels() {
3035- let _ = self.force_close_broadcasting_latest_txn(&chan.channel_id, &chan.counterparty.node_id);
3038+ let _ = self.force_close_broadcasting_latest_txn(&chan.channel_id, &chan.counterparty.node_id, error_message.clone() );
30363039 }
30373040 }
30383041
30393042 /// Force close all channels rejecting new HTLCs on each but without broadcasting the latest
30403043 /// local transaction(s).
3041- pub fn force_close_all_channels_without_broadcasting_txn(&self) {
3044+ pub fn force_close_all_channels_without_broadcasting_txn(&self, error_message: String ) {
30423045 for chan in self.list_channels() {
3043- let _ = self.force_close_without_broadcasting_txn(&chan.channel_id, &chan.counterparty.node_id);
3046+ let _ = self.force_close_without_broadcasting_txn(&chan.channel_id, &chan.counterparty.node_id, error_message.clone() );
30443047 }
30453048 }
30463049
@@ -11739,8 +11742,8 @@ mod tests {
1173911742
1174011743 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
1174111744 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
11742-
11743- nodes[0].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[1].node.get_our_node_id()).unwrap();
11745+ let error_message = "Channel force-closed";
11746+ nodes[0].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[1].node.get_our_node_id(), error_message.to_string() ).unwrap();
1174411747 check_closed_broadcast!(nodes[0], true);
1174511748 check_added_monitors!(nodes[0], 1);
1174611749 check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
@@ -11957,6 +11960,7 @@ mod tests {
1195711960 let channel_id = ChannelId::from_bytes([4; 32]);
1195811961 let unkown_public_key = PublicKey::from_secret_key(&Secp256k1::signing_only(), &SecretKey::from_slice(&[42; 32]).unwrap());
1195911962 let intercept_id = InterceptId([0; 32]);
11963+ let error_message = "Channel force-closed";
1196011964
1196111965 // Test the API functions.
1196211966 check_not_connected_to_peer_error(nodes[0].node.create_channel(unkown_public_key, 1_000_000, 500_000_000, 42, None, None), unkown_public_key);
@@ -11965,9 +11969,9 @@ mod tests {
1196511969
1196611970 check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
1196711971
11968- check_unkown_peer_error(nodes[0].node.force_close_broadcasting_latest_txn(&channel_id, &unkown_public_key), unkown_public_key);
11972+ check_unkown_peer_error(nodes[0].node.force_close_broadcasting_latest_txn(&channel_id, &unkown_public_key, error_message.to_string() ), unkown_public_key);
1196911973
11970- check_unkown_peer_error(nodes[0].node.force_close_without_broadcasting_txn(&channel_id, &unkown_public_key), unkown_public_key);
11974+ check_unkown_peer_error(nodes[0].node.force_close_without_broadcasting_txn(&channel_id, &unkown_public_key, error_message.to_string() ), unkown_public_key);
1197111975
1197211976 check_unkown_peer_error(nodes[0].node.forward_intercepted_htlc(intercept_id, &channel_id, unkown_public_key, 1_000_000), unkown_public_key);
1197311977
@@ -11989,15 +11993,16 @@ mod tests {
1198911993
1199011994 // Dummy values
1199111995 let channel_id = ChannelId::from_bytes([4; 32]);
11996+ let error_message = "Channel force-closed";
1199211997
1199311998 // Test the API functions.
1199411999 check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42));
1199512000
1199612001 check_channel_unavailable_error(nodes[0].node.close_channel(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
1199712002
11998- check_channel_unavailable_error(nodes[0].node.force_close_broadcasting_latest_txn(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
12003+ check_channel_unavailable_error(nodes[0].node.force_close_broadcasting_latest_txn(&channel_id, &counterparty_node_id, error_message.to_string() ), channel_id, counterparty_node_id);
1199912004
12000- check_channel_unavailable_error(nodes[0].node.force_close_without_broadcasting_txn(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
12005+ check_channel_unavailable_error(nodes[0].node.force_close_without_broadcasting_txn(&channel_id, &counterparty_node_id, error_message.to_string() ), channel_id, counterparty_node_id);
1200112006
1200212007 check_channel_unavailable_error(nodes[0].node.forward_intercepted_htlc(InterceptId([0; 32]), &channel_id, counterparty_node_id, 1_000_000), channel_id, counterparty_node_id);
1200312008
@@ -12351,6 +12356,7 @@ mod tests {
1235112356 anchors_config.manually_accept_inbound_channels = true;
1235212357 let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(anchors_config.clone()), Some(anchors_config.clone())]);
1235312358 let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
12359+ let error_message = "Channel force-closed";
1235412360
1235512361 nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100_000, 0, 0, None, None).unwrap();
1235612362 let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
@@ -12360,7 +12366,7 @@ mod tests {
1236012366 let events = nodes[1].node.get_and_clear_pending_events();
1236112367 match events[0] {
1236212368 Event::OpenChannelRequest { temporary_channel_id, .. } => {
12363- nodes[1].node.force_close_broadcasting_latest_txn(&temporary_channel_id, &nodes[0].node.get_our_node_id()).unwrap();
12369+ nodes[1].node.force_close_broadcasting_latest_txn(&temporary_channel_id, &nodes[0].node.get_our_node_id(), error_message.to_string() ).unwrap();
1236412370 }
1236512371 _ => panic!("Unexpected event"),
1236612372 }
@@ -12468,12 +12474,13 @@ mod tests {
1246812474 let user_config = test_default_channel_config();
1246912475 let node_chanmgr = create_node_chanmgrs(2, &node_cfg, &[Some(user_config), Some(user_config)]);
1247012476 let nodes = create_network(2, &node_cfg, &node_chanmgr);
12477+ let error_message = "Channel force-closed";
1247112478
1247212479 // Open a channel, immediately disconnect each other, and broadcast Alice's latest state.
1247312480 let (_, _, chan_id, funding_tx) = create_announced_chan_between_nodes(&nodes, 0, 1);
1247412481 nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
1247512482 nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
12476- nodes[0].node.force_close_broadcasting_latest_txn(&chan_id, &nodes[1].node.get_our_node_id()).unwrap();
12483+ nodes[0].node.force_close_broadcasting_latest_txn(&chan_id, &nodes[1].node.get_our_node_id(), error_message.to_string() ).unwrap();
1247712484 check_closed_broadcast(&nodes[0], 1, true);
1247812485 check_added_monitors(&nodes[0], 1);
1247912486 check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
0 commit comments