Skip to content

Commit 5f2c767

Browse files
Store invreqs in StaticInvoiceReceived outbound payments.
1 parent c34c596 commit 5f2c767

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
@@ -75,6 +75,7 @@ pub(crate) enum PendingOutboundPayment {
7575
retry_strategy: Retry,
7676
payment_release_secret: [u8; 32],
7777
route_params: RouteParameters,
78+
invoice_request: InvoiceRequest,
7879
},
7980
Retryable {
8081
retry_strategy: Option<Retry>,
@@ -946,7 +947,7 @@ impl OutboundPayments {
946947
}
947948

948949
match self.pending_outbound_payments.lock().unwrap().entry(payment_id) {
949-
hash_map::Entry::Occupied(mut entry) => match entry.get() {
950+
hash_map::Entry::Occupied(mut entry) => match entry.get_mut() {
950951
PendingOutboundPayment::AwaitingInvoice { retry_strategy, invoice_request, .. } => {
951952
let invreq = invoice_request.as_ref().ok_or(Bolt12PaymentError::UnexpectedInvoice)?;
952953
if !invoice.from_same_offer(invreq) {
@@ -984,6 +985,7 @@ impl OutboundPayments {
984985
retry_strategy: *retry_strategy,
985986
payment_release_secret,
986987
route_params,
988+
invoice_request: invoice_request.take().ok_or(Bolt12PaymentError::UnexpectedInvoice)?,
987989
};
988990
return Ok(payment_release_secret)
989991
},
@@ -2115,31 +2117,36 @@ impl_writeable_tlv_based_enum_upgradable!(PendingOutboundPayment,
21152117
(4, retry_strategy, required),
21162118
(6, payment_release_secret, required),
21172119
(8, route_params, required),
2120+
(10, invoice_request, required),
21182121
},
21192122
);
21202123

21212124
#[cfg(test)]
21222125
mod tests {
2126+
use bitcoin::hex::FromHex;
21232127
use bitcoin::network::Network;
21242128
use bitcoin::secp256k1::{PublicKey, Secp256k1, SecretKey};
21252129

21262130
use core::time::Duration;
21272131

21282132
use crate::blinded_path::EmptyNodeIdLookUp;
21292133
use crate::events::{Event, PathFailure, PaymentFailureReason};
2134+
use crate::io::Cursor;
21302135
use crate::ln::types::{PaymentHash, PaymentPreimage};
21312136
use crate::ln::channelmanager::{PaymentId, RecipientOnionFields};
21322137
use crate::ln::features::{Bolt12InvoiceFeatures, ChannelFeatures, NodeFeatures};
21332138
use crate::ln::msgs::{ErrorAction, LightningError};
21342139
use crate::ln::outbound_payment::{Bolt12PaymentError, OutboundPayments, PendingOutboundPayment, Retry, RetryableSendFailure, StaleExpiration};
21352140
#[cfg(feature = "std")]
21362141
use crate::offers::invoice::DEFAULT_RELATIVE_EXPIRY;
2142+
use crate::offers::invoice_request::InvoiceRequest;
21372143
use crate::offers::offer::OfferBuilder;
21382144
use crate::offers::test_utils::*;
21392145
use crate::routing::gossip::NetworkGraph;
21402146
use crate::routing::router::{InFlightHtlcs, Path, PaymentParameters, Route, RouteHop, RouteParameters};
21412147
use crate::sync::{Arc, Mutex, RwLock};
21422148
use crate::util::errors::APIError;
2149+
use crate::util::ser::Readable;
21432150
use crate::util::test_utils;
21442151

21452152
use alloc::collections::VecDeque;
@@ -2681,6 +2688,11 @@ mod tests {
26812688
assert!(pending_events.lock().unwrap().is_empty());
26822689
}
26832690

2691+
fn invoice_request() -> InvoiceRequest {
2692+
let invreq_bytes = <Vec<u8>>::from_hex("00200101010101010101010101010101010101010101010101010101010101010101080203e80a00162102bb58b5feca505c74edc000d8282fc556e51a1024fc8e7d7e56c6f887c5c8d5f25821035be5e9478209674a96e60f1f037f6176540fd001fa1d64694770c56a7709c42cf040a31d68198578a5aa1fe57de5f6d33f89c1556752cb333dbb56ac727f751893804d3a26b42909f1952fb1db8080238f9476b829160387692df35ff85dfe72e2ed").unwrap();
2693+
Readable::read(&mut Cursor::new(&invreq_bytes[..])).unwrap()
2694+
}
2695+
26842696
#[test]
26852697
fn time_out_unreleased_async_payments() {
26862698
let pending_events = Mutex::new(VecDeque::new());
@@ -2703,6 +2715,7 @@ mod tests {
27032715
retry_strategy: Retry::Attempts(0),
27042716
payment_release_secret: [0; 32],
27052717
route_params,
2718+
invoice_request: invoice_request(),
27062719
};
27072720
outbounds.insert(payment_id, outbound);
27082721
core::mem::drop(outbounds);
@@ -2750,6 +2763,7 @@ mod tests {
27502763
retry_strategy: Retry::Attempts(0),
27512764
payment_release_secret: [0; 32],
27522765
route_params,
2766+
invoice_request: invoice_request(),
27532767
};
27542768
outbounds.insert(payment_id, outbound);
27552769
core::mem::drop(outbounds);

0 commit comments

Comments
 (0)