@@ -103,16 +103,6 @@ impl ElectrumChainSource {
103103 }
104104
105105 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- } ;
116106 let receiver_res = {
117107 let mut status_lock = self . onchain_wallet_sync_status . lock ( ) . unwrap ( ) ;
118108 status_lock. register_or_subscribe_pending_sync ( )
@@ -126,6 +116,24 @@ impl ElectrumChainSource {
126116 } ) ?;
127117 }
128118
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+ } ;
129137 // If this is our first sync, do a full scan with the configured gap limit.
130138 // Otherwise just do an incremental sync.
131139 let incremental_sync =
@@ -179,35 +187,13 @@ impl ElectrumChainSource {
179187 apply_wallet_update ( update_res, now)
180188 } ;
181189
182- self . onchain_wallet_sync_status . lock ( ) . unwrap ( ) . propagate_result_to_subscribers ( res) ;
183-
184190 res
185191 }
186192
187193 pub ( crate ) async fn sync_lightning_wallet (
188194 & self , channel_manager : Arc < ChannelManager > , chain_monitor : Arc < ChainMonitor > ,
189195 output_sweeper : Arc < Sweeper > ,
190196 ) -> 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-
211197 let receiver_res = {
212198 let mut status_lock = self . lightning_wallet_sync_status . lock ( ) . unwrap ( ) ;
213199 status_lock. register_or_subscribe_pending_sync ( )
@@ -221,6 +207,38 @@ impl ElectrumChainSource {
221207 } ) ?;
222208 }
223209
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+
224242 let res = electrum_client. sync_confirmables ( confirmables) . await ;
225243
226244 if let Ok ( _) = res {
@@ -245,8 +263,6 @@ impl ElectrumChainSource {
245263 ) ?;
246264 }
247265
248- self . lightning_wallet_sync_status . lock ( ) . unwrap ( ) . propagate_result_to_subscribers ( res) ;
249-
250266 res
251267 }
252268
0 commit comments