Skip to content

Commit 7894e82

Browse files
Store invreqs in StaticInvoiceReceived outbound payments.
1 parent 5b010f2 commit 7894e82

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

lightning/src/ln/outbound_payment.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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>,
@@ -1002,7 +1003,7 @@ impl OutboundPayments {
10021003
}
10031004

10041005
match self.pending_outbound_payments.lock().unwrap().entry(payment_id) {
1005-
hash_map::Entry::Occupied(mut entry) => match entry.get() {
1006+
hash_map::Entry::Occupied(mut entry) => match entry.get_mut() {
10061007
PendingOutboundPayment::AwaitingInvoice {
10071008
retry_strategy, retryable_invoice_request, max_total_routing_fee_msat, ..
10081009
} => {
@@ -1046,6 +1047,11 @@ impl OutboundPayments {
10461047
keysend_preimage,
10471048
retry_strategy: *retry_strategy,
10481049
route_params,
1050+
invoice_request:
1051+
retryable_invoice_request
1052+
.take()
1053+
.ok_or(Bolt12PaymentError::UnexpectedInvoice)?
1054+
.invoice_request,
10491055
};
10501056
return Ok(())
10511057
},
@@ -2192,32 +2198,37 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
21922198
(2, keysend_preimage, required),
21932199
(4, retry_strategy, required),
21942200
(6, route_params, required),
2201+
(8, invoice_request, required),
21952202
},
21962203
);
21972204

21982205
#[cfg(test)]
21992206
mod tests {
2207+
use bitcoin::hex::FromHex;
22002208
use bitcoin::network::Network;
22012209
use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
22022210

22032211
use core::time::Duration;
22042212

22052213
use crate::blinded_path::EmptyNodeIdLookUp;
22062214
use crate::events::{Event, PathFailure, PaymentFailureReason};
2215+
use crate::io::Cursor;
22072216
use crate::ln::types::{PaymentHash, PaymentPreimage};
22082217
use crate::ln::channelmanager::{PaymentId, RecipientOnionFields};
22092218
use crate::ln::features::{Bolt12InvoiceFeatures, ChannelFeatures, NodeFeatures};
22102219
use crate::ln::msgs::{ErrorAction, LightningError};
22112220
use crate::ln::outbound_payment::{Bolt12PaymentError, OutboundPayments, PendingOutboundPayment, Retry, RetryableSendFailure, StaleExpiration};
22122221
#[cfg(feature = "std")]
22132222
use crate::offers::invoice::DEFAULT_RELATIVE_EXPIRY;
2223+
use crate::offers::invoice_request::InvoiceRequest;
22142224
use crate::offers::offer::OfferBuilder;
22152225
use crate::offers::test_utils::*;
22162226
use crate::routing::gossip::NetworkGraph;
22172227
use crate::routing::router::{InFlightHtlcs, Path, PaymentParameters, Route, RouteHop, RouteParameters};
22182228
use crate::sync::{Arc, Mutex, RwLock};
22192229
use crate::util::errors::APIError;
22202230
use crate::util::hash_tables::new_hash_map;
2231+
use crate::util::ser::Readable;
22212232
use crate::util::test_utils;
22222233

22232234
use alloc::collections::VecDeque;
@@ -2759,6 +2770,11 @@ mod tests {
27592770
assert!(pending_events.lock().unwrap().is_empty());
27602771
}
27612772

2773+
fn invoice_request() -> InvoiceRequest {
2774+
let invreq_bytes = <Vec<u8>>::from_hex("00200101010101010101010101010101010101010101010101010101010101010101080203e80a00162102bb58b5feca505c74edc000d8282fc556e51a1024fc8e7d7e56c6f887c5c8d5f25821035be5e9478209674a96e60f1f037f6176540fd001fa1d64694770c56a7709c42cf040a31d68198578a5aa1fe57de5f6d33f89c1556752cb333dbb56ac727f751893804d3a26b42909f1952fb1db8080238f9476b829160387692df35ff85dfe72e2ed").unwrap();
2775+
Readable::read(&mut Cursor::new(&invreq_bytes[..])).unwrap()
2776+
}
2777+
27622778
#[test]
27632779
fn time_out_unreleased_async_payments() {
27642780
let pending_events = Mutex::new(VecDeque::new());
@@ -2780,6 +2796,7 @@ mod tests {
27802796
keysend_preimage: PaymentPreimage([0; 32]),
27812797
retry_strategy: Retry::Attempts(0),
27822798
route_params,
2799+
invoice_request: invoice_request(),
27832800
};
27842801
outbounds.insert(payment_id, outbound);
27852802
core::mem::drop(outbounds);
@@ -2826,6 +2843,7 @@ mod tests {
28262843
keysend_preimage: PaymentPreimage([0; 32]),
28272844
retry_strategy: Retry::Attempts(0),
28282845
route_params,
2846+
invoice_request: invoice_request(),
28292847
};
28302848
outbounds.insert(payment_id, outbound);
28312849
core::mem::drop(outbounds);

0 commit comments

Comments
 (0)