Skip to content

Commit 9d81648

Browse files
committed
fix: prevent errors from stopping the process
1 parent ef14583 commit 9d81648

File tree

1 file changed

+108
-47
lines changed

1 file changed

+108
-47
lines changed

src/gtcr.ts

Lines changed: 108 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)