Skip to content

Commit f68b8b6

Browse files
committed
Add node id to remaining RoutingMessageHandler::handle_ methods
Previously, some `RoutingMessageHandler::handle_` methods (in particular the ones handling node and channel announcements, as well as channel updates, omitted the `their_node_id` argument. This didn't allow implementors to discern *who* sent a particular method. Here, we add `their_node_id: Option<&PublicKey>` to have them learn who sent a message, and set `None` if our own node it the originator of a broadcast operation.
1 parent 82b3f62 commit f68b8b6

File tree

12 files changed

+138
-106
lines changed

12 files changed

+138
-106
lines changed

lightning-net-tokio/src/lib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -660,16 +660,18 @@ mod tests {
660660
}
661661
impl RoutingMessageHandler for MsgHandler {
662662
fn handle_node_announcement(
663-
&self, _msg: &NodeAnnouncement,
663+
&self, _their_node_id: Option<&PublicKey>, _msg: &NodeAnnouncement,
664664
) -> Result<bool, LightningError> {
665665
Ok(false)
666666
}
667667
fn handle_channel_announcement(
668-
&self, _msg: &ChannelAnnouncement,
668+
&self, _their_node_id: Option<&PublicKey>, _msg: &ChannelAnnouncement,
669669
) -> Result<bool, LightningError> {
670670
Ok(false)
671671
}
672-
fn handle_channel_update(&self, _msg: &ChannelUpdate) -> Result<bool, LightningError> {
672+
fn handle_channel_update(
673+
&self, _their_node_id: Option<&PublicKey>, _msg: &ChannelUpdate,
674+
) -> Result<bool, LightningError> {
673675
Ok(false)
674676
}
675677
fn get_next_channel_announcement(

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1945,10 +1945,11 @@ fn do_during_funding_monitor_fail(confirm_a_first: bool, restore_b_before_conf:
19451945
let (channel_ready, channel_id) = create_chan_between_nodes_with_value_confirm_second(&nodes[0], &nodes[1]);
19461946
(channel_id, create_chan_between_nodes_with_value_b(&nodes[1], &nodes[0], &channel_ready))
19471947
};
1948-
for node in nodes.iter() {
1949-
assert!(node.gossip_sync.handle_channel_announcement(&announcement).unwrap());
1950-
node.gossip_sync.handle_channel_update(&as_update).unwrap();
1951-
node.gossip_sync.handle_channel_update(&bs_update).unwrap();
1948+
for (i, node) in nodes.iter().enumerate() {
1949+
let counterparty_node_id = nodes[(i + 1) % 2].node.get_our_node_id();
1950+
assert!(node.gossip_sync.handle_channel_announcement(Some(&counterparty_node_id), &announcement).unwrap());
1951+
node.gossip_sync.handle_channel_update(Some(&counterparty_node_id), &as_update).unwrap();
1952+
node.gossip_sync.handle_channel_update(Some(&counterparty_node_id), &bs_update).unwrap();
19521953
}
19531954

19541955
if !restore_b_before_lock {

lightning/src/ln/functional_test_utils.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1501,14 +1501,16 @@ pub fn create_unannounced_chan_between_nodes_with_value<'a, 'b, 'c, 'd>(nodes: &
15011501

15021502
pub fn update_nodes_with_chan_announce<'a, 'b, 'c, 'd>(nodes: &'a Vec<Node<'b, 'c, 'd>>, a: usize, b: usize, ann: &msgs::ChannelAnnouncement, upd_1: &msgs::ChannelUpdate, upd_2: &msgs::ChannelUpdate) {
15031503
for node in nodes {
1504-
assert!(node.gossip_sync.handle_channel_announcement(ann).unwrap());
1505-
node.gossip_sync.handle_channel_update(upd_1).unwrap();
1506-
node.gossip_sync.handle_channel_update(upd_2).unwrap();
1504+
let node_id_a = nodes[a].node.get_our_node_id();
1505+
let node_id_b = nodes[b].node.get_our_node_id();
1506+
assert!(node.gossip_sync.handle_channel_announcement(None, ann).unwrap());
1507+
node.gossip_sync.handle_channel_update(Some(&node_id_a), upd_1).unwrap();
1508+
node.gossip_sync.handle_channel_update(Some(&node_id_b), upd_2).unwrap();
15071509

15081510
// Note that channel_updates are also delivered to ChannelManagers to ensure we have
15091511
// forwarding info for local channels even if its not accepted in the network graph.
1510-
node.node.handle_channel_update(&nodes[a].node.get_our_node_id(), &upd_1);
1511-
node.node.handle_channel_update(&nodes[b].node.get_our_node_id(), &upd_2);
1512+
node.node.handle_channel_update(&node_id_a, &upd_1);
1513+
node.node.handle_channel_update(&node_id_b, &upd_2);
15121514
}
15131515
}
15141516

@@ -3512,9 +3514,10 @@ pub fn handle_announce_close_broadcast_events<'a, 'b, 'c>(nodes: &Vec<Node<'a, '
35123514
if dummy_connected {
35133515
disconnect_dummy_node(&nodes[b]);
35143516
}
3517+
let node_id_a = nodes[a].node.get_our_node_id();
35153518
for node in nodes {
3516-
node.gossip_sync.handle_channel_update(&as_update).unwrap();
3517-
node.gossip_sync.handle_channel_update(&bs_update).unwrap();
3519+
node.gossip_sync.handle_channel_update(Some(&node_id_a), &as_update).unwrap();
3520+
node.gossip_sync.handle_channel_update(Some(&node_id_a), &bs_update).unwrap();
35183521
}
35193522
}
35203523

lightning/src/ln/functional_tests.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2461,14 +2461,16 @@ fn channel_monitor_network_test() {
24612461
check_preimage_claim(&nodes[4], &node_txn);
24622462
(close_chan_update_1, close_chan_update_2)
24632463
};
2464-
nodes[3].gossip_sync.handle_channel_update(&close_chan_update_2).unwrap();
2465-
nodes[4].gossip_sync.handle_channel_update(&close_chan_update_1).unwrap();
2464+
let node_id_4 = nodes[4].node.get_our_node_id();
2465+
let node_id_3 = nodes[3].node.get_our_node_id();
2466+
nodes[3].gossip_sync.handle_channel_update(Some(&node_id_4), &close_chan_update_2).unwrap();
2467+
nodes[4].gossip_sync.handle_channel_update(Some(&node_id_3), &close_chan_update_1).unwrap();
24662468
assert_eq!(nodes[3].node.list_channels().len(), 0);
24672469
assert_eq!(nodes[4].node.list_channels().len(), 0);
24682470

24692471
assert_eq!(nodes[3].chain_monitor.chain_monitor.watch_channel(OutPoint { txid: chan_3.3.compute_txid(), index: 0 }, chan_3_mon),
24702472
Ok(ChannelMonitorUpdateStatus::Completed));
2471-
check_closed_event!(nodes[3], 1, ClosureReason::HTLCsTimedOut, [nodes[4].node.get_our_node_id()], 100000);
2473+
check_closed_event!(nodes[3], 1, ClosureReason::HTLCsTimedOut, [node_id_4], 100000);
24722474
}
24732475

24742476
#[test]

lightning/src/ln/msgs.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1617,13 +1617,19 @@ pub trait ChannelMessageHandler : MessageSendEventsProvider {
16171617
pub trait RoutingMessageHandler : MessageSendEventsProvider {
16181618
/// Handle an incoming `node_announcement` message, returning `true` if it should be forwarded on,
16191619
/// `false` or returning an `Err` otherwise.
1620-
fn handle_node_announcement(&self, msg: &NodeAnnouncement) -> Result<bool, LightningError>;
1620+
///
1621+
/// If `their_node_id` is `None`, the message was generated by our own local node.
1622+
fn handle_node_announcement(&self, their_node_id: Option<&PublicKey>, msg: &NodeAnnouncement) -> Result<bool, LightningError>;
16211623
/// Handle a `channel_announcement` message, returning `true` if it should be forwarded on, `false`
16221624
/// or returning an `Err` otherwise.
1623-
fn handle_channel_announcement(&self, msg: &ChannelAnnouncement) -> Result<bool, LightningError>;
1625+
///
1626+
/// If `their_node_id` is `None`, the message was generated by our own local node.
1627+
fn handle_channel_announcement(&self, their_node_id: Option<&PublicKey>, msg: &ChannelAnnouncement) -> Result<bool, LightningError>;
16241628
/// Handle an incoming `channel_update` message, returning true if it should be forwarded on,
16251629
/// `false` or returning an `Err` otherwise.
1626-
fn handle_channel_update(&self, msg: &ChannelUpdate) -> Result<bool, LightningError>;
1630+
///
1631+
/// If `their_node_id` is `None`, the message was generated by our own local node.
1632+
fn handle_channel_update(&self, their_node_id: Option<&PublicKey>, msg: &ChannelUpdate) -> Result<bool, LightningError>;
16271633
/// Gets channel announcements and updates required to dump our routing table to a remote node,
16281634
/// starting at the `short_channel_id` indicated by `starting_point` and including announcements
16291635
/// for a single channel.

lightning/src/ln/offers_tests.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,10 @@ fn announce_node_address<'a, 'b, 'c>(
134134
contents: announcement
135135
};
136136

137-
node.gossip_sync.handle_node_announcement(&msg).unwrap();
137+
let node_pubkey = node.node.get_our_node_id();
138+
node.gossip_sync.handle_node_announcement(None, &msg).unwrap();
138139
for peer in peers {
139-
peer.gossip_sync.handle_node_announcement(&msg).unwrap();
140+
peer.gossip_sync.handle_node_announcement(Some(&node_pubkey), &msg).unwrap();
140141
}
141142
}
142143

lightning/src/ln/peer_handler.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,9 @@ impl MessageSendEventsProvider for IgnoringMessageHandler {
111111
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> { Vec::new() }
112112
}
113113
impl RoutingMessageHandler for IgnoringMessageHandler {
114-
fn handle_node_announcement(&self, _msg: &msgs::NodeAnnouncement) -> Result<bool, LightningError> { Ok(false) }
115-
fn handle_channel_announcement(&self, _msg: &msgs::ChannelAnnouncement) -> Result<bool, LightningError> { Ok(false) }
116-
fn handle_channel_update(&self, _msg: &msgs::ChannelUpdate) -> Result<bool, LightningError> { Ok(false) }
114+
fn handle_node_announcement(&self, _their_node_id: Option<&PublicKey>, _msg: &msgs::NodeAnnouncement) -> Result<bool, LightningError> { Ok(false) }
115+
fn handle_channel_announcement(&self, _their_node_id: Option<&PublicKey>, _msg: &msgs::ChannelAnnouncement) -> Result<bool, LightningError> { Ok(false) }
116+
fn handle_channel_update(&self, _their_node_id: Option<&PublicKey>, _msg: &msgs::ChannelUpdate) -> Result<bool, LightningError> { Ok(false) }
117117
fn get_next_channel_announcement(&self, _starting_point: u64) ->
118118
Option<(msgs::ChannelAnnouncement, Option<msgs::ChannelUpdate>, Option<msgs::ChannelUpdate>)> { None }
119119
fn get_next_node_announcement(&self, _starting_point: Option<&NodeId>) -> Option<msgs::NodeAnnouncement> { None }
@@ -1887,22 +1887,22 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
18871887
self.message_handler.chan_handler.handle_announcement_signatures(&their_node_id, &msg);
18881888
},
18891889
wire::Message::ChannelAnnouncement(msg) => {
1890-
if self.message_handler.route_handler.handle_channel_announcement(&msg)
1890+
if self.message_handler.route_handler.handle_channel_announcement(Some(their_node_id), &msg)
18911891
.map_err(|e| -> MessageHandlingError { e.into() })? {
18921892
should_forward = Some(wire::Message::ChannelAnnouncement(msg));
18931893
}
18941894
self.update_gossip_backlogged();
18951895
},
18961896
wire::Message::NodeAnnouncement(msg) => {
1897-
if self.message_handler.route_handler.handle_node_announcement(&msg)
1897+
if self.message_handler.route_handler.handle_node_announcement(Some(their_node_id), &msg)
18981898
.map_err(|e| -> MessageHandlingError { e.into() })? {
18991899
should_forward = Some(wire::Message::NodeAnnouncement(msg));
19001900
}
19011901
self.update_gossip_backlogged();
19021902
},
19031903
wire::Message::ChannelUpdate(msg) => {
1904-
self.message_handler.chan_handler.handle_channel_update(&their_node_id, &msg);
1905-
if self.message_handler.route_handler.handle_channel_update(&msg)
1904+
self.message_handler.chan_handler.handle_channel_update(their_node_id, &msg);
1905+
if self.message_handler.route_handler.handle_channel_update(Some(their_node_id), &msg)
19061906
.map_err(|e| -> MessageHandlingError { e.into() })? {
19071907
should_forward = Some(wire::Message::ChannelUpdate(msg));
19081908
}
@@ -2285,13 +2285,13 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
22852285
},
22862286
MessageSendEvent::BroadcastChannelAnnouncement { msg, update_msg } => {
22872287
log_debug!(self.logger, "Handling BroadcastChannelAnnouncement event in peer_handler for short channel id {}", msg.contents.short_channel_id);
2288-
match self.message_handler.route_handler.handle_channel_announcement(&msg) {
2288+
match self.message_handler.route_handler.handle_channel_announcement(None, &msg) {
22892289
Ok(_) | Err(LightningError { action: msgs::ErrorAction::IgnoreDuplicateGossip, .. }) =>
22902290
self.forward_broadcast_msg(peers, &wire::Message::ChannelAnnouncement(msg), None),
22912291
_ => {},
22922292
}
22932293
if let Some(msg) = update_msg {
2294-
match self.message_handler.route_handler.handle_channel_update(&msg) {
2294+
match self.message_handler.route_handler.handle_channel_update(None, &msg) {
22952295
Ok(_) | Err(LightningError { action: msgs::ErrorAction::IgnoreDuplicateGossip, .. }) =>
22962296
self.forward_broadcast_msg(peers, &wire::Message::ChannelUpdate(msg), None),
22972297
_ => {},
@@ -2300,15 +2300,15 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
23002300
},
23012301
MessageSendEvent::BroadcastChannelUpdate { msg } => {
23022302
log_debug!(self.logger, "Handling BroadcastChannelUpdate event in peer_handler for contents {:?}", msg.contents);
2303-
match self.message_handler.route_handler.handle_channel_update(&msg) {
2303+
match self.message_handler.route_handler.handle_channel_update(None, &msg) {
23042304
Ok(_) | Err(LightningError { action: msgs::ErrorAction::IgnoreDuplicateGossip, .. }) =>
23052305
self.forward_broadcast_msg(peers, &wire::Message::ChannelUpdate(msg), None),
23062306
_ => {},
23072307
}
23082308
},
23092309
MessageSendEvent::BroadcastNodeAnnouncement { msg } => {
23102310
log_debug!(self.logger, "Handling BroadcastNodeAnnouncement event in peer_handler for node {}", msg.contents.node_id);
2311-
match self.message_handler.route_handler.handle_node_announcement(&msg) {
2311+
match self.message_handler.route_handler.handle_node_announcement(None, &msg) {
23122312
Ok(_) | Err(LightningError { action: msgs::ErrorAction::IgnoreDuplicateGossip, .. }) =>
23132313
self.forward_broadcast_msg(peers, &wire::Message::NodeAnnouncement(msg), None),
23142314
_ => {},
@@ -2674,7 +2674,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, OM: Deref, L: Deref, CM
26742674
};
26752675

26762676
log_debug!(self.logger, "Broadcasting NodeAnnouncement after passing it to our own RoutingMessageHandler.");
2677-
let _ = self.message_handler.route_handler.handle_node_announcement(&msg);
2677+
let _ = self.message_handler.route_handler.handle_node_announcement(None, &msg);
26782678
self.forward_broadcast_msg(&*self.peers.read().unwrap(), &wire::Message::NodeAnnouncement(msg), None);
26792679
}
26802680
}

lightning/src/ln/priv_short_conf_tests.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,10 +207,11 @@ fn do_test_1_conf_open(connect_style: ConnectStyle) {
207207
} else { panic!("Unexpected event"); };
208208
assert_eq!(announcement, bs_announcement);
209209

210-
for node in nodes {
211-
assert!(node.gossip_sync.handle_channel_announcement(&announcement).unwrap());
212-
node.gossip_sync.handle_channel_update(&as_update).unwrap();
213-
node.gossip_sync.handle_channel_update(&bs_update).unwrap();
210+
for (i, node) in nodes.iter().enumerate() {
211+
let counterparty_node_id = nodes[(i + 1) % 2].node.get_our_node_id();
212+
assert!(node.gossip_sync.handle_channel_announcement(Some(&counterparty_node_id), &announcement).unwrap());
213+
node.gossip_sync.handle_channel_update(Some(&counterparty_node_id), &as_update).unwrap();
214+
node.gossip_sync.handle_channel_update(Some(&counterparty_node_id), &bs_update).unwrap();
214215
}
215216
}
216217
#[test]

lightning/src/ln/reload_tests.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,10 @@ fn test_funding_peer_disconnect() {
165165
};
166166

167167
// Provide the channel announcement and public updates to the network graph
168-
nodes[0].gossip_sync.handle_channel_announcement(&chan_announcement).unwrap();
169-
nodes[0].gossip_sync.handle_channel_update(&bs_update).unwrap();
170-
nodes[0].gossip_sync.handle_channel_update(&as_update).unwrap();
168+
let node_1_pubkey = nodes[1].node.get_our_node_id();
169+
nodes[0].gossip_sync.handle_channel_announcement(Some(&node_1_pubkey), &chan_announcement).unwrap();
170+
nodes[0].gossip_sync.handle_channel_update(Some(&node_1_pubkey), &bs_update).unwrap();
171+
nodes[0].gossip_sync.handle_channel_update(Some(&node_1_pubkey), &as_update).unwrap();
171172

172173
let (route, _, _, _) = get_route_and_payment_hash!(nodes[0], nodes[1], 1000000);
173174
let payment_preimage = send_along_route(&nodes[0], route, &[&nodes[1]], 1000000).0;
@@ -219,10 +220,11 @@ fn test_no_txn_manager_serialize_deserialize() {
219220

220221
let (channel_ready, _) = create_chan_between_nodes_with_value_confirm(&nodes[0], &nodes[1], &tx);
221222
let (announcement, as_update, bs_update) = create_chan_between_nodes_with_value_b(&nodes[0], &nodes[1], &channel_ready);
222-
for node in nodes.iter() {
223-
assert!(node.gossip_sync.handle_channel_announcement(&announcement).unwrap());
224-
node.gossip_sync.handle_channel_update(&as_update).unwrap();
225-
node.gossip_sync.handle_channel_update(&bs_update).unwrap();
223+
for (i, node) in nodes.iter().enumerate() {
224+
let counterparty_node_id = nodes[(i + 1) % 2].node.get_our_node_id();
225+
assert!(node.gossip_sync.handle_channel_announcement(Some(&counterparty_node_id), &announcement).unwrap());
226+
node.gossip_sync.handle_channel_update(Some(&counterparty_node_id), &as_update).unwrap();
227+
node.gossip_sync.handle_channel_update(Some(&counterparty_node_id), &bs_update).unwrap();
226228
}
227229

228230
send_payment(&nodes[0], &[&nodes[1]], 1000000);
@@ -309,10 +311,11 @@ fn test_manager_serialize_deserialize_events() {
309311

310312
let (channel_ready, _) = create_chan_between_nodes_with_value_confirm(&nodes[0], &nodes[1], &tx);
311313
let (announcement, as_update, bs_update) = create_chan_between_nodes_with_value_b(&nodes[0], &nodes[1], &channel_ready);
312-
for node in nodes.iter() {
313-
assert!(node.gossip_sync.handle_channel_announcement(&announcement).unwrap());
314-
node.gossip_sync.handle_channel_update(&as_update).unwrap();
315-
node.gossip_sync.handle_channel_update(&bs_update).unwrap();
314+
for (i, node) in nodes.iter().enumerate() {
315+
let counterparty_node_id = nodes[(i + 1) % 2].node.get_our_node_id();
316+
assert!(node.gossip_sync.handle_channel_announcement(Some(&counterparty_node_id), &announcement).unwrap());
317+
node.gossip_sync.handle_channel_update(Some(&counterparty_node_id), &as_update).unwrap();
318+
node.gossip_sync.handle_channel_update(Some(&counterparty_node_id), &bs_update).unwrap();
316319
}
317320

318321
send_payment(&nodes[0], &[&nodes[1]], 1000000);

0 commit comments

Comments
 (0)