@@ -263,9 +263,27 @@ impl Builder {
263263 Arc :: clone ( & wallet) ,
264264 ) ) ;
265265
266+ // Step 12: Initialize the network graph, scorer, and router
267+ let network_graph = Arc :: new (
268+ io_utils:: read_network_graph ( Arc :: clone ( & config) , Arc :: clone ( & logger) )
269+ . expect ( "Failed to read the network graph" ) ,
270+ ) ;
271+ let scorer = Arc :: new ( Mutex :: new ( io_utils:: read_scorer (
272+ Arc :: clone ( & config) ,
273+ Arc :: clone ( & network_graph) ,
274+ Arc :: clone ( & logger) ,
275+ ) ) ) ;
276+
277+ let router = Arc :: new ( DefaultRouter :: new (
278+ Arc :: clone ( & network_graph) ,
279+ Arc :: clone ( & logger) ,
280+ keys_manager. get_secure_random_bytes ( ) ,
281+ Arc :: clone ( & scorer) ,
282+ ) ) ;
283+
266284 // Step 6: Read ChannelMonitor state from disk
267285 let mut channel_monitors = persister
268- . read_channelmonitors ( keys_manager. clone ( ) )
286+ . read_channelmonitors ( Arc :: clone ( & keys_manager) , Arc :: clone ( & keys_manager ) )
269287 . expect ( "Failed to read channel monitors from disk" ) ;
270288
271289 // Step 7: Initialize the ChannelManager
@@ -278,10 +296,13 @@ impl Builder {
278296 channel_monitor_mut_references. push ( channel_monitor) ;
279297 }
280298 let read_args = ChannelManagerReadArgs :: new (
299+ Arc :: clone ( & keys_manager) ,
300+ Arc :: clone ( & keys_manager) ,
281301 Arc :: clone ( & keys_manager) ,
282302 Arc :: clone ( & wallet) ,
283303 Arc :: clone ( & chain_monitor) ,
284304 Arc :: clone ( & wallet) ,
305+ Arc :: clone ( & router) ,
285306 Arc :: clone ( & logger) ,
286307 user_config,
287308 channel_monitor_mut_references,
@@ -304,8 +325,11 @@ impl Builder {
304325 Arc :: clone ( & wallet) ,
305326 Arc :: clone ( & chain_monitor) ,
306327 Arc :: clone ( & wallet) ,
328+ Arc :: clone ( & router) ,
307329 Arc :: clone ( & logger) ,
308330 Arc :: clone ( & keys_manager) ,
331+ Arc :: clone ( & keys_manager) ,
332+ Arc :: clone ( & keys_manager) ,
309333 user_config,
310334 chain_params,
311335 ) ;
@@ -322,10 +346,6 @@ impl Builder {
322346 }
323347
324348 // Step 10: Initialize the P2PGossipSync
325- let network_graph = Arc :: new (
326- io_utils:: read_network_graph ( Arc :: clone ( & config) , Arc :: clone ( & logger) )
327- . expect ( "Failed to read the network graph" ) ,
328- ) ;
329349 let gossip_sync = Arc :: new ( P2PGossipSync :: new (
330350 Arc :: clone ( & network_graph) ,
331351 None :: < Arc < dyn Access + Send + Sync > > ,
@@ -334,6 +354,7 @@ impl Builder {
334354
335355 //// Step 11: Initialize the PeerManager
336356 let onion_messenger: Arc < OnionMessenger > = Arc :: new ( OnionMessenger :: new (
357+ Arc :: clone ( & keys_manager) ,
337358 Arc :: clone ( & keys_manager) ,
338359 Arc :: clone ( & logger) ,
339360 IgnoringMessageHandler { } ,
@@ -357,13 +378,6 @@ impl Builder {
357378 IgnoringMessageHandler { } ,
358379 ) ) ;
359380
360- // Step 12: Initialize routing ProbabilisticScorer
361- let scorer = Arc :: new ( Mutex :: new ( io_utils:: read_scorer (
362- Arc :: clone ( & config) ,
363- Arc :: clone ( & network_graph) ,
364- Arc :: clone ( & logger) ,
365- ) ) ) ;
366-
367381 // Step 13: Init payment info storage
368382 // TODO: persist payment info to disk
369383 let inbound_payments = Arc :: new ( Mutex :: new ( HashMap :: new ( ) ) ) ;
@@ -410,6 +424,7 @@ impl Builder {
410424 gossip_sync,
411425 persister,
412426 logger,
427+ router,
413428 scorer,
414429 inbound_payments,
415430 outbound_payments,
@@ -447,6 +462,7 @@ pub struct Node {
447462 persister : Arc < FilesystemPersister > ,
448463 logger : Arc < FilesystemLogger > ,
449464 scorer : Arc < Mutex < Scorer > > ,
465+ router : Arc < Router > ,
450466 inbound_payments : Arc < PaymentInfoStorage > ,
451467 outbound_payments : Arc < PaymentInfoStorage > ,
452468 peer_store : Arc < PeerInfoStorage < FilesystemPersister > > ,
@@ -512,16 +528,9 @@ impl Node {
512528 Arc :: clone ( & self . config ) ,
513529 ) ) ;
514530
515- let router = DefaultRouter :: new (
516- Arc :: clone ( & self . network_graph ) ,
517- Arc :: clone ( & self . logger ) ,
518- self . keys_manager . get_secure_random_bytes ( ) ,
519- Arc :: clone ( & self . scorer ) ,
520- ) ;
521-
522531 let invoice_payer = Arc :: new ( InvoicePayer :: new (
523532 Arc :: clone ( & self . channel_manager ) ,
524- router,
533+ Arc :: clone ( & self . router ) ,
525534 Arc :: clone ( & self . logger ) ,
526535 Arc :: clone ( & event_handler) ,
527536 payment:: Retry :: Timeout ( LDK_PAYMENT_RETRY_TIMEOUT ) ,
@@ -1081,13 +1090,17 @@ pub(crate) type ChannelManager = lightning::ln::channelmanager::ChannelManager<
10811090 Arc < ChainMonitor > ,
10821091 Arc < Wallet < bdk:: sled:: Tree > > ,
10831092 Arc < WalletKeysManager < bdk:: sled:: Tree > > ,
1093+ Arc < WalletKeysManager < bdk:: sled:: Tree > > ,
1094+ Arc < WalletKeysManager < bdk:: sled:: Tree > > ,
10841095 Arc < Wallet < bdk:: sled:: Tree > > ,
1096+ Arc < Router > ,
10851097 Arc < FilesystemLogger > ,
10861098> ;
10871099
10881100pub ( crate ) type KeysManager = WalletKeysManager < bdk:: sled:: Tree > ;
10891101
1090- type InvoicePayer < F > = payment:: InvoicePayer < Arc < ChannelManager > , Router , Arc < FilesystemLogger > , F > ;
1102+ type InvoicePayer < F > =
1103+ payment:: InvoicePayer < Arc < ChannelManager > , Arc < Router > , Arc < FilesystemLogger > , F > ;
10911104
10921105type Router = DefaultRouter < Arc < NetworkGraph > , Arc < FilesystemLogger > , Arc < Mutex < Scorer > > > ;
10931106type Scorer = ProbabilisticScorer < Arc < NetworkGraph > , Arc < FilesystemLogger > > ;
@@ -1100,6 +1113,7 @@ pub(crate) type NetworkGraph = gossip::NetworkGraph<Arc<FilesystemLogger>>;
11001113pub ( crate ) type PaymentInfoStorage = Mutex < HashMap < PaymentHash , PaymentInfo > > ;
11011114
11021115pub ( crate ) type OnionMessenger = lightning:: onion_message:: OnionMessenger <
1116+ Arc < WalletKeysManager < bdk:: sled:: Tree > > ,
11031117 Arc < WalletKeysManager < bdk:: sled:: Tree > > ,
11041118 Arc < FilesystemLogger > ,
11051119 IgnoringMessageHandler ,
0 commit comments