@@ -2,7 +2,7 @@ use crate::error::{TxSyncError, InternalError};
2
2
use crate :: common:: { SyncState , FilterQueue , ConfirmedTx } ;
3
3
4
4
use lightning:: util:: logger:: Logger ;
5
- use lightning:: { log_error, log_info , log_debug, log_trace} ;
5
+ use lightning:: { log_error, log_debug, log_trace} ;
6
6
use lightning:: chain:: WatchedOutput ;
7
7
use lightning:: chain:: { Confirm , Filter } ;
8
8
@@ -14,6 +14,7 @@ use esplora_client::r#async::AsyncClient;
14
14
#[ cfg( not( feature = "async-interface" ) ) ]
15
15
use esplora_client:: blocking:: BlockingClient ;
16
16
17
+ use std:: time:: Instant ;
17
18
use std:: collections:: HashSet ;
18
19
use core:: ops:: Deref ;
19
20
89
90
#[ cfg( feature = "async-interface" ) ]
90
91
let mut sync_state = self . sync_state . lock ( ) . await ;
91
92
92
- log_info ! ( self . logger, "Starting transaction sync." ) ;
93
+ log_trace ! ( self . logger, "Starting transaction sync." ) ;
94
+ let start_time = Instant :: now ( ) ;
95
+ let mut num_confirmed = 0 ;
96
+ let mut num_unconfirmed = 0 ;
93
97
94
98
let mut tip_hash = maybe_await ! ( self . client. get_tip_hash( ) ) ?;
95
99
@@ -113,14 +117,21 @@ where
113
117
let check_tip_hash = maybe_await ! ( self . client. get_tip_hash( ) ) ?;
114
118
if check_tip_hash != tip_hash {
115
119
tip_hash = check_tip_hash;
120
+
121
+ log_debug ! ( self . logger, "Encountered inconsistency during transaction sync, restarting." ) ;
122
+ sync_state. pending_sync = true ;
116
123
continue ;
117
124
}
118
-
125
+ num_unconfirmed += unconfirmed_txs . len ( ) ;
119
126
self . sync_unconfirmed_transactions ( & mut sync_state, & confirmables, unconfirmed_txs) ;
120
127
} ,
121
128
Err ( err) => {
122
129
// (Semi-)permanent failure, retry later.
123
- log_error ! ( self . logger, "Failed during transaction sync, aborting." ) ;
130
+ log_error ! ( self . logger,
131
+ "Failed during transaction sync, aborting. Synced so far: {} confirmed, {} unconfirmed." ,
132
+ num_confirmed,
133
+ num_unconfirmed
134
+ ) ;
124
135
sync_state. pending_sync = true ;
125
136
return Err ( TxSyncError :: from ( err) ) ;
126
137
}
@@ -136,6 +147,11 @@ where
136
147
}
137
148
Err ( err) => {
138
149
// (Semi-)permanent failure, retry later.
150
+ log_error ! ( self . logger,
151
+ "Failed during transaction sync, aborting. Synced so far: {} confirmed, {} unconfirmed." ,
152
+ num_confirmed,
153
+ num_unconfirmed
154
+ ) ;
139
155
sync_state. pending_sync = true ;
140
156
return Err ( TxSyncError :: from ( err) ) ;
141
157
}
@@ -152,6 +168,7 @@ where
152
168
continue ;
153
169
}
154
170
171
+ num_confirmed += confirmed_txs. len ( ) ;
155
172
self . sync_confirmed_transactions (
156
173
& mut sync_state,
157
174
& confirmables,
@@ -166,7 +183,11 @@ where
166
183
}
167
184
Err ( err) => {
168
185
// (Semi-)permanent failure, retry later.
169
- log_error ! ( self . logger, "Failed during transaction sync, aborting." ) ;
186
+ log_error ! ( self . logger,
187
+ "Failed during transaction sync, aborting. Synced so far: {} confirmed, {} unconfirmed." ,
188
+ num_confirmed,
189
+ num_unconfirmed
190
+ ) ;
170
191
sync_state. pending_sync = true ;
171
192
return Err ( TxSyncError :: from ( err) ) ;
172
193
}
@@ -175,7 +196,8 @@ where
175
196
sync_state. pending_sync = false ;
176
197
}
177
198
}
178
- log_info ! ( self . logger, "Finished transaction sync." ) ;
199
+ log_debug ! ( self . logger, "Finished transaction sync at tip {} in {}ms: {} confirmed, {} unconfirmed." ,
200
+ tip_hash, start_time. elapsed( ) . as_millis( ) , num_confirmed, num_unconfirmed) ;
179
201
Ok ( ( ) )
180
202
}
181
203
@@ -286,7 +308,7 @@ where
286
308
return Err ( InternalError :: Failed ) ;
287
309
}
288
310
289
- let pos = * indexes. get ( 0 ) . ok_or ( InternalError :: Failed ) ? as usize ;
311
+ let pos = * indexes. first ( ) . unwrap ( ) as usize ;
290
312
if let Some ( tx) = maybe_await ! ( self . client. get_tx( & txid) ) ? {
291
313
if let Some ( block_height) = known_block_height {
292
314
// We can take a shortcut here if a previous call already gave us the height.
0 commit comments