@@ -1109,6 +1109,47 @@ fn test_phantom_failure_too_low_cltv() {
1109
1109
expect_payment_failed_conditions ( & nodes[ 0 ] , payment_hash, true , fail_conditions) ;
1110
1110
}
1111
1111
1112
+ #[ test]
1113
+ fn test_phantom_failure_modified_cltv ( ) {
1114
+ // Test that we fail back phantoms if the upstream node fiddled with the CLTV too much with the
1115
+ // correct error code.
1116
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
1117
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
1118
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
1119
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
1120
+
1121
+ let channel = create_announced_chan_between_nodes ( & nodes, 0 , 1 , channelmanager:: provided_init_features ( ) , channelmanager:: provided_init_features ( ) ) ;
1122
+
1123
+ // Get the route.
1124
+ let recv_value_msat = 10_000 ;
1125
+ let ( _, payment_hash, payment_secret) = get_payment_preimage_hash ! ( nodes[ 1 ] , Some ( recv_value_msat) ) ;
1126
+ let ( mut route, phantom_scid) = get_phantom_route ! ( nodes, recv_value_msat, channel) ;
1127
+
1128
+ // Route the HTLC through to the destination.
1129
+ nodes[ 0 ] . node . send_payment ( & route, payment_hash, & Some ( payment_secret) , PaymentId ( payment_hash. 0 ) ) . unwrap ( ) ;
1130
+ check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
1131
+ let update_0 = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
1132
+ let mut update_add = update_0. update_add_htlcs [ 0 ] . clone ( ) ;
1133
+
1134
+ // Modify the route to have a too-low cltv.
1135
+ update_add. cltv_expiry -= 10 ;
1136
+
1137
+ nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & update_add) ;
1138
+ commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , & update_0. commitment_signed, false , true ) ;
1139
+
1140
+ let update_1 = get_htlc_update_msgs ! ( nodes[ 1 ] , nodes[ 0 ] . node. get_our_node_id( ) ) ;
1141
+ assert ! ( update_1. update_fail_htlcs. len( ) == 1 ) ;
1142
+ let fail_msg = update_1. update_fail_htlcs [ 0 ] . clone ( ) ;
1143
+ nodes[ 0 ] . node . handle_update_fail_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & fail_msg) ;
1144
+ commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , update_1. commitment_signed, false ) ;
1145
+
1146
+ // Ensure the payment fails with the expected error.
1147
+ let mut fail_conditions = PaymentFailedConditions :: new ( )
1148
+ . blamed_scid ( phantom_scid)
1149
+ . expected_htlc_error_data ( 0x2000 | 2 , & [ ] ) ;
1150
+ expect_payment_failed_conditions ( & nodes[ 0 ] , payment_hash, false , fail_conditions) ;
1151
+ }
1152
+
1112
1153
#[ test]
1113
1154
fn test_phantom_failure_too_low_recv_amt ( ) {
1114
1155
let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
0 commit comments