Skip to content

Commit 44b9529

Browse files
Merge pull request #4311 from valentinewallace/2026-01-avoid-derefs
Drop `Deref` indirection for most trait parameters
2 parents 6447d98 + 101d206 commit 44b9529

68 files changed

Lines changed: 2164 additions & 3395 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

lightning-background-processor/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ bitcoin_hashes = { version = "0.14.0", default-features = false }
2626
bitcoin-io = { version = "0.1.2", default-features = false }
2727
lightning = { version = "0.3.0", path = "../lightning", default-features = false }
2828
lightning-rapid-gossip-sync = { version = "0.2.0", path = "../lightning-rapid-gossip-sync", default-features = false }
29-
lightning-liquidity = { version = "0.2.0", path = "../lightning-liquidity", default-features = false }
29+
lightning-liquidity = { version = "0.3.0", path = "../lightning-liquidity", default-features = false }
3030
possiblyrandom = { version = "0.2", path = "../possiblyrandom", default-features = false }
3131

3232
[dev-dependencies]
3333
tokio = { version = "1.35", features = [ "macros", "rt", "rt-multi-thread", "sync", "time" ] }
3434
lightning = { version = "0.3.0", path = "../lightning", features = ["_test_utils"] }
3535
lightning-invoice = { version = "0.34.0", path = "../lightning-invoice" }
36-
lightning-liquidity = { version = "0.2.0", path = "../lightning-liquidity", default-features = false, features = ["_test_utils"] }
36+
lightning-liquidity = { version = "0.3.0", path = "../lightning-liquidity", default-features = false, features = ["_test_utils"] }
3737
lightning-persister = { version = "0.2.0", path = "../lightning-persister" }
3838

3939
[lints]

lightning-background-processor/src/lib.rs

Lines changed: 51 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,9 @@ pub enum GossipSync<
200200
P: Deref<Target = P2PGossipSync<G, U, L>>,
201201
R: Deref<Target = RapidGossipSync<G, L>>,
202202
G: Deref<Target = NetworkGraph<L>>,
203-
U: Deref,
204-
L: Deref,
205-
> where
206-
U::Target: UtxoLookup,
207-
L::Target: Logger,
208-
{
203+
U: UtxoLookup,
204+
L: Logger,
205+
> {
209206
/// Gossip sync via the lightning peer-to-peer network as defined by BOLT 7.
210207
P2P(P),
211208
/// Rapid gossip sync from a trusted server.
@@ -218,12 +215,9 @@ impl<
218215
P: Deref<Target = P2PGossipSync<G, U, L>>,
219216
R: Deref<Target = RapidGossipSync<G, L>>,
220217
G: Deref<Target = NetworkGraph<L>>,
221-
U: Deref,
222-
L: Deref,
218+
U: UtxoLookup,
219+
L: Logger,
223220
> GossipSync<P, R, G, U, L>
224-
where
225-
U::Target: UtxoLookup,
226-
L::Target: Logger,
227221
{
228222
fn network_graph(&self) -> Option<&G> {
229223
match self {
@@ -260,12 +254,9 @@ where
260254
impl<
261255
P: Deref<Target = P2PGossipSync<G, U, L>>,
262256
G: Deref<Target = NetworkGraph<L>>,
263-
U: Deref,
264-
L: Deref,
257+
U: UtxoLookup,
258+
L: Logger,
265259
> GossipSync<P, &RapidGossipSync<G, L>, G, U, L>
266-
where
267-
U::Target: UtxoLookup,
268-
L::Target: Logger,
269260
{
270261
/// Initializes a new [`GossipSync::P2P`] variant.
271262
pub fn p2p(gossip_sync: P) -> Self {
@@ -278,16 +269,15 @@ impl<
278269
'a,
279270
R: Deref<Target = RapidGossipSync<G, L>>,
280271
G: Deref<Target = NetworkGraph<L>>,
281-
L: Deref,
272+
L: Logger,
282273
>
283274
GossipSync<
284275
&P2PGossipSync<G, &'a (dyn UtxoLookup + Send + Sync), L>,
285276
R,
286277
G,
287278
&'a (dyn UtxoLookup + Send + Sync),
288279
L,
289-
> where
290-
L::Target: Logger,
280+
>
291281
{
292282
/// Initializes a new [`GossipSync::Rapid`] variant.
293283
pub fn rapid(gossip_sync: R) -> Self {
@@ -296,26 +286,22 @@ impl<
296286
}
297287

298288
/// This is not exported to bindings users as the bindings concretize everything and have constructors for us
299-
impl<'a, L: Deref>
289+
impl<'a, L: Logger>
300290
GossipSync<
301291
&P2PGossipSync<&'a NetworkGraph<L>, &'a (dyn UtxoLookup + Send + Sync), L>,
302292
&RapidGossipSync<&'a NetworkGraph<L>, L>,
303293
&'a NetworkGraph<L>,
304294
&'a (dyn UtxoLookup + Send + Sync),
305295
L,
306-
> where
307-
L::Target: Logger,
296+
>
308297
{
309298
/// Initializes a new [`GossipSync::None`] variant.
310299
pub fn none() -> Self {
311300
GossipSync::None
312301
}
313302
}
314303

315-
fn handle_network_graph_update<L: Deref>(network_graph: &NetworkGraph<L>, event: &Event)
316-
where
317-
L::Target: Logger,
318-
{
304+
fn handle_network_graph_update<L: Logger>(network_graph: &NetworkGraph<L>, event: &Event) {
319305
if let Event::PaymentPathFailed {
320306
failure: PathFailure::OnPath { network_update: Some(ref upd) },
321307
..
@@ -420,24 +406,15 @@ type DynChannelManager = lightning::ln::channelmanager::ChannelManager<
420406
pub const NO_ONION_MESSENGER: Option<
421407
Arc<
422408
dyn AOnionMessenger<
423-
EntropySource = dyn EntropySource + Send + Sync,
424-
ES = &(dyn EntropySource + Send + Sync),
425-
NodeSigner = dyn lightning::sign::NodeSigner + Send + Sync,
426-
NS = &(dyn lightning::sign::NodeSigner + Send + Sync),
427-
Logger = dyn Logger + Send + Sync,
428-
L = &'static (dyn Logger + Send + Sync),
429-
NodeIdLookUp = DynChannelManager,
409+
EntropySource = &(dyn EntropySource + Send + Sync),
410+
NodeSigner = &(dyn lightning::sign::NodeSigner + Send + Sync),
411+
Logger = &'static (dyn Logger + Send + Sync),
430412
NL = &'static DynChannelManager,
431-
MessageRouter = DynMessageRouter,
432-
MR = &'static DynMessageRouter,
433-
OffersMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
434-
OMH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
435-
AsyncPaymentsMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
436-
APH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
437-
DNSResolverMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
438-
DRH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
439-
CustomOnionMessageHandler = lightning::ln::peer_handler::IgnoringMessageHandler,
440-
CMH = &'static lightning::ln::peer_handler::IgnoringMessageHandler,
413+
MessageRouter = &'static DynMessageRouter,
414+
OMH = lightning::ln::peer_handler::IgnoringMessageHandler,
415+
APH = lightning::ln::peer_handler::IgnoringMessageHandler,
416+
DRH = lightning::ln::peer_handler::IgnoringMessageHandler,
417+
CMH = lightning::ln::peer_handler::IgnoringMessageHandler,
441418
> + Send
442419
+ Sync,
443420
>,
@@ -480,22 +457,17 @@ impl KVStore for DummyKVStore {
480457
pub const NO_LIQUIDITY_MANAGER: Option<
481458
Arc<
482459
dyn ALiquidityManager<
483-
EntropySource = dyn EntropySource + Send + Sync,
484-
ES = &(dyn EntropySource + Send + Sync),
485-
NodeSigner = dyn lightning::sign::NodeSigner + Send + Sync,
486-
NS = &(dyn lightning::sign::NodeSigner + Send + Sync),
460+
EntropySource = &(dyn EntropySource + Send + Sync),
461+
NodeSigner = &(dyn lightning::sign::NodeSigner + Send + Sync),
487462
AChannelManager = DynChannelManager,
488463
CM = &DynChannelManager,
489-
Filter = dyn chain::Filter + Send + Sync,
490464
C = &(dyn chain::Filter + Send + Sync),
491-
KVStore = DummyKVStore,
492465
K = &DummyKVStore,
493466
TimeProvider = dyn lightning_liquidity::utils::time::TimeProvider + Send + Sync,
494467
TP = &(dyn lightning_liquidity::utils::time::TimeProvider + Send + Sync),
495-
BroadcasterInterface = dyn lightning::chain::chaininterface::BroadcasterInterface
496-
+ Send
497-
+ Sync,
498-
T = &(dyn BroadcasterInterface + Send + Sync),
468+
BroadcasterInterface = &(dyn lightning::chain::chaininterface::BroadcasterInterface
469+
+ Send
470+
+ Sync),
499471
> + Send
500472
+ Sync,
501473
>,
@@ -507,22 +479,18 @@ pub const NO_LIQUIDITY_MANAGER: Option<
507479
pub const NO_LIQUIDITY_MANAGER_SYNC: Option<
508480
Arc<
509481
dyn ALiquidityManagerSync<
510-
EntropySource = dyn EntropySource + Send + Sync,
511-
ES = &(dyn EntropySource + Send + Sync),
512-
NodeSigner = dyn lightning::sign::NodeSigner + Send + Sync,
513-
NS = &(dyn lightning::sign::NodeSigner + Send + Sync),
482+
EntropySource = &(dyn EntropySource + Send + Sync),
483+
NodeSigner = &(dyn lightning::sign::NodeSigner + Send + Sync),
514484
AChannelManager = DynChannelManager,
515485
CM = &DynChannelManager,
516-
Filter = dyn chain::Filter + Send + Sync,
517486
C = &(dyn chain::Filter + Send + Sync),
518487
KVStoreSync = dyn lightning::util::persist::KVStoreSync + Send + Sync,
519488
KS = &(dyn lightning::util::persist::KVStoreSync + Send + Sync),
520489
TimeProvider = dyn lightning_liquidity::utils::time::TimeProvider + Send + Sync,
521490
TP = &(dyn lightning_liquidity::utils::time::TimeProvider + Send + Sync),
522-
BroadcasterInterface = dyn lightning::chain::chaininterface::BroadcasterInterface
523-
+ Send
524-
+ Sync,
525-
T = &(dyn BroadcasterInterface + Send + Sync),
491+
BroadcasterInterface = &(dyn lightning::chain::chaininterface::BroadcasterInterface
492+
+ Send
493+
+ Sync),
526494
> + Send
527495
+ Sync,
528496
>,
@@ -954,16 +922,16 @@ use futures_util::{dummy_waker, Joiner, OptionalSelector, Selector, SelectorOutp
954922
///```
955923
pub async fn process_events_async<
956924
'a,
957-
UL: Deref,
958-
CF: Deref,
959-
T: Deref,
960-
F: Deref,
925+
UL: UtxoLookup,
926+
CF: chain::Filter,
927+
T: BroadcasterInterface,
928+
F: FeeEstimator,
961929
G: Deref<Target = NetworkGraph<L>>,
962-
L: Deref,
930+
L: Logger,
963931
P: Deref,
964932
EventHandlerFuture: core::future::Future<Output = Result<(), ReplayEvent>>,
965933
EventHandler: Fn(Event) -> EventHandlerFuture,
966-
ES: Deref,
934+
ES: EntropySource,
967935
M: Deref<Target = ChainMonitor<<CM::Target as AChannelManager>::Signer, CF, T, F, L, P, ES>>,
968936
CM: Deref,
969937
OM: Deref,
@@ -972,8 +940,8 @@ pub async fn process_events_async<
972940
PM: Deref,
973941
LM: Deref,
974942
D: Deref,
975-
O: Deref,
976-
K: Deref,
943+
O: OutputSpender,
944+
K: KVStore,
977945
OS: Deref<Target = OutputSweeper<T, D, F, CF, K, L, O>>,
978946
S: Deref<Target = SC>,
979947
SC: for<'b> WriteableScore<'b>,
@@ -987,20 +955,12 @@ pub async fn process_events_async<
987955
sleeper: Sleeper, mobile_interruptable_platform: bool, fetch_time: FetchTime,
988956
) -> Result<(), lightning::io::Error>
989957
where
990-
UL::Target: UtxoLookup,
991-
CF::Target: chain::Filter,
992-
T::Target: BroadcasterInterface,
993-
F::Target: FeeEstimator,
994-
L::Target: Logger,
995958
P::Target: Persist<<CM::Target as AChannelManager>::Signer>,
996-
ES::Target: EntropySource,
997959
CM::Target: AChannelManager,
998960
OM::Target: AOnionMessenger,
999961
PM::Target: APeerManager,
1000962
LM::Target: ALiquidityManager,
1001-
O::Target: OutputSpender,
1002963
D::Target: ChangeDestinationSource,
1003-
K::Target: KVStore,
1004964
{
1005965
let async_event_handler = |event| {
1006966
let network_graph = gossip_sync.network_graph();
@@ -1455,16 +1415,16 @@ fn check_and_reset_sleeper<
14551415
/// Async events processor that is based on [`process_events_async`] but allows for [`KVStoreSync`] to be used for
14561416
/// synchronous background persistence.
14571417
pub async fn process_events_async_with_kv_store_sync<
1458-
UL: Deref,
1459-
CF: Deref,
1460-
T: Deref,
1461-
F: Deref,
1418+
UL: UtxoLookup,
1419+
CF: chain::Filter,
1420+
T: BroadcasterInterface,
1421+
F: FeeEstimator,
14621422
G: Deref<Target = NetworkGraph<L>>,
1463-
L: Deref,
1423+
L: Logger,
14641424
P: Deref,
14651425
EventHandlerFuture: core::future::Future<Output = Result<(), ReplayEvent>>,
14661426
EventHandler: Fn(Event) -> EventHandlerFuture,
1467-
ES: Deref,
1427+
ES: EntropySource,
14681428
M: Deref<Target = ChainMonitor<<CM::Target as AChannelManager>::Signer, CF, T, F, L, P, ES>>,
14691429
CM: Deref,
14701430
OM: Deref,
@@ -1473,7 +1433,7 @@ pub async fn process_events_async_with_kv_store_sync<
14731433
PM: Deref,
14741434
LM: Deref,
14751435
D: Deref,
1476-
O: Deref,
1436+
O: OutputSpender,
14771437
K: Deref,
14781438
OS: Deref<Target = OutputSweeperSync<T, D, F, CF, K, L, O>>,
14791439
S: Deref<Target = SC>,
@@ -1488,18 +1448,11 @@ pub async fn process_events_async_with_kv_store_sync<
14881448
sleeper: Sleeper, mobile_interruptable_platform: bool, fetch_time: FetchTime,
14891449
) -> Result<(), lightning::io::Error>
14901450
where
1491-
UL::Target: UtxoLookup,
1492-
CF::Target: chain::Filter,
1493-
T::Target: BroadcasterInterface,
1494-
F::Target: FeeEstimator,
1495-
L::Target: Logger,
14961451
P::Target: Persist<<CM::Target as AChannelManager>::Signer>,
1497-
ES::Target: EntropySource,
14981452
CM::Target: AChannelManager,
14991453
OM::Target: AOnionMessenger,
15001454
PM::Target: APeerManager,
15011455
LM::Target: ALiquidityManager,
1502-
O::Target: OutputSpender,
15031456
D::Target: ChangeDestinationSourceSync,
15041457
K::Target: KVStoreSync,
15051458
{
@@ -1569,15 +1522,15 @@ impl BackgroundProcessor {
15691522
/// [`NetworkGraph::write`]: lightning::routing::gossip::NetworkGraph#impl-Writeable
15701523
pub fn start<
15711524
'a,
1572-
UL: 'static + Deref,
1573-
CF: 'static + Deref,
1574-
T: 'static + Deref,
1575-
F: 'static + Deref + Send,
1525+
UL: 'static + UtxoLookup,
1526+
CF: 'static + chain::Filter,
1527+
T: 'static + BroadcasterInterface,
1528+
F: 'static + FeeEstimator + Send,
15761529
G: 'static + Deref<Target = NetworkGraph<L>>,
15771530
L: 'static + Deref + Send,
15781531
P: 'static + Deref,
15791532
EH: 'static + EventHandler + Send,
1580-
ES: 'static + Deref + Send,
1533+
ES: 'static + EntropySource + Send,
15811534
M: 'static
15821535
+ Deref<
15831536
Target = ChainMonitor<<CM::Target as AChannelManager>::Signer, CF, T, F, L, P, ES>,
@@ -1593,7 +1546,7 @@ impl BackgroundProcessor {
15931546
S: 'static + Deref<Target = SC> + Send + Sync,
15941547
SC: for<'b> WriteableScore<'b>,
15951548
D: 'static + Deref,
1596-
O: 'static + Deref,
1549+
O: 'static + OutputSpender,
15971550
K: 'static + Deref + Send,
15981551
OS: 'static + Deref<Target = OutputSweeperSync<T, D, F, CF, K, L, O>> + Send,
15991552
>(
@@ -1602,19 +1555,13 @@ impl BackgroundProcessor {
16021555
liquidity_manager: Option<LM>, sweeper: Option<OS>, logger: L, scorer: Option<S>,
16031556
) -> Self
16041557
where
1605-
UL::Target: 'static + UtxoLookup,
1606-
CF::Target: 'static + chain::Filter,
1607-
T::Target: 'static + BroadcasterInterface,
1608-
F::Target: 'static + FeeEstimator,
16091558
L::Target: 'static + Logger,
16101559
P::Target: 'static + Persist<<CM::Target as AChannelManager>::Signer>,
1611-
ES::Target: 'static + EntropySource,
16121560
CM::Target: AChannelManager,
16131561
OM::Target: AOnionMessenger,
16141562
PM::Target: APeerManager,
16151563
LM::Target: ALiquidityManagerSync,
16161564
D::Target: ChangeDestinationSourceSync,
1617-
O::Target: 'static + OutputSpender,
16181565
K::Target: 'static + KVStoreSync,
16191566
{
16201567
let stop_thread = Arc::new(AtomicBool::new(false));

lightning-block-sync/src/gossip.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -239,16 +239,6 @@ where
239239
}
240240
}
241241

242-
impl<S: FutureSpawner, Blocks: Deref + Send + Sync + Clone> Deref for GossipVerifier<S, Blocks>
243-
where
244-
Blocks::Target: UtxoSource,
245-
{
246-
type Target = Self;
247-
fn deref(&self) -> &Self {
248-
self
249-
}
250-
}
251-
252242
impl<S: FutureSpawner, Blocks: Deref + Send + Sync + Clone> UtxoLookup for GossipVerifier<S, Blocks>
253243
where
254244
Blocks::Target: UtxoSource,

0 commit comments

Comments
 (0)