Skip to content

Commit ae2297e

Browse files
committed
f Move IP/EH/R creation to runtime setup
1 parent 6de101c commit ae2297e

File tree

1 file changed

+51
-44
lines changed

1 file changed

+51
-44
lines changed

src/lib.rs

Lines changed: 51 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -382,34 +382,6 @@ impl Builder {
382382
Arc::new(EventQueue::new(Arc::clone(&persister)))
383383
};
384384

385-
let event_handler = Arc::new(EventHandler::new(
386-
Arc::clone(&wallet),
387-
Arc::clone(&event_queue),
388-
Arc::clone(&channel_manager),
389-
Arc::clone(&network_graph),
390-
Arc::clone(&keys_manager),
391-
Arc::clone(&inbound_payments),
392-
Arc::clone(&outbound_payments),
393-
Arc::clone(&logger),
394-
Arc::clone(&config),
395-
));
396-
397-
//// Step 16: Create Router and InvoicePayer
398-
let router = DefaultRouter::new(
399-
Arc::clone(&network_graph),
400-
Arc::clone(&logger),
401-
keys_manager.get_secure_random_bytes(),
402-
Arc::clone(&scorer),
403-
);
404-
405-
let invoice_payer = Arc::new(InvoicePayer::new(
406-
Arc::clone(&channel_manager),
407-
router,
408-
Arc::clone(&logger),
409-
Arc::clone(&event_handler),
410-
payment::Retry::Timeout(LDK_PAYMENT_RETRY_TIMEOUT),
411-
));
412-
413385
let peer_store = if let Ok(mut f) = fs::File::open(format!(
414386
"{}/{}",
415387
ldk_data_dir.clone(),
@@ -431,16 +403,15 @@ impl Builder {
431403
wallet,
432404
tx_sync,
433405
event_queue,
434-
event_handler,
435406
channel_manager,
436407
chain_monitor,
437408
peer_manager,
438409
keys_manager,
410+
network_graph,
439411
gossip_sync,
440412
persister,
441413
logger,
442414
scorer,
443-
invoice_payer,
444415
inbound_payments,
445416
outbound_payments,
446417
peer_store,
@@ -453,6 +424,8 @@ impl Builder {
453424
struct Runtime {
454425
tokio_runtime: Arc<tokio::runtime::Runtime>,
455426
_background_processor: BackgroundProcessor,
427+
invoice_payer:
428+
Arc<InvoicePayer<Arc<EventHandler<Arc<FilesystemPersister>, Arc<FilesystemLogger>>>>>,
456429
stop_networking: Arc<AtomicBool>,
457430
stop_wallet_sync: Arc<AtomicBool>,
458431
}
@@ -466,17 +439,15 @@ pub struct Node {
466439
wallet: Arc<Wallet<bdk::sled::Tree>>,
467440
tx_sync: Arc<EsploraSyncClient<Arc<FilesystemLogger>>>,
468441
event_queue: Arc<EventQueue<Arc<FilesystemPersister>>>,
469-
event_handler: Arc<EventHandler<Arc<FilesystemPersister>, Arc<FilesystemLogger>>>,
470442
channel_manager: Arc<ChannelManager>,
471443
chain_monitor: Arc<ChainMonitor>,
472444
peer_manager: Arc<PeerManager>,
473445
keys_manager: Arc<KeysManager>,
446+
network_graph: Arc<NetworkGraph>,
474447
gossip_sync: Arc<GossipSync>,
475448
persister: Arc<FilesystemPersister>,
476449
logger: Arc<FilesystemLogger>,
477450
scorer: Arc<Mutex<Scorer>>,
478-
invoice_payer:
479-
Arc<InvoicePayer<Arc<EventHandler<Arc<FilesystemPersister>, Arc<FilesystemLogger>>>>>,
480451
inbound_payments: Arc<PaymentInfoStorage>,
481452
outbound_payments: Arc<PaymentInfoStorage>,
482453
peer_store: Arc<PeerInfoStorage<FilesystemPersister>>,
@@ -517,7 +488,6 @@ impl Node {
517488

518489
// Drop the held runtimes.
519490
self.wallet.drop_runtime();
520-
self.event_handler.drop_runtime();
521491

522492
// Drop the runtime, which stops the background processor and any possibly remaining tokio threads.
523493
*run_lock = None;
@@ -529,7 +499,34 @@ impl Node {
529499
Arc::new(tokio::runtime::Builder::new_multi_thread().enable_all().build().unwrap());
530500

531501
self.wallet.set_runtime(Arc::clone(&tokio_runtime));
532-
self.event_handler.set_runtime(Arc::clone(&tokio_runtime));
502+
503+
let event_handler = Arc::new(EventHandler::new(
504+
Arc::clone(&self.wallet),
505+
Arc::clone(&self.event_queue),
506+
Arc::clone(&self.channel_manager),
507+
Arc::clone(&self.network_graph),
508+
Arc::clone(&self.keys_manager),
509+
Arc::clone(&self.inbound_payments),
510+
Arc::clone(&self.outbound_payments),
511+
Arc::clone(&tokio_runtime),
512+
Arc::clone(&self.logger),
513+
Arc::clone(&self.config),
514+
));
515+
516+
let router = DefaultRouter::new(
517+
Arc::clone(&self.network_graph),
518+
Arc::clone(&self.logger),
519+
self.keys_manager.get_secure_random_bytes(),
520+
Arc::clone(&self.scorer),
521+
);
522+
523+
let invoice_payer = Arc::new(InvoicePayer::new(
524+
Arc::clone(&self.channel_manager),
525+
router,
526+
Arc::clone(&self.logger),
527+
Arc::clone(&event_handler),
528+
payment::Retry::Timeout(LDK_PAYMENT_RETRY_TIMEOUT),
529+
));
533530

534531
// Setup wallet sync
535532
let wallet = Arc::clone(&self.wallet);
@@ -657,7 +654,7 @@ impl Node {
657654
// Setup background processing
658655
let _background_processor = BackgroundProcessor::start(
659656
Arc::clone(&self.persister),
660-
Arc::clone(&self.invoice_payer),
657+
Arc::clone(&invoice_payer),
661658
Arc::clone(&self.chain_monitor),
662659
Arc::clone(&self.channel_manager),
663660
BPGossipSync::p2p(Arc::clone(&self.gossip_sync)),
@@ -667,8 +664,13 @@ impl Node {
667664
);
668665

669666
// TODO: frequently check back on background_processor if there was an error
670-
671-
Ok(Runtime { tokio_runtime, _background_processor, stop_networking, stop_wallet_sync })
667+
Ok(Runtime {
668+
tokio_runtime,
669+
_background_processor,
670+
invoice_payer,
671+
stop_networking,
672+
stop_wallet_sync,
673+
})
672674
}
673675

674676
/// Blocks until the next event is available.
@@ -717,10 +719,10 @@ impl Node {
717719
return Err(Error::NotRunning);
718720
}
719721

720-
let peer_info = PeerInfo::try_from(node_pubkey_and_address.to_string())?;
721-
722722
let runtime = runtime_lock.as_ref().unwrap();
723723

724+
let peer_info = PeerInfo::try_from(node_pubkey_and_address.to_string())?;
725+
724726
let con_peer_info = peer_info.clone();
725727
let con_success = Arc::new(AtomicBool::new(false));
726728
let con_success_cloned = Arc::clone(&con_success);
@@ -822,12 +824,15 @@ impl Node {
822824

823825
/// Send a payement given an invoice.
824826
pub fn send_payment(&self, invoice: Invoice) -> Result<PaymentHash, Error> {
825-
if self.running.read().unwrap().is_none() {
827+
let runtime_lock = self.running.read().unwrap();
828+
if runtime_lock.is_none() {
826829
return Err(Error::NotRunning);
827830
}
828831

832+
let runtime = runtime_lock.as_ref().unwrap();
833+
829834
// TODO: ensure we never tried paying the given payment hash before
830-
let status = match self.invoice_payer.pay_invoice(&invoice) {
835+
let status = match runtime.invoice_payer.pay_invoice(&invoice) {
831836
Ok(_payment_id) => {
832837
let payee_pubkey = invoice.recover_payee_pub_key();
833838
// TODO: is this unwrap safe? Would a payment to an invoice with None amount ever
@@ -872,16 +877,18 @@ impl Node {
872877
pub fn send_spontaneous_payment(
873878
&self, amount_msat: u64, node_id: &str,
874879
) -> Result<PaymentHash, Error> {
875-
if self.running.read().unwrap().is_none() {
880+
let runtime_lock = self.running.read().unwrap();
881+
if runtime_lock.is_none() {
876882
return Err(Error::NotRunning);
877883
}
878884

885+
let runtime = runtime_lock.as_ref().unwrap();
879886
let pubkey = hex_utils::to_compressed_pubkey(node_id).ok_or(Error::PeerInfoParseFailed)?;
880887

881888
let payment_preimage = PaymentPreimage(self.keys_manager.get_secure_random_bytes());
882889
let payment_hash = PaymentHash(Sha256::hash(&payment_preimage.0).into_inner());
883890

884-
let status = match self.invoice_payer.pay_pubkey(
891+
let status = match runtime.invoice_payer.pay_pubkey(
885892
pubkey,
886893
payment_preimage,
887894
amount_msat,

0 commit comments

Comments
 (0)