@@ -33,7 +33,7 @@ use bitcoin::secp256k1::Secp256k1;
33
33
use bitcoin::{secp256k1, Sequence, Weight};
34
34
35
35
use crate::events::FundingInfo;
36
- use crate::blinded_path::message::{AsyncPaymentsContext, MessageContext, MessageForwardNode, OffersContext };
36
+ use crate::blinded_path::message::{AsyncPaymentsContext, MessageContext, MessageForwardNode};
37
37
use crate::blinded_path::NodeIdLookUp;
38
38
use crate::blinded_path::message::BlindedMessagePath;
39
39
use crate::blinded_path::payment::{BlindedPaymentPath, PaymentConstraints, PaymentContext, ReceiveTlvs};
@@ -443,11 +443,15 @@ impl Ord for ClaimableHTLC {
443
443
pub trait Verification {
444
444
/// Constructs an HMAC to include in [`OffersContext`] for the data along with the given
445
445
/// [`Nonce`].
446
+ ///
447
+ /// [`OffersContext`]: crate::blinded_path::message::OffersContext
446
448
fn hmac_for_offer_payment(
447
449
&self, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
448
450
) -> Hmac<Sha256>;
449
451
450
452
/// Authenticates the data using an HMAC and a [`Nonce`] taken from an [`OffersContext`].
453
+ ///
454
+ /// [`OffersContext`]: crate::blinded_path::message::OffersContext
451
455
fn verify_for_offer_payment(
452
456
&self, hmac: Hmac<Sha256>, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
453
457
) -> Result<(), ()>;
@@ -456,6 +460,8 @@ pub trait Verification {
456
460
impl Verification for PaymentHash {
457
461
/// Constructs an HMAC to include in [`OffersContext::InboundPayment`] for the payment hash
458
462
/// along with the given [`Nonce`].
463
+ ///
464
+ /// [`OffersContext::InboundPayment`]: crate::blinded_path::message::OffersContext::InboundPayment
459
465
fn hmac_for_offer_payment(
460
466
&self, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
461
467
) -> Hmac<Sha256> {
@@ -464,6 +470,8 @@ impl Verification for PaymentHash {
464
470
465
471
/// Authenticates the payment id using an HMAC and a [`Nonce`] taken from an
466
472
/// [`OffersContext::InboundPayment`].
473
+ ///
474
+ /// [`OffersContext::InboundPayment`]: crate::blinded_path::message::OffersContext::InboundPayment
467
475
fn verify_for_offer_payment(
468
476
&self, hmac: Hmac<Sha256>, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
469
477
) -> Result<(), ()> {
@@ -504,6 +512,8 @@ impl PaymentId {
504
512
impl Verification for PaymentId {
505
513
/// Constructs an HMAC to include in [`OffersContext::OutboundPayment`] for the payment id
506
514
/// along with the given [`Nonce`].
515
+ ///
516
+ /// [`OffersContext::OutboundPayment`]: crate::blinded_path::message::OffersContext::OutboundPayment
507
517
fn hmac_for_offer_payment(
508
518
&self, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
509
519
) -> Hmac<Sha256> {
@@ -512,6 +522,8 @@ impl Verification for PaymentId {
512
522
513
523
/// Authenticates the payment id using an HMAC and a [`Nonce`] taken from an
514
524
/// [`OffersContext::OutboundPayment`].
525
+ ///
526
+ /// [`OffersContext::OutboundPayment`]: crate::blinded_path::message::OffersContext::OutboundPayment
515
527
fn verify_for_offer_payment(
516
528
&self, hmac: Hmac<Sha256>, nonce: Nonce, expanded_key: &inbound_payment::ExpandedKey,
517
529
) -> Result<(), ()> {
@@ -4470,35 +4482,6 @@ where
4470
4482
self.pending_outbound_payments.test_set_payment_metadata(payment_id, new_payment_metadata);
4471
4483
}
4472
4484
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
-
4502
4485
#[cfg(async_payments)]
4503
4486
fn send_payment_for_static_invoice(
4504
4487
&self, payment_id: PaymentId
@@ -9550,27 +9533,11 @@ where
9550
9533
.collect::<Vec<_>>()
9551
9534
}
9552
9535
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
-
9570
9536
fn send_payment_for_verified_bolt12_invoice(&self, invoice: &Bolt12Invoice, payment_id: PaymentId) -> Result<(), Bolt12PaymentError> {
9571
9537
let best_block_height = self.best_block.read().unwrap().height;
9572
- let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9573
9538
let features = self.bolt12_invoice_features();
9539
+ let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
9540
+
9574
9541
self.pending_outbound_payments
9575
9542
.send_payment_for_bolt12_invoice(
9576
9543
invoice, payment_id, &self.router, self.list_usable_channels(), features,
0 commit comments