Skip to content

Commit 5473bd4

Browse files
committed
Addressing PR comments
1 parent cac0355 commit 5473bd4

File tree

2 files changed

+51
-58
lines changed

2 files changed

+51
-58
lines changed

src/ln/channel.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -271,9 +271,6 @@ pub(super) struct Channel {
271271
// is received. holding_cell_update_fee is updated when there are additional
272272
// update_fee() during ChannelState::AwaitingRemoteRevoke.
273273
holding_cell_update_fee: Option<u64>,
274-
#[cfg(test)]
275-
pub next_local_htlc_id: u64,
276-
#[cfg(not(test))]
277274
next_local_htlc_id: u64,
278275
#[cfg(test)]
279276
pub next_remote_htlc_id: u64,
@@ -394,7 +391,7 @@ macro_rules! secp_check {
394391

395392
impl Channel {
396393
// Convert constants + channel value to limits:
397-
pub fn get_our_max_htlc_value_in_flight_msat(channel_value_satoshis: u64) -> u64 {
394+
fn get_our_max_htlc_value_in_flight_msat(channel_value_satoshis: u64) -> u64 {
398395
channel_value_satoshis * 1000 / 10 //TODO
399396
}
400397

@@ -1609,7 +1606,6 @@ impl Channel {
16091606
cltv_expiry: msg.cltv_expiry,
16101607
state: InboundHTLCState::RemoteAnnounced(pending_forward_state),
16111608
});
1612-
16131609
Ok(())
16141610
}
16151611

src/ln/functional_tests.rs

Lines changed: 50 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1968,19 +1968,33 @@ fn get_announce_close_broadcast_events(nodes: &Vec<Node>, a: usize, b: usize) {
19681968
}
19691969
}
19701970

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+
19711993
fn do_channel_reserve_test(test_recv: bool) {
19721994
use util::rng;
19731995
use std::sync::atomic::Ordering;
19741996
use ln::msgs::HandleError;
19751997

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-
19841998
let mut nodes = create_network(3);
19851999
let chan_1 = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1900, 1001);
19862000
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) {
20092023
}}
20102024
}
20112025

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-
20262026
let feemsat = 239; // somehow we know?
20272027
let total_fee_msat = (nodes.len() - 2) as u64 * 239;
20282028

@@ -6655,9 +6655,6 @@ fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_num_and_htlc_id_increment()
66556655
let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 0);
66566656
let max_accepted_htlcs = nodes[1].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().their_max_accepted_htlcs as u64;
66576657

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-
66616658
for i in 0..max_accepted_htlcs {
66626659
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
66636660
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()
66676664

66686665
let mut events = nodes[0].node.get_and_clear_pending_msg_events();
66696666
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+
}
66706672
SendEvent::from_event(events.remove(0))
66716673
};
66726674
nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &payment_event.msgs[0]).unwrap();
66736675
check_added_monitors!(nodes[1], 0);
66746676
commitment_signed_dance!(nodes[1], nodes[0], payment_event.commitment_msg, false);
66756677

66766678
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);
66816680
}
66826681
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 100000, TEST_FINAL_CLTV).unwrap();
66836682
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()
66946693
fn test_update_add_htlc_bolt2_sender_exceed_max_htlc_value_in_flight() {
66956694
//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.
66966695
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;
66986699

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);
67016701

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]);
67026704
let err = nodes[0].node.send_payment(route, our_payment_hash);
67036705

67046706
if let Err(APIError::ChannelUnavailable{err}) = err {
@@ -6727,22 +6729,18 @@ fn test_update_add_htlc_bolt2_receiver_check_amount_received_more_than_min() {
67276729
nodes[0].node.send_payment(route, our_payment_hash).unwrap();
67286730
check_added_monitors!(nodes[0], 1);
67296731
let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
6730-
67316732
updates.update_add_htlcs[0].amount_msat = htlc_minimum_msat-1;
67326733
let err = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
6733-
67346734
if let Err(HandleError{err, action: _}) = err {
67356735
assert_eq!(err, "Remote side tried to send less than our minimum HTLC value");
67366736
} else {
67376737
assert!(false);
67386738
}
6739-
67406739
//Confirm the channel was closed
67416740
{
67426741
assert_eq!(nodes[1].node.channel_state.lock().unwrap().by_id.len(), 0);
67436742
}
6744-
//Clear unhandled msg events.
6745-
let _ = nodes[1].node.get_and_clear_pending_msg_events();
6743+
check_closed_broadcast!(nodes[1]);
67466744
}
67476745

67486746
#[test]
@@ -6751,14 +6749,17 @@ fn test_update_add_htlc_bolt2_receiver_sender_can_afford_amount_sent() {
67516749

67526750
//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
67536751
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();
67566757
let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
67576758
nodes[0].node.send_payment(route, our_payment_hash).unwrap();
67586759
check_added_monitors!(nodes[0], 1);
67596760
let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
67606761

6761-
updates.update_add_htlcs[0].amount_msat = 4000001;
6762+
updates.update_add_htlcs[0].amount_msat = 5000000-their_channel_reserve+1;
67626763
let err = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
67636764

67646765
if let Err(HandleError{err, action: _}) = err {
@@ -6771,8 +6772,7 @@ fn test_update_add_htlc_bolt2_receiver_sender_can_afford_amount_sent() {
67716772
{
67726773
assert_eq!(nodes[1].node.channel_state.lock().unwrap().by_id.len(), 0);
67736774
}
6774-
//Clear unhandled msg events.
6775-
let _ = nodes[1].node.get_and_clear_pending_msg_events();
6775+
check_closed_broadcast!(nodes[1]);
67766776
}
67776777

67786778
#[test]
@@ -6812,7 +6812,7 @@ fn test_update_add_htlc_bolt2_receiver_check_max_htlc_limit() {
68126812
msg.htlc_id = i as u64;
68136813
nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &msg).unwrap();
68146814
}
6815-
msg.htlc_id = (super::channel::OUR_MAX_HTLCS + 1) as u64;
6815+
msg.htlc_id = (super::channel::OUR_MAX_HTLCS) as u64;
68166816
let err = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &msg);
68176817

68186818
if let Err(HandleError{err, action: _}) = err {
@@ -6825,8 +6825,7 @@ fn test_update_add_htlc_bolt2_receiver_check_max_htlc_limit() {
68256825
{
68266826
assert_eq!(nodes[1].node.channel_state.lock().unwrap().by_id.len(), 0);
68276827
}
6828-
//Clear unhandled msg events.
6829-
let _ = nodes[1].node.get_and_clear_pending_msg_events();
6828+
check_closed_broadcast!(nodes[1]);
68306829
}
68316830

68326831
#[test]
@@ -6838,7 +6837,7 @@ fn test_update_add_htlc_bolt2_receiver_check_max_in_flight_msat() {
68386837
let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 1000000);
68396838
let route = nodes[0].router.get_route(&nodes[1].node.get_our_node_id(), None, &[], 1000000, TEST_FINAL_CLTV).unwrap();
68406839
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();
68426841
check_added_monitors!(nodes[0], 1);
68436842
let mut updates = get_htlc_update_msgs!(nodes[0], nodes[1].node.get_our_node_id());
68446843
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() {
68836882
{
68846883
assert_eq!(nodes[1].node.channel_state.lock().unwrap().by_id.len(), 0);
68856884
}
6886-
//Clear unhandled msg events.
6887-
let _ = nodes[1].node.get_and_clear_pending_msg_events();
6885+
check_closed_broadcast!(nodes[1]);
68886886
}
68896887

68906888
#[test]
@@ -6896,7 +6894,7 @@ fn test_update_add_htlc_bolt2_receiver_check_repeated_id_ignore() {
68966894
let (_, our_payment_hash) = get_payment_preimage_hash!(nodes[0]);
68976895
nodes[0].node.send_payment(route, our_payment_hash).unwrap();
68986896
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());
69006898
let _ = nodes[1].node.handle_update_add_htlc(&nodes[0].node.get_our_node_id(), &updates.update_add_htlcs[0]);
69016899
assert_eq!(nodes[1].node.channel_state.lock().unwrap().by_id.get(&chan.2).unwrap().next_remote_htlc_id, 1);
69026900

@@ -6913,11 +6911,10 @@ fn test_update_add_htlc_bolt2_receiver_check_repeated_id_ignore() {
69136911
let _ = handle_chan_reestablish_msgs!(nodes[0], nodes[1]);
69146912
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]).unwrap();
69156913
let _ = handle_chan_reestablish_msgs!(nodes[1], nodes[0]);
6914+
6915+
//Resend HTLC
69166916
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
69186917
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);
69226919
}
69236920

0 commit comments

Comments
 (0)