Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Commit 028539c

Browse files
setup LSPS2 message handler in LiquidityManager
1 parent 12c00ba commit 028539c

File tree

1 file changed

+115
-17
lines changed

1 file changed

+115
-17
lines changed

src/transport/message_handler.rs

Lines changed: 115 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
use crate::events::{Event, EventQueue};
2+
use crate::jit_channel::channel_manager::JITChannelManager;
23
use crate::transport::msgs::{LSPSMessage, RawLSPSMessage, LSPS_MESSAGE_TYPE_ID};
34
use crate::transport::protocol::LSPS0MessageHandler;
45

56
use lightning::chain::chaininterface::{BroadcasterInterface, FeeEstimator};
67
use lightning::chain::{self, BestBlock, Confirm, Filter, Listen};
78
use lightning::ln::channelmanager::{ChainParameters, ChannelManager};
89
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};
1114
use lightning::ln::wire::CustomMessageReader;
1215
use lightning::routing::router::Router;
1316
use lightning::sign::{EntropySource, NodeSigner, SignerProvider};
@@ -42,20 +45,48 @@ pub(crate) trait ProtocolMessageHandler {
4245
///
4346
/// Allows end-user to configure options when using the [`LiquidityManager`]
4447
/// 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+
}
4662

4763
/// The main interface into LSP functionality.
4864
///
4965
/// Should be used as a [`CustomMessageHandler`] for your
5066
/// [`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()`].
5177
pub struct LiquidityManager<
52-
ES: Deref,
78+
ES: Deref + Clone,
5379
M: Deref,
5480
T: Deref,
5581
F: Deref,
5682
R: Deref,
5783
SP: Deref,
5884
L: Deref,
85+
Descriptor: SocketDescriptor,
86+
RM: Deref,
87+
CM: Deref,
88+
OM: Deref,
89+
CMH: Deref,
5990
NS: Deref,
6091
C: Deref,
6192
> where
@@ -66,13 +97,19 @@ pub struct LiquidityManager<
6697
R::Target: Router,
6798
SP::Target: SignerProvider,
6899
L::Target: Logger,
100+
RM::Target: RoutingMessageHandler,
101+
CM::Target: ChannelMessageHandler,
102+
OM::Target: OnionMessageHandler,
103+
CMH::Target: CustomMessageHandler,
69104
NS::Target: NodeSigner,
70105
C::Target: Filter,
71106
{
72107
pending_messages: Arc<Mutex<Vec<(PublicKey, LSPSMessage)>>>,
73108
pending_events: Arc<EventQueue>,
74109
request_id_to_method_map: Mutex<HashMap<String, String>>,
75110
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>>,
76113
provider_config: Option<LiquidityProviderConfig>,
77114
channel_manager: Arc<ChannelManager<M, T, ES, NS, SP, F, R, L>>,
78115
chain_source: Option<C>,
@@ -81,16 +118,21 @@ pub struct LiquidityManager<
81118
}
82119

83120
impl<
84-
ES: Deref,
121+
ES: Deref + Clone,
85122
M: Deref,
86123
T: Deref,
87124
F: Deref,
88125
R: Deref,
89126
SP: Deref,
90127
L: Deref,
128+
Descriptor: SocketDescriptor,
129+
RM: Deref,
130+
CM: Deref,
131+
OM: Deref,
132+
CMH: Deref,
91133
NS: Deref,
92134
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>
94136
where
95137
ES::Target: EntropySource,
96138
M::Target: chain::Watch<<SP::Target as SignerProvider>::Signer>,
@@ -99,10 +141,14 @@ where
99141
R::Target: Router,
100142
SP::Target: SignerProvider,
101143
L::Target: Logger,
144+
RM::Target: RoutingMessageHandler,
145+
CM::Target: ChannelMessageHandler,
146+
OM::Target: OnionMessageHandler,
147+
CMH::Target: CustomMessageHandler,
102148
NS::Target: NodeSigner,
103149
C::Target: Filter,
104150
{
105-
/// Constructor for the LiquidityManager
151+
/// Constructor for the ['LiquidityManager']
106152
///
107153
/// Sets up the required protocol message handlers based on the given [`LiquidityProviderConfig`].
108154
pub fn new(
@@ -112,15 +158,29 @@ where
112158
) -> Self
113159
where {
114160
let pending_messages = Arc::new(Mutex::new(vec![]));
161+
let pending_events = Arc::new(EventQueue::default());
115162

116163
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+
});
118177

119178
Self {
120179
pending_messages,
121-
pending_events: Arc::new(EventQueue::default()),
180+
pending_events,
122181
request_id_to_method_map: Mutex::new(HashMap::new()),
123182
lsps0_message_handler,
183+
lsps2_message_handler,
124184
provider_config,
125185
channel_manager,
126186
chain_source,
@@ -173,16 +233,22 @@ where {
173233
}
174234

175235
impl<
176-
ES: Deref,
236+
ES: Deref + Clone,
177237
M: Deref,
178238
T: Deref,
179239
F: Deref,
180240
R: Deref,
181241
SP: Deref,
182242
L: Deref,
243+
Descriptor: SocketDescriptor,
244+
RM: Deref,
245+
CM: Deref,
246+
OM: Deref,
247+
CMH: Deref,
183248
NS: Deref,
184249
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>
186252
where
187253
ES::Target: EntropySource,
188254
M::Target: chain::Watch<<SP::Target as SignerProvider>::Signer>,
@@ -191,6 +257,10 @@ where
191257
R::Target: Router,
192258
SP::Target: SignerProvider,
193259
L::Target: Logger,
260+
RM::Target: RoutingMessageHandler,
261+
CM::Target: ChannelMessageHandler,
262+
OM::Target: OnionMessageHandler,
263+
CMH::Target: CustomMessageHandler,
194264
NS::Target: NodeSigner,
195265
C::Target: Filter,
196266
{
@@ -207,16 +277,22 @@ where
207277
}
208278

209279
impl<
210-
ES: Deref,
280+
ES: Deref + Clone,
211281
M: Deref,
212282
T: Deref,
213283
F: Deref,
214284
R: Deref,
215285
SP: Deref,
216286
L: Deref,
287+
Descriptor: SocketDescriptor,
288+
RM: Deref,
289+
CM: Deref,
290+
OM: Deref,
291+
CMH: Deref,
217292
NS: Deref,
218293
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>
220296
where
221297
ES::Target: EntropySource,
222298
M::Target: chain::Watch<<SP::Target as SignerProvider>::Signer>,
@@ -225,6 +301,10 @@ where
225301
R::Target: Router,
226302
SP::Target: SignerProvider,
227303
L::Target: Logger,
304+
RM::Target: RoutingMessageHandler,
305+
CM::Target: ChannelMessageHandler,
306+
OM::Target: OnionMessageHandler,
307+
CMH::Target: CustomMessageHandler,
228308
NS::Target: NodeSigner,
229309
C::Target: Filter,
230310
{
@@ -282,16 +362,21 @@ where
282362
}
283363

284364
impl<
285-
ES: Deref,
365+
ES: Deref + Clone,
286366
M: Deref,
287367
T: Deref,
288368
F: Deref,
289369
R: Deref,
290370
SP: Deref,
291371
L: Deref,
372+
Descriptor: SocketDescriptor,
373+
RM: Deref,
374+
CM: Deref,
375+
OM: Deref,
376+
CMH: Deref,
292377
NS: Deref,
293378
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>
295380
where
296381
ES::Target: EntropySource,
297382
M::Target: chain::Watch<<SP::Target as SignerProvider>::Signer>,
@@ -300,6 +385,10 @@ where
300385
R::Target: Router,
301386
SP::Target: SignerProvider,
302387
L::Target: Logger,
388+
RM::Target: RoutingMessageHandler,
389+
CM::Target: ChannelMessageHandler,
390+
OM::Target: OnionMessageHandler,
391+
CMH::Target: CustomMessageHandler,
303392
NS::Target: NodeSigner,
304393
C::Target: Filter,
305394
{
@@ -337,16 +426,21 @@ where
337426
}
338427

339428
impl<
340-
ES: Deref,
429+
ES: Deref + Clone,
341430
M: Deref,
342431
T: Deref,
343432
F: Deref,
344433
R: Deref,
345434
SP: Deref,
346435
L: Deref,
436+
Descriptor: SocketDescriptor,
437+
RM: Deref,
438+
CM: Deref,
439+
OM: Deref,
440+
CMH: Deref,
347441
NS: Deref,
348442
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>
350444
where
351445
ES::Target: EntropySource,
352446
M::Target: chain::Watch<<SP::Target as SignerProvider>::Signer>,
@@ -355,6 +449,10 @@ where
355449
R::Target: Router,
356450
SP::Target: SignerProvider,
357451
L::Target: Logger,
452+
RM::Target: RoutingMessageHandler,
453+
CM::Target: ChannelMessageHandler,
454+
OM::Target: OnionMessageHandler,
455+
CMH::Target: CustomMessageHandler,
358456
NS::Target: NodeSigner,
359457
C::Target: Filter,
360458
{

0 commit comments

Comments
 (0)