@@ -93,6 +93,7 @@ pub(crate) enum PendingOutboundPayment {
9393 retry_strategy : Retry ,
9494 route_params : RouteParameters ,
9595 invoice_request : InvoiceRequest ,
96+ static_invoice : StaticInvoice ,
9697 } ,
9798 Retryable {
9899 retry_strategy : Option < Retry > ,
@@ -1160,6 +1161,7 @@ impl OutboundPayments {
11601161 . take ( )
11611162 . ok_or ( Bolt12PaymentError :: UnexpectedInvoice ) ?
11621163 . invoice_request ,
1164+ static_invoice : invoice. clone ( ) ,
11631165 } ;
11641166 return Ok ( ( ) )
11651167 } ,
@@ -1188,22 +1190,22 @@ impl OutboundPayments {
11881190 IH : Fn ( ) -> InFlightHtlcs ,
11891191 SP : Fn ( SendAlongPathArgs ) -> Result < ( ) , APIError > ,
11901192 {
1191- let ( payment_hash, keysend_preimage, route_params, retry_strategy, invoice_request) =
1193+ let ( payment_hash, keysend_preimage, route_params, retry_strategy, invoice_request, invoice ) =
11921194 match self . pending_outbound_payments . lock ( ) . unwrap ( ) . entry ( payment_id) {
11931195 hash_map:: Entry :: Occupied ( entry) => match entry. get ( ) {
11941196 PendingOutboundPayment :: StaticInvoiceReceived {
1195- payment_hash, route_params, retry_strategy, keysend_preimage, invoice_request, ..
1197+ payment_hash, route_params, retry_strategy, keysend_preimage, invoice_request, static_invoice , ..
11961198 } => {
11971199 ( * payment_hash, * keysend_preimage, route_params. clone ( ) , * retry_strategy,
1198- invoice_request. clone ( ) )
1200+ invoice_request. clone ( ) , static_invoice . clone ( ) )
11991201 } ,
12001202 _ => return Err ( Bolt12PaymentError :: DuplicateInvoice ) ,
12011203 } ,
12021204 hash_map:: Entry :: Vacant ( _) => return Err ( Bolt12PaymentError :: UnexpectedInvoice ) ,
12031205 } ;
1204-
1206+ let invoice = PaidInvoice :: StaticInvoice ( invoice . clone ( ) ) ;
12051207 self . send_payment_for_bolt12_invoice_internal (
1206- payment_id, payment_hash, Some ( keysend_preimage) , Some ( & invoice_request) , None , route_params,
1208+ payment_id, payment_hash, Some ( keysend_preimage) , Some ( & invoice_request) , Some ( & invoice ) , route_params,
12071209 retry_strategy, router, first_hops, inflight_htlcs, entropy_source, node_signer,
12081210 node_id_lookup, secp_ctx, best_block_height, logger, pending_events, send_payment_along_path
12091211 )
@@ -2527,6 +2529,7 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
25272529 ( 4 , retry_strategy, required) ,
25282530 ( 6 , route_params, required) ,
25292531 ( 8 , invoice_request, required) ,
2532+ ( 10 , static_invoice, required) ,
25302533 } ,
25312534 // Added in 0.1. Prior versions will drop these outbounds on downgrade, which is safe because
25322535 // no HTLCs are in-flight.
@@ -2558,6 +2561,10 @@ mod tests {
25582561
25592562 use crate :: blinded_path:: EmptyNodeIdLookUp ;
25602563 use crate :: events:: { Event , PathFailure , PaymentFailureReason } ;
2564+ use crate :: offers:: static_invoice:: { StaticInvoiceBuilder , StaticInvoice } ;
2565+ use crate :: blinded_path:: message:: BlindedMessagePath ;
2566+ use crate :: ln:: outbound_payment:: tests:: test_utils:: pubkey;
2567+ use crate :: blinded_path:: BlindedHop ;
25612568 use crate :: types:: payment:: { PaymentHash , PaymentPreimage } ;
25622569 use crate :: ln:: channelmanager:: { PaymentId , RecipientOnionFields } ;
25632570 use crate :: ln:: inbound_payment:: ExpandedKey ;
@@ -3157,6 +3164,7 @@ mod tests {
31573164 retry_strategy : Retry :: Attempts ( 0 ) ,
31583165 route_params,
31593166 invoice_request : dummy_invoice_request ( ) ,
3167+ static_invoice : dummy_static_invoice ( ) ,
31603168 } ;
31613169 outbounds. insert ( payment_id, outbound) ;
31623170 core:: mem:: drop ( outbounds) ;
@@ -3204,6 +3212,7 @@ mod tests {
32043212 retry_strategy : Retry :: Attempts ( 0 ) ,
32053213 route_params,
32063214 invoice_request : dummy_invoice_request ( ) ,
3215+ static_invoice : dummy_static_invoice ( ) ,
32073216 } ;
32083217 outbounds. insert ( payment_id, outbound) ;
32093218 core:: mem:: drop ( outbounds) ;
0 commit comments