@@ -30,8 +30,8 @@ use bitcoin::hashes::sha256::Hash as Sha256;
30
30
use bitcoin:: hash_types:: { BlockHash , WPubkeyHash } ;
31
31
32
32
use lightning:: chain;
33
- use lightning:: chain:: { BestBlock , chainmonitor, channelmonitor, Confirm , Watch } ;
34
- use lightning:: chain:: channelmonitor:: { ChannelMonitor , ChannelMonitorUpdateErr , MonitorEvent } ;
33
+ use lightning:: chain:: { BestBlock , ChannelMonitorUpdateErr , chainmonitor, channelmonitor, Confirm , Watch } ;
34
+ use lightning:: chain:: channelmonitor:: { ChannelMonitor , MonitorEvent } ;
35
35
use lightning:: chain:: transaction:: OutPoint ;
36
36
use lightning:: chain:: chaininterface:: { BroadcasterInterface , ConfirmationTarget , FeeEstimator } ;
37
37
use lightning:: chain:: keysinterface:: { KeysInterface , InMemorySigner } ;
@@ -99,8 +99,8 @@ impl Writer for VecWriter {
99
99
struct TestChainMonitor {
100
100
pub logger : Arc < dyn Logger > ,
101
101
pub keys : Arc < KeyProvider > ,
102
+ pub persister : Arc < TestPersister > ,
102
103
pub chain_monitor : Arc < chainmonitor:: ChainMonitor < EnforcingSigner , Arc < dyn chain:: Filter > , Arc < TestBroadcaster > , Arc < FuzzEstimator > , Arc < dyn Logger > , Arc < TestPersister > > > ,
103
- pub update_ret : Mutex < Result < ( ) , channelmonitor:: ChannelMonitorUpdateErr > > ,
104
104
// If we reload a node with an old copy of ChannelMonitors, the ChannelManager deserialization
105
105
// logic will automatically force-close our channels for us (as we don't have an up-to-date
106
106
// monitor implying we are not able to punish misbehaving counterparties). Because this test
@@ -112,28 +112,27 @@ struct TestChainMonitor {
112
112
impl TestChainMonitor {
113
113
pub fn new ( broadcaster : Arc < TestBroadcaster > , logger : Arc < dyn Logger > , feeest : Arc < FuzzEstimator > , persister : Arc < TestPersister > , keys : Arc < KeyProvider > ) -> Self {
114
114
Self {
115
- chain_monitor : Arc :: new ( chainmonitor:: ChainMonitor :: new ( None , broadcaster, logger. clone ( ) , feeest, persister) ) ,
115
+ chain_monitor : Arc :: new ( chainmonitor:: ChainMonitor :: new ( None , broadcaster, logger. clone ( ) , feeest, Arc :: clone ( & persister) ) ) ,
116
116
logger,
117
117
keys,
118
- update_ret : Mutex :: new ( Ok ( ( ) ) ) ,
118
+ persister ,
119
119
latest_monitors : Mutex :: new ( HashMap :: new ( ) ) ,
120
120
should_update_manager : atomic:: AtomicBool :: new ( false ) ,
121
121
}
122
122
}
123
123
}
124
124
impl chain:: Watch < EnforcingSigner > for TestChainMonitor {
125
- fn watch_channel ( & self , funding_txo : OutPoint , monitor : channelmonitor:: ChannelMonitor < EnforcingSigner > ) -> Result < ( ) , channelmonitor :: ChannelMonitorUpdateErr > {
125
+ fn watch_channel ( & self , funding_txo : OutPoint , monitor : channelmonitor:: ChannelMonitor < EnforcingSigner > ) -> Result < ( ) , chain :: ChannelMonitorUpdateErr > {
126
126
let mut ser = VecWriter ( Vec :: new ( ) ) ;
127
127
monitor. write ( & mut ser) . unwrap ( ) ;
128
128
if let Some ( _) = self . latest_monitors . lock ( ) . unwrap ( ) . insert ( funding_txo, ( monitor. get_latest_update_id ( ) , ser. 0 ) ) {
129
129
panic ! ( "Already had monitor pre-watch_channel" ) ;
130
130
}
131
131
self . should_update_manager . store ( true , atomic:: Ordering :: Relaxed ) ;
132
- assert ! ( self . chain_monitor. watch_channel( funding_txo, monitor) . is_ok( ) ) ;
133
- self . update_ret . lock ( ) . unwrap ( ) . clone ( )
132
+ self . chain_monitor . watch_channel ( funding_txo, monitor)
134
133
}
135
134
136
- fn update_channel ( & self , funding_txo : OutPoint , update : channelmonitor:: ChannelMonitorUpdate ) -> Result < ( ) , channelmonitor :: ChannelMonitorUpdateErr > {
135
+ fn update_channel ( & self , funding_txo : OutPoint , update : channelmonitor:: ChannelMonitorUpdate ) -> Result < ( ) , chain :: ChannelMonitorUpdateErr > {
137
136
let mut map_lock = self . latest_monitors . lock ( ) . unwrap ( ) ;
138
137
let mut map_entry = match map_lock. entry ( funding_txo) {
139
138
hash_map:: Entry :: Occupied ( entry) => entry,
@@ -146,8 +145,7 @@ impl chain::Watch<EnforcingSigner> for TestChainMonitor {
146
145
deserialized_monitor. write ( & mut ser) . unwrap ( ) ;
147
146
map_entry. insert ( ( update. update_id , ser. 0 ) ) ;
148
147
self . should_update_manager . store ( true , atomic:: Ordering :: Relaxed ) ;
149
- assert ! ( self . chain_monitor. update_channel( funding_txo, update) . is_ok( ) ) ;
150
- self . update_ret . lock ( ) . unwrap ( ) . clone ( )
148
+ self . chain_monitor . update_channel ( funding_txo, update)
151
149
}
152
150
153
151
fn release_pending_monitor_events ( & self ) -> Vec < MonitorEvent > {
@@ -346,7 +344,8 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
346
344
( $node_id: expr, $fee_estimator: expr) => { {
347
345
let logger: Arc <dyn Logger > = Arc :: new( test_logger:: TestLogger :: new( $node_id. to_string( ) , out. clone( ) ) ) ;
348
346
let keys_manager = Arc :: new( KeyProvider { node_id: $node_id, rand_bytes_id: atomic:: AtomicU32 :: new( 0 ) , enforcement_states: Mutex :: new( HashMap :: new( ) ) } ) ;
349
- let monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , $fee_estimator. clone( ) , Arc :: new( TestPersister { } ) , Arc :: clone( & keys_manager) ) ) ;
347
+ let monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , $fee_estimator. clone( ) ,
348
+ Arc :: new( TestPersister { update_ret: Mutex :: new( Ok ( ( ) ) ) } ) , Arc :: clone( & keys_manager) ) ) ;
350
349
351
350
let mut config = UserConfig :: default ( ) ;
352
351
config. channel_options. forwarding_fee_proportional_millionths = 0 ;
@@ -365,7 +364,8 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
365
364
( $ser: expr, $node_id: expr, $old_monitors: expr, $keys_manager: expr, $fee_estimator: expr) => { {
366
365
let keys_manager = Arc :: clone( & $keys_manager) ;
367
366
let logger: Arc <dyn Logger > = Arc :: new( test_logger:: TestLogger :: new( $node_id. to_string( ) , out. clone( ) ) ) ;
368
- let chain_monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , $fee_estimator. clone( ) , Arc :: new( TestPersister { } ) , Arc :: clone( & $keys_manager) ) ) ;
367
+ let chain_monitor = Arc :: new( TestChainMonitor :: new( broadcast. clone( ) , logger. clone( ) , $fee_estimator. clone( ) ,
368
+ Arc :: new( TestPersister { update_ret: Mutex :: new( Ok ( ( ) ) ) } ) , Arc :: clone( & $keys_manager) ) ) ;
369
369
370
370
let mut config = UserConfig :: default ( ) ;
371
371
config. channel_options. forwarding_fee_proportional_millionths = 0 ;
@@ -846,12 +846,12 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
846
846
// bit-twiddling mutations to have similar effects. This is probably overkill, but no
847
847
// harm in doing so.
848
848
849
- 0x00 => * monitor_a. update_ret . lock ( ) . unwrap ( ) = Err ( ChannelMonitorUpdateErr :: TemporaryFailure ) ,
850
- 0x01 => * monitor_b. update_ret . lock ( ) . unwrap ( ) = Err ( ChannelMonitorUpdateErr :: TemporaryFailure ) ,
851
- 0x02 => * monitor_c. update_ret . lock ( ) . unwrap ( ) = Err ( ChannelMonitorUpdateErr :: TemporaryFailure ) ,
852
- 0x04 => * monitor_a. update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ,
853
- 0x05 => * monitor_b. update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ,
854
- 0x06 => * monitor_c. update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ,
849
+ 0x00 => * monitor_a. persister . update_ret . lock ( ) . unwrap ( ) = Err ( ChannelMonitorUpdateErr :: TemporaryFailure ) ,
850
+ 0x01 => * monitor_b. persister . update_ret . lock ( ) . unwrap ( ) = Err ( ChannelMonitorUpdateErr :: TemporaryFailure ) ,
851
+ 0x02 => * monitor_c. persister . update_ret . lock ( ) . unwrap ( ) = Err ( ChannelMonitorUpdateErr :: TemporaryFailure ) ,
852
+ 0x04 => * monitor_a. persister . update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ,
853
+ 0x05 => * monitor_b. persister . update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ,
854
+ 0x06 => * monitor_c. persister . update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ,
855
855
856
856
0x08 => {
857
857
if let Some ( ( id, _) ) = monitor_a. latest_monitors . lock ( ) . unwrap ( ) . get ( & chan_1_funding) {
@@ -1072,9 +1072,9 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
1072
1072
// after we resolve all pending events.
1073
1073
// First make sure there are no pending monitor updates, resetting the error state
1074
1074
// and calling channel_monitor_updated for each monitor.
1075
- * monitor_a. update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ;
1076
- * monitor_b. update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ;
1077
- * monitor_c. update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ;
1075
+ * monitor_a. persister . update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ;
1076
+ * monitor_b. persister . update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ;
1077
+ * monitor_c. persister . update_ret . lock ( ) . unwrap ( ) = Ok ( ( ) ) ;
1078
1078
1079
1079
if let Some ( ( id, _) ) = monitor_a. latest_monitors . lock ( ) . unwrap ( ) . get ( & chan_1_funding) {
1080
1080
nodes[ 0 ] . channel_monitor_updated ( & chan_1_funding, * id) ;
0 commit comments