Skip to content

Commit d009eeb

Browse files
committed
Introduce params Field in create_blinded_paths
1. Added a `params` field to the `create_blinded_paths` function, allowing users to specify Blinded Path Parameters directly. 2. This change simplifies the back-end by eliminating the need for multiple `create_blinded_path` variants tailored to different types of blinded paths. 3. In upcoming commits, the `create_blinded_path_using_absolute_expiry` and `create_compact_blinded_path` functions will be removed as they become redundant.
1 parent 82a1a99 commit d009eeb

File tree

7 files changed

+58
-42
lines changed

7 files changed

+58
-42
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ use lightning::ln::script::ShutdownScript;
5858
use lightning::ln::types::{ChannelId, PaymentHash, PaymentPreimage, PaymentSecret};
5959
use lightning::offers::invoice::UnsignedBolt12Invoice;
6060
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
61-
use lightning::onion_message::messenger::{Destination, MessageRouter, OnionMessagePath};
61+
use lightning::onion_message::messenger::{
62+
BlindedPathParams, Destination, MessageRouter, OnionMessagePath,
63+
};
6264
use lightning::routing::router::{InFlightHtlcs, Path, Route, RouteHop, RouteParameters, Router};
6365
use lightning::sign::{
6466
EntropySource, InMemorySigner, KeyMaterial, NodeSigner, Recipient, SignerProvider,
@@ -141,8 +143,8 @@ impl MessageRouter for FuzzRouter {
141143
}
142144

143145
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
144-
&self, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>,
145-
_secp_ctx: &Secp256k1<T>,
146+
&self, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext,
147+
_peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
146148
) -> Result<Vec<BlindedMessagePath>, ()> {
147149
unreachable!()
148150
}

fuzz/src/full_stack.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ use lightning::ln::script::ShutdownScript;
5151
use lightning::ln::types::{ChannelId, PaymentHash, PaymentPreimage, PaymentSecret};
5252
use lightning::offers::invoice::UnsignedBolt12Invoice;
5353
use lightning::offers::invoice_request::UnsignedInvoiceRequest;
54-
use lightning::onion_message::messenger::{Destination, MessageRouter, OnionMessagePath};
54+
use lightning::onion_message::messenger::{
55+
BlindedPathParams, Destination, MessageRouter, OnionMessagePath,
56+
};
5557
use lightning::routing::gossip::{NetworkGraph, P2PGossipSync};
5658
use lightning::routing::router::{
5759
InFlightHtlcs, PaymentParameters, Route, RouteParameters, Router,
@@ -176,8 +178,8 @@ impl MessageRouter for FuzzRouter {
176178
}
177179

178180
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
179-
&self, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>,
180-
_secp_ctx: &Secp256k1<T>,
181+
&self, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext,
182+
_peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
181183
) -> Result<Vec<BlindedMessagePath>, ()> {
182184
unreachable!()
183185
}

fuzz/src/onion_message.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ use lightning::onion_message::async_payments::{
1616
AsyncPaymentsMessageHandler, HeldHtlcAvailable, ReleaseHeldHtlc,
1717
};
1818
use lightning::onion_message::messenger::{
19-
CustomOnionMessageHandler, Destination, MessageRouter, MessageSendInstructions,
20-
OnionMessagePath, OnionMessenger, Responder, ResponseInstruction,
19+
BlindedPathParams, CustomOnionMessageHandler, Destination, MessageRouter,
20+
MessageSendInstructions, OnionMessagePath, OnionMessenger, Responder, ResponseInstruction,
2121
};
2222
use lightning::onion_message::offers::{OffersMessage, OffersMessageHandler};
2323
use lightning::onion_message::packet::OnionMessageContents;
@@ -96,8 +96,8 @@ impl MessageRouter for TestMessageRouter {
9696
}
9797

9898
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
99-
&self, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>,
100-
_secp_ctx: &Secp256k1<T>,
99+
&self, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext,
100+
_peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
101101
) -> Result<Vec<BlindedMessagePath>, ()> {
102102
unreachable!()
103103
}

lightning/src/ln/channelmanager.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ use crate::offers::parse::Bolt12SemanticError;
7272
use crate::offers::refund::{Refund, RefundBuilder};
7373
use crate::offers::signer;
7474
use crate::onion_message::async_payments::{AsyncPaymentsMessage, HeldHtlcAvailable, ReleaseHeldHtlc, AsyncPaymentsMessageHandler};
75-
use crate::onion_message::messenger::{Destination, MessageRouter, Responder, ResponseInstruction, MessageSendInstructions};
75+
use crate::onion_message::messenger::{
76+
BlindedPathParams, Destination, MessageRouter, Responder, ResponseInstruction, MessageSendInstructions
77+
};
7678
use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
7779
use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
7880
use crate::sign::ecdsa::EcdsaChannelSigner;
@@ -9002,6 +9004,10 @@ where
90029004
#[cfg(c_bindings)]
90039005
create_refund_builder!(self, RefundMaybeWithDerivedMetadataBuilder);
90049006

9007+
/// Specifies the maximum number of distinct reply paths to calculate when sending an invoice request
9008+
/// in response to an offer or when issuing an invoice for a refund request.
9009+
const REPLY_PATHS_NUMBER: usize = 3;
9010+
90059011
/// Pays for an [`Offer`] using the given parameters by creating an [`InvoiceRequest`] and
90069012
/// enqueuing it to be sent via an onion message. [`ChannelManager`] will pay the actual
90079013
/// [`Bolt12Invoice`] once it is received.
@@ -9086,7 +9092,8 @@ where
90869092

90879093
let hmac = payment_id.hmac_for_offer_payment(nonce, expanded_key);
90889094
let context = OffersContext::OutboundPayment { payment_id, nonce, hmac: Some(hmac) };
9089-
let reply_paths = self.create_blinded_paths(context)
9095+
let params = BlindedPathParams::new_with_paths(Self::REPLY_PATHS_NUMBER, false);
9096+
let reply_paths = self.create_blinded_paths(params, context)
90909097
.map_err(|_| Bolt12SemanticError::MissingPaths)?;
90919098

90929099
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
@@ -9193,7 +9200,9 @@ where
91939200
let context = OffersContext::InboundPayment {
91949201
payment_hash: invoice.payment_hash(),
91959202
};
9196-
let reply_paths = self.create_blinded_paths(context)
9203+
9204+
let params = BlindedPathParams::new_with_paths(Self::REPLY_PATHS_NUMBER, false);
9205+
let reply_paths = self.create_blinded_paths(params, context)
91979206
.map_err(|_| Bolt12SemanticError::MissingPaths)?;
91989207

91999208
let mut pending_offers_messages = self.pending_offers_messages.lock().unwrap();
@@ -9340,7 +9349,8 @@ where
93409349
if absolute_expiry.unwrap_or(Duration::MAX) <= max_short_lived_absolute_expiry {
93419350
self.create_compact_blinded_paths(context)
93429351
} else {
9343-
self.create_blinded_paths(context)
9352+
let params = BlindedPathParams::new(false);
9353+
self.create_blinded_paths(params, context)
93449354
}
93459355
}
93469356

@@ -9361,7 +9371,7 @@ where
93619371
/// [`MessageRouter::create_blinded_paths`].
93629372
///
93639373
/// Errors if the `MessageRouter` errors.
9364-
fn create_blinded_paths(&self, context: OffersContext) -> Result<Vec<BlindedMessagePath>, ()> {
9374+
fn create_blinded_paths(&self, params: BlindedPathParams, context: OffersContext) -> Result<Vec<BlindedMessagePath>, ()> {
93659375
let recipient = self.get_our_node_id();
93669376
let secp_ctx = &self.secp_ctx;
93679377

@@ -9374,7 +9384,7 @@ where
93749384
.collect::<Vec<_>>();
93759385

93769386
self.router
9377-
.create_blinded_paths(recipient, MessageContext::Offers(context), peers, secp_ctx)
9387+
.create_blinded_paths(params, recipient, MessageContext::Offers(context), peers, secp_ctx)
93789388
.and_then(|paths| (!paths.is_empty()).then(|| paths).ok_or(()))
93799389
}
93809390

lightning/src/onion_message/messenger.rs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ for OnionMessenger<ES, NS, L, NL, MR, OMH, APH, CMH> where
151151
/// # use lightning::blinded_path::message::{BlindedMessagePath, MessageForwardNode, MessageContext};
152152
/// # use lightning::sign::{EntropySource, KeysManager};
153153
/// # use lightning::ln::peer_handler::IgnoringMessageHandler;
154-
/// # use lightning::onion_message::messenger::{Destination, MessageRouter, MessageSendInstructions, OnionMessagePath, OnionMessenger};
154+
/// # use lightning::onion_message::messenger::{BlindedPathParams, Destination, MessageRouter, MessageSendInstructions, OnionMessagePath, OnionMessenger};
155155
/// # use lightning::onion_message::packet::OnionMessageContents;
156156
/// # use lightning::util::logger::{Logger, Record};
157157
/// # use lightning::util::ser::{Writeable, Writer};
@@ -175,7 +175,7 @@ for OnionMessenger<ES, NS, L, NL, MR, OMH, APH, CMH> where
175175
/// # })
176176
/// # }
177177
/// # fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
178-
/// # &self, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>
178+
/// # &self, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>
179179
/// # ) -> Result<Vec<BlindedMessagePath>, ()> {
180180
/// # unreachable!()
181181
/// # }
@@ -475,7 +475,7 @@ pub trait MessageRouter {
475475
fn create_blinded_paths<
476476
T: secp256k1::Signing + secp256k1::Verification
477477
>(
478-
&self, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
478+
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
479479
) -> Result<Vec<BlindedMessagePath>, ()>;
480480

481481
/// Creates compact [`BlindedMessagePath`]s to the `recipient` node. The nodes in `peers` are
@@ -501,7 +501,9 @@ pub trait MessageRouter {
501501
.into_iter()
502502
.map(|MessageForwardNode { node_id, short_channel_id: _ }| node_id)
503503
.collect();
504-
self.create_blinded_paths(recipient, context, peers, secp_ctx)
504+
505+
let params = BlindedPathParams::new(true);
506+
self.create_blinded_paths(params, recipient, context, peers, secp_ctx)
505507
}
506508
}
507509

@@ -536,12 +538,9 @@ where
536538
I: ExactSizeIterator<Item = MessageForwardNode>,
537539
T: secp256k1::Signing + secp256k1::Verification
538540
>(
539-
network_graph: &G, recipient: PublicKey, context: MessageContext, peers: I,
540-
entropy_source: &ES, secp_ctx: &Secp256k1<T>, compact_paths: bool,
541+
params: BlindedPathParams, network_graph: &G, recipient: PublicKey, context: MessageContext, peers: I,
542+
entropy_source: &ES, secp_ctx: &Secp256k1<T>
541543
) -> Result<Vec<BlindedMessagePath>, ()> {
542-
// Limit the number of blinded paths that are computed.
543-
const MAX_PATHS: usize = 3;
544-
545544
// Ensure peers have at least three channels so that it is more difficult to infer the
546545
// recipient's node_id.
547546
const MIN_PEER_CHANNELS: usize = 3;
@@ -578,7 +577,7 @@ where
578577
.map(|(peer, _, _)| {
579578
BlindedMessagePath::new(&[peer], recipient, context.clone(), &**entropy_source, secp_ctx)
580579
})
581-
.take(MAX_PATHS)
580+
.take(params.paths)
582581
.collect::<Result<Vec<_>, _>>();
583582

584583
let mut paths = match paths {
@@ -593,7 +592,7 @@ where
593592
},
594593
}?;
595594

596-
if compact_paths {
595+
if params.is_compact {
597596
for path in &mut paths {
598597
path.use_compact_introduction_node(&network_graph);
599598
}
@@ -638,13 +637,13 @@ where
638637
pub(crate) fn create_blinded_paths<
639638
T: secp256k1::Signing + secp256k1::Verification
640639
>(
641-
network_graph: &G, recipient: PublicKey, context: MessageContext,
640+
params: BlindedPathParams, network_graph: &G, recipient: PublicKey, context: MessageContext,
642641
peers: Vec<PublicKey>, entropy_source: &ES, secp_ctx: &Secp256k1<T>,
643642
) -> Result<Vec<BlindedMessagePath>, ()> {
644643
let peers = peers
645644
.into_iter()
646645
.map(|node_id| MessageForwardNode { node_id, short_channel_id: None });
647-
Self::create_blinded_paths_from_iter(network_graph, recipient, context, peers.into_iter(), entropy_source, secp_ctx, false)
646+
Self::create_blinded_paths_from_iter(params, network_graph, recipient, context, peers.into_iter(), entropy_source, secp_ctx)
648647
}
649648

650649
pub(crate) fn create_compact_blinded_paths<
@@ -653,7 +652,8 @@ where
653652
network_graph: &G, recipient: PublicKey, context: MessageContext,
654653
peers: Vec<MessageForwardNode>, entropy_source: &ES, secp_ctx: &Secp256k1<T>,
655654
) -> Result<Vec<BlindedMessagePath>, ()> {
656-
Self::create_blinded_paths_from_iter(network_graph, recipient, context, peers.into_iter(), entropy_source, secp_ctx, true)
655+
let params = BlindedPathParams::new(true);
656+
Self::create_blinded_paths_from_iter(params, network_graph, recipient, context, peers.into_iter(), entropy_source, secp_ctx)
657657
}
658658
}
659659

@@ -671,9 +671,9 @@ where
671671
fn create_blinded_paths<
672672
T: secp256k1::Signing + secp256k1::Verification
673673
>(
674-
&self, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
674+
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
675675
) -> Result<Vec<BlindedMessagePath>, ()> {
676-
Self::create_blinded_paths(&self.network_graph, recipient, context, peers, &self.entropy_source, secp_ctx)
676+
Self::create_blinded_paths(params, &self.network_graph, recipient, context, peers, &self.entropy_source, secp_ctx)
677677
}
678678

679679
fn create_compact_blinded_paths<
@@ -1200,7 +1200,8 @@ where
12001200
MessageSendInstructions::WithReplyPath { destination, context }
12011201
|MessageSendInstructions::ForReply { instructions: ResponseInstruction { destination, context: Some(context) } } =>
12021202
{
1203-
match self.create_blinded_path(context) {
1203+
let params = BlindedPathParams::new(false);
1204+
match self.create_blinded_path(params, context) {
12041205
Ok(reply_path) => (destination, Some(reply_path)),
12051206
Err(err) => {
12061207
log_trace!(
@@ -1265,7 +1266,7 @@ where
12651266
.map_err(|_| SendError::PathNotFound)
12661267
}
12671268

1268-
fn create_blinded_path(&self, context: MessageContext) -> Result<BlindedMessagePath, SendError> {
1269+
fn create_blinded_path(&self, params: BlindedPathParams, context: MessageContext) -> Result<BlindedMessagePath, SendError> {
12691270
let recipient = self.node_signer
12701271
.get_node_id(Recipient::Node)
12711272
.map_err(|_| SendError::GetNodeIdFailed)?;
@@ -1278,7 +1279,7 @@ where
12781279
.collect::<Vec<_>>();
12791280

12801281
self.message_router
1281-
.create_blinded_paths(recipient, context, peers, secp_ctx)
1282+
.create_blinded_paths(params, recipient, context, peers, secp_ctx)
12821283
.and_then(|paths| paths.into_iter().next().ok_or(()))
12831284
.map_err(|_| SendError::PathNotFound)
12841285
}

lightning/src/routing/router.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use crate::ln::features::{BlindedHopFeatures, Bolt11InvoiceFeatures, Bolt12Invoi
2121
use crate::ln::msgs::{DecodeError, ErrorAction, LightningError, MAX_VALUE_MSAT};
2222
use crate::ln::onion_utils;
2323
use crate::offers::invoice::Bolt12Invoice;
24-
use crate::onion_message::messenger::{DefaultMessageRouter, Destination, MessageRouter, OnionMessagePath};
24+
use crate::onion_message::messenger::{BlindedPathParams, DefaultMessageRouter, Destination, MessageRouter, OnionMessagePath};
2525
use crate::routing::gossip::{DirectedChannelInfo, EffectiveCapacity, ReadOnlyNetworkGraph, NetworkGraph, NodeId};
2626
use crate::routing::scoring::{ChannelUsage, LockableScore, ScoreLookUp};
2727
use crate::sign::EntropySource;
@@ -197,9 +197,9 @@ impl< G: Deref<Target = NetworkGraph<L>>, L: Deref, ES: Deref, S: Deref, SP: Siz
197197
fn create_blinded_paths<
198198
T: secp256k1::Signing + secp256k1::Verification
199199
> (
200-
&self, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
200+
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
201201
) -> Result<Vec<BlindedMessagePath>, ()> {
202-
DefaultMessageRouter::create_blinded_paths(&self.network_graph, recipient, context, peers, &self.entropy_source, secp_ctx)
202+
DefaultMessageRouter::create_blinded_paths(params, &self.network_graph, recipient, context, peers, &self.entropy_source, secp_ctx)
203203
}
204204

205205
fn create_compact_blinded_paths<

lightning/src/util/test_utils.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use crate::chain::chainmonitor;
2020
use crate::chain::channelmonitor;
2121
use crate::chain::channelmonitor::MonitorEvent;
2222
use crate::chain::transaction::OutPoint;
23+
use crate::onion_message::messenger::BlindedPathParams;
2324
use crate::routing::router::{CandidateRouteHop, FirstHopCandidate, PublicHopCandidate, PrivateHopCandidate};
2425
use crate::sign;
2526
use crate::events;
@@ -275,10 +276,10 @@ impl<'a> MessageRouter for TestRouter<'a> {
275276
fn create_blinded_paths<
276277
T: secp256k1::Signing + secp256k1::Verification
277278
>(
278-
&self, recipient: PublicKey, context: MessageContext,
279+
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext,
279280
peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
280281
) -> Result<Vec<BlindedMessagePath>, ()> {
281-
self.router.create_blinded_paths(recipient, context, peers, secp_ctx)
282+
self.router.create_blinded_paths(params, recipient, context, peers, secp_ctx)
282283
}
283284

284285
fn create_compact_blinded_paths<
@@ -318,10 +319,10 @@ impl<'a> MessageRouter for TestMessageRouter<'a> {
318319
}
319320

320321
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
321-
&self, recipient: PublicKey, context: MessageContext,
322+
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext,
322323
peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
323324
) -> Result<Vec<BlindedMessagePath>, ()> {
324-
self.inner.create_blinded_paths(recipient, context, peers, secp_ctx)
325+
self.inner.create_blinded_paths(params, recipient, context, peers, secp_ctx)
325326
}
326327

327328
fn create_compact_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(

0 commit comments

Comments
 (0)