@@ -48,11 +48,9 @@ use lightning::onion_message::messenger::AOnionMessenger;
48
48
use lightning:: routing:: gossip:: { NetworkGraph , P2PGossipSync } ;
49
49
use lightning:: routing:: scoring:: { ScoreUpdate , WriteableScore } ;
50
50
use lightning:: routing:: utxo:: UtxoLookup ;
51
- use lightning:: sign:: ChangeDestinationSource ;
52
- #[ cfg( feature = "std" ) ]
53
- use lightning:: sign:: ChangeDestinationSourceSync ;
54
- use lightning:: sign:: EntropySource ;
55
- use lightning:: sign:: OutputSpender ;
51
+ use lightning:: sign:: {
52
+ ChangeDestinationSource , ChangeDestinationSourceSync , EntropySource , OutputSpender ,
53
+ } ;
56
54
use lightning:: util:: logger:: Logger ;
57
55
use lightning:: util:: persist:: {
58
56
KVStore , KVStoreSync , KVStoreSyncWrapper , CHANNEL_MANAGER_PERSISTENCE_KEY ,
@@ -61,9 +59,7 @@ use lightning::util::persist::{
61
59
NETWORK_GRAPH_PERSISTENCE_SECONDARY_NAMESPACE , SCORER_PERSISTENCE_KEY ,
62
60
SCORER_PERSISTENCE_PRIMARY_NAMESPACE , SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
63
61
} ;
64
- use lightning:: util:: sweep:: OutputSweeper ;
65
- #[ cfg( feature = "std" ) ]
66
- use lightning:: util:: sweep:: OutputSweeperSync ;
62
+ use lightning:: util:: sweep:: { OutputSweeper , OutputSweeperSync } ;
67
63
#[ cfg( feature = "std" ) ]
68
64
use lightning:: util:: wakers:: Sleeper ;
69
65
use lightning_rapid_gossip_sync:: RapidGossipSync ;
@@ -304,7 +300,7 @@ where
304
300
305
301
/// Updates scorer based on event and returns whether an update occurred so we can decide whether
306
302
/// to persist.
307
- fn update_scorer < ' a , S : ' static + Deref < Target = SC > + Send + Sync , SC : ' a + WriteableScore < ' a > > (
303
+ fn update_scorer < ' a , S : Deref < Target = SC > + Send + Sync , SC : ' a + WriteableScore < ' a > > (
308
304
scorer : & ' a S , event : & Event , duration_since_epoch : Duration ,
309
305
) -> bool {
310
306
match event {
@@ -866,31 +862,30 @@ use futures_util::{dummy_waker, Joiner, OptionalSelector, Selector, SelectorOutp
866
862
///```
867
863
pub async fn process_events_async <
868
864
' a ,
869
- UL : ' static + Deref ,
870
- CF : ' static + Deref ,
871
- T : ' static + Deref ,
872
- F : ' static + Deref ,
873
- G : ' static + Deref < Target = NetworkGraph < L > > ,
874
- L : ' static + Deref ,
875
- P : ' static + Deref ,
865
+ UL : Deref ,
866
+ CF : Deref ,
867
+ T : Deref ,
868
+ F : Deref ,
869
+ G : Deref < Target = NetworkGraph < L > > ,
870
+ L : Deref ,
871
+ P : Deref ,
876
872
EventHandlerFuture : core:: future:: Future < Output = Result < ( ) , ReplayEvent > > ,
877
873
EventHandler : Fn ( Event ) -> EventHandlerFuture ,
878
- ES : ' static + Deref + Send ,
879
- M : ' static
880
- + Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P , ES > >
874
+ ES : Deref + Send ,
875
+ M : Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P , ES > >
881
876
+ Send
882
877
+ Sync ,
883
- CM : ' static + Deref ,
884
- OM : ' static + Deref ,
885
- PGS : ' static + Deref < Target = P2PGossipSync < G , UL , L > > ,
886
- RGS : ' static + Deref < Target = RapidGossipSync < G , L > > ,
887
- PM : ' static + Deref ,
888
- LM : ' static + Deref ,
889
- D : ' static + Deref ,
890
- O : ' static + Deref ,
891
- K : ' static + Deref ,
892
- OS : ' static + Deref < Target = OutputSweeper < T , D , F , CF , K , L , O > > ,
893
- S : ' static + Deref < Target = SC > + Send + Sync ,
878
+ CM : Deref ,
879
+ OM : Deref ,
880
+ PGS : Deref < Target = P2PGossipSync < G , UL , L > > ,
881
+ RGS : Deref < Target = RapidGossipSync < G , L > > ,
882
+ PM : Deref ,
883
+ LM : Deref ,
884
+ D : Deref ,
885
+ O : Deref ,
886
+ K : Deref ,
887
+ OS : Deref < Target = OutputSweeper < T , D , F , CF , K , L , O > > ,
888
+ S : Deref < Target = SC > + Send + Sync ,
894
889
SC : for < ' b > WriteableScore < ' b > ,
895
890
SleepFuture : core:: future:: Future < Output = bool > + core:: marker:: Unpin ,
896
891
Sleeper : Fn ( Duration ) -> SleepFuture ,
@@ -902,20 +897,20 @@ pub async fn process_events_async<
902
897
sleeper : Sleeper , mobile_interruptable_platform : bool , fetch_time : FetchTime ,
903
898
) -> Result < ( ) , lightning:: io:: Error >
904
899
where
905
- UL :: Target : ' static + UtxoLookup ,
906
- CF :: Target : ' static + chain:: Filter ,
907
- T :: Target : ' static + BroadcasterInterface ,
908
- F :: Target : ' static + FeeEstimator ,
909
- L :: Target : ' static + Logger ,
910
- P :: Target : ' static + Persist < <CM :: Target as AChannelManager >:: Signer > ,
911
- ES :: Target : ' static + EntropySource ,
900
+ UL :: Target : UtxoLookup ,
901
+ CF :: Target : chain:: Filter ,
902
+ T :: Target : BroadcasterInterface ,
903
+ F :: Target : FeeEstimator ,
904
+ L :: Target : Logger ,
905
+ P :: Target : Persist < <CM :: Target as AChannelManager >:: Signer > ,
906
+ ES :: Target : EntropySource ,
912
907
CM :: Target : AChannelManager ,
913
908
OM :: Target : AOnionMessenger ,
914
909
PM :: Target : APeerManager ,
915
910
LM :: Target : ALiquidityManager ,
916
- O :: Target : ' static + OutputSpender ,
917
- D :: Target : ' static + ChangeDestinationSource ,
918
- K :: Target : ' static + KVStore ,
911
+ O :: Target : OutputSpender ,
912
+ D :: Target : ChangeDestinationSource ,
913
+ K :: Target : KVStore ,
919
914
{
920
915
let async_event_handler = |event| {
921
916
let network_graph = gossip_sync. network_graph ( ) ;
@@ -1340,31 +1335,30 @@ fn check_and_reset_sleeper<
1340
1335
/// Async events processor that is based on [`process_events_async`] but allows for [`KVStoreSync`] to be used for
1341
1336
/// synchronous background persistence.
1342
1337
pub async fn process_events_async_with_kv_store_sync <
1343
- UL : ' static + Deref ,
1344
- CF : ' static + Deref ,
1345
- T : ' static + Deref ,
1346
- F : ' static + Deref ,
1347
- G : ' static + Deref < Target = NetworkGraph < L > > ,
1348
- L : ' static + Deref + Send + Sync ,
1349
- P : ' static + Deref ,
1338
+ UL : Deref ,
1339
+ CF : Deref ,
1340
+ T : Deref ,
1341
+ F : Deref ,
1342
+ G : Deref < Target = NetworkGraph < L > > ,
1343
+ L : Deref + Send + Sync ,
1344
+ P : Deref ,
1350
1345
EventHandlerFuture : core:: future:: Future < Output = Result < ( ) , ReplayEvent > > ,
1351
1346
EventHandler : Fn ( Event ) -> EventHandlerFuture ,
1352
- ES : ' static + Deref + Send ,
1353
- M : ' static
1354
- + Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P , ES > >
1347
+ ES : Deref + Send ,
1348
+ M : Deref < Target = ChainMonitor < <CM :: Target as AChannelManager >:: Signer , CF , T , F , L , P , ES > >
1355
1349
+ Send
1356
1350
+ Sync ,
1357
- CM : ' static + Deref + Send + Sync ,
1358
- OM : ' static + Deref ,
1359
- PGS : ' static + Deref < Target = P2PGossipSync < G , UL , L > > ,
1360
- RGS : ' static + Deref < Target = RapidGossipSync < G , L > > ,
1361
- PM : ' static + Deref ,
1362
- LM : ' static + Deref ,
1363
- D : ' static + Deref ,
1364
- O : ' static + Deref ,
1365
- K : ' static + Deref ,
1366
- OS : ' static + Deref < Target = OutputSweeper < T , D , F , CF , KVStoreSyncWrapper < K > , L , O > > ,
1367
- S : ' static + Deref < Target = SC > + Send + Sync ,
1351
+ CM : Deref + Send + Sync ,
1352
+ OM : Deref ,
1353
+ PGS : Deref < Target = P2PGossipSync < G , UL , L > > ,
1354
+ RGS : Deref < Target = RapidGossipSync < G , L > > ,
1355
+ PM : Deref ,
1356
+ LM : Deref ,
1357
+ D : Deref ,
1358
+ O : Deref ,
1359
+ K : Deref ,
1360
+ OS : Deref < Target = OutputSweeperSync < T , D , F , CF , K , L , O > > ,
1361
+ S : Deref < Target = SC > + Send + Sync ,
1368
1362
SC : for < ' b > WriteableScore < ' b > ,
1369
1363
SleepFuture : core:: future:: Future < Output = bool > + core:: marker:: Unpin ,
1370
1364
Sleeper : Fn ( Duration ) -> SleepFuture ,
@@ -1376,20 +1370,20 @@ pub async fn process_events_async_with_kv_store_sync<
1376
1370
sleeper : Sleeper , mobile_interruptable_platform : bool , fetch_time : FetchTime ,
1377
1371
) -> Result < ( ) , lightning:: io:: Error >
1378
1372
where
1379
- UL :: Target : ' static + UtxoLookup ,
1380
- CF :: Target : ' static + chain:: Filter ,
1381
- T :: Target : ' static + BroadcasterInterface ,
1382
- F :: Target : ' static + FeeEstimator ,
1383
- L :: Target : ' static + Logger ,
1384
- P :: Target : ' static + Persist < <CM :: Target as AChannelManager >:: Signer > ,
1385
- ES :: Target : ' static + EntropySource ,
1373
+ UL :: Target : UtxoLookup ,
1374
+ CF :: Target : chain:: Filter ,
1375
+ T :: Target : BroadcasterInterface ,
1376
+ F :: Target : FeeEstimator ,
1377
+ L :: Target : Logger ,
1378
+ P :: Target : Persist < <CM :: Target as AChannelManager >:: Signer > ,
1379
+ ES :: Target : EntropySource ,
1386
1380
CM :: Target : AChannelManager ,
1387
1381
OM :: Target : AOnionMessenger ,
1388
1382
PM :: Target : APeerManager ,
1389
1383
LM :: Target : ALiquidityManager ,
1390
- O :: Target : ' static + OutputSpender ,
1391
- D :: Target : ' static + ChangeDestinationSource ,
1392
- K :: Target : ' static + KVStoreSync ,
1384
+ O :: Target : OutputSpender ,
1385
+ D :: Target : ChangeDestinationSourceSync ,
1386
+ K :: Target : KVStoreSync ,
1393
1387
{
1394
1388
let kv_store = KVStoreSyncWrapper ( kv_store) ;
1395
1389
process_events_async (
@@ -1401,7 +1395,7 @@ where
1401
1395
gossip_sync,
1402
1396
peer_manager,
1403
1397
liquidity_manager,
1404
- sweeper,
1398
+ sweeper. as_ref ( ) . map ( |os| os . sweeper_async ( ) ) ,
1405
1399
logger,
1406
1400
scorer,
1407
1401
sleeper,
@@ -1846,11 +1840,13 @@ mod tests {
1846
1840
SCORER_PERSISTENCE_SECONDARY_NAMESPACE ,
1847
1841
} ;
1848
1842
use lightning:: util:: ser:: Writeable ;
1849
- use lightning:: util:: sweep:: { OutputSpendStatus , OutputSweeperSync , PRUNE_DELAY_BLOCKS } ;
1843
+ use lightning:: util:: sweep:: {
1844
+ OutputSpendStatus , OutputSweeper , OutputSweeperSync , PRUNE_DELAY_BLOCKS ,
1845
+ } ;
1850
1846
use lightning:: util:: test_utils;
1851
1847
use lightning:: { get_event, get_event_msg} ;
1852
1848
use lightning_liquidity:: utils:: time:: DefaultTimeProvider ;
1853
- use lightning_liquidity:: { ALiquidityManagerSync , LiquidityManagerSync } ;
1849
+ use lightning_liquidity:: { ALiquidityManagerSync , LiquidityManager , LiquidityManagerSync } ;
1854
1850
use lightning_persister:: fs_store:: FilesystemStore ;
1855
1851
use lightning_rapid_gossip_sync:: RapidGossipSync ;
1856
1852
use std:: collections:: VecDeque ;
@@ -1953,7 +1949,7 @@ mod tests {
1953
1949
Arc < ChannelManager > ,
1954
1950
Arc < dyn Filter + Sync + Send > ,
1955
1951
Arc < Persister > ,
1956
- Arc < DefaultTimeProvider > ,
1952
+ DefaultTimeProvider ,
1957
1953
> ;
1958
1954
1959
1955
struct Node {
@@ -2779,7 +2775,18 @@ mod tests {
2779
2775
let kv_store_sync = Arc :: new (
2780
2776
Persister :: new ( data_dir) . with_manager_error ( std:: io:: ErrorKind :: Other , "test" ) ,
2781
2777
) ;
2782
- let kv_store = Arc :: new ( KVStoreSyncWrapper ( kv_store_sync) ) ;
2778
+ let kv_store = KVStoreSyncWrapper ( kv_store_sync) ;
2779
+
2780
+ // Yes, you can unsafe { turn off the borrow checker }
2781
+ let lm_async: & ' static LiquidityManager < _ , _ , _ , _ , _ , _ > = unsafe {
2782
+ & * ( nodes[ 0 ] . liquidity_manager . get_lm_async ( )
2783
+ as * const LiquidityManager < _ , _ , _ , _ , _ , _ > )
2784
+ as & ' static LiquidityManager < _ , _ , _ , _ , _ , _ >
2785
+ } ;
2786
+ let sweeper_async: & ' static OutputSweeper < _ , _ , _ , _ , _ , _ , _ > = unsafe {
2787
+ & * ( nodes[ 0 ] . sweeper . sweeper_async ( ) as * const OutputSweeper < _ , _ , _ , _ , _ , _ , _ > )
2788
+ as & ' static OutputSweeper < _ , _ , _ , _ , _ , _ , _ >
2789
+ } ;
2783
2790
2784
2791
let bp_future = super :: process_events_async (
2785
2792
kv_store,
@@ -2789,8 +2796,8 @@ mod tests {
2789
2796
Some ( Arc :: clone ( & nodes[ 0 ] . messenger ) ) ,
2790
2797
nodes[ 0 ] . rapid_gossip_sync ( ) ,
2791
2798
Arc :: clone ( & nodes[ 0 ] . peer_manager ) ,
2792
- Some ( nodes [ 0 ] . liquidity_manager . get_lm_async ( ) ) ,
2793
- Some ( nodes [ 0 ] . sweeper . sweeper_async ( ) ) ,
2799
+ Some ( lm_async ) ,
2800
+ Some ( sweeper_async) ,
2794
2801
Arc :: clone ( & nodes[ 0 ] . logger ) ,
2795
2802
Some ( Arc :: clone ( & nodes[ 0 ] . scorer ) ) ,
2796
2803
move |dur : Duration | {
@@ -3287,7 +3294,18 @@ mod tests {
3287
3294
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
3288
3295
let kv_store_sync =
3289
3296
Arc :: new ( Persister :: new ( data_dir) . with_graph_persistence_notifier ( sender) ) ;
3290
- let kv_store = Arc :: new ( KVStoreSyncWrapper ( kv_store_sync) ) ;
3297
+ let kv_store = KVStoreSyncWrapper ( kv_store_sync) ;
3298
+
3299
+ // Yes, you can unsafe { turn off the borrow checker }
3300
+ let lm_async: & ' static LiquidityManager < _ , _ , _ , _ , _ , _ > = unsafe {
3301
+ & * ( nodes[ 0 ] . liquidity_manager . get_lm_async ( )
3302
+ as * const LiquidityManager < _ , _ , _ , _ , _ , _ > )
3303
+ as & ' static LiquidityManager < _ , _ , _ , _ , _ , _ >
3304
+ } ;
3305
+ let sweeper_async: & ' static OutputSweeper < _ , _ , _ , _ , _ , _ , _ > = unsafe {
3306
+ & * ( nodes[ 0 ] . sweeper . sweeper_async ( ) as * const OutputSweeper < _ , _ , _ , _ , _ , _ , _ > )
3307
+ as & ' static OutputSweeper < _ , _ , _ , _ , _ , _ , _ >
3308
+ } ;
3291
3309
3292
3310
let ( exit_sender, exit_receiver) = tokio:: sync:: watch:: channel ( ( ) ) ;
3293
3311
let bp_future = super :: process_events_async (
@@ -3298,8 +3316,8 @@ mod tests {
3298
3316
Some ( Arc :: clone ( & nodes[ 0 ] . messenger ) ) ,
3299
3317
nodes[ 0 ] . rapid_gossip_sync ( ) ,
3300
3318
Arc :: clone ( & nodes[ 0 ] . peer_manager ) ,
3301
- Some ( nodes [ 0 ] . liquidity_manager . get_lm_async ( ) ) ,
3302
- Some ( nodes [ 0 ] . sweeper . sweeper_async ( ) ) ,
3319
+ Some ( lm_async ) ,
3320
+ Some ( sweeper_async) ,
3303
3321
Arc :: clone ( & nodes[ 0 ] . logger ) ,
3304
3322
Some ( Arc :: clone ( & nodes[ 0 ] . scorer ) ) ,
3305
3323
move |dur : Duration | {
@@ -3501,10 +3519,21 @@ mod tests {
3501
3519
let ( _, nodes) = create_nodes ( 1 , "test_payment_path_scoring_async" ) ;
3502
3520
let data_dir = nodes[ 0 ] . kv_store . get_data_dir ( ) ;
3503
3521
let kv_store_sync = Arc :: new ( Persister :: new ( data_dir) ) ;
3504
- let kv_store = Arc :: new ( KVStoreSyncWrapper ( kv_store_sync) ) ;
3522
+ let kv_store = KVStoreSyncWrapper ( kv_store_sync) ;
3505
3523
3506
3524
let ( exit_sender, exit_receiver) = tokio:: sync:: watch:: channel ( ( ) ) ;
3507
3525
3526
+ // Yes, you can unsafe { turn off the borrow checker }
3527
+ let lm_async: & ' static LiquidityManager < _ , _ , _ , _ , _ , _ > = unsafe {
3528
+ & * ( nodes[ 0 ] . liquidity_manager . get_lm_async ( )
3529
+ as * const LiquidityManager < _ , _ , _ , _ , _ , _ > )
3530
+ as & ' static LiquidityManager < _ , _ , _ , _ , _ , _ >
3531
+ } ;
3532
+ let sweeper_async: & ' static OutputSweeper < _ , _ , _ , _ , _ , _ , _ > = unsafe {
3533
+ & * ( nodes[ 0 ] . sweeper . sweeper_async ( ) as * const OutputSweeper < _ , _ , _ , _ , _ , _ , _ > )
3534
+ as & ' static OutputSweeper < _ , _ , _ , _ , _ , _ , _ >
3535
+ } ;
3536
+
3508
3537
let bp_future = super :: process_events_async (
3509
3538
kv_store,
3510
3539
event_handler,
@@ -3513,8 +3542,8 @@ mod tests {
3513
3542
Some ( Arc :: clone ( & nodes[ 0 ] . messenger ) ) ,
3514
3543
nodes[ 0 ] . no_gossip_sync ( ) ,
3515
3544
Arc :: clone ( & nodes[ 0 ] . peer_manager ) ,
3516
- Some ( nodes [ 0 ] . liquidity_manager . get_lm_async ( ) ) ,
3517
- Some ( nodes [ 0 ] . sweeper . sweeper_async ( ) ) ,
3545
+ Some ( lm_async ) ,
3546
+ Some ( sweeper_async) ,
3518
3547
Arc :: clone ( & nodes[ 0 ] . logger ) ,
3519
3548
Some ( Arc :: clone ( & nodes[ 0 ] . scorer ) ) ,
3520
3549
move |dur : Duration | {
0 commit comments