1
1
use crate :: events:: { Event , EventQueue } ;
2
+ use crate :: jit_channel:: channel_manager:: JITChannelManager ;
2
3
use crate :: transport:: msgs:: { LSPSMessage , RawLSPSMessage , LSPS_MESSAGE_TYPE_ID } ;
3
4
use crate :: transport:: protocol:: LSPS0MessageHandler ;
4
5
5
6
use lightning:: chain:: chaininterface:: { BroadcasterInterface , FeeEstimator } ;
6
7
use lightning:: chain:: { self , BestBlock , Confirm , Filter , Listen } ;
7
8
use lightning:: ln:: channelmanager:: { ChainParameters , ChannelManager } ;
8
9
use lightning:: ln:: features:: { InitFeatures , NodeFeatures } ;
9
- use lightning:: ln:: msgs:: { ErrorAction , LightningError } ;
10
- use lightning:: ln:: peer_handler:: CustomMessageHandler ;
10
+ use lightning:: ln:: msgs:: {
11
+ ChannelMessageHandler , ErrorAction , LightningError , OnionMessageHandler , RoutingMessageHandler ,
12
+ } ;
13
+ use lightning:: ln:: peer_handler:: { CustomMessageHandler , SocketDescriptor } ;
11
14
use lightning:: ln:: wire:: CustomMessageReader ;
12
15
use lightning:: routing:: router:: Router ;
13
16
use lightning:: sign:: { EntropySource , NodeSigner , SignerProvider } ;
@@ -42,20 +45,48 @@ pub(crate) trait ProtocolMessageHandler {
42
45
///
43
46
/// Allows end-user to configure options when using the [`LiquidityManager`]
44
47
/// to provide liquidity services to clients.
45
- pub struct LiquidityProviderConfig ;
48
+ pub struct LiquidityProviderConfig {
49
+ /// Optional configuration for jit channels
50
+ /// should you want to support them
51
+ pub jit_channels : Option < JITChannelsConfig > ,
52
+ }
53
+
54
+ /// Configuration options for jit channels
55
+ /// A configuration used for the creation of Just In Time Channels.
56
+ pub struct JITChannelsConfig {
57
+ /// Used to calculate the promise for channel parameters supplied to clients
58
+ ///
59
+ /// Note: If this changes then old promises given out will be considered invalid
60
+ pub promise_secret : [ u8 ; 32 ] ,
61
+ }
46
62
47
63
/// The main interface into LSP functionality.
48
64
///
49
65
/// Should be used as a [`CustomMessageHandler`] for your
50
66
/// [`lightning::ln::peer_handler::PeerManager`]'s [`lightning::ln::peer_handler::MessageHandler`].
67
+ ///
68
+ /// Should provide a reference to your [`lightning::ln::peer_handler::PeerManager`] by calling
69
+ /// [`LiquidityManager::set_peer_manager()`] post construction. This allows the [`LiquidityManager`] to
70
+ /// wake the [`lightning::ln::peer_handler::PeerManager`] when there are pending messages to be sent.
71
+ ///
72
+ /// Users need to continually poll [`LiquidityManager::get_and_clear_pending_events()`] in order to surface
73
+ /// [`Event`]'s that likely need to be handled.
74
+ ///
75
+ /// Users must forward the [`lightning::events::Event::HTLCIntercepted`] event parameters to [`LiquidityManager::htlc_intercepted()`]
76
+ /// and the [`lightning::events::Event::ChannelReady`] event parameters to [`LiquidityManager::channel_ready()`].
51
77
pub struct LiquidityManager <
52
- ES : Deref ,
78
+ ES : Deref + Clone ,
53
79
M : Deref ,
54
80
T : Deref ,
55
81
F : Deref ,
56
82
R : Deref ,
57
83
SP : Deref ,
58
84
L : Deref ,
85
+ Descriptor : SocketDescriptor ,
86
+ RM : Deref ,
87
+ CM : Deref ,
88
+ OM : Deref ,
89
+ CMH : Deref ,
59
90
NS : Deref ,
60
91
C : Deref ,
61
92
> where
@@ -66,13 +97,19 @@ pub struct LiquidityManager<
66
97
R :: Target : Router ,
67
98
SP :: Target : SignerProvider ,
68
99
L :: Target : Logger ,
100
+ RM :: Target : RoutingMessageHandler ,
101
+ CM :: Target : ChannelMessageHandler ,
102
+ OM :: Target : OnionMessageHandler ,
103
+ CMH :: Target : CustomMessageHandler ,
69
104
NS :: Target : NodeSigner ,
70
105
C :: Target : Filter ,
71
106
{
72
107
pending_messages : Arc < Mutex < Vec < ( PublicKey , LSPSMessage ) > > > ,
73
108
pending_events : Arc < EventQueue > ,
74
109
request_id_to_method_map : Mutex < HashMap < String , String > > ,
75
110
lsps0_message_handler : LSPS0MessageHandler < ES > ,
111
+ lsps2_message_handler :
112
+ Option < JITChannelManager < ES , M , T , F , R , SP , Descriptor , L , RM , CM , OM , CMH , NS > > ,
76
113
provider_config : Option < LiquidityProviderConfig > ,
77
114
channel_manager : Arc < ChannelManager < M , T , ES , NS , SP , F , R , L > > ,
78
115
chain_source : Option < C > ,
@@ -81,16 +118,21 @@ pub struct LiquidityManager<
81
118
}
82
119
83
120
impl <
84
- ES : Deref ,
121
+ ES : Deref + Clone ,
85
122
M : Deref ,
86
123
T : Deref ,
87
124
F : Deref ,
88
125
R : Deref ,
89
126
SP : Deref ,
90
127
L : Deref ,
128
+ Descriptor : SocketDescriptor ,
129
+ RM : Deref ,
130
+ CM : Deref ,
131
+ OM : Deref ,
132
+ CMH : Deref ,
91
133
NS : Deref ,
92
134
C : Deref ,
93
- > LiquidityManager < ES , M , T , F , R , SP , L , NS , C >
135
+ > LiquidityManager < ES , M , T , F , R , SP , L , Descriptor , RM , CM , OM , CMH , NS , C >
94
136
where
95
137
ES :: Target : EntropySource ,
96
138
M :: Target : chain:: Watch < <SP :: Target as SignerProvider >:: Signer > ,
@@ -99,10 +141,14 @@ where
99
141
R :: Target : Router ,
100
142
SP :: Target : SignerProvider ,
101
143
L :: Target : Logger ,
144
+ RM :: Target : RoutingMessageHandler ,
145
+ CM :: Target : ChannelMessageHandler ,
146
+ OM :: Target : OnionMessageHandler ,
147
+ CMH :: Target : CustomMessageHandler ,
102
148
NS :: Target : NodeSigner ,
103
149
C :: Target : Filter ,
104
150
{
105
- /// Constructor for the LiquidityManager
151
+ /// Constructor for the [' LiquidityManager']
106
152
///
107
153
/// Sets up the required protocol message handlers based on the given [`LiquidityProviderConfig`].
108
154
pub fn new (
@@ -112,15 +158,29 @@ where
112
158
) -> Self
113
159
where {
114
160
let pending_messages = Arc :: new ( Mutex :: new ( vec ! [ ] ) ) ;
161
+ let pending_events = Arc :: new ( EventQueue :: default ( ) ) ;
115
162
116
163
let lsps0_message_handler =
117
- LSPS0MessageHandler :: new ( entropy_source, vec ! [ ] , Arc :: clone ( & pending_messages) ) ;
164
+ LSPS0MessageHandler :: new ( entropy_source. clone ( ) , vec ! [ ] , Arc :: clone ( & pending_messages) ) ;
165
+
166
+ let lsps2_message_handler = provider_config. as_ref ( ) . and_then ( |config| {
167
+ config. jit_channels . as_ref ( ) . map ( |jit_channels_config| {
168
+ JITChannelManager :: new (
169
+ entropy_source. clone ( ) ,
170
+ jit_channels_config. promise_secret ,
171
+ Arc :: clone ( & pending_messages) ,
172
+ Arc :: clone ( & pending_events) ,
173
+ Arc :: clone ( & channel_manager) ,
174
+ )
175
+ } )
176
+ } ) ;
118
177
119
178
Self {
120
179
pending_messages,
121
- pending_events : Arc :: new ( EventQueue :: default ( ) ) ,
180
+ pending_events,
122
181
request_id_to_method_map : Mutex :: new ( HashMap :: new ( ) ) ,
123
182
lsps0_message_handler,
183
+ lsps2_message_handler,
124
184
provider_config,
125
185
channel_manager,
126
186
chain_source,
@@ -173,16 +233,22 @@ where {
173
233
}
174
234
175
235
impl <
176
- ES : Deref ,
236
+ ES : Deref + Clone ,
177
237
M : Deref ,
178
238
T : Deref ,
179
239
F : Deref ,
180
240
R : Deref ,
181
241
SP : Deref ,
182
242
L : Deref ,
243
+ Descriptor : SocketDescriptor ,
244
+ RM : Deref ,
245
+ CM : Deref ,
246
+ OM : Deref ,
247
+ CMH : Deref ,
183
248
NS : Deref ,
184
249
C : Deref ,
185
- > CustomMessageReader for LiquidityManager < ES , M , T , F , R , SP , L , NS , C >
250
+ > CustomMessageReader
251
+ for LiquidityManager < ES , M , T , F , R , SP , L , Descriptor , RM , CM , OM , CMH , NS , C >
186
252
where
187
253
ES :: Target : EntropySource ,
188
254
M :: Target : chain:: Watch < <SP :: Target as SignerProvider >:: Signer > ,
@@ -191,6 +257,10 @@ where
191
257
R :: Target : Router ,
192
258
SP :: Target : SignerProvider ,
193
259
L :: Target : Logger ,
260
+ RM :: Target : RoutingMessageHandler ,
261
+ CM :: Target : ChannelMessageHandler ,
262
+ OM :: Target : OnionMessageHandler ,
263
+ CMH :: Target : CustomMessageHandler ,
194
264
NS :: Target : NodeSigner ,
195
265
C :: Target : Filter ,
196
266
{
@@ -207,16 +277,22 @@ where
207
277
}
208
278
209
279
impl <
210
- ES : Deref ,
280
+ ES : Deref + Clone ,
211
281
M : Deref ,
212
282
T : Deref ,
213
283
F : Deref ,
214
284
R : Deref ,
215
285
SP : Deref ,
216
286
L : Deref ,
287
+ Descriptor : SocketDescriptor ,
288
+ RM : Deref ,
289
+ CM : Deref ,
290
+ OM : Deref ,
291
+ CMH : Deref ,
217
292
NS : Deref ,
218
293
C : Deref ,
219
- > CustomMessageHandler for LiquidityManager < ES , M , T , F , R , SP , L , NS , C >
294
+ > CustomMessageHandler
295
+ for LiquidityManager < ES , M , T , F , R , SP , L , Descriptor , RM , CM , OM , CMH , NS , C >
220
296
where
221
297
ES :: Target : EntropySource ,
222
298
M :: Target : chain:: Watch < <SP :: Target as SignerProvider >:: Signer > ,
@@ -225,6 +301,10 @@ where
225
301
R :: Target : Router ,
226
302
SP :: Target : SignerProvider ,
227
303
L :: Target : Logger ,
304
+ RM :: Target : RoutingMessageHandler ,
305
+ CM :: Target : ChannelMessageHandler ,
306
+ OM :: Target : OnionMessageHandler ,
307
+ CMH :: Target : CustomMessageHandler ,
228
308
NS :: Target : NodeSigner ,
229
309
C :: Target : Filter ,
230
310
{
@@ -282,16 +362,21 @@ where
282
362
}
283
363
284
364
impl <
285
- ES : Deref ,
365
+ ES : Deref + Clone ,
286
366
M : Deref ,
287
367
T : Deref ,
288
368
F : Deref ,
289
369
R : Deref ,
290
370
SP : Deref ,
291
371
L : Deref ,
372
+ Descriptor : SocketDescriptor ,
373
+ RM : Deref ,
374
+ CM : Deref ,
375
+ OM : Deref ,
376
+ CMH : Deref ,
292
377
NS : Deref ,
293
378
C : Deref ,
294
- > Listen for LiquidityManager < ES , M , T , F , R , SP , L , NS , C >
379
+ > Listen for LiquidityManager < ES , M , T , F , R , SP , L , Descriptor , RM , CM , OM , CMH , NS , C >
295
380
where
296
381
ES :: Target : EntropySource ,
297
382
M :: Target : chain:: Watch < <SP :: Target as SignerProvider >:: Signer > ,
@@ -300,6 +385,10 @@ where
300
385
R :: Target : Router ,
301
386
SP :: Target : SignerProvider ,
302
387
L :: Target : Logger ,
388
+ RM :: Target : RoutingMessageHandler ,
389
+ CM :: Target : ChannelMessageHandler ,
390
+ OM :: Target : OnionMessageHandler ,
391
+ CMH :: Target : CustomMessageHandler ,
303
392
NS :: Target : NodeSigner ,
304
393
C :: Target : Filter ,
305
394
{
@@ -337,16 +426,21 @@ where
337
426
}
338
427
339
428
impl <
340
- ES : Deref ,
429
+ ES : Deref + Clone ,
341
430
M : Deref ,
342
431
T : Deref ,
343
432
F : Deref ,
344
433
R : Deref ,
345
434
SP : Deref ,
346
435
L : Deref ,
436
+ Descriptor : SocketDescriptor ,
437
+ RM : Deref ,
438
+ CM : Deref ,
439
+ OM : Deref ,
440
+ CMH : Deref ,
347
441
NS : Deref ,
348
442
C : Deref ,
349
- > Confirm for LiquidityManager < ES , M , T , F , R , SP , L , NS , C >
443
+ > Confirm for LiquidityManager < ES , M , T , F , R , SP , L , Descriptor , RM , CM , OM , CMH , NS , C >
350
444
where
351
445
ES :: Target : EntropySource ,
352
446
M :: Target : chain:: Watch < <SP :: Target as SignerProvider >:: Signer > ,
@@ -355,6 +449,10 @@ where
355
449
R :: Target : Router ,
356
450
SP :: Target : SignerProvider ,
357
451
L :: Target : Logger ,
452
+ RM :: Target : RoutingMessageHandler ,
453
+ CM :: Target : ChannelMessageHandler ,
454
+ OM :: Target : OnionMessageHandler ,
455
+ CMH :: Target : CustomMessageHandler ,
358
456
NS :: Target : NodeSigner ,
359
457
C :: Target : Filter ,
360
458
{
0 commit comments