Skip to content

Commit 5f82532

Browse files
fixup: Add NodeSigner to LiquidityManager to pass it to LSPS5/service
Also use NodeSigner in the service to sign notification instead of custom signing key
1 parent e09b91c commit 5f82532

File tree

3 files changed

+97
-41
lines changed

3 files changed

+97
-41
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,7 @@ impl<
239239
G,
240240
&'a (dyn UtxoLookup + Send + Sync),
241241
L,
242-
>
243-
where
242+
> where
244243
L::Target: Logger,
245244
{
246245
/// Initializes a new [`GossipSync::Rapid`] variant.
@@ -257,8 +256,7 @@ impl<'a, L: Deref>
257256
&'a NetworkGraph<L>,
258257
&'a (dyn UtxoLookup + Send + Sync),
259258
L,
260-
>
261-
where
259+
> where
262260
L::Target: Logger,
263261
{
264262
/// Initializes a new [`GossipSync::None`] variant.
@@ -687,7 +685,7 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput};
687685
/// # type P2PGossipSync<UL> = lightning::routing::gossip::P2PGossipSync<Arc<NetworkGraph>, Arc<UL>, Arc<Logger>>;
688686
/// # type ChannelManager<B, F, FE> = lightning::ln::channelmanager::SimpleArcChannelManager<ChainMonitor<B, F, FE>, B, FE, Logger>;
689687
/// # type OnionMessenger<B, F, FE> = lightning::onion_message::messenger::OnionMessenger<Arc<lightning::sign::KeysManager>, Arc<lightning::sign::KeysManager>, Arc<Logger>, Arc<ChannelManager<B, F, FE>>, Arc<lightning::onion_message::messenger::DefaultMessageRouter<Arc<NetworkGraph>, Arc<Logger>, Arc<lightning::sign::KeysManager>>>, Arc<ChannelManager<B, F, FE>>, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler, lightning::ln::peer_handler::IgnoringMessageHandler>;
690-
/// # type LiquidityManager<B, F, FE> = lightning_liquidity::LiquidityManager<Arc<lightning::sign::KeysManager>, Arc<ChannelManager<B, F, FE>>, Arc<F>, Arc<DefaultTimeProvider>>;
688+
/// # type LiquidityManager<B, F, FE> = lightning_liquidity::LiquidityManager<Arc<lightning::sign::KeysManager>, Arc<lightning::sign::KeysManager>, Arc<ChannelManager<B, F, FE>>, Arc<F>, Arc<DefaultTimeProvider>>;
691689
/// # type Scorer = RwLock<lightning::routing::scoring::ProbabilisticScorer<Arc<NetworkGraph>, Arc<Logger>>>;
692690
/// # type PeerManager<B, F, FE, UL> = lightning::ln::peer_handler::SimpleArcPeerManager<SocketDescriptor, ChainMonitor<B, F, FE>, B, FE, Arc<UL>, Logger, F, Store>;
693691
/// #
@@ -1307,8 +1305,13 @@ mod tests {
13071305
IgnoringMessageHandler,
13081306
>;
13091307

1310-
type LM =
1311-
LiquidityManager<Arc<KeysManager>, Arc<ChannelManager>, Arc<dyn Filter + Sync + Send>, Arc<DefaultTimeProvider>>;
1308+
type LM = LiquidityManager<
1309+
Arc<KeysManager>,
1310+
Arc<KeysManager>,
1311+
Arc<ChannelManager>,
1312+
Arc<dyn Filter + Sync + Send>,
1313+
Arc<DefaultTimeProvider>,
1314+
>;
13121315

13131316
struct Node {
13141317
node: Arc<ChannelManager>,
@@ -1751,6 +1754,7 @@ mod tests {
17511754
Arc::clone(&keys_manager),
17521755
));
17531756
let liquidity_manager = Arc::new(LiquidityManager::new(
1757+
Arc::clone(&keys_manager),
17541758
Arc::clone(&keys_manager),
17551759
Arc::clone(&keys_manager),
17561760
Arc::clone(&manager),

lightning-liquidity/src/lsps5/service.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ use crate::prelude::hash_map::Entry;
2121
use crate::prelude::*;
2222
use crate::sync::{Arc, Mutex};
2323

24-
use bitcoin::secp256k1::{PublicKey, SecretKey};
24+
use bitcoin::secp256k1::PublicKey;
2525

2626
use lightning::ln::channelmanager::AChannelManager;
2727
use lightning::ln::msgs::{ErrorAction, LightningError};
28+
use lightning::sign::NodeSigner;
2829
use lightning::util::logger::Level;
29-
use lightning::util::message_signing;
3030

3131
use core::ops::Deref;
3232
use core::time::Duration;
@@ -81,8 +81,6 @@ impl TimeProvider for DefaultTimeProvider {
8181
pub struct LSPS5ServiceConfig {
8282
/// Maximum number of webhooks allowed per client.
8383
pub max_webhooks_per_client: u32,
84-
/// Signing key for LSP notifications.
85-
pub signing_key: SecretKey,
8684
/// Minimum time between sending the same notification type in hours (default: 24)
8785
pub notification_cooldown_hours: Duration,
8886
}
@@ -122,9 +120,10 @@ pub struct LSPS5ServiceConfig {
122120
/// [`LSPS5ServiceEvent::SendWebhookNotification`]: super::event::LSPS5ServiceEvent::SendWebhookNotification
123121
/// [`app_name`]: super::msgs::LSPS5AppName
124122
/// [`lsps5.webhook_registered`]: super::msgs::WebhookNotificationMethod::LSPS5WebhookRegistered
125-
pub struct LSPS5ServiceHandler<CM: Deref, TP: Deref>
123+
pub struct LSPS5ServiceHandler<CM: Deref, NS: Deref, TP: Deref>
126124
where
127125
CM::Target: AChannelManager,
126+
NS::Target: NodeSigner,
128127
TP::Target: TimeProvider,
129128
{
130129
config: LSPS5ServiceConfig,
@@ -133,18 +132,20 @@ where
133132
pending_messages: Arc<MessageQueue>,
134133
time_provider: TP,
135134
channel_manager: CM,
135+
node_signer: NS,
136136
last_pruning: Mutex<Option<LSPSDateTime>>,
137137
}
138138

139-
impl<CM: Deref, TP: Deref> LSPS5ServiceHandler<CM, TP>
139+
impl<CM: Deref, NS: Deref, TP: Deref> LSPS5ServiceHandler<CM, NS, TP>
140140
where
141141
CM::Target: AChannelManager,
142+
NS::Target: NodeSigner,
142143
TP::Target: TimeProvider,
143144
{
144145
/// Constructs a `LSPS5ServiceHandler` using the given time provider.
145146
pub(crate) fn new_with_time_provider(
146147
event_queue: Arc<EventQueue>, pending_messages: Arc<MessageQueue>, channel_manager: CM,
147-
config: LSPS5ServiceConfig, time_provider: TP,
148+
node_signer: NS, config: LSPS5ServiceConfig, time_provider: TP,
148149
) -> Self {
149150
assert!(config.max_webhooks_per_client > 0, "`max_webhooks_per_client` must be > 0");
150151
Self {
@@ -154,6 +155,7 @@ where
154155
pending_messages,
155156
time_provider,
156157
channel_manager,
158+
node_signer,
157159
last_pruning: Mutex::new(None),
158160
}
159161
}
@@ -468,7 +470,9 @@ where
468470
notification_json
469471
);
470472

471-
message_signing::sign(message.as_bytes(), &self.config.signing_key)
473+
self.node_signer
474+
.sign_message(message.as_bytes())
475+
.map_err(|_| LSPS5ProtocolError::UnknownError)
472476
}
473477

474478
fn prune_stale_webhooks(&self) {
@@ -500,9 +504,10 @@ where
500504
}
501505
}
502506

503-
impl<CM: Deref, TP: Deref> LSPSProtocolMessageHandler for LSPS5ServiceHandler<CM, TP>
507+
impl<CM: Deref, NS: Deref, TP: Deref> LSPSProtocolMessageHandler for LSPS5ServiceHandler<CM, NS, TP>
504508
where
505509
CM::Target: AChannelManager,
510+
NS::Target: NodeSigner,
506511
TP::Target: TimeProvider,
507512
{
508513
type ProtocolMessage = LSPS5Message;

lightning-liquidity/src/manager.rs

Lines changed: 72 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use lightning::ln::channelmanager::{AChannelManager, ChainParameters};
3333
use lightning::ln::msgs::{ErrorAction, LightningError};
3434
use lightning::ln::peer_handler::CustomMessageHandler;
3535
use lightning::ln::wire::CustomMessageReader;
36-
use lightning::sign::EntropySource;
36+
use lightning::sign::{EntropySource, NodeSigner};
3737
use lightning::util::logger::Level;
3838
use lightning::util::ser::{LengthLimitedRead, LengthReadable};
3939
use lightning::util::wakers::Future;
@@ -86,6 +86,10 @@ pub trait ALiquidityManager {
8686
type EntropySource: EntropySource + ?Sized;
8787
/// A type that may be dereferenced to [`Self::EntropySource`].
8888
type ES: Deref<Target = Self::EntropySource> + Clone;
89+
/// A type implementing [`NodeSigner`]
90+
type NodeSigner: NodeSigner + ?Sized;
91+
/// A type that may be dereferenced to [`Self::NodeSigner`].
92+
type NS: Deref<Target = Self::NodeSigner> + Clone;
8993
/// A type implementing [`AChannelManager`]
9094
type AChannelManager: AChannelManager + ?Sized;
9195
/// A type that may be dereferenced to [`Self::AChannelManager`].
@@ -99,26 +103,34 @@ pub trait ALiquidityManager {
99103
/// A type that may be dereferenced to [`Self::TimeProvider`].
100104
type TP: Deref<Target = Self::TimeProvider> + Clone;
101105
/// Returns a reference to the actual [`LiquidityManager`] object.
102-
fn get_lm(&self) -> &LiquidityManager<Self::ES, Self::CM, Self::C, Self::TP>;
106+
fn get_lm(&self) -> &LiquidityManager<Self::ES, Self::NS, Self::CM, Self::C, Self::TP>;
103107
}
104108

105-
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone> ALiquidityManager
106-
for LiquidityManager<ES, CM, C, TP>
109+
impl<
110+
ES: Deref + Clone,
111+
NS: Deref + Clone,
112+
CM: Deref + Clone,
113+
C: Deref + Clone,
114+
TP: Deref + Clone,
115+
> ALiquidityManager for LiquidityManager<ES, NS, CM, C, TP>
107116
where
108117
ES::Target: EntropySource,
118+
NS::Target: NodeSigner,
109119
CM::Target: AChannelManager,
110120
C::Target: Filter,
111121
TP::Target: TimeProvider,
112122
{
113123
type EntropySource = ES::Target;
114124
type ES = ES;
125+
type NodeSigner = NS::Target;
126+
type NS = NS;
115127
type AChannelManager = CM::Target;
116128
type CM = CM;
117129
type Filter = C::Target;
118130
type C = C;
119131
type TimeProvider = TP::Target;
120132
type TP = TP;
121-
fn get_lm(&self) -> &LiquidityManager<ES, CM, C, TP> {
133+
fn get_lm(&self) -> &LiquidityManager<ES, NS, CM, C, TP> {
122134
self
123135
}
124136
}
@@ -144,11 +156,13 @@ where
144156
/// [`Event::PaymentForwarded`]: lightning::events::Event::PaymentForwarded
145157
pub struct LiquidityManager<
146158
ES: Deref + Clone,
159+
NS: Deref + Clone,
147160
CM: Deref + Clone,
148161
C: Deref + Clone,
149162
TP: Deref + Clone,
150163
> where
151164
ES::Target: EntropySource,
165+
NS::Target: NodeSigner,
152166
CM::Target: AChannelManager,
153167
C::Target: Filter,
154168
TP::Target: TimeProvider,
@@ -165,7 +179,7 @@ pub struct LiquidityManager<
165179
lsps1_client_handler: Option<LSPS1ClientHandler<ES>>,
166180
lsps2_service_handler: Option<LSPS2ServiceHandler<CM>>,
167181
lsps2_client_handler: Option<LSPS2ClientHandler<ES>>,
168-
lsps5_service_handler: Option<LSPS5ServiceHandler<CM, TP>>,
182+
lsps5_service_handler: Option<LSPS5ServiceHandler<CM, NS, TP>>,
169183
lsps5_client_handler: Option<LSPS5ClientHandler<ES, TP>>,
170184
service_config: Option<LiquidityServiceConfig>,
171185
_client_config: Option<LiquidityClientConfig>,
@@ -174,22 +188,24 @@ pub struct LiquidityManager<
174188
}
175189

176190
#[cfg(feature = "time")]
177-
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone>
178-
LiquidityManager<ES, CM, C, Arc<DefaultTimeProvider>>
191+
impl<ES: Deref + Clone, NS: Deref + Clone, CM: Deref + Clone, C: Deref + Clone>
192+
LiquidityManager<ES, NS, CM, C, Arc<DefaultTimeProvider>>
179193
where
180194
ES::Target: EntropySource,
195+
NS::Target: NodeSigner,
181196
CM::Target: AChannelManager,
182197
C::Target: Filter,
183198
{
184199
/// Constructor for the [`LiquidityManager`] using the default system clock
185200
pub fn new(
186-
entropy_source: ES, channel_manager: CM, chain_source: Option<C>,
201+
entropy_source: ES, node_signer: NS, channel_manager: CM, chain_source: Option<C>,
187202
chain_params: Option<ChainParameters>, service_config: Option<LiquidityServiceConfig>,
188203
client_config: Option<LiquidityClientConfig>,
189204
) -> Self {
190205
let time_provider = Arc::new(DefaultTimeProvider);
191206
Self::new_with_custom_time_provider(
192207
entropy_source,
208+
node_signer,
193209
channel_manager,
194210
chain_source,
195211
chain_params,
@@ -200,10 +216,16 @@ where
200216
}
201217
}
202218

203-
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone>
204-
LiquidityManager<ES, CM, C, TP>
219+
impl<
220+
ES: Deref + Clone,
221+
NS: Deref + Clone,
222+
CM: Deref + Clone,
223+
C: Deref + Clone,
224+
TP: Deref + Clone,
225+
> LiquidityManager<ES, NS, CM, C, TP>
205226
where
206227
ES::Target: EntropySource,
228+
NS::Target: NodeSigner,
207229
CM::Target: AChannelManager,
208230
C::Target: Filter,
209231
TP::Target: TimeProvider,
@@ -215,7 +237,7 @@ where
215237
/// Sets up the required protocol message handlers based on the given
216238
/// [`LiquidityClientConfig`] and [`LiquidityServiceConfig`].
217239
pub fn new_with_custom_time_provider(
218-
entropy_source: ES, channel_manager: CM, chain_source: Option<C>,
240+
entropy_source: ES, node_signer: NS, channel_manager: CM, chain_source: Option<C>,
219241
chain_params: Option<ChainParameters>, service_config: Option<LiquidityServiceConfig>,
220242
client_config: Option<LiquidityClientConfig>, time_provider: TP,
221243
) -> Self {
@@ -266,18 +288,19 @@ where
266288
let lsps5_service_handler = service_config.as_ref().and_then(|config| {
267289
config.lsps5_service_config.as_ref().map(|config| {
268290
if let Some(number) =
269-
<LSPS5ServiceHandler<CM, TP> as LSPSProtocolMessageHandler>::PROTOCOL_NUMBER
291+
<LSPS5ServiceHandler<CM, NS, TP> as LSPSProtocolMessageHandler>::PROTOCOL_NUMBER
270292
{
271293
supported_protocols.push(number);
272294
}
273295

274-
return LSPS5ServiceHandler::new_with_time_provider(
296+
LSPS5ServiceHandler::new_with_time_provider(
275297
Arc::clone(&pending_events),
276298
Arc::clone(&pending_messages),
277299
channel_manager.clone(),
300+
node_signer,
278301
config.clone(),
279-
time_provider,
280-
);
302+
time_provider.clone(),
303+
)
281304
})
282305
});
283306

@@ -394,7 +417,7 @@ where
394417
/// Returns a reference to the LSPS5 server-side handler.
395418
///
396419
/// The returned hendler allows to initiate the LSPS5 service-side flow.
397-
pub fn lsps5_service_handler(&self) -> Option<&LSPS5ServiceHandler<CM, TP>> {
420+
pub fn lsps5_service_handler(&self) -> Option<&LSPS5ServiceHandler<CM, NS, TP>> {
398421
self.lsps5_service_handler.as_ref()
399422
}
400423

@@ -548,10 +571,16 @@ where
548571
}
549572
}
550573

551-
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone> CustomMessageReader
552-
for LiquidityManager<ES, CM, C, TP>
574+
impl<
575+
ES: Deref + Clone,
576+
NS: Deref + Clone,
577+
CM: Deref + Clone,
578+
C: Deref + Clone,
579+
TP: Deref + Clone,
580+
> CustomMessageReader for LiquidityManager<ES, NS, CM, C, TP>
553581
where
554582
ES::Target: EntropySource,
583+
NS::Target: NodeSigner,
555584
CM::Target: AChannelManager,
556585
C::Target: Filter,
557586
TP::Target: TimeProvider,
@@ -570,10 +599,16 @@ where
570599
}
571600
}
572601

573-
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone> CustomMessageHandler
574-
for LiquidityManager<ES, CM, C, TP>
602+
impl<
603+
ES: Deref + Clone,
604+
NS: Deref + Clone,
605+
CM: Deref + Clone,
606+
C: Deref + Clone,
607+
TP: Deref + Clone,
608+
> CustomMessageHandler for LiquidityManager<ES, NS, CM, C, TP>
575609
where
576610
ES::Target: EntropySource,
611+
NS::Target: NodeSigner,
577612
CM::Target: AChannelManager,
578613
C::Target: Filter,
579614
TP::Target: TimeProvider,
@@ -683,10 +718,16 @@ where
683718
}
684719
}
685720

686-
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone> Listen
687-
for LiquidityManager<ES, CM, C, TP>
721+
impl<
722+
ES: Deref + Clone,
723+
NS: Deref + Clone,
724+
CM: Deref + Clone,
725+
C: Deref + Clone,
726+
TP: Deref + Clone,
727+
> Listen for LiquidityManager<ES, NS, CM, C, TP>
688728
where
689729
ES::Target: EntropySource,
730+
NS::Target: NodeSigner,
690731
CM::Target: AChannelManager,
691732
C::Target: Filter,
692733
TP::Target: TimeProvider,
@@ -722,10 +763,16 @@ where
722763
}
723764
}
724765

725-
impl<ES: Deref + Clone, CM: Deref + Clone, C: Deref + Clone, TP: Deref + Clone> Confirm
726-
for LiquidityManager<ES, CM, C, TP>
766+
impl<
767+
ES: Deref + Clone,
768+
NS: Deref + Clone,
769+
CM: Deref + Clone,
770+
C: Deref + Clone,
771+
TP: Deref + Clone,
772+
> Confirm for LiquidityManager<ES, NS, CM, C, TP>
727773
where
728774
ES::Target: EntropySource,
775+
NS::Target: NodeSigner,
729776
CM::Target: AChannelManager,
730777
C::Target: Filter,
731778
TP::Target: TimeProvider,

0 commit comments

Comments
 (0)