Skip to content

Commit 810e594

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 a5dd1a3 commit 810e594

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

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

336334
match send_payment(&route) {
@@ -390,7 +388,10 @@ where
390388

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

11531154
impl<S: routing::Score> Router<S> for TestRouter {
11541155
fn find_route(
1155-
&self,
1156-
_payer: &PublicKey,
1157-
params: &RouteParameters,
1158-
_first_hops: Option<&[&ChannelDetails]>,
1159-
_scorer: &S,
1156+
&self, _payer: &PublicKey, params: &RouteParameters, _payment_hash: &PaymentHash,
1157+
_first_hops: Option<&[&ChannelDetails]>, _scorer: &S
11601158
) -> Result<Route, LightningError> {
11611159
Ok(Route {
11621160
payee: Some(params.payee.clone()), ..Self::route_for_value(params.final_value_msat)
@@ -1168,11 +1166,8 @@ mod tests {
11681166

11691167
impl<S: routing::Score> Router<S> for FailingRouter {
11701168
fn find_route(
1171-
&self,
1172-
_payer: &PublicKey,
1173-
_params: &RouteParameters,
1174-
_first_hops: Option<&[&ChannelDetails]>,
1175-
_scorer: &S,
1169+
&self, _payer: &PublicKey, _params: &RouteParameters, _payment_hash: &PaymentHash,
1170+
_first_hops: Option<&[&ChannelDetails]>, _scorer: &S
11761171
) -> Result<Route, LightningError> {
11771172
Err(LightningError { err: String::new(), action: ErrorAction::IgnoreError })
11781173
}
@@ -1337,8 +1332,10 @@ mod tests {
13371332
struct ManualRouter(RefCell<VecDeque<Result<Route, LightningError>>>);
13381333

13391334
impl<S: routing::Score> Router<S> for ManualRouter {
1340-
fn find_route(&self, _payer: &PublicKey, _params: &RouteParameters, _first_hops: Option<&[&ChannelDetails]>, _scorer: &S)
1341-
-> Result<Route, LightningError> {
1335+
fn find_route(
1336+
&self, _payer: &PublicKey, _params: &RouteParameters, _payment_hash: &PaymentHash,
1337+
_first_hops: Option<&[&ChannelDetails]>, _scorer: &S
1338+
) -> Result<Route, LightningError> {
13421339
self.0.borrow_mut().pop_front().unwrap()
13431340
}
13441341
}

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)