@@ -5,6 +5,7 @@ use chain::chaininterface;
5
5
use chain:: transaction:: OutPoint ;
6
6
use chain:: keysinterface:: KeysInterface ;
7
7
use ln:: channelmanager:: { ChannelManager , RAACommitmentOrder , PaymentPreimage , PaymentHash } ;
8
+ use ln:: channelmonitor:: { ChannelMonitor , ManyChannelMonitor } ;
8
9
use ln:: router:: { Route , Router } ;
9
10
use ln:: features:: InitFeatures ;
10
11
use ln:: msgs;
@@ -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 get the
96
+ // same set of outputs to watch for on chain as we have now. Note that if we write
97
+ // tests that fully close channels and remove the monitors at some point this may break.
98
+ let chain_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 channel_monitor = test_utils:: TestChannelMonitor :: new ( chain_watch. clone ( ) , self . tx_broadcaster . clone ( ) , self . logger . clone ( ) , feeest) ;
101
+ let old_monitors = self . chan_monitor . simple_monitor . monitors . lock ( ) . unwrap ( ) ;
102
+ for ( _, old_monitor) in old_monitors. iter ( ) {
103
+ let mut w = test_utils:: TestVecWriter ( Vec :: new ( ) ) ;
104
+ old_monitor. write_for_disk ( & mut w) . unwrap ( ) ;
105
+ let ( _, deserialized_monitor) = <( Sha256d , ChannelMonitor < EnforcingChannelKeys > ) >:: read (
106
+ & mut :: std:: io:: Cursor :: new ( & w. 0 ) , Arc :: clone ( & self . logger ) as Arc < Logger > ) . unwrap ( ) ;
107
+ if let Err ( _) = channel_monitor. add_update_monitor ( deserialized_monitor. get_funding_txo ( ) . unwrap ( ) , deserialized_monitor) {
108
+ panic ! ( ) ;
109
+ }
110
+ }
111
+
112
+ if * chain_watch != * self . chain_monitor {
113
+ panic ! ( ) ;
114
+ }
92
115
}
93
116
}
94
117
}
0 commit comments