Skip to content

Commit 79d497c

Browse files
committed
f - Remove NetworkGraph from Router interface
1 parent 078d103 commit 79d497c

File tree

1 file changed

+24
-48
lines changed

1 file changed

+24
-48
lines changed

lightning-invoice/src/payment.rs

Lines changed: 24 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
//! Defines an [`InvoicePayer`] utility for paying invoices, parameterized by [`Payer`] and
1313
//! [`Router`] traits. Implementations of [`Payer`] provide the payer's node id, channels, and means
1414
//! to send a payment over a [`Route`]. Implementations of [`Router`] find a [`Route`] between payer
15-
//! and payee using information provided by the payer and from the payee's [`Invoice`] along with a
16-
//! [`NetworkGraph`].
15+
//! and payee using information provided by the payer and from the payee's [`Invoice`].
1716
//!
1817
//! [`InvoicePayer`] caches each [`Invoice`] by its `payment_hash` so that [`PaymentRetryHandler`]
1918
//! can retry the payment if it fails. It accomplishes this by implementing [`EventHandler`] which
@@ -26,10 +25,10 @@
2625
//!
2726
//! # Note
2827
//!
29-
//! The [`Route`] is compute before each payment attempt. Any updates to the [`NetworkGraph`] or
30-
//! changes to channels scores should be applied prior to retries. This typically means any
31-
//! [`EventHandler`] decorators responsible for this should decorate [`PaymentRetryHandler`] so that
32-
//! such changes take effect before retrying.
28+
//! The [`Route`] is compute before each payment attempt. Any updates affecting path finding such as
29+
//! updates to the network graph or changes to channels scores should be applied prior to retries.
30+
//! This typically means any [`EventHandler`] decorators responsible for this should decorate
31+
//! [`PaymentRetryHandler`] so that such changes take effect before retrying.
3332
3433
use crate::Invoice;
3534

@@ -41,7 +40,6 @@ use lightning::ln::{PaymentHash, PaymentSecret};
4140
use lightning::ln::channelmanager::{ChannelDetails, PaymentSendFailure};
4241
use lightning::ln::features::InvoiceFeatures;
4342
use lightning::ln::msgs::LightningError;
44-
use lightning::routing::network_graph::NetworkGraph;
4543
use lightning::routing::router::{Route, RouteHint};
4644
use lightning::util::events::{Event, EventHandler};
4745
use lightning::util::logger::Logger;
@@ -56,11 +54,9 @@ use std::sync::Mutex;
5654
const MAX_PAYMENT_ATTEMPTS: usize = 3;
5755

5856
/// A utility for paying [`Invoice]`s.
59-
pub struct InvoicePayer<P: Deref, R, G>
60-
where P::Target: Payer, R: Router, G: Deref<Target = NetworkGraph> {
57+
pub struct InvoicePayer<P: Deref, R> where P::Target: Payer, R: Router {
6158
payer: P,
6259
router: R,
63-
network_graph: G,
6460
invoice_cache: Mutex<HashMap<PaymentHash, Invoice>>,
6561
}
6662

@@ -80,12 +76,11 @@ pub trait Payer {
8076

8177
/// A trait defining behavior for routing an [`Invoice`] payment.
8278
pub trait Router {
83-
/// Finds a [`Route`] between `payer` and `payee` using the provided first and last hops and
84-
/// [`NetworkGraph`] for a payment with the given values.
79+
/// Finds a [`Route`] between `payer` and `payee` using the provided first and last hops for a
80+
/// payment with the given values.
8581
fn find_route(
8682
&self,
8783
payer: &PublicKey,
88-
network: &NetworkGraph,
8984
payee: &PublicKey,
9085
payee_features: Option<InvoiceFeatures>,
9186
first_hops: Option<&[&ChannelDetails]>,
@@ -107,12 +102,11 @@ pub enum PaymentError {
107102
}
108103

109104
/// An [`EventHandler`] decorator for retrying failed payments.
110-
pub struct PaymentRetryHandler<I, P: Deref, R, G, L: Deref, E>
105+
pub struct PaymentRetryHandler<I, P: Deref, R, L: Deref, E>
111106
where
112-
I: Deref<Target = InvoicePayer<P, R, G>>,
107+
I: Deref<Target = InvoicePayer<P, R>>,
113108
P::Target: Payer,
114109
R: Router,
115-
G: Deref<Target = NetworkGraph>,
116110
L::Target: Logger,
117111
E: EventHandler,
118112
{
@@ -122,14 +116,12 @@ where
122116
event_handler: E,
123117
}
124118

125-
impl<P: Deref, R, G> InvoicePayer<P, R, G>
126-
where P::Target: Payer, R: Router, G: Deref<Target = NetworkGraph> {
119+
impl<P: Deref, R> InvoicePayer<P, R> where P::Target: Payer, R: Router {
127120
/// Creates an invoice payer.
128-
pub fn new(payer: P, router: R, network_graph: G) -> Self {
121+
pub fn new(payer: P, router: R) -> Self {
129122
Self {
130123
payer,
131124
router,
132-
network_graph,
133125
invoice_cache: Mutex::new(HashMap::new()),
134126
}
135127
}
@@ -167,7 +159,6 @@ where P::Target: Payer, R: Router, G: Deref<Target = NetworkGraph> {
167159
let final_cltv = invoice.min_final_cltv_expiry() as u32;
168160
let route = self.router.find_route(
169161
&payer,
170-
&*self.network_graph,
171162
&payee,
172163
payee_features,
173164
Some(&first_hops.iter().collect::<Vec<_>>()),
@@ -191,12 +182,11 @@ where P::Target: Payer, R: Router, G: Deref<Target = NetworkGraph> {
191182
}
192183
}
193184

194-
impl<I, P: Deref, R, G, L: Deref, E> PaymentRetryHandler<I, P, R, G, L, E>
185+
impl<I, P: Deref, R, L: Deref, E> PaymentRetryHandler<I, P, R, L, E>
195186
where
196-
I: Deref<Target = InvoicePayer<P, R, G>>,
187+
I: Deref<Target = InvoicePayer<P, R>>,
197188
P::Target: Payer,
198189
R: Router,
199-
G: Deref<Target = NetworkGraph>,
200190
L::Target: Logger,
201191
E: EventHandler,
202192
{
@@ -211,12 +201,11 @@ where
211201
}
212202
}
213203

214-
impl<I, P: Deref, R, G, L: Deref, E> EventHandler for PaymentRetryHandler<I, P, R, G, L, E>
204+
impl<I, P: Deref, R, L: Deref, E> EventHandler for PaymentRetryHandler<I, P, R, L, E>
215205
where
216-
I: Deref<Target = InvoicePayer<P, R, G>>,
206+
I: Deref<Target = InvoicePayer<P, R>>,
217207
P::Target: Payer,
218208
R: Router,
219-
G: Deref<Target = NetworkGraph>,
220209
L::Target: Logger,
221210
E: EventHandler,
222211
{
@@ -270,12 +259,9 @@ mod tests {
270259

271260
use super::*;
272261
use crate::{InvoiceBuilder, Currency};
273-
use bitcoin::network::constants::Network;
274-
use bitcoin::blockdata::constants::genesis_block;
275262
use bitcoin::secp256k1::{SecretKey, PublicKey, Secp256k1};
276263
use lightning::ln::PaymentPreimage;
277264
use lightning::ln::msgs::{ErrorAction, LightningError};
278-
use lightning::routing::network_graph::NetworkGraph;
279265
use lightning::util::test_utils::TestLogger;
280266
use lightning::util::events::Event;
281267
use lightning::util::errors::APIError;
@@ -300,8 +286,7 @@ mod tests {
300286
fn pays_invoice_on_first_attempt() {
301287
let payer = TestPayer::new();
302288
let router = NullRouter {};
303-
let network_graph = NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash());
304-
let invoice_payer = InvoicePayer::new(&payer, router, &network_graph);
289+
let invoice_payer = InvoicePayer::new(&payer, router);
305290

306291
let logger = TestLogger::new();
307292
let event_handled = core::cell::RefCell::new(false);
@@ -322,8 +307,7 @@ mod tests {
322307
fn pays_invoice_on_retry() {
323308
let payer = TestPayer::new();
324309
let router = NullRouter {};
325-
let network_graph = NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash());
326-
let invoice_payer = InvoicePayer::new(&payer, router, &network_graph);
310+
let invoice_payer = InvoicePayer::new(&payer, router);
327311

328312
let logger = TestLogger::new();
329313
let event_handled = core::cell::RefCell::new(false);
@@ -349,8 +333,7 @@ mod tests {
349333
fn fails_paying_invoice_after_max_retries() {
350334
let payer = TestPayer::new();
351335
let router = NullRouter {};
352-
let network_graph = NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash());
353-
let invoice_payer = InvoicePayer::new(&payer, router, &network_graph);
336+
let invoice_payer = InvoicePayer::new(&payer, router);
354337

355338
let logger = TestLogger::new();
356339
let event_handled = core::cell::RefCell::new(false);
@@ -380,8 +363,7 @@ mod tests {
380363
fn fails_paying_invoice_after_retry_error() {
381364
let payer = TestPayer::new().fails_on_attempt(2);
382365
let router = NullRouter {};
383-
let network_graph = NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash());
384-
let invoice_payer = InvoicePayer::new(&payer, router, &network_graph);
366+
let invoice_payer = InvoicePayer::new(&payer, router);
385367

386368
let logger = TestLogger::new();
387369
let event_handled = core::cell::RefCell::new(false);
@@ -403,8 +385,7 @@ mod tests {
403385
fn fails_paying_invoice_after_rejected_by_payee() {
404386
let payer = TestPayer::new();
405387
let router = NullRouter {};
406-
let network_graph = NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash());
407-
let invoice_payer = InvoicePayer::new(&payer, router, &network_graph);
388+
let invoice_payer = InvoicePayer::new(&payer, router);
408389

409390
let logger = TestLogger::new();
410391
let event_handled = core::cell::RefCell::new(false);
@@ -426,8 +407,7 @@ mod tests {
426407
fn fails_repaying_invoice_with_pending_payment() {
427408
let payer = TestPayer::new();
428409
let router = NullRouter {};
429-
let network_graph = NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash());
430-
let invoice_payer = InvoicePayer::new(&payer, router, &network_graph);
410+
let invoice_payer = InvoicePayer::new(&payer, router);
431411

432412
let logger = TestLogger::new();
433413
let event_handled = core::cell::RefCell::new(false);
@@ -460,8 +440,7 @@ mod tests {
460440
fn fails_paying_invoice_with_routing_errors() {
461441
let payer = TestPayer::new();
462442
let router = FailingRouter {};
463-
let network_graph = NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash());
464-
let invoice_payer = InvoicePayer::new(&payer, router, &network_graph);
443+
let invoice_payer = InvoicePayer::new(&payer, router);
465444

466445
let payment_preimage = PaymentPreimage([1; 32]);
467446
let invoice = invoice(payment_preimage);
@@ -476,8 +455,7 @@ mod tests {
476455
fn fails_paying_invoice_with_sending_errors() {
477456
let payer = TestPayer::new().fails_on_attempt(1);
478457
let router = NullRouter {};
479-
let network_graph = NetworkGraph::new(genesis_block(Network::Testnet).header.block_hash());
480-
let invoice_payer = InvoicePayer::new(&payer, router, &network_graph);
458+
let invoice_payer = InvoicePayer::new(&payer, router);
481459

482460
let payment_preimage = PaymentPreimage([1; 32]);
483461
let invoice = invoice(payment_preimage);
@@ -494,7 +472,6 @@ mod tests {
494472
fn find_route(
495473
&self,
496474
_payer: &PublicKey,
497-
_network: &NetworkGraph,
498475
_payee: &PublicKey,
499476
_payee_features: Option<InvoiceFeatures>,
500477
_first_hops: Option<&[&ChannelDetails]>,
@@ -512,7 +489,6 @@ mod tests {
512489
fn find_route(
513490
&self,
514491
_payer: &PublicKey,
515-
_network: &NetworkGraph,
516492
_payee: &PublicKey,
517493
_payee_features: Option<InvoiceFeatures>,
518494
_first_hops: Option<&[&ChannelDetails]>,

0 commit comments

Comments
 (0)