@@ -118,7 +118,7 @@ use types::{
118
118
pub use types:: { ChannelDetails , ChannelId , PeerDetails , UserChannelId } ;
119
119
use wallet:: Wallet ;
120
120
121
- use logger:: { log_error, log_info, FilesystemLogger , Logger } ;
121
+ use logger:: { log_error, log_info, log_trace , FilesystemLogger , Logger } ;
122
122
123
123
use lightning:: chain:: keysinterface:: EntropySource ;
124
124
use lightning:: chain:: { chainmonitor, BestBlock , Confirm , Watch } ;
@@ -173,6 +173,8 @@ const DEFAULT_STORAGE_DIR_PATH: &str = "/tmp/ldk_node/";
173
173
const DEFAULT_NETWORK : Network = Network :: Bitcoin ;
174
174
const DEFAULT_LISTENING_ADDR : & str = "0.0.0.0:9735" ;
175
175
const DEFAULT_CLTV_EXPIRY_DELTA : u32 = 144 ;
176
+ const DEFAULT_BDK_WALLET_SYNC_INTERVAL_SECS : u64 = 60 ;
177
+ const DEFAULT_LDK_WALLET_SYNC_INTERVAL_SECS : u64 = 20 ;
176
178
const DEFAULT_LOG_LEVEL : LogLevel = LogLevel :: Debug ;
177
179
178
180
// The 'stop gap' parameter used by BDK's wallet sync. This seems to configure the threshold
@@ -205,13 +207,15 @@ const WALLET_KEYS_SEED_LEN: usize = 64;
205
207
///
206
208
/// ### Defaults
207
209
///
208
- /// | Parameter | Value |
209
- /// |-----------------------------|------------------|
210
- /// | `storage_dir_path` | /tmp/ldk_node/ |
211
- /// | `network` | `Bitcoin` |
212
- /// | `listening_address` | 0.0.0.0:9735 |
213
- /// | `default_cltv_expiry_delta` | 144 |
214
- /// | `log_level` | `Debug` |
210
+ /// | Parameter | Value |
211
+ /// |----------------------------------------|------------------|
212
+ /// | `storage_dir_path` | /tmp/ldk_node/ |
213
+ /// | `network` | `Bitcoin |
214
+ /// | `listening_address` | 0.0.0.0:9735 |
215
+ /// | `default_cltv_expiry_delta` | 144 |
216
+ /// | `onchain_wallet_sync_interval_secs` | 60 |
217
+ /// | `wallet_sync_interval_secs` | 20 |
218
+ /// | `log_level` | `Debug` |
215
219
///
216
220
pub struct Config {
217
221
/// The path where the underlying LDK and BDK persist their data.
@@ -222,6 +226,14 @@ pub struct Config {
222
226
pub listening_address : Option < NetAddress > ,
223
227
/// The default CLTV expiry delta to be used for payments.
224
228
pub default_cltv_expiry_delta : u32 ,
229
+ /// The time in-between background sync attempts of the onchain wallet, in seconds.
230
+ ///
231
+ /// **Note:** A minimum of 10 seconds is always enforced.
232
+ pub onchain_wallet_sync_interval_secs : u64 ,
233
+ /// The time in-between background sync attempts of the LDK wallet, in seconds.
234
+ ///
235
+ /// **Note:** A minimum of 10 seconds is always enforced.
236
+ pub wallet_sync_interval_secs : u64 ,
225
237
/// The level at which we log messages.
226
238
///
227
239
/// Any messages below this level will be excluded from the logs.
@@ -235,6 +247,8 @@ impl Default for Config {
235
247
network : DEFAULT_NETWORK ,
236
248
listening_address : Some ( DEFAULT_LISTENING_ADDR . parse ( ) . unwrap ( ) ) ,
237
249
default_cltv_expiry_delta : DEFAULT_CLTV_EXPIRY_DELTA ,
250
+ onchain_wallet_sync_interval_secs : DEFAULT_BDK_WALLET_SYNC_INTERVAL_SECS ,
251
+ wallet_sync_interval_secs : DEFAULT_LDK_WALLET_SYNC_INTERVAL_SECS ,
238
252
log_level : DEFAULT_LOG_LEVEL ,
239
253
}
240
254
}
@@ -770,26 +784,27 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
770
784
771
785
// Setup wallet sync
772
786
let wallet = Arc :: clone ( & self . wallet ) ;
773
- let tx_sync = Arc :: clone ( & self . tx_sync ) ;
774
- let sync_cman = Arc :: clone ( & self . channel_manager ) ;
775
- let sync_cmon = Arc :: clone ( & self . chain_monitor ) ;
776
787
let sync_logger = Arc :: clone ( & self . logger ) ;
777
788
let mut stop_sync = self . stop_receiver . clone ( ) ;
778
-
789
+ let onchain_wallet_sync_interval_secs =
790
+ self . config . onchain_wallet_sync_interval_secs . max ( 10 ) ;
779
791
std:: thread:: spawn ( move || {
780
792
tokio:: runtime:: Builder :: new_current_thread ( ) . enable_all ( ) . build ( ) . unwrap ( ) . block_on (
781
793
async move {
782
- let mut interval = tokio:: time:: interval ( Duration :: from_secs ( 30 ) ) ;
783
- interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
794
+ let mut onchain_wallet_sync_interval = tokio:: time:: interval (
795
+ Duration :: from_secs ( onchain_wallet_sync_interval_secs) ,
796
+ ) ;
797
+ onchain_wallet_sync_interval
798
+ . set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
784
799
loop {
785
800
let now = Instant :: now ( ) ;
786
801
tokio:: select! {
787
802
_ = stop_sync. changed( ) => {
788
803
return ;
789
804
}
790
- _ = interval . tick( ) => {
805
+ _ = onchain_wallet_sync_interval . tick( ) => {
791
806
match wallet. sync( ) . await {
792
- Ok ( ( ) ) => log_info !(
807
+ Ok ( ( ) ) => log_trace !(
793
808
sync_logger,
794
809
"Background sync of on-chain wallet finished in {}ms." ,
795
810
now. elapsed( ) . as_millis( )
@@ -809,6 +824,42 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
809
824
) ;
810
825
} ) ;
811
826
827
+ let tx_sync = Arc :: clone ( & self . tx_sync ) ;
828
+ let sync_cman = Arc :: clone ( & self . channel_manager ) ;
829
+ let sync_cmon = Arc :: clone ( & self . chain_monitor ) ;
830
+ let sync_logger = Arc :: clone ( & self . logger ) ;
831
+ let mut stop_sync = self . stop_receiver . clone ( ) ;
832
+ let wallet_sync_interval_secs = self . config . wallet_sync_interval_secs . max ( 10 ) ;
833
+ runtime. spawn ( async move {
834
+ let mut wallet_sync_interval =
835
+ tokio:: time:: interval ( Duration :: from_secs ( wallet_sync_interval_secs) ) ;
836
+ wallet_sync_interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
837
+ loop {
838
+ let now = Instant :: now ( ) ;
839
+ tokio:: select! {
840
+ _ = stop_sync. changed( ) => {
841
+ return ;
842
+ }
843
+ _ = wallet_sync_interval. tick( ) => {
844
+ let confirmables = vec![
845
+ & * sync_cman as & ( dyn Confirm + Sync + Send ) ,
846
+ & * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
847
+ ] ;
848
+ match tx_sync. sync( confirmables) . await {
849
+ Ok ( ( ) ) => log_trace!(
850
+ sync_logger,
851
+ "Background sync of Lightning wallet finished in {}ms." ,
852
+ now. elapsed( ) . as_millis( )
853
+ ) ,
854
+ Err ( e) => {
855
+ log_error!( sync_logger, "Background sync of Lightning wallet failed: {}" , e)
856
+ }
857
+ }
858
+ }
859
+ }
860
+ }
861
+ } ) ;
862
+
812
863
if self . gossip_source . is_rgs ( ) {
813
864
let gossip_source = Arc :: clone ( & self . gossip_source ) ;
814
865
let gossip_sync_store = Arc :: clone ( & self . kv_store ) ;
@@ -826,7 +877,7 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
826
877
let now = Instant :: now( ) ;
827
878
match gossip_source. update_rgs_snapshot( ) . await {
828
879
Ok ( updated_timestamp) => {
829
- log_info !(
880
+ log_trace !(
830
881
gossip_sync_logger,
831
882
"Background sync of RGS gossip data finished in {}ms." ,
832
883
now. elapsed( ) . as_millis( )
@@ -850,37 +901,6 @@ impl<K: KVStore + Sync + Send + 'static> Node<K> {
850
901
} ) ;
851
902
}
852
903
853
- let sync_logger = Arc :: clone ( & self . logger ) ;
854
- let mut stop_sync = self . stop_receiver . clone ( ) ;
855
- runtime. spawn ( async move {
856
- let mut interval = tokio:: time:: interval ( Duration :: from_secs ( 10 ) ) ;
857
- interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
858
- loop {
859
- let now = Instant :: now ( ) ;
860
- tokio:: select! {
861
- _ = stop_sync. changed( ) => {
862
- return ;
863
- }
864
- _ = interval. tick( ) => {
865
- let confirmables = vec![
866
- & * sync_cman as & ( dyn Confirm + Sync + Send ) ,
867
- & * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
868
- ] ;
869
- match tx_sync. sync( confirmables) . await {
870
- Ok ( ( ) ) => log_info!(
871
- sync_logger,
872
- "Background sync of Lightning wallet finished in {}ms." ,
873
- now. elapsed( ) . as_millis( )
874
- ) ,
875
- Err ( e) => {
876
- log_error!( sync_logger, "Background sync of Lightning wallet failed: {}" , e)
877
- }
878
- }
879
- }
880
- }
881
- }
882
- } ) ;
883
-
884
904
if let Some ( listening_address) = & self . config . listening_address {
885
905
// Setup networking
886
906
let peer_manager_connection_handler = Arc :: clone ( & self . peer_manager ) ;
0 commit comments