Skip to content

Commit d9f72e2

Browse files
committed
Allowing user-specified error message during force close channel
In this commit i added additional parameter `error_message` to `force_close_sending_error`, that will allow users to configure error message and send to peers during force closing of channel. I have also updated the tests for this updated function.
1 parent 3fd4b39 commit d9f72e2

File tree

16 files changed

+115
-74
lines changed

16 files changed

+115
-74
lines changed

fuzz/src/full_stack.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -734,9 +734,10 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
734734
14 => {
735735
let mut channels = channelmanager.list_channels();
736736
let channel_id = get_slice!(1)[0] as usize;
737+
let error_message = "Channel force-closed";
737738
if channel_id >= channels.len() { return; }
738739
channels.sort_by(|a, b| { a.channel_id.cmp(&b.channel_id) });
739-
channelmanager.force_close_broadcasting_latest_txn(&channels[channel_id].channel_id, &channels[channel_id].counterparty.node_id).unwrap();
740+
channelmanager.force_close_broadcasting_latest_txn(&channels[channel_id].channel_id, &channels[channel_id].counterparty.node_id, error_message.to_string()).unwrap();
740741
},
741742
// 15, 16, 17, 18 is above
742743
19 => {

lightning-background-processor/src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1415,7 +1415,8 @@ mod tests {
14151415
}
14161416

14171417
// Force-close the channel.
1418-
nodes[0].node.force_close_broadcasting_latest_txn(&ChannelId::v1_from_funding_outpoint(OutPoint { txid: tx.txid(), index: 0 }), &nodes[1].node.get_our_node_id()).unwrap();
1418+
let error_message = "Channel force-closed";
1419+
nodes[0].node.force_close_broadcasting_latest_txn(&ChannelId::v1_from_funding_outpoint(OutPoint { txid: tx.txid(), index: 0 }), &nodes[1].node.get_our_node_id(), error_message.to_string()).unwrap();
14191420

14201421
// Check that the force-close updates are persisted.
14211422
check_persisted_data!(nodes[0].node, filepath.clone());
@@ -1608,7 +1609,8 @@ mod tests {
16081609
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].no_gossip_sync(), nodes[0].peer_manager.clone(), nodes[0].logger.clone(), Some(nodes[0].scorer.clone()));
16091610

16101611
// Force close the channel and check that the SpendableOutputs event was handled.
1611-
nodes[0].node.force_close_broadcasting_latest_txn(&nodes[0].node.list_channels()[0].channel_id, &nodes[1].node.get_our_node_id()).unwrap();
1612+
let error_message = "Channel force-closed";
1613+
nodes[0].node.force_close_broadcasting_latest_txn(&nodes[0].node.list_channels()[0].channel_id, &nodes[1].node.get_our_node_id(), error_message.to_string()).unwrap();
16121614
let commitment_tx = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().pop().unwrap();
16131615
confirm_transaction_depth(&mut nodes[0], &commitment_tx, BREAKDOWN_TIMEOUT as u32);
16141616

lightning-persister/src/fs_store.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,8 @@ mod tests {
446446
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
447447
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
448448
let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
449-
nodes[1].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[0].node.get_our_node_id()).unwrap();
449+
let error_message = "Channel force-closed";
450+
nodes[1].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[0].node.get_our_node_id(), error_message.to_string()).unwrap();
450451
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
451452
let mut added_monitors = nodes[1].chain_monitor.added_monitors.lock().unwrap();
452453
let update_map = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap();
@@ -485,7 +486,8 @@ mod tests {
485486
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
486487
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
487488
let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
488-
nodes[1].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[0].node.get_our_node_id()).unwrap();
489+
let error_message = "Channel force-closed";
490+
nodes[1].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[0].node.get_our_node_id(), error_message.to_string()).unwrap();
489491
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
490492
let mut added_monitors = nodes[1].chain_monitor.added_monitors.lock().unwrap();
491493
let update_map = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap();

lightning-persister/src/test_utils.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ pub(crate) fn do_test_store<K: KVStore>(store_0: &K, store_1: &K) {
104104

105105
// Force close because cooperative close doesn't result in any persisted
106106
// updates.
107-
nodes[0].node.force_close_broadcasting_latest_txn(&nodes[0].node.list_channels()[0].channel_id, &nodes[1].node.get_our_node_id()).unwrap();
107+
let error_message = "Channel force-closed";
108+
nodes[0].node.force_close_broadcasting_latest_txn(&nodes[0].node.list_channels()[0].channel_id, &nodes[1].node.get_our_node_id(), error_message.to_string()).unwrap();
108109
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
109110
check_closed_broadcast!(nodes[0], true);
110111
check_added_monitors!(nodes[0], 1);

lightning/src/ln/async_signer_tests.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,12 +363,13 @@ fn do_test_async_holder_signatures(anchors: bool, remote_commitment: bool) {
363363
// Route an HTLC and set the signer as unavailable.
364364
let (_, _, chan_id, funding_tx) = create_announced_chan_between_nodes(&nodes, 0, 1);
365365
route_payment(&nodes[0], &[&nodes[1]], 1_000_000);
366+
let error_message = "Channel force-closed";
366367

367368
nodes[0].set_channel_signer_available(&nodes[1].node.get_our_node_id(), &chan_id, false);
368369

369370
if remote_commitment {
370371
// Make the counterparty broadcast its latest commitment.
371-
nodes[1].node.force_close_broadcasting_latest_txn(&chan_id, &nodes[0].node.get_our_node_id()).unwrap();
372+
nodes[1].node.force_close_broadcasting_latest_txn(&chan_id, &nodes[0].node.get_our_node_id(), error_message.to_string()).unwrap();
372373
check_added_monitors(&nodes[1], 1);
373374
check_closed_broadcast(&nodes[1], 1, true);
374375
check_closed_event(&nodes[1], 1, ClosureReason::HolderForceClosed, false, &[nodes[0].node.get_our_node_id()], 100_000);

lightning/src/ln/blinded_payment_tests.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@ fn do_forward_fail_in_process_pending_htlc_fwds(check: ProcessPendingHTLCsCheck)
344344
assert_eq!(events.len(), 1);
345345
let ev = remove_first_msg_event_to_node(&nodes[1].node.get_our_node_id(), &mut events);
346346
let mut payment_event = SendEvent::from_event(ev);
347+
let error_message = "Channel force-closed";
347348

348349
nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]);
349350
check_added_monitors!(nodes[1], 0);
@@ -361,7 +362,7 @@ fn do_forward_fail_in_process_pending_htlc_fwds(check: ProcessPendingHTLCsCheck)
361362
ProcessPendingHTLCsCheck::FwdChannelClosed => {
362363
// Force close the next-hop channel so when we go to forward in process_pending_htlc_forwards,
363364
// the intro node will error backwards.
364-
nodes[1].node.force_close_broadcasting_latest_txn(&channel_id, &nodes[2].node.get_our_node_id()).unwrap();
365+
nodes[1].node.force_close_broadcasting_latest_txn(&channel_id, &nodes[2].node.get_our_node_id(), error_message.to_string()).unwrap();
365366
let events = nodes[1].node.get_and_clear_pending_events();
366367
match events[0] {
367368
crate::events::Event::PendingHTLCsForwardable { .. } => {},

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,8 @@ fn do_test_simple_monitor_temporary_update_fail(disconnect: bool) {
206206
}
207207

208208
// ...and make sure we can force-close a frozen channel
209-
nodes[0].node.force_close_broadcasting_latest_txn(&channel_id, &nodes[1].node.get_our_node_id()).unwrap();
209+
let error_message = "Channel force-closed";
210+
nodes[0].node.force_close_broadcasting_latest_txn(&channel_id, &nodes[1].node.get_our_node_id(), error_message.to_string()).unwrap();
210211
check_added_monitors!(nodes[0], 1);
211212
check_closed_broadcast!(nodes[0], true);
212213

@@ -3221,17 +3222,18 @@ fn do_test_durable_preimages_on_closed_channel(close_chans_before_reload: bool,
32213222
let _ = get_revoke_commit_msgs!(nodes[1], nodes[2].node.get_our_node_id());
32223223

32233224
let mon_bc = get_monitor!(nodes[1], chan_id_bc).encode();
3225+
let error_message = "Channel force-closed";
32243226

32253227
if close_chans_before_reload {
32263228
if !close_only_a {
32273229
chanmon_cfgs[1].persister.set_update_ret(ChannelMonitorUpdateStatus::InProgress);
3228-
nodes[1].node.force_close_broadcasting_latest_txn(&chan_id_bc, &nodes[2].node.get_our_node_id()).unwrap();
3230+
nodes[1].node.force_close_broadcasting_latest_txn(&chan_id_bc, &nodes[2].node.get_our_node_id(), error_message.to_string()).unwrap();
32293231
check_closed_broadcast(&nodes[1], 1, true);
32303232
check_closed_event(&nodes[1], 1, ClosureReason::HolderForceClosed, false, &[nodes[2].node.get_our_node_id()], 100000);
32313233
}
32323234

32333235
chanmon_cfgs[1].persister.set_update_ret(ChannelMonitorUpdateStatus::InProgress);
3234-
nodes[1].node.force_close_broadcasting_latest_txn(&chan_id_ab, &nodes[0].node.get_our_node_id()).unwrap();
3236+
nodes[1].node.force_close_broadcasting_latest_txn(&chan_id_ab, &nodes[0].node.get_our_node_id(), error_message.to_string()).unwrap();
32353237
check_closed_broadcast(&nodes[1], 1, true);
32363238
check_closed_event(&nodes[1], 1, ClosureReason::HolderForceClosed, false, &[nodes[0].node.get_our_node_id()], 100000);
32373239
}
@@ -3252,8 +3254,9 @@ fn do_test_durable_preimages_on_closed_channel(close_chans_before_reload: bool,
32523254
assert_eq!(bs_close_txn.len(), 3);
32533255
}
32543256
}
3257+
let error_message = "Channel force-closed";
32553258

3256-
nodes[0].node.force_close_broadcasting_latest_txn(&chan_id_ab, &nodes[1].node.get_our_node_id()).unwrap();
3259+
nodes[0].node.force_close_broadcasting_latest_txn(&chan_id_ab, &nodes[1].node.get_our_node_id(), error_message.to_string()).unwrap();
32573260
check_closed_event(&nodes[0], 1, ClosureReason::HolderForceClosed, false, &[nodes[1].node.get_our_node_id()], 100000);
32583261
let as_closing_tx = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
32593262
assert_eq!(as_closing_tx.len(), 1);
@@ -3390,10 +3393,11 @@ fn do_test_reload_mon_update_completion_actions(close_during_reload: bool) {
33903393
let manager_b = nodes[1].node.encode();
33913394
reload_node!(nodes[1], &manager_b, &[&mon_ab, &mon_bc], persister, new_chain_monitor, nodes_1_deserialized);
33923395

3396+
let error_message = "Channel force-closed";
33933397
if close_during_reload {
33943398
// Test that we still free the B<->C channel if the A<->B channel closed while we reloaded
33953399
// (as learned about during the on-reload block connection).
3396-
nodes[0].node.force_close_broadcasting_latest_txn(&chan_id_ab, &nodes[1].node.get_our_node_id()).unwrap();
3400+
nodes[0].node.force_close_broadcasting_latest_txn(&chan_id_ab, &nodes[1].node.get_our_node_id(), error_message.to_string()).unwrap();
33973401
check_added_monitors!(nodes[0], 1);
33983402
check_closed_broadcast!(nodes[0], true);
33993403
check_closed_event(&nodes[0], 1, ClosureReason::HolderForceClosed, false, &[nodes[1].node.get_our_node_id()], 100_000);

lightning/src/ln/channelmanager.rs

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)