Skip to content

Commit 0c9b8f9

Browse files
committed
Create a module for receiving updates about network graph
Separate the logic handling messages regarding nodes and channels from route construction.
1 parent 59b1bf6 commit 0c9b8f9

File tree

7 files changed

+1953
-1713
lines changed

7 files changed

+1953
-1713
lines changed

lightning/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
//! generated/etc. This makes it a good candidate for tight integration into an existing wallet
1010
//! instead of having a rather-separate lightning appendage to a wallet.
1111
12-
#![cfg_attr(not(feature = "fuzztarget"), deny(missing_docs))]
12+
// #![cfg_attr(not(feature = "fuzztarget"), deny(missing_docs))]
1313
#![forbid(unsafe_code)]
1414

1515
// In general, rust is absolutely horrid at supporting users doing things like,

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 105 additions & 48 deletions
Large diffs are not rendered by default.

lightning/src/ln/functional_test_utils.rs

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ use chain::transaction::OutPoint;
66
use chain::keysinterface::KeysInterface;
77
use ln::channelmanager::{ChannelManager, ChannelManagerReadArgs, RAACommitmentOrder, PaymentPreimage, PaymentHash, PaymentSecret, PaymentSendFailure};
88
use ln::channelmonitor::{ChannelMonitor, ManyChannelMonitor};
9-
use ln::router::{Route, Router, RouterReadArgs};
9+
use ln::router::{Route, Router};
10+
use ln::network_graph_monitor::{NetworkGraphMonitor, NetworkGraphMonitorReadArgs};
1011
use ln::features::InitFeatures;
1112
use ln::msgs;
1213
use ln::msgs::{ChannelMessageHandler,RoutingMessageHandler};
@@ -83,6 +84,7 @@ pub struct Node<'a, 'b: 'a, 'c: 'b> {
8384
pub keys_manager: &'b test_utils::TestKeysInterface,
8485
pub node: &'a ChannelManager<EnforcingChannelKeys, &'b TestChannelMonitor<'c>, &'c test_utils::TestBroadcaster, &'b test_utils::TestKeysInterface, &'c test_utils::TestFeeEstimator>,
8586
pub router: Router,
87+
pub network_graph_monitor: NetworkGraphMonitor,
8688
pub node_seed: [u8; 32],
8789
pub network_payment_count: Rc<RefCell<u8>>,
8890
pub network_chan_count: Rc<RefCell<u32>>,
@@ -100,15 +102,15 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
100102
// Check that if we serialize the Router, we can deserialize it again.
101103
{
102104
let mut w = test_utils::TestVecWriter(Vec::new());
103-
self.router.write(&mut w).unwrap();
104-
let deserialized_router = Router::read(&mut ::std::io::Cursor::new(&w.0), RouterReadArgs {
105+
self.network_graph_monitor.write(&mut w).unwrap();
106+
let network_graph_monitor = NetworkGraphMonitor::read(&mut ::std::io::Cursor::new(&w.0), NetworkGraphMonitorReadArgs {
105107
chain_monitor: Arc::clone(&self.chain_monitor) as Arc<chaininterface::ChainWatchInterface>,
106108
logger: Arc::clone(&self.logger) as Arc<Logger>
107109
}).unwrap();
108110
let mut chan_progress = 0;
109111
loop {
110-
let orig_announcements = self.router.get_next_channel_announcements(chan_progress, 255);
111-
let deserialized_announcements = deserialized_router.get_next_channel_announcements(chan_progress, 255);
112+
let orig_announcements = self.network_graph_monitor.get_next_channel_announcements(chan_progress, 255);
113+
let deserialized_announcements = network_graph_monitor.get_next_channel_announcements(chan_progress, 255);
112114
assert!(orig_announcements == deserialized_announcements);
113115
chan_progress = match orig_announcements.last() {
114116
Some(announcement) => announcement.0.contents.short_channel_id + 1,
@@ -117,8 +119,8 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
117119
}
118120
let mut node_progress = None;
119121
loop {
120-
let orig_announcements = self.router.get_next_node_announcements(node_progress.as_ref(), 255);
121-
let deserialized_announcements = deserialized_router.get_next_node_announcements(node_progress.as_ref(), 255);
122+
let orig_announcements = self.network_graph_monitor.get_next_node_announcements(node_progress.as_ref(), 255);
123+
let deserialized_announcements = network_graph_monitor.get_next_node_announcements(node_progress.as_ref(), 255);
122124
assert!(orig_announcements == deserialized_announcements);
123125
node_progress = match orig_announcements.last() {
124126
Some(announcement) => Some(announcement.contents.node_id),
@@ -456,11 +458,11 @@ pub fn create_announced_chan_between_nodes_with_value<'a, 'b, 'c, 'd>(nodes: &'a
456458
};
457459

458460
for node in nodes {
459-
assert!(node.router.handle_channel_announcement(&chan_announcement.0).unwrap());
460-
node.router.handle_channel_update(&chan_announcement.1).unwrap();
461-
node.router.handle_channel_update(&chan_announcement.2).unwrap();
462-
node.router.handle_node_announcement(&a_node_announcement).unwrap();
463-
node.router.handle_node_announcement(&b_node_announcement).unwrap();
461+
assert!(node.network_graph_monitor.handle_channel_announcement(&chan_announcement.0).unwrap());
462+
node.network_graph_monitor.handle_channel_update(&chan_announcement.1).unwrap();
463+
node.network_graph_monitor.handle_channel_update(&chan_announcement.2).unwrap();
464+
node.network_graph_monitor.handle_node_announcement(&a_node_announcement).unwrap();
465+
node.network_graph_monitor.handle_node_announcement(&b_node_announcement).unwrap();
464466
}
465467
(chan_announcement.1, chan_announcement.2, chan_announcement.3, chan_announcement.4)
466468
}
@@ -934,7 +936,8 @@ pub fn claim_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
934936
pub const TEST_FINAL_CLTV: u32 = 32;
935937

936938
pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) -> (PaymentPreimage, PaymentHash) {
937-
let route = origin_node.router.get_route(&expected_route.last().unwrap().node.get_our_node_id(), None, &Vec::new(), recv_value, TEST_FINAL_CLTV).unwrap();
939+
let network = &origin_node.network_graph_monitor.network_map.read().unwrap();
940+
let route = origin_node.router.get_route(network, &expected_route.last().unwrap().node.get_our_node_id(), None, &Vec::new(), recv_value, TEST_FINAL_CLTV).unwrap();
938941
assert_eq!(route.paths.len(), 1);
939942
assert_eq!(route.paths[0].len(), expected_route.len());
940943
for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {
@@ -945,7 +948,8 @@ pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
945948
}
946949

947950
pub fn route_over_limit<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) {
948-
let route = origin_node.router.get_route(&expected_route.last().unwrap().node.get_our_node_id(), None, &Vec::new(), recv_value, TEST_FINAL_CLTV).unwrap();
951+
let network = &origin_node.network_graph_monitor.network_map.read().unwrap();
952+
let route = origin_node.router.get_route(network, &expected_route.last().unwrap().node.get_our_node_id(), None, &Vec::new(), recv_value, TEST_FINAL_CLTV).unwrap();
949953
assert_eq!(route.paths.len(), 1);
950954
assert_eq!(route.paths[0].len(), expected_route.len());
951955
for (node, hop) in expected_route.iter().zip(route.paths[0].iter()) {
@@ -1087,11 +1091,12 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
10871091
let block_notifier = chaininterface::BlockNotifier::new(cfgs[i].chain_monitor.clone());
10881092
block_notifier.register_listener(&cfgs[i].chan_monitor.simple_monitor as &chaininterface::ChainListener);
10891093
block_notifier.register_listener(&chan_mgrs[i] as &chaininterface::ChainListener);
1090-
let router = Router::new(PublicKey::from_secret_key(&secp_ctx, &cfgs[i].keys_manager.get_node_secret()), cfgs[i].chain_monitor.clone(), cfgs[i].logger.clone() as Arc<Logger>);
1094+
let network_graph_monitor = NetworkGraphMonitor::new(PublicKey::from_secret_key(&secp_ctx, &cfgs[i].keys_manager.get_node_secret()), cfgs[i].chain_monitor.clone(), cfgs[i].logger.clone() as Arc<Logger>);
1095+
let router = Router::new(cfgs[i].logger.clone() as Arc<Logger>);
10911096
nodes.push(Node{ chain_monitor: cfgs[i].chain_monitor.clone(), block_notifier,
10921097
tx_broadcaster: cfgs[i].tx_broadcaster, chan_monitor: &cfgs[i].chan_monitor,
1093-
keys_manager: &cfgs[i].keys_manager, node: &chan_mgrs[i], router,
1094-
node_seed: cfgs[i].node_seed, network_chan_count: chan_count.clone(),
1098+
keys_manager: &cfgs[i].keys_manager, node: &chan_mgrs[i], network_graph_monitor,
1099+
router, node_seed: cfgs[i].node_seed, network_chan_count: chan_count.clone(),
10951100
network_payment_count: payment_count.clone(), logger: cfgs[i].logger.clone(),
10961101
})
10971102
}
@@ -1222,8 +1227,8 @@ pub fn get_announce_close_broadcast_events<'a, 'b, 'c>(nodes: &Vec<Node<'a, 'b,
12221227
};
12231228

12241229
for node in nodes {
1225-
node.router.handle_channel_update(&as_update).unwrap();
1226-
node.router.handle_channel_update(&bs_update).unwrap();
1230+
node.network_graph_monitor.handle_channel_update(&as_update).unwrap();
1231+
node.network_graph_monitor.handle_channel_update(&bs_update).unwrap();
12271232
}
12281233
}
12291234

0 commit comments

Comments
 (0)