Skip to content

Commit d87e41f

Browse files
committed
add state overrides for validation
1 parent 3a49981 commit d87e41f

File tree

7 files changed

+60
-33
lines changed

7 files changed

+60
-33
lines changed

src/rpc/estimation/gasEstimationsV06.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { z } from "zod"
2020
import type { SimulateHandleOpResult } from "./types"
2121
import type { AltoConfig } from "../../createConfig"
2222
import { parseFailedOpWithRevert } from "./gasEstimationsV07"
23-
import { deepHexlify, getAuthorizationStateOverrides } from "@alto/utils"
23+
import { deepHexlify, addAuthorizationStateOverrides } from "@alto/utils"
2424

2525
export class GasEstimatorV06 {
2626
private config: AltoConfig
@@ -147,7 +147,7 @@ export class GasEstimatorV06 {
147147
stateOverrides = undefined
148148
}
149149

150-
stateOverrides = await getAuthorizationStateOverrides({
150+
stateOverrides = await addAuthorizationStateOverrides({
151151
userOperations: [userOperation],
152152
publicClient,
153153
stateOverrides

src/rpc/estimation/gasEstimationsV07.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
binarySearchCallResultSchema
1414
} from "@alto/types"
1515
import {
16-
getAuthorizationStateOverrides,
16+
addAuthorizationStateOverrides,
1717
getUserOperationHash,
1818
toPackedUserOperation
1919
} from "@alto/utils"
@@ -47,11 +47,13 @@ export class GasEstimatorV07 {
4747
async simulateValidation({
4848
entryPoint,
4949
userOperation,
50-
queuedUserOperations
50+
queuedUserOperations,
51+
stateOverrides
5152
}: {
5253
entryPoint: Address
5354
userOperation: UserOperationV07
5455
queuedUserOperations: UserOperationV07[]
56+
stateOverrides?: StateOverrides
5557
}) {
5658
const userOperations = [...queuedUserOperations, userOperation]
5759
const packedUserOperations = userOperations.map((uo) =>
@@ -64,16 +66,17 @@ export class GasEstimatorV07 {
6466
args: [packedUserOperations]
6567
})
6668

67-
const stateOverrides: StateOverrides =
68-
await getAuthorizationStateOverrides({
69+
const finalStateOverrides: StateOverrides =
70+
await addAuthorizationStateOverrides({
6971
userOperations: [...queuedUserOperations, userOperation],
70-
publicClient: this.config.publicClient
72+
publicClient: this.config.publicClient,
73+
stateOverrides
7174
})
7275

7376
const errorResult = await this.callPimlicoEntryPointSimulations({
7477
entryPoint,
7578
entryPointSimulationsCallData: [simulateValidationLast],
76-
stateOverrides
79+
stateOverrides: finalStateOverrides
7780
})
7881

7982
return {
@@ -240,7 +243,7 @@ export class GasEstimatorV07 {
240243
functionName
241244
})
242245

243-
stateOverrides = await getAuthorizationStateOverrides({
246+
stateOverrides = await addAuthorizationStateOverrides({
244247
userOperations: [...queuedOps, targetOp],
245248
publicClient: this.config.publicClient,
246249
stateOverrides
@@ -349,7 +352,7 @@ export class GasEstimatorV07 {
349352
functionName: "binarySearchCallGasLimit"
350353
})
351354

352-
stateOverrides = await getAuthorizationStateOverrides({
355+
stateOverrides = await addAuthorizationStateOverrides({
353356
userOperations: [...queuedUserOperations, userOperation],
354357
publicClient: this.config.publicClient,
355358
stateOverrides

src/rpc/rpcHandler.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -611,8 +611,8 @@ export class RpcHandler {
611611
paymasterPostOpGasLimit
612612
},
613613
entryPoint,
614-
queuedUserOperations
615-
//stateOverrides: deepHexlify(stateOverrides)
614+
queuedUserOperations,
615+
stateOverrides: deepHexlify(stateOverrides)
616616
})
617617

618618
if (isVersion07(simulationUserOperation)) {

src/rpc/validation/SafeValidator.ts

+19-7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { SenderManager } from "@alto/executor"
22
import type { GasPriceManager } from "@alto/handlers"
33
import type {
44
InterfaceValidator,
5+
StateOverrides,
56
UserOperationV06,
67
UserOperationV07,
78
ValidationResult,
@@ -27,7 +28,7 @@ import {
2728
} from "@alto/types"
2829
import type { Metrics } from "@alto/utils"
2930
import {
30-
getAuthorizationStateOverrides,
31+
addAuthorizationStateOverrides,
3132
getAddressFromInitCodeOrPaymasterAndData,
3233
isVersion06,
3334
isVersion07,
@@ -82,11 +83,13 @@ export class SafeValidator
8283
userOperation,
8384
queuedUserOperations,
8485
entryPoint,
86+
stateOverrides,
8587
referencedContracts
8688
}: {
8789
userOperation: UserOperation
8890
queuedUserOperations: UserOperation[]
8991
entryPoint: Address
92+
stateOverrides?: StateOverrides
9093
referencedContracts?: ReferencedCodeHashes
9194
}): Promise<
9295
(ValidationResult | ValidationResultWithAggregation) & {
@@ -109,6 +112,7 @@ export class SafeValidator
109112
queuedUserOperations:
110113
queuedUserOperations as UserOperationV07[],
111114
entryPoint,
115+
stateOverrides,
112116
preCodeHashes: referencedContracts
113117
})
114118
} else {
@@ -158,11 +162,13 @@ export class SafeValidator
158162
userOperation,
159163
queuedUserOperations,
160164
entryPoint,
165+
stateOverrides,
161166
preCodeHashes
162167
}: {
163168
userOperation: UserOperationV07
164169
queuedUserOperations: UserOperationV07[]
165170
entryPoint: Address
171+
stateOverrides?: StateOverrides
166172
preCodeHashes?: ReferencedCodeHashes
167173
}): Promise<
168174
(ValidationResultV07 | ValidationResultWithAggregationV07) & {
@@ -183,7 +189,8 @@ export class SafeValidator
183189
const [res, tracerResult] = await this.getValidationResultWithTracerV07(
184190
userOperation,
185191
queuedUserOperations,
186-
entryPoint
192+
entryPoint,
193+
stateOverrides
187194
)
188195

189196
const [contractAddresses, storageMap] = tracerResultParserV07(
@@ -227,10 +234,12 @@ export class SafeValidator
227234
async getValidationResultV06({
228235
userOperation,
229236
entryPoint,
237+
stateOverrides,
230238
preCodeHashes
231239
}: {
232240
userOperation: UserOperationV06
233241
entryPoint: Address
242+
stateOverrides?: StateOverrides
234243
preCodeHashes?: ReferencedCodeHashes
235244
}): Promise<
236245
(ValidationResultV06 | ValidationResultWithAggregationV06) & {
@@ -250,7 +259,8 @@ export class SafeValidator
250259

251260
const [res, tracerResult] = await this.getValidationResultWithTracerV06(
252261
userOperation,
253-
entryPoint
262+
entryPoint,
263+
stateOverrides
254264
)
255265

256266
const [contractAddresses, storageMap] = tracerResultParserV06(
@@ -309,9 +319,10 @@ export class SafeValidator
309319

310320
async getValidationResultWithTracerV06(
311321
userOperation: UserOperationV06,
312-
entryPoint: Address
322+
entryPoint: Address,
323+
stateOverrides?: StateOverrides
313324
): Promise<[ValidationResultV06, BundlerTracerResult]> {
314-
const stateOverrides = await getAuthorizationStateOverrides({
325+
stateOverrides = await addAuthorizationStateOverrides({
315326
userOperations: [userOperation],
316327
publicClient: this.config.publicClient
317328
})
@@ -461,7 +472,8 @@ export class SafeValidator
461472
async getValidationResultWithTracerV07(
462473
userOperation: UserOperationV07,
463474
queuedUserOperations: UserOperationV07[],
464-
entryPoint: Address
475+
entryPoint: Address,
476+
stateOverrides?: StateOverrides
465477
): Promise<[ValidationResultV07, BundlerTracerResult]> {
466478
const packedUserOperation = toPackedUserOperation(userOperation)
467479
const packedQueuedUserOperations = queuedUserOperations.map((uop) =>
@@ -483,7 +495,7 @@ export class SafeValidator
483495
const entryPointSimulationsAddress =
484496
this.config.entrypointSimulationContract
485497

486-
const stateOverrides = await getAuthorizationStateOverrides({
498+
stateOverrides = await addAuthorizationStateOverrides({
487499
userOperations: [userOperation],
488500
publicClient: this.config.publicClient
489501
})

src/rpc/validation/UnsafeValidator.ts

+22-13
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,12 @@ export class UnsafeValidator implements InterfaceValidator {
188188

189189
async getValidationResultV06({
190190
userOperation,
191-
entryPoint
191+
entryPoint,
192+
stateOverrides
192193
}: {
193194
userOperation: UserOperationV06
194195
entryPoint: Address
196+
stateOverrides?: StateOverrides
195197
codeHashes?: ReferencedCodeHashes
196198
}): Promise<
197199
(ValidationResultV06 | ValidationResultWithAggregationV06) & {
@@ -220,6 +222,7 @@ export class UnsafeValidator implements InterfaceValidator {
220222
this.gasEstimationHandler.gasEstimatorV06.simulateHandleOpV06({
221223
entryPoint,
222224
userOperation,
225+
stateOverrides,
223226
useCodeOverride: false, // disable code override so that call phase reverts aren't caught
224227
targetAddress: zeroAddress,
225228
targetCallData: "0x"
@@ -358,11 +361,13 @@ export class UnsafeValidator implements InterfaceValidator {
358361
async getValidationResultV07({
359362
userOperation,
360363
queuedUserOperations,
361-
entryPoint
364+
entryPoint,
365+
stateOverrides
362366
}: {
363367
userOperation: UserOperationV07
364368
queuedUserOperations: UserOperationV07[]
365369
entryPoint: Address
370+
stateOverrides?: StateOverrides
366371
codeHashes?: ReferencedCodeHashes
367372
}): Promise<
368373
(ValidationResultV07 | ValidationResultWithAggregationV07) & {
@@ -374,7 +379,8 @@ export class UnsafeValidator implements InterfaceValidator {
374379
await this.gasEstimationHandler.gasEstimatorV07.simulateValidation({
375380
entryPoint,
376381
userOperation,
377-
queuedUserOperations
382+
queuedUserOperations,
383+
stateOverrides
378384
})
379385

380386
if (simulateValidationResult.status === "failed") {
@@ -462,7 +468,6 @@ export class UnsafeValidator implements InterfaceValidator {
462468
return res
463469
}
464470

465-
466471
async validatePreVerificationGas({
467472
userOperation,
468473
entryPoint
@@ -489,32 +494,36 @@ export class UnsafeValidator implements InterfaceValidator {
489494
async validateUserOperation({
490495
userOperation,
491496
queuedUserOperations,
492-
entryPoint
497+
entryPoint,
498+
stateOverrides
493499
}: {
494500
userOperation: UserOperation
495501
queuedUserOperations: UserOperation[]
496502
entryPoint: Address
497-
_referencedContracts?: ReferencedCodeHashes
503+
stateOverrides?: StateOverrides
498504
}): Promise<
499505
(ValidationResult | ValidationResultWithAggregation) & {
500506
storageMap: StorageMap
501507
referencedContracts?: ReferencedCodeHashes
502508
}
503509
> {
504510
try {
505-
let validationResult;
506-
511+
let validationResult
512+
507513
if (isVersion06(userOperation)) {
508514
validationResult = await this.getValidationResultV06({
509515
userOperation,
510-
entryPoint
511-
});
516+
entryPoint,
517+
stateOverrides
518+
})
512519
} else {
513520
validationResult = await this.getValidationResultV07({
514521
userOperation,
515-
queuedUserOperations: queuedUserOperations as UserOperationV07[],
516-
entryPoint
517-
});
522+
queuedUserOperations:
523+
queuedUserOperations as UserOperationV07[],
524+
entryPoint,
525+
stateOverrides
526+
})
518527
}
519528

520529
this.metrics.userOperationsValidationSuccess.inc()

src/types/interfaces.ts

+3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export interface InterfaceValidator {
2121
getValidationResultV06(args: {
2222
userOperation: UserOperationV06
2323
entryPoint: Address
24+
stateOverrides?: StateOverrides /* Only used during estimation */
2425
codeHashes?: ReferencedCodeHashes
2526
}): Promise<
2627
(
@@ -36,6 +37,7 @@ export interface InterfaceValidator {
3637
userOperation: UserOperationV07
3738
queuedUserOperations: UserOperation[]
3839
entryPoint: Address
40+
stateOverrides?: StateOverrides /* Only used during estimation */
3941
codeHashes?: ReferencedCodeHashes
4042
}): Promise<
4143
(
@@ -56,6 +58,7 @@ export interface InterfaceValidator {
5658
userOperation: UserOperation
5759
queuedUserOperations: UserOperation[]
5860
entryPoint: Address
61+
stateOverrides?: StateOverrides /* Only used during estimation */
5962
referencedContracts?: ReferencedCodeHashes
6063
}): Promise<
6164
(

src/utils/helpers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ async function getAuthorizationStateOverride({
4444
return { code }
4545
}
4646

47-
export async function getAuthorizationStateOverrides({
47+
export async function addAuthorizationStateOverrides({
4848
userOperations,
4949
publicClient,
5050
stateOverrides

0 commit comments

Comments
 (0)