4
4
use chain:: chaininterface;
5
5
use chain:: transaction:: OutPoint ;
6
6
use chain:: keysinterface:: KeysInterface ;
7
+ use ln:: channelmonitor:: { ChannelMonitor , ManyChannelMonitor } ;
7
8
use ln:: channelmanager:: { ChannelManager , RAACommitmentOrder , PaymentPreimage , PaymentHash } ;
8
9
use ln:: router:: { Route , Router } ;
9
10
use ln:: features:: InitFeatures ;
@@ -16,6 +17,7 @@ use util::events::{Event, EventsProvider, MessageSendEvent, MessageSendEventsPro
16
17
use util:: errors:: APIError ;
17
18
use util:: logger:: Logger ;
18
19
use util:: config:: UserConfig ;
20
+ use util:: ser:: ReadableArgs ;
19
21
20
22
use bitcoin:: util:: hash:: BitcoinHash ;
21
23
use bitcoin:: blockdata:: block:: BlockHeader ;
@@ -88,6 +90,27 @@ impl<'a, 'b> Drop for Node<'a, 'b> {
88
90
assert ! ( self . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
89
91
assert ! ( self . node. get_and_clear_pending_events( ) . is_empty( ) ) ;
90
92
assert ! ( self . chan_monitor. added_monitors. lock( ) . unwrap( ) . is_empty( ) ) ;
93
+
94
+ // Check that if we serialize and then deserialize all our channel monitors we the same
95
+ // set of outputs to watch for on chain as we have now. Note that if we write tests
96
+ // that fully close channels and remove the monitors at some point this may break.
97
+ let new_watch = Arc :: new ( chaininterface:: ChainWatchInterfaceUtil :: new ( Network :: Testnet , Arc :: clone ( & self . logger ) as Arc < Logger > ) ) ;
98
+ let feeest = Arc :: new ( test_utils:: TestFeeEstimator { sat_per_kw : 253 } ) ;
99
+ let new_monitor = test_utils:: TestChannelMonitor :: new ( new_watch. clone ( ) , self . tx_broadcaster . clone ( ) , self . logger . clone ( ) , feeest) ;
100
+ let old_monitors = self . chan_monitor . simple_monitor . monitors . lock ( ) . unwrap ( ) ;
101
+ for ( _, monitor) in old_monitors. iter ( ) {
102
+ let mut w = test_utils:: TestVecWriter ( Vec :: new ( ) ) ;
103
+ monitor. write_for_disk ( & mut w) . unwrap ( ) ;
104
+ let ( _, new_mon) = <( Sha256d , ChannelMonitor < EnforcingChannelKeys > ) >:: read (
105
+ & mut :: std:: io:: Cursor :: new ( & w. 0 ) , Arc :: clone ( & self . logger ) as Arc < Logger > ) . unwrap ( ) ;
106
+ if let Err ( _) = new_monitor. add_update_monitor ( new_mon. get_funding_txo ( ) . unwrap ( ) , new_mon) {
107
+ panic ! ( ) ;
108
+ }
109
+ }
110
+
111
+ if * new_watch != * self . chain_monitor {
112
+ panic ! ( ) ;
113
+ }
91
114
}
92
115
}
93
116
}
0 commit comments