@@ -33,7 +33,7 @@ use bitcoin::secp256k1::Secp256k1;
3333use bitcoin::{secp256k1, Sequence, Weight};
3434
3535use crate::events::FundingInfo;
36- use crate::blinded_path::message::{AsyncPaymentsContext, MessageContext, MessageForwardNode, OffersContext };
36+ use crate::blinded_path::message::{AsyncPaymentsContext, MessageContext, MessageForwardNode};
3737use crate::blinded_path::NodeIdLookUp;
3838use crate::blinded_path::message::BlindedMessagePath;
3939use crate::blinded_path::payment::{BlindedPaymentPath, PaymentConstraints, PaymentContext, ReceiveTlvs};
@@ -443,11 +443,15 @@ impl Ord for ClaimableHTLC {
443443pub trait Verification {
444444 /// Constructs an HMAC to include in [`OffersContext`] for the data along with the given
445445 /// [`Nonce`].
446+ ///
447+ /// [`OffersContext`]: crate::blinded_path::message::OffersContext
446448 fn hmac_for_offer_payment(
447449 &self, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
448450 ) -> Hmac<Sha256>;
449451
450452 /// Authenticates the data using an HMAC and a [`Nonce`] taken from an [`OffersContext`].
453+ ///
454+ /// [`OffersContext`]: crate::blinded_path::message::OffersContext
451455 fn verify_for_offer_payment(
452456 &self, hmac: Hmac<Sha256>, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
453457 ) -> Result<(), ()>;
@@ -456,6 +460,8 @@ pub trait Verification {
456460impl Verification for PaymentHash {
457461 /// Constructs an HMAC to include in [`OffersContext::InboundPayment`] for the payment hash
458462 /// along with the given [`Nonce`].
463+ ///
464+ /// [`OffersContext::InboundPayment`]: crate::blinded_path::message::OffersContext::InboundPayment
459465 fn hmac_for_offer_payment(
460466 &self, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
461467 ) -> Hmac<Sha256> {
@@ -464,6 +470,8 @@ impl Verification for PaymentHash {
464470
465471 /// Authenticates the payment id using an HMAC and a [`Nonce`] taken from an
466472 /// [`OffersContext::InboundPayment`].
473+ ///
474+ /// [`OffersContext::InboundPayment`]: crate::blinded_path::message::OffersContext::InboundPayment
467475 fn verify_for_offer_payment(
468476 &self, hmac: Hmac<Sha256>, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
469477 ) -> Result<(), ()> {
@@ -504,6 +512,8 @@ impl PaymentId {
504512impl Verification for PaymentId {
505513 /// Constructs an HMAC to include in [`OffersContext::OutboundPayment`] for the payment id
506514 /// along with the given [`Nonce`].
515+ ///
516+ /// [`OffersContext::OutboundPayment`]: crate::blinded_path::message::OffersContext::OutboundPayment
507517 fn hmac_for_offer_payment(
508518 &self, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
509519 ) -> Hmac<Sha256> {
@@ -512,6 +522,8 @@ impl Verification for PaymentId {
512522
513523 /// Authenticates the payment id using an HMAC and a [`Nonce`] taken from an
514524 /// [`OffersContext::OutboundPayment`].
525+ ///
526+ /// [`OffersContext::OutboundPayment`]: crate::blinded_path::message::OffersContext::OutboundPayment
515527 fn verify_for_offer_payment(
516528 &self, hmac: Hmac<Sha256>, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
517529 ) -> Result<(), ()> {
@@ -4470,35 +4482,6 @@ where
44704482 self.pending_outbound_payments.test_set_payment_metadata(payment_id, new_payment_metadata);
44714483 }
44724484
4473- /// Pays the [`Bolt12Invoice`] associated with the `payment_id` encoded in its `payer_metadata`.
4474- ///
4475- /// The invoice's `payer_metadata` is used to authenticate that the invoice was indeed requested
4476- /// before attempting a payment. [`Bolt12PaymentError::UnexpectedInvoice`] is returned if this
4477- /// fails or if the encoded `payment_id` is not recognized. The latter may happen once the
4478- /// payment is no longer tracked because the payment was attempted after:
4479- /// - an invoice for the `payment_id` was already paid,
4480- /// - one full [timer tick] has elapsed since initially requesting the invoice when paying an
4481- /// offer, or
4482- /// - the refund corresponding to the invoice has already expired.
4483- ///
4484- /// To retry the payment, request another invoice using a new `payment_id`.
4485- ///
4486- /// Attempting to pay the same invoice twice while the first payment is still pending will
4487- /// result in a [`Bolt12PaymentError::DuplicateInvoice`].
4488- ///
4489- /// Otherwise, either [`Event::PaymentSent`] or [`Event::PaymentFailed`] are used to indicate
4490- /// whether or not the payment was successful.
4491- ///
4492- /// [timer tick]: Self::timer_tick_occurred
4493- pub fn send_payment_for_bolt12_invoice(
4494- &self, invoice: &Bolt12Invoice, context: Option<&OffersContext>,
4495- ) -> Result<(), Bolt12PaymentError> {
4496- match self.verify_bolt12_invoice(invoice, context) {
4497- Ok(payment_id) => self.send_payment_for_verified_bolt12_invoice(invoice, payment_id),
4498- Err(()) => Err(Bolt12PaymentError::UnexpectedInvoice),
4499- }
4500- }
4501-
45024485 #[cfg(async_payments)]
45034486 fn send_payment_for_static_invoice(
45044487 &self, payment_id: PaymentId
@@ -9550,27 +9533,11 @@ where
95509533 .collect::<Vec<_>>()
95519534 }
95529535
9553- fn verify_bolt12_invoice(
9554- &self, invoice: &Bolt12Invoice, context: Option<&OffersContext>,
9555- ) -> Result<PaymentId, ()> {
9556- let secp_ctx = &self.secp_ctx;
9557- let expanded_key = &self.inbound_payment_key;
9558-
9559- match context {
9560- None if invoice.is_for_refund_without_paths() => {
9561- invoice.verify_using_metadata(expanded_key, secp_ctx)
9562- },
9563- Some(&OffersContext::OutboundPayment { payment_id, nonce, .. }) => {
9564- invoice.verify_using_payer_data(payment_id, nonce, expanded_key, secp_ctx)
9565- },
9566- _ => Err(()),
9567- }
9568- }
9569-
95709536 fn send_payment_for_verified_bolt12_invoice(&self, invoice: &Bolt12Invoice, payment_id: PaymentId) -> Result<(), Bolt12PaymentError> {
95719537 let best_block_height = self.best_block.read().unwrap().height;
9572- let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
95739538 let features = self.bolt12_invoice_features();
9539+ let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9540+
95749541 self.pending_outbound_payments
95759542 .send_payment_for_bolt12_invoice(
95769543 invoice, payment_id, &self.router, self.list_usable_channels(), features,
0 commit comments