Skip to content

Commit 503f82f

Browse files
committed
Add PaymentHash parameter to Router::find_route
Implementations of Router may need the payment hash in order to look up pre-computed routes from a probe for a given payment. Add a PaymentHash parameter to Router::find_route to allow for this.
1 parent 94e264d commit 503f82f

File tree

2 files changed

+19
-22
lines changed

2 files changed

+19
-22
lines changed

lightning-invoice/src/payment.rs

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
//! # struct FakeRouter {};
6565
//! # impl<S: routing::Score> Router<S> for FakeRouter {
6666
//! # fn find_route(
67-
//! # &self, payer: &PublicKey, params: &RouteParameters,
67+
//! # &self, payer: &PublicKey, params: &RouteParameters, payment_hash: &PaymentHash,
6868
//! # first_hops: Option<&[&ChannelDetails]>, scorer: &S
6969
//! # ) -> Result<Route, LightningError> { unimplemented!() }
7070
//! # }
@@ -178,8 +178,8 @@ pub trait Payer {
178178
pub trait Router<S: routing::Score> {
179179
/// Finds a [`Route`] between `payer` and `payee` for a payment with the given values.
180180
fn find_route(
181-
&self, payer: &PublicKey, params: &RouteParameters, first_hops: Option<&[&ChannelDetails]>,
182-
scorer: &S
181+
&self, payer: &PublicKey, params: &RouteParameters, payment_hash: &PaymentHash,
182+
first_hops: Option<&[&ChannelDetails]>, scorer: &S
183183
) -> Result<Route, LightningError>;
184184
}
185185

@@ -326,10 +326,8 @@ where
326326
let payer = self.payer.node_id();
327327
let first_hops = self.payer.first_hops();
328328
let route = self.router.find_route(
329-
&payer,
330-
params,
331-
Some(&first_hops.iter().collect::<Vec<_>>()),
332-
&self.scorer.lock(),
329+
&payer, params, &payment_hash, Some(&first_hops.iter().collect::<Vec<_>>()),
330+
&self.scorer.lock()
333331
).map_err(|e| PaymentError::Routing(e))?;
334332

335333
match send_payment(&route) {
@@ -389,7 +387,10 @@ where
389387

390388
let payer = self.payer.node_id();
391389
let first_hops = self.payer.first_hops();
392-
let route = self.router.find_route(&payer, &params, Some(&first_hops.iter().collect::<Vec<_>>()), &self.scorer.lock());
390+
let route = self.router.find_route(
391+
&payer, &params, &payment_hash, Some(&first_hops.iter().collect::<Vec<_>>()),
392+
&self.scorer.lock()
393+
);
393394
if route.is_err() {
394395
log_trace!(self.logger, "Failed to find a route for payment {}; not retrying (attempts: {})", log_bytes!(payment_hash.0), attempts);
395396
return Err(());
@@ -1149,11 +1150,8 @@ mod tests {
11491150

11501151
impl<S: routing::Score> Router<S> for TestRouter {
11511152
fn find_route(
1152-
&self,
1153-
_payer: &PublicKey,
1154-
params: &RouteParameters,
1155-
_first_hops: Option<&[&ChannelDetails]>,
1156-
_scorer: &S,
1153+
&self, _payer: &PublicKey, params: &RouteParameters, _payment_hash: &PaymentHash,
1154+
_first_hops: Option<&[&ChannelDetails]>, _scorer: &S
11571155
) -> Result<Route, LightningError> {
11581156
Ok(Route {
11591157
payee: Some(params.payee.clone()), ..Self::route_for_value(params.final_value_msat)
@@ -1165,11 +1163,8 @@ mod tests {
11651163

11661164
impl<S: routing::Score> Router<S> for FailingRouter {
11671165
fn find_route(
1168-
&self,
1169-
_payer: &PublicKey,
1170-
_params: &RouteParameters,
1171-
_first_hops: Option<&[&ChannelDetails]>,
1172-
_scorer: &S,
1166+
&self, _payer: &PublicKey, _params: &RouteParameters, _payment_hash: &PaymentHash,
1167+
_first_hops: Option<&[&ChannelDetails]>, _scorer: &S
11731168
) -> Result<Route, LightningError> {
11741169
Err(LightningError { err: String::new(), action: ErrorAction::IgnoreError })
11751170
}
@@ -1334,8 +1329,10 @@ mod tests {
13341329
struct ManualRouter(RefCell<VecDeque<Result<Route, LightningError>>>);
13351330

13361331
impl<S: routing::Score> Router<S> for ManualRouter {
1337-
fn find_route(&self, _payer: &PublicKey, _params: &RouteParameters, _first_hops: Option<&[&ChannelDetails]>, _scorer: &S)
1338-
-> Result<Route, LightningError> {
1332+
fn find_route(
1333+
&self, _payer: &PublicKey, _params: &RouteParameters, _payment_hash: &PaymentHash,
1334+
_first_hops: Option<&[&ChannelDetails]>, _scorer: &S
1335+
) -> Result<Route, LightningError> {
13391336
self.0.borrow_mut().pop_front().unwrap()
13401337
}
13411338
}

lightning-invoice/src/utils.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ impl<G, L: Deref> DefaultRouter<G, L> where G: Deref<Target = NetworkGraph>, L::
112112
impl<G, L: Deref, S: routing::Score> Router<S> for DefaultRouter<G, L>
113113
where G: Deref<Target = NetworkGraph>, L::Target: Logger {
114114
fn find_route(
115-
&self, payer: &PublicKey, params: &RouteParameters, first_hops: Option<&[&ChannelDetails]>,
116-
scorer: &S
115+
&self, payer: &PublicKey, params: &RouteParameters, _payment_hash: &PaymentHash,
116+
first_hops: Option<&[&ChannelDetails]>, scorer: &S
117117
) -> Result<Route, LightningError> {
118118
find_route(payer, params, &*self.network_graph, first_hops, &*self.logger, scorer)
119119
}

0 commit comments

Comments
 (0)