@@ -64,7 +64,7 @@ use crate::ln::wire::Encode;
64
64
use crate::offers::invoice::{BlindedPayInfo, Bolt12Invoice, DEFAULT_RELATIVE_EXPIRY, DerivedSigningPubkey, ExplicitSigningPubkey, InvoiceBuilder, UnsignedBolt12Invoice};
65
65
use crate::offers::invoice_error::InvoiceError;
66
66
use crate::offers::invoice_request::{DerivedPayerId, InvoiceRequestBuilder};
67
- use crate::offers::offer::{Offer, OfferBuilder};
67
+ use crate::offers::offer::{Offer, OfferBuilder, Amount };
68
68
use crate::offers::parse::Bolt12SemanticError;
69
69
use crate::offers::refund::{Refund, RefundBuilder};
70
70
use crate::onion_message::async_payments::{AsyncPaymentsMessage, HeldHtlcAvailable, ReleaseHeldHtlc, AsyncPaymentsMessageHandler};
@@ -8820,9 +8820,19 @@ where
8820
8820
let invoice_request = builder.build_and_sign()?;
8821
8821
8822
8822
let total_liquidity: u64 = self.list_usable_channels().iter().map(|channel| channel.next_outbound_htlc_limit_msat).sum();
8823
- if invoice_request.amount_msats() > Some(total_liquidity) {
8824
- log_error!(self.logger, "Insufficient liquidity for payment with payment id: {}", payment_id);
8825
- return Err(Bolt12SemanticError::InsufficientLiquidity);
8823
+ let total_amount_msats = match invoice_request.amount_msats() {
8824
+ Some(amount_msats) => Some(amount_msats),
8825
+ None => match offer.amount() {
8826
+ Some(Amount::Bitcoin { amount_msats }) => Some(amount_msats),
8827
+ _ => None,
8828
+ },
8829
+ };
8830
+
8831
+ if let Some(amount) = total_amount_msats {
8832
+ if amount > total_liquidity {
8833
+ log_error!(self.logger, "Insufficient liquidity for payment with payment id: {}", payment_id);
8834
+ return Err(Bolt12SemanticError::InsufficientLiquidity);
8835
+ }
8826
8836
}
8827
8837
8828
8838
let context = OffersContext::OutboundPayment { payment_id };
0 commit comments