Skip to content

Commit e0c60dc

Browse files
committed
Rename NetGraphMsgHandler to P2PGossipSync
NetGraphMsgHandler implements RoutingMessageHandler to handle gossip messages defined in BOLT 7 and maintains a view of the network by updating NetworkGraph. Rename it to P2PGossipSync, which better describes its purpose, and to contrast with RapidGossipSync.
1 parent 17d3e8d commit e0c60dc

File tree

12 files changed

+367
-365
lines changed

12 files changed

+367
-365
lines changed

ARCH.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ receive `ChannelMonitorUpdate`s from `ChannelManager` and persist them to disk b
1111
channel steps forward.
1212

1313
There are two additional important structures that you may use either on the same device
14-
as the `ChannelManager` or on a separate one. `NetGraphMsgHandler` handles receiving channel
14+
as the `ChannelManager` or on a separate one. `P2PGossipSync` handles receiving channel
1515
and node announcements, which are then used to calculate routes by `find_route` for sending
1616
payments. `PeerManager` handles the authenticated and encrypted communication protocol,
17-
monitoring for liveness of peers, routing messages to `ChannelManager` and `NetGraphMsgHandler`
17+
monitoring for liveness of peers, routing messages to `ChannelManager` and `P2PGossipSync`
1818
instances directly, and receiving messages from them via the `EventsProvider` interface.
1919

2020
These structs communicate with each other using a public API, so that you can easily add
@@ -56,7 +56,7 @@ At a high level, some of the common interfaces fit together as follows:
5656
| ----------------- \ / ----------------
5757
| ^ \ / |
5858
(as RoutingMessageHandler) | v v
59-
\ ---------------------- --------- -----------------
60-
-----------------> | NetGraphMsgHandler | | Event | | chain::Filter |
61-
---------------------- --------- -----------------
59+
\ ----------------- --------- -----------------
60+
-----------------> | P2PGossipSync | | Event | | chain::Filter |
61+
----------------- --------- -----------------
6262
```

fuzz/src/full_stack.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ use lightning::ln::channelmanager::{ChainParameters, ChannelManager};
3737
use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor,IgnoringMessageHandler};
3838
use lightning::ln::msgs::DecodeError;
3939
use lightning::ln::script::ShutdownScript;
40-
use lightning::routing::network_graph::{NetGraphMsgHandler, NetworkGraph};
40+
use lightning::routing::network_graph::{P2PGossipSync, NetworkGraph};
4141
use lightning::routing::router::{find_route, PaymentParameters, RouteParameters};
4242
use lightning::routing::scoring::FixedPenaltyScorer;
4343
use lightning::util::config::UserConfig;
@@ -163,7 +163,7 @@ type ChannelMan = ChannelManager<
163163
EnforcingSigner,
164164
Arc<chainmonitor::ChainMonitor<EnforcingSigner, Arc<dyn chain::Filter>, Arc<TestBroadcaster>, Arc<FuzzEstimator>, Arc<dyn Logger>, Arc<TestPersister>>>,
165165
Arc<TestBroadcaster>, Arc<KeyProvider>, Arc<FuzzEstimator>, Arc<dyn Logger>>;
166-
type PeerMan<'a> = PeerManager<Peer<'a>, Arc<ChannelMan>, Arc<NetGraphMsgHandler<Arc<NetworkGraph>, Arc<dyn chain::Access>, Arc<dyn Logger>>>, Arc<dyn Logger>, IgnoringMessageHandler>;
166+
type PeerMan<'a> = PeerManager<Peer<'a>, Arc<ChannelMan>, Arc<P2PGossipSync<Arc<NetworkGraph>, Arc<dyn chain::Access>, Arc<dyn Logger>>>, Arc<dyn Logger>, IgnoringMessageHandler>;
167167

168168
struct MoneyLossDetector<'a> {
169169
manager: Arc<ChannelMan>,
@@ -396,13 +396,13 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
396396
keys_manager.counter.fetch_sub(1, Ordering::AcqRel);
397397
let our_id = PublicKey::from_secret_key(&Secp256k1::signing_only(), &keys_manager.get_node_secret(Recipient::Node).unwrap());
398398
let network_graph = Arc::new(NetworkGraph::new(genesis_block(network).block_hash()));
399-
let net_graph_msg_handler = Arc::new(NetGraphMsgHandler::new(Arc::clone(&network_graph), None, Arc::clone(&logger)));
399+
let gossip_sync = Arc::new(P2PGossipSync::new(Arc::clone(&network_graph), None, Arc::clone(&logger)));
400400
let scorer = FixedPenaltyScorer::with_penalty(0);
401401

402402
let peers = RefCell::new([false; 256]);
403403
let mut loss_detector = MoneyLossDetector::new(&peers, channelmanager.clone(), monitor.clone(), PeerManager::new(MessageHandler {
404404
chan_handler: channelmanager.clone(),
405-
route_handler: net_graph_msg_handler.clone(),
405+
route_handler: gossip_sync.clone(),
406406
}, our_network_key, &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0], Arc::clone(&logger), IgnoringMessageHandler{}));
407407

408408
let mut should_forward = false;

lightning-background-processor/src/lib.rs

+29-29
Large diffs are not rendered by default.

lightning/src/ln/chanmon_update_fail_tests.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1901,9 +1901,9 @@ fn do_during_funding_monitor_fail(confirm_a_first: bool, restore_b_before_conf:
19011901
(channel_id, create_chan_between_nodes_with_value_b(&nodes[1], &nodes[0], &channel_ready))
19021902
};
19031903
for node in nodes.iter() {
1904-
assert!(node.net_graph_msg_handler.handle_channel_announcement(&announcement).unwrap());
1905-
node.net_graph_msg_handler.handle_channel_update(&as_update).unwrap();
1906-
node.net_graph_msg_handler.handle_channel_update(&bs_update).unwrap();
1904+
assert!(node.gossip_sync.handle_channel_announcement(&announcement).unwrap());
1905+
node.gossip_sync.handle_channel_update(&as_update).unwrap();
1906+
node.gossip_sync.handle_channel_update(&bs_update).unwrap();
19071907
}
19081908

19091909
send_payment(&nodes[0], &[&nodes[1]], 8000000);

lightning/src/ln/functional_test_utils.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use chain::channelmonitor::ChannelMonitor;
1515
use chain::transaction::OutPoint;
1616
use ln::{PaymentPreimage, PaymentHash, PaymentSecret};
1717
use ln::channelmanager::{ChainParameters, ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentSendFailure, PaymentId, MIN_CLTV_EXPIRY_DELTA};
18-
use routing::network_graph::{NetGraphMsgHandler, NetworkGraph};
18+
use routing::network_graph::{P2PGossipSync, NetworkGraph};
1919
use routing::router::{PaymentParameters, Route, get_route};
2020
use ln::features::{InitFeatures, InvoiceFeatures};
2121
use ln::msgs;
@@ -279,7 +279,7 @@ pub struct Node<'a, 'b: 'a, 'c: 'b> {
279279
pub keys_manager: &'b test_utils::TestKeysInterface,
280280
pub node: &'a ChannelManager<EnforcingSigner, &'b TestChainMonitor<'c>, &'c test_utils::TestBroadcaster, &'b test_utils::TestKeysInterface, &'c test_utils::TestFeeEstimator, &'c test_utils::TestLogger>,
281281
pub network_graph: &'c NetworkGraph,
282-
pub net_graph_msg_handler: NetGraphMsgHandler<&'c NetworkGraph, &'c test_utils::TestChainSource, &'c test_utils::TestLogger>,
282+
pub gossip_sync: P2PGossipSync<&'c NetworkGraph, &'c test_utils::TestChainSource, &'c test_utils::TestLogger>,
283283
pub node_seed: [u8; 32],
284284
pub network_payment_count: Rc<RefCell<u8>>,
285285
pub network_chan_count: Rc<RefCell<u32>>,
@@ -313,13 +313,13 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
313313
self.network_graph.write(&mut w).unwrap();
314314
let network_graph_deser = <NetworkGraph>::read(&mut io::Cursor::new(&w.0)).unwrap();
315315
assert!(network_graph_deser == *self.network_graph);
316-
let net_graph_msg_handler = NetGraphMsgHandler::new(
316+
let gossip_sync = P2PGossipSync::new(
317317
&network_graph_deser, Some(self.chain_source), self.logger
318318
);
319319
let mut chan_progress = 0;
320320
loop {
321-
let orig_announcements = self.net_graph_msg_handler.get_next_channel_announcements(chan_progress, 255);
322-
let deserialized_announcements = net_graph_msg_handler.get_next_channel_announcements(chan_progress, 255);
321+
let orig_announcements = self.gossip_sync.get_next_channel_announcements(chan_progress, 255);
322+
let deserialized_announcements = gossip_sync.get_next_channel_announcements(chan_progress, 255);
323323
assert!(orig_announcements == deserialized_announcements);
324324
chan_progress = match orig_announcements.last() {
325325
Some(announcement) => announcement.0.contents.short_channel_id + 1,
@@ -328,8 +328,8 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
328328
}
329329
let mut node_progress = None;
330330
loop {
331-
let orig_announcements = self.net_graph_msg_handler.get_next_node_announcements(node_progress.as_ref(), 255);
332-
let deserialized_announcements = net_graph_msg_handler.get_next_node_announcements(node_progress.as_ref(), 255);
331+
let orig_announcements = self.gossip_sync.get_next_node_announcements(node_progress.as_ref(), 255);
332+
let deserialized_announcements = gossip_sync.get_next_node_announcements(node_progress.as_ref(), 255);
333333
assert!(orig_announcements == deserialized_announcements);
334334
node_progress = match orig_announcements.last() {
335335
Some(announcement) => Some(announcement.contents.node_id),
@@ -876,11 +876,11 @@ pub fn update_nodes_with_chan_announce<'a, 'b, 'c, 'd>(nodes: &'a Vec<Node<'b, '
876876
};
877877

878878
for node in nodes {
879-
assert!(node.net_graph_msg_handler.handle_channel_announcement(ann).unwrap());
880-
node.net_graph_msg_handler.handle_channel_update(upd_1).unwrap();
881-
node.net_graph_msg_handler.handle_channel_update(upd_2).unwrap();
882-
node.net_graph_msg_handler.handle_node_announcement(&a_node_announcement).unwrap();
883-
node.net_graph_msg_handler.handle_node_announcement(&b_node_announcement).unwrap();
879+
assert!(node.gossip_sync.handle_channel_announcement(ann).unwrap());
880+
node.gossip_sync.handle_channel_update(upd_1).unwrap();
881+
node.gossip_sync.handle_channel_update(upd_2).unwrap();
882+
node.gossip_sync.handle_node_announcement(&a_node_announcement).unwrap();
883+
node.gossip_sync.handle_node_announcement(&b_node_announcement).unwrap();
884884

885885
// Note that channel_updates are also delivered to ChannelManagers to ensure we have
886886
// forwarding info for local channels even if its not accepted in the network graph.
@@ -1992,11 +1992,11 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
19921992
let connect_style = Rc::new(RefCell::new(ConnectStyle::random_style()));
19931993

19941994
for i in 0..node_count {
1995-
let net_graph_msg_handler = NetGraphMsgHandler::new(cfgs[i].network_graph, None, cfgs[i].logger);
1995+
let gossip_sync = P2PGossipSync::new(cfgs[i].network_graph, None, cfgs[i].logger);
19961996
nodes.push(Node{
19971997
chain_source: cfgs[i].chain_source, tx_broadcaster: cfgs[i].tx_broadcaster,
19981998
chain_monitor: &cfgs[i].chain_monitor, keys_manager: &cfgs[i].keys_manager,
1999-
node: &chan_mgrs[i], network_graph: &cfgs[i].network_graph, net_graph_msg_handler,
1999+
node: &chan_mgrs[i], network_graph: &cfgs[i].network_graph, gossip_sync,
20002000
node_seed: cfgs[i].node_seed, network_chan_count: chan_count.clone(),
20012001
network_payment_count: payment_count.clone(), logger: cfgs[i].logger,
20022002
blocks: Arc::clone(&cfgs[i].tx_broadcaster.blocks),
@@ -2160,8 +2160,8 @@ pub fn handle_announce_close_broadcast_events<'a, 'b, 'c>(nodes: &Vec<Node<'a, '
21602160
}
21612161

21622162
for node in nodes {
2163-
node.net_graph_msg_handler.handle_channel_update(&as_update).unwrap();
2164-
node.net_graph_msg_handler.handle_channel_update(&bs_update).unwrap();
2163+
node.gossip_sync.handle_channel_update(&as_update).unwrap();
2164+
node.gossip_sync.handle_channel_update(&bs_update).unwrap();
21652165
}
21662166
}
21672167

lightning/src/ln/functional_tests.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -2347,8 +2347,8 @@ fn channel_monitor_network_test() {
23472347
check_preimage_claim(&nodes[4], &node_txn);
23482348
(close_chan_update_1, close_chan_update_2)
23492349
};
2350-
nodes[3].net_graph_msg_handler.handle_channel_update(&close_chan_update_2).unwrap();
2351-
nodes[4].net_graph_msg_handler.handle_channel_update(&close_chan_update_1).unwrap();
2350+
nodes[3].gossip_sync.handle_channel_update(&close_chan_update_2).unwrap();
2351+
nodes[4].gossip_sync.handle_channel_update(&close_chan_update_1).unwrap();
23522352
assert_eq!(nodes[3].node.list_channels().len(), 0);
23532353
assert_eq!(nodes[4].node.list_channels().len(), 0);
23542354

@@ -3978,9 +3978,9 @@ fn test_funding_peer_disconnect() {
39783978
};
39793979

39803980
// Provide the channel announcement and public updates to the network graph
3981-
nodes[0].net_graph_msg_handler.handle_channel_announcement(&chan_announcement).unwrap();
3982-
nodes[0].net_graph_msg_handler.handle_channel_update(&bs_update).unwrap();
3983-
nodes[0].net_graph_msg_handler.handle_channel_update(&as_update).unwrap();
3981+
nodes[0].gossip_sync.handle_channel_announcement(&chan_announcement).unwrap();
3982+
nodes[0].gossip_sync.handle_channel_update(&bs_update).unwrap();
3983+
nodes[0].gossip_sync.handle_channel_update(&as_update).unwrap();
39843984

39853985
let (route, _, _, _) = get_route_and_payment_hash!(nodes[0], nodes[1], 1000000);
39863986
let payment_preimage = send_along_route(&nodes[0], route, &[&nodes[1]], 1000000).0;
@@ -4421,9 +4421,9 @@ fn test_no_txn_manager_serialize_deserialize() {
44214421
let (channel_ready, _) = create_chan_between_nodes_with_value_confirm(&nodes[0], &nodes[1], &tx);
44224422
let (announcement, as_update, bs_update) = create_chan_between_nodes_with_value_b(&nodes[0], &nodes[1], &channel_ready);
44234423
for node in nodes.iter() {
4424-
assert!(node.net_graph_msg_handler.handle_channel_announcement(&announcement).unwrap());
4425-
node.net_graph_msg_handler.handle_channel_update(&as_update).unwrap();
4426-
node.net_graph_msg_handler.handle_channel_update(&bs_update).unwrap();
4424+
assert!(node.gossip_sync.handle_channel_announcement(&announcement).unwrap());
4425+
node.gossip_sync.handle_channel_update(&as_update).unwrap();
4426+
node.gossip_sync.handle_channel_update(&bs_update).unwrap();
44274427
}
44284428

44294429
send_payment(&nodes[0], &[&nodes[1]], 1000000);
@@ -4541,9 +4541,9 @@ fn test_manager_serialize_deserialize_events() {
45414541
let (channel_ready, _) = create_chan_between_nodes_with_value_confirm(&nodes[0], &nodes[1], &tx);
45424542
let (announcement, as_update, bs_update) = create_chan_between_nodes_with_value_b(&nodes[0], &nodes[1], &channel_ready);
45434543
for node in nodes.iter() {
4544-
assert!(node.net_graph_msg_handler.handle_channel_announcement(&announcement).unwrap());
4545-
node.net_graph_msg_handler.handle_channel_update(&as_update).unwrap();
4546-
node.net_graph_msg_handler.handle_channel_update(&bs_update).unwrap();
4544+
assert!(node.gossip_sync.handle_channel_announcement(&announcement).unwrap());
4545+
node.gossip_sync.handle_channel_update(&as_update).unwrap();
4546+
node.gossip_sync.handle_channel_update(&bs_update).unwrap();
45474547
}
45484548

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

lightning/src/ln/mod.rs

+7-4
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@
99

1010
//! High level lightning structs and impls live here.
1111
//!
12-
//! You probably want to create a channelmanager::ChannelManager, and a routing::NetGraphMsgHandler first.
12+
//! You probably want to create a [`ChannelManager`], and a [`P2PGossipSync`] first.
1313
//! Then, you probably want to pass them both on to a peer_handler::PeerManager and use that to
1414
//! create/manage connections and call get_and_clear_pending_events after each action, handling
1515
//! them appropriately.
1616
//!
17-
//! When you want to open/close a channel or send a payment, call into your ChannelManager and when
18-
//! you want to learn things about the network topology (eg get a route for sending a payment),
19-
//! call into your NetGraphMsgHandler.
17+
//! When you want to open/close a channel or send a payment, call into your [`ChannelManager`] and
18+
//! when you want to learn things about the network topology (eg get a route for sending a payment),
19+
//! call into your [`P2PGossipSync`].
20+
//!
21+
//! [`ChannelManager`]: channelmanager::ChannelManager
22+
//! [`P2PGossipSync`]: crate::routing::network_graph::P2PGossipSync
2023
2124
#[cfg(any(test, feature = "_test_utils"))]
2225
#[macro_use]

lightning/src/ln/peer_handler.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
//! Instead of actually servicing sockets ourselves we require that you implement the
1313
//! SocketDescriptor interface and use that to receive actions which you should perform on the
1414
//! socket, and call into PeerManager with bytes read from the socket. The PeerManager will then
15-
//! call into the provided message handlers (probably a ChannelManager and NetGraphmsgHandler) with messages
16-
//! they should handle, and encoding/sending response messages.
15+
//! call into the provided message handlers (probably a ChannelManager and P2PGossipSync) with
16+
//! messages they should handle, and encoding/sending response messages.
1717
1818
use bitcoin::secp256k1::{self, Secp256k1, SecretKey, PublicKey};
1919

@@ -28,7 +28,7 @@ use ln::wire::Encode;
2828
use util::atomic_counter::AtomicCounter;
2929
use util::events::{MessageSendEvent, MessageSendEventsProvider};
3030
use util::logger::Logger;
31-
use routing::network_graph::{NetworkGraph, NetGraphMsgHandler};
31+
use routing::network_graph::{NetworkGraph, P2PGossipSync};
3232

3333
use prelude::*;
3434
use io;
@@ -208,10 +208,9 @@ pub struct MessageHandler<CM: Deref, RM: Deref> where
208208
/// [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
209209
pub chan_handler: CM,
210210
/// A message handler which handles messages updating our knowledge of the network channel
211-
/// graph. Usually this is just a [`NetGraphMsgHandler`] object or an
212-
/// [`IgnoringMessageHandler`].
211+
/// graph. Usually this is just a [`P2PGossipSync`] object or an [`IgnoringMessageHandler`].
213212
///
214-
/// [`NetGraphMsgHandler`]: crate::routing::network_graph::NetGraphMsgHandler
213+
/// [`P2PGossipSync`]: crate::routing::network_graph::P2PGossipSync
215214
pub route_handler: RM,
216215
}
217216

@@ -388,7 +387,7 @@ impl Peer {
388387
/// issues such as overly long function definitions.
389388
///
390389
/// (C-not exported) as Arcs don't make sense in bindings
391-
pub type SimpleArcPeerManager<SD, M, T, F, C, L> = PeerManager<SD, Arc<SimpleArcChannelManager<M, T, F, L>>, Arc<NetGraphMsgHandler<Arc<NetworkGraph>, Arc<C>, Arc<L>>>, Arc<L>, Arc<IgnoringMessageHandler>>;
390+
pub type SimpleArcPeerManager<SD, M, T, F, C, L> = PeerManager<SD, Arc<SimpleArcChannelManager<M, T, F, L>>, Arc<P2PGossipSync<Arc<NetworkGraph>, Arc<C>, Arc<L>>>, Arc<L>, Arc<IgnoringMessageHandler>>;
392391

393392
/// SimpleRefPeerManager is a type alias for a PeerManager reference, and is the reference
394393
/// counterpart to the SimpleArcPeerManager type alias. Use this type by default when you don't
@@ -398,7 +397,7 @@ pub type SimpleArcPeerManager<SD, M, T, F, C, L> = PeerManager<SD, Arc<SimpleArc
398397
/// helps with issues such as long function definitions.
399398
///
400399
/// (C-not exported) as Arcs don't make sense in bindings
401-
pub type SimpleRefPeerManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, SD, M, T, F, C, L> = PeerManager<SD, SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, M, T, F, L>, &'e NetGraphMsgHandler<&'g NetworkGraph, &'h C, &'f L>, &'f L, IgnoringMessageHandler>;
400+
pub type SimpleRefPeerManager<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, SD, M, T, F, C, L> = PeerManager<SD, SimpleRefChannelManager<'a, 'b, 'c, 'd, 'e, M, T, F, L>, &'e P2PGossipSync<&'g NetworkGraph, &'h C, &'f L>, &'f L, IgnoringMessageHandler>;
402401

403402
/// A PeerManager manages a set of peers, described by their [`SocketDescriptor`] and marshalls
404403
/// socket events into messages which it passes on to its [`MessageHandler`].

lightning/src/ln/priv_short_conf_tests.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,9 @@ fn do_test_1_conf_open(connect_style: ConnectStyle) {
236236
assert_eq!(announcement, bs_announcement);
237237

238238
for node in nodes {
239-
assert!(node.net_graph_msg_handler.handle_channel_announcement(&announcement).unwrap());
240-
node.net_graph_msg_handler.handle_channel_update(&as_update).unwrap();
241-
node.net_graph_msg_handler.handle_channel_update(&bs_update).unwrap();
239+
assert!(node.gossip_sync.handle_channel_announcement(&announcement).unwrap());
240+
node.gossip_sync.handle_channel_update(&as_update).unwrap();
241+
node.gossip_sync.handle_channel_update(&bs_update).unwrap();
242242
}
243243
}
244244
#[test]

0 commit comments

Comments
 (0)