@@ -83,6 +83,7 @@ pub(crate) enum PendingOutboundPayment {
8383 keysend_preimage : PaymentPreimage ,
8484 retry_strategy : Retry ,
8585 route_params : RouteParameters ,
86+ invoice_request : InvoiceRequest ,
8687 } ,
8788 Retryable {
8889 retry_strategy : Option < Retry > ,
@@ -1004,7 +1005,7 @@ impl OutboundPayments {
10041005 }
10051006
10061007 match self . pending_outbound_payments . lock ( ) . unwrap ( ) . entry ( payment_id) {
1007- hash_map:: Entry :: Occupied ( mut entry) => match entry. get ( ) {
1008+ hash_map:: Entry :: Occupied ( mut entry) => match entry. get_mut ( ) {
10081009 PendingOutboundPayment :: AwaitingInvoice {
10091010 retry_strategy, retryable_invoice_request, max_total_routing_fee_msat, ..
10101011 } => {
@@ -1048,6 +1049,11 @@ impl OutboundPayments {
10481049 keysend_preimage,
10491050 retry_strategy : * retry_strategy,
10501051 route_params,
1052+ invoice_request :
1053+ retryable_invoice_request
1054+ . take ( )
1055+ . ok_or ( Bolt12PaymentError :: UnexpectedInvoice ) ?
1056+ . invoice_request ,
10511057 } ;
10521058 return Ok ( ( ) )
10531059 } ,
@@ -2256,6 +2262,7 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
22562262 ( 2 , keysend_preimage, required) ,
22572263 ( 4 , retry_strategy, required) ,
22582264 ( 6 , route_params, required) ,
2265+ ( 8 , invoice_request, required) ,
22592266 } ,
22602267) ;
22612268
@@ -2270,15 +2277,19 @@ mod tests {
22702277 use crate :: events:: { Event , PathFailure , PaymentFailureReason } ;
22712278 use crate :: types:: payment:: { PaymentHash , PaymentPreimage } ;
22722279 use crate :: ln:: channelmanager:: { PaymentId , RecipientOnionFields } ;
2280+ use crate :: ln:: inbound_payment:: ExpandedKey ;
22732281 use crate :: types:: features:: { Bolt12InvoiceFeatures , ChannelFeatures , NodeFeatures } ;
22742282 use crate :: ln:: msgs:: { ErrorAction , LightningError } ;
22752283 use crate :: ln:: outbound_payment:: { Bolt12PaymentError , OutboundPayments , PendingOutboundPayment , Retry , RetryableSendFailure , StaleExpiration } ;
22762284 #[ cfg( feature = "std" ) ]
22772285 use crate :: offers:: invoice:: DEFAULT_RELATIVE_EXPIRY ;
2286+ use crate :: offers:: invoice_request:: InvoiceRequest ;
2287+ use crate :: offers:: nonce:: Nonce ;
22782288 use crate :: offers:: offer:: OfferBuilder ;
22792289 use crate :: offers:: test_utils:: * ;
22802290 use crate :: routing:: gossip:: NetworkGraph ;
22812291 use crate :: routing:: router:: { InFlightHtlcs , Path , PaymentParameters , Route , RouteHop , RouteParameters } ;
2292+ use crate :: sign:: KeyMaterial ;
22822293 use crate :: sync:: { Arc , Mutex , RwLock } ;
22832294 use crate :: util:: errors:: APIError ;
22842295 use crate :: util:: hash_tables:: new_hash_map;
@@ -2823,6 +2834,22 @@ mod tests {
28232834 assert ! ( pending_events. lock( ) . unwrap( ) . is_empty( ) ) ;
28242835 }
28252836
2837+ fn dummy_invoice_request ( ) -> InvoiceRequest {
2838+ let expanded_key = ExpandedKey :: new ( & KeyMaterial ( [ 42 ; 32 ] ) ) ;
2839+ let entropy = FixedEntropy { } ;
2840+ let nonce = Nonce :: from_entropy_source ( & entropy) ;
2841+ let secp_ctx = Secp256k1 :: new ( ) ;
2842+ let payment_id = PaymentId ( [ 1 ; 32 ] ) ;
2843+
2844+ OfferBuilder :: new ( recipient_pubkey ( ) )
2845+ . amount_msats ( 1000 )
2846+ . build ( ) . unwrap ( )
2847+ . request_invoice_deriving_signing_pubkey ( & expanded_key, nonce, & secp_ctx, payment_id)
2848+ . unwrap ( )
2849+ . build_and_sign ( )
2850+ . unwrap ( )
2851+ }
2852+
28262853 #[ test]
28272854 fn time_out_unreleased_async_payments ( ) {
28282855 let pending_events = Mutex :: new ( VecDeque :: new ( ) ) ;
@@ -2844,6 +2871,7 @@ mod tests {
28442871 keysend_preimage : PaymentPreimage ( [ 0 ; 32 ] ) ,
28452872 retry_strategy : Retry :: Attempts ( 0 ) ,
28462873 route_params,
2874+ invoice_request : dummy_invoice_request ( ) ,
28472875 } ;
28482876 outbounds. insert ( payment_id, outbound) ;
28492877 core:: mem:: drop ( outbounds) ;
@@ -2890,6 +2918,7 @@ mod tests {
28902918 keysend_preimage : PaymentPreimage ( [ 0 ; 32 ] ) ,
28912919 retry_strategy : Retry :: Attempts ( 0 ) ,
28922920 route_params,
2921+ invoice_request : dummy_invoice_request ( ) ,
28932922 } ;
28942923 outbounds. insert ( payment_id, outbound) ;
28952924 core:: mem:: drop ( outbounds) ;
0 commit comments