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