@@ -1968,19 +1968,33 @@ fn get_announce_close_broadcast_events(nodes: &Vec<Node>, a: usize, b: usize) {
1968
1968
}
1969
1969
}
1970
1970
1971
+ macro_rules! expect_payment_received {
1972
+ ( $node: expr, $expected_payment_hash: expr, $expected_recv_value: expr) => {
1973
+ let events = $node. node. get_and_clear_pending_events( ) ;
1974
+ assert_eq!( events. len( ) , 1 ) ;
1975
+ match events[ 0 ] {
1976
+ Event :: PaymentReceived { ref payment_hash, amt } => {
1977
+ assert_eq!( $expected_payment_hash, * payment_hash) ;
1978
+ assert_eq!( $expected_recv_value, amt) ;
1979
+ } ,
1980
+ _ => panic!( "Unexpected event" ) ,
1981
+ }
1982
+ }
1983
+ }
1984
+
1985
+ macro_rules! get_channel_value_stat {
1986
+ ( $node: expr, $channel_id: expr) => { {
1987
+ let chan_lock = $node. node. channel_state. lock( ) . unwrap( ) ;
1988
+ let chan = chan_lock. by_id. get( & $channel_id) . unwrap( ) ;
1989
+ chan. get_value_stat( )
1990
+ } }
1991
+ }
1992
+
1971
1993
fn do_channel_reserve_test ( test_recv : bool ) {
1972
1994
use util:: rng;
1973
1995
use std:: sync:: atomic:: Ordering ;
1974
1996
use ln:: msgs:: HandleError ;
1975
1997
1976
- macro_rules! get_channel_value_stat {
1977
- ( $node: expr, $channel_id: expr) => { {
1978
- let chan_lock = $node. node. channel_state. lock( ) . unwrap( ) ;
1979
- let chan = chan_lock. by_id. get( & $channel_id) . unwrap( ) ;
1980
- chan. get_value_stat( )
1981
- } }
1982
- }
1983
-
1984
1998
let mut nodes = create_network ( 3 ) ;
1985
1999
let chan_1 = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 1900 , 1001 ) ;
1986
2000
let chan_2 = create_announced_chan_between_nodes_with_value ( & nodes, 1 , 2 , 1900 , 1001 ) ;
@@ -2009,20 +2023,6 @@ fn do_channel_reserve_test(test_recv: bool) {
2009
2023
} }
2010
2024
}
2011
2025
2012
- macro_rules! expect_payment_received {
2013
- ( $node: expr, $expected_payment_hash: expr, $expected_recv_value: expr) => {
2014
- let events = $node. node. get_and_clear_pending_events( ) ;
2015
- assert_eq!( events. len( ) , 1 ) ;
2016
- match events[ 0 ] {
2017
- Event :: PaymentReceived { ref payment_hash, amt } => {
2018
- assert_eq!( $expected_payment_hash, * payment_hash) ;
2019
- assert_eq!( $expected_recv_value, amt) ;
2020
- } ,
2021
- _ => panic!( "Unexpected event" ) ,
2022
- }
2023
- }
2024
- } ;
2025
-
2026
2026
let feemsat = 239 ; // somehow we know?
2027
2027
let total_fee_msat = ( nodes. len ( ) - 2 ) as u64 * 239 ;
2028
2028
@@ -6655,9 +6655,6 @@ fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_num_and_htlc_id_increment()
6655
6655
let chan = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 1000000 , 0 ) ;
6656
6656
let max_accepted_htlcs = nodes[ 1 ] . node . channel_state . lock ( ) . unwrap ( ) . by_id . get ( & chan. 2 ) . unwrap ( ) . their_max_accepted_htlcs as u64 ;
6657
6657
6658
- //Confirm the first HTLC ID is zero
6659
- assert_eq ! ( nodes[ 0 ] . node. channel_state. lock( ) . unwrap( ) . by_id. get( & chan. 2 ) . unwrap( ) . next_local_htlc_id, 0 ) ;
6660
-
6661
6658
for i in 0 ..max_accepted_htlcs {
6662
6659
let route = nodes[ 0 ] . router . get_route ( & nodes[ 1 ] . node . get_our_node_id ( ) , None , & [ ] , 100000 , TEST_FINAL_CLTV ) . unwrap ( ) ;
6663
6660
let ( _, our_payment_hash) = get_payment_preimage_hash ! ( nodes[ 0 ] ) ;
@@ -6667,17 +6664,19 @@ fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_num_and_htlc_id_increment()
6667
6664
6668
6665
let mut events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
6669
6666
assert_eq ! ( events. len( ) , 1 ) ;
6667
+ if let MessageSendEvent :: UpdateHTLCs { node_id : _, updates : msgs:: CommitmentUpdate { update_add_htlcs : ref htlcs, .. } , } = events[ 0 ] {
6668
+ assert_eq ! ( htlcs[ 0 ] . htlc_id, i) ;
6669
+ } else {
6670
+ assert ! ( false ) ;
6671
+ }
6670
6672
SendEvent :: from_event ( events. remove ( 0 ) )
6671
6673
} ;
6672
6674
nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & payment_event. msgs [ 0 ] ) . unwrap ( ) ;
6673
6675
check_added_monitors ! ( nodes[ 1 ] , 0 ) ;
6674
6676
commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , payment_event. commitment_msg, false ) ;
6675
6677
6676
6678
expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ;
6677
- let _ = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
6678
-
6679
- //Confirm the value of the id is increased
6680
- assert_eq ! ( nodes[ 0 ] . node. channel_state. lock( ) . unwrap( ) . by_id. get( & chan. 2 ) . unwrap( ) . next_local_htlc_id, i+1 ) ;
6679
+ expect_payment_received ! ( nodes[ 1 ] , our_payment_hash, 100000 ) ;
6681
6680
}
6682
6681
let route = nodes[ 0 ] . router . get_route ( & nodes[ 1 ] . node . get_our_node_id ( ) , None , & [ ] , 100000 , TEST_FINAL_CLTV ) . unwrap ( ) ;
6683
6682
let ( _, our_payment_hash) = get_payment_preimage_hash ! ( nodes[ 0 ] ) ;
@@ -6694,11 +6693,14 @@ fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_num_and_htlc_id_increment()
6694
6693
fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_value_in_flight ( ) {
6695
6694
//BOLT 2 Requirement: if the sum of total offered HTLCs would exceed the remote's max_htlc_value_in_flight_msat: MUST NOT add an HTLC.
6696
6695
let mut nodes = create_network ( 2 ) ;
6697
- let _chan = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 100000 , 0 ) ;
6696
+ let channel_value = 100000 ;
6697
+ let chan = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , channel_value, 0 ) ;
6698
+ let max_in_flight = get_channel_value_stat ! ( nodes[ 0 ] , chan. 2 ) . their_max_htlc_value_in_flight_msat ;
6698
6699
6699
- let route = nodes[ 0 ] . router . get_route ( & nodes[ 1 ] . node . get_our_node_id ( ) , None , & [ ] , 100000000 , TEST_FINAL_CLTV ) . unwrap ( ) ;
6700
- let ( _, our_payment_hash) = get_payment_preimage_hash ! ( nodes[ 0 ] ) ;
6700
+ send_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] ) [ ..] , max_in_flight) ;
6701
6701
6702
+ let route = nodes[ 0 ] . router . get_route ( & nodes[ 1 ] . node . get_our_node_id ( ) , None , & [ ] , max_in_flight+1 , TEST_FINAL_CLTV ) . unwrap ( ) ;
6703
+ let ( _, our_payment_hash) = get_payment_preimage_hash ! ( nodes[ 0 ] ) ;
6702
6704
let err = nodes[ 0 ] . node . send_payment ( route, our_payment_hash) ;
6703
6705
6704
6706
if let Err ( APIError :: ChannelUnavailable { err} ) = err {
@@ -6727,22 +6729,18 @@ fn test_update_add_htlc_bolt2_receiver_check_amount_received_more_than_min() {
6727
6729
nodes[ 0 ] . node . send_payment ( route, our_payment_hash) . unwrap ( ) ;
6728
6730
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
6729
6731
let mut updates = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
6730
-
6731
6732
updates. update_add_htlcs [ 0 ] . amount_msat = htlc_minimum_msat-1 ;
6732
6733
let err = nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & updates. update_add_htlcs [ 0 ] ) ;
6733
-
6734
6734
if let Err ( HandleError { err, action : _} ) = err {
6735
6735
assert_eq ! ( err, "Remote side tried to send less than our minimum HTLC value" ) ;
6736
6736
} else {
6737
6737
assert ! ( false ) ;
6738
6738
}
6739
-
6740
6739
//Confirm the channel was closed
6741
6740
{
6742
6741
assert_eq ! ( nodes[ 1 ] . node. channel_state. lock( ) . unwrap( ) . by_id. len( ) , 0 ) ;
6743
6742
}
6744
- //Clear unhandled msg events.
6745
- let _ = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
6743
+ check_closed_broadcast ! ( nodes[ 1 ] ) ;
6746
6744
}
6747
6745
6748
6746
#[ test]
@@ -6751,14 +6749,17 @@ fn test_update_add_htlc_bolt2_receiver_sender_can_afford_amount_sent() {
6751
6749
6752
6750
//BOLT2 Requirement: receiving an amount_msat that the sending node cannot afford at the current feerate_per_kw (while maintaining its channel reserve): SHOULD fail the channel
6753
6751
let mut nodes = create_network ( 2 ) ;
6754
- let _chan = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 100000 , 95000000 ) ;
6755
- let route = nodes[ 0 ] . router . get_route ( & nodes[ 1 ] . node . get_our_node_id ( ) , None , & [ ] , 3999999 , TEST_FINAL_CLTV ) . unwrap ( ) ;
6752
+ let chan = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 100000 , 95000000 ) ;
6753
+
6754
+ let their_channel_reserve = get_channel_value_stat ! ( nodes[ 0 ] , chan. 2 ) . channel_reserve_msat ;
6755
+
6756
+ let route = nodes[ 0 ] . router . get_route ( & nodes[ 1 ] . node . get_our_node_id ( ) , None , & [ ] , 5000000 -their_channel_reserve, TEST_FINAL_CLTV ) . unwrap ( ) ;
6756
6757
let ( _, our_payment_hash) = get_payment_preimage_hash ! ( nodes[ 0 ] ) ;
6757
6758
nodes[ 0 ] . node . send_payment ( route, our_payment_hash) . unwrap ( ) ;
6758
6759
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
6759
6760
let mut updates = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
6760
6761
6761
- updates. update_add_htlcs [ 0 ] . amount_msat = 4000001 ;
6762
+ updates. update_add_htlcs [ 0 ] . amount_msat = 5000000 -their_channel_reserve+ 1 ;
6762
6763
let err = nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & updates. update_add_htlcs [ 0 ] ) ;
6763
6764
6764
6765
if let Err ( HandleError { err, action : _} ) = err {
@@ -6771,8 +6772,7 @@ fn test_update_add_htlc_bolt2_receiver_sender_can_afford_amount_sent() {
6771
6772
{
6772
6773
assert_eq ! ( nodes[ 1 ] . node. channel_state. lock( ) . unwrap( ) . by_id. len( ) , 0 ) ;
6773
6774
}
6774
- //Clear unhandled msg events.
6775
- let _ = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
6775
+ check_closed_broadcast ! ( nodes[ 1 ] ) ;
6776
6776
}
6777
6777
6778
6778
#[ test]
@@ -6812,7 +6812,7 @@ fn test_update_add_htlc_bolt2_receiver_check_max_htlc_limit() {
6812
6812
msg. htlc_id = i as u64 ;
6813
6813
nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & msg) . unwrap ( ) ;
6814
6814
}
6815
- msg. htlc_id = ( super :: channel:: OUR_MAX_HTLCS + 1 ) as u64 ;
6815
+ msg. htlc_id = ( super :: channel:: OUR_MAX_HTLCS ) as u64 ;
6816
6816
let err = nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & msg) ;
6817
6817
6818
6818
if let Err ( HandleError { err, action : _} ) = err {
@@ -6825,8 +6825,7 @@ fn test_update_add_htlc_bolt2_receiver_check_max_htlc_limit() {
6825
6825
{
6826
6826
assert_eq ! ( nodes[ 1 ] . node. channel_state. lock( ) . unwrap( ) . by_id. len( ) , 0 ) ;
6827
6827
}
6828
- //Clear unhandled msg events.
6829
- let _ = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
6828
+ check_closed_broadcast ! ( nodes[ 1 ] ) ;
6830
6829
}
6831
6830
6832
6831
#[ test]
@@ -6838,7 +6837,7 @@ fn test_update_add_htlc_bolt2_receiver_check_max_in_flight_msat() {
6838
6837
let chan = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 1000000 , 1000000 ) ;
6839
6838
let route = nodes[ 0 ] . router . get_route ( & nodes[ 1 ] . node . get_our_node_id ( ) , None , & [ ] , 1000000 , TEST_FINAL_CLTV ) . unwrap ( ) ;
6840
6839
let ( _, our_payment_hash) = get_payment_preimage_hash ! ( nodes[ 0 ] ) ;
6841
- nodes[ 0 ] . node . send_payment ( route, our_payment_hash) . unwrap ( ) ;
6840
+ nodes[ 0 ] . node . send_payment ( route, our_payment_hash) . unwrap ( ) ;
6842
6841
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
6843
6842
let mut updates = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
6844
6843
updates. update_add_htlcs [ 0 ] . amount_msat = nodes[ 1 ] . node . channel_state . lock ( ) . unwrap ( ) . by_id . get ( & chan. 2 ) . unwrap ( ) . their_max_htlc_value_in_flight_msat + 1 ;
@@ -6883,8 +6882,7 @@ fn test_update_add_htlc_bolt2_receiver_check_cltv_expiry() {
6883
6882
{
6884
6883
assert_eq ! ( nodes[ 1 ] . node. channel_state. lock( ) . unwrap( ) . by_id. len( ) , 0 ) ;
6885
6884
}
6886
- //Clear unhandled msg events.
6887
- let _ = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
6885
+ check_closed_broadcast ! ( nodes[ 1 ] ) ;
6888
6886
}
6889
6887
6890
6888
#[ test]
@@ -6896,7 +6894,7 @@ fn test_update_add_htlc_bolt2_receiver_check_repeated_id_ignore() {
6896
6894
let ( _, our_payment_hash) = get_payment_preimage_hash ! ( nodes[ 0 ] ) ;
6897
6895
nodes[ 0 ] . node . send_payment ( route, our_payment_hash) . unwrap ( ) ;
6898
6896
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
6899
- let updates = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
6897
+ let mut updates = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
6900
6898
let _ = nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & updates. update_add_htlcs [ 0 ] ) ;
6901
6899
assert_eq ! ( nodes[ 1 ] . node. channel_state. lock( ) . unwrap( ) . by_id. get( & chan. 2 ) . unwrap( ) . next_remote_htlc_id, 1 ) ;
6902
6900
@@ -6913,11 +6911,10 @@ fn test_update_add_htlc_bolt2_receiver_check_repeated_id_ignore() {
6913
6911
let _ = handle_chan_reestablish_msgs ! ( nodes[ 0 ] , nodes[ 1 ] ) ;
6914
6912
nodes[ 1 ] . node . handle_channel_reestablish ( & nodes[ 0 ] . node . get_our_node_id ( ) , & reestablish_1[ 0 ] ) . unwrap ( ) ;
6915
6913
let _ = handle_chan_reestablish_msgs ! ( nodes[ 1 ] , nodes[ 0 ] ) ;
6914
+
6915
+ //Resend HTLC
6916
6916
let _ = nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & updates. update_add_htlcs [ 0 ] ) ;
6917
- //Confirm the HTLC was ignored
6918
6917
assert_eq ! ( nodes[ 1 ] . node. channel_state. lock( ) . unwrap( ) . by_id. get( & chan. 2 ) . unwrap( ) . next_remote_htlc_id, 1 ) ;
6919
-
6920
- //Clear unhandled msg events
6921
- let _ = nodes[ 1 ] . node . get_and_clear_pending_msg_events ( ) ;
6918
+ assert_eq ! ( updates. commitment_signed. htlc_signatures. len( ) , 1 ) ;
6922
6919
}
6923
6920
0 commit comments