Skip to content
This repository was archived by the owner on Feb 3, 2025. It is now read-only.

Commit f4f9d87

Browse files
committed
Custom message router
1 parent 4134f61 commit f4f9d87

File tree

2 files changed

+64
-20
lines changed

2 files changed

+64
-20
lines changed

mutiny-core/src/node.rs

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,13 @@ use lightning::{
3838
};
3939

4040
use crate::multiesplora::MultiEsploraClient;
41+
use crate::peermanager::LspMessageRouter;
4142
use crate::utils::get_monitor_version;
4243
use bitcoin::util::bip32::ExtendedPrivKey;
4344
use lightning::events::bump_transaction::{BumpTransactionEventHandler, Wallet};
4445
use lightning::ln::PaymentSecret;
4546
use lightning::offers::offer::Offer;
46-
use lightning::onion_message::{DefaultMessageRouter, OnionMessenger as LdkOnionMessenger};
47+
use lightning::onion_message::OnionMessenger as LdkOnionMessenger;
4748
use lightning::sign::{EntropySource, InMemorySigner, NodeSigner, Recipient};
4849
use lightning::util::config::MaxDustHTLCExposure;
4950
use lightning::{
@@ -99,7 +100,7 @@ pub(crate) type OnionMessenger<S: MutinyStorage> = LdkOnionMessenger<
99100
Arc<PhantomKeysManager<S>>,
100101
Arc<PhantomKeysManager<S>>,
101102
Arc<MutinyLogger>,
102-
Arc<DefaultMessageRouter>,
103+
Arc<LspMessageRouter>,
103104
Arc<PhantomChannelManager<S>>,
104105
IgnoringMessageHandler,
105106
>;
@@ -325,24 +326,6 @@ impl<S: MutinyStorage> Node<S> {
325326
logger: logger.clone(),
326327
});
327328

328-
let onion_message_handler = Arc::new(OnionMessenger::new(
329-
keys_manager.clone(),
330-
keys_manager.clone(),
331-
logger.clone(),
332-
Arc::new(DefaultMessageRouter {}),
333-
channel_manager.clone(),
334-
IgnoringMessageHandler {},
335-
));
336-
337-
// init peer manager
338-
let scb_message_handler = Arc::new(SCBMessageHandler::new());
339-
let ln_msg_handler = MessageHandler {
340-
chan_handler: channel_manager.clone(),
341-
route_handler,
342-
onion_message_handler,
343-
custom_message_handler: scb_message_handler.clone(),
344-
};
345-
346329
log_info!(logger, "creating lsp client");
347330
let lsp_client: Option<LspClient> = match node_index.lsp {
348331
None => {
@@ -360,6 +343,25 @@ impl<S: MutinyStorage> Node<S> {
360343
Some(ref lsp) => lsp_clients.iter().find(|c| &c.url == lsp).cloned(),
361344
};
362345

346+
let message_router = Arc::new(LspMessageRouter::new(lsp_client.as_ref().map(|l| l.pubkey)));
347+
let onion_message_handler = Arc::new(OnionMessenger::new(
348+
keys_manager.clone(),
349+
keys_manager.clone(),
350+
logger.clone(),
351+
message_router,
352+
channel_manager.clone(),
353+
IgnoringMessageHandler {},
354+
));
355+
356+
// init peer manager
357+
let scb_message_handler = Arc::new(SCBMessageHandler::new());
358+
let ln_msg_handler = MessageHandler {
359+
chan_handler: channel_manager.clone(),
360+
route_handler,
361+
onion_message_handler,
362+
custom_message_handler: scb_message_handler.clone(),
363+
};
364+
363365
let bump_tx_event_handler = Arc::new(BumpTransactionEventHandler::new(
364366
Arc::clone(&chain),
365367
Arc::new(Wallet::new(Arc::clone(&wallet), Arc::clone(&logger))),

mutiny-core/src/peermanager.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ use crate::networking::proxy::WsProxy;
3333
#[cfg(not(target_arch = "wasm32"))]
3434
use tokio::time;
3535

36+
use lightning::onion_message::{Destination, MessageRouter, OnionMessagePath};
3637
#[cfg(not(target_arch = "wasm32"))]
3738
use std::time::Duration;
3839

@@ -294,6 +295,47 @@ impl<S: MutinyStorage> RoutingMessageHandler for GossipMessageHandler<S> {
294295
}
295296
}
296297

298+
pub struct LspMessageRouter {
299+
intermediate_nodes: Vec<PublicKey>,
300+
}
301+
302+
impl LspMessageRouter {
303+
pub fn new(lsp_pubkey: Option<PublicKey>) -> Self {
304+
let intermediate_nodes = match lsp_pubkey {
305+
Some(pubkey) => vec![pubkey],
306+
None => vec![],
307+
};
308+
309+
Self { intermediate_nodes }
310+
}
311+
}
312+
313+
impl MessageRouter for LspMessageRouter {
314+
fn find_path(
315+
&self,
316+
_sender: PublicKey,
317+
peers: Vec<PublicKey>,
318+
destination: Destination,
319+
) -> Result<OnionMessagePath, ()> {
320+
let first_node = match &destination {
321+
Destination::Node(node_id) => *node_id,
322+
Destination::BlindedPath(path) => path.introduction_node_id,
323+
};
324+
325+
if peers.contains(&first_node) {
326+
Ok(OnionMessagePath {
327+
intermediate_nodes: vec![],
328+
destination,
329+
})
330+
} else {
331+
Ok(OnionMessagePath {
332+
intermediate_nodes: self.intermediate_nodes.clone(),
333+
destination,
334+
})
335+
}
336+
}
337+
}
338+
297339
pub(crate) async fn connect_peer_if_necessary<S: MutinyStorage>(
298340
#[cfg(target_arch = "wasm32")] websocket_proxy_addr: &str,
299341
peer_connection_info: &PubkeyConnectionInfo,

0 commit comments

Comments
 (0)