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