Skip to content

Commit 2297ce3

Browse files
committed
Extend pay_for_offer to accept ManualRoutingParameters
This update allows users to call `pay_for_offer` with a set of parameters they wish to manually set for routing the corresponding invoice. By accepting `ManualRoutingParameters`, users gain greater control over the routing process.
1 parent e0600cc commit 2297ce3

File tree

2 files changed

+19
-13
lines changed

2 files changed

+19
-13
lines changed

lightning/src/ln/channelmanager.rs

+11-5
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ use crate::ln::channel_state::ChannelDetails;
5353
use crate::ln::features::{Bolt12InvoiceFeatures, ChannelFeatures, ChannelTypeFeatures, InitFeatures, NodeFeatures};
5454
#[cfg(any(feature = "_test_utils", test))]
5555
use crate::ln::features::Bolt11InvoiceFeatures;
56-
use crate::routing::router::{BlindedTail, InFlightHtlcs, Path, Payee, PaymentParameters, Route, RouteParameters, Router};
56+
use crate::routing::router::{BlindedTail, InFlightHtlcs, ManualRoutingParameters, Path, Payee, PaymentParameters, Route, RouteParameters, Router};
5757
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};
5858
use crate::ln::msgs;
5959
use crate::ln::onion_utils;
@@ -1893,10 +1893,11 @@ where
18931893
/// # use lightning::events::{Event, EventsProvider};
18941894
/// # use lightning::ln::channelmanager::{AChannelManager, PaymentId, RecentPaymentDetails, Retry};
18951895
/// # use lightning::offers::offer::Offer;
1896+
/// # use lightning::routing::router::ManualRoutingParameters;
18961897
/// #
18971898
/// # fn example<T: AChannelManager>(
18981899
/// # channel_manager: T, offer: &Offer, quantity: Option<u64>, amount_msats: Option<u64>,
1899-
/// # payer_note: Option<String>, retry: Retry, max_total_routing_fee_msat: Option<u64>
1900+
/// # payer_note: Option<String>, retry: Retry, max_total_routing_fee_msat: Option<ManualRoutingParameters>
19001901
/// # ) {
19011902
/// # let channel_manager = channel_manager.get_cm();
19021903
/// let payment_id = PaymentId([42; 32]);
@@ -9207,10 +9208,15 @@ macro_rules! create_refund_builder { ($self: ident, $builder: ty) => {
92079208

92089209
let _persistence_guard = PersistenceNotifierGuard::notify_on_drop($self);
92099210

9211+
let manual_routing_params = max_total_routing_fee_msat.map(
9212+
|fee_msat| ManualRoutingParameters::new()
9213+
.with_max_total_routing_fee_msat(fee_msat)
9214+
);
9215+
92109216
let expiration = StaleExpiration::AbsoluteTimeout(absolute_expiry);
92119217
$self.pending_outbound_payments
92129218
.add_new_awaiting_invoice(
9213-
payment_id, expiration, retry_strategy, max_total_routing_fee_msat, None,
9219+
payment_id, expiration, retry_strategy, manual_routing_params, None,
92149220
)
92159221
.map_err(|_| Bolt12SemanticError::DuplicatePaymentId)?;
92169222

@@ -9303,7 +9309,7 @@ where
93039309
pub fn pay_for_offer(
93049310
&self, offer: &Offer, quantity: Option<u64>, amount_msats: Option<u64>,
93059311
payer_note: Option<String>, payment_id: PaymentId, retry_strategy: Retry,
9306-
max_total_routing_fee_msat: Option<u64>
9312+
manual_routing_params: Option<ManualRoutingParameters>
93079313
) -> Result<(), Bolt12SemanticError> {
93089314
let expanded_key = &self.inbound_payment_key;
93099315
let entropy = &*self.entropy_source;
@@ -9345,7 +9351,7 @@ where
93459351
};
93469352
self.pending_outbound_payments
93479353
.add_new_awaiting_invoice(
9348-
payment_id, expiration, retry_strategy, max_total_routing_fee_msat,
9354+
payment_id, expiration, retry_strategy, manual_routing_params,
93499355
Some(retryable_invoice_request)
93509356
)
93519357
.map_err(|_| Bolt12SemanticError::DuplicatePaymentId)?;

lightning/src/ln/outbound_payment.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -1598,13 +1598,9 @@ impl OutboundPayments {
15981598

15991599
pub(super) fn add_new_awaiting_invoice(
16001600
&self, payment_id: PaymentId, expiration: StaleExpiration, retry_strategy: Retry,
1601-
max_total_routing_fee_msat: Option<u64>, retryable_invoice_request: Option<RetryableInvoiceRequest>
1601+
manual_routing_params: Option<ManualRoutingParameters>, retryable_invoice_request: Option<RetryableInvoiceRequest>
16021602
) -> Result<(), ()> {
16031603
let mut pending_outbounds = self.pending_outbound_payments.lock().unwrap();
1604-
let manual_routing_params = max_total_routing_fee_msat.map(
1605-
|fee_msats| ManualRoutingParameters::new()
1606-
.with_max_total_routing_fee_msat(fee_msats)
1607-
);
16081604
match pending_outbounds.entry(payment_id) {
16091605
hash_map::Entry::Occupied(_) => Err(()),
16101606
hash_map::Entry::Vacant(entry) => {
@@ -2281,7 +2277,7 @@ mod tests {
22812277
use crate::offers::offer::OfferBuilder;
22822278
use crate::offers::test_utils::*;
22832279
use crate::routing::gossip::NetworkGraph;
2284-
use crate::routing::router::{InFlightHtlcs, Path, PaymentParameters, Route, RouteHop, RouteParameters};
2280+
use crate::routing::router::{InFlightHtlcs, ManualRoutingParameters, Path, PaymentParameters, Route, RouteHop, RouteParameters};
22852281
use crate::sync::{Arc, Mutex, RwLock};
22862282
use crate::util::errors::APIError;
22872283
use crate::util::hash_tables::new_hash_map;
@@ -2695,10 +2691,12 @@ mod tests {
26952691
.build().unwrap()
26962692
.sign(recipient_sign).unwrap();
26972693

2694+
let manual_routing_params = ManualRoutingParameters::new().with_max_total_routing_fee_msat(invoice.amount_msats() / 100 + 50_000);
2695+
26982696
assert!(
26992697
outbound_payments.add_new_awaiting_invoice(
27002698
payment_id, expiration, Retry::Attempts(0),
2701-
Some(invoice.amount_msats() / 100 + 50_000), None,
2699+
Some(manual_routing_params), None,
27022700
).is_ok()
27032701
);
27042702
assert!(outbound_payments.has_pending_payments());
@@ -2796,9 +2794,11 @@ mod tests {
27962794
assert!(!outbound_payments.has_pending_payments());
27972795
assert!(pending_events.lock().unwrap().is_empty());
27982796

2797+
let manual_routing_params = ManualRoutingParameters::new().with_max_total_routing_fee_msat(1234);
2798+
27992799
assert!(
28002800
outbound_payments.add_new_awaiting_invoice(
2801-
payment_id, expiration, Retry::Attempts(0), Some(1234), None,
2801+
payment_id, expiration, Retry::Attempts(0), Some(manual_routing_params), None,
28022802
).is_ok()
28032803
);
28042804
assert!(outbound_payments.has_pending_payments());

0 commit comments

Comments
 (0)