Skip to content

Commit 9993845

Browse files
authored
Merge pull request #949 from TheBlueMatt/2021-06-send-priv-update
Send channel_update messages to direct peers on private channels
2 parents 431f807 + ba600db commit 9993845

File tree

8 files changed

+212
-48
lines changed

8 files changed

+212
-48
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,12 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
571571
events::MessageSendEvent::SendFundingLocked { .. } => continue,
572572
events::MessageSendEvent::SendAnnouncementSignatures { .. } => continue,
573573
events::MessageSendEvent::PaymentFailureNetworkUpdate { .. } => continue,
574-
_ => panic!("Unhandled message event"),
574+
events::MessageSendEvent::SendChannelUpdate { ref node_id, ref msg } => {
575+
assert_eq!(msg.contents.flags & 2, 0); // The disable bit must never be set!
576+
if Some(*node_id) == expect_drop_id { panic!("peer_disconnected should drop msgs bound for the disconnected peer"); }
577+
*node_id == a_id
578+
},
579+
_ => panic!("Unhandled message event {:?}", event),
575580
};
576581
if push_a { ba_events.push(event); } else { bc_events.push(event); }
577582
}
@@ -692,7 +697,16 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
692697
// Can be generated due to a payment forward being rejected due to a
693698
// channel having previously failed a monitor update
694699
},
695-
_ => panic!("Unhandled message event"),
700+
events::MessageSendEvent::SendChannelUpdate { ref msg, .. } => {
701+
// When we reconnect we will resend a channel_update to make sure our
702+
// counterparty has the latest parameters for receiving payments
703+
// through us. We do, however, check that the message does not include
704+
// the "disabled" bit, as we should never ever have a channel which is
705+
// disabled when we send such an update (or it may indicate channel
706+
// force-close which we should detect as an error).
707+
assert_eq!(msg.contents.flags & 2, 0);
708+
},
709+
_ => panic!("Unhandled message event {:?}", event),
696710
}
697711
if $limit_events != ProcessMessages::AllMessages {
698712
break;
@@ -722,6 +736,9 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
722736
events::MessageSendEvent::SendFundingLocked { .. } => {},
723737
events::MessageSendEvent::SendAnnouncementSignatures { .. } => {},
724738
events::MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
739+
events::MessageSendEvent::SendChannelUpdate { ref msg, .. } => {
740+
assert_eq!(msg.contents.flags & 2, 0); // The disable bit must never be set!
741+
},
725742
_ => panic!("Unhandled message event"),
726743
}
727744
}
@@ -737,6 +754,9 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
737754
events::MessageSendEvent::SendFundingLocked { .. } => {},
738755
events::MessageSendEvent::SendAnnouncementSignatures { .. } => {},
739756
events::MessageSendEvent::PaymentFailureNetworkUpdate { .. } => {},
757+
events::MessageSendEvent::SendChannelUpdate { ref msg, .. } => {
758+
assert_eq!(msg.contents.flags & 2, 0); // The disable bit must never be set!
759+
},
740760
_ => panic!("Unhandled message event"),
741761
}
742762
}

lightning-background-processor/src/lib.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,9 +442,13 @@ mod tests {
442442

443443
// Confirm the funding transaction.
444444
confirm_transaction(&mut nodes[0], &funding_tx);
445+
let as_funding = get_event_msg!(nodes[0], MessageSendEvent::SendFundingLocked, nodes[1].node.get_our_node_id());
445446
confirm_transaction(&mut nodes[1], &funding_tx);
446-
nodes[0].node.handle_funding_locked(&nodes[1].node.get_our_node_id(), &get_event_msg!(nodes[1], MessageSendEvent::SendFundingLocked, nodes[0].node.get_our_node_id()));
447-
nodes[1].node.handle_funding_locked(&nodes[0].node.get_our_node_id(), &get_event_msg!(nodes[0], MessageSendEvent::SendFundingLocked, nodes[1].node.get_our_node_id()));
447+
let bs_funding = get_event_msg!(nodes[1], MessageSendEvent::SendFundingLocked, nodes[0].node.get_our_node_id());
448+
nodes[0].node.handle_funding_locked(&nodes[1].node.get_our_node_id(), &bs_funding);
449+
let _as_channel_update = get_event_msg!(nodes[0], MessageSendEvent::SendChannelUpdate, nodes[1].node.get_our_node_id());
450+
nodes[1].node.handle_funding_locked(&nodes[0].node.get_our_node_id(), &as_funding);
451+
let _bs_channel_update = get_event_msg!(nodes[1], MessageSendEvent::SendChannelUpdate, nodes[0].node.get_our_node_id());
448452

449453
assert!(bg_processor.stop().is_ok());
450454

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,7 +1158,10 @@ fn test_monitor_update_fail_reestablish() {
11581158
nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish);
11591159

11601160
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish);
1161-
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1161+
assert_eq!(
1162+
get_event_msg!(nodes[0], MessageSendEvent::SendChannelUpdate, nodes[1].node.get_our_node_id())
1163+
.contents.flags & 2, 0); // The "disabled" bit should be unset as we just reconnected
1164+
11621165
nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
11631166
check_added_monitors!(nodes[1], 1);
11641167

@@ -1172,10 +1175,15 @@ fn test_monitor_update_fail_reestablish() {
11721175
assert!(bs_reestablish == get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id()));
11731176

11741177
nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reestablish);
1178+
assert_eq!(
1179+
get_event_msg!(nodes[0], MessageSendEvent::SendChannelUpdate, nodes[1].node.get_our_node_id())
1180+
.contents.flags & 2, 0); // The "disabled" bit should be unset as we just reconnected
11751181

11761182
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reestablish);
11771183
check_added_monitors!(nodes[1], 0);
1178-
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1184+
assert_eq!(
1185+
get_event_msg!(nodes[1], MessageSendEvent::SendChannelUpdate, nodes[0].node.get_our_node_id())
1186+
.contents.flags & 2, 0); // The "disabled" bit should be unset as we just reconnected
11791187

11801188
*nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
11811189
let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&chan_1.2).unwrap().clone();
@@ -1352,14 +1360,14 @@ fn claim_while_disconnected_monitor_update_fail() {
13521360
let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
13531361

13541362
nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reconnect);
1355-
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
1363+
let _as_channel_update = get_event_msg!(nodes[0], MessageSendEvent::SendChannelUpdate, nodes[1].node.get_our_node_id());
13561364

13571365
// Now deliver a's reestablish, freeing the claim from the holding cell, but fail the monitor
13581366
// update.
13591367
*nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Err(ChannelMonitorUpdateErr::TemporaryFailure));
13601368

13611369
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reconnect);
1362-
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
1370+
let _bs_channel_update = get_event_msg!(nodes[1], MessageSendEvent::SendChannelUpdate, nodes[0].node.get_our_node_id());
13631371
nodes[1].logger.assert_log("lightning::ln::channelmanager".to_string(), "Failed to update ChannelMonitor".to_string(), 1);
13641372
check_added_monitors!(nodes[1], 1);
13651373
assert!(nodes[1].node.get_and_clear_pending_msg_events().is_empty());
@@ -1492,7 +1500,9 @@ fn monitor_failed_no_reestablish_response() {
14921500
let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
14931501

14941502
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_reconnect);
1503+
let _bs_channel_update = get_event_msg!(nodes[1], MessageSendEvent::SendChannelUpdate, nodes[0].node.get_our_node_id());
14951504
nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &bs_reconnect);
1505+
let _as_channel_update = get_event_msg!(nodes[0], MessageSendEvent::SendChannelUpdate, nodes[1].node.get_our_node_id());
14961506

14971507
*nodes[1].chain_monitor.update_ret.lock().unwrap() = Some(Ok(()));
14981508
let (outpoint, latest_update) = nodes[1].chain_monitor.latest_monitor_update_id.lock().unwrap().get(&channel_id).unwrap().clone();

0 commit comments

Comments
 (0)