Skip to content

Commit 88ecbe2

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 5c1af89 commit 88ecbe2

File tree

7 files changed

+71
-42
lines changed

7 files changed

+71
-42
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ 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::{BlindedPathParams, Destination, MessageRouter, OnionMessagePath};
6262
use lightning::routing::router::{InFlightHtlcs, Path, Route, RouteHop, RouteParameters, Router};
6363
use lightning::sign::{
6464
EntropySource, InMemorySigner, KeyMaterial, NodeSigner, Recipient, SignerProvider,
@@ -141,8 +141,8 @@ impl MessageRouter for FuzzRouter {
141141
}
142142

143143
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
144-
&self, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>,
145-
_secp_ctx: &Secp256k1<T>,
144+
&self, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext,
145+
_peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>,
146146
) -> Result<Vec<BlindedMessagePath>, ()> {
147147
unreachable!()
148148
}

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: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use lightning::onion_message::async_payments::{
1616
AsyncPaymentsMessageHandler, HeldHtlcAvailable, ReleaseHeldHtlc,
1717
};
1818
use lightning::onion_message::messenger::{
19-
CustomOnionMessageHandler, Destination, MessageRouter, MessageSendInstructions,
19+
BlindedPathParams, CustomOnionMessageHandler, Destination, MessageRouter, MessageSendInstructions,
2020
OnionMessagePath, OnionMessenger, Responder, ResponseInstruction,
2121
};
2222
use lightning::onion_message::offers::{OffersMessage, OffersMessageHandler};
@@ -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: 21 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, PATHS_PLACEHOLDER
77+
};
7678
use crate::onion_message::offers::{OffersMessage, OffersMessageHandler};
7779
use crate::sign::{EntropySource, NodeSigner, Recipient, SignerProvider};
7880
use crate::sign::ecdsa::EcdsaChannelSigner;
@@ -9086,7 +9088,11 @@ where
90869088

90879089
let hmac = payment_id.hmac_for_offer_payment(nonce, expanded_key);
90889090
let context = OffersContext::OutboundPayment { payment_id, nonce, hmac: Some(hmac) };
9089-
let reply_paths = self.create_blinded_paths(context)
9091+
let params = BlindedPathParams {
9092+
paths: PATHS_PLACEHOLDER,
9093+
is_compact: false,
9094+
};
9095+
let reply_paths = self.create_blinded_paths(params, context)
90909096
.map_err(|_| Bolt12SemanticError::MissingPaths)?;
90919097

90929098
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop(self);
@@ -9193,7 +9199,12 @@ where
91939199
let context = OffersContext::InboundPayment {
91949200
payment_hash: invoice.payment_hash(),
91959201
};
9196-
let reply_paths = self.create_blinded_paths(context)
9202+
9203+
let params = BlindedPathParams {
9204+
paths: PATHS_PLACEHOLDER,
9205+
is_compact: false,
9206+
};
9207+
let reply_paths = self.create_blinded_paths(params, context)
91979208
.map_err(|_| Bolt12SemanticError::MissingPaths)?;
91989209

91999210
let mut pending_offers_messages = self.pending_offers_messages.lock().unwrap();
@@ -9340,7 +9351,11 @@ where
93409351
if absolute_expiry.unwrap_or(Duration::MAX) <= max_short_lived_absolute_expiry {
93419352
self.create_compact_blinded_paths(context)
93429353
} else {
9343-
self.create_blinded_paths(context)
9354+
let params = BlindedPathParams {
9355+
paths: PATHS_PLACEHOLDER,
9356+
is_compact: false
9357+
};
9358+
self.create_blinded_paths(params, context)
93449359
}
93459360
}
93469361

@@ -9361,7 +9376,7 @@ where
93619376
/// [`MessageRouter::create_blinded_paths`].
93629377
///
93639378
/// Errors if the `MessageRouter` errors.
9364-
fn create_blinded_paths(&self, context: OffersContext) -> Result<Vec<BlindedMessagePath>, ()> {
9379+
fn create_blinded_paths(&self, params: BlindedPathParams, context: OffersContext) -> Result<Vec<BlindedMessagePath>, ()> {
93659380
let recipient = self.get_our_node_id();
93669381
let secp_ctx = &self.secp_ctx;
93679382

@@ -9374,7 +9389,7 @@ where
93749389
.collect::<Vec<_>>();
93759390

93769391
self.router
9377-
.create_blinded_paths(recipient, MessageContext::Offers(context), peers, secp_ctx)
9392+
.create_blinded_paths(params, recipient, MessageContext::Offers(context), peers, secp_ctx)
93789393
.and_then(|paths| (!paths.is_empty()).then(|| paths).ok_or(()))
93799394
}
93809395

lightning/src/onion_message/messenger.rs

Lines changed: 31 additions & 20 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
/// # }
@@ -436,7 +436,7 @@ pub enum MessageSendInstructions {
436436
///
437437
/// PATHS_PLACEHOLDER` is temporarily used as a default value in situations
438438
/// where a path index is required but has not yet been assigned or initialized.
439-
pub const PATHS_PLACEHOLDER: usize = 0;
439+
pub const PATHS_PLACEHOLDER: usize = 3;
440440

441441
/// Represents the types of [`BlindedMessagePath`] that can be created.
442442
///
@@ -460,7 +460,7 @@ pub trait MessageRouter {
460460
fn create_blinded_paths<
461461
T: secp256k1::Signing + secp256k1::Verification
462462
>(
463-
&self, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
463+
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
464464
) -> Result<Vec<BlindedMessagePath>, ()>;
465465

466466
/// Creates compact [`BlindedMessagePath`]s to the `recipient` node. The nodes in `peers` are
@@ -486,7 +486,13 @@ pub trait MessageRouter {
486486
.into_iter()
487487
.map(|MessageForwardNode { node_id, short_channel_id: _ }| node_id)
488488
.collect();
489-
self.create_blinded_paths(recipient, context, peers, secp_ctx)
489+
490+
// This parameter is a placeholder. This function is removed in the subsequent commits.
491+
let params = BlindedPathParams {
492+
paths: PATHS_PLACEHOLDER,
493+
is_compact: true,
494+
};
495+
self.create_blinded_paths(params, recipient, context, peers, secp_ctx)
490496
}
491497
}
492498

@@ -521,12 +527,9 @@ where
521527
I: ExactSizeIterator<Item = MessageForwardNode>,
522528
T: secp256k1::Signing + secp256k1::Verification
523529
>(
524-
network_graph: &G, recipient: PublicKey, context: MessageContext, peers: I,
525-
entropy_source: &ES, secp_ctx: &Secp256k1<T>, compact_paths: bool,
530+
params: BlindedPathParams, network_graph: &G, recipient: PublicKey, context: MessageContext, peers: I,
531+
entropy_source: &ES, secp_ctx: &Secp256k1<T>
526532
) -> Result<Vec<BlindedMessagePath>, ()> {
527-
// Limit the number of blinded paths that are computed.
528-
const MAX_PATHS: usize = 3;
529-
530533
// Ensure peers have at least three channels so that it is more difficult to infer the
531534
// recipient's node_id.
532535
const MIN_PEER_CHANNELS: usize = 3;
@@ -563,7 +566,7 @@ where
563566
.map(|(peer, _, _)| {
564567
BlindedMessagePath::new(&[peer], recipient, context.clone(), &**entropy_source, secp_ctx)
565568
})
566-
.take(MAX_PATHS)
569+
.take(params.paths)
567570
.collect::<Result<Vec<_>, _>>();
568571

569572
let mut paths = match paths {
@@ -578,7 +581,7 @@ where
578581
},
579582
}?;
580583

581-
if compact_paths {
584+
if params.is_compact {
582585
for path in &mut paths {
583586
path.use_compact_introduction_node(&network_graph);
584587
}
@@ -623,13 +626,13 @@ where
623626
pub(crate) fn create_blinded_paths<
624627
T: secp256k1::Signing + secp256k1::Verification
625628
>(
626-
network_graph: &G, recipient: PublicKey, context: MessageContext,
629+
params: BlindedPathParams, network_graph: &G, recipient: PublicKey, context: MessageContext,
627630
peers: Vec<PublicKey>, entropy_source: &ES, secp_ctx: &Secp256k1<T>,
628631
) -> Result<Vec<BlindedMessagePath>, ()> {
629632
let peers = peers
630633
.into_iter()
631634
.map(|node_id| MessageForwardNode { node_id, short_channel_id: None });
632-
Self::create_blinded_paths_from_iter(network_graph, recipient, context, peers.into_iter(), entropy_source, secp_ctx, false)
635+
Self::create_blinded_paths_from_iter(params, network_graph, recipient, context, peers.into_iter(), entropy_source, secp_ctx)
633636
}
634637

635638
pub(crate) fn create_compact_blinded_paths<
@@ -638,7 +641,11 @@ where
638641
network_graph: &G, recipient: PublicKey, context: MessageContext,
639642
peers: Vec<MessageForwardNode>, entropy_source: &ES, secp_ctx: &Secp256k1<T>,
640643
) -> Result<Vec<BlindedMessagePath>, ()> {
641-
Self::create_blinded_paths_from_iter(network_graph, recipient, context, peers.into_iter(), entropy_source, secp_ctx, true)
644+
let params = BlindedPathParams {
645+
paths: PATHS_PLACEHOLDER,
646+
is_compact: true,
647+
};
648+
Self::create_blinded_paths_from_iter(params, network_graph, recipient, context, peers.into_iter(), entropy_source, secp_ctx)
642649
}
643650
}
644651

@@ -656,9 +663,9 @@ where
656663
fn create_blinded_paths<
657664
T: secp256k1::Signing + secp256k1::Verification
658665
>(
659-
&self, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
666+
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
660667
) -> Result<Vec<BlindedMessagePath>, ()> {
661-
Self::create_blinded_paths(&self.network_graph, recipient, context, peers, &self.entropy_source, secp_ctx)
668+
Self::create_blinded_paths(params, &self.network_graph, recipient, context, peers, &self.entropy_source, secp_ctx)
662669
}
663670

664671
fn create_compact_blinded_paths<
@@ -1185,7 +1192,11 @@ where
11851192
MessageSendInstructions::WithReplyPath { destination, context }
11861193
|MessageSendInstructions::ForReply { instructions: ResponseInstruction { destination, context: Some(context) } } =>
11871194
{
1188-
match self.create_blinded_path(context) {
1195+
let params = BlindedPathParams {
1196+
paths: PATHS_PLACEHOLDER,
1197+
is_compact: false,
1198+
};
1199+
match self.create_blinded_path(params, context) {
11891200
Ok(reply_path) => (destination, Some(reply_path)),
11901201
Err(err) => {
11911202
log_trace!(
@@ -1250,7 +1261,7 @@ where
12501261
.map_err(|_| SendError::PathNotFound)
12511262
}
12521263

1253-
fn create_blinded_path(&self, context: MessageContext) -> Result<BlindedMessagePath, SendError> {
1264+
fn create_blinded_path(&self, params: BlindedPathParams, context: MessageContext) -> Result<BlindedMessagePath, SendError> {
12541265
let recipient = self.node_signer
12551266
.get_node_id(Recipient::Node)
12561267
.map_err(|_| SendError::GetNodeIdFailed)?;
@@ -1263,7 +1274,7 @@ where
12631274
.collect::<Vec<_>>();
12641275

12651276
self.message_router
1266-
.create_blinded_paths(recipient, context, peers, secp_ctx)
1277+
.create_blinded_paths(params, recipient, context, peers, secp_ctx)
12671278
.and_then(|paths| paths.into_iter().next().ok_or(()))
12681279
.map_err(|_| SendError::PathNotFound)
12691280
}

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)