@@ -60,8 +60,20 @@ impl EsploraClient {
60
60
. ok_or ( EsploraError :: RequestAlreadyConsumed ) ?;
61
61
62
62
let result: BdkFullScanResponse < KeychainKind > =
63
- self . 0
64
- . full_scan ( request, stop_gap as usize , parallel_requests as usize ) ?;
63
+ std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || {
64
+ self . 0
65
+ . full_scan ( request, stop_gap as usize , parallel_requests as usize )
66
+ } ) )
67
+ . map_err ( |payload| {
68
+ let error_message = payload
69
+ . downcast_ref :: < String > ( )
70
+ . map ( String :: as_str)
71
+ . or_else ( || payload. downcast_ref :: < & str > ( ) . copied ( ) )
72
+ . unwrap_or ( "panic in esplora client" )
73
+ . to_string ( ) ;
74
+
75
+ EsploraError :: Parsing { error_message }
76
+ } ) ??;
65
77
66
78
let update = BdkUpdate {
67
79
last_active_indices : result. last_active_indices ,
@@ -90,7 +102,20 @@ impl EsploraClient {
90
102
. take ( )
91
103
. ok_or ( EsploraError :: RequestAlreadyConsumed ) ?;
92
104
93
- let result: BdkSyncResponse = self . 0 . sync ( request, parallel_requests as usize ) ?;
105
+ let result: BdkSyncResponse =
106
+ std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || {
107
+ self . 0 . sync ( request, parallel_requests as usize )
108
+ } ) )
109
+ . map_err ( |payload| {
110
+ let error_message = payload
111
+ . downcast_ref :: < String > ( )
112
+ . map ( String :: as_str)
113
+ . or_else ( || payload. downcast_ref :: < & str > ( ) . copied ( ) )
114
+ . unwrap_or ( "panic in esplora client" )
115
+ . to_string ( ) ;
116
+
117
+ EsploraError :: Parsing { error_message }
118
+ } ) ??;
94
119
95
120
let update = BdkUpdate {
96
121
last_active_indices : BTreeMap :: default ( ) ,
0 commit comments