diff --git a/src/relayer/transaction-listener/EVMTransactionListener.ts b/src/relayer/transaction-listener/EVMTransactionListener.ts index c4c9b851..7d5aeb31 100644 --- a/src/relayer/transaction-listener/EVMTransactionListener.ts +++ b/src/relayer/transaction-listener/EVMTransactionListener.ts @@ -268,7 +268,7 @@ export class EVMTransactionListener return; } - let tryForV07 = false; + // let tryForV07 = false; if (transactionHash) { try { log.info( @@ -286,7 +286,8 @@ export class EVMTransactionListener log.info( `No user op found for transactionId: ${transactionId} on chainId: ${this.chainId}`, ); - tryForV07 = true; + // tryForV07 = true; + return; } else { for ( let userOpIndex = 0; @@ -380,111 +381,111 @@ export class EVMTransactionListener } } } - if (transactionType === TransactionType.BUNDLER && tryForV07) { - log.info( - `V0.7 Getting userOps for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - const userOps = - await this.userOperationDaoV07.getUserOpsByTransactionId( - this.chainId, - transactionId, - ); - if (!userOps.length) { - log.info( - `V0.7 No user op found for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - return; - } - for ( - let userOpIndex = 0; - userOpIndex < userOps.length; - userOpIndex += 1 - ) { - const { userOpHash, entryPoint } = userOps[userOpIndex]; - - const entryPointContracts = this.entryPointV07Map[this.chainId]; - - const entryPointContract = entryPointContracts.find( - (contract) => - contract.address.toLowerCase() === entryPoint.toLowerCase(), - )?.entryPointContract; - - if (entryPointContract) { - const userOpReceipt = - await getUserOperationReceiptForSuccessfulTransaction( - this.chainId, - userOpHash, - transactionReceipt, - entryPointContract, - ); - if (!userOpReceipt) { - log.info( - `V0.7 userOpReceipt not fetched for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - return; - } - const { success, actualGasCost, actualGasUsed, reason, logs } = - userOpReceipt; - - log.info( - `v0.7 Updating userOp data: ${customJSONStringify( - convertBigIntToString({ - transactionHash, - receipt: convertBigIntToString(transactionReceipt), - blockNumber: Number(transactionReceipt.blockNumber), - blockHash: transactionReceipt.blockHash, - status: TransactionStatus.SUCCESS, - success: success.toString(), - actualGasCost, - actualGasUsed, - reason, - logs: convertBigIntToString(logs), - }), - )} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${ - this.chainId - }`, - ); - await this.userOperationDaoV07.updateUserOpDataToDatabaseByTransactionIdAndUserOpHash( - this.chainId, - transactionId, - userOpHash, - convertBigIntToString({ - transactionHash, - receipt: convertBigIntToString(transactionReceipt), - blockNumber: Number(transactionReceipt.blockNumber), - blockHash: transactionReceipt.blockHash, - status: TransactionStatus.SUCCESS, - success: success.toString(), - actualGasCost, - actualGasUsed, - reason, - logs: convertBigIntToString(logs), - }), - ); - log.info( - `v0.7 userOp data updated for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - - if (transactionType === TransactionType.BUNDLER) { - log.info( - `v0.7 updating state to: ${UserOperationStateEnum.CONFIRMED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - await this.userOperationStateDao.updateState(this.chainId, { - transactionId, - message: "Transaction confirmed", - state: UserOperationStateEnum.CONFIRMED, - }); - log.info( - `v0.7 updated state to: ${UserOperationStateEnum.CONFIRMED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - } - } else { - log.info( - `v0.7 entryPoint: ${entryPoint} not found in entry point map for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - } - } - } + // if (transactionType === TransactionType.BUNDLER && tryForV07) { + // log.info( + // `V0.7 Getting userOps for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // const userOps = + // await this.userOperationDaoV07.getUserOpsByTransactionId( + // this.chainId, + // transactionId, + // ); + // if (!userOps.length) { + // log.info( + // `V0.7 No user op found for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // return; + // } + // for ( + // let userOpIndex = 0; + // userOpIndex < userOps.length; + // userOpIndex += 1 + // ) { + // const { userOpHash, entryPoint } = userOps[userOpIndex]; + + // const entryPointContracts = this.entryPointV07Map[this.chainId]; + + // const entryPointContract = entryPointContracts.find( + // (contract) => + // contract.address.toLowerCase() === entryPoint.toLowerCase(), + // )?.entryPointContract; + + // if (entryPointContract) { + // const userOpReceipt = + // await getUserOperationReceiptForSuccessfulTransaction( + // this.chainId, + // userOpHash, + // transactionReceipt, + // entryPointContract, + // ); + // if (!userOpReceipt) { + // log.info( + // `V0.7 userOpReceipt not fetched for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // return; + // } + // const { success, actualGasCost, actualGasUsed, reason, logs } = + // userOpReceipt; + + // log.info( + // `v0.7 Updating userOp data: ${customJSONStringify( + // convertBigIntToString({ + // transactionHash, + // receipt: convertBigIntToString(transactionReceipt), + // blockNumber: Number(transactionReceipt.blockNumber), + // blockHash: transactionReceipt.blockHash, + // status: TransactionStatus.SUCCESS, + // success: success.toString(), + // actualGasCost, + // actualGasUsed, + // reason, + // logs: convertBigIntToString(logs), + // }), + // )} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${ + // this.chainId + // }`, + // ); + // await this.userOperationDaoV07.updateUserOpDataToDatabaseByTransactionIdAndUserOpHash( + // this.chainId, + // transactionId, + // userOpHash, + // convertBigIntToString({ + // transactionHash, + // receipt: convertBigIntToString(transactionReceipt), + // blockNumber: Number(transactionReceipt.blockNumber), + // blockHash: transactionReceipt.blockHash, + // status: TransactionStatus.SUCCESS, + // success: success.toString(), + // actualGasCost, + // actualGasUsed, + // reason, + // logs: convertBigIntToString(logs), + // }), + // ); + // log.info( + // `v0.7 userOp data updated for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + + // if (transactionType === TransactionType.BUNDLER) { + // log.info( + // `v0.7 updating state to: ${UserOperationStateEnum.CONFIRMED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // await this.userOperationStateDao.updateState(this.chainId, { + // transactionId, + // message: "Transaction confirmed", + // state: UserOperationStateEnum.CONFIRMED, + // }); + // log.info( + // `v0.7 updated state to: ${UserOperationStateEnum.CONFIRMED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // } + // } else { + // log.info( + // `v0.7 entryPoint: ${entryPoint} not found in entry point map for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // } + // } + // } } catch (error) { log.error( `Error in saving userOp data in database for transactionId: ${transactionId} on chainId ${ @@ -564,7 +565,7 @@ export class EVMTransactionListener return; } - let tryForV07 = false; + // let tryForV07 = false; if (transactionHash) { try { log.info( @@ -583,7 +584,8 @@ export class EVMTransactionListener log.info( `No user op found for transactionId: ${transactionId} on chainId: ${this.chainId}`, ); - tryForV07 = true; + // tryForV07 = true; + return; } for ( let userOpIndex = 0; @@ -836,245 +838,245 @@ export class EVMTransactionListener } } } - if (transactionType === TransactionType.BUNDLER && tryForV07) { - log.info( - `V0.7 Getting userOps for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - - const userOps = await this.userOperationDaoV07.getUserOpsByTransactionId( - this.chainId, - transactionId, - ); - if (!userOps.length) { - log.info( - `V0.7 No user op found for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - return; - } - for ( - let userOpIndex = 0; - userOpIndex < userOps.length; - userOpIndex += 1 - ) { - const { userOpHash, entryPoint } = userOps[userOpIndex]; - - const entryPointContracts = this.entryPointV07Map[this.chainId]; - - const entryPointContract = entryPointContracts.find( - (contract) => - contract.address.toLowerCase() === entryPoint.toLowerCase(), - )?.entryPointContract; - - if (entryPointContract) { - const latestBlock = - await this.networkService.getLatesBlockNumber(); - log.info( - `v0.7 latestBlock: ${latestBlock} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - let fromBlock = latestBlock - BigInt(1000); - if (config.astarNetworks.includes(this.chainId)) { - fromBlock += BigInt(501); - } - log.info( - `v0.7 fromBlock: ${fromBlock} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - const userOpReceipt = - await getUserOperationReceiptForFailedTransaction( - this.chainId, - userOpHash, - transactionReceipt, - entryPointContract, - fromBlock, - this.networkService.provider, - ); - - if (!userOpReceipt) { - log.info( - `v0.7 userOpReceipt not fetched for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - log.info( - `v0.7 Updating userOp data: ${customJSONStringify( - convertBigIntToString({ - transactionHash, - receipt: convertBigIntToString(transactionReceipt), - blockNumber: Number(transactionReceipt.blockNumber), - blockHash: transactionReceipt.blockHash, - status: TransactionStatus.FAILED, - success: "false", - actualGasCost: 0, - actualGasUsed: 0, - reason: null, - logs: null, - }), - )} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${ - this.chainId - }`, - ); - - await this.userOperationDaoV07.updateUserOpDataToDatabaseByTransactionIdAndUserOpHash( - this.chainId, - transactionId, - userOpHash, - convertBigIntToString({ - transactionHash, - receipt: convertBigIntToString(transactionReceipt), - blockNumber: Number(transactionReceipt.blockNumber), - blockHash: transactionReceipt.blockHash, - status: TransactionStatus.FAILED, - success: "false", - actualGasCost: 0, - actualGasUsed: 0, - reason: "null", - logs: null, - }), - ); - log.info( - `v0.7 userOp data updated for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - - if (transactionType === TransactionType.BUNDLER) { - log.info( - `v0.7 updating state to: ${UserOperationStateEnum.FAILED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - await this.userOperationStateDao.updateState(this.chainId, { - transactionId, - state: UserOperationStateEnum.FAILED, - message: await this.getTransactionFailureMessage( - transactionReceipt, - entryPointContract, - ), - }); - log.info( - `v0.7 updated state to: ${UserOperationStateEnum.FAILED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - } - return; - } - const { - success, - actualGasCost, - actualGasUsed, - reason, - logs, - frontRunnedTransactionReceipt, - } = userOpReceipt; - - log.info( - `Updating transaction data for a front runned transaction for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - - await this.userOperationDaoV07.updateUserOpDataToDatabaseByTransactionIdAndUserOpHash( - this.chainId, - transactionId, - userOpHash, - convertBigIntToString({ - receipt: convertBigIntToString(frontRunnedTransactionReceipt), - transactionHash: ( - frontRunnedTransactionReceipt as TransactionReceipt - ).transactionHash, - blockNumber: Number( - (frontRunnedTransactionReceipt as TransactionReceipt) - .blockNumber, - ), - blockHash: ( - frontRunnedTransactionReceipt as TransactionReceipt - ).blockHash, - status: TransactionStatus.SUCCESS, - success, - actualGasCost, - actualGasUsed, - reason, - logs: convertBigIntToString(logs), - }), - ); - - log.info( - `userOp data updated for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - let frontRunnedTransactionFee = 0; - let frontRunnedTransactionFeeInUSD = 0; - let frontRunnedTransactionFeeCurrency = ""; - if ( - !frontRunnedTransactionReceipt.gasUsed && - !frontRunnedTransactionReceipt.effectiveGasPrice - ) { - log.info( - `gasUsed or effectiveGasPrice field not found in ${customJSONStringify( - frontRunnedTransactionReceipt, - )}`, - ); - } else { - frontRunnedTransactionFee = 0; - try { - frontRunnedTransactionFee = Number( - frontRunnedTransactionReceipt.gasUsed * - frontRunnedTransactionReceipt.effectiveGasPrice, - ); - } catch (err) { - log.error( - `Error in calculating front ran transaction fee, defaulting to ${frontRunnedTransactionFee}`, - { - transactionId, - chainId: this.chainId, - gasUsed: frontRunnedTransactionReceipt.gasUsed, - effectiveGasPrice: - frontRunnedTransactionReceipt.effectiveGasPrice, - }, - ); - } - - frontRunnedTransactionFeeCurrency = - config.chains.currency[this.chainId]; - const coinsRateObj = - await this.cacheService.get(getTokenPriceKey()); - if (!coinsRateObj) { - log.info("Coins Rate Obj not fetched from cache"); - } else { - frontRunnedTransactionFeeInUSD = - JSON.parse(coinsRateObj)[this.chainId]; - } - } - - await this.transactionDao.updateByTransactionIdAndTransactionHashForFrontRunnedTransaction( - this.chainId, - transactionId, - transactionHash, - { - frontRunnedTransactionHash: - frontRunnedTransactionReceipt.hash, - frontRunnedReceipt: convertBigIntToString( - frontRunnedTransactionReceipt, - ), - frontRunnedTransactionFee, - frontRunnedTransactionFeeInUSD, - frontRunnedTransactionFeeCurrency, - status: TransactionStatus.FAILED, - updationTime: Date.now(), - }, - ); - - if (transactionType === TransactionType.BUNDLER) { - log.info( - `updating state to: ${UserOperationStateEnum.CONFIRMED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId} for a front runned transaction`, - ); - await this.userOperationStateDao.updateState(this.chainId, { - transactionId, - transactionHash: frontRunnedTransactionReceipt.hash, - message: - "Transaction was front runned, check new transaction hash in receipt", - state: UserOperationStateEnum.CONFIRMED, - }); - log.info( - `updated state state to: ${UserOperationStateEnum.CONFIRMED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId} for a front runned transaction`, - ); - } - } else { - log.info( - `entryPoint: ${entryPoint} not found in entry point map for transactionId: ${transactionId} on chainId: ${this.chainId}`, - ); - } - } - } + // if (transactionType === TransactionType.BUNDLER && tryForV07) { + // log.info( + // `V0.7 Getting userOps for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + + // const userOps = await this.userOperationDaoV07.getUserOpsByTransactionId( + // this.chainId, + // transactionId, + // ); + // if (!userOps.length) { + // log.info( + // `V0.7 No user op found for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // return; + // } + // for ( + // let userOpIndex = 0; + // userOpIndex < userOps.length; + // userOpIndex += 1 + // ) { + // const { userOpHash, entryPoint } = userOps[userOpIndex]; + + // const entryPointContracts = this.entryPointV07Map[this.chainId]; + + // const entryPointContract = entryPointContracts.find( + // (contract) => + // contract.address.toLowerCase() === entryPoint.toLowerCase(), + // )?.entryPointContract; + + // if (entryPointContract) { + // const latestBlock = + // await this.networkService.getLatesBlockNumber(); + // log.info( + // `v0.7 latestBlock: ${latestBlock} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // let fromBlock = latestBlock - BigInt(1000); + // if (config.astarNetworks.includes(this.chainId)) { + // fromBlock += BigInt(501); + // } + // log.info( + // `v0.7 fromBlock: ${fromBlock} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // const userOpReceipt = + // await getUserOperationReceiptForFailedTransaction( + // this.chainId, + // userOpHash, + // transactionReceipt, + // entryPointContract, + // fromBlock, + // this.networkService.provider, + // ); + + // if (!userOpReceipt) { + // log.info( + // `v0.7 userOpReceipt not fetched for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // log.info( + // `v0.7 Updating userOp data: ${customJSONStringify( + // convertBigIntToString({ + // transactionHash, + // receipt: convertBigIntToString(transactionReceipt), + // blockNumber: Number(transactionReceipt.blockNumber), + // blockHash: transactionReceipt.blockHash, + // status: TransactionStatus.FAILED, + // success: "false", + // actualGasCost: 0, + // actualGasUsed: 0, + // reason: null, + // logs: null, + // }), + // )} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${ + // this.chainId + // }`, + // ); + + // await this.userOperationDaoV07.updateUserOpDataToDatabaseByTransactionIdAndUserOpHash( + // this.chainId, + // transactionId, + // userOpHash, + // convertBigIntToString({ + // transactionHash, + // receipt: convertBigIntToString(transactionReceipt), + // blockNumber: Number(transactionReceipt.blockNumber), + // blockHash: transactionReceipt.blockHash, + // status: TransactionStatus.FAILED, + // success: "false", + // actualGasCost: 0, + // actualGasUsed: 0, + // reason: "null", + // logs: null, + // }), + // ); + // log.info( + // `v0.7 userOp data updated for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + + // if (transactionType === TransactionType.BUNDLER) { + // log.info( + // `v0.7 updating state to: ${UserOperationStateEnum.FAILED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // await this.userOperationStateDao.updateState(this.chainId, { + // transactionId, + // state: UserOperationStateEnum.FAILED, + // message: await this.getTransactionFailureMessage( + // transactionReceipt, + // entryPointContract, + // ), + // }); + // log.info( + // `v0.7 updated state to: ${UserOperationStateEnum.FAILED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // } + // return; + // } + // const { + // success, + // actualGasCost, + // actualGasUsed, + // reason, + // logs, + // frontRunnedTransactionReceipt, + // } = userOpReceipt; + + // log.info( + // `Updating transaction data for a front runned transaction for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + + // await this.userOperationDaoV07.updateUserOpDataToDatabaseByTransactionIdAndUserOpHash( + // this.chainId, + // transactionId, + // userOpHash, + // convertBigIntToString({ + // receipt: convertBigIntToString(frontRunnedTransactionReceipt), + // transactionHash: ( + // frontRunnedTransactionReceipt as TransactionReceipt + // ).transactionHash, + // blockNumber: Number( + // (frontRunnedTransactionReceipt as TransactionReceipt) + // .blockNumber, + // ), + // blockHash: ( + // frontRunnedTransactionReceipt as TransactionReceipt + // ).blockHash, + // status: TransactionStatus.SUCCESS, + // success, + // actualGasCost, + // actualGasUsed, + // reason, + // logs: convertBigIntToString(logs), + // }), + // ); + + // log.info( + // `userOp data updated for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // let frontRunnedTransactionFee = 0; + // let frontRunnedTransactionFeeInUSD = 0; + // let frontRunnedTransactionFeeCurrency = ""; + // if ( + // !frontRunnedTransactionReceipt.gasUsed && + // !frontRunnedTransactionReceipt.effectiveGasPrice + // ) { + // log.info( + // `gasUsed or effectiveGasPrice field not found in ${customJSONStringify( + // frontRunnedTransactionReceipt, + // )}`, + // ); + // } else { + // frontRunnedTransactionFee = 0; + // try { + // frontRunnedTransactionFee = Number( + // frontRunnedTransactionReceipt.gasUsed * + // frontRunnedTransactionReceipt.effectiveGasPrice, + // ); + // } catch (err) { + // log.error( + // `Error in calculating front ran transaction fee, defaulting to ${frontRunnedTransactionFee}`, + // { + // transactionId, + // chainId: this.chainId, + // gasUsed: frontRunnedTransactionReceipt.gasUsed, + // effectiveGasPrice: + // frontRunnedTransactionReceipt.effectiveGasPrice, + // }, + // ); + // } + + // frontRunnedTransactionFeeCurrency = + // config.chains.currency[this.chainId]; + // const coinsRateObj = + // await this.cacheService.get(getTokenPriceKey()); + // if (!coinsRateObj) { + // log.info("Coins Rate Obj not fetched from cache"); + // } else { + // frontRunnedTransactionFeeInUSD = + // JSON.parse(coinsRateObj)[this.chainId]; + // } + // } + + // await this.transactionDao.updateByTransactionIdAndTransactionHashForFrontRunnedTransaction( + // this.chainId, + // transactionId, + // transactionHash, + // { + // frontRunnedTransactionHash: + // frontRunnedTransactionReceipt.hash, + // frontRunnedReceipt: convertBigIntToString( + // frontRunnedTransactionReceipt, + // ), + // frontRunnedTransactionFee, + // frontRunnedTransactionFeeInUSD, + // frontRunnedTransactionFeeCurrency, + // status: TransactionStatus.FAILED, + // updationTime: Date.now(), + // }, + // ); + + // if (transactionType === TransactionType.BUNDLER) { + // log.info( + // `updating state to: ${UserOperationStateEnum.CONFIRMED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId} for a front runned transaction`, + // ); + // await this.userOperationStateDao.updateState(this.chainId, { + // transactionId, + // transactionHash: frontRunnedTransactionReceipt.hash, + // message: + // "Transaction was front runned, check new transaction hash in receipt", + // state: UserOperationStateEnum.CONFIRMED, + // }); + // log.info( + // `updated state state to: ${UserOperationStateEnum.CONFIRMED} for userOpHash: ${userOpHash} for transactionId: ${transactionId} on chainId: ${this.chainId} for a front runned transaction`, + // ); + // } + // } else { + // log.info( + // `entryPoint: ${entryPoint} not found in entry point map for transactionId: ${transactionId} on chainId: ${this.chainId}`, + // ); + // } + // } + // } } catch (error) { log.error( `Error in saving userOp data in database for transactionId: ${transactionId} on chainId ${