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 ;
@@ -89,6 +91,27 @@ impl<'a, 'b> Drop for Node<'a, 'b> {
89
91
assert ! ( self . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
90
92
assert ! ( self . node. get_and_clear_pending_events( ) . is_empty( ) ) ;
91
93
assert ! ( self . chan_monitor. added_monitors. lock( ) . unwrap( ) . is_empty( ) ) ;
94
+
95
+ // Check that if we serialize and then deserialize all our channel monitors we the same
96
+ // set of outputs to watch for on chain as we have now. Note that if we write tests
97
+ // that fully close channels and remove the monitors at some point this may break.
98
+ let new_watch = Arc :: new ( chaininterface:: ChainWatchInterfaceUtil :: new ( Network :: Testnet , Arc :: clone ( & self . logger ) as Arc < Logger > ) ) ;
99
+ let feeest = Arc :: new ( test_utils:: TestFeeEstimator { sat_per_kw : 253 } ) ;
100
+ let new_monitor = test_utils:: TestChannelMonitor :: new ( new_watch. clone ( ) , self . tx_broadcaster . clone ( ) , self . logger . clone ( ) , feeest) ;
101
+ let old_monitors = self . chan_monitor . simple_monitor . monitors . lock ( ) . unwrap ( ) ;
102
+ for ( _, monitor) in old_monitors. iter ( ) {
103
+ let mut w = test_utils:: TestVecWriter ( Vec :: new ( ) ) ;
104
+ monitor. write_for_disk ( & mut w) . unwrap ( ) ;
105
+ let ( _, new_mon) = <( Sha256d , ChannelMonitor < EnforcingChannelKeys > ) >:: read (
106
+ & mut :: std:: io:: Cursor :: new ( & w. 0 ) , Arc :: clone ( & self . logger ) as Arc < Logger > ) . unwrap ( ) ;
107
+ if let Err ( _) = new_monitor. add_update_monitor ( new_mon. get_funding_txo ( ) . unwrap ( ) , new_mon) {
108
+ panic ! ( ) ;
109
+ }
110
+ }
111
+
112
+ if * new_watch != * self . chain_monitor {
113
+ panic ! ( ) ;
114
+ }
92
115
}
93
116
}
94
117
}
0 commit comments