@@ -678,87 +678,90 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
678
678
let default_mon_style = RefCell :: new ( ChannelMonitorUpdateStatus :: Completed ) ;
679
679
let mon_style = [ default_mon_style. clone ( ) , default_mon_style. clone ( ) , default_mon_style] ;
680
680
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
- for ( channel_id, mut prev_state) in old_monitors. drain( ) {
707
- let serialized_mon = if $use_old_mons % 3 == 0 {
708
- prev_state. persisted_monitor
709
- } else if $use_old_mons % 3 == 1 {
710
- let old_mon = prev_state. persisted_monitor;
711
- prev_state. pending_monitors. drain( ..) . next( ) . map( |( _, v) | v) . unwrap_or( old_mon)
712
- } else {
713
- let old_mon = prev_state. persisted_monitor;
714
- prev_state. pending_monitors. pop( ) . map( |( _, v) | v) . unwrap_or( old_mon)
715
- } ;
716
- let mon = <( BlockHash , ChannelMonitor <TestChannelSigner >) >:: read(
717
- & mut & serialized_mon[ ..] ,
718
- ( & * $keys, & * $keys) ,
719
- )
720
- . expect( "Failed to read monitor" ) ;
721
- monitors. insert( channel_id, mon. 1 ) ;
722
- // Update the latest `ChannelMonitor` state to match what we just told LDK.
723
- prev_state. persisted_monitor = serialized_mon;
724
- // Wipe any `ChannelMonitor`s which we never told LDK we finished persisting,
725
- // considering them discarded. LDK should replay these for us as they're stored in
726
- // the `ChannelManager`.
727
- prev_state. pending_monitors. clear( ) ;
728
- chain_monitor. latest_monitors. lock( ) . unwrap( ) . insert( channel_id, prev_state) ;
729
- }
730
- let mut monitor_refs = new_hash_map( ) ;
731
- for ( channel_id, monitor) in monitors. iter( ) {
732
- monitor_refs. insert( * channel_id, monitor) ;
733
- }
681
+ let reload_node = |ser : & Vec < u8 > ,
682
+ node_id : u8 ,
683
+ old_monitors : & TestChainMonitor ,
684
+ 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
+ }
734
707
735
- let read_args = ChannelManagerReadArgs {
736
- entropy_source: Arc :: clone( & keys_manager) ,
737
- node_signer: Arc :: clone( & keys_manager) ,
738
- signer_provider: keys_manager,
739
- fee_estimator: $fee_estimator. clone( ) ,
740
- chain_monitor: chain_monitor. clone( ) ,
741
- tx_broadcaster: broadcast. clone( ) ,
742
- router: & router,
743
- message_router: & router,
744
- logger,
745
- default_config: config,
746
- 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
+ prev_state. persisted_monitor
713
+ } else if use_old_mons % 3 == 1 {
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
+ let old_mon = prev_state. persisted_monitor ;
718
+ prev_state. pending_monitors . pop ( ) . map ( |( _, v) | v) . unwrap_or ( old_mon)
747
719
} ;
720
+ let mon = <( BlockHash , ChannelMonitor < TestChannelSigner > ) >:: read (
721
+ & mut & serialized_mon[ ..] ,
722
+ ( & * * keys, & * * keys) ,
723
+ )
724
+ . expect ( "Failed to read monitor" ) ;
725
+ monitors. insert ( channel_id, mon. 1 ) ;
726
+ // Update the latest `ChannelMonitor` state to match what we just told LDK.
727
+ prev_state. persisted_monitor = serialized_mon;
728
+ // Wipe any `ChannelMonitor`s which we never told LDK we finished persisting,
729
+ // considering them discarded. LDK should replay these for us as they're stored in
730
+ // the `ChannelManager`.
731
+ prev_state. pending_monitors . clear ( ) ;
732
+ chain_monitor. latest_monitors . lock ( ) . unwrap ( ) . insert ( channel_id, prev_state) ;
733
+ }
734
+ let mut monitor_refs = new_hash_map ( ) ;
735
+ for ( channel_id, monitor) in monitors. iter ( ) {
736
+ monitor_refs. insert ( * channel_id, monitor) ;
737
+ }
748
738
749
- let manager = <( BlockHash , ChanMan ) >:: read( & mut & $ser. 0 [ ..] , read_args)
750
- . expect( "Failed to read manager" ) ;
751
- let res = ( manager. 1 , chain_monitor. clone( ) ) ;
752
- for ( channel_id, mon) in monitors. drain( ) {
753
- assert_eq!(
754
- chain_monitor. chain_monitor. watch_channel( channel_id, mon) ,
755
- Ok ( ChannelMonitorUpdateStatus :: Completed )
756
- ) ;
757
- }
758
- * chain_monitor. persister. update_ret. lock( ) . unwrap( ) = * mon_style[ $node_id] . borrow( ) ;
759
- res
760
- } } ;
761
- }
739
+ let read_args = ChannelManagerReadArgs {
740
+ entropy_source : Arc :: clone ( & keys_manager) ,
741
+ node_signer : Arc :: clone ( & keys_manager) ,
742
+ signer_provider : keys_manager,
743
+ fee_estimator : Arc :: clone ( fee_estimator) ,
744
+ chain_monitor : chain_monitor. clone ( ) ,
745
+ tx_broadcaster : broadcast. clone ( ) ,
746
+ router : & router,
747
+ message_router : & router,
748
+ logger,
749
+ default_config : config,
750
+ channel_monitors : monitor_refs,
751
+ } ;
752
+
753
+ let manager =
754
+ <( BlockHash , ChanMan ) >:: read ( & mut & ser[ ..] , read_args) . expect ( "Failed to read manager" ) ;
755
+ let res = ( manager. 1 , chain_monitor. clone ( ) ) ;
756
+ for ( channel_id, mon) in monitors. drain ( ) {
757
+ assert_eq ! (
758
+ chain_monitor. chain_monitor. watch_channel( channel_id, mon) ,
759
+ Ok ( ChannelMonitorUpdateStatus :: Completed )
760
+ ) ;
761
+ }
762
+ * chain_monitor. persister . update_ret . lock ( ) . unwrap ( ) = * mon_style[ node_id as usize ] . borrow ( ) ;
763
+ res
764
+ } ;
762
765
763
766
let mut channel_txn = Vec :: new ( ) ;
764
767
macro_rules! make_channel {
@@ -962,6 +965,10 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
962
965
let ( node_b, mut monitor_b, keys_manager_b) = make_node ! ( 1 , fee_est_b) ;
963
966
let ( node_c, mut monitor_c, keys_manager_c) = make_node ! ( 2 , fee_est_c) ;
964
967
968
+ let empty_node_a_ser = node_a. encode ( ) ;
969
+ let empty_node_b_ser = node_b. encode ( ) ;
970
+ let empty_node_c_ser = node_c. encode ( ) ;
971
+
965
972
let mut nodes = [ node_a, node_b, node_c] ;
966
973
967
974
let chan_1_id = make_channel ! ( nodes[ 0 ] , nodes[ 1 ] , keys_manager_b, 0 ) ;
@@ -988,12 +995,9 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
988
995
let mut bc_events = Vec :: new ( ) ;
989
996
let mut cb_events = Vec :: new ( ) ;
990
997
991
- let mut node_a_ser = VecWriter ( Vec :: new ( ) ) ;
992
- nodes[ 0 ] . write ( & mut node_a_ser) . unwrap ( ) ;
993
- let mut node_b_ser = VecWriter ( Vec :: new ( ) ) ;
994
- nodes[ 1 ] . write ( & mut node_b_ser) . unwrap ( ) ;
995
- let mut node_c_ser = VecWriter ( Vec :: new ( ) ) ;
996
- nodes[ 2 ] . write ( & mut node_c_ser) . unwrap ( ) ;
998
+ let mut node_a_ser = nodes[ 0 ] . encode ( ) ;
999
+ let mut node_b_ser = nodes[ 1 ] . encode ( ) ;
1000
+ let mut node_c_ser = nodes[ 2 ] . encode ( ) ;
997
1001
998
1002
macro_rules! test_return {
999
1003
( ) => { {
@@ -1521,7 +1525,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
1521
1525
// Note that we ensure 0x2c represents "use oldest monitor" to retain backwards
1522
1526
// compatibility with existing fuzz corpuses by using setting (v + 1) % 3 == 0
1523
1527
let ( new_node_a, new_monitor_a) =
1524
- reload_node ! ( node_a_ser, 0 , monitor_a, v + 1 , keys_manager_a, fee_est_a) ;
1528
+ reload_node ( & node_a_ser, 0 , & monitor_a, v + 1 , & keys_manager_a, & fee_est_a) ;
1525
1529
nodes[ 0 ] = new_node_a;
1526
1530
monitor_a = new_monitor_a;
1527
1531
} ,
@@ -1543,7 +1547,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
1543
1547
// Note that we ensure 0x2d represents "use oldest monitor" to retain backwards
1544
1548
// compatibility with existing fuzz corpuses by using setting v % 3 == 0
1545
1549
let ( new_node_b, new_monitor_b) =
1546
- reload_node ! ( node_b_ser, 1 , monitor_b, v, keys_manager_b, fee_est_b) ;
1550
+ reload_node ( & node_b_ser, 1 , & monitor_b, v, & keys_manager_b, & fee_est_b) ;
1547
1551
nodes[ 1 ] = new_node_b;
1548
1552
monitor_b = new_monitor_b;
1549
1553
} ,
@@ -1561,7 +1565,7 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
1561
1565
// Note that we ensure 0x2e represents "use oldest monitor" to retain backwards
1562
1566
// compatibility with existing fuzz corpuses by using setting (v + 2) % 3 == 0
1563
1567
let ( new_node_c, new_monitor_c) =
1564
- reload_node ! ( node_c_ser, 2 , monitor_c, v + 2 , keys_manager_c, fee_est_c) ;
1568
+ reload_node ( & node_c_ser, 2 , & monitor_c, v + 2 , & keys_manager_c, & fee_est_c) ;
1565
1569
nodes[ 2 ] = new_node_c;
1566
1570
monitor_c = new_monitor_c;
1567
1571
} ,
@@ -1855,16 +1859,13 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out, anchors: bool) {
1855
1859
}
1856
1860
1857
1861
if nodes[ 0 ] . get_and_clear_needs_persistence ( ) == true {
1858
- node_a_ser. 0 . clear ( ) ;
1859
- nodes[ 0 ] . write ( & mut node_a_ser) . unwrap ( ) ;
1862
+ node_a_ser = nodes[ 0 ] . encode ( ) ;
1860
1863
}
1861
1864
if nodes[ 1 ] . get_and_clear_needs_persistence ( ) == true {
1862
- node_b_ser. 0 . clear ( ) ;
1863
- nodes[ 1 ] . write ( & mut node_b_ser) . unwrap ( ) ;
1865
+ node_b_ser = nodes[ 1 ] . encode ( ) ;
1864
1866
}
1865
1867
if nodes[ 2 ] . get_and_clear_needs_persistence ( ) == true {
1866
- node_c_ser. 0 . clear ( ) ;
1867
- nodes[ 2 ] . write ( & mut node_c_ser) . unwrap ( ) ;
1868
+ node_c_ser = nodes[ 2 ] . encode ( ) ;
1868
1869
}
1869
1870
}
1870
1871
}
0 commit comments