Skip to content

Commit 2729da1

Browse files
committed
Add PaymentParameters to spontaneous send
Added optional PaymentParameters to the send method in SpontaneousPayment. If the user provides payment params the values will be overridden otherwise they remain the same. Updated the ldk_node.udl with these changes.
1 parent b90f65e commit 2729da1

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

bindings/ldk_node.udl

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ interface Bolt12Payment {
135135

136136
interface SpontaneousPayment {
137137
[Throws=NodeError]
138-
PaymentId send(u64 amount_msat, PublicKey node_id);
138+
PaymentId send(u64 amount_msat, PublicKey node_id, PaymentParameters? payment_parameters);
139139
[Throws=NodeError]
140140
void send_probes(u64 amount_msat, PublicKey node_id);
141141
};

src/payment/spontaneous.rs

+23-6
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ use crate::config::{Config, LDK_PAYMENT_RETRY_TIMEOUT};
44
use crate::error::Error;
55
use crate::logger::{log_error, log_info, FilesystemLogger, Logger};
66
use crate::payment::store::{
7-
PaymentDetails, PaymentDirection, PaymentKind, PaymentStatus, PaymentStore,
7+
PaymentDetails, PaymentDirection, PaymentKind, PaymentParameters, PaymentStatus, PaymentStore,
88
};
99
use crate::types::{ChannelManager, KeysManager};
1010

1111
use lightning::ln::channelmanager::{PaymentId, RecipientOnionFields, Retry, RetryableSendFailure};
1212
use lightning::ln::{PaymentHash, PaymentPreimage};
13-
use lightning::routing::router::{PaymentParameters, RouteParameters};
13+
use lightning::routing::router::{PaymentParameters as PaymentParams, RouteParameters};
1414
use lightning::sign::EntropySource;
1515

1616
use bitcoin::secp256k1::PublicKey;
@@ -41,8 +41,12 @@ impl SpontaneousPayment {
4141
Self { runtime, channel_manager, keys_manager, payment_store, config, logger }
4242
}
4343

44-
/// Send a spontaneous, aka. "keysend", payment
45-
pub fn send(&self, amount_msat: u64, node_id: PublicKey) -> Result<PaymentId, Error> {
44+
/// Send a spontaneous, or "keysend", payment given an amount in millisatoshi, node ID, and optional [`PaymentParameters`].
45+
///
46+
/// [`PaymentParameters`]: PaymentParameters
47+
pub fn send(
48+
&self, amount_msat: u64, node_id: PublicKey, payment_parameters: Option<PaymentParameters>,
49+
) -> Result<PaymentId, Error> {
4650
let rt_lock = self.runtime.read().unwrap();
4751
if rt_lock.is_none() {
4852
return Err(Error::NotRunning);
@@ -61,10 +65,23 @@ impl SpontaneousPayment {
6165
}
6266
}
6367

64-
let route_params = RouteParameters::from_payment_params_and_value(
65-
PaymentParameters::from_node_id(node_id, self.config.default_cltv_expiry_delta),
68+
let mut route_params = RouteParameters::from_payment_params_and_value(
69+
PaymentParams::from_node_id(node_id, self.config.default_cltv_expiry_delta),
6670
amount_msat,
6771
);
72+
73+
if let Some(payment_params) = payment_parameters {
74+
payment_params
75+
.expiry_time
76+
.map(|expiry| route_params.payment_params.expiry_time = Some(expiry));
77+
payment_params
78+
.max_total_routing_fee_msat
79+
.map(|fee| route_params.max_total_routing_fee_msat = Some(fee));
80+
payment_params
81+
.max_total_cltv_expiry_delta
82+
.map(|delta| route_params.payment_params.max_total_cltv_expiry_delta = delta);
83+
}
84+
6885
let recipient_fields = RecipientOnionFields::spontaneous_empty();
6986

7087
match self.channel_manager.send_spontaneous_payment_with_retry(

tests/common/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ pub(crate) fn do_channel_full_cycle<E: ElectrumApi>(
695695
println!("\nA send_spontaneous_payment");
696696
let keysend_amount_msat = 2500_000;
697697
let keysend_payment_id =
698-
node_a.spontaneous_payment().send(keysend_amount_msat, node_b.node_id()).unwrap();
698+
node_a.spontaneous_payment().send(keysend_amount_msat, node_b.node_id(), None).unwrap();
699699
expect_event!(node_a, PaymentSuccessful);
700700
let received_keysend_amount = match node_b.wait_next_event() {
701701
ref e @ Event::PaymentReceived { amount_msat, .. } => {

0 commit comments

Comments
 (0)