Skip to content

Commit 16ead4f

Browse files
committed
f - check offer amount in invoice builder
1 parent ffc0d2f commit 16ead4f

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

lightning/src/offers/invoice.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use crate::ln::features::{BlindedHopFeatures, Bolt12InvoiceFeatures};
2525
use crate::ln::msgs::DecodeError;
2626
use crate::offers::invoice_request::{InvoiceRequest, InvoiceRequestContents, InvoiceRequestTlvStream, InvoiceRequestTlvStreamRef};
2727
use crate::offers::merkle::{SignError, SignatureTlvStream, SignatureTlvStreamRef, WithoutSignatures, self};
28-
use crate::offers::offer::{OfferTlvStream, OfferTlvStreamRef};
28+
use crate::offers::offer::{Amount, OfferTlvStream, OfferTlvStreamRef};
2929
use crate::offers::parse::{ParseError, ParsedMessage, SemanticError};
3030
use crate::offers::payer::{PayerTlvStream, PayerTlvStreamRef};
3131
use crate::offers::refund::RefundContents;
@@ -68,14 +68,24 @@ impl<'a> InvoiceBuilder<'a> {
6868
return Err(SemanticError::InvalidPayInfo);
6969
}
7070

71+
let amount_msats = match invoice_request.amount_msats() {
72+
Some(amount_msats) => amount_msats,
73+
None => match invoice_request.contents.offer.amount() {
74+
Some(Amount::Bitcoin { amount_msats }) => {
75+
amount_msats * invoice_request.quantity().unwrap_or(1)
76+
},
77+
Some(Amount::Currency { .. }) => return Err(SemanticError::UnsupportedCurrency),
78+
None => return Err(SemanticError::MissingAmount),
79+
},
80+
};
81+
7182
Ok(Self {
7283
bytes: &invoice_request.bytes,
7384
invoice: InvoiceContents::ForOffer {
7485
invoice_request: invoice_request.contents.clone(),
7586
fields: InvoiceFields {
76-
paths, payinfo, created_at, relative_expiry: None, payment_hash,
77-
amount_msats: invoice_request.amount_msats(), fallbacks: None,
78-
features: Bolt12InvoiceFeatures::empty(), code: None,
87+
paths, payinfo, created_at, relative_expiry: None, payment_hash, amount_msats,
88+
fallbacks: None, features: Bolt12InvoiceFeatures::empty(), code: None,
7989
},
8090
},
8191
})

0 commit comments

Comments
 (0)