Skip to content

Commit 62950f2

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 516bb4f commit 62950f2

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
//! # }
@@ -179,8 +179,8 @@ pub trait Payer {
179179
pub trait Router<S: routing::Score> {
180180
/// Finds a [`Route`] between `payer` and `payee` for a payment with the given values.
181181
fn find_route(
182-
&self, payer: &PublicKey, params: &RouteParameters, first_hops: Option<&[&ChannelDetails]>,
183-
scorer: &S
182+
&self, payer: &PublicKey, params: &RouteParameters, payment_hash: &PaymentHash,
183+
first_hops: Option<&[&ChannelDetails]>, scorer: &S
184184
) -> Result<Route, LightningError>;
185185
}
186186

@@ -328,10 +328,8 @@ where
328328
let payer = self.payer.node_id();
329329
let first_hops = self.payer.first_hops();
330330
let route = self.router.find_route(
331-
&payer,
332-
params,
333-
Some(&first_hops.iter().collect::<Vec<_>>()),
334-
&self.scorer.lock(),
331+
&payer, params, &payment_hash, Some(&first_hops.iter().collect::<Vec<_>>()),
332+
&self.scorer.lock()
335333
).map_err(|e| PaymentError::Routing(e))?;
336334

337335
match send_payment(&route) {
@@ -391,7 +389,10 @@ where
391389

392390
let payer = self.payer.node_id();
393391
let first_hops = self.payer.first_hops();
394-
let route = self.router.find_route(&payer, &params, Some(&first_hops.iter().collect::<Vec<_>>()), &self.scorer.lock());
392+
let route = self.router.find_route(
393+
&payer, &params, &payment_hash, Some(&first_hops.iter().collect::<Vec<_>>()),
394+
&self.scorer.lock()
395+
);
395396
if route.is_err() {
396397
log_trace!(self.logger, "Failed to find a route for payment {}; not retrying (attempts: {})", log_bytes!(payment_hash.0), attempts);
397398
return Err(());
@@ -1186,11 +1187,8 @@ mod tests {
11861187

11871188
impl<S: routing::Score> Router<S> for TestRouter {
11881189
fn find_route(
1189-
&self,
1190-
_payer: &PublicKey,
1191-
params: &RouteParameters,
1192-
_first_hops: Option<&[&ChannelDetails]>,
1193-
_scorer: &S,
1190+
&self, _payer: &PublicKey, params: &RouteParameters, _payment_hash: &PaymentHash,
1191+
_first_hops: Option<&[&ChannelDetails]>, _scorer: &S
11941192
) -> Result<Route, LightningError> {
11951193
Ok(Route {
11961194
payee: Some(params.payee.clone()), ..Self::route_for_value(params.final_value_msat)
@@ -1202,11 +1200,8 @@ mod tests {
12021200

12031201
impl<S: routing::Score> Router<S> for FailingRouter {
12041202
fn find_route(
1205-
&self,
1206-
_payer: &PublicKey,
1207-
_params: &RouteParameters,
1208-
_first_hops: Option<&[&ChannelDetails]>,
1209-
_scorer: &S,
1203+
&self, _payer: &PublicKey, _params: &RouteParameters, _payment_hash: &PaymentHash,
1204+
_first_hops: Option<&[&ChannelDetails]>, _scorer: &S
12101205
) -> Result<Route, LightningError> {
12111206
Err(LightningError { err: String::new(), action: ErrorAction::IgnoreError })
12121207
}
@@ -1369,8 +1364,10 @@ mod tests {
13691364
struct ManualRouter(RefCell<VecDeque<Result<Route, LightningError>>>);
13701365

13711366
impl<S: routing::Score> Router<S> for ManualRouter {
1372-
fn find_route(&self, _payer: &PublicKey, _params: &RouteParameters, _first_hops: Option<&[&ChannelDetails]>, _scorer: &S)
1373-
-> Result<Route, LightningError> {
1367+
fn find_route(
1368+
&self, _payer: &PublicKey, _params: &RouteParameters, _payment_hash: &PaymentHash,
1369+
_first_hops: Option<&[&ChannelDetails]>, _scorer: &S
1370+
) -> Result<Route, LightningError> {
13741371
self.0.borrow_mut().pop_front().unwrap()
13751372
}
13761373
}

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)