Skip to content

Commit 05ba9d7

Browse files
committed
Move pay_for_offer_intern to flow.rs
1 parent 7b23df1 commit 05ba9d7

File tree

2 files changed

+65
-60
lines changed

2 files changed

+65
-60
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 3 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ use crate::events::{self, Event, EventHandler, EventsProvider, InboundChannelFun
4747
// construct one themselves.
4848
use crate::ln::inbound_payment;
4949
use crate::ln::types::ChannelId;
50-
use crate::offers::offer::Offer;
5150
use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
5251
use crate::ln::channel::{self, Channel, ChannelPhase, ChannelError, ChannelUpdateStatus, ShutdownResult, UpdateFulfillCommitFetch, OutboundV1Channel, InboundV1Channel, WithChannelContext, InboundV2Channel, InteractivelyFunded as _};
5352
use crate::ln::channel_state::ChannelDetails;
@@ -65,14 +64,13 @@ use crate::ln::outbound_payment;
6564
use crate::ln::outbound_payment::{OutboundPayments, PendingOutboundPayment, RetryableInvoiceRequest, SendAlongPathArgs, StaleExpiration};
6665
use crate::offers::invoice::Bolt12Invoice;
6766
use crate::offers::invoice::UnsignedBolt12Invoice;
68-
use crate::offers::invoice_request::{InvoiceRequest, InvoiceRequestBuilder};
67+
use crate::offers::invoice_request::InvoiceRequest;
6968
use crate::offers::nonce::Nonce;
7069
use crate::offers::parse::Bolt12SemanticError;
7170
use crate::offers::signer;
7271
#[cfg(async_payments)]
7372
use crate::offers::static_invoice::StaticInvoice;
7473
use crate::onion_message::async_payments::{AsyncPaymentsMessage, HeldHtlcAvailable, ReleaseHeldHtlc, AsyncPaymentsMessageHandler};
75-
use crate::onion_message::dns_resolution::HumanReadableName;
7674
use crate::onion_message::messenger::{DefaultMessageRouter, Destination, MessageRouter, MessageSendInstructions, Responder, ResponseInstruction};
7775
use crate::onion_message::offers::OffersMessage;
7876
use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
@@ -9627,13 +9625,6 @@ pub trait OffersMessageCommons {
96279625
max_total_routing_fee_msat: Option<u64>, amount_msats: u64,
96289626
) -> Result<(), ()>;
96299627

9630-
/// Internal pay_for_offer
9631-
fn pay_for_offer_intern<CPP: FnOnce(&InvoiceRequest, Nonce) -> Result<(), Bolt12SemanticError>> (
9632-
&self, offer: &Offer, quantity: Option<u64>, amount_msats: Option<u64>,
9633-
payer_note: Option<String>, payment_id: PaymentId,
9634-
human_readable_name: Option<HumanReadableName>, create_pending_payment: CPP,
9635-
) -> Result<(), Bolt12SemanticError>;
9636-
96379628
#[cfg(feature = "dnssec")]
96389629
/// Amount for payment awaiting offer
96399630
fn amt_msats_for_payment_awaiting_offer(&self, payment_id: PaymentId) -> Result<u64, ()>;
@@ -9836,6 +9827,7 @@ where
98369827
}
98379828

98389829
fn add_new_awaiting_invoice(&self, payment_id: PaymentId, expiration: StaleExpiration, retry_strategy: Retry, max_total_routing_fee_msat: Option<u64>, retryable_invoice_request: Option<RetryableInvoiceRequest>) -> Result<(), ()> {
9830+
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
98399831
self.pending_outbound_payments.add_new_awaiting_invoice (
98409832
payment_id, expiration, retry_strategy, max_total_routing_fee_msat, retryable_invoice_request,
98419833
)
@@ -9849,53 +9841,6 @@ where
98499841
self.pending_outbound_payments.add_new_awaiting_offer(payment_id, expiration, retry_strategy, max_total_routing_fee_msat, amount_msats)
98509842
}
98519843

9852-
fn pay_for_offer_intern<CPP: FnOnce(&InvoiceRequest, Nonce) -> Result<(), Bolt12SemanticError>>(
9853-
&self, offer: &Offer, quantity: Option<u64>, amount_msats: Option<u64>,
9854-
payer_note: Option<String>, payment_id: PaymentId,
9855-
human_readable_name: Option<HumanReadableName>, create_pending_payment: CPP,
9856-
) -> Result<(), Bolt12SemanticError> {
9857-
let expanded_key = &self.inbound_payment_key;
9858-
let entropy = &*self.entropy_source;
9859-
let secp_ctx = &self.secp_ctx;
9860-
9861-
let nonce = Nonce::from_entropy_source(entropy);
9862-
let builder: InvoiceRequestBuilder<secp256k1::All> = offer
9863-
.request_invoice(expanded_key, nonce, secp_ctx, payment_id)?
9864-
.into();
9865-
let builder = builder.chain_hash(self.chain_hash)?;
9866-
9867-
let builder = match quantity {
9868-
None => builder,
9869-
Some(quantity) => builder.quantity(quantity)?,
9870-
};
9871-
let builder = match amount_msats {
9872-
None => builder,
9873-
Some(amount_msats) => builder.amount_msats(amount_msats)?,
9874-
};
9875-
let builder = match payer_note {
9876-
None => builder,
9877-
Some(payer_note) => builder.payer_note(payer_note),
9878-
};
9879-
let builder = match human_readable_name {
9880-
None => builder,
9881-
Some(hrn) => builder.sourced_from_human_readable_name(hrn),
9882-
};
9883-
let invoice_request = builder.build_and_sign()?;
9884-
9885-
let hmac = payment_id.hmac_for_offer_payment(nonce, expanded_key);
9886-
let context = MessageContext::Offers(
9887-
OffersContext::OutboundPayment { payment_id, nonce, hmac: Some(hmac) }
9888-
);
9889-
let reply_paths = self.create_blinded_paths(context)
9890-
.map_err(|_| Bolt12SemanticError::MissingPaths)?;
9891-
9892-
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9893-
9894-
create_pending_payment(&invoice_request, nonce)?;
9895-
9896-
self.enqueue_invoice_request(invoice_request, reply_paths)
9897-
}
9898-
98999844
#[cfg(feature = "dnssec")]
99009845
fn amt_msats_for_payment_awaiting_offer(&self, payment_id: PaymentId) -> Result<u64, ()> {
99019846
self.pending_outbound_payments.amt_msats_for_payment_awaiting_offer(payment_id)
@@ -9905,6 +9850,7 @@ where
99059850
fn received_offer(
99069851
&self, payment_id: PaymentId, retryable_invoice_request: Option<RetryableInvoiceRequest>,
99079852
) -> Result<(), ()> {
9853+
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
99089854
self.pending_outbound_payments.received_offer(payment_id, retryable_invoice_request)
99099855
}
99109856
}

lightning/src/offers/flow.rs

Lines changed: 62 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use crate::ln::channelmanager::{
2424
Bolt12PaymentError, OffersMessageCommons, PaymentId, Verification, OFFERS_MESSAGE_REQUEST_LIMIT,
2525
};
2626
use crate::ln::outbound_payment::{Retry, RetryableInvoiceRequest, StaleExpiration};
27+
use crate::onion_message::dns_resolution::HumanReadableName;
2728
use crate::onion_message::messenger::{
2829
Destination, MessageSendInstructions, Responder, ResponseInstruction,
2930
};
@@ -35,6 +36,7 @@ use crate::offers::invoice::{
3536
DEFAULT_RELATIVE_EXPIRY,
3637
};
3738
use crate::offers::invoice_error::InvoiceError;
39+
use crate::offers::invoice_request::{InvoiceRequest, InvoiceRequestBuilder};
3840
use crate::offers::nonce::Nonce;
3941
use crate::offers::offer::{DerivedMetadata, Offer, OfferBuilder};
4042
use crate::offers::parse::Bolt12SemanticError;
@@ -54,7 +56,7 @@ use {
5456
use {
5557
crate::blinded_path::message::DNSResolverContext,
5658
crate::onion_message::dns_resolution::{
57-
DNSResolverMessage, DNSResolverMessageHandler, DNSSECProof, DNSSECQuery, HumanReadableName,
59+
DNSResolverMessage, DNSResolverMessageHandler, DNSSECProof, DNSSECQuery,
5860
},
5961
};
6062

@@ -436,6 +438,63 @@ where
436438
}
437439
}
438440

441+
impl<ES: Deref, OMC: Deref, L: Deref> OffersMessageFlow<ES, OMC, L>
442+
where
443+
ES::Target: EntropySource,
444+
OMC::Target: OffersMessageCommons,
445+
L::Target: Logger,
446+
{
447+
fn pay_for_offer_intern<
448+
CPP: FnOnce(&InvoiceRequest, Nonce) -> Result<(), Bolt12SemanticError>,
449+
>(
450+
&self, offer: &Offer, quantity: Option<u64>, amount_msats: Option<u64>,
451+
payer_note: Option<String>, payment_id: PaymentId,
452+
human_readable_name: Option<HumanReadableName>, create_pending_payment: CPP,
453+
) -> Result<(), Bolt12SemanticError> {
454+
let expanded_key = self.commons.get_expanded_key();
455+
let entropy = &*self.entropy_source;
456+
let secp_ctx = &self.secp_ctx;
457+
458+
let nonce = Nonce::from_entropy_source(entropy);
459+
let builder: InvoiceRequestBuilder<secp256k1::All> =
460+
offer.request_invoice(expanded_key, nonce, secp_ctx, payment_id)?.into();
461+
let builder = builder.chain_hash(self.commons.get_chain_hash())?;
462+
463+
let builder = match quantity {
464+
None => builder,
465+
Some(quantity) => builder.quantity(quantity)?,
466+
};
467+
let builder = match amount_msats {
468+
None => builder,
469+
Some(amount_msats) => builder.amount_msats(amount_msats)?,
470+
};
471+
let builder = match payer_note {
472+
None => builder,
473+
Some(payer_note) => builder.payer_note(payer_note),
474+
};
475+
let builder = match human_readable_name {
476+
None => builder,
477+
Some(hrn) => builder.sourced_from_human_readable_name(hrn),
478+
};
479+
let invoice_request = builder.build_and_sign()?;
480+
481+
let hmac = payment_id.hmac_for_offer_payment(nonce, expanded_key);
482+
let context = MessageContext::Offers(OffersContext::OutboundPayment {
483+
payment_id,
484+
nonce,
485+
hmac: Some(hmac),
486+
});
487+
let reply_paths = self
488+
.commons
489+
.create_blinded_paths(context)
490+
.map_err(|_| Bolt12SemanticError::MissingPaths)?;
491+
492+
create_pending_payment(&invoice_request, nonce)?;
493+
494+
self.commons.enqueue_invoice_request(invoice_request, reply_paths)
495+
}
496+
}
497+
439498
impl<ES: Deref, OMC: Deref, L: Deref> OffersMessageHandler for OffersMessageFlow<ES, OMC, L>
440499
where
441500
ES::Target: EntropySource,
@@ -953,7 +1012,7 @@ where
9531012
payer_note: Option<String>, payment_id: PaymentId, retry_strategy: Retry,
9541013
max_total_routing_fee_msat: Option<u64>,
9551014
) -> Result<(), Bolt12SemanticError> {
956-
self.commons.pay_for_offer_intern(
1015+
self.pay_for_offer_intern(
9571016
offer,
9581017
quantity,
9591018
amount_msats,
@@ -1205,7 +1264,7 @@ where
12051264
}
12061265
if let Ok(amt_msats) = self.commons.amt_msats_for_payment_awaiting_offer(payment_id)
12071266
{
1208-
let offer_pay_res = self.commons.pay_for_offer_intern(
1267+
let offer_pay_res = self.pay_for_offer_intern(
12091268
&offer,
12101269
None,
12111270
Some(amt_msats),

0 commit comments

Comments
 (0)