Skip to content

Commit 8bd73ef

Browse files
Add OffersMessage variant for static invoices.
1 parent 30529f2 commit 8bd73ef

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

lightning/src/ln/channelmanager.rs

+10
Original file line numberDiff line numberDiff line change
@@ -10337,6 +10337,16 @@ where
1033710337
},
1033810338
}
1033910339
},
10340+
OffersMessage::StaticInvoice(_invoice) => {
10341+
match responder {
10342+
Some(responder) => {
10343+
responder.respond(OffersMessage::InvoiceError(
10344+
InvoiceError::from_string("Static invoices not yet supported".to_string())
10345+
))
10346+
},
10347+
None => return ResponseInstruction::NoResponse,
10348+
}
10349+
},
1034010350
OffersMessage::InvoiceError(invoice_error) => {
1034110351
log_trace!(self.logger, "Received invoice_error: {}", invoice_error);
1034210352
ResponseInstruction::NoResponse

lightning/src/ln/offers_tests.rs

+3
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ fn extract_invoice_request<'a, 'b, 'c>(
192192
ParsedOnionMessageContents::Offers(offers_message) => match offers_message {
193193
OffersMessage::InvoiceRequest(invoice_request) => (invoice_request, reply_path.unwrap()),
194194
OffersMessage::Invoice(invoice) => panic!("Unexpected invoice: {:?}", invoice),
195+
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected static invoice: {:?}", invoice),
195196
OffersMessage::InvoiceError(error) => panic!("Unexpected invoice_error: {:?}", error),
196197
},
197198
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
@@ -208,6 +209,7 @@ fn extract_invoice<'a, 'b, 'c>(node: &Node<'a, 'b, 'c>, message: &OnionMessage)
208209
ParsedOnionMessageContents::Offers(offers_message) => match offers_message {
209210
OffersMessage::InvoiceRequest(invoice_request) => panic!("Unexpected invoice_request: {:?}", invoice_request),
210211
OffersMessage::Invoice(invoice) => invoice,
212+
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected static invoice: {:?}", invoice),
211213
OffersMessage::InvoiceError(error) => panic!("Unexpected invoice_error: {:?}", error),
212214
},
213215
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),
@@ -226,6 +228,7 @@ fn extract_invoice_error<'a, 'b, 'c>(
226228
ParsedOnionMessageContents::Offers(offers_message) => match offers_message {
227229
OffersMessage::InvoiceRequest(invoice_request) => panic!("Unexpected invoice_request: {:?}", invoice_request),
228230
OffersMessage::Invoice(invoice) => panic!("Unexpected invoice: {:?}", invoice),
231+
OffersMessage::StaticInvoice(invoice) => panic!("Unexpected invoice: {:?}", invoice),
229232
OffersMessage::InvoiceError(error) => error,
230233
},
231234
ParsedOnionMessageContents::AsyncPayments(message) => panic!("Unexpected async payments message: {:?}", message),

lightning/src/onion_message/offers.rs

+16-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use crate::offers::invoice_error::InvoiceError;
1616
use crate::offers::invoice_request::InvoiceRequest;
1717
use crate::offers::invoice::Bolt12Invoice;
1818
use crate::offers::parse::Bolt12ParseError;
19+
use crate::offers::static_invoice::StaticInvoice;
1920
use crate::onion_message::packet::OnionMessageContents;
2021
use crate::util::logger::Logger;
2122
use crate::util::ser::{Readable, ReadableArgs, Writeable, Writer};
@@ -29,6 +30,7 @@ use crate::prelude::*;
2930
const INVOICE_REQUEST_TLV_TYPE: u64 = 64;
3031
const INVOICE_TLV_TYPE: u64 = 66;
3132
const INVOICE_ERROR_TLV_TYPE: u64 = 68;
33+
const STATIC_INVOICE_TLV_TYPE: u64 = 70;
3234

3335
/// A handler for an [`OnionMessage`] containing a BOLT 12 Offers message as its payload.
3436
///
@@ -72,6 +74,9 @@ pub enum OffersMessage {
7274
/// [`Refund`]: crate::offers::refund::Refund
7375
Invoice(Bolt12Invoice),
7476

77+
/// A [`StaticInvoice`] sent in response to an [`InvoiceRequest`].
78+
StaticInvoice(StaticInvoice),
79+
7580
/// An error from handling an [`OffersMessage`].
7681
InvoiceError(InvoiceError),
7782
}
@@ -80,7 +85,10 @@ impl OffersMessage {
8085
/// Returns whether `tlv_type` corresponds to a TLV record for Offers.
8186
pub fn is_known_type(tlv_type: u64) -> bool {
8287
match tlv_type {
83-
INVOICE_REQUEST_TLV_TYPE | INVOICE_TLV_TYPE | INVOICE_ERROR_TLV_TYPE => true,
88+
INVOICE_REQUEST_TLV_TYPE
89+
| INVOICE_TLV_TYPE
90+
| STATIC_INVOICE_TLV_TYPE
91+
| INVOICE_ERROR_TLV_TYPE => true,
8492
_ => false,
8593
}
8694
}
@@ -89,6 +97,7 @@ impl OffersMessage {
8997
match tlv_type {
9098
INVOICE_REQUEST_TLV_TYPE => Ok(Self::InvoiceRequest(InvoiceRequest::try_from(bytes)?)),
9199
INVOICE_TLV_TYPE => Ok(Self::Invoice(Bolt12Invoice::try_from(bytes)?)),
100+
STATIC_INVOICE_TLV_TYPE => Ok(Self::StaticInvoice(StaticInvoice::try_from(bytes)?)),
92101
_ => Err(Bolt12ParseError::Decode(DecodeError::InvalidValue)),
93102
}
94103
}
@@ -103,6 +112,9 @@ impl fmt::Debug for OffersMessage {
103112
OffersMessage::Invoice(message) => {
104113
write!(f, "{:?}", message.as_tlv_stream())
105114
}
115+
OffersMessage::StaticInvoice(message) => {
116+
write!(f, "{:?}", message)
117+
}
106118
OffersMessage::InvoiceError(message) => {
107119
write!(f, "{:?}", message)
108120
}
@@ -115,13 +127,15 @@ impl OnionMessageContents for OffersMessage {
115127
match self {
116128
OffersMessage::InvoiceRequest(_) => INVOICE_REQUEST_TLV_TYPE,
117129
OffersMessage::Invoice(_) => INVOICE_TLV_TYPE,
130+
OffersMessage::StaticInvoice(_) => STATIC_INVOICE_TLV_TYPE,
118131
OffersMessage::InvoiceError(_) => INVOICE_ERROR_TLV_TYPE,
119132
}
120133
}
121134
fn msg_type(&self) -> &'static str {
122135
match &self {
123136
OffersMessage::InvoiceRequest(_) => "Invoice Request",
124137
OffersMessage::Invoice(_) => "Invoice",
138+
OffersMessage::StaticInvoice(_) => "Static Invoice",
125139
OffersMessage::InvoiceError(_) => "Invoice Error",
126140
}
127141
}
@@ -132,6 +146,7 @@ impl Writeable for OffersMessage {
132146
match self {
133147
OffersMessage::InvoiceRequest(message) => message.write(w),
134148
OffersMessage::Invoice(message) => message.write(w),
149+
OffersMessage::StaticInvoice(message) => message.write(w),
135150
OffersMessage::InvoiceError(message) => message.write(w),
136151
}
137152
}

0 commit comments

Comments
 (0)