@@ -11,9 +11,12 @@ use bitcoin::blockdata::script::Builder;
11
11
use bitcoin:: blockdata:: transaction:: TxOut ;
12
12
use bitcoin:: hash_types:: BlockHash ;
13
13
14
+ use lightning:: blinded_path:: { BlindedHop , BlindedPath } ;
14
15
use lightning:: chain:: transaction:: OutPoint ;
15
16
use lightning:: ln:: channelmanager:: { self , ChannelDetails , ChannelCounterparty } ;
17
+ use lightning:: ln:: features:: { BlindedHopFeatures , Bolt12InvoiceFeatures } ;
16
18
use lightning:: ln:: msgs;
19
+ use lightning:: offers:: invoice:: BlindedPayInfo ;
17
20
use lightning:: routing:: gossip:: { NetworkGraph , RoutingFees } ;
18
21
use lightning:: routing:: utxo:: { UtxoFuture , UtxoLookup , UtxoLookupError , UtxoResult } ;
19
22
use lightning:: routing:: router:: { find_route, PaymentParameters , RouteHint , RouteHintHop , RouteParameters } ;
@@ -315,7 +318,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
315
318
net_graph. channel_failed_permanent ( short_channel_id) ;
316
319
} ,
317
320
_ if node_pks. is_empty ( ) => { } ,
318
- _ => {
321
+ x if x < 250 => {
319
322
let mut first_hops_vec = Vec :: new ( ) ;
320
323
// Use macros here and in the blinded match arm to ensure values are fetched from the fuzz
321
324
// input in the same order, for better coverage.
@@ -330,6 +333,46 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
330
333
}
331
334
} ) ;
332
335
} ,
336
+ x => {
337
+ let mut first_hops_vec = Vec :: new ( ) ;
338
+ let first_hops = first_hops ! ( first_hops_vec) ;
339
+ let mut last_hops_unblinded = Vec :: new ( ) ;
340
+ last_hops ! ( last_hops_unblinded) ;
341
+ let dummy_pk = PublicKey :: from_slice ( & [ 2 ; 33 ] ) . unwrap ( ) ;
342
+ let last_hops: Vec < ( BlindedPayInfo , BlindedPath ) > = last_hops_unblinded. into_iter ( ) . map ( |hint| {
343
+ let hop = & hint. 0 [ 0 ] ;
344
+ let payinfo = BlindedPayInfo {
345
+ fee_base_msat : hop. fees . base_msat ,
346
+ fee_proportional_millionths : hop. fees . proportional_millionths ,
347
+ htlc_minimum_msat : hop. htlc_minimum_msat . unwrap ( ) ,
348
+ htlc_maximum_msat : hop. htlc_minimum_msat . unwrap ( ) . saturating_mul ( 100 ) ,
349
+ cltv_expiry_delta : hop. cltv_expiry_delta ,
350
+ features : BlindedHopFeatures :: empty ( ) ,
351
+ } ;
352
+ let num_blinded_hops = x % 250 ;
353
+ let mut blinded_hops = Vec :: new ( ) ;
354
+ for _ in 0 ..num_blinded_hops {
355
+ blinded_hops. push ( BlindedHop {
356
+ blinded_node_id : dummy_pk,
357
+ encrypted_payload : Vec :: new ( )
358
+ } ) ;
359
+ }
360
+ ( payinfo, BlindedPath {
361
+ introduction_node_id : hop. src_node_id ,
362
+ blinding_point : dummy_pk,
363
+ blinded_hops,
364
+ } )
365
+ } ) . collect ( ) ;
366
+ let mut features = Bolt12InvoiceFeatures :: empty ( ) ;
367
+ features. set_basic_mpp_optional ( ) ;
368
+ find_routes ! ( first_hops, vec![ dummy_pk] . iter( ) , |final_amt, _, _| {
369
+ RouteParameters {
370
+ payment_params: PaymentParameters :: blinded( last_hops. clone( ) )
371
+ . with_bolt12_features( features. clone( ) ) . unwrap( ) ,
372
+ final_value_msat: final_amt,
373
+ }
374
+ } ) ;
375
+ }
333
376
}
334
377
}
335
378
}
0 commit comments