Skip to content

Commit 52efbc6

Browse files
committed
Remove create_compact_blinded_paths
1. The `params` parameter now allows specifying the type of blinded path to be created, enabling a single function to handle the processing for both compact and full-length blinded paths. 2. This change renders the `create_compact_blinded_paths` function redundant, leading to its removal. 3. With this commit, the blinded path creation process is streamlined to a single function capable of creating any type of blinded path.
1 parent c078155 commit 52efbc6

File tree

8 files changed

+43
-134
lines changed

8 files changed

+43
-134
lines changed

fuzz/src/chanmon_consistency.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use bitcoin::hashes::sha256d::Hash as Sha256dHash;
3333
use bitcoin::hashes::Hash as TraitImport;
3434
use bitcoin::WPubkeyHash;
3535

36-
use lightning::blinded_path::message::{BlindedMessagePath, MessageContext};
36+
use lightning::blinded_path::message::{BlindedMessagePath, ForwardNode, MessageContext};
3737
use lightning::blinded_path::payment::{BlindedPaymentPath, ReceiveTlvs};
3838
use lightning::chain;
3939
use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator};
@@ -58,7 +58,9 @@ use lightning::ln::script::ShutdownScript;
5858
use lightning::ln::types::{ChannelId, PaymentHash, PaymentPreimage, PaymentSecret};
5959
use lightning::offers::invoice::{BlindedPayInfo, 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,
@@ -139,8 +141,8 @@ impl MessageRouter for FuzzRouter {
139141
}
140142

141143
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
142-
&self, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>,
143-
_secp_ctx: &Secp256k1<T>,
144+
&self, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext,
145+
_peers: Vec<ForwardNode>, _secp_ctx: &Secp256k1<T>,
144146
) -> Result<Vec<BlindedMessagePath>, ()> {
145147
unreachable!()
146148
}

fuzz/src/full_stack.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use bitcoin::hashes::Hash as _;
3030
use bitcoin::hex::FromHex;
3131
use bitcoin::WPubkeyHash;
3232

33-
use lightning::blinded_path::message::{BlindedMessagePath, MessageContext};
33+
use lightning::blinded_path::message::{BlindedMessagePath, ForwardNode, MessageContext};
3434
use lightning::blinded_path::payment::{BlindedPaymentPath, ReceiveTlvs};
3535
use lightning::chain;
3636
use lightning::chain::chaininterface::{BroadcasterInterface, ConfirmationTarget, FeeEstimator};
@@ -51,7 +51,9 @@ use lightning::ln::script::ShutdownScript;
5151
use lightning::ln::types::{ChannelId, PaymentHash, PaymentPreimage, PaymentSecret};
5252
use lightning::offers::invoice::{BlindedPayInfo, 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, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>,
180-
_secp_ctx: &Secp256k1<T>,
181+
&self, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext,
182+
_peers: Vec<ForwardNode>, _secp_ctx: &Secp256k1<T>,
181183
) -> Result<Vec<BlindedMessagePath>, ()> {
182184
unreachable!()
183185
}

fuzz/src/invoice_request_deser.rs

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use crate::utils::test_logger;
1111
use bitcoin::secp256k1::{self, Keypair, Parity, PublicKey, Secp256k1, SecretKey};
1212
use core::convert::TryFrom;
13+
use lightning::blinded_path::message::ForwardNode;
1314
use lightning::blinded_path::payment::{
1415
BlindedPaymentPath, Bolt12OfferContext, ForwardNode, ForwardTlvs, PaymentConstraints,
1516
PaymentContext, PaymentRelay, ReceiveTlvs,

fuzz/src/onion_message.rs

+4-4
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, OnionMessagePath, OnionMessenger,
20-
PendingOnionMessage, Responder, ResponseInstruction,
19+
BlindedPathParams, CustomOnionMessageHandler, Destination, MessageRouter, OnionMessagePath,
20+
OnionMessenger, PendingOnionMessage, 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, _params: BlindedPathParams _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>,
100-
_secp_ctx: &Secp256k1<T>,
99+
&self, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext,
100+
_peers: Vec<ForwardNode>, _secp_ctx: &Secp256k1<T>,
101101
) -> Result<Vec<BlindedMessagePath>, ()> {
102102
unreachable!()
103103
}

lightning/src/ln/channelmanager.rs

+18-33
Original file line numberDiff line numberDiff line change
@@ -2481,9 +2481,7 @@ const MAX_NO_CHANNEL_PEERS: usize = 250;
24812481
/// short-lived, while anything with a greater expiration is considered long-lived.
24822482
///
24832483
/// Using [`ChannelManager::create_offer_builder`] or [`ChannelManager::create_refund_builder`],
2484-
/// will included a [`BlindedMessagePath`] created using:
2485-
/// - [`MessageRouter::create_compact_blinded_paths`] when short-lived, and
2486-
/// - [`MessageRouter::create_blinded_paths`] when long-lived.
2484+
/// will included a [`BlindedMessagePath`] created using [`MessageRouter::create_blinded_paths`].
24872485
///
24882486
/// Using compact [`BlindedMessagePath`]s may provide better privacy as the [`MessageRouter`] could select
24892487
/// more hops. However, since they use short channel ids instead of pubkeys, they are more likely to
@@ -9312,40 +9310,27 @@ where
93129310
.map(|(node_id, peer_state)| (node_id, peer_state.lock().unwrap()))
93139311
.filter(|(_, peer)| peer.is_connected)
93149312
.filter(|(_, peer)| peer.latest_features.supports_onion_messages())
9315-
.map(|(node_id, _)| *node_id)
9316-
.collect::<Vec<_>>();
9317-
9318-
self.router
9319-
.create_blinded_paths(params, recipient, MessageContext::Offers(context), peers, secp_ctx)
9320-
.and_then(|paths| (!paths.is_empty()).then(|| paths).ok_or(()))
9321-
}
9322-
9323-
/// Creates a collection of blinded paths by delegating to
9324-
/// [`MessageRouter::create_compact_blinded_paths`].
9325-
///
9326-
/// Errors if the `MessageRouter` errors.
9327-
#[allow(unused)]
9328-
fn create_compact_blinded_paths(&self, context: OffersContext) -> Result<Vec<BlindedMessagePath>, ()> {
9329-
let recipient = self.get_our_node_id();
9330-
let secp_ctx = &self.secp_ctx;
9331-
9332-
let peers = self.per_peer_state.read().unwrap()
9333-
.iter()
9334-
.map(|(node_id, peer_state)| (node_id, peer_state.lock().unwrap()))
9335-
.filter(|(_, peer)| peer.is_connected)
9336-
.filter(|(_, peer)| peer.latest_features.supports_onion_messages())
9337-
.map(|(node_id, peer)| ForwardNode {
9338-
node_id: *node_id,
9339-
short_channel_id: peer.channel_by_id
9340-
.iter()
9341-
.filter(|(_, channel)| channel.context().is_usable())
9342-
.min_by_key(|(_, channel)| channel.context().channel_creation_height)
9343-
.and_then(|(_, channel)| channel.context().get_short_channel_id()),
9313+
.map(|(node_id, peer)| {
9314+
if params.is_compact {
9315+
ForwardNode {
9316+
node_id: *node_id,
9317+
short_channel_id: peer.channel_by_id
9318+
.iter()
9319+
.filter(|(_, channel)| channel.context().is_usable())
9320+
.min_by_key(|(_, channel)| channel.context().channel_creation_height)
9321+
.and_then(|(_, channel)| channel.context().get_short_channel_id()),
9322+
}
9323+
} else {
9324+
ForwardNode {
9325+
node_id: *node_id,
9326+
short_channel_id: None,
9327+
}
9328+
}
93449329
})
93459330
.collect::<Vec<_>>();
93469331

93479332
self.router
9348-
.create_compact_blinded_paths(recipient, MessageContext::Offers(context), peers, secp_ctx)
9333+
.create_blinded_paths(params, recipient, MessageContext::Offers(context), peers, secp_ctx)
93499334
.and_then(|paths| (!paths.is_empty()).then(|| paths).ok_or(()))
93509335
}
93519336

lightning/src/onion_message/messenger.rs

+4-61
Original file line numberDiff line numberDiff line change
@@ -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, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext, _peers: Vec<PublicKey>, _secp_ctx: &Secp256k1<T>
178+
/// # &self, _params: BlindedPathParams, _recipient: PublicKey, _context: MessageContext, _peers: Vec<ForwardNode>, _secp_ctx: &Secp256k1<T>
179179
/// # ) -> Result<Vec<BlindedMessagePath>, ()> {
180180
/// # unreachable!()
181181
/// # }
@@ -461,40 +461,8 @@ pub trait MessageRouter {
461461
fn create_blinded_paths<
462462
T: secp256k1::Signing + secp256k1::Verification
463463
>(
464-
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
464+
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<ForwardNode>, secp_ctx: &Secp256k1<T>,
465465
) -> Result<Vec<BlindedMessagePath>, ()>;
466-
467-
/// Creates compact [`BlindedMessagePath`]s to the `recipient` node. The nodes in `peers` are
468-
/// assumed to be direct peers with the `recipient`.
469-
///
470-
/// Compact blinded paths use short channel ids instead of pubkeys for a smaller serialization,
471-
/// which is beneficial when a QR code is used to transport the data. The SCID is passed using a
472-
/// [`ForwardNode`] but may be `None` for graceful degradation.
473-
///
474-
/// Implementations using additional intermediate nodes are responsible for using a
475-
/// [`ForwardNode`] with `Some` short channel id, if possible. Similarly, implementations should
476-
/// call [`BlindedMessagePath::use_compact_introduction_node`].
477-
///
478-
/// The provided implementation simply delegates to [`MessageRouter::create_blinded_paths`],
479-
/// ignoring the short channel ids.
480-
fn create_compact_blinded_paths<
481-
T: secp256k1::Signing + secp256k1::Verification
482-
>(
483-
&self, recipient: PublicKey, context: MessageContext,
484-
peers: Vec<ForwardNode>, secp_ctx: &Secp256k1<T>,
485-
) -> Result<Vec<BlindedMessagePath>, ()> {
486-
let peers = peers
487-
.into_iter()
488-
.map(|ForwardNode { node_id, short_channel_id: _ }| node_id)
489-
.collect();
490-
491-
// This parameter is a placeholder. This function is removed in the subsequent commits.
492-
let params = BlindedPathParams {
493-
paths: PATHS_PLACEHOLDER,
494-
is_compact: true,
495-
};
496-
self.create_blinded_paths(params, recipient, context, peers, secp_ctx)
497-
}
498466
}
499467

500468
/// A [`MessageRouter`] that can only route to a directly connected [`Destination`].
@@ -628,24 +596,8 @@ where
628596
T: secp256k1::Signing + secp256k1::Verification
629597
>(
630598
params: BlindedPathParams, network_graph: &G, recipient: PublicKey, context: MessageContext,
631-
peers: Vec<PublicKey>, entropy_source: &ES, secp_ctx: &Secp256k1<T>,
632-
) -> Result<Vec<BlindedMessagePath>, ()> {
633-
let peers = peers
634-
.into_iter()
635-
.map(|node_id| ForwardNode { node_id, short_channel_id: None });
636-
Self::create_blinded_paths_from_iter(params, network_graph, recipient, context, peers.into_iter(), entropy_source, secp_ctx)
637-
}
638-
639-
pub(crate) fn create_compact_blinded_paths<
640-
T: secp256k1::Signing + secp256k1::Verification
641-
>(
642-
network_graph: &G, recipient: PublicKey, context: MessageContext,
643599
peers: Vec<ForwardNode>, entropy_source: &ES, secp_ctx: &Secp256k1<T>,
644600
) -> Result<Vec<BlindedMessagePath>, ()> {
645-
let params = BlindedPathParams {
646-
paths: PATHS_PLACEHOLDER,
647-
is_compact: true,
648-
};
649601
Self::create_blinded_paths_from_iter(params, network_graph, recipient, context, peers.into_iter(), entropy_source, secp_ctx)
650602
}
651603
}
@@ -664,19 +616,10 @@ where
664616
fn create_blinded_paths<
665617
T: secp256k1::Signing + secp256k1::Verification
666618
>(
667-
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
619+
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<ForwardNode>, secp_ctx: &Secp256k1<T>,
668620
) -> Result<Vec<BlindedMessagePath>, ()> {
669621
Self::create_blinded_paths(params, &self.network_graph, recipient, context, peers, &self.entropy_source, secp_ctx)
670622
}
671-
672-
fn create_compact_blinded_paths<
673-
T: secp256k1::Signing + secp256k1::Verification
674-
>(
675-
&self, recipient: PublicKey, context: MessageContext, peers: Vec<ForwardNode>, secp_ctx: &Secp256k1<T>,
676-
) -> Result<Vec<BlindedMessagePath>, ()> {
677-
Self::create_compact_blinded_paths(&self.network_graph, recipient, context, peers, &self.entropy_source, secp_ctx)
678-
}
679-
680623
}
681624

682625
/// A path for sending an [`OnionMessage`].
@@ -1251,7 +1194,7 @@ where
12511194
let peers = self.message_recipients.lock().unwrap()
12521195
.iter()
12531196
.filter(|(_, peer)| matches!(peer, OnionMessageRecipient::ConnectedPeer(_)))
1254-
.map(|(node_id, _ )| *node_id)
1197+
.map(|(node_id, _)| ForwardNode { node_id: *node_id, short_channel_id: None })
12551198
.collect::<Vec<_>>();
12561199

12571200
self.message_router

lightning/src/routing/router.rs

+2-10
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
use bitcoin::secp256k1::{PublicKey, Secp256k1, self};
1313

1414
use crate::blinded_path::{BlindedHop, Direction, IntroductionNode};
15-
use crate::blinded_path::message::{self, BlindedMessagePath, MessageContext};
15+
use crate::blinded_path::message::{ForwardNode, BlindedMessagePath, MessageContext};
1616
use crate::blinded_path::payment::{BlindedPaymentPath, ForwardTlvs, PaymentConstraints, PaymentRelay, ReceiveTlvs, self};
1717
use crate::ln::{PaymentHash, PaymentPreimage};
1818
use crate::ln::channel_state::ChannelDetails;
@@ -196,18 +196,10 @@ impl< G: Deref<Target = NetworkGraph<L>>, L: Deref, ES: Deref, S: Deref, SP: Siz
196196
fn create_blinded_paths<
197197
T: secp256k1::Signing + secp256k1::Verification
198198
> (
199-
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
199+
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext, peers: Vec<ForwardNode>, secp_ctx: &Secp256k1<T>,
200200
) -> Result<Vec<BlindedMessagePath>, ()> {
201201
DefaultMessageRouter::create_blinded_paths(params, &self.network_graph, recipient, context, peers, &self.entropy_source, secp_ctx)
202202
}
203-
204-
fn create_compact_blinded_paths<
205-
T: secp256k1::Signing + secp256k1::Verification
206-
> (
207-
&self, recipient: PublicKey, context: MessageContext, peers: Vec<message::ForwardNode>, secp_ctx: &Secp256k1<T>,
208-
) -> Result<Vec<BlindedMessagePath>, ()> {
209-
DefaultMessageRouter::create_compact_blinded_paths(&self.network_graph, recipient, context, peers, &self.entropy_source, secp_ctx)
210-
}
211203
}
212204

213205
/// A trait defining behavior for routing a payment.

lightning/src/util/test_utils.rs

+2-18
Original file line numberDiff line numberDiff line change
@@ -270,18 +270,9 @@ impl<'a> MessageRouter for TestRouter<'a> {
270270
T: secp256k1::Signing + secp256k1::Verification
271271
>(
272272
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext,
273-
peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
274-
) -> Result<Vec<BlindedMessagePath>, ()> {
275-
self.router.create_blinded_paths(params, recipient, context, peers, secp_ctx)
276-
}
277-
278-
fn create_compact_blinded_paths<
279-
T: secp256k1::Signing + secp256k1::Verification
280-
>(
281-
&self, recipient: PublicKey, context: MessageContext,
282273
peers: Vec<ForwardNode>, secp_ctx: &Secp256k1<T>,
283274
) -> Result<Vec<BlindedMessagePath>, ()> {
284-
self.router.create_compact_blinded_paths(recipient, context, peers, secp_ctx)
275+
self.router.create_blinded_paths(params, recipient, context, peers, secp_ctx)
285276
}
286277
}
287278

@@ -315,16 +306,9 @@ impl<'a> MessageRouter for TestMessageRouter<'a> {
315306

316307
fn create_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
317308
&self, params: BlindedPathParams, recipient: PublicKey, context: MessageContext,
318-
peers: Vec<PublicKey>, secp_ctx: &Secp256k1<T>,
319-
) -> Result<Vec<BlindedMessagePath>, ()> {
320-
self.inner.create_blinded_paths(params, recipient, context, peers, secp_ctx)
321-
}
322-
323-
fn create_compact_blinded_paths<T: secp256k1::Signing + secp256k1::Verification>(
324-
&self, recipient: PublicKey, context: MessageContext,
325309
peers: Vec<ForwardNode>, secp_ctx: &Secp256k1<T>,
326310
) -> Result<Vec<BlindedMessagePath>, ()> {
327-
self.inner.create_compact_blinded_paths(recipient, context, peers, secp_ctx)
311+
self.inner.create_blinded_paths(params, recipient, context, peers, secp_ctx)
328312
}
329313
}
330314

0 commit comments

Comments
 (0)