10
10
11
11
use lightning:: chain;
12
12
use lightning:: chain:: chaininterface:: { BroadcasterInterface , FeeEstimator } ;
13
+ use lightning:: chain:: chainmonitor:: ChainMonitor ;
14
+ use lightning:: chain:: channelmonitor;
13
15
use lightning:: chain:: keysinterface:: { Sign , KeysInterface } ;
14
16
use lightning:: ln:: channelmanager:: ChannelManager ;
15
17
use lightning:: ln:: msgs:: { ChannelMessageHandler , RoutingMessageHandler } ;
@@ -102,26 +104,31 @@ impl BackgroundProcessor {
102
104
/// [`FilesystemPersister::persist_manager`]: lightning_persister::FilesystemPersister::persist_manager
103
105
pub fn start <
104
106
Signer : ' static + Sign ,
105
- M : ' static + Deref + Send + Sync ,
107
+ CF : ' static + Deref + Send + Sync ,
108
+ CW : ' static + Deref + Send + Sync ,
106
109
T : ' static + Deref + Send + Sync ,
107
110
K : ' static + Deref + Send + Sync ,
108
111
F : ' static + Deref + Send + Sync ,
109
112
L : ' static + Deref + Send + Sync ,
113
+ P : ' static + Deref + Send + Sync ,
110
114
Descriptor : ' static + SocketDescriptor + Send + Sync ,
111
115
CMH : ' static + Deref + Send + Sync ,
112
116
RMH : ' static + Deref + Send + Sync ,
113
117
EH : ' static + EventHandler + Send + Sync ,
114
- CMP : ' static + Send + ChannelManagerPersister < Signer , M , T , K , F , L > ,
115
- CM : ' static + Deref < Target = ChannelManager < Signer , M , T , K , F , L > > + Send + Sync ,
118
+ CMP : ' static + Send + ChannelManagerPersister < Signer , CW , T , K , F , L > ,
119
+ M : ' static + Deref < Target = ChainMonitor < Signer , CF , T , F , L , P > > + Send + Sync ,
120
+ CM : ' static + Deref < Target = ChannelManager < Signer , CW , T , K , F , L > > + Send + Sync ,
116
121
PM : ' static + Deref < Target = PeerManager < Descriptor , CMH , RMH , L > > + Send + Sync ,
117
122
>
118
- ( persister : CMP , event_handler : EH , channel_manager : CM , peer_manager : PM , logger : L ) -> Self
123
+ ( persister : CMP , event_handler : EH , chain_monitor : M , channel_manager : CM , peer_manager : PM , logger : L ) -> Self
119
124
where
120
- M :: Target : ' static + chain:: Watch < Signer > ,
125
+ CF :: Target : ' static + chain:: Filter ,
126
+ CW :: Target : ' static + chain:: Watch < Signer > ,
121
127
T :: Target : ' static + BroadcasterInterface ,
122
128
K :: Target : ' static + KeysInterface < Signer = Signer > ,
123
129
F :: Target : ' static + FeeEstimator ,
124
130
L :: Target : ' static + Logger ,
131
+ P :: Target : ' static + channelmonitor:: Persist < Signer > ,
125
132
CMH :: Target : ' static + ChannelMessageHandler ,
126
133
RMH :: Target : ' static + RoutingMessageHandler ,
127
134
{
@@ -132,6 +139,7 @@ impl BackgroundProcessor {
132
139
loop {
133
140
peer_manager. process_events ( ) ;
134
141
channel_manager. process_pending_events ( & event_handler) ;
142
+ chain_monitor. process_pending_events ( & event_handler) ;
135
143
let updates_available =
136
144
channel_manager. await_persistable_update_timeout ( Duration :: from_millis ( 100 ) ) ;
137
145
if updates_available {
@@ -199,6 +207,7 @@ mod tests {
199
207
struct Node {
200
208
node : Arc < SimpleArcChannelManager < ChainMonitor , test_utils:: TestBroadcaster , test_utils:: TestFeeEstimator , test_utils:: TestLogger > > ,
201
209
peer_manager : Arc < PeerManager < TestDescriptor , Arc < test_utils:: TestChannelMessageHandler > , Arc < test_utils:: TestRoutingMessageHandler > , Arc < test_utils:: TestLogger > > > ,
210
+ chain_monitor : Arc < ChainMonitor > ,
202
211
persister : Arc < FilesystemPersister > ,
203
212
logger : Arc < test_utils:: TestLogger > ,
204
213
}
@@ -239,7 +248,7 @@ mod tests {
239
248
let manager = Arc :: new ( ChannelManager :: new ( fee_estimator. clone ( ) , chain_monitor. clone ( ) , tx_broadcaster, logger. clone ( ) , keys_manager. clone ( ) , UserConfig :: default ( ) , params) ) ;
240
249
let msg_handler = MessageHandler { chan_handler : Arc :: new ( test_utils:: TestChannelMessageHandler :: new ( ) ) , route_handler : Arc :: new ( test_utils:: TestRoutingMessageHandler :: new ( ) ) } ;
241
250
let peer_manager = Arc :: new ( PeerManager :: new ( msg_handler, keys_manager. get_node_secret ( ) , & seed, logger. clone ( ) ) ) ;
242
- let node = Node { node : manager, peer_manager, persister, logger } ;
251
+ let node = Node { node : manager, peer_manager, chain_monitor , persister, logger } ;
243
252
nodes. push ( node) ;
244
253
}
245
254
nodes
@@ -303,7 +312,7 @@ mod tests {
303
312
let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
304
313
let persister = move |node : & ChannelManager < InMemorySigner , Arc < ChainMonitor > , Arc < test_utils:: TestBroadcaster > , Arc < KeysManager > , Arc < test_utils:: TestFeeEstimator > , Arc < test_utils:: TestLogger > > | FilesystemPersister :: persist_manager ( data_dir. clone ( ) , node) ;
305
314
let event_handler = |_| { } ;
306
- let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
315
+ let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes [ 0 ] . node . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
307
316
308
317
macro_rules! check_persisted_data {
309
318
( $node: expr, $filepath: expr, $expected_bytes: expr) => {
@@ -356,7 +365,7 @@ mod tests {
356
365
let data_dir = nodes[ 0 ] . persister . get_data_dir ( ) ;
357
366
let persister = move |node : & ChannelManager < InMemorySigner , Arc < ChainMonitor > , Arc < test_utils:: TestBroadcaster > , Arc < KeysManager > , Arc < test_utils:: TestFeeEstimator > , Arc < test_utils:: TestLogger > > | FilesystemPersister :: persist_manager ( data_dir. clone ( ) , node) ;
358
367
let event_handler = |_| { } ;
359
- let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
368
+ let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes [ 0 ] . node . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
360
369
loop {
361
370
let log_entries = nodes[ 0 ] . logger . lines . lock ( ) . unwrap ( ) ;
362
371
let desired_log = "Calling ChannelManager's and PeerManager's timer_tick_occurred" . to_string ( ) ;
@@ -376,7 +385,7 @@ mod tests {
376
385
377
386
let persister = |_: & _ | Err ( std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , "test" ) ) ;
378
387
let event_handler = |_| { } ;
379
- let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
388
+ let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes [ 0 ] . node . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
380
389
let _ = bg_processor. thread_handle . join ( ) . unwrap ( ) . expect_err ( "Errored persisting manager: test" ) ;
381
390
}
382
391
@@ -392,7 +401,7 @@ mod tests {
392
401
let event_handler = move |event| {
393
402
sender. send ( handle_funding_generation_ready ! ( event, channel_value) ) . unwrap ( ) ;
394
403
} ;
395
- let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . node . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
404
+ let bg_processor = BackgroundProcessor :: start ( persister, event_handler, nodes[ 0 ] . chain_monitor . clone ( ) , nodes [ 0 ] . node . clone ( ) , nodes[ 0 ] . peer_manager . clone ( ) , nodes[ 0 ] . logger . clone ( ) ) ;
396
405
397
406
// Open a channel and check that the FundingGenerationReady event was handled.
398
407
begin_open_channel ! ( nodes[ 0 ] , nodes[ 1 ] , channel_value) ;
0 commit comments