@@ -261,45 +261,58 @@ fn check_payment_err(send_err: PaymentSendFailure) {
261261
262262type ChanMan = ChannelManager < EnforcingSigner , Arc < TestChainMonitor > , Arc < TestBroadcaster > , Arc < KeyProvider > , Arc < FuzzEstimator > , Arc < dyn Logger > > ;
263263
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. create_inbound_payment_for_hash ( payment_hash, None , 7200 , 0 ) {
270+ return Some ( ( payment_secret, payment_hash) ) ;
271+ }
272+ * payment_id = payment_id. wrapping_add ( 1 ) ;
273+ }
274+ None
275+ }
276+
264277#[ inline]
265278fn 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 ; } ;
268281 if let Err ( err) = source. send_payment ( & Route {
269282 paths : vec ! [ vec![ RouteHop {
270283 pubkey: dest. get_our_node_id( ) ,
271- node_features: NodeFeatures :: empty ( ) ,
284+ node_features: NodeFeatures :: known ( ) ,
272285 short_channel_id: dest_chan_id,
273- channel_features: ChannelFeatures :: empty ( ) ,
286+ channel_features: ChannelFeatures :: known ( ) ,
274287 fee_msat: amt,
275288 cltv_expiry_delta: 200 ,
276289 } ] ] ,
277- } , PaymentHash ( payment_hash. into_inner ( ) ) , & None ) {
290+ } , payment_hash, & Some ( payment_secret ) ) {
278291 check_payment_err ( err) ;
279292 false
280293 } else { true }
281294}
282295#[ inline]
283296fn 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 ; } ;
286299 if let Err ( err) = source. send_payment ( & Route {
287300 paths : vec ! [ vec![ RouteHop {
288301 pubkey: middle. get_our_node_id( ) ,
289- node_features: NodeFeatures :: empty ( ) ,
302+ node_features: NodeFeatures :: known ( ) ,
290303 short_channel_id: middle_chan_id,
291- channel_features: ChannelFeatures :: empty ( ) ,
304+ channel_features: ChannelFeatures :: known ( ) ,
292305 fee_msat: 50000 ,
293306 cltv_expiry_delta: 100 ,
294307 } , RouteHop {
295308 pubkey: dest. get_our_node_id( ) ,
296- node_features: NodeFeatures :: empty ( ) ,
309+ node_features: NodeFeatures :: known ( ) ,
297310 short_channel_id: dest_chan_id,
298- channel_features: ChannelFeatures :: empty ( ) ,
311+ channel_features: ChannelFeatures :: known ( ) ,
299312 fee_msat: amt,
300313 cltv_expiry_delta: 200 ,
301314 } ] ] ,
302- } , PaymentHash ( payment_hash. into_inner ( ) ) , & None ) {
315+ } , payment_hash, & Some ( payment_secret ) ) {
303316 check_payment_err ( err) ;
304317 false
305318 } else { true }
@@ -523,48 +536,6 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
523536 }
524537
525538 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-
568539 macro_rules! process_msg_events {
569540 ( $node: expr, $corrupt_forward: expr) => { {
570541 let events = if $node == 1 {
@@ -716,12 +687,12 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
716687 let had_events = !events. is_empty( ) ;
717688 for event in events. drain( ..) {
718689 match event {
719- events:: Event :: PaymentReceived { payment_hash, payment_secret , amt } => {
690+ events:: Event :: PaymentReceived { payment_hash, .. } => {
720691 if claim_set. insert( payment_hash. 0 ) {
721692 if $fail {
722- assert!( nodes[ $node] . fail_htlc_backwards( & payment_hash, & payment_secret ) ) ;
693+ assert!( nodes[ $node] . fail_htlc_backwards( & payment_hash) ) ;
723694 } else {
724- assert!( nodes[ $node] . claim_funds( PaymentPreimage ( payment_hash. 0 ) , & payment_secret , amt ) ) ;
695+ assert!( nodes[ $node] . claim_funds( PaymentPreimage ( payment_hash. 0 ) ) ) ;
725696 }
726697 }
727698 } ,
@@ -788,15 +759,15 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
788759 } ,
789760 0x0e => {
790761 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 ( ) } ) ;
793764 chan_a_disconnected = false ;
794765 }
795766 } ,
796767 0x0f => {
797768 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 ( ) } ) ;
800771 chan_b_disconnected = false ;
801772 }
802773 } ,
@@ -860,9 +831,6 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
860831 0x24 => { send_hop_payment ( & nodes[ 0 ] , & nodes[ 1 ] , chan_a, & nodes[ 2 ] , chan_b, 10_000_000 , & mut payment_id) ; } ,
861832 0x25 => { send_hop_payment ( & nodes[ 2 ] , & nodes[ 1 ] , chan_b, & nodes[ 0 ] , chan_a, 10_000_000 , & mut payment_id) ; } ,
862833
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-
866834 0x28 => { send_payment ( & nodes[ 0 ] , & nodes[ 1 ] , chan_a, 1_000_000 , & mut payment_id) ; } ,
867835 0x29 => { send_payment ( & nodes[ 1 ] , & nodes[ 0 ] , chan_a, 1_000_000 , & mut payment_id) ; } ,
868836 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) {
936904
937905 // Next, make sure peers are all connected to each other
938906 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 ( ) } ) ;
941909 chan_a_disconnected = false ;
942910 }
943911 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 ( ) } ) ;
946914 chan_b_disconnected = false ;
947915 }
948916
0 commit comments