Skip to content

Commit f65e78d

Browse files
committed
Move reasonable-default arguments out of pay_for_offer.
`ChannelManager::pay_for_offer` and `ChannelManager::pay_for_offer_from_human_readable_name` have accumulated a handful of arguments, most of which we expect users to never actually set. Instead, here, we move `quantity` and `payer_note` (which we expect users to never set) as well as `route_params_config` and `retry_strategy` (which we expect users to generally stick with the defaults on) into a new struct, which implements `Default`. This cleans up a good bit of cruft on payment calls.
1 parent 6679c4f commit f65e78d

File tree

5 files changed

+157
-180
lines changed

5 files changed

+157
-180
lines changed

lightning-dns-resolver/src/lib.rs

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ mod test {
164164
};
165165
use lightning::blinded_path::NodeIdLookUp;
166166
use lightning::events::{Event, PaymentPurpose};
167-
use lightning::ln::channelmanager::{PaymentId, Retry};
167+
use lightning::ln::channelmanager::{OptionalOfferPaymentParams, PaymentId};
168168
use lightning::ln::functional_test_utils::*;
169169
use lightning::ln::msgs::{
170170
BaseMessageHandler, ChannelMessageHandler, Init, OnionMessageHandler,
@@ -175,7 +175,6 @@ mod test {
175175
use lightning::onion_message::messenger::{
176176
AOnionMessenger, Destination, MessageRouter, OnionMessagePath, OnionMessenger,
177177
};
178-
use lightning::routing::router::RouteParametersConfig;
179178
use lightning::sign::{KeysManager, NodeSigner, ReceiveAuthKey, Recipient};
180179
use lightning::types::features::InitFeatures;
181180
use lightning::types::payment::PaymentHash;
@@ -380,23 +379,18 @@ mod test {
380379
async fn pay_offer_flow<'a, 'b, 'c>(
381380
nodes: &[Node<'a, 'b, 'c>], resolver_messenger: &impl AOnionMessenger,
382381
resolver_id: PublicKey, payer_id: PublicKey, payee_id: PublicKey, offer: Offer,
383-
name: HumanReadableName, amt: u64, payment_id: PaymentId, payer_note: Option<String>,
384-
retry: Retry, params: RouteParametersConfig, resolvers: Vec<Destination>,
382+
name: HumanReadableName, payment_id: PaymentId, payer_note: Option<String>,
383+
resolvers: Vec<Destination>,
385384
) {
386385
// Override contents to offer provided
387386
let proof_override = &nodes[0].node.testing_dnssec_proof_offer_resolution_override;
388387
proof_override.lock().unwrap().insert(name.clone(), offer);
388+
let amt = 42_000;
389+
let mut opts = OptionalOfferPaymentParams::default();
390+
opts.payer_note = payer_note.clone();
389391
nodes[0]
390392
.node
391-
.pay_for_offer_from_human_readable_name(
392-
name,
393-
amt,
394-
payment_id,
395-
payer_note.clone(),
396-
retry,
397-
params,
398-
resolvers,
399-
)
393+
.pay_for_offer_from_human_readable_name(name, amt, payment_id, opts, resolvers)
400394
.unwrap();
401395

402396
let query = nodes[0].onion_messenger.next_onion_message_for_peer(resolver_id).unwrap();
@@ -493,9 +487,6 @@ mod test {
493487

494488
let bs_offer = nodes[1].node.create_offer_builder().unwrap().build().unwrap();
495489
let resolvers = vec![Destination::Node(resolver_id)];
496-
let retry = Retry::Attempts(0);
497-
let amt = 42_000;
498-
let params = RouteParametersConfig::default();
499490

500491
pay_offer_flow(
501492
&nodes,
@@ -505,11 +496,8 @@ mod test {
505496
payee_id,
506497
bs_offer.clone(),
507498
name.clone(),
508-
amt,
509499
PaymentId([42; 32]),
510500
None,
511-
retry,
512-
params,
513501
resolvers.clone(),
514502
)
515503
.await;
@@ -523,11 +511,8 @@ mod test {
523511
payee_id,
524512
bs_offer,
525513
name,
526-
amt,
527514
PaymentId([21; 32]),
528515
Some("foo".into()),
529-
retry,
530-
params,
531516
resolvers,
532517
)
533518
.await;

lightning/src/ln/async_payments_tests.rs

Lines changed: 21 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ use crate::events::{
1515
Event, HTLCHandlingFailureType, PaidBolt12Invoice, PaymentFailureReason, PaymentPurpose,
1616
};
1717
use crate::ln::blinded_payment_tests::{fail_blinded_htlc_backwards, get_blinded_route_parameters};
18-
use crate::ln::channelmanager::{Bolt12PaymentError, PaymentId, RecipientOnionFields};
18+
use crate::ln::channelmanager::{
19+
Bolt12PaymentError, OptionalOfferPaymentParams, PaymentId, RecipientOnionFields,
20+
};
1921
use crate::ln::functional_test_utils::*;
2022
use crate::ln::inbound_payment;
2123
use crate::ln::msgs;
@@ -49,7 +51,7 @@ use crate::onion_message::messenger::{
4951
use crate::onion_message::offers::OffersMessage;
5052
use crate::onion_message::packet::ParsedOnionMessageContents;
5153
use crate::prelude::*;
52-
use crate::routing::router::{Payee, PaymentParameters, RouteParametersConfig};
54+
use crate::routing::router::{Payee, PaymentParameters};
5355
use crate::sign::NodeSigner;
5456
use crate::sync::Mutex;
5557
use crate::types::features::Bolt12InvoiceFeatures;
@@ -498,11 +500,7 @@ fn static_invoice_unknown_required_features() {
498500
// unknown required features.
499501
let amt_msat = 5000;
500502
let payment_id = PaymentId([1; 32]);
501-
let params = RouteParametersConfig::default();
502-
nodes[0]
503-
.node
504-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
505-
.unwrap();
503+
nodes[0].node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
506504

507505
// Don't forward the invreq since the invoice was created outside of the normal flow, instead
508506
// manually construct the response.
@@ -574,11 +572,7 @@ fn ignore_unexpected_static_invoice() {
574572

575573
let amt_msat = 5000;
576574
let payment_id = PaymentId([1; 32]);
577-
let params = RouteParametersConfig::default();
578-
nodes[0]
579-
.node
580-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
581-
.unwrap();
575+
nodes[0].node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
582576

583577
let invreq_om = nodes[0]
584578
.onion_messenger
@@ -707,11 +701,7 @@ fn ignore_duplicate_invoice() {
707701
let offer = async_recipient.node.get_async_receive_offer().unwrap();
708702
let amt_msat = 5000;
709703
let payment_id = PaymentId([1; 32]);
710-
let params = RouteParametersConfig::default();
711-
sender
712-
.node
713-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
714-
.unwrap();
704+
sender.node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
715705

716706
let sender_node_id = sender.node.get_our_node_id();
717707
let always_online_node_id = always_online_node.node.get_our_node_id();
@@ -809,10 +799,7 @@ fn ignore_duplicate_invoice() {
809799

810800
// Now handle case where the sender pays regular invoice and ignores static invoice.
811801
let payment_id = PaymentId([2; 32]);
812-
sender
813-
.node
814-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
815-
.unwrap();
802+
sender.node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
816803

817804
let invreq_om =
818805
sender.onion_messenger.next_onion_message_for_peer(always_online_node_id).unwrap();
@@ -918,11 +905,7 @@ fn async_receive_flow_success() {
918905
let offer = nodes[2].node.get_async_receive_offer().unwrap();
919906
let amt_msat = 5000;
920907
let payment_id = PaymentId([1; 32]);
921-
let params = RouteParametersConfig::default();
922-
nodes[0]
923-
.node
924-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
925-
.unwrap();
908+
nodes[0].node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
926909
let release_held_htlc_om = pass_async_payments_oms(
927910
static_invoice.clone(),
928911
&nodes[0],
@@ -982,11 +965,7 @@ fn expired_static_invoice_fail() {
982965

983966
let amt_msat = 5000;
984967
let payment_id = PaymentId([1; 32]);
985-
let params = RouteParametersConfig::default();
986-
nodes[0]
987-
.node
988-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
989-
.unwrap();
968+
nodes[0].node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
990969

991970
let invreq_om = nodes[0]
992971
.onion_messenger
@@ -1069,11 +1048,7 @@ fn timeout_unreleased_payment() {
10691048

10701049
let amt_msat = 5000;
10711050
let payment_id = PaymentId([1; 32]);
1072-
let params = RouteParametersConfig::default();
1073-
sender
1074-
.node
1075-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
1076-
.unwrap();
1051+
sender.node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
10771052

10781053
let invreq_om =
10791054
sender.onion_messenger.next_onion_message_for_peer(server.node.get_our_node_id()).unwrap();
@@ -1166,11 +1141,7 @@ fn async_receive_mpp() {
11661141

11671142
let amt_msat = 15_000_000;
11681143
let payment_id = PaymentId([1; 32]);
1169-
let params = RouteParametersConfig::default();
1170-
nodes[0]
1171-
.node
1172-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(1), params)
1173-
.unwrap();
1144+
nodes[0].node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
11741145
let release_held_htlc_om_3_0 = pass_async_payments_oms(
11751146
static_invoice,
11761147
&nodes[0],
@@ -1268,11 +1239,7 @@ fn amount_doesnt_match_invreq() {
12681239

12691240
let amt_msat = 5000;
12701241
let payment_id = PaymentId([1; 32]);
1271-
let params = RouteParametersConfig::default();
1272-
nodes[0]
1273-
.node
1274-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(1), params)
1275-
.unwrap();
1242+
nodes[0].node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
12761243
let release_held_htlc_om_3_0 = pass_async_payments_oms(
12771244
static_invoice,
12781245
&nodes[0],
@@ -1515,11 +1482,7 @@ fn invalid_async_receive_with_retry<F1, F2>(
15151482
let static_invoice = invoice_flow_res.invoice;
15161483
let offer = nodes[2].node.get_async_receive_offer().unwrap();
15171484

1518-
let params = RouteParametersConfig::default();
1519-
nodes[0]
1520-
.node
1521-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(2), params)
1522-
.unwrap();
1485+
nodes[0].node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
15231486
let release_held_htlc_om_2_0 = pass_async_payments_oms(
15241487
static_invoice,
15251488
&nodes[0],
@@ -1613,11 +1576,7 @@ fn expired_static_invoice_message_path() {
16131576

16141577
let amt_msat = 5000;
16151578
let payment_id = PaymentId([1; 32]);
1616-
let params = RouteParametersConfig::default();
1617-
nodes[0]
1618-
.node
1619-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(1), params)
1620-
.unwrap();
1579+
nodes[0].node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
16211580

16221581
// While the invoice is unexpired, respond with release_held_htlc.
16231582
let (held_htlc_available_om, _release_held_htlc_om) = pass_async_payments_oms(
@@ -1730,11 +1689,9 @@ fn expired_static_invoice_payment_path() {
17301689

17311690
let amt_msat = 5000;
17321691
let payment_id = PaymentId([1; 32]);
1733-
let params = RouteParametersConfig::default();
1734-
nodes[0]
1735-
.node
1736-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
1737-
.unwrap();
1692+
let mut params: OptionalOfferPaymentParams = Default::default();
1693+
params.retry_strategy = Retry::Attempts(0);
1694+
nodes[0].node.pay_for_offer(&offer, Some(amt_msat), payment_id, params).unwrap();
17381695
let release_held_htlc_om = pass_async_payments_oms(
17391696
static_invoice,
17401697
&nodes[0],
@@ -2178,11 +2135,7 @@ fn refresh_static_invoices_for_used_offers() {
21782135
let offer = recipient.node.get_async_receive_offer().unwrap();
21792136
let amt_msat = 5000;
21802137
let payment_id = PaymentId([1; 32]);
2181-
let params = RouteParametersConfig::default();
2182-
sender
2183-
.node
2184-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
2185-
.unwrap();
2138+
sender.node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
21862139

21872140
let release_held_htlc_om = pass_async_payments_oms(
21882141
updated_invoice.clone(),
@@ -2514,11 +2467,7 @@ fn invoice_server_is_not_channel_peer() {
25142467
let offer = recipient.node.get_async_receive_offer().unwrap();
25152468
let amt_msat = 5000;
25162469
let payment_id = PaymentId([1; 32]);
2517-
let params = RouteParametersConfig::default();
2518-
sender
2519-
.node
2520-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
2521-
.unwrap();
2470+
sender.node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
25222471

25232472
// Do the held_htlc_available --> release_held_htlc dance.
25242473
let release_held_htlc_om = pass_async_payments_oms(
@@ -2580,11 +2529,7 @@ fn invoice_request_forwarded_to_async_recipient() {
25802529
let offer = async_recipient.node.get_async_receive_offer().unwrap();
25812530
let amt_msat = 5000;
25822531
let payment_id = PaymentId([1; 32]);
2583-
let params = RouteParametersConfig::default();
2584-
sender
2585-
.node
2586-
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
2587-
.unwrap();
2532+
sender.node.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default()).unwrap();
25882533

25892534
let sender_node_id = sender.node.get_our_node_id();
25902535

0 commit comments

Comments
 (0)