Skip to content

Commit 2cf42aa

Browse files
authored
Merge pull request #997 from ariard/2021-07-add-chan-closed
Add Event::ChannelClosed generation
2 parents 4419191 + d13c5cf commit 2cf42aa

File tree

12 files changed

+438
-44
lines changed

12 files changed

+438
-44
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,7 @@ mod tests {
614614
.expect("SpendableOutputs not handled within deadline");
615615
match event {
616616
Event::SpendableOutputs { .. } => {},
617+
Event::ChannelClosed { .. } => {},
617618
_ => panic!("Unexpected event: {:?}", event),
618619
}
619620

lightning-persister/src/lib.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,11 @@ mod tests {
182182
use bitcoin::Txid;
183183
use lightning::chain::channelmonitor::{Persist, ChannelMonitorUpdateErr};
184184
use lightning::chain::transaction::OutPoint;
185-
use lightning::{check_closed_broadcast, check_added_monitors};
185+
use lightning::{check_closed_broadcast, check_closed_event, check_added_monitors};
186186
use lightning::ln::features::InitFeatures;
187187
use lightning::ln::functional_test_utils::*;
188188
use lightning::ln::msgs::ErrorAction;
189-
use lightning::util::events::{MessageSendEventsProvider, MessageSendEvent};
189+
use lightning::util::events::{ClosureReason, Event, MessageSendEventsProvider, MessageSendEvent};
190190
use lightning::util::test_utils;
191191
use std::fs;
192192
#[cfg(target_os = "windows")]
@@ -259,6 +259,7 @@ mod tests {
259259
// Force close because cooperative close doesn't result in any persisted
260260
// updates.
261261
nodes[0].node.force_close_channel(&nodes[0].node.list_channels()[0].channel_id).unwrap();
262+
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed);
262263
check_closed_broadcast!(nodes[0], true);
263264
check_added_monitors!(nodes[0], 1);
264265

@@ -268,6 +269,7 @@ mod tests {
268269
let header = BlockHeader { version: 0x20000000, prev_blockhash: nodes[0].best_block_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
269270
connect_block(&nodes[1], &Block { header, txdata: vec![node_txn[0].clone(), node_txn[0].clone()]});
270271
check_closed_broadcast!(nodes[1], true);
272+
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
271273
check_added_monitors!(nodes[1], 1);
272274

273275
// Make sure everything is persisted as expected after close.
@@ -291,6 +293,7 @@ mod tests {
291293
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
292294
let chan = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
293295
nodes[1].node.force_close_channel(&chan.2).unwrap();
296+
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
294297
let mut added_monitors = nodes[1].chain_monitor.added_monitors.lock().unwrap();
295298

296299
// Set the persister's directory to read-only, which should result in

lightning/src/chain/channelmonitor.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,8 @@ pub enum MonitorEvent {
190190
/// A monitor event containing an HTLCUpdate.
191191
HTLCEvent(HTLCUpdate),
192192

193-
/// A monitor event that the Channel's commitment transaction was broadcasted.
194-
CommitmentTxBroadcasted(OutPoint),
193+
/// A monitor event that the Channel's commitment transaction was confirmed.
194+
CommitmentTxConfirmed(OutPoint),
195195
}
196196

197197
/// Simple structure sent back by `chain::Watch` when an HTLC from a forward channel is detected on
@@ -918,7 +918,7 @@ impl<Signer: Sign> Writeable for ChannelMonitorImpl<Signer> {
918918
0u8.write(writer)?;
919919
upd.write(writer)?;
920920
},
921-
MonitorEvent::CommitmentTxBroadcasted(_) => 1u8.write(writer)?
921+
MonitorEvent::CommitmentTxConfirmed(_) => 1u8.write(writer)?
922922
}
923923
}
924924

@@ -1787,7 +1787,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
17871787
log_info!(logger, "Broadcasting local {}", log_tx!(tx));
17881788
broadcaster.broadcast_transaction(tx);
17891789
}
1790-
self.pending_monitor_events.push(MonitorEvent::CommitmentTxBroadcasted(self.funding_info.0));
1790+
self.pending_monitor_events.push(MonitorEvent::CommitmentTxConfirmed(self.funding_info.0));
17911791
}
17921792

17931793
pub fn update_monitor<B: Deref, F: Deref, L: Deref>(&mut self, updates: &ChannelMonitorUpdate, broadcaster: &B, fee_estimator: &F, logger: &L) -> Result<(), MonitorUpdateError>
@@ -1835,7 +1835,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
18351835
} else if !self.holder_tx_signed {
18361836
log_error!(logger, "You have a toxic holder commitment transaction avaible in channel monitor, read comment in ChannelMonitor::get_latest_holder_commitment_txn to be informed of manual action to take");
18371837
} else {
1838-
// If we generated a MonitorEvent::CommitmentTxBroadcasted, the ChannelManager
1838+
// If we generated a MonitorEvent::CommitmentTxConfirmed, the ChannelManager
18391839
// will still give us a ChannelForceClosed event with !should_broadcast, but we
18401840
// shouldn't print the scary warning above.
18411841
log_info!(logger, "Channel off-chain state closed after we broadcasted our latest commitment transaction.");
@@ -2357,7 +2357,7 @@ impl<Signer: Sign> ChannelMonitorImpl<Signer> {
23572357
let funding_outp = HolderFundingOutput::build(self.funding_redeemscript.clone());
23582358
let commitment_package = PackageTemplate::build_package(self.funding_info.0.txid.clone(), self.funding_info.0.index as u32, PackageSolvingData::HolderFundingOutput(funding_outp), self.best_block.height(), false, self.best_block.height());
23592359
claimable_outpoints.push(commitment_package);
2360-
self.pending_monitor_events.push(MonitorEvent::CommitmentTxBroadcasted(self.funding_info.0));
2360+
self.pending_monitor_events.push(MonitorEvent::CommitmentTxConfirmed(self.funding_info.0));
23612361
let commitment_tx = self.onchain_tx_handler.get_fully_signed_holder_tx(&self.funding_redeemscript);
23622362
self.holder_tx_signed = true;
23632363
// Because we're broadcasting a commitment transaction, we should construct the package
@@ -3110,7 +3110,7 @@ impl<'a, Signer: Sign, K: KeysInterface<Signer = Signer>> ReadableArgs<&'a K>
31103110
for _ in 0..pending_monitor_events_len {
31113111
let ev = match <u8 as Readable>::read(reader)? {
31123112
0 => MonitorEvent::HTLCEvent(Readable::read(reader)?),
3113-
1 => MonitorEvent::CommitmentTxBroadcasted(funding_info.0),
3113+
1 => MonitorEvent::CommitmentTxConfirmed(funding_info.0),
31143114
_ => return Err(DecodeError::InvalidValue)
31153115
};
31163116
pending_monitor_events.push(ev);

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ use ln::msgs::{ChannelMessageHandler, ErrorAction, RoutingMessageHandler};
2828
use routing::router::get_route;
2929
use util::config::UserConfig;
3030
use util::enforcing_trait_impls::EnforcingSigner;
31-
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider, PaymentPurpose};
31+
use util::events::{Event, MessageSendEvent, MessageSendEventsProvider, PaymentPurpose, ClosureReason};
3232
use util::errors::APIError;
3333
use util::ser::{ReadableArgs, Writeable};
3434
use util::test_utils::TestBroadcaster;
@@ -81,6 +81,7 @@ fn do_test_simple_monitor_permanent_update_fail(persister_fail: bool) {
8181
// PaymentFailed event
8282

8383
assert_eq!(nodes[0].node.list_channels().len(), 0);
84+
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() });
8485
}
8586

8687
#[test]
@@ -269,6 +270,7 @@ fn do_test_simple_monitor_temporary_update_fail(disconnect: bool, persister_fail
269270
// PaymentFailed event
270271

271272
assert_eq!(nodes[0].node.list_channels().len(), 0);
273+
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed);
272274
}
273275

274276
#[test]
@@ -1985,6 +1987,8 @@ fn do_during_funding_monitor_fail(confirm_a_first: bool, restore_b_before_conf:
19851987

19861988
send_payment(&nodes[0], &[&nodes[1]], 8000000);
19871989
close_channel(&nodes[0], &nodes[1], &channel_id, funding_tx, true);
1990+
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
1991+
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
19881992
}
19891993

19901994
#[test]
@@ -2610,6 +2614,8 @@ fn test_temporary_error_during_shutdown() {
26102614
assert_eq!(txn_a, txn_b);
26112615
assert_eq!(txn_a.len(), 1);
26122616
check_spends!(txn_a[0], funding_tx);
2617+
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
2618+
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
26132619
}
26142620

26152621
#[test]
@@ -2630,6 +2636,7 @@ fn test_permanent_error_during_sending_shutdown() {
26302636
assert!(nodes[0].node.close_channel(&channel_id).is_ok());
26312637
check_closed_broadcast!(nodes[0], true);
26322638
check_added_monitors!(nodes[0], 2);
2639+
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() });
26332640
}
26342641

26352642
#[test]
@@ -2652,6 +2659,7 @@ fn test_permanent_error_during_handling_shutdown() {
26522659
nodes[1].node.handle_shutdown(&nodes[0].node.get_our_node_id(), &InitFeatures::known(), &shutdown);
26532660
check_closed_broadcast!(nodes[1], true);
26542661
check_added_monitors!(nodes[1], 2);
2662+
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() });
26552663
}
26562664

26572665
#[test]

0 commit comments

Comments
 (0)