@@ -14,7 +14,6 @@ use crate::config::{
1414 Config , EsploraSyncConfig , BDK_CLIENT_CONCURRENCY , BDK_CLIENT_STOP_GAP ,
1515 BDK_WALLET_SYNC_TIMEOUT_SECS , FEE_RATE_CACHE_UPDATE_TIMEOUT_SECS , LDK_WALLET_SYNC_TIMEOUT_SECS ,
1616 RESOLVED_CHANNEL_MONITOR_ARCHIVAL_INTERVAL , TX_BROADCAST_TIMEOUT_SECS ,
17- WALLET_SYNC_INTERVAL_MINIMUM_SECS ,
1817} ;
1918use crate :: fee_estimator:: {
2019 apply_post_estimation_adjustments, get_all_conf_targets, get_num_block_defaults_for_target,
@@ -208,31 +207,67 @@ impl ChainSource {
208207 match self {
209208 Self :: Esplora { sync_config, logger, .. } => {
210209 // Setup syncing intervals
211- let onchain_wallet_sync_interval_secs = sync_config
212- . onchain_wallet_sync_interval_secs
213- . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
214- let mut onchain_wallet_sync_interval =
215- tokio:: time:: interval ( Duration :: from_secs ( onchain_wallet_sync_interval_secs) ) ;
216- onchain_wallet_sync_interval
217- . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
210+ let mut onchain_wallet_sync_interval = match sync_config. onchain_wallet_sync_interval_secs ( ) {
211+ Some ( secs) => {
212+ log_info ! (
213+ logger,
214+ "Onchain wallet background syncing enabled with interval of {} seconds" ,
215+ secs
216+ ) ;
217+ let mut interval = tokio:: time:: interval ( Duration :: from_secs ( secs) ) ;
218+ interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
219+ Some ( interval)
220+ } ,
221+ None => {
222+ log_info ! (
223+ logger,
224+ "Onchain wallet background syncing disabled. Manual syncing required." ,
225+ ) ;
226+ None
227+ }
228+ } ;
218229
219- let fee_rate_cache_update_interval_secs = sync_config
220- . fee_rate_cache_update_interval_secs
221- . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
222- let mut fee_rate_update_interval =
223- tokio:: time:: interval ( Duration :: from_secs ( fee_rate_cache_update_interval_secs) ) ;
224- // When starting up, we just blocked on updating, so skip the first tick.
225- fee_rate_update_interval. reset ( ) ;
226- fee_rate_update_interval
227- . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
230+ let mut fee_rate_update_interval = match sync_config. fee_rate_cache_update_interval_secs ( ) {
231+ Some ( secs) => {
232+ log_info ! (
233+ logger,
234+ "Fee rate cache background updating enabled with interval of {} seconds" ,
235+ secs
236+ ) ;
237+ let mut interval = tokio:: time:: interval ( Duration :: from_secs ( secs) ) ;
238+ // When starting up, we just blocked on updating, so skip the first tick.
239+ interval. reset ( ) ;
240+ interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
241+ Some ( interval)
242+ } ,
243+ None => {
244+ log_info ! (
245+ logger,
246+ "Fee rate cache background updating disabled. Manual updates required." ,
247+ ) ;
248+ None
249+ }
250+ } ;
228251
229- let lightning_wallet_sync_interval_secs = sync_config
230- . lightning_wallet_sync_interval_secs
231- . max ( WALLET_SYNC_INTERVAL_MINIMUM_SECS ) ;
232- let mut lightning_wallet_sync_interval =
233- tokio:: time:: interval ( Duration :: from_secs ( lightning_wallet_sync_interval_secs) ) ;
234- lightning_wallet_sync_interval
235- . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
252+ let mut lightning_wallet_sync_interval = match sync_config. lightning_wallet_sync_interval_secs ( ) {
253+ Some ( secs) => {
254+ log_info ! (
255+ logger,
256+ "Lightning wallet background syncing enabled with interval of {} seconds" ,
257+ secs
258+ ) ;
259+ let mut interval = tokio:: time:: interval ( Duration :: from_secs ( secs) ) ;
260+ interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
261+ Some ( interval)
262+ } ,
263+ None => {
264+ log_info ! (
265+ logger,
266+ "Lightning wallet background syncing disabled. Manual syncing required." ,
267+ ) ;
268+ None
269+ }
270+ } ;
236271
237272 // Start the syncing loop.
238273 loop {
@@ -244,13 +279,34 @@ impl ChainSource {
244279 ) ;
245280 return ;
246281 }
247- _ = onchain_wallet_sync_interval. tick( ) => {
282+
283+ _ = async {
284+ if let Some ( ref mut interval) = onchain_wallet_sync_interval {
285+ interval. tick( ) . await
286+ } else {
287+ std:: future:: pending:: <tokio:: time:: Instant >( ) . await
288+ }
289+ } , if onchain_wallet_sync_interval. is_some( ) => {
248290 let _ = self . sync_onchain_wallet( ) . await ;
249291 }
250- _ = fee_rate_update_interval. tick( ) => {
292+
293+ _ = async {
294+ if let Some ( ref mut interval) = fee_rate_update_interval {
295+ interval. tick( ) . await
296+ } else {
297+ std:: future:: pending:: <tokio:: time:: Instant >( ) . await
298+ }
299+ } , if fee_rate_update_interval. is_some( ) => {
251300 let _ = self . update_fee_rate_estimates( ) . await ;
252301 }
253- _ = lightning_wallet_sync_interval. tick( ) => {
302+
303+ _ = async {
304+ if let Some ( ref mut interval) = lightning_wallet_sync_interval {
305+ interval. tick( ) . await
306+ } else {
307+ std:: future:: pending:: <tokio:: time:: Instant >( ) . await
308+ }
309+ } , if lightning_wallet_sync_interval. is_some( ) => {
254310 let _ = self . sync_lightning_wallet(
255311 Arc :: clone( & channel_manager) ,
256312 Arc :: clone( & chain_monitor) ,
0 commit comments