Skip to content

Commit cb81d27

Browse files
Pass payment hash into pay_internal
Useful for generating Payment(Path)Failed events in this method
1 parent 558b2f2 commit cb81d27

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

lightning/src/ln/outbound_payment.rs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ impl OutboundPayments {
408408
SP: Fn(&Vec<RouteHop>, &Option<PaymentParameters>, &PaymentHash, &Option<PaymentSecret>, u64,
409409
u32, PaymentId, &Option<PaymentPreimage>, [u8; 32]) -> Result<(), APIError>,
410410
{
411-
self.pay_internal(payment_id, Some((payment_hash, payment_secret, None, retry_strategy)),
411+
self.pay_internal(payment_id, payment_hash, Some((payment_secret, None, retry_strategy)),
412412
route_params, router, first_hops, &compute_inflight_htlcs, entropy_source, node_signer,
413413
best_block_height, logger, &send_payment_along_path)
414414
.map_err(|e| { self.remove_outbound_if_all_failed(payment_id, &e); e })
@@ -449,7 +449,7 @@ impl OutboundPayments {
449449
let preimage = payment_preimage
450450
.unwrap_or_else(|| PaymentPreimage(entropy_source.get_secure_random_bytes()));
451451
let payment_hash = PaymentHash(Sha256::hash(&preimage.0).into_inner());
452-
self.pay_internal(payment_id, Some((payment_hash, &None, Some(preimage), retry_strategy)),
452+
self.pay_internal(payment_id, payment_hash, Some((&None, Some(preimage), retry_strategy)),
453453
route_params, router, first_hops, &inflight_htlcs, entropy_source, node_signer,
454454
best_block_height, logger, &send_payment_along_path)
455455
.map(|()| payment_hash)
@@ -501,9 +501,9 @@ impl OutboundPayments {
501501
let mut retry_id_route_params = None;
502502
for (pmt_id, pmt) in outbounds.iter_mut() {
503503
if pmt.is_auto_retryable_now() {
504-
if let PendingOutboundPayment::Retryable { pending_amt_msat, total_msat, payment_params: Some(params), .. } = pmt {
504+
if let PendingOutboundPayment::Retryable { payment_hash, pending_amt_msat, total_msat, payment_params: Some(params), .. } = pmt {
505505
if pending_amt_msat < total_msat {
506-
retry_id_route_params = Some((*pmt_id, RouteParameters {
506+
retry_id_route_params = Some((*pmt_id, *payment_hash, RouteParameters {
507507
final_value_msat: *total_msat - *pending_amt_msat,
508508
final_cltv_expiry_delta:
509509
if let Some(delta) = params.final_cltv_expiry_delta { delta }
@@ -519,8 +519,8 @@ impl OutboundPayments {
519519
}
520520
}
521521
core::mem::drop(outbounds);
522-
if let Some((payment_id, route_params)) = retry_id_route_params {
523-
if let Err(e) = self.pay_internal(payment_id, None, route_params, router, first_hops(), &inflight_htlcs, entropy_source, node_signer, best_block_height, logger, &send_payment_along_path) {
522+
if let Some((payment_id, payment_hash, route_params)) = retry_id_route_params {
523+
if let Err(e) = self.pay_internal(payment_id, payment_hash, None, route_params, router, first_hops(), &inflight_htlcs, entropy_source, node_signer, best_block_height, logger, &send_payment_along_path) {
524524
log_info!(logger, "Errored retrying payment: {:?}", e);
525525
// If we error on retry, there is no chance of the payment succeeding and no HTLCs have
526526
// been irrevocably committed to, so we can safely abandon.
@@ -553,8 +553,8 @@ impl OutboundPayments {
553553

554554
/// Will return `Ok(())` iff at least one HTLC is sent for the payment.
555555
fn pay_internal<R: Deref, NS: Deref, ES: Deref, IH, SP, L: Deref>(
556-
&self, payment_id: PaymentId,
557-
initial_send_info: Option<(PaymentHash, &Option<PaymentSecret>, Option<PaymentPreimage>, Retry)>,
556+
&self, payment_id: PaymentId, payment_hash: PaymentHash,
557+
initial_send_info: Option<(&Option<PaymentSecret>, Option<PaymentPreimage>, Retry)>,
558558
route_params: RouteParameters, router: &R, first_hops: Vec<ChannelDetails>,
559559
inflight_htlcs: &IH, entropy_source: &ES, node_signer: &NS, best_block_height: u32,
560560
logger: &L, send_payment_along_path: &SP,
@@ -583,15 +583,15 @@ impl OutboundPayments {
583583
err: format!("Failed to find a route for payment {}: {:?}", log_bytes!(payment_id.0), e), // TODO: add APIError::RouteNotFound
584584
}))?;
585585

586-
let res = if let Some((payment_hash, payment_secret, keysend_preimage, retry_strategy)) = initial_send_info {
586+
let res = if let Some((payment_secret, keysend_preimage, retry_strategy)) = initial_send_info {
587587
let onion_session_privs = self.add_new_pending_payment(payment_hash, *payment_secret, payment_id, keysend_preimage, &route, Some(retry_strategy), Some(route_params.payment_params.clone()), entropy_source, best_block_height)?;
588588
self.pay_route_internal(&route, payment_hash, payment_secret, None, payment_id, None, onion_session_privs, node_signer, best_block_height, send_payment_along_path)
589589
} else {
590590
self.retry_payment_with_route(&route, payment_id, entropy_source, node_signer, best_block_height, send_payment_along_path)
591591
};
592592
match res {
593593
Err(PaymentSendFailure::AllFailedResendSafe(_)) => {
594-
let retry_res = self.pay_internal(payment_id, None, route_params, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, logger, send_payment_along_path);
594+
let retry_res = self.pay_internal(payment_id, payment_hash, None, route_params, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, logger, send_payment_along_path);
595595
log_info!(logger, "Result retrying payment id {}: {:?}", log_bytes!(payment_id.0), retry_res);
596596
if let Err(PaymentSendFailure::ParameterError(APIError::APIMisuseError { err })) = &retry_res {
597597
if err.starts_with("Retries exhausted ") { return res; }
@@ -602,7 +602,7 @@ impl OutboundPayments {
602602
// Some paths were sent, even if we failed to send the full MPP value our recipient may
603603
// misbehave and claim the funds, at which point we have to consider the payment sent, so
604604
// return `Ok()` here, ignoring any retry errors.
605-
let retry_res = self.pay_internal(payment_id, None, retry, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, logger, send_payment_along_path);
605+
let retry_res = self.pay_internal(payment_id, payment_hash, None, retry, router, first_hops, inflight_htlcs, entropy_source, node_signer, best_block_height, logger, send_payment_along_path);
606606
log_info!(logger, "Result retrying payment id {}: {:?}", log_bytes!(payment_id.0), retry_res);
607607
Ok(())
608608
},
@@ -1279,8 +1279,9 @@ mod tests {
12791279
};
12801280
let err = if on_retry {
12811281
outbound_payments.pay_internal(
1282-
PaymentId([0; 32]), None, expired_route_params, &&router, vec![], &|| InFlightHtlcs::new(),
1283-
&&keys_manager, &&keys_manager, 0, &&logger, &|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
1282+
PaymentId([0; 32]), PaymentHash([0; 32]), None, expired_route_params, &&router, vec![],
1283+
&|| InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, &&logger,
1284+
&|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
12841285
} else {
12851286
outbound_payments.send_payment(
12861287
PaymentHash([0; 32]), &None, PaymentId([0; 32]), Retry::Attempts(0), expired_route_params,
@@ -1322,8 +1323,9 @@ mod tests {
13221323
&Route { paths: vec![], payment_params: None }, Some(Retry::Attempts(1)),
13231324
Some(route_params.payment_params.clone()), &&keys_manager, 0).unwrap();
13241325
outbound_payments.pay_internal(
1325-
PaymentId([0; 32]), None, route_params, &&router, vec![], &|| InFlightHtlcs::new(),
1326-
&&keys_manager, &&keys_manager, 0, &&logger, &|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
1326+
PaymentId([0; 32]), PaymentHash([0; 32]), None, route_params, &&router, vec![],
1327+
&|| InFlightHtlcs::new(), &&keys_manager, &&keys_manager, 0, &&logger,
1328+
&|_, _, _, _, _, _, _, _, _| Ok(())).unwrap_err()
13271329
} else {
13281330
outbound_payments.send_payment(
13291331
PaymentHash([0; 32]), &None, PaymentId([0; 32]), Retry::Attempts(0), route_params,

0 commit comments

Comments
 (0)