@@ -103,16 +103,6 @@ impl ElectrumChainSource {
103
103
}
104
104
105
105
pub ( crate ) async fn sync_onchain_wallet ( & self ) -> Result < ( ) , Error > {
106
- let electrum_client: Arc < ElectrumRuntimeClient > =
107
- if let Some ( client) = self . electrum_runtime_status . read ( ) . unwrap ( ) . client ( ) . as_ref ( ) {
108
- Arc :: clone ( client)
109
- } else {
110
- debug_assert ! (
111
- false ,
112
- "We should have started the chain source before syncing the onchain wallet"
113
- ) ;
114
- return Err ( Error :: FeerateEstimationUpdateFailed ) ;
115
- } ;
116
106
let receiver_res = {
117
107
let mut status_lock = self . onchain_wallet_sync_status . lock ( ) . unwrap ( ) ;
118
108
status_lock. register_or_subscribe_pending_sync ( )
@@ -126,6 +116,24 @@ impl ElectrumChainSource {
126
116
} ) ?;
127
117
}
128
118
119
+ let res = self . sync_onchain_wallet_inner ( ) . await ;
120
+
121
+ self . onchain_wallet_sync_status . lock ( ) . unwrap ( ) . propagate_result_to_subscribers ( res) ;
122
+
123
+ res
124
+ }
125
+
126
+ async fn sync_onchain_wallet_inner ( & self ) -> Result < ( ) , Error > {
127
+ let electrum_client: Arc < ElectrumRuntimeClient > =
128
+ if let Some ( client) = self . electrum_runtime_status . read ( ) . unwrap ( ) . client ( ) . as_ref ( ) {
129
+ Arc :: clone ( client)
130
+ } else {
131
+ debug_assert ! (
132
+ false ,
133
+ "We should have started the chain source before syncing the onchain wallet"
134
+ ) ;
135
+ return Err ( Error :: FeerateEstimationUpdateFailed ) ;
136
+ } ;
129
137
// If this is our first sync, do a full scan with the configured gap limit.
130
138
// Otherwise just do an incremental sync.
131
139
let incremental_sync =
@@ -179,35 +187,13 @@ impl ElectrumChainSource {
179
187
apply_wallet_update ( update_res, now)
180
188
} ;
181
189
182
- self . onchain_wallet_sync_status . lock ( ) . unwrap ( ) . propagate_result_to_subscribers ( res) ;
183
-
184
190
res
185
191
}
186
192
187
193
pub ( crate ) async fn sync_lightning_wallet (
188
194
& self , channel_manager : Arc < ChannelManager > , chain_monitor : Arc < ChainMonitor > ,
189
195
output_sweeper : Arc < Sweeper > ,
190
196
) -> Result < ( ) , Error > {
191
- let electrum_client: Arc < ElectrumRuntimeClient > =
192
- if let Some ( client) = self . electrum_runtime_status . read ( ) . unwrap ( ) . client ( ) . as_ref ( ) {
193
- Arc :: clone ( client)
194
- } else {
195
- debug_assert ! (
196
- false ,
197
- "We should have started the chain source before syncing the lightning wallet"
198
- ) ;
199
- return Err ( Error :: TxSyncFailed ) ;
200
- } ;
201
-
202
- let sync_cman = Arc :: clone ( & channel_manager) ;
203
- let sync_cmon = Arc :: clone ( & chain_monitor) ;
204
- let sync_sweeper = Arc :: clone ( & output_sweeper) ;
205
- let confirmables = vec ! [
206
- sync_cman as Arc <dyn Confirm + Sync + Send >,
207
- sync_cmon as Arc <dyn Confirm + Sync + Send >,
208
- sync_sweeper as Arc <dyn Confirm + Sync + Send >,
209
- ] ;
210
-
211
197
let receiver_res = {
212
198
let mut status_lock = self . lightning_wallet_sync_status . lock ( ) . unwrap ( ) ;
213
199
status_lock. register_or_subscribe_pending_sync ( )
@@ -221,6 +207,38 @@ impl ElectrumChainSource {
221
207
} ) ?;
222
208
}
223
209
210
+ let res =
211
+ self . sync_lightning_wallet_inner ( channel_manager, chain_monitor, output_sweeper) . await ;
212
+
213
+ self . lightning_wallet_sync_status . lock ( ) . unwrap ( ) . propagate_result_to_subscribers ( res) ;
214
+
215
+ res
216
+ }
217
+
218
+ async fn sync_lightning_wallet_inner (
219
+ & self , channel_manager : Arc < ChannelManager > , chain_monitor : Arc < ChainMonitor > ,
220
+ output_sweeper : Arc < Sweeper > ,
221
+ ) -> Result < ( ) , Error > {
222
+ let sync_cman = Arc :: clone ( & channel_manager) ;
223
+ let sync_cmon = Arc :: clone ( & chain_monitor) ;
224
+ let sync_sweeper = Arc :: clone ( & output_sweeper) ;
225
+ let confirmables = vec ! [
226
+ sync_cman as Arc <dyn Confirm + Sync + Send >,
227
+ sync_cmon as Arc <dyn Confirm + Sync + Send >,
228
+ sync_sweeper as Arc <dyn Confirm + Sync + Send >,
229
+ ] ;
230
+
231
+ let electrum_client: Arc < ElectrumRuntimeClient > =
232
+ if let Some ( client) = self . electrum_runtime_status . read ( ) . unwrap ( ) . client ( ) . as_ref ( ) {
233
+ Arc :: clone ( client)
234
+ } else {
235
+ debug_assert ! (
236
+ false ,
237
+ "We should have started the chain source before syncing the lightning wallet"
238
+ ) ;
239
+ return Err ( Error :: TxSyncFailed ) ;
240
+ } ;
241
+
224
242
let res = electrum_client. sync_confirmables ( confirmables) . await ;
225
243
226
244
if let Ok ( _) = res {
@@ -245,8 +263,6 @@ impl ElectrumChainSource {
245
263
) ?;
246
264
}
247
265
248
- self . lightning_wallet_sync_status . lock ( ) . unwrap ( ) . propagate_result_to_subscribers ( res) ;
249
-
250
266
res
251
267
}
252
268
0 commit comments