diff --git a/zp-relayer/pool/BasePool.ts b/zp-relayer/pool/BasePool.ts index 1afe0a3..3868025 100644 --- a/zp-relayer/pool/BasePool.ts +++ b/zp-relayer/pool/BasePool.ts @@ -46,7 +46,7 @@ export abstract class BasePool { abstract onSend(p: ProcessResult, txHash: string): Promise abstract onConfirmed( p: ProcessResult, txHash: string, callback?: () => Promise,jobId?: string): Promise - async onFailed(txHash: string): Promise { + async onFailed(txHash: string, jobId?: string): Promise { logger.error('Transaction reverted', { txHash }) await this.clearOptimisticState() diff --git a/zp-relayer/pool/RelayPool.ts b/zp-relayer/pool/RelayPool.ts index ef5d53b..9b23350 100644 --- a/zp-relayer/pool/RelayPool.ts +++ b/zp-relayer/pool/RelayPool.ts @@ -274,6 +274,23 @@ export class RelayPool extends BasePool { } } + async onFailed(txHash: string, jobId?: string): Promise { + super.onFailed(txHash, jobId); + + if(jobId) { + const poolJob = await poolTxQueue.getJob(jobId); + if (!poolJob) { + logger.error('Pool job not found', { jobId }); + } else { + poolJob.data.transaction.state = JobState.REVERTED; + poolJob.data.transaction.txHash = txHash; + await poolJob.update(poolJob.data); + } + } + + // TODO: remove cached tx from txStore + } + protected async cacheTxLocally(index: number, commit: string, txHash: string, memo: string) { // store or updating local tx store // (we should keep sent transaction until the indexer grab them) diff --git a/zp-relayer/workers/sentTxWorker.ts b/zp-relayer/workers/sentTxWorker.ts index 3f6df7f..568c8c1 100644 --- a/zp-relayer/workers/sentTxWorker.ts +++ b/zp-relayer/workers/sentTxWorker.ts @@ -87,8 +87,8 @@ export async function createSentTxWorker({ redis, mutex, pool, txManager }: ISen await pool.onConfirmed(processResult, txHash, updatePoolJobState,poolJobId) } else { - await pool.onFailed(txHash) - await updatePoolJobState() + await pool.onFailed(txHash, poolJobId); + //await updatePoolJobState() } }