@@ -83,6 +83,7 @@ pub(crate) enum PendingOutboundPayment {
83
83
keysend_preimage : PaymentPreimage ,
84
84
retry_strategy : Retry ,
85
85
route_params : RouteParameters ,
86
+ invoice_request : InvoiceRequest ,
86
87
} ,
87
88
Retryable {
88
89
retry_strategy : Option < Retry > ,
@@ -1004,7 +1005,7 @@ impl OutboundPayments {
1004
1005
}
1005
1006
1006
1007
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 ( ) {
1008
1009
PendingOutboundPayment :: AwaitingInvoice {
1009
1010
retry_strategy, retryable_invoice_request, max_total_routing_fee_msat, ..
1010
1011
} => {
@@ -1048,6 +1049,11 @@ impl OutboundPayments {
1048
1049
keysend_preimage,
1049
1050
retry_strategy : * retry_strategy,
1050
1051
route_params,
1052
+ invoice_request :
1053
+ retryable_invoice_request
1054
+ . take ( )
1055
+ . ok_or ( Bolt12PaymentError :: UnexpectedInvoice ) ?
1056
+ . invoice_request ,
1051
1057
} ;
1052
1058
return Ok ( ( ) )
1053
1059
} ,
@@ -2256,6 +2262,7 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
2256
2262
( 2 , keysend_preimage, required) ,
2257
2263
( 4 , retry_strategy, required) ,
2258
2264
( 6 , route_params, required) ,
2265
+ ( 8 , invoice_request, required) ,
2259
2266
} ,
2260
2267
) ;
2261
2268
@@ -2270,15 +2277,19 @@ mod tests {
2270
2277
use crate :: events:: { Event , PathFailure , PaymentFailureReason } ;
2271
2278
use crate :: types:: payment:: { PaymentHash , PaymentPreimage } ;
2272
2279
use crate :: ln:: channelmanager:: { PaymentId , RecipientOnionFields } ;
2280
+ use crate :: ln:: inbound_payment:: ExpandedKey ;
2273
2281
use crate :: types:: features:: { Bolt12InvoiceFeatures , ChannelFeatures , NodeFeatures } ;
2274
2282
use crate :: ln:: msgs:: { ErrorAction , LightningError } ;
2275
2283
use crate :: ln:: outbound_payment:: { Bolt12PaymentError , OutboundPayments , PendingOutboundPayment , Retry , RetryableSendFailure , StaleExpiration } ;
2276
2284
#[ cfg( feature = "std" ) ]
2277
2285
use crate :: offers:: invoice:: DEFAULT_RELATIVE_EXPIRY ;
2286
+ use crate :: offers:: invoice_request:: InvoiceRequest ;
2287
+ use crate :: offers:: nonce:: Nonce ;
2278
2288
use crate :: offers:: offer:: OfferBuilder ;
2279
2289
use crate :: offers:: test_utils:: * ;
2280
2290
use crate :: routing:: gossip:: NetworkGraph ;
2281
2291
use crate :: routing:: router:: { InFlightHtlcs , Path , PaymentParameters , Route , RouteHop , RouteParameters } ;
2292
+ use crate :: sign:: KeyMaterial ;
2282
2293
use crate :: sync:: { Arc , Mutex , RwLock } ;
2283
2294
use crate :: util:: errors:: APIError ;
2284
2295
use crate :: util:: hash_tables:: new_hash_map;
@@ -2823,6 +2834,22 @@ mod tests {
2823
2834
assert ! ( pending_events. lock( ) . unwrap( ) . is_empty( ) ) ;
2824
2835
}
2825
2836
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
+
2826
2853
#[ test]
2827
2854
fn time_out_unreleased_async_payments ( ) {
2828
2855
let pending_events = Mutex :: new ( VecDeque :: new ( ) ) ;
@@ -2844,6 +2871,7 @@ mod tests {
2844
2871
keysend_preimage : PaymentPreimage ( [ 0 ; 32 ] ) ,
2845
2872
retry_strategy : Retry :: Attempts ( 0 ) ,
2846
2873
route_params,
2874
+ invoice_request : dummy_invoice_request ( ) ,
2847
2875
} ;
2848
2876
outbounds. insert ( payment_id, outbound) ;
2849
2877
core:: mem:: drop ( outbounds) ;
@@ -2890,6 +2918,7 @@ mod tests {
2890
2918
keysend_preimage : PaymentPreimage ( [ 0 ; 32 ] ) ,
2891
2919
retry_strategy : Retry :: Attempts ( 0 ) ,
2892
2920
route_params,
2921
+ invoice_request : dummy_invoice_request ( ) ,
2893
2922
} ;
2894
2923
outbounds. insert ( payment_id, outbound) ;
2895
2924
core:: mem:: drop ( outbounds) ;
0 commit comments