@@ -261,45 +261,58 @@ fn check_payment_err(send_err: PaymentSendFailure) {
261
261
262
262
type ChanMan = ChannelManager < EnforcingSigner , Arc < TestChainMonitor > , Arc < TestBroadcaster > , Arc < KeyProvider > , Arc < FuzzEstimator > , Arc < dyn Logger > > ;
263
263
264
+ #[ inline]
265
+ fn get_payment_secret_hash ( dest : & ChanMan , payment_id : & mut u8 ) -> Option < ( PaymentSecret , PaymentHash ) > {
266
+ let mut payment_hash;
267
+ for _ in 0 ..256 {
268
+ payment_hash = PaymentHash ( Sha256 :: hash ( & [ * payment_id; 1 ] ) . into_inner ( ) ) ;
269
+ if let Ok ( payment_secret) = dest. get_payment_secret ( payment_hash, None , 1008 ) {
270
+ return Some ( ( payment_secret, payment_hash) ) ;
271
+ }
272
+ * payment_id = payment_id. wrapping_add ( 1 ) ;
273
+ }
274
+ None
275
+ }
276
+
264
277
#[ inline]
265
278
fn send_payment ( source : & ChanMan , dest : & ChanMan , dest_chan_id : u64 , amt : u64 , payment_id : & mut u8 ) -> bool {
266
- let payment_hash = Sha256 :: hash ( & [ * payment_id ; 1 ] ) ;
267
- * payment_id = payment_id. wrapping_add ( 1 ) ;
279
+ let ( payment_secret , payment_hash ) =
280
+ if let Some ( ( secret , hash ) ) = get_payment_secret_hash ( dest , payment_id) { ( secret , hash ) } else { return true ; } ;
268
281
if let Err ( err) = source. send_payment ( & Route {
269
282
paths : vec ! [ vec![ RouteHop {
270
283
pubkey: dest. get_our_node_id( ) ,
271
- node_features: NodeFeatures :: empty ( ) ,
284
+ node_features: NodeFeatures :: known ( ) ,
272
285
short_channel_id: dest_chan_id,
273
- channel_features: ChannelFeatures :: empty ( ) ,
286
+ channel_features: ChannelFeatures :: known ( ) ,
274
287
fee_msat: amt,
275
288
cltv_expiry_delta: 200 ,
276
289
} ] ] ,
277
- } , PaymentHash ( payment_hash. into_inner ( ) ) , & None ) {
290
+ } , payment_hash, & Some ( payment_secret ) ) {
278
291
check_payment_err ( err) ;
279
292
false
280
293
} else { true }
281
294
}
282
295
#[ inline]
283
296
fn send_hop_payment ( source : & ChanMan , middle : & ChanMan , middle_chan_id : u64 , dest : & ChanMan , dest_chan_id : u64 , amt : u64 , payment_id : & mut u8 ) -> bool {
284
- let payment_hash = Sha256 :: hash ( & [ * payment_id ; 1 ] ) ;
285
- * payment_id = payment_id. wrapping_add ( 1 ) ;
297
+ let ( payment_secret , payment_hash ) =
298
+ if let Some ( ( secret , hash ) ) = get_payment_secret_hash ( dest , payment_id) { ( secret , hash ) } else { return true ; } ;
286
299
if let Err ( err) = source. send_payment ( & Route {
287
300
paths : vec ! [ vec![ RouteHop {
288
301
pubkey: middle. get_our_node_id( ) ,
289
- node_features: NodeFeatures :: empty ( ) ,
302
+ node_features: NodeFeatures :: known ( ) ,
290
303
short_channel_id: middle_chan_id,
291
- channel_features: ChannelFeatures :: empty ( ) ,
304
+ channel_features: ChannelFeatures :: known ( ) ,
292
305
fee_msat: 50000 ,
293
306
cltv_expiry_delta: 100 ,
294
307
} , RouteHop {
295
308
pubkey: dest. get_our_node_id( ) ,
296
- node_features: NodeFeatures :: empty ( ) ,
309
+ node_features: NodeFeatures :: known ( ) ,
297
310
short_channel_id: dest_chan_id,
298
- channel_features: ChannelFeatures :: empty ( ) ,
311
+ channel_features: ChannelFeatures :: known ( ) ,
299
312
fee_msat: amt,
300
313
cltv_expiry_delta: 200 ,
301
314
} ] ] ,
302
- } , PaymentHash ( payment_hash. into_inner ( ) ) , & None ) {
315
+ } , payment_hash, & Some ( payment_secret ) ) {
303
316
check_payment_err ( err) ;
304
317
false
305
318
} else { true }
@@ -523,48 +536,6 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
523
536
}
524
537
525
538
loop {
526
- macro_rules! send_payment_with_secret {
527
- ( $source: expr, $middle: expr, $dest: expr) => { {
528
- let payment_hash = Sha256 :: hash( & [ payment_id; 1 ] ) ;
529
- payment_id = payment_id. wrapping_add( 1 ) ;
530
- let payment_secret = Sha256 :: hash( & [ payment_id; 1 ] ) ;
531
- payment_id = payment_id. wrapping_add( 1 ) ;
532
- if let Err ( err) = $source. send_payment( & Route {
533
- paths: vec![ vec![ RouteHop {
534
- pubkey: $middle. 0 . get_our_node_id( ) ,
535
- node_features: NodeFeatures :: empty( ) ,
536
- short_channel_id: $middle. 1 ,
537
- channel_features: ChannelFeatures :: empty( ) ,
538
- fee_msat: 50_000 ,
539
- cltv_expiry_delta: 100 ,
540
- } , RouteHop {
541
- pubkey: $dest. 0 . get_our_node_id( ) ,
542
- node_features: NodeFeatures :: empty( ) ,
543
- short_channel_id: $dest. 1 ,
544
- channel_features: ChannelFeatures :: empty( ) ,
545
- fee_msat: 10_000_000 ,
546
- cltv_expiry_delta: 200 ,
547
- } ] , vec![ RouteHop {
548
- pubkey: $middle. 0 . get_our_node_id( ) ,
549
- node_features: NodeFeatures :: empty( ) ,
550
- short_channel_id: $middle. 1 ,
551
- channel_features: ChannelFeatures :: empty( ) ,
552
- fee_msat: 50_000 ,
553
- cltv_expiry_delta: 100 ,
554
- } , RouteHop {
555
- pubkey: $dest. 0 . get_our_node_id( ) ,
556
- node_features: NodeFeatures :: empty( ) ,
557
- short_channel_id: $dest. 1 ,
558
- channel_features: ChannelFeatures :: empty( ) ,
559
- fee_msat: 10_000_000 ,
560
- cltv_expiry_delta: 200 ,
561
- } ] ] ,
562
- } , PaymentHash ( payment_hash. into_inner( ) ) , & Some ( PaymentSecret ( payment_secret. into_inner( ) ) ) ) {
563
- check_payment_err( err) ;
564
- }
565
- } }
566
- }
567
-
568
539
macro_rules! process_msg_events {
569
540
( $node: expr, $corrupt_forward: expr) => { {
570
541
let events = if $node == 1 {
@@ -788,15 +759,15 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
788
759
} ,
789
760
0x0e => {
790
761
if chan_a_disconnected {
791
- nodes[ 0 ] . peer_connected ( & nodes[ 1 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: empty ( ) } ) ;
792
- nodes[ 1 ] . peer_connected ( & nodes[ 0 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: empty ( ) } ) ;
762
+ nodes[ 0 ] . peer_connected ( & nodes[ 1 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: known ( ) } ) ;
763
+ nodes[ 1 ] . peer_connected ( & nodes[ 0 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: known ( ) } ) ;
793
764
chan_a_disconnected = false ;
794
765
}
795
766
} ,
796
767
0x0f => {
797
768
if chan_b_disconnected {
798
- nodes[ 1 ] . peer_connected ( & nodes[ 2 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: empty ( ) } ) ;
799
- nodes[ 2 ] . peer_connected ( & nodes[ 1 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: empty ( ) } ) ;
769
+ nodes[ 1 ] . peer_connected ( & nodes[ 2 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: known ( ) } ) ;
770
+ nodes[ 2 ] . peer_connected ( & nodes[ 1 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: known ( ) } ) ;
800
771
chan_b_disconnected = false ;
801
772
}
802
773
} ,
@@ -860,9 +831,6 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
860
831
0x24 => { send_hop_payment ( & nodes[ 0 ] , & nodes[ 1 ] , chan_a, & nodes[ 2 ] , chan_b, 10_000_000 , & mut payment_id) ; } ,
861
832
0x25 => { send_hop_payment ( & nodes[ 2 ] , & nodes[ 1 ] , chan_b, & nodes[ 0 ] , chan_a, 10_000_000 , & mut payment_id) ; } ,
862
833
863
- 0x26 => { send_payment_with_secret ! ( nodes[ 0 ] , ( & nodes[ 1 ] , chan_a) , ( & nodes[ 2 ] , chan_b) ) ; } ,
864
- 0x27 => { send_payment_with_secret ! ( nodes[ 2 ] , ( & nodes[ 1 ] , chan_b) , ( & nodes[ 0 ] , chan_a) ) ; } ,
865
-
866
834
0x28 => { send_payment ( & nodes[ 0 ] , & nodes[ 1 ] , chan_a, 1_000_000 , & mut payment_id) ; } ,
867
835
0x29 => { send_payment ( & nodes[ 1 ] , & nodes[ 0 ] , chan_a, 1_000_000 , & mut payment_id) ; } ,
868
836
0x2a => { send_payment ( & nodes[ 1 ] , & nodes[ 2 ] , chan_b, 1_000_000 , & mut payment_id) ; } ,
@@ -936,13 +904,13 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
936
904
937
905
// Next, make sure peers are all connected to each other
938
906
if chan_a_disconnected {
939
- nodes[ 0 ] . peer_connected ( & nodes[ 1 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: empty ( ) } ) ;
940
- nodes[ 1 ] . peer_connected ( & nodes[ 0 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: empty ( ) } ) ;
907
+ nodes[ 0 ] . peer_connected ( & nodes[ 1 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: known ( ) } ) ;
908
+ nodes[ 1 ] . peer_connected ( & nodes[ 0 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: known ( ) } ) ;
941
909
chan_a_disconnected = false ;
942
910
}
943
911
if chan_b_disconnected {
944
- nodes[ 1 ] . peer_connected ( & nodes[ 2 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: empty ( ) } ) ;
945
- nodes[ 2 ] . peer_connected ( & nodes[ 1 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: empty ( ) } ) ;
912
+ nodes[ 1 ] . peer_connected ( & nodes[ 2 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: known ( ) } ) ;
913
+ nodes[ 2 ] . peer_connected ( & nodes[ 1 ] . get_our_node_id ( ) , & Init { features : InitFeatures :: known ( ) } ) ;
946
914
chan_b_disconnected = false ;
947
915
}
948
916
0 commit comments