Skip to content

Commit c0e4bf6

Browse files
committed
LSPS1ServiceHandler: Use TimeProvider when creating new orders
Since we by now have the `TimeProvider` trait, we might as well use it in `LSPS1ServiceHandler` instead of requiring the user to provide a `created_at` manually.
1 parent b9906b3 commit c0e4bf6

File tree

3 files changed

+25
-17
lines changed

3 files changed

+25
-17
lines changed

lightning-liquidity/src/lsps1/service.rs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use crate::lsps0::ser::{
3030
use crate::prelude::{new_hash_map, HashMap};
3131
use crate::sync::{Arc, Mutex, RwLock};
3232
use crate::utils;
33+
use crate::utils::time::TimeProvider;
3334

3435
use lightning::ln::channelmanager::AChannelManager;
3536
use lightning::ln::msgs::{ErrorAction, LightningError};
@@ -50,38 +51,44 @@ pub struct LSPS1ServiceConfig {
5051
}
5152

5253
/// The main object allowing to send and receive bLIP-51 / LSPS1 messages.
53-
pub struct LSPS1ServiceHandler<ES: Deref, CM: Deref + Clone, K: Deref + Clone>
54+
pub struct LSPS1ServiceHandler<ES: Deref, CM: Deref + Clone, K: Deref + Clone, TP: Deref + Clone>
5455
where
5556
ES::Target: EntropySource,
5657
CM::Target: AChannelManager,
5758
K::Target: KVStore,
59+
TP::Target: TimeProvider,
5860
{
5961
entropy_source: ES,
6062
_channel_manager: CM,
6163
pending_messages: Arc<MessageQueue>,
6264
pending_events: Arc<EventQueue<K>>,
6365
per_peer_state: RwLock<HashMap<PublicKey, Mutex<PeerState>>>,
66+
time_provider: TP,
6467
config: LSPS1ServiceConfig,
6568
}
6669

67-
impl<ES: Deref, CM: Deref + Clone, K: Deref + Clone> LSPS1ServiceHandler<ES, CM, K>
70+
impl<ES: Deref, CM: Deref + Clone, K: Deref + Clone, TP: Deref + Clone>
71+
LSPS1ServiceHandler<ES, CM, K, TP>
6872
where
6973
ES::Target: EntropySource,
7074
CM::Target: AChannelManager,
7175
ES::Target: EntropySource,
7276
K::Target: KVStore,
77+
TP::Target: TimeProvider,
7378
{
7479
/// Constructs a `LSPS1ServiceHandler`.
7580
pub(crate) fn new(
7681
entropy_source: ES, pending_messages: Arc<MessageQueue>,
77-
pending_events: Arc<EventQueue<K>>, channel_manager: CM, config: LSPS1ServiceConfig,
82+
pending_events: Arc<EventQueue<K>>, channel_manager: CM, time_provider: TP,
83+
config: LSPS1ServiceConfig,
7884
) -> Self {
7985
Self {
8086
entropy_source,
8187
_channel_manager: channel_manager,
8288
pending_messages,
8389
pending_events,
8490
per_peer_state: RwLock::new(new_hash_map()),
91+
time_provider,
8592
config,
8693
}
8794
}
@@ -186,7 +193,7 @@ where
186193
/// [`LSPS1ServiceEvent::RequestForPaymentDetails`]: crate::lsps1::event::LSPS1ServiceEvent::RequestForPaymentDetails
187194
pub fn send_payment_details(
188195
&self, request_id: LSPSRequestId, counterparty_node_id: &PublicKey,
189-
payment_details: LSPS1PaymentInfo, created_at: LSPSDateTime,
196+
payment_details: LSPS1PaymentInfo,
190197
) -> Result<(), APIError> {
191198
let mut message_queue_notifier = self.pending_messages.notifier();
192199

@@ -203,6 +210,9 @@ where
203210
match request {
204211
LSPS1Request::CreateOrder(params) => {
205212
let order_id = self.generate_order_id();
213+
let created_at = LSPSDateTime::new_from_duration_since_epoch(
214+
self.time_provider.duration_since_epoch(),
215+
);
206216
let order = peer_state_lock.new_order(
207217
order_id.clone(),
208218
params.order,
@@ -326,12 +336,13 @@ where
326336
}
327337
}
328338

329-
impl<ES: Deref, CM: Deref + Clone, K: Deref + Clone> LSPSProtocolMessageHandler
330-
for LSPS1ServiceHandler<ES, CM, K>
339+
impl<ES: Deref, CM: Deref + Clone, K: Deref + Clone, TP: Deref + Clone> LSPSProtocolMessageHandler
340+
for LSPS1ServiceHandler<ES, CM, K, TP>
331341
where
332342
ES::Target: EntropySource,
333343
CM::Target: AChannelManager,
334344
K::Target: KVStore,
345+
TP::Target: TimeProvider,
335346
{
336347
type ProtocolMessage = LSPS1Message;
337348
const PROTOCOL_NUMBER: Option<u16> = Some(1);

lightning-liquidity/src/manager.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ pub struct LiquidityManager<
300300
lsps0_client_handler: LSPS0ClientHandler<ES, K>,
301301
lsps0_service_handler: Option<LSPS0ServiceHandler>,
302302
#[cfg(lsps1_service)]
303-
lsps1_service_handler: Option<LSPS1ServiceHandler<ES, CM, K>>,
303+
lsps1_service_handler: Option<LSPS1ServiceHandler<ES, CM, K, TP>>,
304304
lsps1_client_handler: Option<LSPS1ClientHandler<ES, K>>,
305305
lsps2_service_handler: Option<LSPS2ServiceHandler<CM, K, T>>,
306306
lsps2_client_handler: Option<LSPS2ClientHandler<ES, K>>,
@@ -454,7 +454,7 @@ where
454454
kv_store.clone(),
455455
node_signer,
456456
lsps5_service_config.clone(),
457-
time_provider,
457+
time_provider.clone(),
458458
))
459459
} else {
460460
None
@@ -477,7 +477,7 @@ where
477477
#[cfg(lsps1_service)]
478478
let lsps1_service_handler = service_config.as_ref().and_then(|config| {
479479
if let Some(number) =
480-
<LSPS1ServiceHandler<ES, CM, K> as LSPSProtocolMessageHandler>::PROTOCOL_NUMBER
480+
<LSPS1ServiceHandler<ES, CM, K, TP> as LSPSProtocolMessageHandler>::PROTOCOL_NUMBER
481481
{
482482
supported_protocols.push(number);
483483
}
@@ -487,6 +487,7 @@ where
487487
Arc::clone(&pending_messages),
488488
Arc::clone(&pending_events),
489489
channel_manager.clone(),
490+
time_provider,
490491
config.clone(),
491492
)
492493
})
@@ -544,7 +545,7 @@ where
544545

545546
/// Returns a reference to the LSPS1 server-side handler.
546547
#[cfg(lsps1_service)]
547-
pub fn lsps1_service_handler(&self) -> Option<&LSPS1ServiceHandler<ES, CM, K>> {
548+
pub fn lsps1_service_handler(&self) -> Option<&LSPS1ServiceHandler<ES, CM, K, TP>> {
548549
self.lsps1_service_handler.as_ref()
549550
}
550551

@@ -1074,7 +1075,7 @@ where
10741075
#[cfg(lsps1_service)]
10751076
pub fn lsps1_service_handler(
10761077
&self,
1077-
) -> Option<&LSPS1ServiceHandler<ES, CM, KVStoreSyncWrapper<KS>>> {
1078+
) -> Option<&LSPS1ServiceHandler<ES, CM, KVStoreSyncWrapper<KS>, TP>> {
10781079
self.inner.lsps1_service_handler()
10791080
}
10801081

lightning-liquidity/tests/lsps1_integration_tests.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use common::{get_lsps_message, LSPSNodes};
77

88
use lightning::ln::peer_handler::CustomMessageHandler;
99
use lightning_liquidity::events::LiquidityEvent;
10-
use lightning_liquidity::lsps0::ser::LSPSDateTime;
1110
use lightning_liquidity::lsps1::client::LSPS1ClientConfig;
1211
use lightning_liquidity::lsps1::event::LSPS1ClientEvent;
1312
use lightning_liquidity::lsps1::event::LSPS1ServiceEvent;
@@ -24,7 +23,6 @@ use lightning::ln::functional_test_utils::{
2423
};
2524
use lightning::util::test_utils::TestStore;
2625

27-
use std::str::FromStr;
2826
use std::sync::Arc;
2927

3028
use lightning::ln::functional_test_utils::{create_network, Node};
@@ -177,10 +175,8 @@ fn lsps1_happy_path() {
177175
let onchain: LSPS1OnchainPaymentInfo =
178176
serde_json::from_str(json_str).expect("Failed to parse JSON");
179177
let payment_info = LSPS1PaymentInfo { bolt11: None, bolt12: None, onchain: Some(onchain) };
180-
let _now = LSPSDateTime::from_str("2024-01-01T00:00:00Z").expect("Failed to parse date");
181-
182-
let _ = service_handler
183-
.send_payment_details(_create_order_id.clone(), &client_node_id, payment_info.clone(), _now)
178+
service_handler
179+
.send_payment_details(_create_order_id.clone(), &client_node_id, payment_info.clone())
184180
.unwrap();
185181

186182
let create_order_response = get_lsps_message!(service_node, client_node_id);

0 commit comments

Comments
 (0)