@@ -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