Skip to content

Commit 94fcf48

Browse files
Move DefaultRouter to router module
1 parent 57aebb9 commit 94fcf48

File tree

3 files changed

+68
-69
lines changed

3 files changed

+68
-69
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,13 +580,13 @@ mod tests {
580580
use lightning::ln::msgs::{ChannelMessageHandler, Init};
581581
use lightning::ln::peer_handler::{PeerManager, MessageHandler, SocketDescriptor, IgnoringMessageHandler};
582582
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
583+
use lightning::routing::router::DefaultRouter;
583584
use lightning::util::config::UserConfig;
584585
use lightning::util::events::{Event, MessageSendEventsProvider, MessageSendEvent};
585586
use lightning::util::ser::Writeable;
586587
use lightning::util::test_utils;
587588
use lightning::util::persist::KVStorePersister;
588589
use lightning_invoice::payment::{InvoicePayer, Retry};
589-
use lightning_invoice::utils::DefaultRouter;
590590
use lightning_persister::FilesystemPersister;
591591
use std::fs;
592592
use std::path::PathBuf;

lightning-invoice/src/utils.rs

Lines changed: 3 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use crate::payment::Payer;
55

66
use crate::{prelude::*, Description, InvoiceDescription, Sha256};
77
use bech32::ToBase32;
8-
use bitcoin_hashes::{Hash, sha256};
8+
use bitcoin_hashes::Hash;
99
use lightning::chain;
1010
use lightning::chain::chaininterface::{BroadcasterInterface, FeeEstimator};
1111
use lightning::chain::keysinterface::{Recipient, KeysInterface};
@@ -14,15 +14,12 @@ use lightning::ln::channelmanager::{ChannelDetails, ChannelManager, PaymentId, P
1414
#[cfg(feature = "std")]
1515
use lightning::ln::channelmanager::{PhantomRouteHints, MIN_CLTV_EXPIRY_DELTA};
1616
use lightning::ln::inbound_payment::{create, create_from_hash, ExpandedKey};
17-
use lightning::ln::msgs::LightningError;
18-
use lightning::routing::gossip::{NetworkGraph, RoutingFees};
19-
use lightning::routing::router::{InFlightHtlcs, Route, RouteHint, RouteHintHop, RouteParameters, find_route, RouteHop, Router};
20-
use lightning::routing::scoring::{LockableScore, Score, ScorerAccountingForInFlightHtlcs};
17+
use lightning::routing::gossip::RoutingFees;
18+
use lightning::routing::router::{Route, RouteHint, RouteHintHop};
2119
use lightning::util::logger::Logger;
2220
use secp256k1::PublicKey;
2321
use core::ops::Deref;
2422
use core::time::Duration;
25-
use crate::sync::Mutex;
2623

2724
#[cfg(feature = "std")]
2825
/// Utility to create an invoice that can be paid to one of multiple nodes, or a "phantom invoice."
@@ -524,67 +521,6 @@ fn filter_channels<L: Deref>(
524521
.collect::<Vec<RouteHint>>()
525522
}
526523

527-
/// A [`Router`] implemented using [`find_route`].
528-
pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref> where
529-
L::Target: Logger,
530-
S::Target: for <'a> LockableScore<'a>,
531-
{
532-
network_graph: G,
533-
logger: L,
534-
random_seed_bytes: Mutex<[u8; 32]>,
535-
scorer: S
536-
}
537-
538-
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref> DefaultRouter<G, L, S> where
539-
L::Target: Logger,
540-
S::Target: for <'a> LockableScore<'a>,
541-
{
542-
/// Creates a new router using the given [`NetworkGraph`], a [`Logger`], and a randomness source
543-
/// `random_seed_bytes`.
544-
pub fn new(network_graph: G, logger: L, random_seed_bytes: [u8; 32], scorer: S) -> Self {
545-
let random_seed_bytes = Mutex::new(random_seed_bytes);
546-
Self { network_graph, logger, random_seed_bytes, scorer }
547-
}
548-
}
549-
550-
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref> Router for DefaultRouter<G, L, S> where
551-
L::Target: Logger,
552-
S::Target: for <'a> LockableScore<'a>,
553-
{
554-
fn find_route(
555-
&self, payer: &PublicKey, params: &RouteParameters, first_hops: Option<&[&ChannelDetails]>,
556-
inflight_htlcs: InFlightHtlcs
557-
) -> Result<Route, LightningError> {
558-
let random_seed_bytes = {
559-
let mut locked_random_seed_bytes = self.random_seed_bytes.lock().unwrap();
560-
*locked_random_seed_bytes = sha256::Hash::hash(&*locked_random_seed_bytes).into_inner();
561-
*locked_random_seed_bytes
562-
};
563-
564-
find_route(
565-
payer, params, &self.network_graph, first_hops, &*self.logger,
566-
&ScorerAccountingForInFlightHtlcs::new(&mut self.scorer.lock(), inflight_htlcs),
567-
&random_seed_bytes
568-
)
569-
}
570-
571-
fn notify_payment_path_failed(&self, path: &[&RouteHop], short_channel_id: u64) {
572-
self.scorer.lock().payment_path_failed(path, short_channel_id);
573-
}
574-
575-
fn notify_payment_path_successful(&self, path: &[&RouteHop]) {
576-
self.scorer.lock().payment_path_successful(path);
577-
}
578-
579-
fn notify_payment_probe_successful(&self, path: &[&RouteHop]) {
580-
self.scorer.lock().probe_successful(path);
581-
}
582-
583-
fn notify_payment_probe_failed(&self, path: &[&RouteHop], short_channel_id: u64) {
584-
self.scorer.lock().probe_failed(path, short_channel_id);
585-
}
586-
}
587-
588524
impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> Payer for ChannelManager<M, T, K, F, L>
589525
where
590526
M::Target: chain::Watch<<K::Target as KeysInterface>::Signer>,

lightning/src/routing/router.rs

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,85 @@
1313
//! interrogate it to get routes for your own payments.
1414
1515
use bitcoin::secp256k1::PublicKey;
16+
use bitcoin::hashes::Hash;
17+
use bitcoin::hashes::sha256::Hash as Sha256;
1618

1719
use crate::ln::channelmanager::ChannelDetails;
1820
use crate::ln::features::{ChannelFeatures, InvoiceFeatures, NodeFeatures};
1921
use crate::ln::msgs::{DecodeError, ErrorAction, LightningError, MAX_VALUE_MSAT};
2022
use crate::routing::gossip::{DirectedChannelInfo, EffectiveCapacity, ReadOnlyNetworkGraph, NetworkGraph, NodeId, RoutingFees};
21-
use crate::routing::scoring::{ChannelUsage, Score};
23+
use crate::routing::scoring::{ChannelUsage, LockableScore, Score, ScorerAccountingForInFlightHtlcs};
2224
use crate::util::ser::{Writeable, Readable, Writer};
2325
use crate::util::logger::{Level, Logger};
2426
use crate::util::chacha20::ChaCha20;
2527

2628
use crate::io;
2729
use crate::prelude::*;
30+
use crate::sync::Mutex;
2831
use alloc::collections::BinaryHeap;
2932
use core::cmp;
3033
use core::ops::Deref;
3134

35+
/// A [`Router`] implemented using [`find_route`].
36+
pub struct DefaultRouter<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref> where
37+
L::Target: Logger,
38+
S::Target: for <'a> LockableScore<'a>,
39+
{
40+
network_graph: G,
41+
logger: L,
42+
random_seed_bytes: Mutex<[u8; 32]>,
43+
scorer: S
44+
}
45+
46+
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref> DefaultRouter<G, L, S> where
47+
L::Target: Logger,
48+
S::Target: for <'a> LockableScore<'a>,
49+
{
50+
/// Creates a new router.
51+
pub fn new(network_graph: G, logger: L, random_seed_bytes: [u8; 32], scorer: S) -> Self {
52+
let random_seed_bytes = Mutex::new(random_seed_bytes);
53+
Self { network_graph, logger, random_seed_bytes, scorer }
54+
}
55+
}
56+
57+
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, S: Deref> Router for DefaultRouter<G, L, S> where
58+
L::Target: Logger,
59+
S::Target: for <'a> LockableScore<'a>,
60+
{
61+
fn find_route(
62+
&self, payer: &PublicKey, params: &RouteParameters, first_hops: Option<&[&ChannelDetails]>,
63+
inflight_htlcs: InFlightHtlcs
64+
) -> Result<Route, LightningError> {
65+
let random_seed_bytes = {
66+
let mut locked_random_seed_bytes = self.random_seed_bytes.lock().unwrap();
67+
*locked_random_seed_bytes = Sha256::hash(&*locked_random_seed_bytes).into_inner();
68+
*locked_random_seed_bytes
69+
};
70+
71+
find_route(
72+
payer, params, &self.network_graph, first_hops, &*self.logger,
73+
&ScorerAccountingForInFlightHtlcs::new(&mut self.scorer.lock(), inflight_htlcs),
74+
&random_seed_bytes
75+
)
76+
}
77+
78+
fn notify_payment_path_failed(&self, path: &[&RouteHop], short_channel_id: u64) {
79+
self.scorer.lock().payment_path_failed(path, short_channel_id);
80+
}
81+
82+
fn notify_payment_path_successful(&self, path: &[&RouteHop]) {
83+
self.scorer.lock().payment_path_successful(path);
84+
}
85+
86+
fn notify_payment_probe_successful(&self, path: &[&RouteHop]) {
87+
self.scorer.lock().probe_successful(path);
88+
}
89+
90+
fn notify_payment_probe_failed(&self, path: &[&RouteHop], short_channel_id: u64) {
91+
self.scorer.lock().probe_failed(path, short_channel_id);
92+
}
93+
}
94+
3295
/// A trait defining behavior for routing a payment.
3396
pub trait Router {
3497
/// Finds a [`Route`] between `payer` and `payee` for a payment with the given values.

0 commit comments

Comments
 (0)