mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-25 07:17:40 +01:00
Merge pull request #2387 from vladimirfomene/add_extra_fields_to_ChannelClosed_event
Add counterparty_node_id & channel_capacity to ChannelClosed event
This commit is contained in:
commit
131560e08f
14 changed files with 286 additions and 218 deletions
|
@ -237,7 +237,7 @@ mod tests {
|
|||
// Force close because cooperative close doesn't result in any persisted
|
||||
// updates.
|
||||
nodes[0].node.force_close_broadcasting_latest_txn(&nodes[0].node.list_channels()[0].channel_id, &nodes[1].node.get_our_node_id()).unwrap();
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
|
||||
|
@ -246,7 +246,7 @@ mod tests {
|
|||
|
||||
connect_block(&nodes[1], &create_dummy_block(nodes[0].best_block_hash(), 42, vec![node_txn[0].clone(), node_txn[0].clone()]));
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
|
||||
// Make sure everything is persisted as expected after close.
|
||||
|
@ -270,7 +270,7 @@ mod tests {
|
|||
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
|
||||
let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
|
||||
nodes[1].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[0].node.get_our_node_id()).unwrap();
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let mut added_monitors = nodes[1].chain_monitor.added_monitors.lock().unwrap();
|
||||
let update_map = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap();
|
||||
let update_id = update_map.get(&added_monitors[0].0.to_channel_id()).unwrap();
|
||||
|
@ -309,7 +309,7 @@ mod tests {
|
|||
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
|
||||
let chan = create_announced_chan_between_nodes(&nodes, 0, 1);
|
||||
nodes[1].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[0].node.get_our_node_id()).unwrap();
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let mut added_monitors = nodes[1].chain_monitor.added_monitors.lock().unwrap();
|
||||
let update_map = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap();
|
||||
let update_id = update_map.get(&added_monitors[0].0.to_channel_id()).unwrap();
|
||||
|
|
|
@ -966,7 +966,8 @@ mod tests {
|
|||
assert!(err.contains("ChannelMonitor storage failure")));
|
||||
check_added_monitors!(nodes[0], 2); // After the failure we generate a close-channel monitor update
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() },
|
||||
[nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
// However, as the ChainMonitor is still waiting for the original persistence to complete,
|
||||
// it won't yet release the MonitorEvents.
|
||||
|
@ -1013,7 +1014,8 @@ mod tests {
|
|||
// ... however once we get events once, the channel will close, creating a channel-closed
|
||||
// ChannelMonitorUpdate.
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "Failed to persist ChannelMonitor update during chain sync".to_string() });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "Failed to persist ChannelMonitor update during chain sync".to_string() },
|
||||
[nodes[1].node.get_our_node_id()], 100000);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4276,7 +4276,8 @@ mod tests {
|
|||
assert!(err.contains("ChannelMonitor storage failure")));
|
||||
check_added_monitors!(nodes[1], 2); // After the failure we generate a close-channel monitor update
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() },
|
||||
[nodes[0].node.get_our_node_id()], 100000);
|
||||
|
||||
// Build a new ChannelMonitorUpdate which contains both the failing commitment tx update
|
||||
// and provides the claim preimages for the two pending HTLCs. The first update generates
|
||||
|
|
|
@ -767,7 +767,15 @@ pub enum Event {
|
|||
/// [`UserConfig::manually_accept_inbound_channels`]: crate::util::config::UserConfig::manually_accept_inbound_channels
|
||||
user_channel_id: u128,
|
||||
/// The reason the channel was closed.
|
||||
reason: ClosureReason
|
||||
reason: ClosureReason,
|
||||
/// Counterparty in the closed channel.
|
||||
///
|
||||
/// This field will be `None` for objects serialized prior to LDK 0.0.117.
|
||||
counterparty_node_id: Option<PublicKey>,
|
||||
/// Channel capacity of the closing channel (sats).
|
||||
///
|
||||
/// This field will be `None` for objects serialized prior to LDK 0.0.117.
|
||||
channel_capacity_sats: Option<u64>,
|
||||
},
|
||||
/// Used to indicate to the user that they can abandon the funding transaction and recycle the
|
||||
/// inputs for another purpose.
|
||||
|
@ -968,7 +976,9 @@ impl Writeable for Event {
|
|||
(5, outbound_amount_forwarded_msat, option),
|
||||
});
|
||||
},
|
||||
&Event::ChannelClosed { ref channel_id, ref user_channel_id, ref reason } => {
|
||||
&Event::ChannelClosed { ref channel_id, ref user_channel_id, ref reason,
|
||||
ref counterparty_node_id, ref channel_capacity_sats
|
||||
} => {
|
||||
9u8.write(writer)?;
|
||||
// `user_channel_id` used to be a single u64 value. In order to remain backwards
|
||||
// compatible with versions prior to 0.0.113, the u128 is serialized as two
|
||||
|
@ -980,6 +990,8 @@ impl Writeable for Event {
|
|||
(1, user_channel_id_low, required),
|
||||
(2, reason, required),
|
||||
(3, user_channel_id_high, required),
|
||||
(5, counterparty_node_id, option),
|
||||
(7, channel_capacity_sats, option),
|
||||
});
|
||||
},
|
||||
&Event::DiscardFunding { ref channel_id, ref transaction } => {
|
||||
|
@ -1264,11 +1276,15 @@ impl MaybeReadable for Event {
|
|||
let mut reason = UpgradableRequired(None);
|
||||
let mut user_channel_id_low_opt: Option<u64> = None;
|
||||
let mut user_channel_id_high_opt: Option<u64> = None;
|
||||
let mut counterparty_node_id = None;
|
||||
let mut channel_capacity_sats = None;
|
||||
read_tlv_fields!(reader, {
|
||||
(0, channel_id, required),
|
||||
(1, user_channel_id_low_opt, option),
|
||||
(2, reason, upgradable_required),
|
||||
(3, user_channel_id_high_opt, option),
|
||||
(5, counterparty_node_id, option),
|
||||
(7, channel_capacity_sats, option),
|
||||
});
|
||||
|
||||
// `user_channel_id` used to be a single u64 value. In order to remain
|
||||
|
@ -1277,7 +1293,8 @@ impl MaybeReadable for Event {
|
|||
let user_channel_id = (user_channel_id_low_opt.unwrap_or(0) as u128) +
|
||||
((user_channel_id_high_opt.unwrap_or(0) as u128) << 64);
|
||||
|
||||
Ok(Some(Event::ChannelClosed { channel_id, user_channel_id, reason: _init_tlv_based_struct_field!(reason, upgradable_required) }))
|
||||
Ok(Some(Event::ChannelClosed { channel_id, user_channel_id, reason: _init_tlv_based_struct_field!(reason, upgradable_required),
|
||||
counterparty_node_id, channel_capacity_sats }))
|
||||
};
|
||||
f()
|
||||
},
|
||||
|
|
|
@ -70,7 +70,8 @@ fn test_simple_monitor_permanent_update_fail() {
|
|||
// PaymentPathFailed event
|
||||
|
||||
assert_eq!(nodes[0].node.list_channels().len(), 0);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() },
|
||||
[nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -247,7 +248,7 @@ fn do_test_simple_monitor_temporary_update_fail(disconnect: bool) {
|
|||
// PaymentPathFailed event
|
||||
|
||||
assert_eq!(nodes[0].node.list_channels().len(), 0);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -1987,8 +1988,8 @@ fn do_during_funding_monitor_fail(confirm_a_first: bool, restore_b_before_conf:
|
|||
|
||||
send_payment(&nodes[0], &[&nodes[1]], 8000000);
|
||||
close_channel(&nodes[0], &nodes[1], &channel_id, funding_tx, true);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -2188,7 +2189,7 @@ fn test_fail_htlc_on_broadcast_after_claim() {
|
|||
expect_payment_forwarded!(nodes[1], nodes[0], nodes[2], Some(1000), false, false);
|
||||
|
||||
mine_transaction(&nodes[1], &bs_txn[0]);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[2].node.get_our_node_id()], 100000);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
|
@ -2666,8 +2667,8 @@ fn test_temporary_error_during_shutdown() {
|
|||
assert_eq!(txn_a, txn_b);
|
||||
assert_eq!(txn_a.len(), 1);
|
||||
check_spends!(txn_a[0], funding_tx);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -2696,7 +2697,8 @@ fn test_permanent_error_during_sending_shutdown() {
|
|||
if let MessageSendEvent::HandleError { .. } = msg_events[2] {} else { panic!(); }
|
||||
|
||||
check_added_monitors!(nodes[0], 2);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() },
|
||||
[nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -2727,7 +2729,8 @@ fn test_permanent_error_during_handling_shutdown() {
|
|||
if let MessageSendEvent::HandleError { .. } = msg_events[2] {} else { panic!(); }
|
||||
|
||||
check_added_monitors!(nodes[1], 2);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "ChannelMonitor storage failure".to_string() },
|
||||
[nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -2921,7 +2924,7 @@ fn do_test_outbound_reload_without_init_mon(use_0conf: bool) {
|
|||
nodes[0].chain_source.watched_outputs.lock().unwrap().clear();
|
||||
|
||||
reload_node!(nodes[0], &nodes[0].node.encode(), &[], persister, new_chain_monitor, nodes_0_deserialized);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::DisconnectedPeer);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::DisconnectedPeer, [nodes[1].node.get_our_node_id()], 100000);
|
||||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
}
|
||||
|
||||
|
@ -3008,7 +3011,7 @@ fn do_test_inbound_reload_without_init_mon(use_0conf: bool, lock_commitment: boo
|
|||
|
||||
reload_node!(nodes[1], &nodes[1].node.encode(), &[], persister, new_chain_monitor, nodes_1_deserialized);
|
||||
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::DisconnectedPeer);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::DisconnectedPeer, [nodes[0].node.get_our_node_id()], 100000);
|
||||
assert!(nodes[1].node.list_channels().is_empty());
|
||||
}
|
||||
|
||||
|
|
|
@ -397,6 +397,7 @@ struct MsgHandleErrInternal {
|
|||
err: msgs::LightningError,
|
||||
chan_id: Option<([u8; 32], u128)>, // If Some a channel of ours has been closed
|
||||
shutdown_finish: Option<(ShutdownResult, Option<msgs::ChannelUpdate>)>,
|
||||
channel_capacity: Option<u64>,
|
||||
}
|
||||
impl MsgHandleErrInternal {
|
||||
#[inline]
|
||||
|
@ -413,14 +414,15 @@ impl MsgHandleErrInternal {
|
|||
},
|
||||
chan_id: None,
|
||||
shutdown_finish: None,
|
||||
channel_capacity: None,
|
||||
}
|
||||
}
|
||||
#[inline]
|
||||
fn from_no_close(err: msgs::LightningError) -> Self {
|
||||
Self { err, chan_id: None, shutdown_finish: None }
|
||||
Self { err, chan_id: None, shutdown_finish: None, channel_capacity: None }
|
||||
}
|
||||
#[inline]
|
||||
fn from_finish_shutdown(err: String, channel_id: [u8; 32], user_channel_id: u128, shutdown_res: ShutdownResult, channel_update: Option<msgs::ChannelUpdate>) -> Self {
|
||||
fn from_finish_shutdown(err: String, channel_id: [u8; 32], user_channel_id: u128, shutdown_res: ShutdownResult, channel_update: Option<msgs::ChannelUpdate>, channel_capacity: u64) -> Self {
|
||||
Self {
|
||||
err: LightningError {
|
||||
err: err.clone(),
|
||||
|
@ -433,6 +435,7 @@ impl MsgHandleErrInternal {
|
|||
},
|
||||
chan_id: Some((channel_id, user_channel_id)),
|
||||
shutdown_finish: Some((shutdown_res, channel_update)),
|
||||
channel_capacity: Some(channel_capacity)
|
||||
}
|
||||
}
|
||||
#[inline]
|
||||
|
@ -465,6 +468,7 @@ impl MsgHandleErrInternal {
|
|||
},
|
||||
chan_id: None,
|
||||
shutdown_finish: None,
|
||||
channel_capacity: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1680,7 +1684,7 @@ macro_rules! handle_error {
|
|||
|
||||
match $internal {
|
||||
Ok(msg) => Ok(msg),
|
||||
Err(MsgHandleErrInternal { err, chan_id, shutdown_finish }) => {
|
||||
Err(MsgHandleErrInternal { err, chan_id, shutdown_finish, channel_capacity }) => {
|
||||
let mut msg_events = Vec::with_capacity(2);
|
||||
|
||||
if let Some((shutdown_res, update_option)) = shutdown_finish {
|
||||
|
@ -1693,7 +1697,9 @@ macro_rules! handle_error {
|
|||
if let Some((channel_id, user_channel_id)) = chan_id {
|
||||
$self.pending_events.lock().unwrap().push_back((events::Event::ChannelClosed {
|
||||
channel_id, user_channel_id,
|
||||
reason: ClosureReason::ProcessingError { err: err.err.clone() }
|
||||
reason: ClosureReason::ProcessingError { err: err.err.clone() },
|
||||
counterparty_node_id: Some($counterparty_node_id),
|
||||
channel_capacity_sats: channel_capacity,
|
||||
}, None));
|
||||
}
|
||||
}
|
||||
|
@ -1766,7 +1772,7 @@ macro_rules! convert_chan_err {
|
|||
update_maps_on_chan_removal!($self, &$channel.context);
|
||||
let shutdown_res = $channel.context.force_shutdown(true);
|
||||
(true, MsgHandleErrInternal::from_finish_shutdown(msg, *$channel_id, $channel.context.get_user_id(),
|
||||
shutdown_res, $self.get_channel_update_for_broadcast(&$channel).ok()))
|
||||
shutdown_res, $self.get_channel_update_for_broadcast(&$channel).ok(), $channel.context.get_value_satoshis()))
|
||||
},
|
||||
}
|
||||
};
|
||||
|
@ -1779,7 +1785,7 @@ macro_rules! convert_chan_err {
|
|||
update_maps_on_chan_removal!($self, &$channel_context);
|
||||
let shutdown_res = $channel_context.force_shutdown(false);
|
||||
(true, MsgHandleErrInternal::from_finish_shutdown(msg, *$channel_id, $channel_context.get_user_id(),
|
||||
shutdown_res, None))
|
||||
shutdown_res, None, $channel_context.get_value_satoshis()))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -1958,7 +1964,7 @@ macro_rules! handle_new_monitor_update {
|
|||
let res = Err(MsgHandleErrInternal::from_finish_shutdown(
|
||||
"ChannelMonitor storage failure".to_owned(), $chan.context.channel_id(),
|
||||
$chan.context.get_user_id(), $chan.context.force_shutdown(false),
|
||||
$self.get_channel_update_for_broadcast(&$chan).ok()));
|
||||
$self.get_channel_update_for_broadcast(&$chan).ok(), $chan.context.get_value_satoshis()));
|
||||
$remove;
|
||||
res
|
||||
},
|
||||
|
@ -2392,7 +2398,9 @@ where
|
|||
pending_events_lock.push_back((events::Event::ChannelClosed {
|
||||
channel_id: context.channel_id(),
|
||||
user_channel_id: context.get_user_id(),
|
||||
reason: closure_reason
|
||||
reason: closure_reason,
|
||||
counterparty_node_id: Some(context.get_counterparty_node_id()),
|
||||
channel_capacity_sats: Some(context.get_value_satoshis()),
|
||||
}, None));
|
||||
}
|
||||
|
||||
|
@ -3408,7 +3416,8 @@ where
|
|||
let channel_id = chan.context.channel_id();
|
||||
let user_id = chan.context.get_user_id();
|
||||
let shutdown_res = chan.context.force_shutdown(false);
|
||||
(chan, MsgHandleErrInternal::from_finish_shutdown(msg, channel_id, user_id, shutdown_res, None))
|
||||
let channel_capacity = chan.context.get_value_satoshis();
|
||||
(chan, MsgHandleErrInternal::from_finish_shutdown(msg, channel_id, user_id, shutdown_res, None, channel_capacity))
|
||||
} else { unreachable!(); });
|
||||
match funding_res {
|
||||
Ok((chan, funding_msg)) => (chan, funding_msg),
|
||||
|
@ -5492,7 +5501,7 @@ where
|
|||
let user_id = inbound_chan.context.get_user_id();
|
||||
let shutdown_res = inbound_chan.context.force_shutdown(false);
|
||||
return Err(MsgHandleErrInternal::from_finish_shutdown(format!("{}", err),
|
||||
msg.temporary_channel_id, user_id, shutdown_res, None));
|
||||
msg.temporary_channel_id, user_id, shutdown_res, None, inbound_chan.context.get_value_satoshis()));
|
||||
},
|
||||
}
|
||||
},
|
||||
|
@ -8442,7 +8451,9 @@ where
|
|||
channel_closures.push_back((events::Event::ChannelClosed {
|
||||
channel_id: channel.context.channel_id(),
|
||||
user_channel_id: channel.context.get_user_id(),
|
||||
reason: ClosureReason::OutdatedChannelManager
|
||||
reason: ClosureReason::OutdatedChannelManager,
|
||||
counterparty_node_id: Some(channel.context.get_counterparty_node_id()),
|
||||
channel_capacity_sats: Some(channel.context.get_value_satoshis()),
|
||||
}, None));
|
||||
for (channel_htlc_source, payment_hash) in channel.inflight_htlc_sources() {
|
||||
let mut found_htlc = false;
|
||||
|
@ -8494,6 +8505,8 @@ where
|
|||
channel_id: channel.context.channel_id(),
|
||||
user_channel_id: channel.context.get_user_id(),
|
||||
reason: ClosureReason::DisconnectedPeer,
|
||||
counterparty_node_id: Some(channel.context.get_counterparty_node_id()),
|
||||
channel_capacity_sats: Some(channel.context.get_value_satoshis()),
|
||||
}, None));
|
||||
} else {
|
||||
log_error!(args.logger, "Missing ChannelMonitor for channel {} needed by ChannelManager.", log_bytes!(channel.context.channel_id()));
|
||||
|
@ -9710,7 +9723,7 @@ mod tests {
|
|||
nodes[0].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[1].node.get_our_node_id()).unwrap();
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
{
|
||||
// Assert that nodes[1] is awaiting removal for nodes[0] once nodes[1] has been
|
||||
|
@ -9873,8 +9886,8 @@ mod tests {
|
|||
}
|
||||
let (_nodes_1_update, _none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
|
||||
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
}
|
||||
|
||||
fn check_not_connected_to_peer_error<T>(res_err: Result<T, APIError>, expected_public_key: PublicKey) {
|
||||
|
@ -10267,7 +10280,7 @@ mod tests {
|
|||
let open_channel_msg = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
|
||||
assert!(!open_channel_msg.channel_type.unwrap().supports_anchors_zero_fee_htlc_tx());
|
||||
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -1418,14 +1418,18 @@ macro_rules! check_closed_broadcast {
|
|||
}
|
||||
|
||||
/// Check that a channel's closing channel events has been issued
|
||||
pub fn check_closed_event(node: &Node, events_count: usize, expected_reason: ClosureReason, is_check_discard_funding: bool) {
|
||||
pub fn check_closed_event(node: &Node, events_count: usize, expected_reason: ClosureReason, is_check_discard_funding: bool,
|
||||
expected_counterparty_node_ids: &[PublicKey], expected_channel_capacity: u64) {
|
||||
let events = node.node.get_and_clear_pending_events();
|
||||
assert_eq!(events.len(), events_count, "{:?}", events);
|
||||
let mut issues_discard_funding = false;
|
||||
for event in events {
|
||||
for (idx, event) in events.into_iter().enumerate() {
|
||||
match event {
|
||||
Event::ChannelClosed { ref reason, .. } => {
|
||||
Event::ChannelClosed { ref reason, counterparty_node_id,
|
||||
channel_capacity_sats, .. } => {
|
||||
assert_eq!(*reason, expected_reason);
|
||||
assert_eq!(counterparty_node_id.unwrap(), expected_counterparty_node_ids[idx]);
|
||||
assert_eq!(channel_capacity_sats.unwrap(), expected_channel_capacity);
|
||||
},
|
||||
Event::DiscardFunding { .. } => {
|
||||
issues_discard_funding = true;
|
||||
|
@ -1441,11 +1445,12 @@ pub fn check_closed_event(node: &Node, events_count: usize, expected_reason: Clo
|
|||
/// Don't use this, use the identically-named function instead.
|
||||
#[macro_export]
|
||||
macro_rules! check_closed_event {
|
||||
($node: expr, $events: expr, $reason: expr) => {
|
||||
check_closed_event!($node, $events, $reason, false);
|
||||
($node: expr, $events: expr, $reason: expr, $counterparty_node_ids: expr, $channel_capacity: expr) => {
|
||||
check_closed_event!($node, $events, $reason, false, $counterparty_node_ids, $channel_capacity);
|
||||
};
|
||||
($node: expr, $events: expr, $reason: expr, $is_check_discard_funding: expr) => {
|
||||
$crate::ln::functional_test_utils::check_closed_event(&$node, $events, $reason, $is_check_discard_funding);
|
||||
($node: expr, $events: expr, $reason: expr, $is_check_discard_funding: expr, $counterparty_node_ids: expr, $channel_capacity: expr) => {
|
||||
$crate::ln::functional_test_utils::check_closed_event(&$node, $events, $reason,
|
||||
$is_check_discard_funding, &$counterparty_node_ids, $channel_capacity);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -763,7 +763,8 @@ fn test_update_fee_that_funder_cannot_afford() {
|
|||
nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Funding remote cannot afford proposed new fee".to_string(), 1);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: String::from("Funding remote cannot afford proposed new fee") });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: String::from("Funding remote cannot afford proposed new fee") },
|
||||
[nodes[0].node.get_our_node_id()], channel_value);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -862,8 +863,8 @@ fn test_update_fee_with_fundee_update_add_htlc() {
|
|||
send_payment(&nodes[1], &vec!(&nodes[0])[..], 800000);
|
||||
send_payment(&nodes[0], &vec!(&nodes[1])[..], 800000);
|
||||
close_channel(&nodes[0], &nodes[1], &chan.2, chan.3, true);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -976,8 +977,8 @@ fn test_update_fee() {
|
|||
assert_eq!(get_feerate!(nodes[0], nodes[1], channel_id), feerate + 30);
|
||||
assert_eq!(get_feerate!(nodes[1], nodes[0], channel_id), feerate + 30);
|
||||
close_channel(&nodes[0], &nodes[1], &chan.2, chan.3, true);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -1085,17 +1086,17 @@ fn fake_network_test() {
|
|||
|
||||
// Close down the channels...
|
||||
close_channel(&nodes[0], &nodes[1], &chan_1.2, chan_1.3, true);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, false);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[2].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
close_channel(&nodes[2], &nodes[3], &chan_3.2, chan_3.3, true);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[3], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure, [nodes[3].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[3], 1, ClosureReason::CooperativeClosure, [nodes[2].node.get_our_node_id()], 100000);
|
||||
close_channel(&nodes[1], &nodes[3], &chan_4.2, chan_4.3, false);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[3], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[3].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[3], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -1287,7 +1288,7 @@ fn test_duplicate_htlc_different_direction_onchain() {
|
|||
|
||||
mine_transaction(&nodes[0], &remote_txn[0]);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[0], TEST_FINAL_CLTV); // Confirm blocks until the HTLC expires
|
||||
|
||||
let claim_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
|
@ -1595,7 +1596,8 @@ fn test_chan_reserve_violation_inbound_htlc_outbound_channel() {
|
|||
let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
|
||||
assert_eq!(err_msg.data, "Cannot accept HTLC that would put our balance under counterparty-announced channel reserve value");
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "Cannot accept HTLC that would put our balance under counterparty-announced channel reserve value".to_string() });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "Cannot accept HTLC that would put our balance under counterparty-announced channel reserve value".to_string() },
|
||||
[nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -1772,7 +1774,8 @@ fn test_chan_reserve_violation_inbound_htlc_inbound_chan() {
|
|||
let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
|
||||
assert_eq!(err_msg.data, "Remote HTLC add would put them under remote reserve value");
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "Remote HTLC add would put them under remote reserve value".to_string() });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "Remote HTLC add would put them under remote reserve value".to_string() },
|
||||
[nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -2253,8 +2256,8 @@ fn channel_monitor_network_test() {
|
|||
check_closed_broadcast!(nodes[0], true);
|
||||
assert_eq!(nodes[0].node.list_channels().len(), 0);
|
||||
assert_eq!(nodes[1].node.list_channels().len(), 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
|
||||
// One pending HTLC is discarded by the force-close:
|
||||
let (payment_preimage_1, payment_hash_1, _) = route_payment(&nodes[1], &[&nodes[2], &nodes[3]], 3_000_000);
|
||||
|
@ -2275,8 +2278,8 @@ fn channel_monitor_network_test() {
|
|||
check_closed_broadcast!(nodes[2], true);
|
||||
assert_eq!(nodes[1].node.list_channels().len(), 0);
|
||||
assert_eq!(nodes[2].node.list_channels().len(), 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[2].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
macro_rules! claim_funds {
|
||||
($node: expr, $prev_node: expr, $preimage: expr, $payment_hash: expr) => {
|
||||
|
@ -2320,8 +2323,8 @@ fn channel_monitor_network_test() {
|
|||
check_closed_broadcast!(nodes[3], true);
|
||||
assert_eq!(nodes[2].node.list_channels().len(), 0);
|
||||
assert_eq!(nodes[3].node.list_channels().len(), 1);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[3], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::HolderForceClosed, [nodes[3].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[3], 1, ClosureReason::CommitmentTxConfirmed, [nodes[2].node.get_our_node_id()], 100000);
|
||||
|
||||
// Drop the ChannelMonitor for the previous channel to avoid it broadcasting transactions and
|
||||
// confusing us in the following tests.
|
||||
|
@ -2394,8 +2397,8 @@ fn channel_monitor_network_test() {
|
|||
|
||||
assert_eq!(nodes[3].chain_monitor.chain_monitor.watch_channel(OutPoint { txid: chan_3.3.txid(), index: 0 }, chan_3_mon),
|
||||
ChannelMonitorUpdateStatus::Completed);
|
||||
check_closed_event!(nodes[3], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[4], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[3], 1, ClosureReason::CommitmentTxConfirmed, [nodes[4].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[4], 1, ClosureReason::CommitmentTxConfirmed, [nodes[3].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -2443,7 +2446,7 @@ fn test_justice_tx_htlc_timeout() {
|
|||
node_txn.swap_remove(0);
|
||||
}
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
test_txn_broadcast(&nodes[1], &chan_5, Some(revoked_local_txn[0].clone()), HTLCType::NONE);
|
||||
|
||||
mine_transaction(&nodes[0], &revoked_local_txn[0]);
|
||||
|
@ -2451,7 +2454,7 @@ fn test_justice_tx_htlc_timeout() {
|
|||
// Verify broadcast of revoked HTLC-timeout
|
||||
let node_txn = test_txn_broadcast(&nodes[0], &chan_5, Some(revoked_local_txn[0].clone()), HTLCType::TIMEOUT);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
// Broadcast revoked HTLC-timeout on node 1
|
||||
mine_transaction(&nodes[1], &node_txn[1]);
|
||||
test_revoked_htlc_claim_txn_broadcast(&nodes[1], node_txn[1].clone(), revoked_local_txn[0].clone());
|
||||
|
@ -2506,11 +2509,11 @@ fn test_justice_tx_htlc_success() {
|
|||
test_txn_broadcast(&nodes[0], &chan_6, Some(revoked_local_txn[0].clone()), HTLCType::NONE);
|
||||
|
||||
mine_transaction(&nodes[1], &revoked_local_txn[0]);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let node_txn = test_txn_broadcast(&nodes[1], &chan_6, Some(revoked_local_txn[0].clone()), HTLCType::SUCCESS);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
mine_transaction(&nodes[0], &node_txn[1]);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
test_revoked_htlc_claim_txn_broadcast(&nodes[0], node_txn[1].clone(), revoked_local_txn[0].clone());
|
||||
}
|
||||
get_announce_close_broadcast_events(&nodes, 0, 1);
|
||||
|
@ -2538,7 +2541,7 @@ fn revoked_output_claim() {
|
|||
// Inform nodes[1] that nodes[0] broadcast a stale tx
|
||||
mine_transaction(&nodes[1], &revoked_local_txn[0]);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
assert_eq!(node_txn.len(), 1); // ChannelMonitor: justice tx against revoked to_local output
|
||||
|
||||
|
@ -2548,7 +2551,7 @@ fn revoked_output_claim() {
|
|||
mine_transaction(&nodes[0], &revoked_local_txn[0]);
|
||||
get_announce_close_broadcast_events(&nodes, 0, 1);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -2585,10 +2588,10 @@ fn claim_htlc_outputs_shared_tx() {
|
|||
{
|
||||
mine_transaction(&nodes[0], &revoked_local_txn[0]);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
mine_transaction(&nodes[1], &revoked_local_txn[0]);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
|
||||
assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
|
||||
|
||||
|
@ -2647,7 +2650,7 @@ fn claim_htlc_outputs_single_tx() {
|
|||
check_added_monitors!(nodes[0], 1);
|
||||
confirm_transaction_at(&nodes[1], &revoked_local_txn[0], 100);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let mut events = nodes[0].node.get_and_clear_pending_events();
|
||||
expect_pending_htlcs_forwardable_from_events!(nodes[0], events[0..1], true);
|
||||
match events.last().unwrap() {
|
||||
|
@ -2759,7 +2762,7 @@ fn test_htlc_on_chain_success() {
|
|||
mine_transaction(&nodes[2], &commitment_tx[0]);
|
||||
check_closed_broadcast!(nodes[2], true);
|
||||
check_added_monitors!(nodes[2], 1);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelMonitor: 2 (2 * HTLC-Success tx)
|
||||
assert_eq!(node_txn.len(), 2);
|
||||
check_spends!(node_txn[0], commitment_tx[0]);
|
||||
|
@ -2876,7 +2879,7 @@ fn test_htlc_on_chain_success() {
|
|||
mine_transaction(&nodes[1], &node_a_commitment_tx[0]);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
assert!(node_txn.len() == 1 || node_txn.len() == 3); // HTLC-Success, 2* RBF bumps of above HTLC txn
|
||||
let commitment_spend =
|
||||
|
@ -2984,14 +2987,15 @@ fn do_test_htlc_on_chain_timeout(connect_style: ConnectStyle) {
|
|||
mine_transaction(&nodes[2], &commitment_tx[0]);
|
||||
check_closed_broadcast!(nodes[2], true);
|
||||
check_added_monitors!(nodes[2], 1);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
let node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
assert_eq!(node_txn.len(), 0);
|
||||
|
||||
// Broadcast timeout transaction by B on received output from C's commitment tx on B's chain
|
||||
// Verify that B's ChannelManager is able to detect that HTLC is timeout by its own tx and react backward in consequence
|
||||
mine_transaction(&nodes[1], &commitment_tx[0]);
|
||||
check_closed_event(&nodes[1], 1, ClosureReason::CommitmentTxConfirmed, false);
|
||||
check_closed_event!(&nodes[1], 1, ClosureReason::CommitmentTxConfirmed, false
|
||||
, [nodes[2].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[1], 200 - nodes[2].best_block_info().1);
|
||||
let timeout_tx = {
|
||||
let mut txn = nodes[1].tx_broadcaster.txn_broadcast();
|
||||
|
@ -3035,7 +3039,7 @@ fn do_test_htlc_on_chain_timeout(connect_style: ConnectStyle) {
|
|||
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // 1 timeout tx
|
||||
assert_eq!(node_txn.len(), 1);
|
||||
check_spends!(node_txn[0], commitment_tx[0]);
|
||||
|
@ -3072,7 +3076,7 @@ fn test_simple_commitment_revoked_fail_backward() {
|
|||
let (_, payment_hash, _) = route_payment(&nodes[0], &[&nodes[1], &nodes[2]], 3000000);
|
||||
|
||||
mine_transaction(&nodes[1], &revoked_local_txn[0]);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[2].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
|
@ -3465,7 +3469,7 @@ fn test_htlc_ignore_latest_remote_commitment() {
|
|||
connect_blocks(&nodes[0], TEST_FINAL_CLTV + LATENCY_GRACE_PERIOD_BLOCKS + 1);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
assert_eq!(node_txn.len(), 3);
|
||||
|
@ -3475,7 +3479,7 @@ fn test_htlc_ignore_latest_remote_commitment() {
|
|||
connect_block(&nodes[1], &block);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
|
||||
// Duplicate the connect_block call since this may happen due to other listeners
|
||||
// registering new transactions
|
||||
|
@ -3527,7 +3531,7 @@ fn test_force_close_fail_back() {
|
|||
nodes[2].node.force_close_broadcasting_latest_txn(&payment_event.commitment_msg.channel_id, &nodes[1].node.get_our_node_id()).unwrap();
|
||||
check_closed_broadcast!(nodes[2], true);
|
||||
check_added_monitors!(nodes[2], 1);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
let tx = {
|
||||
let mut node_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap();
|
||||
// Note that we don't bother broadcasting the HTLC-Success transaction here as we don't
|
||||
|
@ -3542,7 +3546,7 @@ fn test_force_close_fail_back() {
|
|||
// Note no UpdateHTLCs event here from nodes[1] to nodes[0]!
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[2].node.get_our_node_id()], 100000);
|
||||
|
||||
// Now check that if we add the preimage to ChannelMonitor it broadcasts our HTLC-Success..
|
||||
{
|
||||
|
@ -3628,8 +3632,10 @@ fn test_peer_disconnected_before_funding_broadcasted() {
|
|||
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
|
||||
|
||||
check_closed_event(&nodes[0], 1, ClosureReason::DisconnectedPeer, false);
|
||||
check_closed_event(&nodes[1], 1, ClosureReason::DisconnectedPeer, false);
|
||||
check_closed_event!(&nodes[0], 1, ClosureReason::DisconnectedPeer, false
|
||||
, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
check_closed_event!(&nodes[1], 1, ClosureReason::DisconnectedPeer, false
|
||||
, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -4327,7 +4333,7 @@ fn test_claim_sizeable_push_msat() {
|
|||
nodes[1].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[0].node.get_our_node_id()).unwrap();
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
assert_eq!(node_txn.len(), 1);
|
||||
check_spends!(node_txn[0], chan.3);
|
||||
|
@ -4356,7 +4362,7 @@ fn test_claim_on_remote_sizeable_push_msat() {
|
|||
nodes[0].node.force_close_broadcasting_latest_txn(&chan.2, &nodes[1].node.get_our_node_id()).unwrap();
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
assert_eq!(node_txn.len(), 1);
|
||||
|
@ -4366,7 +4372,7 @@ fn test_claim_on_remote_sizeable_push_msat() {
|
|||
mine_transaction(&nodes[1], &node_txn[0]);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
|
||||
|
||||
let spend_txn = check_spendable_outputs!(nodes[1], node_cfgs[1].keys_manager);
|
||||
|
@ -4394,7 +4400,7 @@ fn test_claim_on_remote_revoked_sizeable_push_msat() {
|
|||
mine_transaction(&nodes[1], &revoked_local_txn[0]);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
|
||||
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
mine_transaction(&nodes[1], &node_txn[0]);
|
||||
|
@ -4446,7 +4452,7 @@ fn test_static_spendable_outputs_preimage_tx() {
|
|||
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
|
||||
|
||||
mine_transaction(&nodes[1], &node_txn[0]);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
|
||||
|
||||
let spend_txn = check_spendable_outputs!(nodes[1], node_cfgs[1].keys_manager);
|
||||
|
@ -4490,7 +4496,7 @@ fn test_static_spendable_outputs_timeout_tx() {
|
|||
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
|
||||
|
||||
mine_transaction(&nodes[1], &node_txn[0]);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
|
||||
expect_payment_failed!(nodes[1], our_payment_hash, false);
|
||||
|
||||
|
@ -4521,7 +4527,7 @@ fn test_static_spendable_outputs_justice_tx_revoked_commitment_tx() {
|
|||
mine_transaction(&nodes[1], &revoked_local_txn[0]);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
|
||||
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
assert_eq!(node_txn.len(), 1);
|
||||
|
@ -4558,7 +4564,7 @@ fn test_static_spendable_outputs_justice_tx_revoked_htlc_timeout_tx() {
|
|||
mine_transaction(&nodes[0], &revoked_local_txn[0]);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[0], TEST_FINAL_CLTV); // Confirm blocks until the HTLC expires
|
||||
|
||||
let revoked_htlc_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
|
@ -4572,7 +4578,7 @@ fn test_static_spendable_outputs_justice_tx_revoked_htlc_timeout_tx() {
|
|||
connect_block(&nodes[1], &create_dummy_block(nodes[1].best_block_hash(), 42, vec![revoked_local_txn[0].clone(), revoked_htlc_txn[0].clone()]));
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
|
||||
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
assert_eq!(node_txn.len(), 2); // ChannelMonitor: bogus justice tx, justice tx on revoked outputs
|
||||
|
@ -4626,7 +4632,7 @@ fn test_static_spendable_outputs_justice_tx_revoked_htlc_success_tx() {
|
|||
mine_transaction(&nodes[1], &revoked_local_txn[0]);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let revoked_htlc_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
|
||||
assert_eq!(revoked_htlc_txn.len(), 1);
|
||||
|
@ -4642,7 +4648,7 @@ fn test_static_spendable_outputs_justice_tx_revoked_htlc_success_tx() {
|
|||
connect_block(&nodes[0], &create_dummy_block(nodes[0].best_block_hash(), 42, vec![revoked_local_txn[0].clone(), revoked_htlc_txn[0].clone()]));
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
assert_eq!(node_txn.len(), 2); // ChannelMonitor: justice tx on revoked commitment, justice tx on revoked HTLC-success
|
||||
|
@ -4722,7 +4728,7 @@ fn test_onchain_to_onchain_claim() {
|
|||
mine_transaction(&nodes[2], &commitment_tx[0]);
|
||||
check_closed_broadcast!(nodes[2], true);
|
||||
check_added_monitors!(nodes[2], 1);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
let c_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().clone(); // ChannelMonitor: 1 (HTLC-Success tx)
|
||||
assert_eq!(c_txn.len(), 1);
|
||||
|
@ -4781,7 +4787,7 @@ fn test_onchain_to_onchain_claim() {
|
|||
// Broadcast A's commitment tx on B's chain to see if we are able to claim inbound HTLC with our HTLC-Success tx
|
||||
let commitment_tx = get_local_commitment_txn!(nodes[0], chan_1.2);
|
||||
mine_transaction(&nodes[1], &commitment_tx[0]);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let b_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
|
||||
// ChannelMonitor: HTLC-Success tx
|
||||
assert_eq!(b_txn.len(), 1);
|
||||
|
@ -4838,7 +4844,7 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
|
|||
mine_transaction(&nodes[1], &commitment_txn[0]);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[2].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[1], TEST_FINAL_CLTV - 40 + MIN_CLTV_EXPIRY_DELTA as u32); // Confirm blocks until the HTLC expires
|
||||
|
||||
let htlc_timeout_tx;
|
||||
|
@ -4885,7 +4891,7 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
|
|||
|
||||
mine_transaction(&nodes[2], &commitment_txn[0]);
|
||||
check_added_monitors!(nodes[2], 2);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
let events = nodes[2].node.get_and_clear_pending_msg_events();
|
||||
match events[0] {
|
||||
MessageSendEvent::UpdateHTLCs { .. } => {},
|
||||
|
@ -4963,7 +4969,7 @@ fn test_dynamic_spendable_outputs_local_htlc_success_tx() {
|
|||
|
||||
mine_transaction(&nodes[1], &local_txn[0]);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let events = nodes[1].node.get_and_clear_pending_msg_events();
|
||||
match events[0] {
|
||||
MessageSendEvent::UpdateHTLCs { .. } => {},
|
||||
|
@ -5318,7 +5324,7 @@ fn test_dynamic_spendable_outputs_local_htlc_timeout_tx() {
|
|||
mine_transaction(&nodes[0], &local_txn[0]);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[0], TEST_FINAL_CLTV); // Confirm blocks until the HTLC expires
|
||||
|
||||
let htlc_timeout = {
|
||||
|
@ -5405,7 +5411,7 @@ fn test_key_derivation_params() {
|
|||
connect_blocks(&nodes[0], TEST_FINAL_CLTV); // Confirm blocks until the HTLC expires
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
let htlc_timeout = {
|
||||
let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
|
||||
|
@ -5447,7 +5453,7 @@ fn test_static_output_closing_tx() {
|
|||
let closing_tx = close_channel(&nodes[0], &nodes[1], &chan.2, chan.3, true).2;
|
||||
|
||||
mine_transaction(&nodes[0], &closing_tx);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[0], ANTI_REORG_DELAY - 1);
|
||||
|
||||
let spend_txn = check_spendable_outputs!(nodes[0], node_cfgs[0].keys_manager);
|
||||
|
@ -5455,7 +5461,7 @@ fn test_static_output_closing_tx() {
|
|||
check_spends!(spend_txn[0], closing_tx);
|
||||
|
||||
mine_transaction(&nodes[1], &closing_tx);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
|
||||
|
||||
let spend_txn = check_spendable_outputs!(nodes[1], node_cfgs[1].keys_manager);
|
||||
|
@ -5497,7 +5503,7 @@ fn do_htlc_claim_local_commitment_only(use_dust: bool) {
|
|||
test_txn_broadcast(&nodes[1], &chan, None, if use_dust { HTLCType::NONE } else { HTLCType::SUCCESS });
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
fn do_htlc_claim_current_remote_commitment_only(use_dust: bool) {
|
||||
|
@ -5528,7 +5534,7 @@ fn do_htlc_claim_current_remote_commitment_only(use_dust: bool) {
|
|||
test_txn_broadcast(&nodes[0], &chan, None, HTLCType::NONE);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
fn do_htlc_claim_previous_remote_commitment_only(use_dust: bool, check_revoke_no_close: bool) {
|
||||
|
@ -5574,7 +5580,7 @@ fn do_htlc_claim_previous_remote_commitment_only(use_dust: bool, check_revoke_no
|
|||
test_txn_broadcast(&nodes[0], &chan, None, HTLCType::NONE);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
} else {
|
||||
expect_payment_failed!(nodes[0], our_payment_hash, true);
|
||||
}
|
||||
|
@ -6103,7 +6109,8 @@ fn test_update_add_htlc_bolt2_receiver_zero_value_msat() {
|
|||
nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Remote side tried to send a 0-msat HTLC".to_string(), 1);
|
||||
check_closed_broadcast!(nodes[1], true).unwrap();
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "Remote side tried to send a 0-msat HTLC".to_string() });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "Remote side tried to send a 0-msat HTLC".to_string() },
|
||||
[nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6224,7 +6231,7 @@ fn test_update_add_htlc_bolt2_receiver_check_amount_received_more_than_min() {
|
|||
let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
|
||||
assert!(regex::Regex::new(r"Remote side tried to send less than our minimum HTLC value\. Lower limit: \(\d+\)\. Actual: \(\d+\)").unwrap().is_match(err_msg.data.as_str()));
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6260,7 +6267,7 @@ fn test_update_add_htlc_bolt2_receiver_sender_can_afford_amount_sent() {
|
|||
let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
|
||||
assert_eq!(err_msg.data, "Remote HTLC add would put them under remote reserve value");
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6305,7 +6312,7 @@ fn test_update_add_htlc_bolt2_receiver_check_max_htlc_limit() {
|
|||
let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
|
||||
assert!(regex::Regex::new(r"Remote tried to push more than our max accepted HTLCs \(\d+\)").unwrap().is_match(err_msg.data.as_str()));
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6329,7 +6336,7 @@ fn test_update_add_htlc_bolt2_receiver_check_max_in_flight_msat() {
|
|||
let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
|
||||
assert!(regex::Regex::new("Remote HTLC add would put them over our max HTLC value").unwrap().is_match(err_msg.data.as_str()));
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6353,7 +6360,7 @@ fn test_update_add_htlc_bolt2_receiver_check_cltv_expiry() {
|
|||
let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
|
||||
assert_eq!(err_msg.data,"Remote provided CLTV expiry in seconds instead of block height");
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6405,7 +6412,7 @@ fn test_update_add_htlc_bolt2_receiver_check_repeated_id_ignore() {
|
|||
let err_msg = check_closed_broadcast!(nodes[1], true).unwrap();
|
||||
assert!(regex::Regex::new(r"Remote skipped HTLC ID \(skipped ID: \d+\)").unwrap().is_match(err_msg.data.as_str()));
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6437,7 +6444,7 @@ fn test_update_fulfill_htlc_bolt2_update_fulfill_htlc_before_commitment() {
|
|||
let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
|
||||
assert!(regex::Regex::new(r"Remote tried to fulfill/fail HTLC \(\d+\) before it had been committed").unwrap().is_match(err_msg.data.as_str()));
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6469,7 +6476,7 @@ fn test_update_fulfill_htlc_bolt2_update_fail_htlc_before_commitment() {
|
|||
let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
|
||||
assert!(regex::Regex::new(r"Remote tried to fulfill/fail HTLC \(\d+\) before it had been committed").unwrap().is_match(err_msg.data.as_str()));
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6501,7 +6508,7 @@ fn test_update_fulfill_htlc_bolt2_update_fail_malformed_htlc_before_commitment()
|
|||
let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
|
||||
assert!(regex::Regex::new(r"Remote tried to fulfill/fail HTLC \(\d+\) before it had been committed").unwrap().is_match(err_msg.data.as_str()));
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6544,7 +6551,7 @@ fn test_update_fulfill_htlc_bolt2_incorrect_htlc_id() {
|
|||
let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
|
||||
assert_eq!(err_msg.data, "Remote tried to fulfill/fail an HTLC we couldn't find");
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6587,7 +6594,7 @@ fn test_update_fulfill_htlc_bolt2_wrong_preimage() {
|
|||
let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
|
||||
assert!(regex::Regex::new(r"Remote tried to fulfill HTLC \(\d+\) with an incorrect preimage").unwrap().is_match(err_msg.data.as_str()));
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6634,7 +6641,7 @@ fn test_update_fulfill_htlc_bolt2_missing_badonion_bit_for_malformed_htlc_messag
|
|||
let err_msg = check_closed_broadcast!(nodes[0], true).unwrap();
|
||||
assert_eq!(err_msg.data, "Got update_fail_malformed_htlc with BADONION not set");
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: err_msg.data }, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -6861,7 +6868,7 @@ fn do_test_failure_delay_dust_htlc_local_commitment(announce_latest: bool) {
|
|||
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
|
||||
connect_blocks(&nodes[0], ANTI_REORG_DELAY - 1);
|
||||
|
@ -6924,7 +6931,7 @@ fn do_test_sweep_outbound_htlc_failure_update(revoked: bool, local: bool) {
|
|||
if local {
|
||||
// We fail dust-HTLC 1 by broadcast of local commitment tx
|
||||
mine_transaction(&nodes[0], &as_commitment_tx[0]);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[0], ANTI_REORG_DELAY - 1);
|
||||
expect_payment_failed!(nodes[0], dust_hash, false);
|
||||
|
||||
|
@ -6944,7 +6951,7 @@ fn do_test_sweep_outbound_htlc_failure_update(revoked: bool, local: bool) {
|
|||
mine_transaction(&nodes[0], &bs_commitment_tx[0]);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
|
||||
|
||||
connect_blocks(&nodes[0], TEST_FINAL_CLTV); // Confirm blocks until the HTLC expires
|
||||
|
@ -7030,7 +7037,7 @@ fn test_user_configurable_csv_delay() {
|
|||
_ => { panic!(); }
|
||||
}
|
||||
} else { panic!(); }
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: reason_msg });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: reason_msg }, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
|
||||
// We test msg.to_self_delay <= config.their_to_self_delay is enforced in InboundV1Channel::new()
|
||||
nodes[1].node.create_channel(nodes[0].node.get_our_node_id(), 1000000, 1000000, 42, None).unwrap();
|
||||
|
@ -7339,7 +7346,7 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
|
|||
connect_block(&nodes[1], &create_dummy_block(nodes[1].best_block_hash(), 42, vec![revoked_local_txn[0].clone()]));
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
connect_blocks(&nodes[1], 50); // Confirm blocks until the HTLC expires (note CLTV was explicitly 50 above)
|
||||
|
||||
let revoked_htlc_txn = {
|
||||
|
@ -7607,7 +7614,8 @@ fn test_counterparty_raa_skip_no_crash() {
|
|||
});
|
||||
assert_eq!(check_closed_broadcast!(nodes[1], true).unwrap().data, "Received an unexpected revoke_and_ack");
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "Received an unexpected revoke_and_ack".to_string() });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "Received an unexpected revoke_and_ack".to_string() }
|
||||
, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -7640,7 +7648,7 @@ fn test_bump_txn_sanitize_tracking_maps() {
|
|||
mine_transaction(&nodes[0], &revoked_local_txn[0]);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
let penalty_txn = {
|
||||
let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
|
||||
assert_eq!(node_txn.len(), 3); //ChannelMonitor: justice txn * 3
|
||||
|
@ -7684,7 +7692,7 @@ fn test_channel_conf_timeout() {
|
|||
|
||||
connect_blocks(&nodes[1], 1);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::FundingTimedOut);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::FundingTimedOut, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
let close_ev = nodes[1].node.get_and_clear_pending_msg_events();
|
||||
assert_eq!(close_ev.len(), 1);
|
||||
match close_ev[0] {
|
||||
|
@ -7870,7 +7878,7 @@ fn test_manually_reject_inbound_channel_request() {
|
|||
}
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -7933,7 +7941,8 @@ fn test_reject_funding_before_inbound_channel_accepted() {
|
|||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: expected_err.to_string() });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: expected_err.to_string() }
|
||||
, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -8486,7 +8495,8 @@ fn test_concurrent_monitor_claim() {
|
|||
let height = HTLC_TIMEOUT_BROADCAST + 1;
|
||||
connect_blocks(&nodes[0], height - nodes[0].best_block_info().1);
|
||||
check_closed_broadcast(&nodes[0], 1, true);
|
||||
check_closed_event(&nodes[0], 1, ClosureReason::CommitmentTxConfirmed, false);
|
||||
check_closed_event!(&nodes[0], 1, ClosureReason::CommitmentTxConfirmed, false,
|
||||
[nodes[1].node.get_our_node_id()], 100000);
|
||||
watchtower_alice.chain_monitor.block_connected(&create_dummy_block(BlockHash::all_zeros(), 42, vec![bob_state_y.clone()]), height);
|
||||
check_added_monitors(&nodes[0], 1);
|
||||
{
|
||||
|
@ -8534,7 +8544,8 @@ fn test_pre_lockin_no_chan_closed_update() {
|
|||
let channel_id = crate::chain::transaction::OutPoint { txid: funding_created_msg.funding_txid, index: funding_created_msg.funding_output_index }.to_channel_id();
|
||||
nodes[0].node.handle_error(&nodes[1].node.get_our_node_id(), &msgs::ErrorMessage { channel_id, data: "Hi".to_owned() });
|
||||
assert!(nodes[0].chain_monitor.added_monitors.lock().unwrap().is_empty());
|
||||
check_closed_event!(nodes[0], 2, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString("Hi".to_string()) }, true);
|
||||
check_closed_event!(nodes[0], 2, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString("Hi".to_string()) }, true,
|
||||
[nodes[1].node.get_our_node_id(); 2], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -8569,7 +8580,7 @@ fn test_htlc_no_detection() {
|
|||
chain::Listen::block_connected(&nodes[0].chain_monitor.chain_monitor, &block, nodes[0].best_block_info().1 + 1);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
connect_blocks(&nodes[0], TEST_FINAL_CLTV);
|
||||
|
||||
let htlc_timeout = {
|
||||
|
@ -8635,7 +8646,7 @@ fn do_test_onchain_htlc_settlement_after_close(broadcast_alice: bool, go_onchain
|
|||
nodes[force_closing_node].node.force_close_broadcasting_latest_txn(&chan_ab.2, &nodes[counterparty_node].node.get_our_node_id()).unwrap();
|
||||
check_closed_broadcast!(nodes[force_closing_node], true);
|
||||
check_added_monitors!(nodes[force_closing_node], 1);
|
||||
check_closed_event!(nodes[force_closing_node], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[force_closing_node], 1, ClosureReason::HolderForceClosed, [nodes[counterparty_node].node.get_our_node_id()], 100000);
|
||||
if go_onchain_before_fulfill {
|
||||
let txn_to_broadcast = match broadcast_alice {
|
||||
true => alice_txn.clone(),
|
||||
|
@ -8645,7 +8656,7 @@ fn do_test_onchain_htlc_settlement_after_close(broadcast_alice: bool, go_onchain
|
|||
if broadcast_alice {
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8725,7 +8736,7 @@ fn do_test_onchain_htlc_settlement_after_close(broadcast_alice: bool, go_onchain
|
|||
if broadcast_alice {
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
let mut bob_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
|
||||
if broadcast_alice {
|
||||
|
@ -8992,7 +9003,8 @@ fn test_error_chans_closed() {
|
|||
nodes[0].node.handle_error(&nodes[1].node.get_our_node_id(), &msgs::ErrorMessage { channel_id: chan_2.2, data: "ERR".to_owned() });
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_broadcast!(nodes[0], false);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString("ERR".to_string()) });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString("ERR".to_string()) },
|
||||
[nodes[1].node.get_our_node_id()], 100000);
|
||||
assert_eq!(nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0).len(), 1);
|
||||
assert_eq!(nodes[0].node.list_usable_channels().len(), 2);
|
||||
assert!(nodes[0].node.list_usable_channels()[0].channel_id == chan_1.2 || nodes[0].node.list_usable_channels()[1].channel_id == chan_1.2);
|
||||
|
@ -9002,7 +9014,8 @@ fn test_error_chans_closed() {
|
|||
let _chan_4 = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 10001);
|
||||
nodes[0].node.handle_error(&nodes[1].node.get_our_node_id(), &msgs::ErrorMessage { channel_id: [0; 32], data: "ERR".to_owned() });
|
||||
check_added_monitors!(nodes[0], 2);
|
||||
check_closed_event!(nodes[0], 2, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString("ERR".to_string()) });
|
||||
check_closed_event!(nodes[0], 2, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString("ERR".to_string()) },
|
||||
[nodes[1].node.get_our_node_id(); 2], 100000);
|
||||
let events = nodes[0].node.get_and_clear_pending_msg_events();
|
||||
assert_eq!(events.len(), 2);
|
||||
match events[0] {
|
||||
|
@ -9079,7 +9092,8 @@ fn test_invalid_funding_tx() {
|
|||
|
||||
let expected_err = "funding tx had wrong script/value or output index";
|
||||
confirm_transaction_at(&nodes[1], &tx, 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: expected_err.to_string() });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: expected_err.to_string() },
|
||||
[nodes[0].node.get_our_node_id()], 100000);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
let events_2 = nodes[1].node.get_and_clear_pending_msg_events();
|
||||
assert_eq!(events_2.len(), 1);
|
||||
|
@ -9145,7 +9159,7 @@ fn do_test_tx_confirmed_skipping_blocks_immediate_broadcast(test_height_before_t
|
|||
|
||||
nodes[1].node.force_close_broadcasting_latest_txn(&channel_id, &nodes[2].node.get_our_node_id()).unwrap();
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[2].node.get_our_node_id()], 100000);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
assert_eq!(node_txn.len(), 1);
|
||||
|
@ -9786,7 +9800,8 @@ fn accept_busted_but_better_fee() {
|
|||
MessageSendEvent::UpdateHTLCs { updates: msgs::CommitmentUpdate { ref update_fee, .. }, .. } => {
|
||||
nodes[1].node.handle_update_fee(&nodes[0].node.get_our_node_id(), update_fee.as_ref().unwrap());
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError {
|
||||
err: "Peer's feerate much too low. Actual: 1000. Our expected lower limit: 5000 (- 250)".to_owned() });
|
||||
err: "Peer's feerate much too low. Actual: 1000. Our expected lower limit: 5000 (- 250)".to_owned() },
|
||||
[nodes[0].node.get_our_node_id()], 100000);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
},
|
||||
|
@ -10021,7 +10036,7 @@ fn test_remove_expired_outbound_unfunded_channels() {
|
|||
nodes[0].node.timer_tick_occurred();
|
||||
check_outbound_channel_existence(false);
|
||||
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -10064,5 +10079,5 @@ fn test_remove_expired_inbound_unfunded_channels() {
|
|||
nodes[1].node.timer_tick_occurred();
|
||||
check_inbound_channel_existence(false);
|
||||
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
|
|
@ -79,7 +79,7 @@ fn chanmon_fail_from_stale_commitment() {
|
|||
mine_transaction(&nodes[1], &bs_txn[0]);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[2].node.get_our_node_id()], 100000);
|
||||
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
|
||||
|
||||
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
|
||||
|
@ -129,7 +129,7 @@ fn revoked_output_htlc_resolution_timing() {
|
|||
// Confirm the revoked commitment transaction, closing the channel.
|
||||
mine_transaction(&nodes[1], &revoked_local_txn[0]);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
|
||||
let bs_spend_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
|
@ -227,8 +227,8 @@ fn chanmon_claim_value_coop_close() {
|
|||
test_spendable_output(&nodes[0], &shutdown_tx[0]);
|
||||
test_spendable_output(&nodes[1], &shutdown_tx[0]);
|
||||
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
}
|
||||
|
||||
fn sorted_vec<T: Ord>(mut v: Vec<T>) -> Vec<T> {
|
||||
|
@ -399,11 +399,11 @@ fn do_test_claim_value_force_close(prev_commitment_tx: bool) {
|
|||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
assert!(nodes[1].node.list_channels().is_empty());
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
|
||||
assert!(nodes[1].node.get_and_clear_pending_events().is_empty());
|
||||
|
||||
|
@ -621,7 +621,7 @@ fn test_balances_on_local_commitment_htlcs() {
|
|||
mine_transaction(&nodes[0], &as_txn[0]);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
|
||||
let htlc_balance_known_preimage = Balance::MaybeTimeoutClaimableHTLC {
|
||||
amount_satoshis: 10_000,
|
||||
|
@ -645,7 +645,7 @@ fn test_balances_on_local_commitment_htlcs() {
|
|||
mine_transaction(&nodes[1], &as_txn[0]);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
let bs_htlc_claim_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
assert_eq!(bs_htlc_claim_txn.len(), 1);
|
||||
check_spends!(bs_htlc_claim_txn[0], as_txn[0]);
|
||||
|
@ -808,7 +808,7 @@ fn test_no_preimage_inbound_htlc_balances() {
|
|||
nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
|
||||
assert_eq!(as_pre_spend_claims,
|
||||
sorted_vec(nodes[0].chain_monitor.chain_monitor.get_monitor(funding_outpoint).unwrap().get_claimable_balances()));
|
||||
|
@ -816,7 +816,7 @@ fn test_no_preimage_inbound_htlc_balances() {
|
|||
mine_transaction(&nodes[1], &as_txn[0]);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
|
||||
let node_b_commitment_claimable = nodes[1].best_block_info().1 + ANTI_REORG_DELAY - 1;
|
||||
let mut bs_pre_spend_claims = sorted_vec(vec![Balance::ClaimableAwaitingConfirmations {
|
||||
|
@ -1053,7 +1053,7 @@ fn do_test_revoked_counterparty_commitment_balances(confirm_htlc_spend_first: bo
|
|||
connect_blocks(&nodes[1], htlc_cltv_timeout + 1 - 10);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
|
||||
// Prior to channel closure, B considers the preimage HTLC as its own, and otherwise only
|
||||
// lists the two on-chain timeout-able HTLCs as claimable balances.
|
||||
|
@ -1253,7 +1253,7 @@ fn test_revoked_counterparty_htlc_tx_balances() {
|
|||
mine_transaction(&nodes[1], &revoked_local_txn[0]);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
let revoked_htlc_success = {
|
||||
let mut txn = nodes[1].tx_broadcaster.txn_broadcast();
|
||||
assert_eq!(txn.len(), 1);
|
||||
|
@ -1282,7 +1282,7 @@ fn test_revoked_counterparty_htlc_tx_balances() {
|
|||
mine_transaction(&nodes[0], &revoked_local_txn[0]);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
let to_remote_conf_height = nodes[0].best_block_info().1 + ANTI_REORG_DELAY - 1;
|
||||
|
||||
let as_commitment_claim_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
|
@ -1509,7 +1509,7 @@ fn test_revoked_counterparty_aggregated_claims() {
|
|||
|
||||
mine_transaction(&nodes[1], &as_revoked_txn[0]);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
|
||||
let mut claim_txn: Vec<_> = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().drain(..).filter(|tx| tx.input.iter().any(|inp| inp.previous_output.txid == as_revoked_txn[0].txid())).collect();
|
||||
|
@ -1655,7 +1655,8 @@ fn do_test_restored_packages_retry(check_old_monitor_retries_after_upgrade: bool
|
|||
nodes[0].node.force_close_broadcasting_latest_txn(&chan_id, &nodes[1].node.get_our_node_id()).unwrap();
|
||||
check_added_monitors(&nodes[0], 1);
|
||||
check_closed_broadcast(&nodes[0], 1, true);
|
||||
check_closed_event(&nodes[0], 1, ClosureReason::HolderForceClosed, false);
|
||||
check_closed_event!(&nodes[0], 1, ClosureReason::HolderForceClosed, false,
|
||||
[nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
let commitment_tx = {
|
||||
let mut txn = nodes[0].tx_broadcaster.txn_broadcast();
|
||||
|
@ -1739,7 +1740,8 @@ fn do_test_monitor_rebroadcast_pending_claims(anchors: bool) {
|
|||
check_spends!(&commitment_txn[0], &funding_tx);
|
||||
mine_transaction(&nodes[0], &commitment_txn[0]);
|
||||
check_closed_broadcast!(&nodes[0], true);
|
||||
check_closed_event(&nodes[0], 1, ClosureReason::CommitmentTxConfirmed, false);
|
||||
check_closed_event!(&nodes[0], 1, ClosureReason::CommitmentTxConfirmed,
|
||||
false, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
check_added_monitors(&nodes[0], 1);
|
||||
|
||||
let coinbase_tx = Transaction {
|
||||
|
@ -2033,7 +2035,7 @@ fn test_anchors_aggregated_revoked_htlc_tx() {
|
|||
*nodes[1].fee_estimator.sat_per_kw.lock().unwrap() *= 2;
|
||||
nodes[1].node.timer_tick_occurred();
|
||||
check_added_monitors(&nodes[1], 2);
|
||||
check_closed_event!(&nodes[1], 2, ClosureReason::OutdatedChannelManager);
|
||||
check_closed_event!(&nodes[1], 2, ClosureReason::OutdatedChannelManager, [nodes[0].node.get_our_node_id(); 2], 1000000);
|
||||
let (revoked_commitment_a, revoked_commitment_b) = {
|
||||
let txn = nodes[1].tx_broadcaster.unique_txn_broadcast();
|
||||
assert_eq!(txn.len(), 2);
|
||||
|
@ -2083,7 +2085,7 @@ fn test_anchors_aggregated_revoked_htlc_tx() {
|
|||
}
|
||||
check_added_monitors!(&nodes[0], 2);
|
||||
check_closed_broadcast(&nodes[0], 2, true);
|
||||
check_closed_event!(&nodes[0], 2, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(&nodes[0], 2, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id(); 2], 1000000);
|
||||
|
||||
// Alice should detect the confirmed revoked commitments, and attempt to claim all of the
|
||||
// revoked outputs.
|
||||
|
|
|
@ -570,7 +570,7 @@ fn do_retry_with_no_persist(confirm_before_reload: bool) {
|
|||
|
||||
// On reload, the ChannelManager should realize it is stale compared to the ChannelMonitor and
|
||||
// force-close the channel.
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::OutdatedChannelManager);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::OutdatedChannelManager, [nodes[1].node.get_our_node_id()], 100000);
|
||||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
assert!(nodes[0].node.has_pending_payments());
|
||||
nodes[0].node.timer_tick_occurred();
|
||||
|
@ -602,7 +602,8 @@ fn do_retry_with_no_persist(confirm_before_reload: bool) {
|
|||
MessageSendEvent::HandleError { node_id, action: msgs::ErrorAction::SendErrorMessage { ref msg } } => {
|
||||
assert_eq!(node_id, nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.handle_error(&nodes[0].node.get_our_node_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 {}", &nodes[1].node.get_our_node_id())) });
|
||||
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()], 100000);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
assert_eq!(nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0).len(), 1);
|
||||
},
|
||||
|
@ -751,7 +752,7 @@ fn do_test_completed_payment_not_retryable_on_reload(use_dust: bool) {
|
|||
|
||||
// On reload, the ChannelManager should realize it is stale compared to the ChannelMonitor and
|
||||
// force-close the channel.
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::OutdatedChannelManager);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::OutdatedChannelManager, [nodes[1].node.get_our_node_id()], 100000);
|
||||
nodes[0].node.timer_tick_occurred();
|
||||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
assert!(nodes[0].node.has_pending_payments());
|
||||
|
@ -777,7 +778,8 @@ fn do_test_completed_payment_not_retryable_on_reload(use_dust: bool) {
|
|||
MessageSendEvent::HandleError { node_id, action: msgs::ErrorAction::SendErrorMessage { ref msg } } => {
|
||||
assert_eq!(node_id, nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.handle_error(&nodes[0].node.get_our_node_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 {}", &nodes[1].node.get_our_node_id())) });
|
||||
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()], 100000);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
bs_commitment_tx = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
},
|
||||
|
@ -925,7 +927,7 @@ fn do_test_dup_htlc_onchain_fails_on_reload(persist_manager_post_event: bool, co
|
|||
nodes[0].node.force_close_broadcasting_latest_txn(&nodes[0].node.list_channels()[0].channel_id, &nodes[1].node.get_our_node_id()).unwrap();
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
|
||||
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id());
|
||||
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id());
|
||||
|
@ -946,7 +948,7 @@ fn do_test_dup_htlc_onchain_fails_on_reload(persist_manager_post_event: bool, co
|
|||
connect_block(&nodes[1], &create_dummy_block(nodes[1].best_block_hash(), 42, vec![node_txn[1].clone()]));
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
let claim_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
assert_eq!(claim_txn.len(), 1);
|
||||
check_spends!(claim_txn[0], node_txn[1]);
|
||||
|
@ -3335,7 +3337,8 @@ fn do_claim_from_closed_chan(fail_payment: bool) {
|
|||
pass_failed_payment_back(&nodes[0], &[&[&nodes[1], &nodes[3]], &[&nodes[2], &nodes[3]]], false, payment_hash, PaymentFailureReason::RecipientRejected);
|
||||
} else {
|
||||
nodes[1].node.force_close_broadcasting_latest_txn(&chan_bd, &nodes[3].node.get_our_node_id()).unwrap();
|
||||
check_closed_event(&nodes[1], 1, ClosureReason::HolderForceClosed, false);
|
||||
check_closed_event!(&nodes[1], 1, ClosureReason::HolderForceClosed, false,
|
||||
[nodes[3].node.get_our_node_id()], 1000000);
|
||||
check_closed_broadcast(&nodes[1], 1, true);
|
||||
let bs_tx = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
assert_eq!(bs_tx.len(), 1);
|
||||
|
@ -3343,7 +3346,8 @@ fn do_claim_from_closed_chan(fail_payment: bool) {
|
|||
mine_transaction(&nodes[3], &bs_tx[0]);
|
||||
check_added_monitors(&nodes[3], 1);
|
||||
check_closed_broadcast(&nodes[3], 1, true);
|
||||
check_closed_event(&nodes[3], 1, ClosureReason::CommitmentTxConfirmed, false);
|
||||
check_closed_event!(&nodes[3], 1, ClosureReason::CommitmentTxConfirmed, false,
|
||||
[nodes[1].node.get_our_node_id()], 1000000);
|
||||
|
||||
nodes[3].node.claim_funds(payment_preimage);
|
||||
check_added_monitors(&nodes[3], 2);
|
||||
|
|
|
@ -764,7 +764,7 @@ fn test_0conf_close_no_early_chan_update() {
|
|||
|
||||
nodes[0].node.force_close_all_channels_broadcasting_latest_txn();
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(&nodes[0], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(&nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
let _ = get_err_msg(&nodes[0], &nodes[1].node.get_our_node_id());
|
||||
}
|
||||
|
||||
|
@ -861,12 +861,12 @@ fn test_0conf_channel_reorg() {
|
|||
// now we force-close the channel here.
|
||||
check_closed_event!(&nodes[0], 1, ClosureReason::ProcessingError {
|
||||
err: "Funding transaction was un-confirmed. Locked at 0 confs, now have 0 confs.".to_owned()
|
||||
});
|
||||
}, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors(&nodes[0], 1);
|
||||
check_closed_event!(&nodes[1], 1, ClosureReason::ProcessingError {
|
||||
err: "Funding transaction was un-confirmed. Locked at 0 confs, now have 0 confs.".to_owned()
|
||||
});
|
||||
}, [nodes[0].node.get_our_node_id()], 100000);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors(&nodes[1], 1);
|
||||
}
|
||||
|
|
|
@ -447,7 +447,7 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
|
|||
}
|
||||
nodes[0].node = &nodes_0_deserialized;
|
||||
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::OutdatedChannelManager);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::OutdatedChannelManager, [nodes[3].node.get_our_node_id()], 100000);
|
||||
{ // Channel close should result in a commitment tx
|
||||
nodes[0].node.timer_tick_occurred();
|
||||
let txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
|
||||
|
@ -548,7 +548,7 @@ fn do_test_data_loss_protect(reconnect_panicing: bool) {
|
|||
|
||||
nodes[0].node.force_close_without_broadcasting_txn(&chan.2, &nodes[1].node.get_our_node_id()).unwrap();
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
{
|
||||
let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
|
||||
assert_eq!(node_txn.len(), 0);
|
||||
|
@ -598,7 +598,8 @@ fn do_test_data_loss_protect(reconnect_panicing: 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())) });
|
||||
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);
|
||||
check_closed_broadcast!(nodes[1], false);
|
||||
}
|
||||
|
||||
|
@ -944,7 +945,7 @@ fn do_forwarded_payment_no_manager_persistence(use_cs_commitment: bool, claim_ht
|
|||
assert_eq!(cs_commitment_tx.len(), if claim_htlc { 2 } else { 1 });
|
||||
|
||||
check_added_monitors!(nodes[2], 1);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::HolderForceClosed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_broadcast!(nodes[2], true);
|
||||
|
||||
let chan_0_monitor_serialized = get_monitor!(nodes[1], chan_id_1).encode();
|
||||
|
@ -953,7 +954,7 @@ fn do_forwarded_payment_no_manager_persistence(use_cs_commitment: bool, claim_ht
|
|||
|
||||
// Note that this checks that this is the only event on nodes[1], implying the
|
||||
// `HTLCIntercepted` event has been removed in the `use_intercept` case.
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::OutdatedChannelManager);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::OutdatedChannelManager, [nodes[2].node.get_our_node_id()], 100000);
|
||||
|
||||
if use_intercept {
|
||||
// Attempt to forward the HTLC back out over nodes[1]' still-open channel, ensuring we get
|
||||
|
|
|
@ -76,7 +76,7 @@ fn do_test_onchain_htlc_reorg(local_commitment: bool, claim: bool) {
|
|||
connect_block(&nodes[2], &create_dummy_block(nodes[2].best_block_hash(), 42, node_1_commitment_txn.clone()));
|
||||
check_added_monitors!(nodes[2], 1);
|
||||
check_closed_broadcast!(nodes[2], true); // We should get a BroadcastChannelUpdate (and *only* a BroadcstChannelUpdate)
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
let node_2_commitment_txn = nodes[2].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0);
|
||||
assert_eq!(node_2_commitment_txn.len(), 1); // ChannelMonitor: 1 offered HTLC-Claim
|
||||
check_spends!(node_2_commitment_txn[0], node_1_commitment_txn[0]);
|
||||
|
@ -110,7 +110,7 @@ fn do_test_onchain_htlc_reorg(local_commitment: bool, claim: bool) {
|
|||
};
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_broadcast!(nodes[1], true); // We should get a BroadcastChannelUpdate (and *only* a BroadcstChannelUpdate)
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[2].node.get_our_node_id()], 100000);
|
||||
// Connect ANTI_REORG_DELAY - 2 blocks, giving us a confirmation count of ANTI_REORG_DELAY - 1.
|
||||
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 2);
|
||||
check_added_monitors!(nodes[1], 0);
|
||||
|
@ -204,7 +204,7 @@ fn test_counterparty_revoked_reorg() {
|
|||
// on any of the HTLCs, at least until we get six confirmations (which we won't get).
|
||||
mine_transaction(&nodes[1], &revoked_local_txn[0]);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
|
||||
// Connect up to one block before the revoked transaction would be considered final, then do a
|
||||
|
@ -350,10 +350,12 @@ fn do_test_unconf_chan(reload_node: bool, reorg_after_reload: bool, use_funding_
|
|||
if reorg_after_reload || !reload_node {
|
||||
handle_announce_close_broadcast_events(&nodes, 0, 1, true, "Channel closed because of an exception: Funding transaction was un-confirmed. Locked at 6 confs, now have 0 confs.");
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(format!("Channel closed because of an exception: {}", expected_err)) });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CounterpartyForceClosed { peer_msg: UntrustedString(format!("Channel closed because of an exception: {}", expected_err)) }
|
||||
, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: expected_err.to_owned() });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: expected_err.to_owned() },
|
||||
[nodes[1].node.get_our_node_id()], 100000);
|
||||
assert_eq!(nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().len(), 1);
|
||||
nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clear();
|
||||
|
||||
|
@ -444,7 +446,7 @@ fn test_set_outpoints_partial_claiming() {
|
|||
// Connect blocks on node A commitment transaction
|
||||
mine_transaction(&nodes[0], &remote_txn[0]);
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
// Verify node A broadcast tx claiming both HTLCs
|
||||
{
|
||||
|
@ -459,7 +461,7 @@ fn test_set_outpoints_partial_claiming() {
|
|||
// Connect blocks on node B
|
||||
connect_blocks(&nodes[1], TEST_FINAL_CLTV + LATENCY_GRACE_PERIOD_BLOCKS + 1);
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
// Verify node B broadcast 2 HTLC-timeout txn
|
||||
let partial_claim_tx = {
|
||||
|
@ -536,11 +538,11 @@ fn do_test_to_remote_after_local_detection(style: ConnectStyle) {
|
|||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_added_monitors!(nodes[0], 1);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 1000000);
|
||||
assert!(nodes[1].node.list_channels().is_empty());
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed, [nodes[0].node.get_our_node_id()], 1000000);
|
||||
|
||||
assert!(nodes[0].chain_monitor.chain_monitor.get_and_clear_pending_events().is_empty());
|
||||
assert!(nodes[1].chain_monitor.chain_monitor.get_and_clear_pending_events().is_empty());
|
||||
|
|
|
@ -63,8 +63,8 @@ fn pre_funding_lock_shutdown_test() {
|
|||
|
||||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
assert!(nodes[1].node.list_channels().is_empty());
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 8000000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 8000000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -108,8 +108,8 @@ fn expect_channel_shutdown_state() {
|
|||
|
||||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
assert!(nodes[1].node.list_channels().is_empty());
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -191,8 +191,8 @@ fn expect_channel_shutdown_state_with_htlc() {
|
|||
nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
|
||||
let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
|
||||
assert!(node_1_none.is_none());
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
|
||||
// Shutdown basically removes the channelDetails, testing of shutdowncomplete state unnecessary
|
||||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
|
@ -226,8 +226,8 @@ fn expect_channel_shutdown_state_with_force_closure() {
|
|||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
assert!(nodes[1].node.list_channels().is_empty());
|
||||
check_closed_broadcast!(nodes[0], true);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::HolderForceClosed, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -301,8 +301,8 @@ fn updates_shutdown_wait() {
|
|||
nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
|
||||
let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
|
||||
assert!(node_1_none.is_none());
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
|
||||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
|
||||
|
@ -311,8 +311,8 @@ fn updates_shutdown_wait() {
|
|||
close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
|
||||
assert!(nodes[1].node.list_channels().is_empty());
|
||||
assert!(nodes[2].node.list_channels().is_empty());
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[2].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -385,9 +385,9 @@ fn htlc_fail_async_shutdown() {
|
|||
close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
|
||||
assert!(nodes[1].node.list_channels().is_empty());
|
||||
assert!(nodes[2].node.list_channels().is_empty());
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 2, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 2, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id(), nodes[2].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
fn do_test_shutdown_rebroadcast(recv_count: u8) {
|
||||
|
@ -528,7 +528,7 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) {
|
|||
nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.unwrap());
|
||||
let (_, node_1_none) = get_closing_signed_broadcast!(nodes[1].node, nodes[0].node.get_our_node_id());
|
||||
assert!(node_1_none.is_none());
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
} else {
|
||||
// If one node, however, received + responded with an identical closing_signed we end
|
||||
// up erroring and node[0] will try to broadcast its own latest commitment transaction.
|
||||
|
@ -557,7 +557,8 @@ 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);
|
||||
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())) });
|
||||
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()], 100000);
|
||||
}
|
||||
|
||||
assert!(nodes[0].node.list_channels().is_empty());
|
||||
|
@ -567,9 +568,9 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) {
|
|||
close_channel(&nodes[1], &nodes[2], &chan_2.2, chan_2.3, true);
|
||||
assert!(nodes[1].node.list_channels().is_empty());
|
||||
assert!(nodes[2].node.list_channels().is_empty());
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[2].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[2], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -725,7 +726,8 @@ fn test_unsupported_anysegwit_upfront_shutdown_script() {
|
|||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
}
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: Script(OP_PUSHNUM_16 OP_PUSHBYTES_2 0028)".to_string() });
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::ProcessingError { err: "Peer is signaling upfront_shutdown but has provided an unacceptable scriptpubkey format: Script(OP_PUSHNUM_16 OP_PUSHBYTES_2 0028)".to_string() }
|
||||
, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -1008,9 +1010,9 @@ fn do_test_closing_signed_reinit_timeout(timeout_step: TimeoutStep) {
|
|||
let node_0_2nd_closing_signed = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
|
||||
if timeout_step == TimeoutStep::NoTimeout {
|
||||
nodes[1].node.handle_closing_signed(&nodes[0].node.get_our_node_id(), &node_0_2nd_closing_signed.1.unwrap());
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
if timeout_step != TimeoutStep::NoTimeout {
|
||||
|
@ -1033,7 +1035,8 @@ fn do_test_closing_signed_reinit_timeout(timeout_step: TimeoutStep) {
|
|||
txn[0].output[0].script_pubkey.is_v0_p2wsh()));
|
||||
check_closed_broadcast!(nodes[1], true);
|
||||
check_added_monitors!(nodes[1], 1);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "closing_signed negotiation failed to finish within two timer ticks".to_string() });
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::ProcessingError { err: "closing_signed negotiation failed to finish within two timer ticks".to_string() }
|
||||
, [nodes[0].node.get_our_node_id()], 100000);
|
||||
} else {
|
||||
assert!(txn[0].output[0].script_pubkey.is_v0_p2wpkh());
|
||||
assert!(txn[0].output[1].script_pubkey.is_v0_p2wpkh());
|
||||
|
@ -1093,8 +1096,8 @@ fn do_simple_legacy_shutdown_test(high_initiator_fee: bool) {
|
|||
nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed.unwrap());
|
||||
let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
|
||||
assert!(node_0_none.is_none());
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -1148,6 +1151,6 @@ fn simple_target_feerate_shutdown() {
|
|||
nodes[0].node.handle_closing_signed(&nodes[1].node.get_our_node_id(), &node_1_closing_signed);
|
||||
let (_, node_0_none) = get_closing_signed_broadcast!(nodes[0].node, nodes[1].node.get_our_node_id());
|
||||
assert!(node_0_none.is_none());
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure);
|
||||
check_closed_event!(nodes[0], 1, ClosureReason::CooperativeClosure, [nodes[1].node.get_our_node_id()], 100000);
|
||||
check_closed_event!(nodes[1], 1, ClosureReason::CooperativeClosure, [nodes[0].node.get_our_node_id()], 100000);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue