@@ -29,8 +29,7 @@ use bitcoin::hashes::sha256::Hash as Sha256;
29
29
use bitcoin:: hash_types:: { BlockHash , WPubkeyHash } ;
30
30
31
31
use lightning:: chain;
32
- use lightning:: chain:: chainmonitor;
33
- use lightning:: chain:: channelmonitor;
32
+ use lightning:: chain:: { chainmonitor, channelmonitor, Watch } ;
34
33
use lightning:: chain:: channelmonitor:: { ChannelMonitor , ChannelMonitorUpdateErr , MonitorEvent } ;
35
34
use lightning:: chain:: transaction:: OutPoint ;
36
35
use lightning:: chain:: chaininterface:: { BroadcasterInterface , ConfirmationTarget , FeeEstimator } ;
@@ -45,7 +44,6 @@ use lightning::util::logger::Logger;
45
44
use lightning:: util:: config:: UserConfig ;
46
45
use lightning:: util:: events:: { EventsProvider , MessageSendEventsProvider } ;
47
46
use lightning:: util:: ser:: { Readable , ReadableArgs , Writeable , Writer } ;
48
- use lightning:: util:: test_utils:: OnlyReadsKeysInterface ;
49
47
use lightning:: routing:: router:: { Route , RouteHop } ;
50
48
51
49
@@ -87,6 +85,7 @@ impl Writer for VecWriter {
87
85
88
86
struct TestChainMonitor {
89
87
pub logger : Arc < dyn Logger > ,
88
+ pub keys : Arc < KeyProvider > ,
90
89
pub chain_monitor : Arc < chainmonitor:: ChainMonitor < EnforcingChannelKeys , Arc < dyn chain:: Filter > , Arc < TestBroadcaster > , Arc < FuzzEstimator > , Arc < dyn Logger > , Arc < TestPersister > > > ,
91
90
pub update_ret : Mutex < Result < ( ) , channelmonitor:: ChannelMonitorUpdateErr > > ,
92
91
// If we reload a node with an old copy of ChannelMonitors, the ChannelManager deserialization
@@ -98,17 +97,18 @@ struct TestChainMonitor {
98
97
pub should_update_manager : atomic:: AtomicBool ,
99
98
}
100
99
impl TestChainMonitor {
101
- pub fn new ( broadcaster : Arc < TestBroadcaster > , logger : Arc < dyn Logger > , feeest : Arc < FuzzEstimator > , persister : Arc < TestPersister > ) -> Self {
100
+ pub fn new ( broadcaster : Arc < TestBroadcaster > , logger : Arc < dyn Logger > , feeest : Arc < FuzzEstimator > , persister : Arc < TestPersister > , keys : Arc < KeyProvider > ) -> Self {
102
101
Self {
103
102
chain_monitor : Arc :: new ( chainmonitor:: ChainMonitor :: new ( None , broadcaster, logger. clone ( ) , feeest, persister) ) ,
104
103
logger,
104
+ keys,
105
105
update_ret : Mutex :: new ( Ok ( ( ) ) ) ,
106
106
latest_monitors : Mutex :: new ( HashMap :: new ( ) ) ,
107
107
should_update_manager : atomic:: AtomicBool :: new ( false ) ,
108
108
}
109
109
}
110
110
}
111
- impl chain :: Watch for TestChainMonitor {
111
+ impl Watch for TestChainMonitor {
112
112
type Keys = EnforcingChannelKeys ;
113
113
114
114
fn watch_channel ( & self , funding_txo : OutPoint , monitor : channelmonitor:: ChannelMonitor < EnforcingChannelKeys > ) -> Result < ( ) , channelmonitor:: ChannelMonitorUpdateErr > {
@@ -129,12 +129,13 @@ impl chain::Watch for TestChainMonitor {
129
129
hash_map:: Entry :: Vacant ( _) => panic ! ( "Didn't have monitor on update call" ) ,
130
130
} ;
131
131
let mut deserialized_monitor = <( BlockHash , channelmonitor:: ChannelMonitor < EnforcingChannelKeys > ) >::
132
- read ( & mut Cursor :: new ( & map_entry. get ( ) . 1 ) , & OnlyReadsKeysInterface { } ) . unwrap ( ) . 1 ;
132
+ read ( & mut Cursor :: new ( & map_entry. get ( ) . 1 ) , & * self . keys ) . unwrap ( ) . 1 ;
133
133
deserialized_monitor. update_monitor ( & update, & & TestBroadcaster { } , & & FuzzEstimator { } , & self . logger ) . unwrap ( ) ;
134
134
let mut ser = VecWriter ( Vec :: new ( ) ) ;
135
135
deserialized_monitor. write ( & mut ser) . unwrap ( ) ;
136
136
map_entry. insert ( ( update. update_id , ser. 0 ) ) ;
137
137
self . should_update_manager . store ( true , atomic:: Ordering :: Relaxed ) ;
138
+ assert ! ( self . chain_monitor. update_channel( funding_txo, update) . is_ok( ) ) ;
138
139
self . update_ret . lock ( ) . unwrap ( ) . clone ( )
139
140
}
140
141
@@ -313,9 +314,9 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
313
314
macro_rules! make_node {
314
315
( $node_id: expr) => { {
315
316
let logger: Arc <dyn Logger > = Arc :: new( test_logger:: TestLogger :: new( $node_id. to_string( ) , out. clone( ) ) ) ;
316
- let monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , fee_est. clone( ) , Arc :: new( TestPersister { } ) ) ) ;
317
-
318
317
let keys_manager = Arc :: new( KeyProvider { node_id: $node_id, rand_bytes_id: atomic:: AtomicU8 :: new( 0 ) , revoked_commitments: Mutex :: new( HashMap :: new( ) ) } ) ;
318
+ let monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , fee_est. clone( ) , Arc :: new( TestPersister { } ) , Arc :: clone( & keys_manager) ) ) ;
319
+
319
320
let mut config = UserConfig :: default ( ) ;
320
321
config. channel_options. fee_proportional_millionths = 0 ;
321
322
config. channel_options. announced_channel = true ;
@@ -329,7 +330,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
329
330
( $ser: expr, $node_id: expr, $old_monitors: expr, $keys_manager: expr) => { {
330
331
let keys_manager = Arc :: clone( & $keys_manager) ;
331
332
let logger: Arc <dyn Logger > = Arc :: new( test_logger:: TestLogger :: new( $node_id. to_string( ) , out. clone( ) ) ) ;
332
- let chain_monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , fee_est. clone( ) , Arc :: new( TestPersister { } ) ) ) ;
333
+ let chain_monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , fee_est. clone( ) , Arc :: new( TestPersister { } ) , Arc :: clone ( & $keys_manager ) ) ) ;
333
334
334
335
let mut config = UserConfig :: default ( ) ;
335
336
config. channel_options. fee_proportional_millionths = 0 ;
@@ -339,7 +340,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
339
340
let mut monitors = HashMap :: new( ) ;
340
341
let mut old_monitors = $old_monitors. latest_monitors. lock( ) . unwrap( ) ;
341
342
for ( outpoint, ( update_id, monitor_ser) ) in old_monitors. drain( ) {
342
- monitors. insert( outpoint, <( BlockHash , ChannelMonitor <EnforcingChannelKeys >) >:: read( & mut Cursor :: new( & monitor_ser) , & OnlyReadsKeysInterface { } ) . expect( "Failed to read monitor" ) . 1 ) ;
343
+ monitors. insert( outpoint, <( BlockHash , ChannelMonitor <EnforcingChannelKeys >) >:: read( & mut Cursor :: new( & monitor_ser) , & * $keys_manager ) . expect( "Failed to read monitor" ) . 1 ) ;
343
344
chain_monitor. latest_monitors. lock( ) . unwrap( ) . insert( outpoint, ( update_id, monitor_ser) ) ;
344
345
}
345
346
let mut monitor_refs = HashMap :: new( ) ;
@@ -357,7 +358,11 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
357
358
channel_monitors: monitor_refs,
358
359
} ;
359
360
360
- ( <( BlockHash , ChanMan ) >:: read( & mut Cursor :: new( & $ser. 0 ) , read_args) . expect( "Failed to read manager" ) . 1 , chain_monitor)
361
+ let res = ( <( BlockHash , ChanMan ) >:: read( & mut Cursor :: new( & $ser. 0 ) , read_args) . expect( "Failed to read manager" ) . 1 , chain_monitor. clone( ) ) ;
362
+ for ( funding_txo, mon) in monitors. drain( ) {
363
+ assert!( chain_monitor. chain_monitor. watch_channel( funding_txo, mon) . is_ok( ) ) ;
364
+ }
365
+ res
361
366
} }
362
367
}
363
368
0 commit comments