Skip to content

Allow setting an HRN in invoice_requests built by pay_for_offer #3903

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
29 changes: 7 additions & 22 deletions lightning-dns-resolver/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ mod test {
use lightning::blinded_path::message::{BlindedMessagePath, MessageContext};
use lightning::blinded_path::NodeIdLookUp;
use lightning::events::{Event, PaymentPurpose};
use lightning::ln::channelmanager::{PaymentId, Retry};
use lightning::ln::channelmanager::{OptionalOfferPaymentParams, PaymentId};
use lightning::ln::functional_test_utils::*;
use lightning::ln::msgs::{
BaseMessageHandler, ChannelMessageHandler, Init, OnionMessageHandler,
Expand All @@ -173,7 +173,6 @@ mod test {
use lightning::onion_message::messenger::{
AOnionMessenger, Destination, MessageRouter, OnionMessagePath, OnionMessenger,
};
use lightning::routing::router::RouteParametersConfig;
use lightning::sign::{KeysManager, NodeSigner, Recipient};
use lightning::types::features::InitFeatures;
use lightning::types::payment::PaymentHash;
Expand Down Expand Up @@ -369,23 +368,18 @@ mod test {
async fn pay_offer_flow<'a, 'b, 'c>(
nodes: &[Node<'a, 'b, 'c>], resolver_messenger: &impl AOnionMessenger,
resolver_id: PublicKey, payer_id: PublicKey, payee_id: PublicKey, offer: Offer,
name: HumanReadableName, amt: u64, payment_id: PaymentId, payer_note: Option<String>,
retry: Retry, params: RouteParametersConfig, resolvers: Vec<Destination>,
name: HumanReadableName, payment_id: PaymentId, payer_note: Option<String>,
resolvers: Vec<Destination>,
) {
// Override contents to offer provided
let proof_override = &nodes[0].node.testing_dnssec_proof_offer_resolution_override;
proof_override.lock().unwrap().insert(name.clone(), offer);
let amt = 42_000;
let mut opts = OptionalOfferPaymentParams::default();
opts.payer_note = payer_note.clone();
nodes[0]
.node
.pay_for_offer_from_human_readable_name(
name,
amt,
payment_id,
payer_note.clone(),
retry,
params,
resolvers,
)
.pay_for_offer_from_human_readable_name(name, amt, payment_id, opts, resolvers)
.unwrap();

let query = nodes[0].onion_messenger.next_onion_message_for_peer(resolver_id).unwrap();
Expand Down Expand Up @@ -482,9 +476,6 @@ mod test {

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

pay_offer_flow(
&nodes,
Expand All @@ -494,11 +485,8 @@ mod test {
payee_id,
bs_offer.clone(),
name.clone(),
amt,
PaymentId([42; 32]),
None,
retry,
params,
resolvers.clone(),
)
.await;
Expand All @@ -512,11 +500,8 @@ mod test {
payee_id,
bs_offer,
name,
amt,
PaymentId([21; 32]),
Some("foo".into()),
retry,
params,
resolvers,
)
.await;
Expand Down
36 changes: 13 additions & 23 deletions lightning/src/ln/async_payments_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use crate::blinded_path::payment::{AsyncBolt12OfferContext, BlindedPaymentTlvs};
use crate::chain::channelmonitor::{HTLC_FAIL_BACK_BUFFER, LATENCY_GRACE_PERIOD_BLOCKS};
use crate::events::{Event, HTLCHandlingFailureType, PaidBolt12Invoice, PaymentFailureReason};
use crate::ln::blinded_payment_tests::{fail_blinded_htlc_backwards, get_blinded_route_parameters};
use crate::ln::channelmanager::{PaymentId, RecipientOnionFields};
use crate::ln::channelmanager::{OptionalOfferPaymentParams, PaymentId, RecipientOnionFields};
use crate::ln::functional_test_utils::*;
use crate::ln::msgs;
use crate::ln::msgs::{
Expand All @@ -32,7 +32,7 @@ use crate::onion_message::messenger::{Destination, MessageRouter, MessageSendIns
use crate::onion_message::offers::OffersMessage;
use crate::onion_message::packet::ParsedOnionMessageContents;
use crate::prelude::*;
use crate::routing::router::{Payee, PaymentParameters, RouteParametersConfig};
use crate::routing::router::{Payee, PaymentParameters};
use crate::sign::NodeSigner;
use crate::sync::Mutex;
use crate::types::features::Bolt12InvoiceFeatures;
Expand Down Expand Up @@ -239,10 +239,9 @@ fn static_invoice_unknown_required_features() {

let amt_msat = 5000;
let payment_id = PaymentId([1; 32]);
let params = RouteParametersConfig::default();
nodes[0]
.node
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default(), None)
.unwrap();

// Don't forward the invreq since we don't support retrieving the static invoice from the
Expand Down Expand Up @@ -300,10 +299,9 @@ fn ignore_unexpected_static_invoice() {
create_static_invoice(&nodes[1], &nodes[2], None, &secp_ctx);
let amt_msat = 5000;
let payment_id = PaymentId([1; 32]);
let params = RouteParametersConfig::default();
nodes[0]
.node
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default(), None)
.unwrap();

// Don't forward the invreq since we don't support retrieving the static invoice from the
Expand Down Expand Up @@ -418,10 +416,9 @@ fn async_receive_flow_success() {

let amt_msat = 5000;
let payment_id = PaymentId([1; 32]);
let params = RouteParametersConfig::default();
nodes[0]
.node
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default(), None)
.unwrap();
let release_held_htlc_om =
pass_async_payments_oms(static_invoice.clone(), &nodes[0], &nodes[1], &nodes[2]).1;
Expand Down Expand Up @@ -470,10 +467,9 @@ fn expired_static_invoice_fail() {

let amt_msat = 5000;
let payment_id = PaymentId([1; 32]);
let params = RouteParametersConfig::default();
nodes[0]
.node
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default(), None)
.unwrap();

let invreq_om = nodes[0]
Expand Down Expand Up @@ -561,10 +557,9 @@ fn async_receive_mpp() {
// the different MPP parts to not be unique.
let amt_msat = 15_000_000;
let payment_id = PaymentId([1; 32]);
let params = RouteParametersConfig::default();
nodes[0]
.node
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(1), params)
.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default(), None)
.unwrap();
let release_held_htlc_om_3_0 =
pass_async_payments_oms(static_invoice, &nodes[0], &nodes[1], &nodes[3]).1;
Expand Down Expand Up @@ -652,10 +647,9 @@ fn amount_doesnt_match_invreq() {

let amt_msat = 5000;
let payment_id = PaymentId([1; 32]);
let params = RouteParametersConfig::default();
nodes[0]
.node
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(1), params)
.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default(), None)
.unwrap();
let release_held_htlc_om_3_0 =
pass_async_payments_oms(static_invoice, &nodes[0], &nodes[1], &nodes[3]).1;
Expand Down Expand Up @@ -888,10 +882,9 @@ fn invalid_async_receive_with_retry<F1, F2>(
let payment_hash: PaymentHash = keysend_preimage.into();
*nodes[0].keys_manager.override_random_bytes.lock().unwrap() = Some(hardcoded_random_bytes);

let params = RouteParametersConfig::default();
nodes[0]
.node
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(2), params)
.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default(), None)
.unwrap();
let release_held_htlc_om_2_0 =
pass_async_payments_oms(static_invoice, &nodes[0], &nodes[1], &nodes[2]).1;
Expand Down Expand Up @@ -978,10 +971,9 @@ fn expired_static_invoice_message_path() {

let amt_msat = 5000;
let payment_id = PaymentId([1; 32]);
let params = RouteParametersConfig::default();
nodes[0]
.node
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(1), params)
.pay_for_offer(&offer, Some(amt_msat), payment_id, Default::default(), None)
.unwrap();

// While the invoice is unexpired, respond with release_held_htlc.
Expand Down Expand Up @@ -1083,11 +1075,9 @@ fn expired_static_invoice_payment_path() {
let (offer, static_invoice) = create_static_invoice(&nodes[1], &nodes[2], None, &secp_ctx);
let amt_msat = 5000;
let payment_id = PaymentId([1; 32]);
let params = RouteParametersConfig::default();
nodes[0]
.node
.pay_for_offer(&offer, None, Some(amt_msat), None, payment_id, Retry::Attempts(0), params)
.unwrap();
let mut params: OptionalOfferPaymentParams = Default::default();
params.retry_strategy = Retry::Attempts(0);
nodes[0].node.pay_for_offer(&offer, Some(amt_msat), payment_id, params, None).unwrap();
let release_held_htlc_om =
pass_async_payments_oms(static_invoice, &nodes[0], &nodes[1], &nodes[2]).1;
nodes[0]
Expand Down
Loading
Loading