@@ -24,19 +24,17 @@ extern crate lightning_rapid_gossip_sync;
24
24
use lightning:: chain;
25
25
use lightning:: chain:: chaininterface:: { BroadcasterInterface , FeeEstimator } ;
26
26
use lightning:: chain:: chainmonitor:: { ChainMonitor , Persist } ;
27
- use lightning:: sign:: { EntropySource , NodeSigner , SignerProvider } ;
28
27
use lightning:: events:: { Event , PathFailure } ;
29
28
#[ cfg( feature = "std" ) ]
30
29
use lightning:: events:: EventHandler ;
31
30
#[ cfg( any( feature = "std" , feature = "futures" ) ) ]
32
31
use lightning:: events:: EventsProvider ;
33
32
34
- use lightning:: ln:: channelmanager:: ChannelManager ;
33
+ use lightning:: ln:: channelmanager:: AChannelManager ;
35
34
use lightning:: ln:: msgs:: OnionMessageHandler ;
36
35
use lightning:: ln:: peer_handler:: APeerManager ;
37
36
use lightning:: routing:: gossip:: { NetworkGraph , P2PGossipSync } ;
38
37
use lightning:: routing:: utxo:: UtxoLookup ;
39
- use lightning:: routing:: router:: Router ;
40
38
use lightning:: routing:: scoring:: { ScoreUpdate , WriteableScore } ;
41
39
use lightning:: util:: logger:: Logger ;
42
40
use lightning:: util:: persist:: Persister ;
@@ -81,6 +79,8 @@ use alloc::vec::Vec;
81
79
/// However, as long as [`ChannelMonitor`] backups are sound, no funds besides those used for
82
80
/// unilateral chain closure fees are at risk.
83
81
///
82
+ /// [`ChannelManager`]: lightning::ln::channelmanager::ChannelManager
83
+ /// [`ChannelManager::timer_tick_occurred`]: lightning::ln::channelmanager::ChannelManager::timer_tick_occurred
84
84
/// [`ChannelMonitor`]: lightning::chain::channelmonitor::ChannelMonitor
85
85
/// [`Event`]: lightning::events::Event
86
86
/// [`PeerManager::timer_tick_occurred`]: lightning::ln::peer_handler::PeerManager::timer_tick_occurred
@@ -286,7 +286,7 @@ macro_rules! define_run_body {
286
286
$timer_elapsed: expr, $check_slow_await: expr, $time_fetch: expr,
287
287
) => { {
288
288
log_trace!( $logger, "Calling ChannelManager's timer_tick_occurred on startup" ) ;
289
- $channel_manager. timer_tick_occurred( ) ;
289
+ $channel_manager. get_cm ( ) . timer_tick_occurred( ) ;
290
290
log_trace!( $logger, "Rebroadcasting monitor's pending claims on startup" ) ;
291
291
$chain_monitor. rebroadcast_pending_claims( ) ;
292
292
@@ -336,14 +336,14 @@ macro_rules! define_run_body {
336
336
break ;
337
337
}
338
338
339
- if $channel_manager. get_and_clear_needs_persistence( ) {
339
+ if $channel_manager. get_cm ( ) . get_and_clear_needs_persistence( ) {
340
340
log_trace!( $logger, "Persisting ChannelManager..." ) ;
341
- $persister. persist_manager( & * $channel_manager) ?;
341
+ $persister. persist_manager( & $channel_manager) ?;
342
342
log_trace!( $logger, "Done persisting ChannelManager." ) ;
343
343
}
344
344
if $timer_elapsed( & mut last_freshness_call, FRESHNESS_TIMER ) {
345
345
log_trace!( $logger, "Calling ChannelManager's timer_tick_occurred" ) ;
346
- $channel_manager. timer_tick_occurred( ) ;
346
+ $channel_manager. get_cm ( ) . timer_tick_occurred( ) ;
347
347
last_freshness_call = $get_timer( FRESHNESS_TIMER ) ;
348
348
}
349
349
if $timer_elapsed( & mut last_onion_message_handler_call, ONION_MESSAGE_HANDLER_TIMER ) {
@@ -440,7 +440,7 @@ macro_rules! define_run_body {
440
440
// After we exit, ensure we persist the ChannelManager one final time - this avoids
441
441
// some races where users quit while channel updates were in-flight, with
442
442
// ChannelMonitor update(s) persisted without a corresponding ChannelManager update.
443
- $persister. persist_manager( & * $channel_manager) ?;
443
+ $persister. persist_manager( & $channel_manager) ?;
444
444
445
445
// Persist Scorer on exit
446
446
if let Some ( ref scorer) = $scorer {
@@ -539,45 +539,64 @@ use core::task;
539
539
/// # use std::sync::atomic::{AtomicBool, Ordering};
540
540
/// # use std::time::SystemTime;
541
541
/// # use lightning_background_processor::{process_events_async, GossipSync};
542
- /// # struct MyStore {}
543
- /// # impl lightning::util::persist::KVStore for MyStore {
542
+ /// # struct Logger {}
543
+ /// # impl lightning::util::logger::Logger for Logger {
544
+ /// # fn log(&self, _record: lightning::util::logger::Record) {}
545
+ /// # }
546
+ /// # struct Store {}
547
+ /// # impl lightning::util::persist::KVStore for Store {
544
548
/// # fn read(&self, primary_namespace: &str, secondary_namespace: &str, key: &str) -> io::Result<Vec<u8>> { Ok(Vec::new()) }
545
549
/// # fn write(&self, primary_namespace: &str, secondary_namespace: &str, key: &str, buf: &[u8]) -> io::Result<()> { Ok(()) }
546
550
/// # fn remove(&self, primary_namespace: &str, secondary_namespace: &str, key: &str, lazy: bool) -> io::Result<()> { Ok(()) }
547
551
/// # fn list(&self, primary_namespace: &str, secondary_namespace: &str) -> io::Result<Vec<String>> { Ok(Vec::new()) }
548
552
/// # }
549
- /// # struct MyEventHandler {}
550
- /// # impl MyEventHandler {
553
+ /// # struct EventHandler {}
554
+ /// # impl EventHandler {
551
555
/// # async fn handle_event(&self, _: lightning::events::Event) {}
552
556
/// # }
553
557
/// # #[derive(Eq, PartialEq, Clone, Hash)]
554
- /// # struct MySocketDescriptor {}
555
- /// # impl lightning::ln::peer_handler::SocketDescriptor for MySocketDescriptor {
558
+ /// # struct SocketDescriptor {}
559
+ /// # impl lightning::ln::peer_handler::SocketDescriptor for SocketDescriptor {
556
560
/// # fn send_data(&mut self, _data: &[u8], _resume_read: bool) -> usize { 0 }
557
561
/// # fn disconnect_socket(&mut self) {}
558
562
/// # }
559
- /// # type MyBroadcaster = dyn lightning::chain::chaininterface::BroadcasterInterface + Send + Sync;
560
- /// # type MyFeeEstimator = dyn lightning::chain::chaininterface::FeeEstimator + Send + Sync;
561
- /// # type MyNodeSigner = dyn lightning::sign::NodeSigner + Send + Sync;
562
- /// # type MyUtxoLookup = dyn lightning::routing::utxo::UtxoLookup + Send + Sync;
563
- /// # type MyFilter = dyn lightning::chain::Filter + Send + Sync;
564
- /// # type MyLogger = dyn lightning::util::logger::Logger + Send + Sync;
565
- /// # type MyChainMonitor = lightning::chain::chainmonitor::ChainMonitor<lightning::sign::InMemorySigner, Arc<MyFilter>, Arc<MyBroadcaster>, Arc<MyFeeEstimator>, Arc<MyLogger>, Arc<MyStore>>;
566
- /// # type MyPeerManager = lightning::ln::peer_handler::SimpleArcPeerManager<MySocketDescriptor, MyChainMonitor, MyBroadcaster, MyFeeEstimator, Arc<MyUtxoLookup>, MyLogger>;
567
- /// # type MyNetworkGraph = lightning::routing::gossip::NetworkGraph<Arc<MyLogger>>;
568
- /// # type MyGossipSync = lightning::routing::gossip::P2PGossipSync<Arc<MyNetworkGraph>, Arc<MyUtxoLookup>, Arc<MyLogger>>;
569
- /// # type MyChannelManager = lightning::ln::channelmanager::SimpleArcChannelManager<MyChainMonitor, MyBroadcaster, MyFeeEstimator, MyLogger>;
570
- /// # type MyScorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<MyNetworkGraph>, Arc<MyLogger>>>;
571
- ///
572
- /// # async fn setup_background_processing(my_persister: Arc<MyStore>, my_event_handler: Arc<MyEventHandler>, my_chain_monitor: Arc<MyChainMonitor>, my_channel_manager: Arc<MyChannelManager>, my_gossip_sync: Arc<MyGossipSync>, my_logger: Arc<MyLogger>, my_scorer: Arc<MyScorer>, my_peer_manager: Arc<MyPeerManager>) {
573
- /// let background_persister = Arc::clone(&my_persister);
574
- /// let background_event_handler = Arc::clone(&my_event_handler);
575
- /// let background_chain_mon = Arc::clone(&my_chain_monitor);
576
- /// let background_chan_man = Arc::clone(&my_channel_manager);
577
- /// let background_gossip_sync = GossipSync::p2p(Arc::clone(&my_gossip_sync));
578
- /// let background_peer_man = Arc::clone(&my_peer_manager);
579
- /// let background_logger = Arc::clone(&my_logger);
580
- /// let background_scorer = Arc::clone(&my_scorer);
563
+ /// # type ChainMonitor<B, F, FE> = lightning::chain::chainmonitor::ChainMonitor<lightning::sign::InMemorySigner, Arc<F>, Arc<B>, Arc<FE>, Arc<Logger>, Arc<Store>>;
564
+ /// # type NetworkGraph = lightning::routing::gossip::NetworkGraph<Arc<Logger>>;
565
+ /// # type P2PGossipSync<UL> = lightning::routing::gossip::P2PGossipSync<Arc<NetworkGraph>, Arc<UL>, Arc<Logger>>;
566
+ /// # type ChannelManager<B, F, FE> = lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor<B, F, FE>, B, FE, Logger>;
567
+ /// # type Scorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<NetworkGraph>, Arc<Logger>>>;
568
+ /// # type PeerManager<B, F, FE, UL> = lightning::ln::peer_handler::SimpleArcPeerManager<SocketDescriptor, ChainMonitor<B, F, FE>, B, FE, Arc<UL>, Logger>;
569
+ /// #
570
+ /// # struct Node<
571
+ /// # B: lightning::chain::chaininterface::BroadcasterInterface + Send + Sync + 'static,
572
+ /// # F: lightning::chain::Filter + Send + Sync + 'static,
573
+ /// # FE: lightning::chain::chaininterface::FeeEstimator + Send + Sync + 'static,
574
+ /// # UL: lightning::routing::utxo::UtxoLookup + Send + Sync + 'static,
575
+ /// # > {
576
+ /// # peer_manager: Arc<PeerManager<B, F, FE, UL>>,
577
+ /// # event_handler: Arc<EventHandler>,
578
+ /// # channel_manager: Arc<ChannelManager<B, F, FE>>,
579
+ /// # chain_monitor: Arc<ChainMonitor<B, F, FE>>,
580
+ /// # gossip_sync: Arc<P2PGossipSync<UL>>,
581
+ /// # persister: Arc<Store>,
582
+ /// # logger: Arc<Logger>,
583
+ /// # scorer: Arc<Scorer>,
584
+ /// # }
585
+ /// #
586
+ /// # async fn setup_background_processing<
587
+ /// # B: lightning::chain::chaininterface::BroadcasterInterface + Send + Sync + 'static,
588
+ /// # F: lightning::chain::Filter + Send + Sync + 'static,
589
+ /// # FE: lightning::chain::chaininterface::FeeEstimator + Send + Sync + 'static,
590
+ /// # UL: lightning::routing::utxo::UtxoLookup + Send + Sync + 'static,
591
+ /// # >(node: Node<B, F, FE, UL>) {
592
+ /// let background_persister = Arc::clone(&node.persister);
593
+ /// let background_event_handler = Arc::clone(&node.event_handler);
594
+ /// let background_chain_mon = Arc::clone(&node.chain_monitor);
595
+ /// let background_chan_man = Arc::clone(&node.channel_manager);
596
+ /// let background_gossip_sync = GossipSync::p2p(Arc::clone(&node.gossip_sync));
597
+ /// let background_peer_man = Arc::clone(&node.peer_manager);
598
+ /// let background_logger = Arc::clone(&node.logger);
599
+ /// let background_scorer = Arc::clone(&node.scorer);
581
600
///
582
601
/// // Setup the sleeper.
583
602
/// let (stop_sender, stop_receiver) = tokio::sync::watch::channel(());
@@ -607,9 +626,9 @@ use core::task;
607
626
/// sleeper,
608
627
/// mobile_interruptable_platform,
609
628
/// || Some(SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap())
610
- /// )
611
- /// .await
612
- /// .expect("Failed to process events");
629
+ /// )
630
+ /// .await
631
+ /// .expect("Failed to process events");
613
632
/// });
614
633
///
615
634
/// // Stop the background processing.
@@ -622,21 +641,16 @@ pub async fn process_events_async<
622
641
' a ,
623
642
UL : ' static + Deref + Send + Sync ,
624
643
CF : ' static + Deref + Send + Sync ,
625
- CW : ' static + Deref + Send + Sync ,
626
644
T : ' static + Deref + Send + Sync ,
627
- ES : ' static + Deref + Send + Sync ,
628
- NS : ' static + Deref + Send + Sync ,
629
- SP : ' static + Deref + Send + Sync ,
630
645
F : ' static + Deref + Send + Sync ,
631
- R : ' static + Deref + Send + Sync ,
632
646
G : ' static + Deref < Target = NetworkGraph < L > > + Send + Sync ,
633
647
L : ' static + Deref + Send + Sync ,
634
648
P : ' static + Deref + Send + Sync ,
635
649
EventHandlerFuture : core:: future:: Future < Output = ( ) > ,
636
650
EventHandler : Fn ( Event ) -> EventHandlerFuture ,
637
651
PS : ' static + Deref + Send ,
638
- M : ' static + Deref < Target = ChainMonitor < <SP :: Target as SignerProvider >:: EcdsaSigner , CF , T , F , L , P > > + Send + Sync ,
639
- CM : ' static + Deref < Target = ChannelManager < CW , T , ES , NS , SP , F , R , L > > + Send + Sync ,
652
+ M : ' static + Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P > > + Send + Sync ,
653
+ CM : ' static + Deref + Send + Sync ,
640
654
PGS : ' static + Deref < Target = P2PGossipSync < G , UL , L > > + Send + Sync ,
641
655
RGS : ' static + Deref < Target = RapidGossipSync < G , L > > + Send ,
642
656
PM : ' static + Deref + Send + Sync ,
@@ -653,16 +667,12 @@ pub async fn process_events_async<
653
667
where
654
668
UL :: Target : ' static + UtxoLookup ,
655
669
CF :: Target : ' static + chain:: Filter ,
656
- CW :: Target : ' static + chain:: Watch < <SP :: Target as SignerProvider >:: EcdsaSigner > ,
657
670
T :: Target : ' static + BroadcasterInterface ,
658
- ES :: Target : ' static + EntropySource ,
659
- NS :: Target : ' static + NodeSigner ,
660
- SP :: Target : ' static + SignerProvider ,
661
671
F :: Target : ' static + FeeEstimator ,
662
- R :: Target : ' static + Router ,
663
672
L :: Target : ' static + Logger ,
664
- P :: Target : ' static + Persist < <SP :: Target as SignerProvider >:: EcdsaSigner > ,
665
- PS :: Target : ' static + Persister < ' a , CW , T , ES , NS , SP , F , R , L , SC > ,
673
+ P :: Target : ' static + Persist < <CM :: Target as AChannelManager >:: Signer > ,
674
+ PS :: Target : ' static + Persister < ' a , CM , L , SC > ,
675
+ CM :: Target : AChannelManager + Send + Sync ,
666
676
PM :: Target : APeerManager + Send + Sync ,
667
677
{
668
678
let mut should_break = false ;
@@ -693,11 +703,11 @@ where
693
703
define_run_body ! (
694
704
persister, chain_monitor,
695
705
chain_monitor. process_pending_events_async( async_event_handler) . await ,
696
- channel_manager, channel_manager. process_pending_events_async( async_event_handler) . await ,
706
+ channel_manager, channel_manager. get_cm ( ) . process_pending_events_async( async_event_handler) . await ,
697
707
peer_manager, process_onion_message_handler_events_async( & peer_manager, async_event_handler) . await ,
698
708
gossip_sync, logger, scorer, should_break, {
699
709
let fut = Selector {
700
- a: channel_manager. get_event_or_persistence_needed_future( ) ,
710
+ a: channel_manager. get_cm ( ) . get_event_or_persistence_needed_future( ) ,
701
711
b: chain_monitor. get_update_future( ) ,
702
712
c: sleeper( if mobile_interruptable_platform { Duration :: from_millis( 100 ) } else { Duration :: from_secs( FASTEST_TIMER ) } ) ,
703
713
} ;
@@ -788,20 +798,15 @@ impl BackgroundProcessor {
788
798
' a ,
789
799
UL : ' static + Deref + Send + Sync ,
790
800
CF : ' static + Deref + Send + Sync ,
791
- CW : ' static + Deref + Send + Sync ,
792
801
T : ' static + Deref + Send + Sync ,
793
- ES : ' static + Deref + Send + Sync ,
794
- NS : ' static + Deref + Send + Sync ,
795
- SP : ' static + Deref + Send + Sync ,
796
802
F : ' static + Deref + Send + Sync ,
797
- R : ' static + Deref + Send + Sync ,
798
803
G : ' static + Deref < Target = NetworkGraph < L > > + Send + Sync ,
799
804
L : ' static + Deref + Send + Sync ,
800
805
P : ' static + Deref + Send + Sync ,
801
806
EH : ' static + EventHandler + Send ,
802
807
PS : ' static + Deref + Send ,
803
- M : ' static + Deref < Target = ChainMonitor < <SP :: Target as SignerProvider >:: EcdsaSigner , CF , T , F , L , P > > + Send + Sync ,
804
- CM : ' static + Deref < Target = ChannelManager < CW , T , ES , NS , SP , F , R , L > > + Send + Sync ,
808
+ M : ' static + Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P > > + Send + Sync ,
809
+ CM : ' static + Deref + Send + Sync ,
805
810
PGS : ' static + Deref < Target = P2PGossipSync < G , UL , L > > + Send + Sync ,
806
811
RGS : ' static + Deref < Target = RapidGossipSync < G , L > > + Send ,
807
812
PM : ' static + Deref + Send + Sync ,
@@ -814,16 +819,12 @@ impl BackgroundProcessor {
814
819
where
815
820
UL :: Target : ' static + UtxoLookup ,
816
821
CF :: Target : ' static + chain:: Filter ,
817
- CW :: Target : ' static + chain:: Watch < <SP :: Target as SignerProvider >:: EcdsaSigner > ,
818
822
T :: Target : ' static + BroadcasterInterface ,
819
- ES :: Target : ' static + EntropySource ,
820
- NS :: Target : ' static + NodeSigner ,
821
- SP :: Target : ' static + SignerProvider ,
822
823
F :: Target : ' static + FeeEstimator ,
823
- R :: Target : ' static + Router ,
824
824
L :: Target : ' static + Logger ,
825
- P :: Target : ' static + Persist < <SP :: Target as SignerProvider >:: EcdsaSigner > ,
826
- PS :: Target : ' static + Persister < ' a , CW , T , ES , NS , SP , F , R , L , SC > ,
825
+ P :: Target : ' static + Persist < <CM :: Target as AChannelManager >:: Signer > ,
826
+ PS :: Target : ' static + Persister < ' a , CM , L , SC > ,
827
+ CM :: Target : AChannelManager + Send + Sync ,
827
828
PM :: Target : APeerManager + Send + Sync ,
828
829
{
829
830
let stop_thread = Arc :: new ( AtomicBool :: new ( false ) ) ;
@@ -849,12 +850,12 @@ impl BackgroundProcessor {
849
850
} ;
850
851
define_run_body ! (
851
852
persister, chain_monitor, chain_monitor. process_pending_events( & event_handler) ,
852
- channel_manager, channel_manager. process_pending_events( & event_handler) ,
853
+ channel_manager, channel_manager. get_cm ( ) . process_pending_events( & event_handler) ,
853
854
peer_manager,
854
855
peer_manager. onion_message_handler( ) . process_pending_events( & event_handler) ,
855
856
gossip_sync, logger, scorer, stop_thread. load( Ordering :: Acquire ) ,
856
857
{ Sleeper :: from_two_futures(
857
- & channel_manager. get_event_or_persistence_needed_future( ) ,
858
+ & channel_manager. get_cm ( ) . get_event_or_persistence_needed_future( ) ,
858
859
& chain_monitor. get_update_future( )
859
860
) . wait_timeout( Duration :: from_millis( 100 ) ) ; } ,
860
861
|_| Instant :: now( ) , |time: & Instant , dur| time. elapsed( ) . as_secs( ) > dur, false ,
0 commit comments