Skip to content

Commit 6737ac7

Browse files
Store invreqs in StaticInvoiceReceived outbound payments.
1 parent 83e0e7f commit 6737ac7

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

lightning/src/ln/outbound_payment.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ pub(crate) enum PendingOutboundPayment {
7272
retry_strategy: Retry,
7373
payment_release_secret: [u8; 32],
7474
route_params: RouteParameters,
75+
invoice_request: InvoiceRequest,
7576
},
7677
Retryable {
7778
retry_strategy: Option<Retry>,
@@ -936,7 +937,7 @@ impl OutboundPayments {
936937
&self, invoice: &StaticInvoice, payment_id: PaymentId, entropy_source: ES
937938
) -> Result<[u8; 32], Bolt12PaymentError> where ES::Target: EntropySource {
938939
match self.pending_outbound_payments.lock().unwrap().entry(payment_id) {
939-
hash_map::Entry::Occupied(entry) => match entry.get() {
940+
hash_map::Entry::Occupied(mut entry) => match entry.get_mut() {
940941
PendingOutboundPayment::AwaitingInvoice { retry_strategy, invoice_request, .. } => {
941942
let invreq = invoice_request.as_ref().ok_or(Bolt12PaymentError::UnexpectedInvoice)?;
942943
if !invoice.from_same_offer(invreq) {
@@ -954,6 +955,7 @@ impl OutboundPayments {
954955
retry_strategy: *retry_strategy,
955956
payment_release_secret,
956957
route_params,
958+
invoice_request: invoice_request.take().ok_or(Bolt12PaymentError::UnexpectedInvoice)?,
957959
};
958960
return Ok(payment_release_secret)
959961
},
@@ -2088,6 +2090,7 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
20882090
(4, retry_strategy, required),
20892091
(6, payment_release_secret, required),
20902092
(8, route_params, required),
2093+
(10, invoice_request, required),
20912094
},
20922095
);
20932096

@@ -2100,19 +2103,23 @@ mod tests {
21002103

21012104
use crate::blinded_path::EmptyNodeIdLookUp;
21022105
use crate::events::{Event, PathFailure, PaymentFailureReason};
2106+
use crate::hex::FromHex;
2107+
use crate::io::Cursor;
21032108
use crate::ln::types::{PaymentHash, PaymentPreimage};
21042109
use crate::ln::channelmanager::{PaymentId, RecipientOnionFields};
21052110
use crate::ln::features::{ChannelFeatures, NodeFeatures};
21062111
use crate::ln::msgs::{ErrorAction, LightningError};
21072112
use crate::ln::outbound_payment::{Bolt12PaymentError, OutboundPayments, PendingOutboundPayment, Retry, RetryableSendFailure, StaleExpiration};
21082113
#[cfg(feature = "std")]
21092114
use crate::offers::invoice::DEFAULT_RELATIVE_EXPIRY;
2115+
use crate::offers::invoice_request::InvoiceRequest;
21102116
use crate::offers::offer::OfferBuilder;
21112117
use crate::offers::test_utils::*;
21122118
use crate::routing::gossip::NetworkGraph;
21132119
use crate::routing::router::{InFlightHtlcs, Path, PaymentParameters, Route, RouteHop, RouteParameters};
21142120
use crate::sync::{Arc, Mutex, RwLock};
21152121
use crate::util::errors::APIError;
2122+
use crate::util::ser::Readable;
21162123
use crate::util::test_utils;
21172124

21182125
use alloc::collections::VecDeque;
@@ -2644,6 +2651,11 @@ mod tests {
26442651
assert!(pending_events.lock().unwrap().is_empty());
26452652
}
26462653

2654+
fn invoice_request() -> InvoiceRequest {
2655+
let invreq_bytes = <Vec<u8>>::from_hex("00200101010101010101010101010101010101010101010101010101010101010101080203e80a00162102bb58b5feca505c74edc000d8282fc556e51a1024fc8e7d7e56c6f887c5c8d5f25821035be5e9478209674a96e60f1f037f6176540fd001fa1d64694770c56a7709c42cf040a31d68198578a5aa1fe57de5f6d33f89c1556752cb333dbb56ac727f751893804d3a26b42909f1952fb1db8080238f9476b829160387692df35ff85dfe72e2ed").unwrap();
2656+
Readable::read(&mut Cursor::new(&invreq_bytes[..])).unwrap()
2657+
}
2658+
26472659
#[test]
26482660
fn time_out_unreleased_async_payments() {
26492661
let pending_events = Mutex::new(VecDeque::new());
@@ -2666,6 +2678,7 @@ mod tests {
26662678
retry_strategy: Retry::Attempts(0),
26672679
payment_release_secret: [0; 32],
26682680
route_params,
2681+
invoice_request: invoice_request(),
26692682
};
26702683
outbounds.insert(payment_id, outbound);
26712684
core::mem::drop(outbounds);
@@ -2713,6 +2726,7 @@ mod tests {
27132726
retry_strategy: Retry::Attempts(0),
27142727
payment_release_secret: [0; 32],
27152728
route_params,
2729+
invoice_request: invoice_request(),
27162730
};
27172731
outbounds.insert(payment_id, outbound);
27182732
core::mem::drop(outbounds);

0 commit comments

Comments
 (0)