Skip to content

Commit b5723c7

Browse files
authored
Merge pull request #621 from TheBlueMatt/2020-05-592-nits
592+a few fixes
2 parents d2520f4 + b1c8097 commit b5723c7

20 files changed

+3291
-2920
lines changed

ARCH.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ 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. `Router` handles receiving channel and node
15-
announcements and calculates routes for sending payments. `PeerManager` handles the
16-
authenticated and encrypted communication protocol, monitoring for liveness of peers,
17-
routing messages to `ChannelManager` and `Router` instances directly, and receiving
18-
messages from them via the `EventsProvider` interface.
14+
as the `ChannelManager` or on a separate one. `NetGraphMsgHandler` handles receiving channel
15+
and node announcements, which are then used to calculate routes by `get_route` for sending payments.
16+
`PeerManager` handles the authenticated and encrypted communication protocol,
17+
monitoring for liveness of peers, routing messages to `ChannelManager` and `NetGraphMsgHandler`
18+
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
2121
a proxy in between for special handling. Further, APIs for key generation, transaction
@@ -56,7 +56,7 @@ At a high level, some of the common interfaces fit together as follows:
5656
| ----------------------- ---------
5757
| | | Event |
5858
(as RoutingMessageHandler) v ---------
59-
\ ----------
60-
-----------------> | Router |
61-
----------
59+
\ --------------------
60+
-----------------> | NetGraphMsgHandler |
61+
--------------------
6262
```

fuzz/src/chanmon_consistency.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ use lightning::chain::keysinterface::{KeysInterface, InMemoryChannelKeys};
2727
use lightning::ln::channelmonitor;
2828
use lightning::ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, HTLCUpdate};
2929
use lightning::ln::channelmanager::{ChannelManager, PaymentHash, PaymentPreimage, PaymentSecret, ChannelManagerReadArgs};
30-
use lightning::ln::router::{Route, RouteHop};
3130
use lightning::ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
3231
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, ErrorAction, UpdateAddHTLC, Init};
3332
use lightning::util::enforcing_trait_impls::EnforcingChannelKeys;
@@ -36,6 +35,8 @@ use lightning::util::logger::Logger;
3635
use lightning::util::config::UserConfig;
3736
use lightning::util::events::{EventsProvider, MessageSendEventsProvider};
3837
use lightning::util::ser::{Readable, ReadableArgs, Writeable, Writer};
38+
use lightning::routing::router::{Route, RouteHop};
39+
3940

4041
use utils::test_logger;
4142

fuzz/src/full_stack.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ use lightning::chain::keysinterface::{InMemoryChannelKeys, KeysInterface};
2323
use lightning::ln::channelmonitor;
2424
use lightning::ln::channelmanager::{ChannelManager, PaymentHash, PaymentPreimage, PaymentSecret};
2525
use lightning::ln::peer_handler::{MessageHandler,PeerManager,SocketDescriptor};
26-
use lightning::ln::router::Router;
26+
use lightning::routing::router::get_route;
27+
use lightning::routing::network_graph::NetGraphMsgHandler;
2728
use lightning::util::events::{EventsProvider,Event};
2829
use lightning::util::enforcing_trait_impls::EnforcingChannelKeys;
2930
use lightning::util::logger::Logger;
@@ -332,12 +333,13 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
332333
config.channel_options.announced_channel = get_slice!(1)[0] != 0;
333334
config.peer_channel_config_limits.min_dust_limit_satoshis = 0;
334335
let channelmanager = Arc::new(ChannelManager::new(Network::Bitcoin, fee_est.clone(), monitor.clone(), broadcast.clone(), Arc::clone(&logger), keys_manager.clone(), config, 0).unwrap());
335-
let router = Arc::new(Router::new(PublicKey::from_secret_key(&Secp256k1::signing_only(), &keys_manager.get_node_secret()), watch.clone(), Arc::clone(&logger)));
336+
let our_id = PublicKey::from_secret_key(&Secp256k1::signing_only(), &keys_manager.get_node_secret());
337+
let net_graph_msg_handler = Arc::new(NetGraphMsgHandler::new(watch.clone(), Arc::clone(&logger)));
336338

337339
let peers = RefCell::new([false; 256]);
338340
let mut loss_detector = MoneyLossDetector::new(&peers, channelmanager.clone(), monitor.clone(), PeerManager::new(MessageHandler {
339341
chan_handler: channelmanager.clone(),
340-
route_handler: router.clone(),
342+
route_handler: net_graph_msg_handler.clone(),
341343
}, 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)));
342344

343345
let mut should_forward = false;
@@ -389,7 +391,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
389391
},
390392
4 => {
391393
let value = slice_to_be24(get_slice!(3)) as u64;
392-
let route = match router.get_route(&get_pubkey!(), None, &Vec::new(), value, 42) {
394+
let route = match get_route(&our_id, &net_graph_msg_handler, &get_pubkey!(), None, &Vec::new(), value, 42, Arc::clone(&logger)) {
393395
Ok(route) => route,
394396
Err(_) => return,
395397
};
@@ -406,7 +408,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
406408
},
407409
15 => {
408410
let value = slice_to_be24(get_slice!(3)) as u64;
409-
let mut route = match router.get_route(&get_pubkey!(), None, &Vec::new(), value, 42) {
411+
let mut route = match get_route(&our_id, &net_graph_msg_handler, &get_pubkey!(), None, &Vec::new(), value, 42, Arc::clone(&logger)) {
410412
Ok(route) => route,
411413
Err(_) => return,
412414
};

fuzz/src/router.rs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ use lightning::ln::channelmanager::ChannelDetails;
88
use lightning::ln::features::InitFeatures;
99
use lightning::ln::msgs;
1010
use lightning::ln::msgs::RoutingMessageHandler;
11-
use lightning::ln::router::{Router, RouteHint};
11+
use lightning::routing::router::{get_route, RouteHint};
1212
use lightning::util::logger::Logger;
1313
use lightning::util::ser::Readable;
14+
use lightning::routing::network_graph::{NetGraphMsgHandler, RoutingFees};
1415

1516
use bitcoin::secp256k1::key::PublicKey;
1617

@@ -156,7 +157,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
156157
});
157158

158159
let our_pubkey = get_pubkey!();
159-
let router = Router::new(our_pubkey.clone(), chain_monitor, Arc::clone(&logger));
160+
let net_graph_msg_handler = NetGraphMsgHandler::new(chain_monitor, Arc::clone(&logger));
160161

161162
loop {
162163
match get_slice!(1)[0] {
@@ -166,22 +167,22 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
166167
if addr_len > (37+1)*4 {
167168
return;
168169
}
169-
let _ = router.handle_node_announcement(&decode_msg_with_len16!(msgs::NodeAnnouncement, 64, 288));
170+
let _ = net_graph_msg_handler.handle_node_announcement(&decode_msg_with_len16!(msgs::NodeAnnouncement, 64, 288));
170171
},
171172
1 => {
172-
let _ = router.handle_channel_announcement(&decode_msg_with_len16!(msgs::ChannelAnnouncement, 64*4, 32+8+33*4));
173+
let _ = net_graph_msg_handler.handle_channel_announcement(&decode_msg_with_len16!(msgs::ChannelAnnouncement, 64*4, 32+8+33*4));
173174
},
174175
2 => {
175-
let _ = router.handle_channel_update(&decode_msg!(msgs::ChannelUpdate, 128));
176+
let _ = net_graph_msg_handler.handle_channel_update(&decode_msg!(msgs::ChannelUpdate, 128));
176177
},
177178
3 => {
178179
match get_slice!(1)[0] {
179180
0 => {
180-
router.handle_htlc_fail_channel_update(&msgs::HTLCFailChannelUpdate::ChannelUpdateMessage {msg: decode_msg!(msgs::ChannelUpdate, 128)});
181+
net_graph_msg_handler.handle_htlc_fail_channel_update(&msgs::HTLCFailChannelUpdate::ChannelUpdateMessage {msg: decode_msg!(msgs::ChannelUpdate, 128)});
181182
},
182183
1 => {
183184
let short_channel_id = slice_to_be64(get_slice!(8));
184-
router.handle_htlc_fail_channel_update(&msgs::HTLCFailChannelUpdate::ChannelClosed {short_channel_id, is_permanent: false});
185+
net_graph_msg_handler.handle_htlc_fail_channel_update(&msgs::HTLCFailChannelUpdate::ChannelClosed {short_channel_id, is_permanent: false});
185186
},
186187
_ => return,
187188
}
@@ -217,15 +218,17 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
217218
last_hops_vec.push(RouteHint {
218219
src_node_id: get_pubkey!(),
219220
short_channel_id: slice_to_be64(get_slice!(8)),
220-
fee_base_msat: slice_to_be32(get_slice!(4)),
221-
fee_proportional_millionths: slice_to_be32(get_slice!(4)),
221+
fees: RoutingFees {
222+
base_msat: slice_to_be32(get_slice!(4)),
223+
proportional_millionths: slice_to_be32(get_slice!(4)),
224+
},
222225
cltv_expiry_delta: slice_to_be16(get_slice!(2)),
223226
htlc_minimum_msat: slice_to_be64(get_slice!(8)),
224227
});
225228
}
226229
&last_hops_vec[..]
227230
};
228-
let _ = router.get_route(&target, first_hops, last_hops, slice_to_be64(get_slice!(8)), slice_to_be32(get_slice!(4)));
231+
let _ = get_route(&our_pubkey, &net_graph_msg_handler, &target, first_hops, last_hops, slice_to_be64(get_slice!(8)), slice_to_be32(get_slice!(4)), Arc::clone(&logger));
229232
},
230233
_ => return,
231234
}

lightning/Cargo.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ Still missing tons of error-handling. See GitHub issues for suggested projects i
1111
"""
1212

1313
[features]
14-
# Supports tracking channels with a non-bitcoin chain hashes. Currently enables all kinds of fun DoS attacks.
15-
non_bitcoin_chain_hash_routing = []
1614
fuzztarget = ["bitcoin/fuzztarget"]
1715
# Unlog messages superior at targeted level.
1816
max_level_off = []

lightning/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,5 @@ extern crate bitcoin;
2626
pub mod util;
2727
pub mod chain;
2828
pub mod ln;
29+
pub mod routing;
30+

0 commit comments

Comments
 (0)