Skip to content

Commit 9db834f

Browse files
committed
f - WIP: respond with invoice
1 parent 2aeab5b commit 9db834f

File tree

3 files changed

+33
-11
lines changed

3 files changed

+33
-11
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,7 @@ where
814814
pub(super) best_block: RwLock<BestBlock>,
815815
#[cfg(not(test))]
816816
best_block: RwLock<BestBlock>,
817-
secp_ctx: Secp256k1<secp256k1::All>,
817+
pub(crate) secp_ctx: Secp256k1<secp256k1::All>,
818818

819819
/// Storage for PaymentSecrets and any requirements on future inbound payments before we will
820820
/// expose them to users via a PaymentClaimable event. HTLCs which do not meet the requirements
@@ -977,7 +977,7 @@ where
977977
persistence_notifier: Notifier,
978978

979979
entropy_source: ES,
980-
node_signer: NS,
980+
pub(crate) node_signer: NS,
981981
signer_provider: SP,
982982

983983
logger: L,

lightning/src/offers/invoice.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ use crate::prelude::*;
124124
#[cfg(feature = "std")]
125125
use std::time::SystemTime;
126126

127-
const DEFAULT_RELATIVE_EXPIRY: Duration = Duration::from_secs(7200);
127+
pub(crate) const DEFAULT_RELATIVE_EXPIRY: Duration = Duration::from_secs(7200);
128128

129129
pub(super) const SIGNATURE_TAG: &'static str = concat!("lightning", "invoice", "signature");
130130

@@ -169,7 +169,7 @@ impl<'a> InvoiceBuilder<'a, ExplicitSigningPubkey> {
169169
invoice_request: &'a InvoiceRequest, payment_paths: Vec<(BlindedPath, BlindedPayInfo)>,
170170
created_at: Duration, payment_hash: PaymentHash
171171
) -> Result<Self, SemanticError> {
172-
let amount_msats = Self::check_amount_msats(invoice_request)?;
172+
let amount_msats = Self::amount_msats(invoice_request)?;
173173
let signing_pubkey = invoice_request.contents.inner.offer.signing_pubkey();
174174
let contents = InvoiceContents::ForOffer {
175175
invoice_request: invoice_request.contents.clone(),
@@ -202,7 +202,7 @@ impl<'a> InvoiceBuilder<'a, DerivedSigningPubkey> {
202202
invoice_request: &'a InvoiceRequest, payment_paths: Vec<(BlindedPath, BlindedPayInfo)>,
203203
created_at: Duration, payment_hash: PaymentHash, keys: KeyPair
204204
) -> Result<Self, SemanticError> {
205-
let amount_msats = Self::check_amount_msats(invoice_request)?;
205+
let amount_msats = Self::amount_msats(invoice_request)?;
206206
let signing_pubkey = invoice_request.contents.inner.offer.signing_pubkey();
207207
let contents = InvoiceContents::ForOffer {
208208
invoice_request: invoice_request.contents.clone(),
@@ -232,7 +232,7 @@ impl<'a> InvoiceBuilder<'a, DerivedSigningPubkey> {
232232
}
233233

234234
impl<'a, S: SigningPubkeyStrategy> InvoiceBuilder<'a, S> {
235-
fn check_amount_msats(invoice_request: &InvoiceRequest) -> Result<u64, SemanticError> {
235+
pub(crate) fn amount_msats(invoice_request: &InvoiceRequest) -> Result<u64, SemanticError> {
236236
match invoice_request.amount_msats() {
237237
Some(amount_msats) => Ok(amount_msats),
238238
None => match invoice_request.contents.inner.offer.amount() {

lightning/src/onion_message/offers.rs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::io::{self, Read};
1717
use crate::ln::channelmanager::ChannelManager;
1818
use crate::ln::msgs::DecodeError;
1919
use crate::offers::invoice_request::InvoiceRequest;
20-
use crate::offers::invoice::Invoice;
20+
use crate::offers::invoice::{DEFAULT_RELATIVE_EXPIRY, DerivedSigningPubkey, Invoice, InvoiceBuilder};
2121
use crate::offers::parse::ParseError;
2222
use crate::onion_message::messenger::{ResponseError, ResponseErrorHandler};
2323
use crate::routing::router::Router;
@@ -126,14 +126,36 @@ where
126126
fn handle_message(&self, message: OffersMessage) -> Option<OffersMessage> {
127127
match message {
128128
OffersMessage::InvoiceRequest(invoice_request) => {
129-
if invoice_request.verify(&self.inbound_payment_key) {}
129+
let amount_msats = match InvoiceBuilder::<DerivedSigningPubkey>::amount_msats(
130+
&invoice_request
131+
) {
132+
Ok(amount_msats) => Some(amount_msats),
133+
Err(_) => return Some(OffersMessage::InvoiceError),
134+
};
135+
let relative_expiry = DEFAULT_RELATIVE_EXPIRY.as_secs() as u32;
136+
137+
match self.create_inbound_payment(amount_msats, relative_expiry, None) {
138+
Ok((payment_hash, payment_secret)) => {
139+
let invoice = match invoice_request.verify_and_respond_using_derived_keys(
140+
vec![], payment_hash, &self.inbound_payment_key, &self.secp_ctx
141+
) {
142+
Ok(builder) => builder.allow_mpp().build_and_sign(&self.secp_ctx).unwrap(),
143+
Err(_) => return Some(OffersMessage::InvoiceError),
144+
};
145+
Some(OffersMessage::Invoice(invoice))
146+
},
147+
Err(_) => Some(OffersMessage::InvoiceError),
148+
}
130149
},
131150
OffersMessage::Invoice(invoice) => {
132-
if invoice.verify(&self.inbound_payment_key) {}
151+
if invoice.verify(&self.inbound_payment_key, &self.secp_ctx) {}
152+
None
153+
},
154+
OffersMessage::InvoiceError => {
155+
// TODO: Log
156+
None
133157
},
134-
OffersMessage::InvoiceError => {},
135158
}
136-
todo!()
137159
}
138160
}
139161

0 commit comments

Comments
 (0)