@@ -2986,8 +2986,11 @@ where
2986
2986
Ok(counterparty_node_id)
2987
2987
}
2988
2988
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> {
2990
2991
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);
2991
2994
match self.force_close_channel_with_peer(channel_id, counterparty_node_id, None, broadcast) {
2992
2995
Ok(counterparty_node_id) => {
2993
2996
let per_peer_state = self.per_peer_state.read().unwrap();
@@ -2997,7 +3000,7 @@ where
2997
3000
events::MessageSendEvent::HandleError {
2998
3001
node_id: counterparty_node_id,
2999
3002
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() })
3001
3004
},
3002
3005
}
3003
3006
);
@@ -3008,13 +3011,13 @@ where
3008
3011
}
3009
3012
}
3010
3013
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 )
3016
3019
-> 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 )
3018
3021
}
3019
3022
3020
3023
/// Force closes a channel, rejecting new HTLCs on the given channel but skips broadcasting
@@ -3023,24 +3026,24 @@ where
3023
3026
///
3024
3027
/// You can always broadcast the latest local transaction(s) via
3025
3028
/// [`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 )
3027
3030
-> 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 )
3029
3032
}
3030
3033
3031
3034
/// Force close all channels, immediately broadcasting the latest local commitment transaction
3032
3035
/// 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 ) {
3034
3037
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() );
3036
3039
}
3037
3040
}
3038
3041
3039
3042
/// Force close all channels rejecting new HTLCs on each but without broadcasting the latest
3040
3043
/// 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 ) {
3042
3045
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() );
3044
3047
}
3045
3048
}
3046
3049
@@ -11739,8 +11742,8 @@ mod tests {
11739
11742
11740
11743
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
11741
11744
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();
11744
11747
check_closed_broadcast!(nodes[0], true);
11745
11748
check_added_monitors!(nodes[0], 1);
11746
11749
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
@@ -11957,6 +11960,7 @@ mod tests {
11957
11960
let channel_id = ChannelId::from_bytes([4; 32]);
11958
11961
let unkown_public_key = PublicKey::from_secret_key(&Secp256k1::signing_only(), &SecretKey::from_slice(&[42; 32]).unwrap());
11959
11962
let intercept_id = InterceptId([0; 32]);
11963
+ let error_message = "Channel force-closed";
11960
11964
11961
11965
// Test the API functions.
11962
11966
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 {
11965
11969
11966
11970
check_unkown_peer_error(nodes[0].node.close_channel(&channel_id, &unkown_public_key), unkown_public_key);
11967
11971
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);
11969
11973
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);
11971
11975
11972
11976
check_unkown_peer_error(nodes[0].node.forward_intercepted_htlc(intercept_id, &channel_id, unkown_public_key, 1_000_000), unkown_public_key);
11973
11977
@@ -11989,15 +11993,16 @@ mod tests {
11989
11993
11990
11994
// Dummy values
11991
11995
let channel_id = ChannelId::from_bytes([4; 32]);
11996
+ let error_message = "Channel force-closed";
11992
11997
11993
11998
// Test the API functions.
11994
11999
check_api_misuse_error(nodes[0].node.accept_inbound_channel(&channel_id, &counterparty_node_id, 42));
11995
12000
11996
12001
check_channel_unavailable_error(nodes[0].node.close_channel(&channel_id, &counterparty_node_id), channel_id, counterparty_node_id);
11997
12002
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);
11999
12004
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);
12001
12006
12002
12007
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);
12003
12008
@@ -12351,6 +12356,7 @@ mod tests {
12351
12356
anchors_config.manually_accept_inbound_channels = true;
12352
12357
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[Some(anchors_config.clone()), Some(anchors_config.clone())]);
12353
12358
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
12359
+ let error_message = "Channel force-closed";
12354
12360
12355
12361
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), 100_000, 0, 0, None, None).unwrap();
12356
12362
let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
@@ -12360,7 +12366,7 @@ mod tests {
12360
12366
let events = nodes[1].node.get_and_clear_pending_events();
12361
12367
match events[0] {
12362
12368
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();
12364
12370
}
12365
12371
_ => panic!("Unexpected event"),
12366
12372
}
@@ -12468,12 +12474,13 @@ mod tests {
12468
12474
let user_config = test_default_channel_config();
12469
12475
let node_chanmgr = create_node_chanmgrs(2, &node_cfg, &[Some(user_config), Some(user_config)]);
12470
12476
let nodes = create_network(2, &node_cfg, &node_chanmgr);
12477
+ let error_message = "Channel force-closed";
12471
12478
12472
12479
// Open a channel, immediately disconnect each other, and broadcast Alice's latest state.
12473
12480
let (_, _, chan_id, funding_tx) = create_announced_chan_between_nodes(&nodes, 0, 1);
12474
12481
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
12475
12482
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();
12477
12484
check_closed_broadcast(&nodes[0], 1, true);
12478
12485
check_added_monitors(&nodes[0], 1);
12479
12486
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
0 commit comments