@@ -344,14 +344,23 @@ impl Writeable for Route {
344
344
fn write < W : crate :: util:: ser:: Writer > ( & self , writer : & mut W ) -> Result < ( ) , io:: Error > {
345
345
write_ver_prefix ! ( writer, SERIALIZATION_VERSION , MIN_SERIALIZATION_VERSION ) ;
346
346
( self . paths . len ( ) as u64 ) . write ( writer) ?;
347
+ let mut blinded_tails = None ;
347
348
for path in self . paths . iter ( ) {
348
349
( path. hops . len ( ) as u8 ) . write ( writer) ?;
349
350
for hop in path. hops . iter ( ) {
350
351
hop. write ( writer) ?;
352
+ if let Some ( blinded_tail) = & path. blinded_tail {
353
+ if blinded_tails. is_none ( ) { blinded_tails = Some ( Vec :: new ( ) ) ; }
354
+ blinded_tails. as_mut ( ) . map ( |tails| tails. push ( blinded_tail) ) ;
355
+ }
351
356
}
352
357
}
358
+ if blinded_tails. is_some ( ) && blinded_tails. as_ref ( ) . unwrap ( ) . len ( ) != self . paths . len ( ) {
359
+ return Err ( io:: Error :: new ( io:: ErrorKind :: Other , "Missing blinded tail for path (if blinded tails are included, there must be 1 set per path)" ) )
360
+ }
353
361
write_tlv_fields ! ( writer, {
354
362
( 1 , self . payment_params, option) ,
363
+ ( 2 , blinded_tails, option) ,
355
364
} ) ;
356
365
Ok ( ( ) )
357
366
}
@@ -375,10 +384,17 @@ impl Readable for Route {
375
384
cmp:: min ( min_final_cltv_expiry_delta, hops. last ( ) . unwrap ( ) . cltv_expiry_delta ) ;
376
385
paths. push ( Path { hops, blinded_tail : None } ) ;
377
386
}
378
- let mut payment_params = None ;
379
- read_tlv_fields ! ( reader, {
387
+ _init_and_read_tlv_fields ! ( reader, {
380
388
( 1 , payment_params, ( option: ReadableArgs , min_final_cltv_expiry_delta) ) ,
389
+ ( 2 , blinded_tails, vec_type) ,
381
390
} ) ;
391
+ let blinded_tails = blinded_tails. unwrap_or ( Vec :: new ( ) ) ;
392
+ if blinded_tails. len ( ) != 0 {
393
+ if blinded_tails. len ( ) != paths. len ( ) { return Err ( DecodeError :: InvalidValue ) }
394
+ for ( mut path, blinded_tail) in paths. iter_mut ( ) . zip ( blinded_tails. into_iter ( ) ) {
395
+ path. blinded_tail = Some ( blinded_tail) ;
396
+ }
397
+ }
382
398
Ok ( Route { paths, payment_params } )
383
399
}
384
400
}
0 commit comments