Skip to content

Commit d1446f9

Browse files
committed
Move pay_for_offer_intern to flow.rs
1 parent 5ff7db6 commit d1446f9

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
@@ -48,7 +48,6 @@ use crate::events::{Event, EventHandler, EventsProvider, MessageSendEvent, Messa
4848
// construct one themselves.
4949
use crate::ln::inbound_payment;
5050
use crate::ln::types::ChannelId;
51-
use crate::offers::offer::Offer;
5251
use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
5352
use crate::ln::channel::{self, Channel, ChannelPhase, ChannelError, ChannelUpdateStatus, ShutdownResult, UpdateFulfillCommitFetch, OutboundV1Channel, InboundV1Channel, WithChannelContext};
5453
use crate::ln::channel_state::ChannelDetails;
@@ -67,14 +66,13 @@ use crate::ln::outbound_payment::{OutboundPayments, PendingOutboundPayment, Retr
6766
use crate::ln::wire::Encode;
6867
use crate::offers::invoice::Bolt12Invoice;
6968
use crate::offers::invoice::UnsignedBolt12Invoice;
70-
use crate::offers::invoice_request::{InvoiceRequest, InvoiceRequestBuilder};
69+
use crate::offers::invoice_request::InvoiceRequest;
7170
use crate::offers::nonce::Nonce;
7271
use crate::offers::parse::Bolt12SemanticError;
7372
use crate::offers::signer;
7473
#[cfg(async_payments)]
7574
use crate::offers::static_invoice::StaticInvoice;
7675
use crate::onion_message::async_payments::{AsyncPaymentsMessage, HeldHtlcAvailable, ReleaseHeldHtlc, AsyncPaymentsMessageHandler};
77-
use crate::onion_message::dns_resolution::HumanReadableName;
7876
use crate::onion_message::messenger::{DefaultMessageRouter, Destination, MessageRouter, MessageSendInstructions, Responder, ResponseInstruction};
7977
use crate::onion_message::offers::OffersMessage;
8078
use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
@@ -9316,13 +9314,6 @@ pub trait OffersMessageCommons {
93169314
max_total_routing_fee_msat: Option<u64>, amount_msats: u64,
93179315
) -> Result<(), ()>;
93189316

9319-
/// Internal pay_for_offer
9320-
fn pay_for_offer_intern<CPP: FnOnce(&InvoiceRequest, Nonce) -> Result<(), Bolt12SemanticError>> (
9321-
&self, offer: &Offer, quantity: Option<u64>, amount_msats: Option<u64>,
9322-
payer_note: Option<String>, payment_id: PaymentId,
9323-
human_readable_name: Option<HumanReadableName>, create_pending_payment: CPP,
9324-
) -> Result<(), Bolt12SemanticError>;
9325-
93269317
#[cfg(feature = "dnssec")]
93279318
/// Amount for payment awaiting offer
93289319
fn amt_msats_for_payment_awaiting_offer(&self, payment_id: PaymentId) -> Result<u64, ()>;
@@ -9525,6 +9516,7 @@ where
95259516
}
95269517

95279518
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<(), ()> {
9519+
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
95289520
self.pending_outbound_payments.add_new_awaiting_invoice (
95299521
payment_id, expiration, retry_strategy, max_total_routing_fee_msat, retryable_invoice_request,
95309522
)
@@ -9538,53 +9530,6 @@ where
95389530
self.pending_outbound_payments.add_new_awaiting_offer(payment_id, expiration, retry_strategy, max_total_routing_fee_msat, amount_msats)
95399531
}
95409532

9541-
fn pay_for_offer_intern<CPP: FnOnce(&InvoiceRequest, Nonce) -> Result<(), Bolt12SemanticError>>(
9542-
&self, offer: &Offer, quantity: Option<u64>, amount_msats: Option<u64>,
9543-
payer_note: Option<String>, payment_id: PaymentId,
9544-
human_readable_name: Option<HumanReadableName>, create_pending_payment: CPP,
9545-
) -> Result<(), Bolt12SemanticError> {
9546-
let expanded_key = &self.inbound_payment_key;
9547-
let entropy = &*self.entropy_source;
9548-
let secp_ctx = &self.secp_ctx;
9549-
9550-
let nonce = Nonce::from_entropy_source(entropy);
9551-
let builder: InvoiceRequestBuilder<secp256k1::All> = offer
9552-
.request_invoice(expanded_key, nonce, secp_ctx, payment_id)?
9553-
.into();
9554-
let builder = builder.chain_hash(self.chain_hash)?;
9555-
9556-
let builder = match quantity {
9557-
None => builder,
9558-
Some(quantity) => builder.quantity(quantity)?,
9559-
};
9560-
let builder = match amount_msats {
9561-
None => builder,
9562-
Some(amount_msats) => builder.amount_msats(amount_msats)?,
9563-
};
9564-
let builder = match payer_note {
9565-
None => builder,
9566-
Some(payer_note) => builder.payer_note(payer_note),
9567-
};
9568-
let builder = match human_readable_name {
9569-
None => builder,
9570-
Some(hrn) => builder.sourced_from_human_readable_name(hrn),
9571-
};
9572-
let invoice_request = builder.build_and_sign()?;
9573-
9574-
let hmac = payment_id.hmac_for_offer_payment(nonce, expanded_key);
9575-
let context = MessageContext::Offers(
9576-
OffersContext::OutboundPayment { payment_id, nonce, hmac: Some(hmac) }
9577-
);
9578-
let reply_paths = self.create_blinded_paths(context)
9579-
.map_err(|_| Bolt12SemanticError::MissingPaths)?;
9580-
9581-
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9582-
9583-
create_pending_payment(&invoice_request, nonce)?;
9584-
9585-
self.enqueue_invoice_request(invoice_request, reply_paths)
9586-
}
9587-
95889533
#[cfg(feature = "dnssec")]
95899534
fn amt_msats_for_payment_awaiting_offer(&self, payment_id: PaymentId) -> Result<u64, ()> {
95909535
self.pending_outbound_payments.amt_msats_for_payment_awaiting_offer(payment_id)
@@ -9594,6 +9539,7 @@ where
95949539
fn received_offer(
95959540
&self, payment_id: PaymentId, retryable_invoice_request: Option<RetryableInvoiceRequest>,
95969541
) -> Result<(), ()> {
9542+
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
95979543
self.pending_outbound_payments.received_offer(payment_id, retryable_invoice_request)
95989544
}
95999545
}

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
};
@@ -34,6 +35,7 @@ use crate::offers::invoice::{
3435
DEFAULT_RELATIVE_EXPIRY,
3536
};
3637
use crate::offers::invoice_error::InvoiceError;
38+
use crate::offers::invoice_request::{InvoiceRequest, InvoiceRequestBuilder};
3739
use crate::offers::nonce::Nonce;
3840
use crate::offers::offer::{DerivedMetadata, Offer, OfferBuilder};
3941
use crate::offers::parse::Bolt12SemanticError;
@@ -53,7 +55,7 @@ use {
5355
use {
5456
crate::blinded_path::message::DNSResolverContext,
5557
crate::onion_message::dns_resolution::{
56-
DNSResolverMessage, DNSResolverMessageHandler, DNSSECProof, DNSSECQuery, HumanReadableName,
58+
DNSResolverMessage, DNSResolverMessageHandler, DNSSECProof, DNSSECQuery,
5759
},
5860
};
5961

@@ -434,6 +436,63 @@ where
434436
}
435437
}
436438

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

0 commit comments

Comments
 (0)