@@ -112,7 +112,7 @@ use types::{
112
112
pub use types:: { ChannelDetails , ChannelId , PeerDetails , UserChannelId } ;
113
113
use wallet:: Wallet ;
114
114
115
- use logger:: { log_error, log_info, FilesystemLogger , Logger } ;
115
+ use logger:: { log_error, log_info, log_trace , FilesystemLogger , Logger } ;
116
116
117
117
use lightning:: chain:: keysinterface:: EntropySource ;
118
118
use lightning:: chain:: { chainmonitor, BestBlock , Confirm , Watch } ;
@@ -167,9 +167,15 @@ const BDK_CLIENT_STOP_GAP: usize = 20;
167
167
// The number of concurrent requests made against the API provider.
168
168
const BDK_CLIENT_CONCURRENCY : u8 = 8 ;
169
169
170
+ // The default time in-between LDK wallet sync attempts.
171
+ const DEFAULT_BDK_WALLET_SYNC_INTERVAL_SECS : u64 = 60 ;
172
+
170
173
// The timeout after which we abandon retrying failed payments.
171
174
const LDK_PAYMENT_RETRY_TIMEOUT : Duration = Duration :: from_secs ( 10 ) ;
172
175
176
+ // The default time in-between LDK wallet sync attempts.
177
+ const DEFAULT_LDK_WALLET_SYNC_INTERVAL_SECS : u64 = 20 ;
178
+
173
179
// The time in-between peer reconnection attempts.
174
180
const PEER_RECONNECTION_INTERVAL : Duration = Duration :: from_secs ( 10 ) ;
175
181
@@ -195,6 +201,14 @@ pub struct Config {
195
201
pub listening_address : Option < NetAddress > ,
196
202
/// The default CLTV expiry delta to be used for payments.
197
203
pub default_cltv_expiry_delta : u32 ,
204
+ /// The time in-between background sync attempts of the onchain wallet, in seconds.
205
+ ///
206
+ /// **Note:** A minimum of 10 seconds is always enforced.
207
+ pub onchain_wallet_sync_interval_secs : u64 ,
208
+ /// The time in-between background sync attempts of the LDK wallet, in seconds.
209
+ ///
210
+ /// **Note:** A minimum of 10 seconds is always enforced.
211
+ pub wallet_sync_interval_secs : u64 ,
198
212
/// The level at which we log messages.
199
213
///
200
214
/// Any messages below this level will be excluded from the logs.
@@ -209,6 +223,8 @@ impl Default for Config {
209
223
network : Network :: Regtest ,
210
224
listening_address : Some ( "0.0.0.0:9735" . parse ( ) . unwrap ( ) ) ,
211
225
default_cltv_expiry_delta : 144 ,
226
+ onchain_wallet_sync_interval_secs : DEFAULT_BDK_WALLET_SYNC_INTERVAL_SECS ,
227
+ wallet_sync_interval_secs : DEFAULT_LDK_WALLET_SYNC_INTERVAL_SECS ,
212
228
log_level : LogLevel :: Debug ,
213
229
}
214
230
}
@@ -717,31 +733,38 @@ impl Node {
717
733
718
734
let runtime = tokio:: runtime:: Builder :: new_multi_thread ( ) . enable_all ( ) . build ( ) . unwrap ( ) ;
719
735
720
- let event_handler = Arc :: new ( EventHandler :: new (
721
- Arc :: clone ( & self . wallet ) ,
722
- Arc :: clone ( & self . event_queue ) ,
723
- Arc :: clone ( & self . channel_manager ) ,
724
- Arc :: clone ( & self . network_graph ) ,
725
- Arc :: clone ( & self . keys_manager ) ,
726
- Arc :: clone ( & self . payment_store ) ,
727
- Arc :: clone ( & self . runtime ) ,
728
- Arc :: clone ( & self . logger ) ,
729
- Arc :: clone ( & self . config ) ,
730
- ) ) ;
731
-
732
736
// Setup wallet sync
733
737
let wallet = Arc :: clone ( & self . wallet ) ;
734
- let tx_sync = Arc :: clone ( & self . tx_sync ) ;
735
- let sync_cman = Arc :: clone ( & self . channel_manager ) ;
736
- let sync_cmon = Arc :: clone ( & self . chain_monitor ) ;
737
738
let sync_logger = Arc :: clone ( & self . logger ) ;
738
739
let mut stop_sync = self . stop_receiver . clone ( ) ;
739
740
741
+ runtime. block_on ( async move {
742
+ let now = Instant :: now ( ) ;
743
+ match wallet. sync ( ) . await {
744
+ Ok ( ( ) ) => {
745
+ log_info ! (
746
+ sync_logger,
747
+ "Initial sync of on-chain wallet finished in {}ms." ,
748
+ now. elapsed( ) . as_millis( )
749
+ ) ;
750
+ Ok ( ( ) )
751
+ }
752
+ Err ( e) => {
753
+ log_error ! ( sync_logger, "Initial sync of on-chain wallet failed: {}" , e, ) ;
754
+ Err ( e)
755
+ }
756
+ }
757
+ } ) ?;
758
+
759
+ let sync_logger = Arc :: clone ( & self . logger ) ;
760
+ let wallet = Arc :: clone ( & self . wallet ) ;
740
761
std:: thread:: spawn ( move || {
741
762
tokio:: runtime:: Builder :: new_current_thread ( ) . enable_all ( ) . build ( ) . unwrap ( ) . block_on (
742
763
async move {
743
- let mut interval = tokio:: time:: interval ( Duration :: from_secs ( 30 ) ) ;
764
+ let interval_secs = DEFAULT_BDK_WALLET_SYNC_INTERVAL_SECS . max ( 10 ) ;
765
+ let mut interval = tokio:: time:: interval ( Duration :: from_secs ( interval_secs) ) ;
744
766
interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
767
+ interval. reset ( ) ;
745
768
loop {
746
769
let now = Instant :: now ( ) ;
747
770
tokio:: select! {
@@ -750,7 +773,7 @@ impl Node {
750
773
}
751
774
_ = interval. tick( ) => {
752
775
match wallet. sync( ) . await {
753
- Ok ( ( ) ) => log_info !(
776
+ Ok ( ( ) ) => log_trace !(
754
777
sync_logger,
755
778
"Background sync of on-chain wallet finished in {}ms." ,
756
779
now. elapsed( ) . as_millis( )
@@ -770,6 +793,68 @@ impl Node {
770
793
) ;
771
794
} ) ;
772
795
796
+ let tx_sync = Arc :: clone ( & self . tx_sync ) ;
797
+ let sync_cman = Arc :: clone ( & self . channel_manager ) ;
798
+ let sync_cmon = Arc :: clone ( & self . chain_monitor ) ;
799
+ let sync_logger = Arc :: clone ( & self . logger ) ;
800
+ runtime. block_on ( async move {
801
+ let now = Instant :: now ( ) ;
802
+ let confirmables = vec ! [
803
+ & * sync_cman as & ( dyn Confirm + Sync + Send ) ,
804
+ & * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
805
+ ] ;
806
+ match tx_sync. sync ( confirmables) . await {
807
+ Ok ( ( ) ) => {
808
+ log_info ! (
809
+ sync_logger,
810
+ "Initial sync of Lightning wallet finished in {}ms." ,
811
+ now. elapsed( ) . as_millis( )
812
+ ) ;
813
+ Ok ( ( ) )
814
+ }
815
+ Err ( e) => {
816
+ log_error ! ( sync_logger, "Initial sync of Lightning wallet failed: {}" , e) ;
817
+ Err ( e)
818
+ }
819
+ }
820
+ } ) ?;
821
+
822
+ let tx_sync = Arc :: clone ( & self . tx_sync ) ;
823
+ let sync_cman = Arc :: clone ( & self . channel_manager ) ;
824
+ let sync_cmon = Arc :: clone ( & self . chain_monitor ) ;
825
+ let sync_logger = Arc :: clone ( & self . logger ) ;
826
+ let mut stop_sync = self . stop_receiver . clone ( ) ;
827
+ runtime. spawn ( async move {
828
+ let interval_secs = DEFAULT_LDK_WALLET_SYNC_INTERVAL_SECS . max ( 10 ) ;
829
+ let mut interval = tokio:: time:: interval ( Duration :: from_secs ( interval_secs) ) ;
830
+ interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
831
+ interval. reset ( ) ;
832
+ loop {
833
+ let now = Instant :: now ( ) ;
834
+ tokio:: select! {
835
+ _ = stop_sync. changed( ) => {
836
+ return ;
837
+ }
838
+ _ = interval. tick( ) => {
839
+ let confirmables = vec![
840
+ & * sync_cman as & ( dyn Confirm + Sync + Send ) ,
841
+ & * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
842
+ ] ;
843
+ match tx_sync. sync( confirmables) . await {
844
+ Ok ( ( ) ) => log_trace!(
845
+ sync_logger,
846
+ "Background sync of Lightning wallet finished in {}ms." ,
847
+ now. elapsed( ) . as_millis( )
848
+ ) ,
849
+ Err ( e) => {
850
+ log_error!( sync_logger, "Background sync of Lightning wallet failed: {}" , e)
851
+ }
852
+ }
853
+ }
854
+ }
855
+ }
856
+ } ) ;
857
+
773
858
if self . gossip_source . is_rgs ( ) {
774
859
let gossip_source = Arc :: clone ( & self . gossip_source ) ;
775
860
let gossip_sync_store = Arc :: clone ( & self . kv_store ) ;
@@ -787,7 +872,7 @@ impl Node {
787
872
let now = Instant :: now( ) ;
788
873
match gossip_source. update_rgs_snapshot( ) . await {
789
874
Ok ( updated_timestamp) => {
790
- log_info !(
875
+ log_trace !(
791
876
gossip_sync_logger,
792
877
"Background sync of RGS gossip data finished in {}ms." ,
793
878
now. elapsed( ) . as_millis( )
@@ -811,37 +896,6 @@ impl Node {
811
896
} ) ;
812
897
}
813
898
814
- let sync_logger = Arc :: clone ( & self . logger ) ;
815
- let mut stop_sync = self . stop_receiver . clone ( ) ;
816
- runtime. spawn ( async move {
817
- let mut interval = tokio:: time:: interval ( Duration :: from_secs ( 10 ) ) ;
818
- interval. set_missed_tick_behavior ( tokio:: time:: MissedTickBehavior :: Skip ) ;
819
- loop {
820
- let now = Instant :: now ( ) ;
821
- tokio:: select! {
822
- _ = stop_sync. changed( ) => {
823
- return ;
824
- }
825
- _ = interval. tick( ) => {
826
- let confirmables = vec![
827
- & * sync_cman as & ( dyn Confirm + Sync + Send ) ,
828
- & * sync_cmon as & ( dyn Confirm + Sync + Send ) ,
829
- ] ;
830
- match tx_sync. sync( confirmables) . await {
831
- Ok ( ( ) ) => log_info!(
832
- sync_logger,
833
- "Background sync of Lightning wallet finished in {}ms." ,
834
- now. elapsed( ) . as_millis( )
835
- ) ,
836
- Err ( e) => {
837
- log_error!( sync_logger, "Background sync of Lightning wallet failed: {}" , e)
838
- }
839
- }
840
- }
841
- }
842
- }
843
- } ) ;
844
-
845
899
if let Some ( listening_address) = & self . config . listening_address {
846
900
// Setup networking
847
901
let peer_manager_connection_handler = Arc :: clone ( & self . peer_manager ) ;
@@ -975,6 +1029,18 @@ impl Node {
975
1029
}
976
1030
} ) ;
977
1031
1032
+ let event_handler = Arc :: new ( EventHandler :: new (
1033
+ Arc :: clone ( & self . wallet ) ,
1034
+ Arc :: clone ( & self . event_queue ) ,
1035
+ Arc :: clone ( & self . channel_manager ) ,
1036
+ Arc :: clone ( & self . network_graph ) ,
1037
+ Arc :: clone ( & self . keys_manager ) ,
1038
+ Arc :: clone ( & self . payment_store ) ,
1039
+ Arc :: clone ( & self . runtime ) ,
1040
+ Arc :: clone ( & self . logger ) ,
1041
+ Arc :: clone ( & self . config ) ,
1042
+ ) ) ;
1043
+
978
1044
// Setup background processing
979
1045
let background_persister = Arc :: clone ( & self . kv_store ) ;
980
1046
let background_event_handler = Arc :: clone ( & event_handler) ;
0 commit comments