11use crate :: labels:: LabelStorage ;
22use crate :: ldkstorage:: { persist_monitor, ChannelOpenParams } ;
3+ use crate :: multiesplora:: MultiEsploraClient ;
34use crate :: nodemanager:: ChannelClosure ;
5+ use crate :: peermanager:: LspMessageRouter ;
6+ use crate :: scb:: message_handler:: SCBMessageHandler ;
47use crate :: scb:: StaticChannelBackup ;
8+ use crate :: utils:: get_monitor_version;
59use crate :: {
610 background:: process_events_async,
711 chain:: MutinyChain ,
@@ -18,33 +22,24 @@ use crate::{
1822 peermanager:: { GossipMessageHandler , PeerManager , PeerManagerImpl } ,
1923 utils:: { self , sleep} ,
2024} ;
21- use crate :: { keymanager:: PhantomKeysManager , scorer:: HubPreferentialScorer } ;
22-
23- use crate :: scb:: message_handler:: SCBMessageHandler ;
2425use crate :: { fees:: P2WSH_OUTPUT_SIZE , peermanager:: connect_peer_if_necessary} ;
26+ use crate :: { keymanager:: PhantomKeysManager , scorer:: HubPreferentialScorer } ;
2527use crate :: { lspclient:: FeeRequest , storage:: MutinyStorage } ;
2628use anyhow:: { anyhow, Context } ;
2729use bdk:: FeeRate ;
2830use bitcoin:: hashes:: { hex:: ToHex , sha256:: Hash as Sha256 } ;
2931use bitcoin:: secp256k1:: rand;
32+ use bitcoin:: util:: bip32:: ExtendedPrivKey ;
3033use bitcoin:: { hashes:: Hash , secp256k1:: PublicKey , BlockHash , Network , OutPoint } ;
3134use core:: time:: Duration ;
32- use lightning:: chain:: channelmonitor:: ChannelMonitor ;
33- use lightning:: util:: ser:: { ReadableArgs , Writeable } ;
34- use lightning:: {
35- ln:: channelmanager:: { RecipientOnionFields , RetryableSendFailure } ,
36- routing:: scoring:: ProbabilisticScoringFeeParameters ,
37- util:: config:: ChannelConfig ,
38- } ;
39-
40- use crate :: multiesplora:: MultiEsploraClient ;
41- use crate :: utils:: get_monitor_version;
42- use bitcoin:: util:: bip32:: ExtendedPrivKey ;
4335use futures_util:: lock:: Mutex ;
36+ use lightning:: chain:: channelmonitor:: ChannelMonitor ;
4437use lightning:: events:: bump_transaction:: { BumpTransactionEventHandler , Wallet } ;
4538use lightning:: ln:: PaymentSecret ;
39+ use lightning:: onion_message:: OnionMessenger as LdkOnionMessenger ;
4640use lightning:: sign:: { EntropySource , InMemorySigner , NodeSigner , Recipient } ;
4741use lightning:: util:: config:: MaxDustHTLCExposure ;
42+ use lightning:: util:: ser:: { ReadableArgs , Writeable } ;
4843use lightning:: {
4944 chain:: { chainmonitor, Filter , Watch } ,
5045 ln:: {
@@ -63,6 +58,11 @@ use lightning::{
6358 logger:: Logger ,
6459 } ,
6560} ;
61+ use lightning:: {
62+ ln:: channelmanager:: { RecipientOnionFields , RetryableSendFailure } ,
63+ routing:: scoring:: ProbabilisticScoringFeeParameters ,
64+ util:: config:: ChannelConfig ,
65+ } ;
6666use lightning_invoice:: payment:: PaymentError ;
6767use lightning_invoice:: {
6868 payment:: { pay_invoice, pay_zero_value_invoice} ,
@@ -94,10 +94,19 @@ pub(crate) type RapidGossipSync =
9494
9595pub ( crate ) type NetworkGraph = gossip:: NetworkGraph < Arc < MutinyLogger > > ;
9696
97+ pub ( crate ) type OnionMessenger < S : MutinyStorage > = LdkOnionMessenger <
98+ Arc < PhantomKeysManager < S > > ,
99+ Arc < PhantomKeysManager < S > > ,
100+ Arc < MutinyLogger > ,
101+ Arc < LspMessageRouter > ,
102+ Arc < PhantomChannelManager < S > > ,
103+ IgnoringMessageHandler ,
104+ > ;
105+
97106pub ( crate ) type MessageHandler < S : MutinyStorage > = LdkMessageHandler <
98107 Arc < PhantomChannelManager < S > > ,
99108 Arc < GossipMessageHandler < S > > ,
100- Arc < IgnoringMessageHandler > ,
109+ Arc < OnionMessenger < S > > ,
101110 Arc < SCBMessageHandler > ,
102111> ;
103112
@@ -310,21 +319,6 @@ impl<S: MutinyStorage> Node<S> {
310319 }
311320 }
312321
313- let route_handler = Arc :: new ( GossipMessageHandler {
314- storage : persister. storage . clone ( ) ,
315- network_graph : gossip_sync. network_graph ( ) . clone ( ) ,
316- logger : logger. clone ( ) ,
317- } ) ;
318-
319- // init peer manager
320- let scb_message_handler = Arc :: new ( SCBMessageHandler :: new ( ) ) ;
321- let ln_msg_handler = MessageHandler {
322- chan_handler : channel_manager. clone ( ) ,
323- route_handler,
324- onion_message_handler : Arc :: new ( IgnoringMessageHandler { } ) ,
325- custom_message_handler : scb_message_handler. clone ( ) ,
326- } ;
327-
328322 log_info ! ( logger, "creating lsp client" ) ;
329323 let lsp_client: Option < LspClient > = match node_index. lsp {
330324 None => {
@@ -341,6 +335,31 @@ impl<S: MutinyStorage> Node<S> {
341335 }
342336 Some ( ref lsp) => lsp_clients. iter ( ) . find ( |c| & c. url == lsp) . cloned ( ) ,
343337 } ;
338+ let lsp_client_pubkey = lsp_client. clone ( ) . map ( |lsp| lsp. pubkey ) ;
339+ let message_router = Arc :: new ( LspMessageRouter :: new ( lsp_client_pubkey) ) ;
340+ let onion_message_handler = Arc :: new ( OnionMessenger :: new (
341+ keys_manager. clone ( ) ,
342+ keys_manager. clone ( ) ,
343+ logger. clone ( ) ,
344+ message_router,
345+ channel_manager. clone ( ) ,
346+ IgnoringMessageHandler { } ,
347+ ) ) ;
348+
349+ let route_handler = Arc :: new ( GossipMessageHandler {
350+ storage : persister. storage . clone ( ) ,
351+ network_graph : gossip_sync. network_graph ( ) . clone ( ) ,
352+ logger : logger. clone ( ) ,
353+ } ) ;
354+
355+ // init peer manager
356+ let scb_message_handler = Arc :: new ( SCBMessageHandler :: new ( ) ) ;
357+ let ln_msg_handler = MessageHandler {
358+ chan_handler : channel_manager. clone ( ) ,
359+ route_handler,
360+ onion_message_handler,
361+ custom_message_handler : scb_message_handler. clone ( ) ,
362+ } ;
344363
345364 let bump_tx_event_handler = Arc :: new ( BumpTransactionEventHandler :: new (
346365 Arc :: clone ( & chain) ,
@@ -349,8 +368,6 @@ impl<S: MutinyStorage> Node<S> {
349368 Arc :: clone ( & logger) ,
350369 ) ) ;
351370
352- let lsp_client_pubkey = lsp_client. clone ( ) . map ( |lsp| lsp. pubkey ) ;
353-
354371 // init event handler
355372 let event_handler = EventHandler :: new (
356373 channel_manager. clone ( ) ,
0 commit comments