@@ -678,95 +678,97 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
678678 let default_mon_style = RefCell :: new ( ChannelMonitorUpdateStatus :: Completed ) ;
679679 let mon_style = [ default_mon_style. clone ( ) , default_mon_style. clone ( ) , default_mon_style] ;
680680
681- macro_rules! reload_node {
682- ( $ser: expr, $node_id: expr, $old_monitors: expr, $use_old_mons: expr, $keys: expr, $fee_estimator: expr) => { {
683- let keys_manager = Arc :: clone( & $keys) ;
684- let logger: Arc <dyn Logger > =
685- Arc :: new( test_logger:: TestLogger :: new( $node_id. to_string( ) , out. clone( ) ) ) ;
686- let chain_monitor = Arc :: new( TestChainMonitor :: new(
687- broadcast. clone( ) ,
688- logger. clone( ) ,
689- $fee_estimator. clone( ) ,
690- Arc :: new( TestPersister {
691- update_ret: Mutex :: new( ChannelMonitorUpdateStatus :: Completed ) ,
692- } ) ,
693- Arc :: clone( & $keys) ,
694- ) ) ;
695-
696- let mut config = UserConfig :: default ( ) ;
697- config. channel_config. forwarding_fee_proportional_millionths = 0 ;
698- config. channel_handshake_config. announce_for_forwarding = true ;
699- if anchors {
700- config. channel_handshake_config. negotiate_anchors_zero_fee_htlc_tx = true ;
701- config. manually_accept_inbound_channels = true ;
702- }
703-
704- let mut monitors = new_hash_map( ) ;
705- let mut old_monitors = $old_monitors. latest_monitors. lock( ) . unwrap( ) ;
706- let mut use_old_mons = $use_old_mons;
707- for ( channel_id, mut prev_state) in old_monitors. drain( ) {
708- let serialized_mon = if use_old_mons % 3 == 0 {
709- // Reload with the oldest `ChannelMonitor` (the one that we already told
710- // `ChannelManager` we finished persisting).
711- prev_state. persisted_monitor
712- } else if use_old_mons % 3 == 1 {
713- // Reload with the second-oldest `ChannelMonitor`
714- let old_mon = prev_state. persisted_monitor;
715- prev_state. pending_monitors. drain( ..) . next( ) . map( |( _, v) | v) . unwrap_or( old_mon)
716- } else {
717- // Reload with the newest `ChannelMonitor`
718- let old_mon = prev_state. persisted_monitor;
719- prev_state. pending_monitors. pop( ) . map( |( _, v) | v) . unwrap_or( old_mon)
720- } ;
721- // Use a different value of `use_old_mons` if we have another monitor (only for
722- // node B) by shifting `use_old_mons` one in base-3.
723- use_old_mons /= 3 ;
724- let mon = <( BlockHash , ChannelMonitor <TestChannelSigner >) >:: read(
725- & mut & serialized_mon[ ..] ,
726- ( & * $keys, & * $keys) ,
727- )
728- . expect( "Failed to read monitor" ) ;
729- monitors. insert( channel_id, mon. 1 ) ;
730- // Update the latest `ChannelMonitor` state to match what we just told LDK.
731- prev_state. persisted_monitor = serialized_mon;
732- // Wipe any `ChannelMonitor`s which we never told LDK we finished persisting,
733- // considering them discarded. LDK should replay these for us as they're stored in
734- // the `ChannelManager`.
735- prev_state. pending_monitors. clear( ) ;
736- chain_monitor. latest_monitors. lock( ) . unwrap( ) . insert( channel_id, prev_state) ;
737- }
738- let mut monitor_refs = new_hash_map( ) ;
739- for ( channel_id, monitor) in monitors. iter( ) {
740- monitor_refs. insert( * channel_id, monitor) ;
741- }
681+ let reload_node = |ser : & Vec < u8 > ,
682+ node_id : u8 ,
683+ old_monitors : & TestChainMonitor ,
684+ mut use_old_mons,
685+ keys,
686+ fee_estimator| {
687+ let keys_manager = Arc :: clone ( keys) ;
688+ let logger: Arc < dyn Logger > =
689+ Arc :: new ( test_logger:: TestLogger :: new ( node_id. to_string ( ) , out. clone ( ) ) ) ;
690+ let chain_monitor = Arc :: new ( TestChainMonitor :: new (
691+ broadcast. clone ( ) ,
692+ logger. clone ( ) ,
693+ Arc :: clone ( fee_estimator) ,
694+ Arc :: new ( TestPersister {
695+ update_ret : Mutex :: new ( ChannelMonitorUpdateStatus :: Completed ) ,
696+ } ) ,
697+ Arc :: clone ( keys) ,
698+ ) ) ;
699+
700+ let mut config = UserConfig :: default ( ) ;
701+ config. channel_config . forwarding_fee_proportional_millionths = 0 ;
702+ config. channel_handshake_config . announce_for_forwarding = true ;
703+ if anchors {
704+ config. channel_handshake_config . negotiate_anchors_zero_fee_htlc_tx = true ;
705+ config. manually_accept_inbound_channels = true ;
706+ }
742707
743- let read_args = ChannelManagerReadArgs {
744- entropy_source: Arc :: clone( & keys_manager) ,
745- node_signer: Arc :: clone( & keys_manager) ,
746- signer_provider: keys_manager,
747- fee_estimator: $fee_estimator. clone( ) ,
748- chain_monitor: chain_monitor. clone( ) ,
749- tx_broadcaster: broadcast. clone( ) ,
750- router: & router,
751- message_router: & router,
752- logger,
753- default_config: config,
754- channel_monitors: monitor_refs,
708+ let mut monitors = new_hash_map ( ) ;
709+ let mut old_monitors = old_monitors. latest_monitors . lock ( ) . unwrap ( ) ;
710+ for ( channel_id, mut prev_state) in old_monitors. drain ( ) {
711+ let serialized_mon = if use_old_mons % 3 == 0 {
712+ // Reload with the oldest `ChannelMonitor` (the one that we already told
713+ // `ChannelManager` we finished persisting).
714+ prev_state. persisted_monitor
715+ } else if use_old_mons % 3 == 1 {
716+ // Reload with the second-oldest `ChannelMonitor`
717+ let old_mon = prev_state. persisted_monitor ;
718+ prev_state. pending_monitors . drain ( ..) . next ( ) . map ( |( _, v) | v) . unwrap_or ( old_mon)
719+ } else {
720+ // Reload with the newest `ChannelMonitor`
721+ let old_mon = prev_state. persisted_monitor ;
722+ prev_state. pending_monitors . pop ( ) . map ( |( _, v) | v) . unwrap_or ( old_mon)
755723 } ;
724+ // Use a different value of `use_old_mons` if we have another monitor (only for node B)
725+ // by shifting `use_old_mons` one in base-3.
726+ use_old_mons /= 3 ;
727+ let mon = <( BlockHash , ChannelMonitor < TestChannelSigner > ) >:: read (
728+ & mut & serialized_mon[ ..] ,
729+ ( & * * keys, & * * keys) ,
730+ )
731+ . expect ( "Failed to read monitor" ) ;
732+ monitors. insert ( channel_id, mon. 1 ) ;
733+ // Update the latest `ChannelMonitor` state to match what we just told LDK.
734+ prev_state. persisted_monitor = serialized_mon;
735+ // Wipe any `ChannelMonitor`s which we never told LDK we finished persisting,
736+ // considering them discarded. LDK should replay these for us as they're stored in
737+ // the `ChannelManager`.
738+ prev_state. pending_monitors . clear ( ) ;
739+ chain_monitor. latest_monitors . lock ( ) . unwrap ( ) . insert ( channel_id, prev_state) ;
740+ }
741+ let mut monitor_refs = new_hash_map ( ) ;
742+ for ( channel_id, monitor) in monitors. iter ( ) {
743+ monitor_refs. insert ( * channel_id, monitor) ;
744+ }
756745
757- let manager = <( BlockHash , ChanMan ) >:: read( & mut & $ser. 0 [ ..] , read_args)
758- . expect( "Failed to read manager" ) ;
759- let res = ( manager. 1 , chain_monitor. clone( ) ) ;
760- for ( channel_id, mon) in monitors. drain( ) {
761- assert_eq!(
762- chain_monitor. chain_monitor. watch_channel( channel_id, mon) ,
763- Ok ( ChannelMonitorUpdateStatus :: Completed )
764- ) ;
765- }
766- * chain_monitor. persister. update_ret. lock( ) . unwrap( ) = * mon_style[ $node_id] . borrow( ) ;
767- res
768- } } ;
769- }
746+ let read_args = ChannelManagerReadArgs {
747+ entropy_source : Arc :: clone ( & keys_manager) ,
748+ node_signer : Arc :: clone ( & keys_manager) ,
749+ signer_provider : keys_manager,
750+ fee_estimator : Arc :: clone ( fee_estimator) ,
751+ chain_monitor : chain_monitor. clone ( ) ,
752+ tx_broadcaster : broadcast. clone ( ) ,
753+ router : & router,
754+ message_router : & router,
755+ logger,
756+ default_config : config,
757+ channel_monitors : monitor_refs,
758+ } ;
759+
760+ let manager =
761+ <( BlockHash , ChanMan ) >:: read ( & mut & ser[ ..] , read_args) . expect ( "Failed to read manager" ) ;
762+ let res = ( manager. 1 , chain_monitor. clone ( ) ) ;
763+ for ( channel_id, mon) in monitors. drain ( ) {
764+ assert_eq ! (
765+ chain_monitor. chain_monitor. watch_channel( channel_id, mon) ,
766+ Ok ( ChannelMonitorUpdateStatus :: Completed )
767+ ) ;
768+ }
769+ * chain_monitor. persister . update_ret . lock ( ) . unwrap ( ) = * mon_style[ node_id as usize ] . borrow ( ) ;
770+ res
771+ } ;
770772
771773 let mut channel_txn = Vec :: new ( ) ;
772774 macro_rules! make_channel {
@@ -996,12 +998,9 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
996998 let mut bc_events = Vec :: new ( ) ;
997999 let mut cb_events = Vec :: new ( ) ;
9981000
999- let mut node_a_ser = VecWriter ( Vec :: new ( ) ) ;
1000- nodes[ 0 ] . write ( & mut node_a_ser) . unwrap ( ) ;
1001- let mut node_b_ser = VecWriter ( Vec :: new ( ) ) ;
1002- nodes[ 1 ] . write ( & mut node_b_ser) . unwrap ( ) ;
1003- let mut node_c_ser = VecWriter ( Vec :: new ( ) ) ;
1004- nodes[ 2 ] . write ( & mut node_c_ser) . unwrap ( ) ;
1001+ let mut node_a_ser = nodes[ 0 ] . encode ( ) ;
1002+ let mut node_b_ser = nodes[ 1 ] . encode ( ) ;
1003+ let mut node_c_ser = nodes[ 2 ] . encode ( ) ;
10051004
10061005 macro_rules! test_return {
10071006 ( ) => { {
@@ -1676,7 +1675,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
16761675 ba_events. clear ( ) ;
16771676 }
16781677 let ( new_node_a, new_monitor_a) =
1679- reload_node ! ( node_a_ser, 0 , monitor_a, v, keys_manager_a, fee_est_a) ;
1678+ reload_node ( & node_a_ser, 0 , & monitor_a, v, & keys_manager_a, & fee_est_a) ;
16801679 nodes[ 0 ] = new_node_a;
16811680 monitor_a = new_monitor_a;
16821681 } ,
@@ -1698,7 +1697,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
16981697 cb_events. clear ( ) ;
16991698 }
17001699 let ( new_node_b, new_monitor_b) =
1701- reload_node ! ( node_b_ser, 1 , monitor_b, v, keys_manager_b, fee_est_b) ;
1700+ reload_node ( & node_b_ser, 1 , & monitor_b, v, & keys_manager_b, & fee_est_b) ;
17021701 nodes[ 1 ] = new_node_b;
17031702 monitor_b = new_monitor_b;
17041703 } ,
@@ -1716,7 +1715,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
17161715 cb_events. clear ( ) ;
17171716 }
17181717 let ( new_node_c, new_monitor_c) =
1719- reload_node ! ( node_c_ser, 2 , monitor_c, v, keys_manager_c, fee_est_c) ;
1718+ reload_node ( & node_c_ser, 2 , & monitor_c, v, & keys_manager_c, & fee_est_c) ;
17201719 nodes[ 2 ] = new_node_c;
17211720 monitor_c = new_monitor_c;
17221721 } ,
@@ -1861,16 +1860,13 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
18611860 }
18621861
18631862 if nodes[ 0 ] . get_and_clear_needs_persistence ( ) == true {
1864- node_a_ser. 0 . clear ( ) ;
1865- nodes[ 0 ] . write ( & mut node_a_ser) . unwrap ( ) ;
1863+ node_a_ser = nodes[ 0 ] . encode ( ) ;
18661864 }
18671865 if nodes[ 1 ] . get_and_clear_needs_persistence ( ) == true {
1868- node_b_ser. 0 . clear ( ) ;
1869- nodes[ 1 ] . write ( & mut node_b_ser) . unwrap ( ) ;
1866+ node_b_ser = nodes[ 1 ] . encode ( ) ;
18701867 }
18711868 if nodes[ 2 ] . get_and_clear_needs_persistence ( ) == true {
1872- node_c_ser. 0 . clear ( ) ;
1873- nodes[ 2 ] . write ( & mut node_c_ser) . unwrap ( ) ;
1869+ node_c_ser = nodes[ 2 ] . encode ( ) ;
18741870 }
18751871 }
18761872}
0 commit comments