From 80f7b97070dc14d4d711514280cd1acb66269762 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Thu, 23 Jan 2025 13:26:56 +0000 Subject: [PATCH] cleanup --- src/executor/executor.ts | 24 +++++++-------- src/executor/executorManager.ts | 18 +++++------ src/executor/utils.ts | 2 +- src/mempool/mempool.ts | 41 +++++++++++++------------ src/rpc/estimation/gasEstimationsV06.ts | 10 +++++- src/rpc/nonceQueuer.ts | 2 +- src/types/schemas.ts | 6 ++-- 7 files changed, 57 insertions(+), 46 deletions(-) diff --git a/src/executor/executor.ts b/src/executor/executor.ts index a22733f8..a415e874 100644 --- a/src/executor/executor.ts +++ b/src/executor/executor.ts @@ -172,10 +172,10 @@ export class Executor { ) const [isUserOpVersion06, entryPoint] = opsWithHashes.reduce( - (acc, op) => { + (acc, owh) => { if ( - acc[0] !== isVersion06(op.userOperation) || - acc[1] !== op.entryPoint + acc[0] !== isVersion06(owh.userOperation) || + acc[1] !== owh.entryPoint ) { throw new Error( "All user operations must be of the same version" @@ -672,13 +672,13 @@ export class Executor { "Failed to get parameters for bundling" ) this.markWalletProcessed(wallet) - return opsWithHashes.map(({ userOperation, userOperationHash }) => { + return opsWithHashes.map((owh) => { return { status: "resubmit", info: { entryPoint, - userOpHash: userOperationHash, - userOperation, + userOpHash: owh.userOperationHash, + userOperation: owh.userOperation, reason: "Failed to get parameters for bundling" } } @@ -708,13 +708,13 @@ export class Executor { "gas limit simulation encountered unexpected failure" ) this.markWalletProcessed(wallet) - return opsWithHashes.map(({ userOperationHash, userOperation }) => { + return opsWithHashes.map((owh) => { return { status: "failure", error: { entryPoint, - userOpHash: userOperationHash, - userOperation, + userOpHash: owh.userOperationHash, + userOperation: owh.userOperation, reason: "INTERNAL FAILURE" } } @@ -871,13 +871,13 @@ export class Executor { "error submitting bundle transaction" ) this.markWalletProcessed(wallet) - return opsWithHashes.map(({ userOperationHash, userOperation }) => { + return opsWithHashes.map((owh) => { return { status: "failure", error: { entryPoint, - userOpHash: userOperationHash, - userOperation, + userOpHash: owh.userOperationHash, + userOperation: owh.userOperation, reason: "INTERNAL FAILURE" } } diff --git a/src/executor/executorManager.ts b/src/executor/executorManager.ts index 13098d58..4a0df0af 100644 --- a/src/executor/executorManager.ts +++ b/src/executor/executorManager.ts @@ -462,43 +462,43 @@ export class ExecutorManager { const { userOperationDetails } = bundlingStatus opInfos.map((opInfo) => { const { - userOperation: mUserOperation, - userOperationHash: userOpHash, + userOperation, + userOperationHash, entryPoint, firstSubmitted } = opInfo - const opDetails = userOperationDetails[userOpHash] + const opDetails = userOperationDetails[userOperationHash] this.metrics.userOperationInclusionDuration.observe( (Date.now() - firstSubmitted) / 1000 ) - this.mempool.removeSubmitted(userOpHash) + this.mempool.removeSubmitted(userOperationHash) this.reputationManager.updateUserOperationIncludedStatus( - mUserOperation, + userOperation, entryPoint, opDetails.accountDeployed ) if (opDetails.status === "succesful") { this.eventManager.emitIncludedOnChain( - userOpHash, + userOperationHash, transactionHash, blockNumber as bigint ) } else { this.eventManager.emitExecutionRevertedOnChain( - userOpHash, + userOperationHash, transactionHash, opDetails.revertReason || "0x", blockNumber as bigint ) } - this.monitor.setUserOperationStatus(userOpHash, { + this.monitor.setUserOperationStatus(userOperationHash, { status: "included", transactionHash }) this.logger.info( { - userOpHash, + userOperationHash, transactionHash }, "user op included" diff --git a/src/executor/utils.ts b/src/executor/utils.ts index e912412c..fc1208cc 100644 --- a/src/executor/utils.ts +++ b/src/executor/utils.ts @@ -51,7 +51,7 @@ export const getAuthorizationList = ( ): SignedAuthorizationList | undefined => { const authorizationList = userOperations .map((op) => { - if (isVersion07(op) && op.eip7702Auth) { + if (op.eip7702Auth) { return op.eip7702Auth } return undefined diff --git a/src/mempool/mempool.ts b/src/mempool/mempool.ts index 801a0aa7..6413ae1c 100644 --- a/src/mempool/mempool.ts +++ b/src/mempool/mempool.ts @@ -266,14 +266,13 @@ export class MemoryMempool { } if ( - processedOrSubmittedOps.find( - ({ userOperation: existingUserOperation }) => { - return ( - existingUserOperation.sender === userOperation.sender && - existingUserOperation.nonce === userOperation.nonce - ) - } - ) + processedOrSubmittedOps.find((opInfo) => { + const mempoolUserOp = opInfo.userOperation + return ( + mempoolUserOp.sender === userOperation.sender && + mempoolUserOp.nonce === userOperation.nonce + ) + }) ) { return [ false, @@ -286,42 +285,44 @@ export class MemoryMempool { entryPoint ) const oldUserOp = [...outstandingOps, ...processedOrSubmittedOps].find( - ({ userOperation: existingUserOperation }) => { + (opInfo) => { + const mempoolUserOp = opInfo.userOperation + const isSameSender = - existingUserOperation.sender === userOperation.sender + mempoolUserOp.sender === userOperation.sender if ( isSameSender && - existingUserOperation.nonce === userOperation.nonce + mempoolUserOp.nonce === userOperation.nonce ) { return true } // Check if there is already a userOperation with initCode + same sender (stops rejected ops due to AA10). if ( - isVersion06(existingUserOperation) && + isVersion06(mempoolUserOp) && isVersion06(userOperation) && userOperation.initCode && userOperation.initCode !== "0x" ) { return ( isSameSender && - existingUserOperation.initCode && - existingUserOperation.initCode !== "0x" + mempoolUserOp.initCode && + mempoolUserOp.initCode !== "0x" ) } // Check if there is already a userOperation with factory + same sender (stops rejected ops due to AA10). if ( - isVersion07(existingUserOperation) && + isVersion07(mempoolUserOp) && isVersion07(userOperation) && userOperation.factory && userOperation.factory !== "0x" ) { return ( isSameSender && - existingUserOperation.factory && - existingUserOperation.factory !== "0x" + mempoolUserOp.factory && + mempoolUserOp.factory !== "0x" ) } @@ -813,13 +814,13 @@ export class MemoryMempool { const outstanding = this.store .dumpOutstanding() .map(({ userOperation }) => userOperation) - .filter((existingUserOperation: UserOperation) => { + .filter((mempoolUserOp) => { const [opNonceKey, opNonceValue] = getNonceKeyAndValue( - existingUserOperation.nonce + mempoolUserOp.nonce ) return ( - existingUserOperation.sender === userOperation.sender && + mempoolUserOp.sender === userOperation.sender && opNonceKey === nonceKey && opNonceValue >= currentNonceValue && opNonceValue < userOperationNonceValue diff --git a/src/rpc/estimation/gasEstimationsV06.ts b/src/rpc/estimation/gasEstimationsV06.ts index 19b87262..b9e7d598 100644 --- a/src/rpc/estimation/gasEstimationsV06.ts +++ b/src/rpc/estimation/gasEstimationsV06.ts @@ -19,8 +19,8 @@ import { import { z } from "zod" import type { SimulateHandleOpResult } from "./types" import type { AltoConfig } from "../../createConfig" -import { deepHexlify } from "../../utils/userop" import { parseFailedOpWithRevert } from "./gasEstimationsV07" +import { deepHexlify, addAuthorizationStateOverrides } from "@alto/utils" export class GasEstimatorV06 { private config: AltoConfig @@ -147,6 +147,14 @@ export class GasEstimatorV06 { stateOverrides = undefined } + if (userOperation.eip7702Auth) { + stateOverrides = await addAuthorizationStateOverrides({ + stateOverrides, + authorizationList: [userOperation.eip7702Auth], + publicClient + }) + } + try { await publicClient.request({ method: "eth_call", diff --git a/src/rpc/nonceQueuer.ts b/src/rpc/nonceQueuer.ts index 90de1e45..3c12b013 100644 --- a/src/rpc/nonceQueuer.ts +++ b/src/rpc/nonceQueuer.ts @@ -105,7 +105,7 @@ export class NonceQueuer { this.queuedUserOperations.push({ entryPoint, userOperationHash, - userOperation: userOperation, + userOperation, nonceKey, nonceSequence, addedAt: Date.now() diff --git a/src/types/schemas.ts b/src/types/schemas.ts index 9f9530dd..65e94f83 100644 --- a/src/types/schemas.ts +++ b/src/types/schemas.ts @@ -56,7 +56,8 @@ const userOperationV06Schema = z maxPriorityFeePerGas: hexNumberSchema, maxFeePerGas: hexNumberSchema, paymasterAndData: hexDataSchema, - signature: hexDataSchema + signature: hexDataSchema, + eip7702Auth: signedAuthorizationSchema.optional() }) .strict() .transform((val) => { @@ -115,7 +116,8 @@ const partialUserOperationV06Schema = z maxPriorityFeePerGas: hexNumberSchema.default(1n), maxFeePerGas: hexNumberSchema.default(1n), paymasterAndData: hexDataSchema, - signature: hexDataSchema + signature: hexDataSchema, + eip7702Auth: signedAuthorizationSchema.optional() }) .strict() .transform((val) => {