@@ -13,10 +13,10 @@ use crate::chain::bitcoind_rpc::{
13
13
} ;
14
14
use crate :: chain:: electrum:: ElectrumRuntimeClient ;
15
15
use crate :: config:: {
16
- Config , ElectrumSyncConfig , EsploraSyncConfig , BDK_CLIENT_CONCURRENCY , BDK_CLIENT_STOP_GAP ,
17
- BDK_WALLET_SYNC_TIMEOUT_SECS , FEE_RATE_CACHE_UPDATE_TIMEOUT_SECS , LDK_WALLET_SYNC_TIMEOUT_SECS ,
18
- RESOLVED_CHANNEL_MONITOR_ARCHIVAL_INTERVAL , TX_BROADCAST_TIMEOUT_SECS ,
19
- WALLET_SYNC_INTERVAL_MINIMUM_SECS ,
16
+ BackgroundSyncConfig , Config , ElectrumSyncConfig , EsploraSyncConfig , BDK_CLIENT_CONCURRENCY ,
17
+ BDK_CLIENT_STOP_GAP , BDK_WALLET_SYNC_TIMEOUT_SECS , FEE_RATE_CACHE_UPDATE_TIMEOUT_SECS ,
18
+ LDK_WALLET_SYNC_TIMEOUT_SECS , RESOLVED_CHANNEL_MONITOR_ARCHIVAL_INTERVAL ,
19
+ TX_BROADCAST_TIMEOUT_SECS , WALLET_SYNC_INTERVAL_MINIMUM_SECS ,
20
20
} ;
21
21
use crate :: fee_estimator:: {
22
22
apply_post_estimation_adjustments, get_all_conf_targets, get_num_block_defaults_for_target,
@@ -346,71 +346,45 @@ impl ChainSource {
346
346
) {
347
347
match self {
348
348
Self :: Esplora { sync_config, logger, .. } => {
349
- // Setup syncing intervals if enabled
350
- if let Some ( background_sync_config) = sync_config. background_sync_config {
351
- let onchain_wallet_sync_interval_secs = background_sync_config
352
- . onchain_wallet_sync_interval_secs
353
- . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
354
- let mut onchain_wallet_sync_interval = tokio:: time:: interval (
355
- Duration :: from_secs ( onchain_wallet_sync_interval_secs) ,
356
- ) ;
357
- onchain_wallet_sync_interval
358
- . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
359
-
360
- let fee_rate_cache_update_interval_secs = background_sync_config
361
- . fee_rate_cache_update_interval_secs
362
- . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
363
- let mut fee_rate_update_interval = tokio:: time:: interval ( Duration :: from_secs (
364
- fee_rate_cache_update_interval_secs,
365
- ) ) ;
366
- // When starting up, we just blocked on updating, so skip the first tick.
367
- fee_rate_update_interval. reset ( ) ;
368
- fee_rate_update_interval
369
- . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
370
-
371
- let lightning_wallet_sync_interval_secs = background_sync_config
372
- . lightning_wallet_sync_interval_secs
373
- . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
374
- let mut lightning_wallet_sync_interval = tokio:: time:: interval (
375
- Duration :: from_secs ( lightning_wallet_sync_interval_secs) ,
349
+ if let Some ( background_sync_config) = sync_config. background_sync_config . as_ref ( ) {
350
+ self . start_tx_based_sync_loop (
351
+ stop_sync_receiver,
352
+ channel_manager,
353
+ chain_monitor,
354
+ output_sweeper,
355
+ background_sync_config,
356
+ Arc :: clone ( & logger) ,
357
+ )
358
+ . await
359
+ } else {
360
+ // Background syncing is disabled
361
+ log_info ! (
362
+ logger,
363
+ "Background syncing is disabled. Manual syncing required for onchain wallet, lightning wallet, and fee rate updates." ,
376
364
) ;
377
- lightning_wallet_sync_interval
378
- . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
379
-
380
- // Start the syncing loop.
381
- loop {
382
- tokio:: select! {
383
- _ = stop_sync_receiver. changed( ) => {
384
- log_trace!(
385
- logger,
386
- "Stopping background syncing on-chain wallet." ,
387
- ) ;
388
- return ;
389
- }
390
- _ = onchain_wallet_sync_interval. tick( ) => {
391
- let _ = self . sync_onchain_wallet( ) . await ;
392
- }
393
- _ = fee_rate_update_interval. tick( ) => {
394
- let _ = self . update_fee_rate_estimates( ) . await ;
395
- }
396
- _ = lightning_wallet_sync_interval. tick( ) => {
397
- let _ = self . sync_lightning_wallet(
398
- Arc :: clone( & channel_manager) ,
399
- Arc :: clone( & chain_monitor) ,
400
- Arc :: clone( & output_sweeper) ,
401
- ) . await ;
402
- }
403
- }
404
- }
365
+ return ;
366
+ }
367
+ } ,
368
+ Self :: Electrum { sync_config, logger, .. } => {
369
+ if let Some ( background_sync_config) = sync_config. background_sync_config . as_ref ( ) {
370
+ self . start_tx_based_sync_loop (
371
+ stop_sync_receiver,
372
+ channel_manager,
373
+ chain_monitor,
374
+ output_sweeper,
375
+ background_sync_config,
376
+ Arc :: clone ( & logger) ,
377
+ )
378
+ . await
405
379
} else {
406
380
// Background syncing is disabled
407
381
log_info ! (
408
- logger, "Background syncing disabled. Manual syncing required for onchain wallet, lightning wallet, and fee rate updates." ,
382
+ logger,
383
+ "Background syncing is disabled. Manual syncing required for onchain wallet, lightning wallet, and fee rate updates." ,
409
384
) ;
410
385
return ;
411
386
}
412
387
} ,
413
- Self :: Electrum { .. } => todo ! ( ) ,
414
388
Self :: BitcoindRpc {
415
389
bitcoind_rpc_client,
416
390
header_cache,
@@ -561,6 +535,65 @@ impl ChainSource {
561
535
}
562
536
}
563
537
538
+ async fn start_tx_based_sync_loop (
539
+ & self , mut stop_sync_receiver : tokio:: sync:: watch:: Receiver < ( ) > ,
540
+ channel_manager : Arc < ChannelManager > , chain_monitor : Arc < ChainMonitor > ,
541
+ output_sweeper : Arc < Sweeper > , background_sync_config : & BackgroundSyncConfig ,
542
+ logger : Arc < Logger > ,
543
+ ) {
544
+ // Setup syncing intervals
545
+ let onchain_wallet_sync_interval_secs = background_sync_config
546
+ . onchain_wallet_sync_interval_secs
547
+ . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
548
+ let mut onchain_wallet_sync_interval =
549
+ tokio:: time:: interval ( Duration :: from_secs ( onchain_wallet_sync_interval_secs) ) ;
550
+ onchain_wallet_sync_interval
551
+ . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
552
+
553
+ let fee_rate_cache_update_interval_secs = background_sync_config
554
+ . fee_rate_cache_update_interval_secs
555
+ . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
556
+ let mut fee_rate_update_interval =
557
+ tokio:: time:: interval ( Duration :: from_secs ( fee_rate_cache_update_interval_secs) ) ;
558
+ // When starting up, we just blocked on updating, so skip the first tick.
559
+ fee_rate_update_interval. reset ( ) ;
560
+ fee_rate_update_interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
561
+
562
+ let lightning_wallet_sync_interval_secs = background_sync_config
563
+ . lightning_wallet_sync_interval_secs
564
+ . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
565
+ let mut lightning_wallet_sync_interval =
566
+ tokio:: time:: interval ( Duration :: from_secs ( lightning_wallet_sync_interval_secs) ) ;
567
+ lightning_wallet_sync_interval
568
+ . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
569
+
570
+ // Start the syncing loop.
571
+ loop {
572
+ tokio:: select! {
573
+ _ = stop_sync_receiver. changed( ) => {
574
+ log_trace!(
575
+ logger,
576
+ "Stopping background syncing on-chain wallet." ,
577
+ ) ;
578
+ return ;
579
+ }
580
+ _ = onchain_wallet_sync_interval. tick( ) => {
581
+ let _ = self . sync_onchain_wallet( ) . await ;
582
+ }
583
+ _ = fee_rate_update_interval. tick( ) => {
584
+ let _ = self . update_fee_rate_estimates( ) . await ;
585
+ }
586
+ _ = lightning_wallet_sync_interval. tick( ) => {
587
+ let _ = self . sync_lightning_wallet(
588
+ Arc :: clone( & channel_manager) ,
589
+ Arc :: clone( & chain_monitor) ,
590
+ Arc :: clone( & output_sweeper) ,
591
+ ) . await ;
592
+ }
593
+ }
594
+ }
595
+ }
596
+
564
597
// Synchronize the onchain wallet via transaction-based protocols (i.e., Esplora, Electrum,
565
598
// etc.)
566
599
pub ( crate ) async fn sync_onchain_wallet ( & self ) -> Result < ( ) , Error > {
0 commit comments