Skip to content

Commit

Permalink
Config-guard Event::InvoiceRequestFailed
Browse files Browse the repository at this point in the history
The event cannot be generated publicly, so remove it for now to avoid
users needing to handle it.
  • Loading branch information
jkczyz committed Sep 29, 2023
1 parent 955e810 commit c7219e4
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 11 deletions.
3 changes: 3 additions & 0 deletions lightning/src/events/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,7 @@ pub enum Event {
/// or was explicitly abandoned by [`ChannelManager::abandon_payment`].
///
/// [`ChannelManager::abandon_payment`]: crate::ln::channelmanager::ChannelManager::abandon_payment
#[cfg(invreqfailed)]
InvoiceRequestFailed {
/// The `payment_id` to have been associated with payment for the requested invoice.
payment_id: PaymentId,
Expand Down Expand Up @@ -1163,6 +1164,7 @@ impl Writeable for Event {
(8, funding_txo, required),
});
},
#[cfg(invreqfailed)]
&Event::InvoiceRequestFailed { ref payment_id } => {
33u8.write(writer)?;
write_tlv_fields!(writer, {
Expand Down Expand Up @@ -1556,6 +1558,7 @@ impl MaybeReadable for Event {
};
f()
},
#[cfg(invreqfailed)]
33u8 => {
let f = || {
_init_and_read_len_prefixed_tlv_fields!(reader, {
Expand Down
11 changes: 1 addition & 10 deletions lightning/src/ln/channelmanager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3541,19 +3541,10 @@ where
/// wait until you receive either a [`Event::PaymentFailed`] or [`Event::PaymentSent`] event to
/// determine the ultimate status of a payment.
///
/// # Requested Invoices
///
/// In the case of paying a [`Bolt12Invoice`], abandoning the payment prior to receiving the
/// invoice will result in an [`Event::InvoiceRequestFailed`] and prevent any attempts at paying
/// it once received. The other events may only be generated once the invoice has been received.
///
/// # Restart Behavior
///
/// If an [`Event::PaymentFailed`] is generated and we restart without first persisting the
/// [`ChannelManager`], another [`Event::PaymentFailed`] may be generated; likewise for
/// [`Event::InvoiceRequestFailed`].
///
/// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
/// [`ChannelManager`], another [`Event::PaymentFailed`] may be generated.
pub fn abandon_payment(&self, payment_id: PaymentId) {
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
self.pending_outbound_payments.abandon_payment(payment_id, PaymentFailureReason::UserAbandoned, &self.pending_events);
Expand Down
11 changes: 10 additions & 1 deletion lightning/src/ln/outbound_payment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1502,6 +1502,9 @@ impl OutboundPayments {
&self, pending_events: &Mutex<VecDeque<(events::Event, Option<EventCompletionAction>)>>)
{
let mut pending_outbound_payments = self.pending_outbound_payments.lock().unwrap();
#[cfg(not(invreqfailed))]
let pending_events = pending_events.lock().unwrap();
#[cfg(invreqfailed)]
let mut pending_events = pending_events.lock().unwrap();
pending_outbound_payments.retain(|payment_id, payment| {
// If an outbound payment was completed, and no pending HTLCs remain, we should remove it
Expand Down Expand Up @@ -1540,6 +1543,7 @@ impl OutboundPayments {
if *timer_ticks_without_response <= INVOICE_REQUEST_TIMEOUT_TICKS {
true
} else {
#[cfg(invreqfailed)]
pending_events.push_back(
(events::Event::InvoiceRequestFailed { payment_id: *payment_id }, None)
);
Expand Down Expand Up @@ -1692,6 +1696,7 @@ impl OutboundPayments {
payment.remove();
}
} else if let PendingOutboundPayment::AwaitingInvoice { .. } = payment.get() {
#[cfg(invreqfailed)]
pending_events.lock().unwrap().push_back((events::Event::InvoiceRequestFailed {
payment_id,
}, None));
Expand Down Expand Up @@ -1782,7 +1787,9 @@ mod tests {
use crate::ln::channelmanager::{PaymentId, RecipientOnionFields};
use crate::ln::features::{ChannelFeatures, NodeFeatures};
use crate::ln::msgs::{ErrorAction, LightningError};
use crate::ln::outbound_payment::{Bolt12PaymentError, INVOICE_REQUEST_TIMEOUT_TICKS, OutboundPayments, Retry, RetryableSendFailure};
use crate::ln::outbound_payment::{Bolt12PaymentError, OutboundPayments, Retry, RetryableSendFailure};
#[cfg(invreqfailed)]
use crate::ln::outbound_payment::INVOICE_REQUEST_TIMEOUT_TICKS;
use crate::offers::invoice::DEFAULT_RELATIVE_EXPIRY;
use crate::offers::offer::OfferBuilder;
use crate::offers::test_utils::*;
Expand Down Expand Up @@ -1985,6 +1992,7 @@ mod tests {
}

#[test]
#[cfg(invreqfailed)]
fn removes_stale_awaiting_invoice() {
let pending_events = Mutex::new(VecDeque::new());
let outbound_payments = OutboundPayments::new();
Expand Down Expand Up @@ -2023,6 +2031,7 @@ mod tests {
}

#[test]
#[cfg(invreqfailed)]
fn removes_abandoned_awaiting_invoice() {
let pending_events = Mutex::new(VecDeque::new());
let outbound_payments = OutboundPayments::new();
Expand Down

0 comments on commit c7219e4

Please sign in to comment.