@@ -4,13 +4,13 @@ use crate::config::{Config, LDK_PAYMENT_RETRY_TIMEOUT};
4
4
use crate :: error:: Error ;
5
5
use crate :: logger:: { log_error, log_info, FilesystemLogger , Logger } ;
6
6
use crate :: payment:: store:: {
7
- PaymentDetails , PaymentDirection , PaymentKind , PaymentStatus , PaymentStore ,
7
+ PaymentDetails , PaymentDirection , PaymentKind , PaymentParameters , PaymentStatus , PaymentStore ,
8
8
} ;
9
9
use crate :: types:: { ChannelManager , KeysManager } ;
10
10
11
11
use lightning:: ln:: channelmanager:: { PaymentId , RecipientOnionFields , Retry , RetryableSendFailure } ;
12
12
use lightning:: ln:: { PaymentHash , PaymentPreimage } ;
13
- use lightning:: routing:: router:: { PaymentParameters , RouteParameters } ;
13
+ use lightning:: routing:: router:: { PaymentParameters as PaymentParams , RouteParameters } ;
14
14
use lightning:: sign:: EntropySource ;
15
15
16
16
use bitcoin:: secp256k1:: PublicKey ;
@@ -41,8 +41,12 @@ impl SpontaneousPayment {
41
41
Self { runtime, channel_manager, keys_manager, payment_store, config, logger }
42
42
}
43
43
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 > {
46
50
let rt_lock = self . runtime . read ( ) . unwrap ( ) ;
47
51
if rt_lock. is_none ( ) {
48
52
return Err ( Error :: NotRunning ) ;
@@ -61,10 +65,23 @@ impl SpontaneousPayment {
61
65
}
62
66
}
63
67
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 ) ,
66
70
amount_msat,
67
71
) ;
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
+
68
85
let recipient_fields = RecipientOnionFields :: spontaneous_empty ( ) ;
69
86
70
87
match self . channel_manager . send_spontaneous_payment_with_retry (
0 commit comments