From 0f4db0dad71ed66ad2e947e476bf5c09461ab675 Mon Sep 17 00:00:00 2001 From: Elias Rohrer Date: Wed, 13 Aug 2025 13:47:56 +0200 Subject: [PATCH 01/21] Let `LiquidityManager` take a `KVStore` and add `Sync` wrapper We add `KVStore` to `LiquidityManager`, which will be used in the next commits. We also add a `LiquidityManagerSync` wrapper that wraps a the `LiquidityManager` interface which will soon become async due to usage of the async `KVStore`. --- fuzz/src/lsps_message.rs | 5 +- lightning-background-processor/Cargo.toml | 1 + lightning-background-processor/src/lib.rs | 47 +- lightning-liquidity/Cargo.toml | 1 + lightning-liquidity/src/lib.rs | 3 +- lightning-liquidity/src/manager.rs | 503 ++++++++++++++++++++-- lightning-liquidity/tests/common/mod.rs | 18 +- 7 files changed, 535 insertions(+), 43 deletions(-) diff --git a/fuzz/src/lsps_message.rs b/fuzz/src/lsps_message.rs index 299b9f07955..2b5ee685704 100644 --- a/fuzz/src/lsps_message.rs +++ b/fuzz/src/lsps_message.rs @@ -21,7 +21,7 @@ use lightning::util::test_utils::{ }; use lightning_liquidity::lsps0::ser::LSPS_MESSAGE_TYPE_ID; -use lightning_liquidity::LiquidityManager; +use lightning_liquidity::LiquidityManagerSync; use core::time::Duration; @@ -77,12 +77,13 @@ pub fn do_test(data: &[u8]) { genesis_block.header.time, )); - let liquidity_manager = Arc::new(LiquidityManager::new( + let liquidity_manager = Arc::new(LiquidityManagerSync::new( Arc::clone(&keys_manager), Arc::clone(&keys_manager), Arc::clone(&manager), None::>, None, + kv_store, None, None, )); diff --git a/lightning-background-processor/Cargo.toml b/lightning-background-processor/Cargo.toml index 47d3211344b..415676f4ea1 100644 --- a/lightning-background-processor/Cargo.toml +++ b/lightning-background-processor/Cargo.toml @@ -31,6 +31,7 @@ possiblyrandom = { version = "0.2", path = "../possiblyrandom", default-features tokio = { version = "1.35", features = [ "macros", "rt", "rt-multi-thread", "sync", "time" ] } lightning = { version = "0.2.0", path = "../lightning", features = ["_test_utils"] } lightning-invoice = { version = "0.34.0", path = "../lightning-invoice" } +lightning-liquidity = { version = "0.2.0", path = "../lightning-liquidity", default-features = false, features = ["_test_utils"] } lightning-persister = { version = "0.2.0", path = "../lightning-persister" } [lints] diff --git a/lightning-background-processor/src/lib.rs b/lightning-background-processor/src/lib.rs index 95adc65149d..f10a3e2febf 100644 --- a/lightning-background-processor/src/lib.rs +++ b/lightning-background-processor/src/lib.rs @@ -69,6 +69,8 @@ use lightning::util::wakers::Sleeper; use lightning_rapid_gossip_sync::RapidGossipSync; use lightning_liquidity::ALiquidityManager; +#[cfg(feature = "std")] +use lightning_liquidity::ALiquidityManagerSync; use core::ops::Deref; use core::time::Duration; @@ -424,6 +426,31 @@ pub const NO_LIQUIDITY_MANAGER: Option< CM = &DynChannelManager, Filter = dyn chain::Filter, C = &dyn chain::Filter, + KVStore = dyn lightning::util::persist::KVStore, + K = &dyn lightning::util::persist::KVStore, + TimeProvider = dyn lightning_liquidity::utils::time::TimeProvider, + TP = &dyn lightning_liquidity::utils::time::TimeProvider, + > + Send + + Sync, + >, +> = None; + +/// When initializing a background processor without a liquidity manager, this can be used to avoid +/// specifying a concrete `LiquidityManagerSync` type. +#[cfg(all(not(c_bindings), feature = "std"))] +pub const NO_LIQUIDITY_MANAGER_SYNC: Option< + Arc< + dyn ALiquidityManagerSync< + EntropySource = dyn EntropySource, + ES = &dyn EntropySource, + NodeSigner = dyn lightning::sign::NodeSigner, + NS = &dyn lightning::sign::NodeSigner, + AChannelManager = DynChannelManager, + CM = &DynChannelManager, + Filter = dyn chain::Filter, + C = &dyn chain::Filter, + KVStoreSync = dyn lightning::util::persist::KVStoreSync, + KS = &dyn lightning::util::persist::KVStoreSync, TimeProvider = dyn lightning_liquidity::utils::time::TimeProvider, TP = &dyn lightning_liquidity::utils::time::TimeProvider, > + Send @@ -731,7 +758,7 @@ use futures_util::{dummy_waker, Joiner, OptionalSelector, Selector, SelectorOutp /// # type P2PGossipSync