@@ -13,10 +13,10 @@ use crate::chain::bitcoind_rpc::{
1313} ;
1414use crate :: chain:: electrum:: ElectrumRuntimeClient ;
1515use 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 ,
2020} ;
2121use crate :: fee_estimator:: {
2222 apply_post_estimation_adjustments, get_all_conf_targets, get_num_block_defaults_for_target,
@@ -304,67 +304,18 @@ impl ChainSource {
304304 channel_manager : Arc < ChannelManager > , chain_monitor : Arc < ChainMonitor > ,
305305 output_sweeper : Arc < Sweeper > ,
306306 ) {
307- macro_rules! start_tx_based_sync_loop {
308- ( $background_sync_config: expr, $logger: expr) => { {
309- // Setup syncing intervals
310- let onchain_wallet_sync_interval_secs = $background_sync_config
311- . onchain_wallet_sync_interval_secs
312- . max( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
313- let mut onchain_wallet_sync_interval =
314- tokio:: time:: interval( Duration :: from_secs( onchain_wallet_sync_interval_secs) ) ;
315- onchain_wallet_sync_interval
316- . set_missed_tick_behavior( tokio:: time:: MissedTickBehavior :: Skip ) ;
317-
318- let fee_rate_cache_update_interval_secs = $background_sync_config
319- . fee_rate_cache_update_interval_secs
320- . max( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
321- let mut fee_rate_update_interval =
322- tokio:: time:: interval( Duration :: from_secs( fee_rate_cache_update_interval_secs) ) ;
323- // When starting up, we just blocked on updating, so skip the first tick.
324- fee_rate_update_interval. reset( ) ;
325- fee_rate_update_interval
326- . set_missed_tick_behavior( tokio:: time:: MissedTickBehavior :: Skip ) ;
327-
328- let lightning_wallet_sync_interval_secs = $background_sync_config
329- . lightning_wallet_sync_interval_secs
330- . max( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
331- let mut lightning_wallet_sync_interval =
332- tokio:: time:: interval( Duration :: from_secs( lightning_wallet_sync_interval_secs) ) ;
333- lightning_wallet_sync_interval
334- . set_missed_tick_behavior( tokio:: time:: MissedTickBehavior :: Skip ) ;
335-
336- // Start the syncing loop.
337- loop {
338- tokio:: select! {
339- _ = stop_sync_receiver. changed( ) => {
340- log_trace!(
341- $logger,
342- "Stopping background syncing on-chain wallet." ,
343- ) ;
344- return ;
345- }
346- _ = onchain_wallet_sync_interval. tick( ) => {
347- let _ = self . sync_onchain_wallet( ) . await ;
348- }
349- _ = fee_rate_update_interval. tick( ) => {
350- let _ = self . update_fee_rate_estimates( ) . await ;
351- }
352- _ = lightning_wallet_sync_interval. tick( ) => {
353- let _ = self . sync_lightning_wallet(
354- Arc :: clone( & channel_manager) ,
355- Arc :: clone( & chain_monitor) ,
356- Arc :: clone( & output_sweeper) ,
357- ) . await ;
358- }
359- }
360- }
361- } } ;
362- }
363-
364307 match self {
365308 Self :: Esplora { sync_config, logger, .. } => {
366309 if let Some ( background_sync_config) = sync_config. background_sync_config . as_ref ( ) {
367- start_tx_based_sync_loop ! ( background_sync_config, logger)
310+ self . start_tx_based_sync_loop (
311+ stop_sync_receiver,
312+ channel_manager,
313+ chain_monitor,
314+ output_sweeper,
315+ background_sync_config,
316+ Arc :: clone ( & logger) ,
317+ )
318+ . await
368319 } else {
369320 // Background syncing is disabled
370321 log_info ! (
@@ -376,7 +327,15 @@ impl ChainSource {
376327 } ,
377328 Self :: Electrum { sync_config, logger, .. } => {
378329 if let Some ( background_sync_config) = sync_config. background_sync_config . as_ref ( ) {
379- start_tx_based_sync_loop ! ( background_sync_config, logger)
330+ self . start_tx_based_sync_loop (
331+ stop_sync_receiver,
332+ channel_manager,
333+ chain_monitor,
334+ output_sweeper,
335+ background_sync_config,
336+ Arc :: clone ( & logger) ,
337+ )
338+ . await
380339 } else {
381340 // Background syncing is disabled
382341 log_info ! (
@@ -536,6 +495,65 @@ impl ChainSource {
536495 }
537496 }
538497
498+ async fn start_tx_based_sync_loop (
499+ & self , mut stop_sync_receiver : tokio:: sync:: watch:: Receiver < ( ) > ,
500+ channel_manager : Arc < ChannelManager > , chain_monitor : Arc < ChainMonitor > ,
501+ output_sweeper : Arc < Sweeper > , background_sync_config : & BackgroundSyncConfig ,
502+ logger : Arc < Logger > ,
503+ ) {
504+ // Setup syncing intervals
505+ let onchain_wallet_sync_interval_secs = background_sync_config
506+ . onchain_wallet_sync_interval_secs
507+ . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
508+ let mut onchain_wallet_sync_interval =
509+ tokio:: time:: interval ( Duration :: from_secs ( onchain_wallet_sync_interval_secs) ) ;
510+ onchain_wallet_sync_interval
511+ . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
512+
513+ let fee_rate_cache_update_interval_secs = background_sync_config
514+ . fee_rate_cache_update_interval_secs
515+ . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
516+ let mut fee_rate_update_interval =
517+ tokio:: time:: interval ( Duration :: from_secs ( fee_rate_cache_update_interval_secs) ) ;
518+ // When starting up, we just blocked on updating, so skip the first tick.
519+ fee_rate_update_interval. reset ( ) ;
520+ fee_rate_update_interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
521+
522+ let lightning_wallet_sync_interval_secs = background_sync_config
523+ . lightning_wallet_sync_interval_secs
524+ . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
525+ let mut lightning_wallet_sync_interval =
526+ tokio:: time:: interval ( Duration :: from_secs ( lightning_wallet_sync_interval_secs) ) ;
527+ lightning_wallet_sync_interval
528+ . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
529+
530+ // Start the syncing loop.
531+ loop {
532+ tokio:: select! {
533+ _ = stop_sync_receiver. changed( ) => {
534+ log_trace!(
535+ logger,
536+ "Stopping background syncing on-chain wallet." ,
537+ ) ;
538+ return ;
539+ }
540+ _ = onchain_wallet_sync_interval. tick( ) => {
541+ let _ = self . sync_onchain_wallet( ) . await ;
542+ }
543+ _ = fee_rate_update_interval. tick( ) => {
544+ let _ = self . update_fee_rate_estimates( ) . await ;
545+ }
546+ _ = lightning_wallet_sync_interval. tick( ) => {
547+ let _ = self . sync_lightning_wallet(
548+ Arc :: clone( & channel_manager) ,
549+ Arc :: clone( & chain_monitor) ,
550+ Arc :: clone( & output_sweeper) ,
551+ ) . await ;
552+ }
553+ }
554+ }
555+ }
556+
539557 // Synchronize the onchain wallet via transaction-based protocols (i.e., Esplora, Electrum,
540558 // etc.)
541559 pub ( crate ) async fn sync_onchain_wallet ( & self ) -> Result < ( ) , Error > {
0 commit comments