@@ -408,7 +408,7 @@ impl OutboundPayments {
408
408
SP : Fn ( & Vec < RouteHop > , & Option < PaymentParameters > , & PaymentHash , & Option < PaymentSecret > , u64 ,
409
409
u32 , PaymentId , & Option < PaymentPreimage > , [ u8 ; 32 ] ) -> Result < ( ) , APIError > ,
410
410
{
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) ) ,
412
412
route_params, router, first_hops, & compute_inflight_htlcs, entropy_source, node_signer,
413
413
best_block_height, logger, & send_payment_along_path)
414
414
. map_err ( |e| { self . remove_outbound_if_all_failed ( payment_id, & e) ; e } )
@@ -449,7 +449,7 @@ impl OutboundPayments {
449
449
let preimage = payment_preimage
450
450
. unwrap_or_else ( || PaymentPreimage ( entropy_source. get_secure_random_bytes ( ) ) ) ;
451
451
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) ) ,
453
453
route_params, router, first_hops, & inflight_htlcs, entropy_source, node_signer,
454
454
best_block_height, logger, & send_payment_along_path)
455
455
. map ( |( ) | payment_hash)
@@ -501,9 +501,9 @@ impl OutboundPayments {
501
501
let mut retry_id_route_params = None ;
502
502
for ( pmt_id, pmt) in outbounds. iter_mut ( ) {
503
503
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 {
505
505
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 {
507
507
final_value_msat : * total_msat - * pending_amt_msat,
508
508
final_cltv_expiry_delta :
509
509
if let Some ( delta) = params. final_cltv_expiry_delta { delta }
@@ -519,8 +519,8 @@ impl OutboundPayments {
519
519
}
520
520
}
521
521
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) {
524
524
log_info ! ( logger, "Errored retrying payment: {:?}" , e) ;
525
525
// If we error on retry, there is no chance of the payment succeeding and no HTLCs have
526
526
// been irrevocably committed to, so we can safely abandon.
@@ -553,8 +553,8 @@ impl OutboundPayments {
553
553
554
554
/// Will return `Ok(())` iff at least one HTLC is sent for the payment.
555
555
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 ) > ,
558
558
route_params : RouteParameters , router : & R , first_hops : Vec < ChannelDetails > ,
559
559
inflight_htlcs : & IH , entropy_source : & ES , node_signer : & NS , best_block_height : u32 ,
560
560
logger : & L , send_payment_along_path : & SP ,
@@ -583,15 +583,15 @@ impl OutboundPayments {
583
583
err : format ! ( "Failed to find a route for payment {}: {:?}" , log_bytes!( payment_id. 0 ) , e) , // TODO: add APIError::RouteNotFound
584
584
} ) ) ?;
585
585
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 {
587
587
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) ?;
588
588
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)
589
589
} else {
590
590
self . retry_payment_with_route ( & route, payment_id, entropy_source, node_signer, best_block_height, send_payment_along_path)
591
591
} ;
592
592
match res {
593
593
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) ;
595
595
log_info ! ( logger, "Result retrying payment id {}: {:?}" , log_bytes!( payment_id. 0 ) , retry_res) ;
596
596
if let Err ( PaymentSendFailure :: ParameterError ( APIError :: APIMisuseError { err } ) ) = & retry_res {
597
597
if err. starts_with ( "Retries exhausted " ) { return res; }
@@ -602,7 +602,7 @@ impl OutboundPayments {
602
602
// Some paths were sent, even if we failed to send the full MPP value our recipient may
603
603
// misbehave and claim the funds, at which point we have to consider the payment sent, so
604
604
// 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) ;
606
606
log_info ! ( logger, "Result retrying payment id {}: {:?}" , log_bytes!( payment_id. 0 ) , retry_res) ;
607
607
Ok ( ( ) )
608
608
} ,
@@ -1279,8 +1279,9 @@ mod tests {
1279
1279
} ;
1280
1280
let err = if on_retry {
1281
1281
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 ( )
1284
1285
} else {
1285
1286
outbound_payments. send_payment (
1286
1287
PaymentHash ( [ 0 ; 32 ] ) , & None , PaymentId ( [ 0 ; 32 ] ) , Retry :: Attempts ( 0 ) , expired_route_params,
@@ -1322,8 +1323,9 @@ mod tests {
1322
1323
& Route { paths : vec ! [ ] , payment_params : None } , Some ( Retry :: Attempts ( 1 ) ) ,
1323
1324
Some ( route_params. payment_params . clone ( ) ) , & & keys_manager, 0 ) . unwrap ( ) ;
1324
1325
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 ( )
1327
1329
} else {
1328
1330
outbound_payments. send_payment (
1329
1331
PaymentHash ( [ 0 ; 32 ] ) , & None , PaymentId ( [ 0 ; 32 ] ) , Retry :: Attempts ( 0 ) , route_params,
0 commit comments