mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-23 14:50:45 +01:00
Error if BOLT 11 features are provided for blinded payment params
This commit is contained in:
parent
7f49f6bf4d
commit
6d62b62cec
10 changed files with 60 additions and 58 deletions
|
@ -154,7 +154,7 @@ fn pay_invoice_using_amount<P: Deref>(
|
|||
.with_expiry_time(expiry_time_from_unix_epoch(invoice).as_secs())
|
||||
.with_route_hints(invoice.route_hints()).unwrap();
|
||||
if let Some(features) = invoice.features() {
|
||||
payment_params = payment_params.with_features(features.clone());
|
||||
payment_params = payment_params.with_bolt11_features(features.clone()).unwrap();
|
||||
}
|
||||
let route_params = RouteParameters {
|
||||
payment_params,
|
||||
|
|
|
@ -838,7 +838,7 @@ mod test {
|
|||
|
||||
let payment_params = PaymentParameters::from_node_id(invoice.recover_payee_pub_key(),
|
||||
invoice.min_final_cltv_expiry_delta() as u32)
|
||||
.with_features(invoice.features().unwrap().clone())
|
||||
.with_bolt11_features(invoice.features().unwrap().clone()).unwrap()
|
||||
.with_route_hints(invoice.route_hints()).unwrap();
|
||||
let route_params = RouteParameters {
|
||||
payment_params,
|
||||
|
@ -1294,7 +1294,7 @@ mod test {
|
|||
|
||||
let payment_params = PaymentParameters::from_node_id(invoice.recover_payee_pub_key(),
|
||||
invoice.min_final_cltv_expiry_delta() as u32)
|
||||
.with_features(invoice.features().unwrap().clone())
|
||||
.with_bolt11_features(invoice.features().unwrap().clone()).unwrap()
|
||||
.with_route_hints(invoice.route_hints()).unwrap();
|
||||
let params = RouteParameters {
|
||||
payment_params,
|
||||
|
|
|
@ -9180,7 +9180,7 @@ pub mod bench {
|
|||
macro_rules! send_payment {
|
||||
($node_a: expr, $node_b: expr) => {
|
||||
let payment_params = PaymentParameters::from_node_id($node_b.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features($node_b.invoice_features());
|
||||
.with_bolt11_features($node_b.invoice_features()).unwrap();
|
||||
let mut payment_preimage = PaymentPreimage([0; 32]);
|
||||
payment_preimage.0[0..8].copy_from_slice(&payment_count.to_le_bytes());
|
||||
payment_count += 1;
|
||||
|
|
|
@ -1723,7 +1723,7 @@ macro_rules! get_route {
|
|||
macro_rules! get_route_and_payment_hash {
|
||||
($send_node: expr, $recv_node: expr, $recv_value: expr) => {{
|
||||
let payment_params = $crate::routing::router::PaymentParameters::from_node_id($recv_node.node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features($recv_node.node.invoice_features());
|
||||
.with_bolt11_features($recv_node.node.invoice_features()).unwrap();
|
||||
$crate::get_route_and_payment_hash!($send_node, $recv_node, payment_params, $recv_value)
|
||||
}};
|
||||
($send_node: expr, $recv_node: expr, $payment_params: expr, $recv_value: expr) => {{
|
||||
|
@ -2272,7 +2272,7 @@ pub const TEST_FINAL_CLTV: u32 = 70;
|
|||
|
||||
pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) -> (PaymentPreimage, PaymentHash, PaymentSecret) {
|
||||
let payment_params = PaymentParameters::from_node_id(expected_route.last().unwrap().node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(expected_route.last().unwrap().node.invoice_features());
|
||||
.with_bolt11_features(expected_route.last().unwrap().node.invoice_features()).unwrap();
|
||||
let route = get_route(origin_node, &payment_params, recv_value).unwrap();
|
||||
assert_eq!(route.paths.len(), 1);
|
||||
assert_eq!(route.paths[0].hops.len(), expected_route.len());
|
||||
|
@ -2286,7 +2286,7 @@ pub fn route_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
|
|||
|
||||
pub fn route_over_limit<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route: &[&Node<'a, 'b, 'c>], recv_value: u64) {
|
||||
let payment_params = PaymentParameters::from_node_id(expected_route.last().unwrap().node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(expected_route.last().unwrap().node.invoice_features());
|
||||
.with_bolt11_features(expected_route.last().unwrap().node.invoice_features()).unwrap();
|
||||
let network_graph = origin_node.network_graph.read_only();
|
||||
let scorer = test_utils::TestScorer::new();
|
||||
let seed = [0u8; 32];
|
||||
|
|
|
@ -1829,7 +1829,7 @@ fn test_channel_reserve_holding_cell_htlcs() {
|
|||
// attempt to send amt_msat > their_max_htlc_value_in_flight_msat
|
||||
{
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(nodes[2].node.invoice_features()).with_max_channel_saturation_power_of_half(0);
|
||||
.with_bolt11_features(nodes[2].node.invoice_features()).unwrap().with_max_channel_saturation_power_of_half(0);
|
||||
let (mut route, our_payment_hash, _, our_payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], payment_params, recv_value_0);
|
||||
route.paths[0].hops.last_mut().unwrap().fee_msat += 1;
|
||||
assert!(route.paths[0].hops.iter().rev().skip(1).all(|h| h.fee_msat == feemsat));
|
||||
|
@ -1856,7 +1856,7 @@ fn test_channel_reserve_holding_cell_htlcs() {
|
|||
}
|
||||
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(nodes[2].node.invoice_features()).with_max_channel_saturation_power_of_half(0);
|
||||
.with_bolt11_features(nodes[2].node.invoice_features()).unwrap().with_max_channel_saturation_power_of_half(0);
|
||||
let route = get_route!(nodes[0], payment_params, recv_value_0).unwrap();
|
||||
let (payment_preimage, ..) = send_along_route(&nodes[0], route, &[&nodes[1], &nodes[2]], recv_value_0);
|
||||
claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], payment_preimage);
|
||||
|
@ -4795,7 +4795,7 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
|
|||
// script push size limit so that the below script length checks match
|
||||
// ACCEPTED_HTLC_SCRIPT_WEIGHT.
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3].node.get_our_node_id(), TEST_FINAL_CLTV - 40)
|
||||
.with_features(nodes[3].node.invoice_features());
|
||||
.with_bolt11_features(nodes[3].node.invoice_features()).unwrap();
|
||||
let (route, _, _, _) = get_route_and_payment_hash!(nodes[0], nodes[3], payment_params, 800_000);
|
||||
send_along_route_with_secret(&nodes[0], route, &[&[&nodes[1], &nodes[2], &nodes[3]]], 800_000, duplicate_payment_hash, payment_secret);
|
||||
|
||||
|
@ -6101,7 +6101,7 @@ fn test_update_add_htlc_bolt2_sender_cltv_expiry_too_high() {
|
|||
let _chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 0);
|
||||
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), 0)
|
||||
.with_features(nodes[1].node.invoice_features());
|
||||
.with_bolt11_features(nodes[1].node.invoice_features()).unwrap();
|
||||
let (mut route, our_payment_hash, _, our_payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[1], payment_params, 100000000);
|
||||
route.paths[0].hops.last_mut().unwrap().cltv_expiry_delta = 500000001;
|
||||
unwrap_send_err!(nodes[0].node.send_payment_with_route(&route, our_payment_hash,
|
||||
|
@ -7043,7 +7043,7 @@ fn test_check_htlc_underpaying() {
|
|||
|
||||
let scorer = test_utils::TestScorer::new();
|
||||
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV).with_features(nodes[1].node.invoice_features());
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV).with_bolt11_features(nodes[1].node.invoice_features()).unwrap();
|
||||
let route = get_route(&nodes[0].node.get_our_node_id(), &payment_params, &nodes[0].network_graph.read_only(), None, 10_000, nodes[0].logger, &scorer, &random_seed_bytes).unwrap();
|
||||
let (_, our_payment_hash, _) = get_payment_preimage_hash!(nodes[0]);
|
||||
let our_payment_secret = nodes[1].node.create_inbound_payment_for_hash(our_payment_hash, Some(100_000), 7200, None).unwrap();
|
||||
|
@ -7189,7 +7189,7 @@ fn test_bump_penalty_txn_on_revoked_commitment() {
|
|||
|
||||
let payment_preimage = route_payment(&nodes[0], &vec!(&nodes[1])[..], 3000000).0;
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[0].node.get_our_node_id(), 30)
|
||||
.with_features(nodes[0].node.invoice_features());
|
||||
.with_bolt11_features(nodes[0].node.invoice_features()).unwrap();
|
||||
let (route,_, _, _) = get_route_and_payment_hash!(nodes[1], nodes[0], payment_params, 3000000);
|
||||
send_along_route(&nodes[1], route, &vec!(&nodes[0])[..], 3000000);
|
||||
|
||||
|
@ -7294,13 +7294,13 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
|
|||
|
||||
let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000);
|
||||
// Lock HTLC in both directions (using a slightly lower CLTV delay to provide timely RBF bumps)
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), 50).with_features(nodes[1].node.invoice_features());
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), 50).with_bolt11_features(nodes[1].node.invoice_features()).unwrap();
|
||||
let scorer = test_utils::TestScorer::new();
|
||||
let random_seed_bytes = chanmon_cfgs[1].keys_manager.get_secure_random_bytes();
|
||||
let route = get_route(&nodes[0].node.get_our_node_id(), &payment_params, &nodes[0].network_graph.read_only(), None,
|
||||
3_000_000, nodes[0].logger, &scorer, &random_seed_bytes).unwrap();
|
||||
let payment_preimage = send_along_route(&nodes[0], route, &[&nodes[1]], 3_000_000).0;
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[0].node.get_our_node_id(), 50).with_features(nodes[0].node.invoice_features());
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[0].node.get_our_node_id(), 50).with_bolt11_features(nodes[0].node.invoice_features()).unwrap();
|
||||
let route = get_route(&nodes[1].node.get_our_node_id(), &payment_params, &nodes[1].network_graph.read_only(), None,
|
||||
3_000_000, nodes[0].logger, &scorer, &random_seed_bytes).unwrap();
|
||||
send_along_route(&nodes[1], route, &[&nodes[0]], 3_000_000);
|
||||
|
@ -9300,7 +9300,7 @@ fn do_test_dup_htlc_second_rejected(test_for_second_fail_panic: bool) {
|
|||
let _chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 100000, 10001);
|
||||
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(nodes[1].node.invoice_features());
|
||||
.with_bolt11_features(nodes[1].node.invoice_features()).unwrap();
|
||||
let route = get_route!(nodes[0], payment_params, 10_000).unwrap();
|
||||
|
||||
let (our_payment_preimage, our_payment_hash, our_payment_secret) = get_payment_preimage_hash!(&nodes[1]);
|
||||
|
@ -9409,7 +9409,7 @@ fn test_inconsistent_mpp_params() {
|
|||
let chan_2_3 =create_announced_chan_between_nodes_with_value(&nodes, 2, 3, 100_000, 0);
|
||||
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(nodes[3].node.invoice_features());
|
||||
.with_bolt11_features(nodes[3].node.invoice_features()).unwrap();
|
||||
let mut route = get_route!(nodes[0], payment_params, 15_000_000).unwrap();
|
||||
assert_eq!(route.paths.len(), 2);
|
||||
route.paths.sort_by(|path_a, _| {
|
||||
|
|
|
@ -714,7 +714,7 @@ fn do_test_onion_failure_stale_channel_update(announced_channel: bool) {
|
|||
htlc_minimum_msat: None,
|
||||
}])];
|
||||
let payment_params = PaymentParameters::from_node_id(*channel_to_update_counterparty, TEST_FINAL_CLTV)
|
||||
.with_features(nodes[2].node.invoice_features())
|
||||
.with_bolt11_features(nodes[2].node.invoice_features()).unwrap()
|
||||
.with_route_hints(hop_hints).unwrap();
|
||||
get_route_and_payment_hash!(nodes[0], nodes[2], payment_params, PAYMENT_AMT)
|
||||
};
|
||||
|
@ -861,7 +861,7 @@ fn test_always_create_tlv_format_onion_payloads() {
|
|||
create_announced_chan_between_nodes(&nodes, 1, 2);
|
||||
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(InvoiceFeatures::empty());
|
||||
.with_bolt11_features(InvoiceFeatures::empty()).unwrap();
|
||||
let (route, _payment_hash, _payment_preimage, _payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], payment_params, 40000);
|
||||
|
||||
let hops = &route.paths[0].hops;
|
||||
|
@ -963,7 +963,7 @@ macro_rules! get_phantom_route {
|
|||
let phantom_pubkey = $nodes[1].keys_manager.get_node_id(Recipient::PhantomNode).unwrap();
|
||||
let phantom_route_hint = $nodes[1].node.get_phantom_route_hints();
|
||||
let payment_params = PaymentParameters::from_node_id(phantom_pubkey, TEST_FINAL_CLTV)
|
||||
.with_features($nodes[1].node.invoice_features())
|
||||
.with_bolt11_features($nodes[1].node.invoice_features()).unwrap()
|
||||
.with_route_hints(vec![RouteHint(vec![
|
||||
RouteHintHop {
|
||||
src_node_id: $nodes[0].node.get_our_node_id(),
|
||||
|
|
|
@ -857,7 +857,7 @@ fn get_ldk_payment_preimage() {
|
|||
let (payment_hash, payment_secret) = nodes[1].node.create_inbound_payment(Some(amt_msat), expiry_secs, None).unwrap();
|
||||
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(nodes[1].node.invoice_features());
|
||||
.with_bolt11_features(nodes[1].node.invoice_features()).unwrap();
|
||||
let scorer = test_utils::TestScorer::new();
|
||||
let keys_manager = test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
|
@ -1410,7 +1410,7 @@ fn do_test_intercepted_payment(test: InterceptTest) {
|
|||
htlc_maximum_msat: None,
|
||||
}])
|
||||
]).unwrap()
|
||||
.with_features(nodes[2].node.invoice_features());
|
||||
.with_bolt11_features(nodes[2].node.invoice_features()).unwrap();
|
||||
let route_params = RouteParameters {
|
||||
payment_params,
|
||||
final_value_msat: amt_msat,
|
||||
|
@ -1600,7 +1600,7 @@ fn do_automatic_retries(test: AutoRetry) {
|
|||
invoice_features.set_basic_mpp_optional();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_expiry_time(payment_expiry_secs as u64)
|
||||
.with_features(invoice_features);
|
||||
.with_bolt11_features(invoice_features).unwrap();
|
||||
let route_params = RouteParameters {
|
||||
payment_params,
|
||||
final_value_msat: amt_msat,
|
||||
|
@ -1819,7 +1819,7 @@ fn auto_retry_partial_failure() {
|
|||
invoice_features.set_basic_mpp_optional();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_expiry_time(payment_expiry_secs as u64)
|
||||
.with_features(invoice_features);
|
||||
.with_bolt11_features(invoice_features).unwrap();
|
||||
let route_params = RouteParameters {
|
||||
payment_params,
|
||||
final_value_msat: amt_msat,
|
||||
|
@ -2031,7 +2031,7 @@ fn auto_retry_zero_attempts_send_error() {
|
|||
invoice_features.set_basic_mpp_optional();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_expiry_time(payment_expiry_secs as u64)
|
||||
.with_features(invoice_features);
|
||||
.with_bolt11_features(invoice_features).unwrap();
|
||||
let route_params = RouteParameters {
|
||||
payment_params,
|
||||
final_value_msat: amt_msat,
|
||||
|
@ -2071,7 +2071,7 @@ fn fails_paying_after_rejected_by_payee() {
|
|||
invoice_features.set_basic_mpp_optional();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_expiry_time(payment_expiry_secs as u64)
|
||||
.with_features(invoice_features);
|
||||
.with_bolt11_features(invoice_features).unwrap();
|
||||
let route_params = RouteParameters {
|
||||
payment_params,
|
||||
final_value_msat: amt_msat,
|
||||
|
@ -2118,7 +2118,7 @@ fn retry_multi_path_single_failed_payment() {
|
|||
invoice_features.set_basic_mpp_optional();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_expiry_time(payment_expiry_secs as u64)
|
||||
.with_features(invoice_features);
|
||||
.with_bolt11_features(invoice_features).unwrap();
|
||||
let route_params = RouteParameters {
|
||||
payment_params: payment_params.clone(),
|
||||
final_value_msat: amt_msat,
|
||||
|
@ -2212,7 +2212,7 @@ fn immediate_retry_on_failure() {
|
|||
invoice_features.set_basic_mpp_optional();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_expiry_time(payment_expiry_secs as u64)
|
||||
.with_features(invoice_features);
|
||||
.with_bolt11_features(invoice_features).unwrap();
|
||||
let route_params = RouteParameters {
|
||||
payment_params,
|
||||
final_value_msat: amt_msat,
|
||||
|
@ -2301,7 +2301,7 @@ fn no_extra_retries_on_back_to_back_fail() {
|
|||
invoice_features.set_basic_mpp_optional();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_expiry_time(payment_expiry_secs as u64)
|
||||
.with_features(invoice_features);
|
||||
.with_bolt11_features(invoice_features).unwrap();
|
||||
let route_params = RouteParameters {
|
||||
payment_params,
|
||||
final_value_msat: amt_msat,
|
||||
|
@ -2503,7 +2503,7 @@ fn test_simple_partial_retry() {
|
|||
invoice_features.set_basic_mpp_optional();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_expiry_time(payment_expiry_secs as u64)
|
||||
.with_features(invoice_features);
|
||||
.with_bolt11_features(invoice_features).unwrap();
|
||||
let route_params = RouteParameters {
|
||||
payment_params,
|
||||
final_value_msat: amt_msat,
|
||||
|
@ -2669,7 +2669,7 @@ fn test_threaded_payment_retries() {
|
|||
invoice_features.set_basic_mpp_optional();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_expiry_time(payment_expiry_secs as u64)
|
||||
.with_features(invoice_features);
|
||||
.with_bolt11_features(invoice_features).unwrap();
|
||||
let mut route_params = RouteParameters {
|
||||
payment_params,
|
||||
final_value_msat: amt_msat,
|
||||
|
@ -2906,7 +2906,7 @@ fn do_claim_from_closed_chan(fail_payment: bool) {
|
|||
let (payment_preimage, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[3]);
|
||||
let mut route_params = RouteParameters {
|
||||
payment_params: PaymentParameters::from_node_id(nodes[3].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(nodes[1].node.invoice_features()),
|
||||
.with_bolt11_features(nodes[1].node.invoice_features()).unwrap(),
|
||||
final_value_msat: 10_000_000,
|
||||
};
|
||||
let mut route = nodes[0].router.find_route(&nodes[0].node.get_our_node_id(), &route_params,
|
||||
|
@ -3050,7 +3050,7 @@ fn do_test_payment_metadata_consistency(do_reload: bool, do_modify: bool) {
|
|||
let payment_metadata = vec![44, 49, 52, 142];
|
||||
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(nodes[1].node.invoice_features());
|
||||
.with_bolt11_features(nodes[1].node.invoice_features()).unwrap();
|
||||
let mut route_params = RouteParameters {
|
||||
payment_params,
|
||||
final_value_msat: amt_msat,
|
||||
|
|
|
@ -67,7 +67,7 @@ fn test_priv_forwarding_rejection() {
|
|||
}]);
|
||||
let last_hops = vec![route_hint];
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2].node.get_our_node_id(), TEST_FINAL_CLTV)
|
||||
.with_features(nodes[2].node.invoice_features())
|
||||
.with_bolt11_features(nodes[2].node.invoice_features()).unwrap()
|
||||
.with_route_hints(last_hops).unwrap();
|
||||
let (route, our_payment_hash, our_payment_preimage, our_payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], payment_params, 10_000);
|
||||
|
||||
|
@ -236,7 +236,7 @@ fn test_routed_scid_alias() {
|
|||
htlc_minimum_msat: None,
|
||||
}])];
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2].node.get_our_node_id(), 42)
|
||||
.with_features(nodes[2].node.invoice_features())
|
||||
.with_bolt11_features(nodes[2].node.invoice_features()).unwrap()
|
||||
.with_route_hints(hop_hints).unwrap();
|
||||
let (route, payment_hash, payment_preimage, payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], payment_params, 100_000);
|
||||
assert_eq!(route.paths[0].hops[1].short_channel_id, last_hop[0].inbound_scid_alias.unwrap());
|
||||
|
@ -402,7 +402,7 @@ fn test_inbound_scid_privacy() {
|
|||
htlc_minimum_msat: None,
|
||||
}])];
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2].node.get_our_node_id(), 42)
|
||||
.with_features(nodes[2].node.invoice_features())
|
||||
.with_bolt11_features(nodes[2].node.invoice_features()).unwrap()
|
||||
.with_route_hints(hop_hints.clone()).unwrap();
|
||||
let (route, payment_hash, payment_preimage, payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], payment_params, 100_000);
|
||||
assert_eq!(route.paths[0].hops[1].short_channel_id, last_hop[0].inbound_scid_alias.unwrap());
|
||||
|
@ -418,7 +418,7 @@ fn test_inbound_scid_privacy() {
|
|||
hop_hints[0].0[0].short_channel_id = last_hop[0].short_channel_id.unwrap();
|
||||
|
||||
let payment_params_2 = PaymentParameters::from_node_id(nodes[2].node.get_our_node_id(), 42)
|
||||
.with_features(nodes[2].node.invoice_features())
|
||||
.with_bolt11_features(nodes[2].node.invoice_features()).unwrap()
|
||||
.with_route_hints(hop_hints).unwrap();
|
||||
let (route_2, payment_hash_2, _, payment_secret_2) = get_route_and_payment_hash!(nodes[0], nodes[2], payment_params_2, 100_000);
|
||||
assert_eq!(route_2.paths[0].hops[1].short_channel_id, last_hop[0].short_channel_id.unwrap());
|
||||
|
@ -470,7 +470,7 @@ fn test_scid_alias_returned() {
|
|||
htlc_minimum_msat: None,
|
||||
}])];
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2].node.get_our_node_id(), 42)
|
||||
.with_features(nodes[2].node.invoice_features())
|
||||
.with_bolt11_features(nodes[2].node.invoice_features()).unwrap()
|
||||
.with_route_hints(hop_hints).unwrap();
|
||||
let (mut route, payment_hash, _, payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], payment_params, 10_000);
|
||||
assert_eq!(route.paths[0].hops[1].short_channel_id, nodes[2].node.list_usable_channels()[0].inbound_scid_alias.unwrap());
|
||||
|
|
|
@ -94,9 +94,9 @@ fn updates_shutdown_wait() {
|
|||
|
||||
let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[0]);
|
||||
|
||||
let payment_params_1 = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV).with_features(nodes[1].node.invoice_features());
|
||||
let payment_params_1 = PaymentParameters::from_node_id(nodes[1].node.get_our_node_id(), TEST_FINAL_CLTV).with_bolt11_features(nodes[1].node.invoice_features()).unwrap();
|
||||
let route_1 = get_route(&nodes[0].node.get_our_node_id(), &payment_params_1, &nodes[0].network_graph.read_only(), None, 100000, &logger, &scorer, &random_seed_bytes).unwrap();
|
||||
let payment_params_2 = PaymentParameters::from_node_id(nodes[0].node.get_our_node_id(), TEST_FINAL_CLTV).with_features(nodes[0].node.invoice_features());
|
||||
let payment_params_2 = PaymentParameters::from_node_id(nodes[0].node.get_our_node_id(), TEST_FINAL_CLTV).with_bolt11_features(nodes[0].node.invoice_features()).unwrap();
|
||||
let route_2 = get_route(&nodes[1].node.get_our_node_id(), &payment_params_2, &nodes[1].network_graph.read_only(), None, 100000, &logger, &scorer, &random_seed_bytes).unwrap();
|
||||
unwrap_send_err!(nodes[0].node.send_payment_with_route(&route_1, payment_hash,
|
||||
RecipientOnionFields::secret_only(payment_secret), PaymentId(payment_hash.0)
|
||||
|
|
|
@ -625,14 +625,16 @@ impl PaymentParameters {
|
|||
/// The `final_cltv_expiry_delta` should match the expected final CLTV delta the recipient has
|
||||
/// provided.
|
||||
pub fn for_keysend(payee_pubkey: PublicKey, final_cltv_expiry_delta: u32) -> Self {
|
||||
Self::from_node_id(payee_pubkey, final_cltv_expiry_delta).with_features(InvoiceFeatures::for_keysend())
|
||||
Self::from_node_id(payee_pubkey, final_cltv_expiry_delta).with_bolt11_features(InvoiceFeatures::for_keysend()).expect("PaymentParameters::from_node_id should always initialize the payee as unblinded")
|
||||
}
|
||||
|
||||
/// Includes the payee's features.
|
||||
/// Includes the payee's features. Errors if the parameters were initialized with blinded payment
|
||||
/// paths.
|
||||
///
|
||||
/// This is not exported to bindings users since bindings don't support move semantics
|
||||
pub fn with_features(self, features: InvoiceFeatures) -> Self {
|
||||
Self { features: Some(features), ..self }
|
||||
pub fn with_bolt11_features(self, features: InvoiceFeatures) -> Result<Self, ()> {
|
||||
if let Payee::Blinded { .. } = self.payee { return Err(()) }
|
||||
Ok(Self { features: Some(features), ..self })
|
||||
}
|
||||
|
||||
/// Includes hints for routing to the payee. Errors if the parameters were initialized with
|
||||
|
@ -2571,7 +2573,7 @@ mod tests {
|
|||
let (secp_ctx, network_graph, gossip_sync, _, logger) = build_graph();
|
||||
let (our_privkey, our_id, privkeys, nodes) = get_nodes(&secp_ctx);
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42).with_features(channelmanager::provided_invoice_features(&config));
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
let scorer = ln_test_utils::TestScorer::new();
|
||||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
|
@ -3544,7 +3546,7 @@ mod tests {
|
|||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42).with_features(channelmanager::provided_invoice_features(&config));
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
|
||||
// We will use a simple single-path route from
|
||||
// our node to node2 via node0: channels {1, 3}.
|
||||
|
@ -3820,7 +3822,7 @@ mod tests {
|
|||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3], 42).with_features(channelmanager::provided_invoice_features(&config));
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3], 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
|
||||
// Path via {node7, node2, node4} is channels {12, 13, 6, 11}.
|
||||
// {12, 13, 11} have the capacities of 100, {6} has a capacity of 50.
|
||||
|
@ -3995,7 +3997,7 @@ mod tests {
|
|||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42)
|
||||
.with_features(channelmanager::provided_invoice_features(&config));
|
||||
.with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
|
||||
// We need a route consisting of 3 paths:
|
||||
// From our node to node2 via node0, node7, node1 (three paths one hop each).
|
||||
|
@ -4154,7 +4156,7 @@ mod tests {
|
|||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3], 42).with_features(channelmanager::provided_invoice_features(&config));
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3], 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
|
||||
// We need a route consisting of 3 paths:
|
||||
// From our node to node3 via {node0, node2}, {node7, node2, node4} and {node7, node2}.
|
||||
|
@ -4319,7 +4321,7 @@ mod tests {
|
|||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3], 42).with_features(channelmanager::provided_invoice_features(&config));
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3], 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
|
||||
// This test checks that if we have two cheaper paths and one more expensive path,
|
||||
// so that liquidity-wise any 2 of 3 combination is sufficient,
|
||||
|
@ -4489,7 +4491,7 @@ mod tests {
|
|||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3], 42).with_features(channelmanager::provided_invoice_features(&config));
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[3], 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
|
||||
// We need a route consisting of 2 paths:
|
||||
// From our node to node3 via {node0, node2} and {node7, node2, node4}.
|
||||
|
@ -4671,7 +4673,7 @@ mod tests {
|
|||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(PublicKey::from_slice(&[02; 33]).unwrap(), 42).with_features(channelmanager::provided_invoice_features(&config))
|
||||
let payment_params = PaymentParameters::from_node_id(PublicKey::from_slice(&[02; 33]).unwrap(), 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap()
|
||||
.with_route_hints(vec![RouteHint(vec![RouteHintHop {
|
||||
src_node_id: nodes[2],
|
||||
short_channel_id: 42,
|
||||
|
@ -4763,7 +4765,7 @@ mod tests {
|
|||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42).with_features(channelmanager::provided_invoice_features(&config))
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap()
|
||||
.with_max_channel_saturation_power_of_half(0);
|
||||
|
||||
// We need a route consisting of 3 paths:
|
||||
|
@ -5119,7 +5121,7 @@ mod tests {
|
|||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42).with_features(channelmanager::provided_invoice_features(&config));
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
|
||||
// We modify the graph to set the htlc_minimum of channel 2 and 4 as needed - channel 2
|
||||
// gets an htlc_maximum_msat of 80_000 and channel 4 an htlc_minimum_msat of 90_000. We
|
||||
|
@ -5187,7 +5189,7 @@ mod tests {
|
|||
let network_graph = NetworkGraph::new(Network::Testnet, Arc::clone(&logger));
|
||||
let scorer = ln_test_utils::TestScorer::new();
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[0], 42).with_features(channelmanager::provided_invoice_features(&config));
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[0], 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
|
||||
|
@ -5681,7 +5683,7 @@ mod tests {
|
|||
});
|
||||
|
||||
let config = UserConfig::default();
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42).with_features(channelmanager::provided_invoice_features(&config));
|
||||
let payment_params = PaymentParameters::from_node_id(nodes[2], 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
let keys_manager = ln_test_utils::TestKeysInterface::new(&[0u8; 32], Network::Testnet);
|
||||
let random_seed_bytes = keys_manager.get_secure_random_bytes();
|
||||
// 100,000 sats is less than the available liquidity on each channel, set above.
|
||||
|
@ -5766,7 +5768,7 @@ mod tests {
|
|||
let src = &PublicKey::from_slice(nodes.unordered_keys().skip(seed % nodes.len()).next().unwrap().as_slice()).unwrap();
|
||||
seed = seed.overflowing_mul(0xdeadbeef).0;
|
||||
let dst = PublicKey::from_slice(nodes.unordered_keys().skip(seed % nodes.len()).next().unwrap().as_slice()).unwrap();
|
||||
let payment_params = PaymentParameters::from_node_id(dst, 42).with_features(channelmanager::provided_invoice_features(&config));
|
||||
let payment_params = PaymentParameters::from_node_id(dst, 42).with_bolt11_features(channelmanager::provided_invoice_features(&config)).unwrap();
|
||||
let amt = seed as u64 % 200_000_000;
|
||||
let params = ProbabilisticScoringParameters::default();
|
||||
let scorer = ProbabilisticScorer::new(params, &graph, &logger);
|
||||
|
@ -6112,7 +6114,7 @@ mod benches {
|
|||
let src = PublicKey::from_slice(nodes.unordered_keys().skip(seed % nodes.len()).next().unwrap().as_slice()).unwrap();
|
||||
seed *= 0xdeadbeef;
|
||||
let dst = PublicKey::from_slice(nodes.unordered_keys().skip(seed % nodes.len()).next().unwrap().as_slice()).unwrap();
|
||||
let params = PaymentParameters::from_node_id(dst, 42).with_features(features.clone());
|
||||
let params = PaymentParameters::from_node_id(dst, 42).with_bolt11_features(features.clone()).unwrap();
|
||||
let first_hop = first_hop(src);
|
||||
let amt = seed as u64 % 1_000_000;
|
||||
if let Ok(route) = get_route(&payer, ¶ms, &graph.read_only(), Some(&[&first_hop]), amt, &DummyLogger{}, &scorer, &random_seed_bytes) {
|
||||
|
|
Loading…
Add table
Reference in a new issue