Skip to content

Commit 8d2c4e7

Browse files
authored
Merge pull request #397 from ariard/2019-11-doc-announce-sigs
Doc announce_sigs
2 parents 126b514 + 13e5242 commit 8d2c4e7

File tree

2 files changed

+49
-9
lines changed

2 files changed

+49
-9
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1972,6 +1972,15 @@ impl ChannelManager {
19721972
}
19731973
try_chan_entry!(self, chan.get_mut().funding_locked(&msg), channel_state, chan);
19741974
if let Some(announcement_sigs) = self.get_announcement_sigs(chan.get()) {
1975+
// If we see locking block before receiving remote funding_locked, we broadcast our
1976+
// announcement_sigs at remote funding_locked reception. If we receive remote
1977+
// funding_locked before seeing locking block, we broadcast our announcement_sigs at locking
1978+
// block connection. We should guanrantee to broadcast announcement_sigs to our peer whatever
1979+
// the order of the events but our peer may not receive it due to disconnection. The specs
1980+
// lacking an acknowledgement for announcement_sigs we may have to re-send them at peer
1981+
// connection in the future if simultaneous misses by both peers due to network/hardware
1982+
// failures is an issue. Note, to achieve its goal, only one of the announcement_sigs needs
1983+
// to be received, from then sigs are going to be flood to the whole network.
19751984
channel_state.pending_msg_events.push(events::MessageSendEvent::SendAnnouncementSignatures {
19761985
node_id: their_node_id.clone(),
19771986
msg: announcement_sigs,

lightning/src/ln/functional_tests.rs

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3103,25 +3103,56 @@ fn test_funding_peer_disconnect() {
31033103
confirm_transaction(&nodes[1].chain_monitor, &tx, tx.version);
31043104
let events_2 = nodes[1].node.get_and_clear_pending_msg_events();
31053105
assert_eq!(events_2.len(), 2);
3106-
match events_2[0] {
3107-
MessageSendEvent::SendFundingLocked { ref node_id, msg: _ } => {
3106+
let funding_locked = match events_2[0] {
3107+
MessageSendEvent::SendFundingLocked { ref node_id, ref msg } => {
31083108
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
3109+
msg.clone()
31093110
},
31103111
_ => panic!("Unexpected event"),
3111-
}
3112-
match events_2[1] {
3113-
MessageSendEvent::SendAnnouncementSignatures { ref node_id, msg: _ } => {
3112+
};
3113+
let bs_announcement_sigs = match events_2[1] {
3114+
MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg } => {
31143115
assert_eq!(*node_id, nodes[0].node.get_our_node_id());
3116+
msg.clone()
31153117
},
31163118
_ => panic!("Unexpected event"),
3117-
}
3119+
};
31183120

31193121
reconnect_nodes(&nodes[0], &nodes[1], (true, true), (0, 0), (0, 0), (0, 0), (0, 0), (false, false));
31203122

3121-
// TODO: We shouldn't need to manually pass list_usable_chanels here once we support
3122-
// rebroadcasting announcement_signatures upon reconnect.
3123+
nodes[0].node.handle_funding_locked(&nodes[1].node.get_our_node_id(), &funding_locked).unwrap();
3124+
nodes[0].node.handle_announcement_signatures(&nodes[1].node.get_our_node_id(), &bs_announcement_sigs).unwrap();
3125+
let events_3 = nodes[0].node.get_and_clear_pending_msg_events();
3126+
assert_eq!(events_3.len(), 2);
3127+
let as_announcement_sigs = match events_3[0] {
3128+
MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg } => {
3129+
assert_eq!(*node_id, nodes[1].node.get_our_node_id());
3130+
msg.clone()
3131+
},
3132+
_ => panic!("Unexpected event"),
3133+
};
3134+
let (as_announcement, as_update) = match events_3[1] {
3135+
MessageSendEvent::BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
3136+
(msg.clone(), update_msg.clone())
3137+
},
3138+
_ => panic!("Unexpected event"),
3139+
};
3140+
3141+
nodes[1].node.handle_announcement_signatures(&nodes[0].node.get_our_node_id(), &as_announcement_sigs).unwrap();
3142+
let events_4 = nodes[1].node.get_and_clear_pending_msg_events();
3143+
assert_eq!(events_4.len(), 1);
3144+
let (_, bs_update) = match events_4[0] {
3145+
MessageSendEvent::BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
3146+
(msg.clone(), update_msg.clone())
3147+
},
3148+
_ => panic!("Unexpected event"),
3149+
};
31233150

3124-
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), Some(&nodes[0].node.list_usable_channels()), &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
3151+
nodes[0].router.handle_channel_announcement(&as_announcement).unwrap();
3152+
nodes[0].router.handle_channel_update(&bs_update).unwrap();
3153+
nodes[0].router.handle_channel_update(&as_update).unwrap();
3154+
3155+
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &Vec::new(), 1000000, TEST_FINAL_CLTV).unwrap();
31253156
let (payment_preimage, _) = send_along_route(&nodes[0], route, &[&nodes[1]], 1000000);
31263157
claim_payment(&nodes[0], &[&nodes[1]], payment_preimage, 1_000_000);
31273158
}

0 commit comments

Comments
 (0)