Skip to content

Commit 100fdbb

Browse files
Merge pull request #2475 from alecchendev/2023-08-actually-fix-keysend
Fix keysend not being sent in `OutboundPayment::send_payment_internal`
2 parents 6f58072 + b0d4ab8 commit 100fdbb

File tree

3 files changed

+58
-69
lines changed

3 files changed

+58
-69
lines changed

lightning/src/ln/functional_tests.rs

+1-68
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use crate::ln::channel::{DISCONNECT_PEER_AWAITING_RESPONSE_TICKS, ChannelError};
2626
use crate::ln::{chan_utils, onion_utils};
2727
use crate::ln::chan_utils::{OFFERED_HTLC_SCRIPT_WEIGHT, htlc_success_tx_weight, htlc_timeout_tx_weight, HTLCOutputInCommitment};
2828
use crate::routing::gossip::{NetworkGraph, NetworkUpdate};
29-
use crate::routing::router::{Path, PaymentParameters, Route, RouteHop, RouteParameters, find_route, get_route};
29+
use crate::routing::router::{Path, PaymentParameters, Route, RouteHop, get_route};
3030
use crate::ln::features::{ChannelFeatures, ChannelTypeFeatures, NodeFeatures};
3131
use crate::ln::msgs;
3232
use crate::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler, ErrorAction};
@@ -9408,73 +9408,6 @@ fn test_inconsistent_mpp_params() {
94089408
expect_payment_sent(&nodes[0], our_payment_preimage, Some(None), true);
94099409
}
94109410

9411-
#[test]
9412-
fn test_keysend_payments_to_public_node() {
9413-
let chanmon_cfgs = create_chanmon_cfgs(2);
9414-
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
9415-
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
9416-
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
9417-
9418-
let _chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 10001);
9419-
let network_graph = nodes[0].network_graph.clone();
9420-
let payer_pubkey = nodes[0].node.get_our_node_id();
9421-
let payee_pubkey = nodes[1].node.get_our_node_id();
9422-
let route_params = RouteParameters {
9423-
payment_params: PaymentParameters::for_keysend(payee_pubkey, 40, false),
9424-
final_value_msat: 10000,
9425-
};
9426-
let scorer = test_utils::TestScorer::new();
9427-
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
9428-
let route = find_route(&payer_pubkey, &route_params, &network_graph, None, nodes[0].logger, &scorer, &(), &random_seed_bytes).unwrap();
9429-
9430-
let test_preimage = PaymentPreimage([42; 32]);
9431-
let payment_hash = nodes[0].node.send_spontaneous_payment(&route, Some(test_preimage),
9432-
RecipientOnionFields::spontaneous_empty(), PaymentId(test_preimage.0)).unwrap();
9433-
check_added_monitors!(nodes[0], 1);
9434-
let mut events = nodes[0].node.get_and_clear_pending_msg_events();
9435-
assert_eq!(events.len(), 1);
9436-
let event = events.pop().unwrap();
9437-
let path = vec![&nodes[1]];
9438-
pass_along_path(&nodes[0], &path, 10000, payment_hash, None, event, true, Some(test_preimage));
9439-
claim_payment(&nodes[0], &path, test_preimage);
9440-
}
9441-
9442-
#[test]
9443-
fn test_keysend_payments_to_private_node() {
9444-
let chanmon_cfgs = create_chanmon_cfgs(2);
9445-
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
9446-
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
9447-
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
9448-
9449-
let payer_pubkey = nodes[0].node.get_our_node_id();
9450-
let payee_pubkey = nodes[1].node.get_our_node_id();
9451-
9452-
let _chan = create_chan_between_nodes(&nodes[0], &nodes[1]);
9453-
let route_params = RouteParameters {
9454-
payment_params: PaymentParameters::for_keysend(payee_pubkey, 40, false),
9455-
final_value_msat: 10000,
9456-
};
9457-
let network_graph = nodes[0].network_graph.clone();
9458-
let first_hops = nodes[0].node.list_usable_channels();
9459-
let scorer = test_utils::TestScorer::new();
9460-
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
9461-
let route = find_route(
9462-
&payer_pubkey, &route_params, &network_graph, Some(&first_hops.iter().collect::<Vec<_>>()),
9463-
nodes[0].logger, &scorer, &(), &random_seed_bytes
9464-
).unwrap();
9465-
9466-
let test_preimage = PaymentPreimage([42; 32]);
9467-
let payment_hash = nodes[0].node.send_spontaneous_payment(&route, Some(test_preimage),
9468-
RecipientOnionFields::spontaneous_empty(), PaymentId(test_preimage.0)).unwrap();
9469-
check_added_monitors!(nodes[0], 1);
9470-
let mut events = nodes[0].node.get_and_clear_pending_msg_events();
9471-
assert_eq!(events.len(), 1);
9472-
let event = events.pop().unwrap();
9473-
let path = vec![&nodes[1]];
9474-
pass_along_path(&nodes[0], &path, 10000, payment_hash, None, event, true, Some(test_preimage));
9475-
claim_payment(&nodes[0], &path, test_preimage);
9476-
}
9477-
94789411
#[test]
94799412
fn test_double_partial_claim() {
94809413
// Test what happens if a node receives a payment, generates a PaymentClaimable event, the HTLCs

lightning/src/ln/outbound_payment.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ impl OutboundPayments {
684684
Some(route_params.payment_params.clone()), entropy_source, best_block_height)
685685
.map_err(|_| RetryableSendFailure::DuplicatePayment)?;
686686

687-
let res = self.pay_route_internal(&route, payment_hash, recipient_onion, None, payment_id, None,
687+
let res = self.pay_route_internal(&route, payment_hash, recipient_onion, keysend_preimage, payment_id, None,
688688
onion_session_privs, node_signer, best_block_height, &send_payment_along_path);
689689
log_info!(logger, "Result sending payment with id {}: {:?}", log_bytes!(payment_id.0), res);
690690
if let Err(e) = res {

lightning/src/ln/payment_tests.rs

+56
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,62 @@ fn mpp_receive_timeout() {
236236
do_mpp_receive_timeout(false);
237237
}
238238

239+
#[test]
240+
fn test_keysend_payments() {
241+
do_test_keysend_payments(false, false);
242+
do_test_keysend_payments(false, true);
243+
do_test_keysend_payments(true, false);
244+
do_test_keysend_payments(true, true);
245+
}
246+
247+
fn do_test_keysend_payments(public_node: bool, with_retry: bool) {
248+
let chanmon_cfgs = create_chanmon_cfgs(2);
249+
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
250+
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
251+
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
252+
253+
if public_node {
254+
create_announced_chan_between_nodes(&nodes, 0, 1);
255+
} else {
256+
create_chan_between_nodes(&nodes[0], &nodes[1]);
257+
}
258+
let payer_pubkey = nodes[0].node.get_our_node_id();
259+
let payee_pubkey = nodes[1].node.get_our_node_id();
260+
let route_params = RouteParameters {
261+
payment_params: PaymentParameters::for_keysend(payee_pubkey, 40, false),
262+
final_value_msat: 10000,
263+
};
264+
265+
let network_graph = nodes[0].network_graph.clone();
266+
let channels = nodes[0].node.list_usable_channels();
267+
let first_hops = channels.iter().collect::<Vec<_>>();
268+
let first_hops = if public_node { None } else { Some(first_hops.as_slice()) };
269+
270+
let scorer = test_utils::TestScorer::new();
271+
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
272+
let route = find_route(
273+
&payer_pubkey, &route_params, &network_graph, first_hops,
274+
nodes[0].logger, &scorer, &(), &random_seed_bytes
275+
).unwrap();
276+
277+
let test_preimage = PaymentPreimage([42; 32]);
278+
let payment_hash = if with_retry {
279+
nodes[0].node.send_spontaneous_payment_with_retry(Some(test_preimage),
280+
RecipientOnionFields::spontaneous_empty(), PaymentId(test_preimage.0),
281+
route_params, Retry::Attempts(1)).unwrap()
282+
} else {
283+
nodes[0].node.send_spontaneous_payment(&route, Some(test_preimage),
284+
RecipientOnionFields::spontaneous_empty(), PaymentId(test_preimage.0)).unwrap()
285+
};
286+
check_added_monitors!(nodes[0], 1);
287+
let mut events = nodes[0].node.get_and_clear_pending_msg_events();
288+
assert_eq!(events.len(), 1);
289+
let event = events.pop().unwrap();
290+
let path = vec![&nodes[1]];
291+
pass_along_path(&nodes[0], &path, 10000, payment_hash, None, event, true, Some(test_preimage));
292+
claim_payment(&nodes[0], &path, test_preimage);
293+
}
294+
239295
#[test]
240296
fn test_mpp_keysend() {
241297
let mut mpp_keysend_config = test_default_channel_config();

0 commit comments

Comments
 (0)