diff --git a/lightning-background-processor/src/lib.rs b/lightning-background-processor/src/lib.rs index ad1592b7722..28c7e4b91a3 100644 --- a/lightning-background-processor/src/lib.rs +++ b/lightning-background-processor/src/lib.rs @@ -735,7 +735,7 @@ use futures_util::{dummy_waker, OptionalSelector, Selector, SelectorOutput}; /// # use lightning_background_processor::{process_events_async, GossipSync}; /// # use core::future::Future; /// # use core::pin::Pin; -/// # use lightning_liquidity::lsps5::service::TimeProvider; +/// # use lightning_liquidity::utils::time::TimeProvider; /// # struct Logger {} /// # impl lightning::util::logger::Logger for Logger { /// # fn log(&self, _record: lightning::util::logger::Record) {} @@ -1401,7 +1401,7 @@ mod tests { use lightning::util::sweep::{OutputSpendStatus, OutputSweeperSync, PRUNE_DELAY_BLOCKS}; use lightning::util::test_utils; use lightning::{get_event, get_event_msg}; - use lightning_liquidity::lsps5::service::DefaultTimeProvider; + use lightning_liquidity::utils::time::DefaultTimeProvider; use lightning_liquidity::LiquidityManager; use lightning_persister::fs_store::FilesystemStore; use lightning_rapid_gossip_sync::RapidGossipSync; diff --git a/lightning-liquidity/src/lib.rs b/lightning-liquidity/src/lib.rs index 34fc307f55a..6c26b21f3b2 100644 --- a/lightning-liquidity/src/lib.rs +++ b/lightning-liquidity/src/lib.rs @@ -70,7 +70,7 @@ pub mod message_queue; mod sync; #[cfg(test)] mod tests; -mod utils; +pub mod utils; pub use manager::{ ALiquidityManager, LiquidityClientConfig, LiquidityManager, LiquidityServiceConfig, diff --git a/lightning-liquidity/src/lsps5/client.rs b/lightning-liquidity/src/lsps5/client.rs index 1f6c1a9be3c..86983b144b2 100644 --- a/lightning-liquidity/src/lsps5/client.rs +++ b/lightning-liquidity/src/lsps5/client.rs @@ -22,9 +22,9 @@ use crate::message_queue::MessageQueue; use crate::prelude::{new_hash_map, HashMap}; use crate::sync::{Arc, Mutex, RwLock}; use crate::utils::generate_request_id; +use crate::utils::time::TimeProvider; use super::msgs::{LSPS5AppName, LSPS5Error, LSPS5WebhookUrl}; -use super::service::TimeProvider; use bitcoin::secp256k1::PublicKey; @@ -439,9 +439,8 @@ mod tests { use super::*; use crate::{ - lsps0::ser::LSPSRequestId, - lsps5::{msgs::SetWebhookResponse, service::DefaultTimeProvider}, - tests::utils::TestEntropy, + lsps0::ser::LSPSRequestId, lsps5::msgs::SetWebhookResponse, tests::utils::TestEntropy, + utils::time::DefaultTimeProvider, }; use bitcoin::{key::Secp256k1, secp256k1::SecretKey}; diff --git a/lightning-liquidity/src/lsps5/service.rs b/lightning-liquidity/src/lsps5/service.rs index ef9828eca80..ed0e3bbde42 100644 --- a/lightning-liquidity/src/lsps5/service.rs +++ b/lightning-liquidity/src/lsps5/service.rs @@ -20,6 +20,7 @@ use crate::message_queue::MessageQueue; use crate::prelude::hash_map::Entry; use crate::prelude::*; use crate::sync::{Arc, Mutex}; +use crate::utils::time::TimeProvider; use bitcoin::secp256k1::PublicKey; @@ -54,28 +55,6 @@ struct StoredWebhook { last_notification_sent: HashMap, } -/// Trait defining a time provider for LSPS5 service. -/// -/// This trait is used to provide the current time for LSPS5 service operations -/// and to convert between timestamps and durations. -pub trait TimeProvider { - /// Get the current time as a duration since the Unix epoch. - fn duration_since_epoch(&self) -> Duration; -} - -/// Default time provider using the system clock. -#[derive(Clone, Debug)] -#[cfg(feature = "time")] -pub struct DefaultTimeProvider; - -#[cfg(feature = "time")] -impl TimeProvider for DefaultTimeProvider { - fn duration_since_epoch(&self) -> Duration { - use std::time::{SystemTime, UNIX_EPOCH}; - SystemTime::now().duration_since(UNIX_EPOCH).expect("system time before Unix epoch") - } -} - /// Server-side configuration options for LSPS5 Webhook Registration. #[derive(Clone, Debug)] pub struct LSPS5ServiceConfig { diff --git a/lightning-liquidity/src/lsps5/validator.rs b/lightning-liquidity/src/lsps5/validator.rs index e5a690404e7..97c8560eb63 100644 --- a/lightning-liquidity/src/lsps5/validator.rs +++ b/lightning-liquidity/src/lsps5/validator.rs @@ -10,12 +10,12 @@ //! LSPS5 Validator use super::msgs::LSPS5ClientError; -use super::service::TimeProvider; use crate::alloc::string::ToString; use crate::lsps0::ser::LSPSDateTime; use crate::lsps5::msgs::WebhookNotification; use crate::sync::Mutex; +use crate::utils::time::TimeProvider; use lightning::util::message_signing; diff --git a/lightning-liquidity/src/manager.rs b/lightning-liquidity/src/manager.rs index f0d24197701..e40c26debcf 100644 --- a/lightning-liquidity/src/manager.rs +++ b/lightning-liquidity/src/manager.rs @@ -12,9 +12,7 @@ use crate::lsps0::ser::{ use crate::lsps0::service::LSPS0ServiceHandler; use crate::lsps5::client::{LSPS5ClientConfig, LSPS5ClientHandler}; use crate::lsps5::msgs::LSPS5Message; -#[cfg(feature = "time")] -use crate::lsps5::service::DefaultTimeProvider; -use crate::lsps5::service::{LSPS5ServiceConfig, LSPS5ServiceHandler, TimeProvider}; +use crate::lsps5::service::{LSPS5ServiceConfig, LSPS5ServiceHandler}; use crate::message_queue::MessageQueue; use crate::lsps1::client::{LSPS1ClientConfig, LSPS1ClientHandler}; @@ -27,6 +25,9 @@ use crate::lsps2::msgs::LSPS2Message; use crate::lsps2::service::{LSPS2ServiceConfig, LSPS2ServiceHandler}; use crate::prelude::{new_hash_map, new_hash_set, HashMap, HashSet}; use crate::sync::{Arc, Mutex, RwLock}; +#[cfg(feature = "time")] +use crate::utils::time::DefaultTimeProvider; +use crate::utils::time::TimeProvider; use lightning::chain::{self, BestBlock, Confirm, Filter, Listen}; use lightning::ln::channelmanager::{AChannelManager, ChainParameters}; diff --git a/lightning-liquidity/src/utils.rs b/lightning-liquidity/src/utils/mod.rs similarity index 88% rename from lightning-liquidity/src/utils.rs rename to lightning-liquidity/src/utils/mod.rs index ab4c242d6f0..21cd59d2b6d 100644 --- a/lightning-liquidity/src/utils.rs +++ b/lightning-liquidity/src/utils/mod.rs @@ -1,3 +1,5 @@ +//! Utilities for LSPS5 service. + use alloc::string::String; use core::{fmt::Write, ops::Deref}; @@ -5,6 +7,7 @@ use lightning::sign::EntropySource; use crate::lsps0::ser::LSPSRequestId; +/// Converts a human-readable string representation of a short channel ID (SCID) pub fn scid_from_human_readable_string(human_readable_scid: &str) -> Result { let mut parts = human_readable_scid.split('x'); @@ -24,6 +27,7 @@ where } #[inline] +/// Converts a byte slice to a hexadecimal string representation. pub fn hex_str(value: &[u8]) -> String { let mut res = String::with_capacity(2 * value.len()); for v in value { @@ -52,3 +56,5 @@ mod tests { assert_eq!(vout_from_scid(scid), vout); } } + +pub mod time; diff --git a/lightning-liquidity/src/utils/time.rs b/lightning-liquidity/src/utils/time.rs new file mode 100644 index 00000000000..5f1622b4fe6 --- /dev/null +++ b/lightning-liquidity/src/utils/time.rs @@ -0,0 +1,25 @@ +//! Utilities for time handling in LSPS5 service. + +use core::time::Duration; + +/// Trait defining a time provider for LSPS5 service. +/// +/// This trait is used to provide the current time for LSPS5 service operations +/// and to convert between timestamps and durations. +pub trait TimeProvider { + /// Get the current time as a duration since the Unix epoch. + fn duration_since_epoch(&self) -> Duration; +} + +/// Default time provider using the system clock. +#[derive(Clone, Debug)] +#[cfg(feature = "time")] +pub struct DefaultTimeProvider; + +#[cfg(feature = "time")] +impl TimeProvider for DefaultTimeProvider { + fn duration_since_epoch(&self) -> Duration { + use std::time::{SystemTime, UNIX_EPOCH}; + SystemTime::now().duration_since(UNIX_EPOCH).expect("system time before Unix epoch") + } +} diff --git a/lightning-liquidity/tests/common/mod.rs b/lightning-liquidity/tests/common/mod.rs index 344b8bfc725..013378f2cb0 100644 --- a/lightning-liquidity/tests/common/mod.rs +++ b/lightning-liquidity/tests/common/mod.rs @@ -1,14 +1,15 @@ #![cfg(test)] -use bitcoin::Network; -use lightning::ln::channelmanager::ChainParameters; -use lightning_liquidity::lsps5::service::TimeProvider; +use lightning_liquidity::utils::time::TimeProvider; use lightning_liquidity::{LiquidityClientConfig, LiquidityManager, LiquidityServiceConfig}; use lightning::chain::{BestBlock, Filter}; +use lightning::ln::channelmanager::ChainParameters; use lightning::ln::functional_test_utils::{Node, TestChannelManager}; use lightning::util::test_utils::TestKeysInterface; +use bitcoin::Network; + use core::ops::Deref; use std::sync::Arc; diff --git a/lightning-liquidity/tests/lsps0_integration_tests.rs b/lightning-liquidity/tests/lsps0_integration_tests.rs index 8a67561d8c1..7fd7a7c185f 100644 --- a/lightning-liquidity/tests/lsps0_integration_tests.rs +++ b/lightning-liquidity/tests/lsps0_integration_tests.rs @@ -13,7 +13,8 @@ use lightning_liquidity::lsps1::service::LSPS1ServiceConfig; use lightning_liquidity::lsps2::client::LSPS2ClientConfig; use lightning_liquidity::lsps2::service::LSPS2ServiceConfig; use lightning_liquidity::lsps5::client::LSPS5ClientConfig; -use lightning_liquidity::lsps5::service::{DefaultTimeProvider, LSPS5ServiceConfig}; +use lightning_liquidity::lsps5::service::LSPS5ServiceConfig; +use lightning_liquidity::utils::time::DefaultTimeProvider; use lightning_liquidity::{LiquidityClientConfig, LiquidityServiceConfig}; use lightning::ln::functional_test_utils::{ diff --git a/lightning-liquidity/tests/lsps2_integration_tests.rs b/lightning-liquidity/tests/lsps2_integration_tests.rs index e83f74da798..6ea42e17532 100644 --- a/lightning-liquidity/tests/lsps2_integration_tests.rs +++ b/lightning-liquidity/tests/lsps2_integration_tests.rs @@ -12,7 +12,7 @@ use lightning_liquidity::lsps2::event::LSPS2ServiceEvent; use lightning_liquidity::lsps2::msgs::LSPS2RawOpeningFeeParams; use lightning_liquidity::lsps2::service::LSPS2ServiceConfig; use lightning_liquidity::lsps2::utils::is_valid_opening_fee_params; -use lightning_liquidity::lsps5::service::DefaultTimeProvider; +use lightning_liquidity::utils::time::DefaultTimeProvider; use lightning_liquidity::{LiquidityClientConfig, LiquidityServiceConfig}; use lightning::ln::channelmanager::{InterceptId, MIN_FINAL_CLTV_EXPIRY_DELTA}; diff --git a/lightning-liquidity/tests/lsps5_integration_tests.rs b/lightning-liquidity/tests/lsps5_integration_tests.rs index c0bbe4622d8..079bcf4acc5 100644 --- a/lightning-liquidity/tests/lsps5_integration_tests.rs +++ b/lightning-liquidity/tests/lsps5_integration_tests.rs @@ -17,13 +17,14 @@ use lightning_liquidity::lsps5::msgs::{ LSPS5AppName, LSPS5ClientError, LSPS5ProtocolError, LSPS5WebhookUrl, WebhookNotification, WebhookNotificationMethod, }; -use lightning_liquidity::lsps5::service::{DefaultTimeProvider, LSPS5ServiceConfig, TimeProvider}; +use lightning_liquidity::lsps5::service::LSPS5ServiceConfig; use lightning_liquidity::lsps5::service::{ MIN_WEBHOOK_RETENTION_DAYS, PRUNE_STALE_WEBHOOKS_INTERVAL_DAYS, }; use lightning_liquidity::lsps5::validator::{ InMemorySignatureStore, LSPS5Validator, SignatureStorageConfig, }; +use lightning_liquidity::utils::time::{DefaultTimeProvider, TimeProvider}; use lightning_liquidity::{LiquidityClientConfig, LiquidityServiceConfig}; use std::sync::{Arc, RwLock}; use std::time::{Duration, SystemTime, UNIX_EPOCH};