@@ -2105,7 +2105,7 @@ fn add_random_cltv_offset(route: &mut Route, payment_params: &PaymentParameters,
2105
2105
let network_nodes = network_graph. nodes ( ) ;
2106
2106
2107
2107
for path in route. paths . iter_mut ( ) {
2108
- if path. blinded_tail . as_ref ( ) . map_or ( false , |tail| tail. path . blinded_hops . len ( ) > 1 ) { continue }
2108
+ if path. blinded_tail . as_ref ( ) . map_or ( false , |tail| tail. hops . len ( ) > 1 ) { continue }
2109
2109
2110
2110
let mut shadow_ctlv_expiry_delta_offset: u32 = 0 ;
2111
2111
@@ -2176,9 +2176,10 @@ fn add_random_cltv_offset(route: &mut Route, payment_params: &PaymentParameters,
2176
2176
2177
2177
// Add 'shadow' CLTV offset to the final hop
2178
2178
if let Some ( tail) = path. blinded_tail . as_mut ( ) {
2179
- tail. cltv_expiry_delta = tail. cltv_expiry_delta
2180
- . checked_add ( shadow_ctlv_expiry_delta_offset) . unwrap_or ( tail. cltv_expiry_delta ) ;
2181
- } else if let Some ( last_hop) = path. hops . last_mut ( ) {
2179
+ tail. final_cltv_expiry_delta = tail. final_cltv_expiry_delta
2180
+ . checked_add ( shadow_ctlv_expiry_delta_offset) . unwrap_or ( tail. final_cltv_expiry_delta ) ;
2181
+ }
2182
+ if let Some ( last_hop) = path. hops . last_mut ( ) {
2182
2183
last_hop. cltv_expiry_delta = last_hop. cltv_expiry_delta
2183
2184
. checked_add ( shadow_ctlv_expiry_delta_offset) . unwrap_or ( last_hop. cltv_expiry_delta ) ;
2184
2185
}
@@ -5810,6 +5811,14 @@ mod tests {
5810
5811
#[ test]
5811
5812
fn blinded_path_cltv_shadow_offset ( ) {
5812
5813
// Don't add a shadow offset to blinded paths with more than 1 hop.
5814
+ let blinded_path = BlindedPath {
5815
+ introduction_node_id : ln_test_utils:: pubkey ( 43 ) ,
5816
+ blinding_point : ln_test_utils:: pubkey ( 44 ) ,
5817
+ blinded_hops : vec ! [
5818
+ BlindedHop { blinded_node_id: ln_test_utils:: pubkey( 45 ) , encrypted_payload: Vec :: new( ) } ,
5819
+ BlindedHop { blinded_node_id: ln_test_utils:: pubkey( 46 ) , encrypted_payload: Vec :: new( ) }
5820
+ ] ,
5821
+ } ;
5813
5822
let mut route = Route { paths : vec ! [ Path {
5814
5823
hops: vec![ RouteHop {
5815
5824
pubkey: ln_test_utils:: pubkey( 42 ) ,
@@ -5818,32 +5827,33 @@ mod tests {
5818
5827
channel_features: ChannelFeatures :: empty( ) ,
5819
5828
fee_msat: 100 ,
5820
5829
cltv_expiry_delta: 0 ,
5821
- } ] ,
5822
- blinded_tail: Some ( BlindedTail {
5823
- path: BlindedPath {
5824
- introduction_node_id: ln_test_utils:: pubkey( 43 ) ,
5825
- blinding_point: ln_test_utils:: pubkey( 44 ) ,
5826
- blinded_hops: vec![
5827
- BlindedHop { blinded_node_id: ln_test_utils:: pubkey( 45 ) , encrypted_payload: Vec :: new( ) } ,
5828
- BlindedHop { blinded_node_id: ln_test_utils:: pubkey( 46 ) , encrypted_payload: Vec :: new( ) }
5829
- ] ,
5830
- } ,
5831
- intro_node_scid: 43 ,
5830
+ } ,
5831
+ RouteHop {
5832
+ pubkey: blinded_path. introduction_node_id,
5833
+ node_features: NodeFeatures :: empty( ) ,
5834
+ short_channel_id: 43 ,
5835
+ channel_features: ChannelFeatures :: empty( ) ,
5832
5836
fee_msat: 1 ,
5833
5837
cltv_expiry_delta: 0 ,
5838
+ }
5839
+ ] ,
5840
+ blinded_tail: Some ( BlindedTail {
5841
+ hops: blinded_path. blinded_hops,
5842
+ blinding_point: blinded_path. blinding_point,
5843
+ final_cltv_expiry_delta: 0 ,
5834
5844
final_value_msat: 200 ,
5835
5845
} ) ,
5836
5846
} ] , payment_params : None } ;
5837
5847
5838
5848
let payment_params = PaymentParameters :: from_node_id ( ln_test_utils:: pubkey ( 47 ) , 18 ) ;
5839
5849
let ( _, network_graph, _, _, _) = build_line_graph ( ) ;
5840
5850
add_random_cltv_offset ( & mut route, & payment_params, & network_graph. read_only ( ) , & [ 0 ; 32 ] ) ;
5841
- assert_eq ! ( route. paths[ 0 ] . blinded_tail. as_ref( ) . unwrap( ) . cltv_expiry_delta , 0 ) ;
5851
+ assert_eq ! ( route. paths[ 0 ] . blinded_tail. as_ref( ) . unwrap( ) . final_cltv_expiry_delta , 0 ) ;
5842
5852
5843
5853
// Add a shadow offset if we're sending to a 1-hop blinded path.
5844
- route. paths [ 0 ] . blinded_tail . as_mut ( ) . unwrap ( ) . path . blinded_hops . pop ( ) ;
5854
+ route. paths [ 0 ] . blinded_tail . as_mut ( ) . unwrap ( ) . hops . pop ( ) ;
5845
5855
add_random_cltv_offset ( & mut route, & payment_params, & network_graph. read_only ( ) , & [ 0 ; 32 ] ) ;
5846
- assert_eq ! ( route. paths[ 0 ] . blinded_tail. as_ref( ) . unwrap( ) . cltv_expiry_delta , 40 ) ;
5856
+ assert_eq ! ( route. paths[ 0 ] . blinded_tail. as_ref( ) . unwrap( ) . final_cltv_expiry_delta , 40 ) ;
5847
5857
}
5848
5858
}
5849
5859
0 commit comments