@@ -136,39 +136,50 @@ export default async function gtcrBot() {
136136 // The ItemStatusChange event is emitted when a request is resolved
137137 // and contain the status of the request, so we can use it
138138 // to separate requests into resolved and not resolved.
139- const [
140- requestSubmittedEvents ,
141- itemStatusChangeEvents ,
142- challengePeriodDuration ,
143- ] = await Promise . all ( [
144- (
145- await Promise . all (
146- intervals . map ( async ( interval ) =>
147- provider . getLogs ( {
148- ...tcr . filters . RequestSubmitted ( ) ,
149- ...interval ,
150- } )
139+ let requestSubmittedEvents ;
140+ let itemStatusChangeEvents : any ;
141+ let challengePeriodDuration ;
142+ try {
143+ [
144+ requestSubmittedEvents ,
145+ itemStatusChangeEvents ,
146+ challengePeriodDuration ,
147+ ] = await Promise . all ( [
148+ (
149+ await Promise . all (
150+ intervals . map ( async ( interval ) =>
151+ provider . getLogs ( {
152+ ...tcr . filters . RequestSubmitted ( ) ,
153+ ...interval ,
154+ } )
155+ )
151156 )
152157 )
153- )
154- . reduce ( ( acc , curr ) => [ ... acc , ... curr ] )
155- . map ( ( rawEvent ) => tcr . interface . parseLog ( rawEvent ) ) ,
156-
157- (
158- await Promise . all (
159- intervals . map ( async ( interval ) =>
160- provider . getLogs ( {
161- ...tcr . filters . ItemStatusChange ( ) ,
162- ... interval ,
163- } )
158+ . reduce ( ( acc , curr ) => [ ... acc , ... curr ] )
159+ . map ( ( rawEvent ) => tcr . interface . parseLog ( rawEvent ) ) ,
160+
161+ (
162+ await Promise . all (
163+ intervals . map ( async ( interval ) =>
164+ provider . getLogs ( {
165+ ... tcr . filters . ItemStatusChange ( ) ,
166+ ...interval ,
167+ } )
168+ )
164169 )
165170 )
166- )
167- . reduce ( ( acc , curr ) => [ ...acc , ...curr ] )
168- . map ( ( rawEvent ) => tcr . interface . parseLog ( rawEvent ) ) ,
169-
170- tcr . challengePeriodDuration ( ) ,
171- ] ) ;
171+ . reduce ( ( acc , curr ) => [ ...acc , ...curr ] )
172+ . map ( ( rawEvent ) => tcr . interface . parseLog ( rawEvent ) ) ,
173+
174+ tcr . challengePeriodDuration ( ) ,
175+ ] ) ;
176+ } catch ( error ) {
177+ console . error (
178+ `Error fetching events and challenge period duration` ,
179+ error
180+ ) ;
181+ continue ;
182+ }
172183
173184 // Pending requests never had a ItemStatusChange event
174185 // emitted with the _resolved field set to true.
@@ -193,13 +204,22 @@ export default async function gtcrBot() {
193204 ) ;
194205 pendingRequestCount ++ ;
195206
207+ let submissionTime , disputed , resolved ;
196208 const {
197209 args : { _itemID, _requestIndex } ,
198210 } = pendingRequest ;
199- const { submissionTime, disputed, resolved } = await tcr . getRequestInfo (
200- _itemID ,
201- _requestIndex
202- ) ;
211+ try {
212+ const response = await tcr . getRequestInfo ( _itemID , _requestIndex ) ;
213+ submissionTime = response . submissionTime ;
214+ disputed = response . disputed ;
215+ resolved = response . resolved ;
216+ } catch ( error ) {
217+ console . error (
218+ `Failed to get request ${ _requestIndex } for ${ _itemID } @${ tcr . address } ` ,
219+ error
220+ ) ;
221+ continue ;
222+ }
203223 if ( disputed ) continue ; // There is an ongoing dispute. No-op.
204224 if ( resolved ) continue ; // Someone already executed it.
205225
@@ -213,10 +233,18 @@ export default async function gtcrBot() {
213233 ` Found executable request for item of ID ${ _itemID } of TCR at ${ tcr . address } `
214234 ) ;
215235 console . info ( " Executing it." . cyan ) ;
216- await tcr . executeRequest ( _itemID , {
217- nonce,
218- } ) ;
219- nonce ++ ;
236+ try {
237+ await tcr . executeRequest ( _itemID , {
238+ nonce,
239+ } ) ;
240+ nonce ++ ;
241+ } catch ( error ) {
242+ console . error (
243+ `Error executing request for itemID ${ _itemID } @${ tcr . address } ` ,
244+ error
245+ ) ;
246+ continue ;
247+ }
220248 } else {
221249 await store . addToWatchlist (
222250 tcr . address ,
@@ -278,17 +306,29 @@ export default async function gtcrBot() {
278306 setInterval ( async function watcher ( ) {
279307 console . info ( ) ;
280308 console . info ( `Checking for executable items, ${ new Date ( ) . toUTCString ( ) } ` ) ;
281- const [ dbState , blockHeight ] = await Promise . all ( [
282- store . getDB ( ) ,
283- provider . getBlockNumber ( ) ,
284- ] ) ;
309+ let dbState ;
310+ let blockHeight ;
311+
312+ try {
313+ [ dbState , blockHeight ] = await Promise . all ( [
314+ store . getDB ( ) ,
315+ provider . getBlockNumber ( ) ,
316+ ] ) ;
317+ } catch ( error ) {
318+ console . error ( `Error fetching dbState and blockHeight` , error ) ;
319+ return ;
320+ }
285321
286322 // Take previous block to avoid returning null due to outdated
287323 // blockchain data.
288324 let block ;
289325 while ( ! block ) {
290326 // Sometimes getBlock returns null for some reason. Try again.
291- block = await provider . getBlock ( blockHeight - 1 ) ;
327+ try {
328+ block = await provider . getBlock ( blockHeight - 1 ) ;
329+ } catch ( error ) {
330+ console . warn ( `Error fetching block, trying again.` , error ) ;
331+ }
292332 }
293333 const { timestamp } = block ;
294334
@@ -311,12 +351,33 @@ export default async function gtcrBot() {
311351 console . info ( `Item of ID ${ itemID } of TCR at ${ tcrAddress } ` ) ;
312352 console . info ( "Checking if it is resolved..." . cyan ) ;
313353 const tcr = new ethers . Contract ( tcrAddress , _GeneralizedTCR , signer ) ;
314- const { numberOfRequests } = await tcr . getItemInfo ( itemID ) ;
354+ let numberOfRequests ;
355+ try {
356+ const itemInfo = await tcr . getItemInfo ( itemID ) ;
357+ numberOfRequests = itemInfo . numberOfRequests ;
358+ } catch ( error ) {
359+ console . error (
360+ `Error fetching itemInfor ${ itemID } @${ tcr . address } ` ,
361+ error
362+ ) ;
363+ continue ;
364+ }
365+
315366 const requestID = numberOfRequests . toNumber ( ) - 1 ;
316- const { resolved, disputed } = await tcr . getRequestInfo (
317- itemID ,
318- requestID
319- ) ;
367+ let resolved ;
368+ let disputed ;
369+ try {
370+ const requestInfo = await tcr . getRequestInfo ( itemID , requestID ) ;
371+ resolved = requestInfo . resolved ;
372+ disputed = requestInfo . disputed ;
373+ } catch ( error ) {
374+ console . error (
375+ `Error fetching request info ${ itemID } @${ tcr . address } -${ requestID } ` ,
376+ error
377+ ) ;
378+ continue ;
379+ }
380+
320381 console . info ( `Disputed: ${ disputed } Resolved: ${ resolved } ` ) ;
321382
322383 if ( ! disputed && ! resolved ) {
0 commit comments