Skip to content

Commit ece4ab7

Browse files
authored
Merge pull request #3342 from shaavan/i3262
Introduce RouteParametersConfig
2 parents c9fd3a5 + 78f6ccb commit ece4ab7

File tree

8 files changed

+323
-98
lines changed

8 files changed

+323
-98
lines changed

lightning-dns-resolver/src/lib.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ mod test {
170170
use lightning::onion_message::messenger::{
171171
AOnionMessenger, Destination, MessageRouter, OnionMessagePath, OnionMessenger,
172172
};
173+
use lightning::routing::router::RouteParametersConfig;
173174
use lightning::sign::{KeysManager, NodeSigner, Recipient};
174175
use lightning::types::features::InitFeatures;
175176
use lightning::types::payment::PaymentHash;
@@ -405,7 +406,14 @@ mod test {
405406
let amt = 42_000;
406407
nodes[0]
407408
.node
408-
.pay_for_offer_from_human_readable_name(name, amt, payment_id, retry, None, resolvers)
409+
.pay_for_offer_from_human_readable_name(
410+
name,
411+
amt,
412+
payment_id,
413+
retry,
414+
RouteParametersConfig::default(),
415+
resolvers,
416+
)
409417
.unwrap();
410418

411419
let query = nodes[0].onion_messenger.next_onion_message_for_peer(resolver_id).unwrap();

lightning/src/ln/async_payments_tests.rs

+82-10
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use crate::onion_message::messenger::{Destination, MessageRouter, MessageSendIns
3333
use crate::onion_message::offers::OffersMessage;
3434
use crate::onion_message::packet::ParsedOnionMessageContents;
3535
use crate::prelude::*;
36-
use crate::routing::router::{Payee, PaymentParameters};
36+
use crate::routing::router::{Payee, PaymentParameters, RouteParametersConfig};
3737
use crate::sign::NodeSigner;
3838
use crate::sync::Mutex;
3939
use crate::types::features::Bolt12InvoiceFeatures;
@@ -238,7 +238,15 @@ fn static_invoice_unknown_required_features() {
238238
let payment_id = PaymentId([1; 32]);
239239
nodes[0]
240240
.node
241-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), None)
241+
.pay_for_offer(
242+
&offer,
243+
None,
244+
Some(amt_msat),
245+
None,
246+
payment_id,
247+
Retry::Attempts(0),
248+
RouteParametersConfig::default(),
249+
)
242250
.unwrap();
243251

244252
// Don't forward the invreq since we don't support retrieving the static invoice from the
@@ -298,7 +306,15 @@ fn ignore_unexpected_static_invoice() {
298306
let payment_id = PaymentId([1; 32]);
299307
nodes[0]
300308
.node
301-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), None)
309+
.pay_for_offer(
310+
&offer,
311+
None,
312+
Some(amt_msat),
313+
None,
314+
payment_id,
315+
Retry::Attempts(0),
316+
RouteParametersConfig::default(),
317+
)
302318
.unwrap();
303319

304320
// Don't forward the invreq since we don't support retrieving the static invoice from the
@@ -415,7 +431,15 @@ fn async_receive_flow_success() {
415431
let payment_id = PaymentId([1; 32]);
416432
nodes[0]
417433
.node
418-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), None)
434+
.pay_for_offer(
435+
&offer,
436+
None,
437+
Some(amt_msat),
438+
None,
439+
payment_id,
440+
Retry::Attempts(0),
441+
RouteParametersConfig::default(),
442+
)
419443
.unwrap();
420444
let release_held_htlc_om =
421445
pass_async_payments_oms(static_invoice, &nodes[0], &nodes[1], &nodes[2]).1;
@@ -463,7 +487,15 @@ fn expired_static_invoice_fail() {
463487
let payment_id = PaymentId([1; 32]);
464488
nodes[0]
465489
.node
466-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), None)
490+
.pay_for_offer(
491+
&offer,
492+
None,
493+
Some(amt_msat),
494+
None,
495+
payment_id,
496+
Retry::Attempts(0),
497+
RouteParametersConfig::default(),
498+
)
467499
.unwrap();
468500

469501
let invreq_om = nodes[0]
@@ -546,7 +578,15 @@ fn async_receive_mpp() {
546578
let payment_id = PaymentId([1; 32]);
547579
nodes[0]
548580
.node
549-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(1), None)
581+
.pay_for_offer(
582+
&offer,
583+
None,
584+
Some(amt_msat),
585+
None,
586+
payment_id,
587+
Retry::Attempts(1),
588+
RouteParametersConfig::default(),
589+
)
550590
.unwrap();
551591
let release_held_htlc_om_3_0 =
552592
pass_async_payments_oms(static_invoice, &nodes[0], &nodes[1], &nodes[3]).1;
@@ -630,7 +670,15 @@ fn amount_doesnt_match_invreq() {
630670
let payment_id = PaymentId([1; 32]);
631671
nodes[0]
632672
.node
633-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(1), None)
673+
.pay_for_offer(
674+
&offer,
675+
None,
676+
Some(amt_msat),
677+
None,
678+
payment_id,
679+
Retry::Attempts(1),
680+
RouteParametersConfig::default(),
681+
)
634682
.unwrap();
635683
let release_held_htlc_om_3_0 =
636684
pass_async_payments_oms(static_invoice, &nodes[0], &nodes[1], &nodes[3]).1;
@@ -859,7 +907,15 @@ fn invalid_async_receive_with_retry<F1, F2>(
859907

860908
nodes[0]
861909
.node
862-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(2), None)
910+
.pay_for_offer(
911+
&offer,
912+
None,
913+
Some(amt_msat),
914+
None,
915+
payment_id,
916+
Retry::Attempts(2),
917+
RouteParametersConfig::default(),
918+
)
863919
.unwrap();
864920
let release_held_htlc_om_2_0 =
865921
pass_async_payments_oms(static_invoice, &nodes[0], &nodes[1], &nodes[2]).1;
@@ -948,7 +1004,15 @@ fn expired_static_invoice_message_path() {
9481004
let payment_id = PaymentId([1; 32]);
9491005
nodes[0]
9501006
.node
951-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(1), None)
1007+
.pay_for_offer(
1008+
&offer,
1009+
None,
1010+
Some(amt_msat),
1011+
None,
1012+
payment_id,
1013+
Retry::Attempts(1),
1014+
RouteParametersConfig::default(),
1015+
)
9521016
.unwrap();
9531017

9541018
// While the invoice is unexpired, respond with release_held_htlc.
@@ -1052,7 +1116,15 @@ fn expired_static_invoice_payment_path() {
10521116
let payment_id = PaymentId([1; 32]);
10531117
nodes[0]
10541118
.node
1055-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), None)
1119+
.pay_for_offer(
1120+
&offer,
1121+
None,
1122+
Some(amt_msat),
1123+
None,
1124+
payment_id,
1125+
Retry::Attempts(0),
1126+
RouteParametersConfig::default(),
1127+
)
10561128
.unwrap();
10571129
let release_held_htlc_om =
10581130
pass_async_payments_oms(static_invoice, &nodes[0], &nodes[1], &nodes[2]).1;

lightning/src/ln/channelmanager.rs

+14-11
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ use crate::types::features::{Bolt12InvoiceFeatures, ChannelFeatures, ChannelType
5757
use crate::types::features::Bolt11InvoiceFeatures;
5858
#[cfg(trampoline)]
5959
use crate::routing::gossip::NodeId;
60-
use crate::routing::router::{BlindedTail, FixedRouter, InFlightHtlcs, Path, Payee, PaymentParameters, Route, RouteParameters, Router};
60+
use crate::routing::router::{BlindedTail, FixedRouter, InFlightHtlcs, Path, Payee, PaymentParameters, Route, RouteParameters, RouteParametersConfig, Router};
6161
use crate::ln::onion_payment::{check_incoming_htlc_cltv, create_recv_pending_htlc_info, create_fwd_pending_htlc_info, decode_incoming_update_add_htlc_onion, InboundHTLCErr, NextPacketDetails};
6262
use crate::ln::msgs;
6363
use crate::ln::onion_utils;
@@ -2105,6 +2105,7 @@ where
21052105
/// # use lightning::events::{Event, EventsProvider, PaymentPurpose};
21062106
/// # use lightning::ln::channelmanager::AChannelManager;
21072107
/// # use lightning::offers::parse::Bolt12SemanticError;
2108+
/// # use lightning::routing::router::RouteParametersConfig;
21082109
/// #
21092110
/// # fn example<T: AChannelManager>(channel_manager: T) -> Result<(), Bolt12SemanticError> {
21102111
/// # let channel_manager = channel_manager.get_cm();
@@ -2152,15 +2153,16 @@ where
21522153
/// # use lightning::events::{Event, EventsProvider};
21532154
/// # use lightning::ln::channelmanager::{AChannelManager, PaymentId, RecentPaymentDetails, Retry};
21542155
/// # use lightning::offers::offer::Offer;
2156+
/// # use lightning::routing::router::RouteParametersConfig;
21552157
/// #
21562158
/// # fn example<T: AChannelManager>(
21572159
/// # channel_manager: T, offer: &Offer, quantity: Option<u64>, amount_msats: Option<u64>,
2158-
/// # payer_note: Option<String>, retry: Retry, max_total_routing_fee_msat: Option<u64>
2160+
/// # payer_note: Option<String>, retry: Retry, route_params_config: RouteParametersConfig
21592161
/// # ) {
21602162
/// # let channel_manager = channel_manager.get_cm();
21612163
/// let payment_id = PaymentId([42; 32]);
21622164
/// match channel_manager.pay_for_offer(
2163-
/// offer, quantity, amount_msats, payer_note, payment_id, retry, max_total_routing_fee_msat
2165+
/// offer, quantity, amount_msats, payer_note, payment_id, retry, route_params_config
21642166
/// ) {
21652167
/// Ok(()) => println!("Requesting invoice for offer"),
21662168
/// Err(e) => println!("Unable to request invoice for offer: {:?}", e),
@@ -2208,16 +2210,17 @@ where
22082210
/// # use lightning::events::{Event, EventsProvider};
22092211
/// # use lightning::ln::channelmanager::{AChannelManager, PaymentId, RecentPaymentDetails, Retry};
22102212
/// # use lightning::offers::parse::Bolt12SemanticError;
2213+
/// # use lightning::routing::router::RouteParametersConfig;
22112214
/// #
22122215
/// # fn example<T: AChannelManager>(
22132216
/// # channel_manager: T, amount_msats: u64, absolute_expiry: Duration, retry: Retry,
2214-
/// # max_total_routing_fee_msat: Option<u64>
2217+
/// # route_params_config: RouteParametersConfig
22152218
/// # ) -> Result<(), Bolt12SemanticError> {
22162219
/// # let channel_manager = channel_manager.get_cm();
22172220
/// let payment_id = PaymentId([42; 32]);
22182221
/// let refund = channel_manager
22192222
/// .create_refund_builder(
2220-
/// amount_msats, absolute_expiry, payment_id, retry, max_total_routing_fee_msat
2223+
/// amount_msats, absolute_expiry, payment_id, retry, route_params_config
22212224
/// )?
22222225
/// # ;
22232226
/// # // Needed for compiling for c_bindings
@@ -10161,7 +10164,7 @@ macro_rules! create_refund_builder { ($self: ident, $builder: ty) => {
1016110164
/// [Avoiding Duplicate Payments]: #avoiding-duplicate-payments
1016210165
pub fn create_refund_builder(
1016310166
&$self, amount_msats: u64, absolute_expiry: Duration, payment_id: PaymentId,
10164-
retry_strategy: Retry, max_total_routing_fee_msat: Option<u64>
10167+
retry_strategy: Retry, route_params_config: RouteParametersConfig
1016510168
) -> Result<$builder, Bolt12SemanticError> {
1016610169
let node_id = $self.get_our_node_id();
1016710170
let expanded_key = &$self.inbound_payment_key;
@@ -10186,7 +10189,7 @@ macro_rules! create_refund_builder { ($self: ident, $builder: ty) => {
1018610189
let expiration = StaleExpiration::AbsoluteTimeout(absolute_expiry);
1018710190
$self.pending_outbound_payments
1018810191
.add_new_awaiting_invoice(
10189-
payment_id, expiration, retry_strategy, max_total_routing_fee_msat, None,
10192+
payment_id, expiration, retry_strategy, route_params_config, None,
1019010193
)
1019110194
.map_err(|_| Bolt12SemanticError::DuplicatePaymentId)?;
1019210195

@@ -10362,7 +10365,7 @@ where
1036210365
pub fn pay_for_offer(
1036310366
&self, offer: &Offer, quantity: Option<u64>, amount_msats: Option<u64>,
1036410367
payer_note: Option<String>, payment_id: PaymentId, retry_strategy: Retry,
10365-
max_total_routing_fee_msat: Option<u64>
10368+
route_params_config: RouteParametersConfig
1036610369
) -> Result<(), Bolt12SemanticError> {
1036710370
self.pay_for_offer_intern(offer, quantity, amount_msats, payer_note, payment_id, None, |invoice_request, nonce| {
1036810371
let expiration = StaleExpiration::TimerTicks(1);
@@ -10373,7 +10376,7 @@ where
1037310376
};
1037410377
self.pending_outbound_payments
1037510378
.add_new_awaiting_invoice(
10376-
payment_id, expiration, retry_strategy, max_total_routing_fee_msat,
10379+
payment_id, expiration, retry_strategy, route_params_config,
1037710380
Some(retryable_invoice_request)
1037810381
)
1037910382
.map_err(|_| Bolt12SemanticError::DuplicatePaymentId)
@@ -10606,14 +10609,14 @@ where
1060610609
#[cfg(feature = "dnssec")]
1060710610
pub fn pay_for_offer_from_human_readable_name(
1060810611
&self, name: HumanReadableName, amount_msats: u64, payment_id: PaymentId,
10609-
retry_strategy: Retry, max_total_routing_fee_msat: Option<u64>,
10612+
retry_strategy: Retry, route_params_config: RouteParametersConfig,
1061010613
dns_resolvers: Vec<Destination>,
1061110614
) -> Result<(), ()> {
1061210615
let (onion_message, context) =
1061310616
self.hrn_resolver.resolve_name(payment_id, name, &*self.entropy_source)?;
1061410617
let reply_paths = self.create_blinded_paths(MessageContext::DNSResolver(context))?;
1061510618
let expiration = StaleExpiration::TimerTicks(1);
10616-
self.pending_outbound_payments.add_new_awaiting_offer(payment_id, expiration, retry_strategy, max_total_routing_fee_msat, amount_msats)?;
10619+
self.pending_outbound_payments.add_new_awaiting_offer(payment_id, expiration, retry_strategy, route_params_config, amount_msats)?;
1061710620
let message_params = dns_resolvers
1061810621
.iter()
1061910622
.flat_map(|destination| reply_paths.iter().map(move |path| (path, destination)))

lightning/src/ln/max_payment_path_len_tests.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use crate::ln::onion_utils::MIN_FINAL_VALUE_ESTIMATE_WITH_OVERPAY;
2626
use crate::ln::outbound_payment::{RecipientOnionFields, Retry, RetryableSendFailure};
2727
use crate::offers::nonce::Nonce;
2828
use crate::prelude::*;
29-
use crate::routing::router::{DEFAULT_MAX_TOTAL_CLTV_EXPIRY_DELTA, PaymentParameters, RouteParameters};
29+
use crate::routing::router::{PaymentParameters, RouteParameters, RouteParametersConfig, DEFAULT_MAX_TOTAL_CLTV_EXPIRY_DELTA};
3030
use crate::sign::NodeSigner;
3131
use crate::util::errors::APIError;
3232
use crate::util::ser::Writeable;
@@ -393,7 +393,7 @@ fn bolt12_invoice_too_large_blinded_paths() {
393393

394394
let offer = nodes[1].node.create_offer_builder(None).unwrap().build().unwrap();
395395
let payment_id = PaymentId([1; 32]);
396-
nodes[0].node.pay_for_offer(&offer, None, Some(5000), None, payment_id, Retry::Attempts(0), None).unwrap();
396+
nodes[0].node.pay_for_offer(&offer, None, Some(5000), None, payment_id, Retry::Attempts(0), RouteParametersConfig::default()).unwrap();
397397
let invreq_om = nodes[0].onion_messenger.next_onion_message_for_peer(nodes[1].node.get_our_node_id()).unwrap();
398398
nodes[1].onion_messenger.handle_onion_message(nodes[0].node.get_our_node_id(), &invreq_om);
399399

0 commit comments

Comments
 (0)