@pimlico/alto 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/contracts/EIP712.sol/EIP712.json +1 -1
- package/contracts/ERC165.sol/ERC165.json +1 -1
- package/contracts/ERC20.sol/ERC20.json +1 -1
- package/contracts/Eip7702Support.sol/Eip7702Support.json +1 -1
- package/contracts/EntryPoint.sol/EntryPoint.json +1 -1
- package/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride06.json +1 -1
- package/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride07.json +1 -1
- package/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride08.json +1 -1
- package/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride09.json +1 -0
- package/contracts/EntryPointGasEstimationOverride.sol/EntryPointGasEstimationOverride06.json +1 -1
- package/contracts/EntryPointSimulations.sol/EntryPointSimulations07.json +1 -1
- package/contracts/EntryPointSimulations.sol/EntryPointSimulations08.json +1 -1
- package/contracts/EntryPointSimulations.sol/EntryPointSimulations09.json +1 -0
- package/contracts/Exec.sol/Exec.json +1 -1
- package/contracts/IAccount.sol/IAccount.json +1 -1
- package/contracts/IAccountExecute.sol/IAccountExecute.json +1 -1
- package/contracts/IAggregator.sol/IAggregator.json +1 -1
- package/contracts/IERC165.sol/IERC165.json +1 -1
- package/contracts/IERC5267.sol/IERC5267.json +1 -1
- package/contracts/IEntryPoint.sol/IEntryPoint.json +1 -1
- package/contracts/IEntryPointFilterOpsOverride.sol/IEntryPointFilterOpsOverride08.json +1 -0
- package/contracts/IEntryPointFilterOpsOverride.sol/IEntryPointFilterOpsOverride09.json +1 -0
- package/contracts/IEntryPointSimulations.sol/IEntryPointSimulations.json +1 -1
- package/contracts/INonceManager.sol/INonceManager.json +1 -1
- package/contracts/IPaymaster.sol/IPaymaster.json +1 -1
- package/contracts/ISenderCreator.sol/ISenderCreator.json +1 -1
- package/contracts/IStakeManager.sol/IStakeManager.json +1 -1
- package/contracts/LibBytes.sol/LibBytes.json +1 -1
- package/contracts/Math.sol/Math.json +1 -1
- package/contracts/MessageHashUtils.sol/MessageHashUtils.json +1 -1
- package/contracts/NonceManager.sol/NonceManager.json +1 -1
- package/contracts/Panic.sol/Panic.json +1 -1
- package/contracts/PimlicoSimulations.sol/PimlicoSimulations.json +1 -1
- package/contracts/ReentrancyGuard.sol/ReentrancyGuard.json +1 -1
- package/contracts/ReentrancyGuardTransient.sol/ReentrancyGuardTransient.json +1 -1
- package/contracts/SafeCast.sol/SafeCast.json +1 -1
- package/contracts/SenderCreator.sol/SenderCreator.json +1 -1
- package/contracts/ShortStrings.sol/ShortStrings.json +1 -1
- package/contracts/SignedMath.sol/SignedMath.json +1 -1
- package/contracts/SimulationOverrideHelper.sol/SimulationOverrideHelper.json +1 -0
- package/contracts/StakeManager.sol/StakeManager.json +1 -1
- package/contracts/StorageSlot.sol/StorageSlot.json +1 -1
- package/contracts/Strings.sol/Strings.json +1 -1
- package/contracts/TransientSlot.sol/TransientSlot.json +1 -1
- package/contracts/UserOperation.sol/UserOperationLib.json +1 -1
- package/contracts/UserOperationLib.sol/UserOperationLib.json +1 -1
- package/contracts/account-abstraction-v9/contracts/interfaces/IAggregator.sol/IAggregator.json +1 -0
- package/contracts/account-abstraction-v9/contracts/interfaces/IEntryPoint.sol/IEntryPoint.json +1 -0
- package/contracts/account-abstraction-v9/contracts/interfaces/INonceManager.sol/INonceManager.json +1 -0
- package/contracts/account-abstraction-v9/contracts/interfaces/IStakeManager.sol/IStakeManager.json +1 -0
- package/contracts/build-info/338795fc743ca612.json +1 -0
- package/contracts/build-info/44a9648cfe32a468.json +1 -0
- package/contracts/build-info/{880955d5786bfdae.json → 8dbf8a4ad39019b5.json} +1 -1
- package/contracts/contracts/interfaces/IAggregator.sol/IAggregator.json +1 -1
- package/contracts/contracts/interfaces/IEntryPoint.sol/IEntryPoint.json +1 -1
- package/contracts/contracts/interfaces/INonceManager.sol/INonceManager.json +1 -1
- package/contracts/contracts/interfaces/IStakeManager.sol/IStakeManager.json +1 -1
- package/contracts/core/Eip7702Support.sol/Eip7702Support.json +1 -0
- package/contracts/core/NonceManager.sol/NonceManager.json +1 -0
- package/contracts/core/SenderCreator.sol/SenderCreator.json +1 -0
- package/contracts/core/StakeManager.sol/StakeManager.json +1 -0
- package/contracts/core/UserOperationLib.sol/UserOperationLib.json +1 -0
- package/contracts/interfaces/IAccount.sol/IAccount.json +1 -0
- package/contracts/interfaces/IAccountExecute.sol/IAccountExecute.json +1 -0
- package/contracts/interfaces/IAggregator.sol/IAggregator.json +1 -1
- package/contracts/interfaces/IEntryPoint.sol/IEntryPoint.json +1 -1
- package/contracts/interfaces/INonceManager.sol/INonceManager.json +1 -1
- package/contracts/interfaces/IPaymaster.sol/IPaymaster.json +1 -0
- package/contracts/interfaces/ISenderCreator.sol/ISenderCreator.json +1 -0
- package/contracts/interfaces/IStakeManager.sol/IStakeManager.json +1 -1
- package/contracts/overrides/Eip7702Support.sol/Eip7702Support.json +1 -0
- package/contracts/overrides/NonceManager.sol/NonceManager.json +1 -0
- package/contracts/overrides/SenderCreator.sol/SenderCreator.json +1 -0
- package/contracts/overrides/StakeManager.sol/StakeManager.json +1 -0
- package/contracts/overrides/UserOperationLib.sol/UserOperationLib.json +1 -0
- package/contracts/utils/Exec.sol/Exec.json +1 -1
- package/contracts/utils/StorageSlot.sol/StorageSlot.json +1 -0
- package/contracts/v09/EntryPoint.sol/EntryPoint.json +1 -0
- package/esm/cli/alto.js +13 -6
- package/esm/cli/alto.js.map +1 -1
- package/esm/cli/config/bundler.d.ts +190 -148
- package/esm/cli/config/bundler.js +72 -83
- package/esm/cli/config/bundler.js.map +1 -1
- package/esm/cli/config/options.d.ts +2 -1
- package/esm/cli/config/options.js +105 -68
- package/esm/cli/config/options.js.map +1 -1
- package/esm/cli/customTransport.d.ts +3 -3
- package/esm/cli/deploySimulationsContract.d.ts +1 -0
- package/esm/cli/deploySimulationsContract.js +41 -5
- package/esm/cli/deploySimulationsContract.js.map +1 -1
- package/esm/cli/handler.js +48 -52
- package/esm/cli/handler.js.map +1 -1
- package/esm/cli/setupServer.js +46 -47
- package/esm/cli/setupServer.js.map +1 -1
- package/esm/cli/shutDown.d.ts +20 -0
- package/esm/cli/shutDown.js +260 -0
- package/esm/cli/shutDown.js.map +1 -0
- package/esm/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride06.json +1 -1
- package/esm/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride07.json +1 -1
- package/esm/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride08.json +1 -1
- package/esm/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride09.json +1 -0
- package/esm/contracts/EntryPointGasEstimationOverride.sol/EntryPointGasEstimationOverride06.json +1 -1
- package/esm/contracts/EntryPointSimulations.sol/EntryPointSimulations07.json +1 -1
- package/esm/contracts/EntryPointSimulations.sol/EntryPointSimulations08.json +1 -1
- package/esm/contracts/EntryPointSimulations.sol/EntryPointSimulations09.json +1 -0
- package/esm/contracts/PimlicoSimulations.sol/PimlicoSimulations.json +1 -1
- package/esm/createConfig.d.ts +9 -2
- package/esm/createConfig.js.map +1 -1
- package/esm/executor/{userOpMonitor.d.ts → bundleManager.d.ts} +38 -32
- package/esm/executor/{userOpMonitor.js → bundleManager.js} +127 -99
- package/esm/executor/bundleManager.js.map +1 -0
- package/esm/executor/executor.d.ts +4 -3
- package/esm/executor/executor.js +33 -20
- package/esm/executor/executor.js.map +1 -1
- package/esm/executor/executorManager.d.ts +17 -15
- package/esm/executor/executorManager.js +130 -55
- package/esm/executor/executorManager.js.map +1 -1
- package/esm/executor/filterOpsAndEstimateGas.d.ts +17 -2
- package/esm/executor/filterOpsAndEstimateGas.js +100 -77
- package/esm/executor/filterOpsAndEstimateGas.js.map +1 -1
- package/esm/executor/index.d.ts +1 -0
- package/esm/executor/index.js +1 -0
- package/esm/executor/index.js.map +1 -1
- package/esm/executor/senderManager/createMemorySenderManager.js +13 -0
- package/esm/executor/senderManager/createMemorySenderManager.js.map +1 -1
- package/esm/executor/senderManager/createRedisSenderManager.d.ts +2 -1
- package/esm/executor/senderManager/createRedisSenderManager.js +3 -6
- package/esm/executor/senderManager/createRedisSenderManager.js.map +1 -1
- package/esm/executor/senderManager/flushOnStartUp.js +4 -4
- package/esm/executor/senderManager/flushOnStartUp.js.map +1 -1
- package/esm/executor/senderManager/index.d.ts +1 -0
- package/esm/executor/senderManager/index.js +6 -2
- package/esm/executor/senderManager/index.js.map +1 -1
- package/esm/executor/senderManager/validateAndRefill.js +2 -2
- package/esm/executor/senderManager/validateAndRefill.js.map +1 -1
- package/esm/executor/utilityWalletMonitor.d.ts +4 -4
- package/esm/executor/utilityWalletMonitor.js +1 -1
- package/esm/executor/utilityWalletMonitor.js.map +1 -1
- package/esm/executor/utils.d.ts +7 -2
- package/esm/executor/utils.js +57 -26
- package/esm/executor/utils.js.map +1 -1
- package/esm/handlers/arbitrumGasPriceManager.d.ts +3 -2
- package/esm/handlers/arbitrumGasPriceManager.js +6 -2
- package/esm/handlers/arbitrumGasPriceManager.js.map +1 -1
- package/esm/handlers/eventManager.d.ts +9 -9
- package/esm/handlers/eventManager.js +59 -60
- package/esm/handlers/eventManager.js.map +1 -1
- package/esm/handlers/gasPriceManager.d.ts +8 -9
- package/esm/handlers/gasPriceManager.js +68 -80
- package/esm/handlers/gasPriceManager.js.map +1 -1
- package/esm/handlers/mantleGasPriceManager.d.ts +4 -4
- package/esm/handlers/mantleGasPriceManager.js +4 -4
- package/esm/handlers/mantleGasPriceManager.js.map +1 -1
- package/esm/handlers/optimismManager.d.ts +1 -1
- package/esm/handlers/optimismManager.js +1 -1
- package/esm/handlers/optimismManager.js.map +1 -1
- package/esm/mempool/index.d.ts +1 -1
- package/esm/mempool/index.js +1 -1
- package/esm/mempool/index.js.map +1 -1
- package/esm/mempool/mempool.d.ts +57 -22
- package/esm/mempool/mempool.js +180 -134
- package/esm/mempool/mempool.js.map +1 -1
- package/esm/mempool/reputationManager.d.ts +14 -14
- package/esm/mempool/reputationManager.js +36 -39
- package/esm/mempool/reputationManager.js.map +1 -1
- package/esm/mempool/statusManager.d.ts +20 -0
- package/esm/mempool/statusManager.js +143 -0
- package/esm/mempool/statusManager.js.map +1 -0
- package/esm/receiptCache/createMemoryReceiptCache.d.ts +3 -0
- package/esm/receiptCache/createMemoryReceiptCache.js +30 -0
- package/esm/receiptCache/createMemoryReceiptCache.js.map +1 -0
- package/esm/receiptCache/createRedisReceiptCache.d.ts +10 -0
- package/esm/receiptCache/createRedisReceiptCache.js +56 -0
- package/esm/receiptCache/createRedisReceiptCache.js.map +1 -0
- package/esm/receiptCache/index.d.ts +11 -0
- package/esm/receiptCache/index.js +21 -0
- package/esm/receiptCache/index.js.map +1 -0
- package/esm/rpc/createMethodHandler.js.map +1 -1
- package/esm/rpc/estimation/gasEstimationHandler.d.ts +2 -4
- package/esm/rpc/estimation/gasEstimationHandler.js.map +1 -1
- package/esm/rpc/estimation/gasEstimations06.d.ts +6 -7
- package/esm/rpc/estimation/gasEstimations06.js +1 -5
- package/esm/rpc/estimation/gasEstimations06.js.map +1 -1
- package/esm/rpc/estimation/gasEstimations07.d.ts +13 -41
- package/esm/rpc/estimation/gasEstimations07.js +27 -34
- package/esm/rpc/estimation/gasEstimations07.js.map +1 -1
- package/esm/{utils/preVerificationGasCalulator.d.ts → rpc/estimation/preVerificationGasCalculator.d.ts} +20 -6
- package/esm/{utils/preVerificationGasCalulator.js → rpc/estimation/preVerificationGasCalculator.js} +95 -47
- package/esm/rpc/estimation/preVerificationGasCalculator.js.map +1 -0
- package/esm/rpc/estimation/types.d.ts +4 -2
- package/esm/rpc/estimation/utils.d.ts +10 -8
- package/esm/rpc/estimation/utils.js +54 -48
- package/esm/rpc/estimation/utils.js.map +1 -1
- package/esm/rpc/methods/boost_sendUserOperation.d.ts +304 -0
- package/esm/rpc/methods/debug_bundler_clearReputation.js +1 -1
- package/esm/rpc/methods/debug_bundler_clearReputation.js.map +1 -1
- package/esm/rpc/methods/debug_bundler_clearState.js +1 -1
- package/esm/rpc/methods/debug_bundler_clearState.js.map +1 -1
- package/esm/rpc/methods/debug_bundler_dumpMempool.d.ts +338 -0
- package/esm/rpc/methods/debug_bundler_dumpReputation.js +1 -1
- package/esm/rpc/methods/debug_bundler_dumpReputation.js.map +1 -1
- package/esm/rpc/methods/eth_estimateUserOperationGas.d.ts +622 -14
- package/esm/rpc/methods/eth_estimateUserOperationGas.js +50 -29
- package/esm/rpc/methods/eth_estimateUserOperationGas.js.map +1 -1
- package/esm/rpc/methods/eth_getUserOperationByHash.d.ts +621 -11
- package/esm/rpc/methods/eth_getUserOperationByHash.js.map +1 -1
- package/esm/rpc/methods/eth_getUserOperationReceipt.d.ts +26 -26
- package/esm/rpc/methods/eth_getUserOperationReceipt.js +1 -1
- package/esm/rpc/methods/eth_sendUserOperation.d.ts +305 -1
- package/esm/rpc/methods/eth_sendUserOperation.js +132 -36
- package/esm/rpc/methods/eth_sendUserOperation.js.map +1 -1
- package/esm/rpc/methods/pimlico_getUserOperationStatus.js +1 -1
- package/esm/rpc/methods/pimlico_getUserOperationStatus.js.map +1 -1
- package/esm/rpc/methods/pimlico_sendUserOperationNow.d.ts +330 -26
- package/esm/rpc/methods/pimlico_sendUserOperationNow.js +15 -27
- package/esm/rpc/methods/pimlico_sendUserOperationNow.js.map +1 -1
- package/esm/rpc/methods/pimlico_simulateAssetChange.d.ts +620 -12
- package/esm/rpc/methods/pimlico_simulateAssetChange.js +14 -19
- package/esm/rpc/methods/pimlico_simulateAssetChange.js.map +1 -1
- package/esm/rpc/rpcHandler.d.ts +21 -22
- package/esm/rpc/rpcHandler.js +15 -17
- package/esm/rpc/rpcHandler.js.map +1 -1
- package/esm/rpc/server.d.ts +5 -5
- package/esm/rpc/server.js +15 -11
- package/esm/rpc/server.js.map +1 -1
- package/esm/rpc/validation/BundlerCollectorTracerV06.js +1 -1
- package/esm/rpc/validation/BundlerCollectorTracerV06.js.map +1 -1
- package/esm/rpc/validation/BundlerCollectorTracerV07.js +1 -1
- package/esm/rpc/validation/BundlerCollectorTracerV07.js.map +1 -1
- package/esm/rpc/validation/SafeValidator.d.ts +13 -14
- package/esm/rpc/validation/SafeValidator.js +24 -24
- package/esm/rpc/validation/SafeValidator.js.map +1 -1
- package/esm/rpc/validation/TracerResultParserV06.d.ts +2 -2
- package/esm/rpc/validation/TracerResultParserV06.js +11 -11
- package/esm/rpc/validation/TracerResultParserV06.js.map +1 -1
- package/esm/rpc/validation/TracerResultParserV07.d.ts +2 -2
- package/esm/rpc/validation/TracerResultParserV07.js +13 -13
- package/esm/rpc/validation/TracerResultParserV07.js.map +1 -1
- package/esm/rpc/validation/UnsafeValidator.d.ts +18 -14
- package/esm/rpc/validation/UnsafeValidator.js +71 -40
- package/esm/rpc/validation/UnsafeValidator.js.map +1 -1
- package/esm/store/createMempoolStore.d.ts +1 -1
- package/esm/store/createMempoolStore.js +63 -139
- package/esm/store/createMempoolStore.js.map +1 -1
- package/esm/store/index.d.ts +4 -75
- package/esm/store/index.js +4 -1
- package/esm/store/index.js.map +1 -1
- package/esm/store/outstanding/index.d.ts +13 -0
- package/esm/store/outstanding/index.js +16 -0
- package/esm/store/outstanding/index.js.map +1 -0
- package/esm/store/{createMemoryOutstandingStore.d.ts → outstanding/memory.d.ts} +14 -13
- package/esm/store/outstanding/memory.js +263 -0
- package/esm/store/outstanding/memory.js.map +1 -0
- package/esm/store/outstanding/redis.d.ts +11 -0
- package/esm/store/outstanding/redis.js +229 -0
- package/esm/store/outstanding/redis.js.map +1 -0
- package/esm/store/outstanding/types.d.ts +19 -0
- package/esm/store/outstanding/types.js +2 -0
- package/esm/store/outstanding/types.js.map +1 -0
- package/esm/store/processing/index.d.ts +11 -0
- package/esm/store/processing/index.js +17 -0
- package/esm/store/processing/index.js.map +1 -0
- package/esm/store/processing/memory.d.ts +16 -0
- package/esm/store/processing/memory.js +58 -0
- package/esm/store/processing/memory.js.map +1 -0
- package/esm/store/processing/redis.d.ts +23 -0
- package/esm/store/processing/redis.js +85 -0
- package/esm/store/processing/redis.js.map +1 -0
- package/esm/store/processing/types.d.ts +10 -0
- package/esm/store/processing/types.js +2 -0
- package/esm/store/processing/types.js.map +1 -0
- package/esm/store/types.d.ts +50 -0
- package/esm/store/types.js +2 -0
- package/esm/store/types.js.map +1 -0
- package/esm/types/contracts/PimlicoSimulations.d.ts +81 -0
- package/esm/types/contracts/PimlicoSimulations.js +105 -0
- package/esm/types/contracts/PimlicoSimulations.js.map +1 -1
- package/esm/types/gasPrice.js +0 -18
- package/esm/types/gasPrice.js.map +1 -1
- package/esm/types/interfaces.d.ts +15 -10
- package/esm/types/mempool.d.ts +3 -0
- package/esm/types/schemas.d.ts +13174 -4732
- package/esm/types/schemas.js +113 -25
- package/esm/types/schemas.js.map +1 -1
- package/esm/types/utils.d.ts +2 -5
- package/esm/types/utils.js +16 -18
- package/esm/types/utils.js.map +1 -1
- package/esm/types/validation.d.ts +7646 -6912
- package/esm/types/validation.js +122 -152
- package/esm/types/validation.js.map +1 -1
- package/esm/utils/eip7702.d.ts +2 -1
- package/esm/utils/eip7702.js +14 -8
- package/esm/utils/eip7702.js.map +1 -1
- package/esm/utils/entryPointOverrides.js +18 -4
- package/esm/utils/entryPointOverrides.js.map +1 -1
- package/esm/utils/helpers.d.ts +2 -1
- package/esm/utils/helpers.js +30 -11
- package/esm/utils/helpers.js.map +1 -1
- package/esm/utils/index.d.ts +0 -1
- package/esm/utils/index.js +0 -1
- package/esm/utils/index.js.map +1 -1
- package/esm/utils/metrics.d.ts +2 -1
- package/esm/utils/metrics.js +15 -8
- package/esm/utils/metrics.js.map +1 -1
- package/esm/utils/minMaxQueue/createMemoryMinMaxQueue.js +8 -9
- package/esm/utils/minMaxQueue/createMemoryMinMaxQueue.js.map +1 -1
- package/esm/utils/minMaxQueue/createRedisMinMaxQueue.d.ts +24 -2
- package/esm/utils/minMaxQueue/createRedisMinMaxQueue.js +85 -64
- package/esm/utils/minMaxQueue/createRedisMinMaxQueue.js.map +1 -1
- package/esm/utils/minMaxQueue/index.d.ts +2 -2
- package/esm/utils/minMaxQueue/index.js +4 -3
- package/esm/utils/minMaxQueue/index.js.map +1 -1
- package/esm/utils/rpc-reply.d.ts +3 -3
- package/esm/utils/rpc-reply.js.map +1 -1
- package/esm/utils/toViemStateOverrides.js +7 -7
- package/esm/utils/toViemStateOverrides.js.map +1 -1
- package/esm/utils/userop.d.ts +87 -55
- package/esm/utils/userop.js +138 -248
- package/esm/utils/userop.js.map +1 -1
- package/package.json +4 -2
- package/contracts/build-info/7710b5a048396e70.json +0 -1
- package/esm/executor/userOpMonitor.js.map +0 -1
- package/esm/mempool/monitoring.d.ts +0 -15
- package/esm/mempool/monitoring.js +0 -118
- package/esm/mempool/monitoring.js.map +0 -1
- package/esm/store/createMemoryOutstandingStore.js +0 -240
- package/esm/store/createMemoryOutstandingStore.js.map +0 -1
- package/esm/store/createRedisOutstandingStore.d.ts +0 -27
- package/esm/store/createRedisOutstandingStore.js +0 -344
- package/esm/store/createRedisOutstandingStore.js.map +0 -1
- package/esm/store/createRedisStore.d.ts +0 -9
- package/esm/store/createRedisStore.js +0 -131
- package/esm/store/createRedisStore.js.map +0 -1
- package/esm/store/createStore.d.ts +0 -6
- package/esm/store/createStore.js +0 -66
- package/esm/store/createStore.js.map +0 -1
- package/esm/utils/preVerificationGasCalulator.js.map +0 -1
package/esm/{utils/preVerificationGasCalulator.js → rpc/estimation/preVerificationGasCalculator.js}
RENAMED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
-
import {
|
|
2
|
+
import { encodeHandleOpsCalldata, getBundleGasLimit } from "../../executor/index.js";
|
|
3
|
+
import { ArbitrumL1FeeAbi, MantleBvmGasPriceOracleAbi, OpL1FeeAbi } from "../../types/index.js";
|
|
4
|
+
import { isVersion06, isVersion07, maxBigInt, minBigInt, randomBigInt, scaleBigIntByPercent, toPackedUserOp, unscaleBigIntByPercent } from "../../utils/index.js";
|
|
3
5
|
import { bytesToHex, concat, encodeAbiParameters, getContract, maxUint64, maxUint128, maxUint256, parseEther, serializeTransaction, size, slice, toBytes, toHex } from "viem";
|
|
4
|
-
import { encodeHandleOpsCalldata } from "../executor/utils.js";
|
|
5
|
-
import { ArbitrumL1FeeAbi } from "../types/contracts/ArbitrumL1FeeAbi.js";
|
|
6
|
-
import { maxBigInt, minBigInt, randomBigInt, unscaleBigIntByPercent } from "./bigInt.js";
|
|
7
|
-
import { isVersion06, isVersion07, toPackedUserOp } from "./userop.js";
|
|
8
6
|
// Encodes a user operation into bytes for gas calculation
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
if (isVersion06(
|
|
7
|
+
function encodeUserOp(userOp) {
|
|
8
|
+
const filledUserOp = fillUserOpWithDummyData(userOp);
|
|
9
|
+
if (isVersion06(filledUserOp)) {
|
|
12
10
|
return toBytes(encodeAbiParameters([
|
|
13
11
|
{
|
|
14
12
|
components: [
|
|
@@ -27,10 +25,10 @@ export function encodeUserOp(userOp) {
|
|
|
27
25
|
name: "userOperation",
|
|
28
26
|
type: "tuple"
|
|
29
27
|
}
|
|
30
|
-
], [
|
|
28
|
+
], [filledUserOp]));
|
|
31
29
|
}
|
|
32
|
-
// For
|
|
33
|
-
const
|
|
30
|
+
// For 0.7, 0.8, 0.9 we need to pack the user operation
|
|
31
|
+
const packedUserOp = toPackedUserOp(filledUserOp);
|
|
34
32
|
return toBytes(encodeAbiParameters([
|
|
35
33
|
{
|
|
36
34
|
components: [
|
|
@@ -47,7 +45,7 @@ export function encodeUserOp(userOp) {
|
|
|
47
45
|
name: "userOperation",
|
|
48
46
|
type: "tuple"
|
|
49
47
|
}
|
|
50
|
-
], [
|
|
48
|
+
], [packedUserOp]));
|
|
51
49
|
}
|
|
52
50
|
const defaultOverHeads = {
|
|
53
51
|
tokensPerNonzeroByte: 4n,
|
|
@@ -66,7 +64,7 @@ const defaultOverHeads = {
|
|
|
66
64
|
expectedBundleSize: 1n,
|
|
67
65
|
floorPerTokenGasCost: 10n
|
|
68
66
|
};
|
|
69
|
-
|
|
67
|
+
function fillUserOpWithDummyData(userOp) {
|
|
70
68
|
if (isVersion06(userOp)) {
|
|
71
69
|
return {
|
|
72
70
|
...userOp,
|
|
@@ -227,8 +225,8 @@ export function getSerializedHandleOpsTx({ userOps, entryPoint, chainId, removeZ
|
|
|
227
225
|
// Process operations based on configuration
|
|
228
226
|
let processedOps = userOps;
|
|
229
227
|
if (randomizeSignature) {
|
|
230
|
-
processedOps = userOps.map((
|
|
231
|
-
const sigLength = size(
|
|
228
|
+
processedOps = userOps.map((userOp) => {
|
|
229
|
+
const sigLength = size(userOp.signature);
|
|
232
230
|
let newSignature;
|
|
233
231
|
const randomizeBytes = (length) => toHex(crypto.randomBytes(length).toString("hex"));
|
|
234
232
|
if (sigLength < 65) {
|
|
@@ -237,19 +235,19 @@ export function getSerializedHandleOpsTx({ userOps, entryPoint, chainId, removeZ
|
|
|
237
235
|
}
|
|
238
236
|
else {
|
|
239
237
|
// For longer signatures, only randomize the last 65 bytes
|
|
240
|
-
const originalPart = slice(
|
|
238
|
+
const originalPart = slice(userOp.signature, 0, sigLength - 65);
|
|
241
239
|
const randomPart = randomizeBytes(65);
|
|
242
240
|
newSignature = concat([originalPart, randomPart]);
|
|
243
241
|
}
|
|
244
242
|
return {
|
|
245
|
-
...
|
|
243
|
+
...userOp,
|
|
246
244
|
signature: newSignature
|
|
247
245
|
};
|
|
248
246
|
});
|
|
249
247
|
}
|
|
250
248
|
// Apply removeZeros logic if needed
|
|
251
249
|
const finalOps = removeZeros
|
|
252
|
-
? processedOps.map((
|
|
250
|
+
? processedOps.map((userOp) => fillUserOpWithDummyData(userOp))
|
|
253
251
|
: processedOps;
|
|
254
252
|
const data = encodeHandleOpsCalldata({
|
|
255
253
|
userOps: finalOps,
|
|
@@ -263,9 +261,33 @@ export function getSerializedHandleOpsTx({ userOps, entryPoint, chainId, removeZ
|
|
|
263
261
|
};
|
|
264
262
|
return serializeTxWithDefaults(txParams);
|
|
265
263
|
}
|
|
266
|
-
|
|
264
|
+
// Shared utility for Arbitrum L1 gas estimation
|
|
265
|
+
export async function getArbitrumL1GasEstimate({ publicClient, userOps, entryPoint }) {
|
|
266
|
+
const precompileAddress = "0x00000000000000000000000000000000000000C8";
|
|
267
267
|
const serializedTx = getSerializedHandleOpsTx({
|
|
268
|
-
userOps
|
|
268
|
+
userOps,
|
|
269
|
+
entryPoint,
|
|
270
|
+
chainId: publicClient.chain?.id ?? 10,
|
|
271
|
+
removeZeros: false
|
|
272
|
+
});
|
|
273
|
+
const arbGasPriceOracle = getContract({
|
|
274
|
+
abi: ArbitrumL1FeeAbi,
|
|
275
|
+
address: precompileAddress,
|
|
276
|
+
client: {
|
|
277
|
+
public: publicClient
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
const { result } = await arbGasPriceOracle.simulate.gasEstimateL1Component([
|
|
281
|
+
entryPoint,
|
|
282
|
+
false,
|
|
283
|
+
serializedTx
|
|
284
|
+
]);
|
|
285
|
+
const [gasForL1, l2BaseFee, l1BaseFeeEstimate] = result;
|
|
286
|
+
return { gasForL1, l2BaseFee, l1BaseFeeEstimate };
|
|
287
|
+
}
|
|
288
|
+
async function calcEtherlinkPvg(userOp, entryPoint, gasPriceManager, verify) {
|
|
289
|
+
const serializedTx = getSerializedHandleOpsTx({
|
|
290
|
+
userOps: [userOp],
|
|
269
291
|
entryPoint,
|
|
270
292
|
chainId: 128123 // Etherlink chain ID
|
|
271
293
|
});
|
|
@@ -284,9 +306,9 @@ async function calcEtherlinkPvg(op, entryPoint, gasPriceManager, verify) {
|
|
|
284
306
|
const inclusionFeeInGas = inclusionFee / maxFeePerGas;
|
|
285
307
|
return inclusionFeeInGas;
|
|
286
308
|
}
|
|
287
|
-
async function calcMantlePvg(publicClient,
|
|
309
|
+
async function calcMantlePvg(publicClient, userOp, entryPoint, gasPriceManager, verify) {
|
|
288
310
|
const serializedTx = getSerializedHandleOpsTx({
|
|
289
|
-
userOps: [
|
|
311
|
+
userOps: [userOp],
|
|
290
312
|
entryPoint,
|
|
291
313
|
chainId: publicClient.chain.id
|
|
292
314
|
});
|
|
@@ -344,9 +366,9 @@ async function calcMantlePvg(publicClient, op, entryPoint, gasPriceManager, veri
|
|
|
344
366
|
const l2MaxFee = BigInt(maxFeePerGas);
|
|
345
367
|
return l1RollupFee / l2MaxFee;
|
|
346
368
|
}
|
|
347
|
-
async function calcOptimismPvg(publicClient,
|
|
369
|
+
async function calcOptimismPvg(publicClient, userOp, entryPoint, gasPriceManager, validate) {
|
|
348
370
|
const serializedTx = getSerializedHandleOpsTx({
|
|
349
|
-
userOps: [
|
|
371
|
+
userOps: [userOp],
|
|
350
372
|
entryPoint,
|
|
351
373
|
chainId: publicClient.chain.id,
|
|
352
374
|
removeZeros: false,
|
|
@@ -383,37 +405,63 @@ async function calcOptimismPvg(publicClient, op, entryPoint, gasPriceManager, va
|
|
|
383
405
|
const l2price = minBigInt(l2MaxFee, l2PriorityFee);
|
|
384
406
|
return l1Fee / l2price;
|
|
385
407
|
}
|
|
386
|
-
async function calcArbitrumPvg(publicClient,
|
|
387
|
-
const
|
|
388
|
-
|
|
389
|
-
userOps: [
|
|
390
|
-
entryPoint
|
|
391
|
-
chainId: publicClient.chain?.id ?? 10
|
|
392
|
-
});
|
|
393
|
-
const arbGasPriceOracle = getContract({
|
|
394
|
-
abi: ArbitrumL1FeeAbi,
|
|
395
|
-
address: precompileAddress,
|
|
396
|
-
client: {
|
|
397
|
-
public: publicClient
|
|
398
|
-
}
|
|
408
|
+
async function calcArbitrumPvg(publicClient, userOp, entryPoint, gasPriceManager, validate) {
|
|
409
|
+
const { gasForL1, l2BaseFee, l1BaseFeeEstimate } = await getArbitrumL1GasEstimate({
|
|
410
|
+
publicClient,
|
|
411
|
+
userOps: [userOp],
|
|
412
|
+
entryPoint
|
|
399
413
|
});
|
|
400
|
-
const { result } = await arbGasPriceOracle.simulate.gasEstimateL1Component([
|
|
401
|
-
entryPoint,
|
|
402
|
-
false,
|
|
403
|
-
serializedTx
|
|
404
|
-
]);
|
|
405
|
-
let [gasForL1, l2BaseFee, l1BaseFeeEstimate] = result;
|
|
406
414
|
const arbitrumManager = gasPriceManager.arbitrumManager;
|
|
407
415
|
arbitrumManager.saveL1BaseFee(l1BaseFeeEstimate);
|
|
408
416
|
arbitrumManager.saveL2BaseFee(l2BaseFee);
|
|
409
417
|
if (validate) {
|
|
410
|
-
const [maxL1Fee, minL1Fee,
|
|
418
|
+
const [maxL1Fee, minL1Fee, maxL2BaseFee, minL2BaseFee] = await Promise.all([
|
|
411
419
|
l1BaseFeeEstimate || arbitrumManager.getMaxL1BaseFee(),
|
|
412
420
|
arbitrumManager.getMinL1BaseFee(),
|
|
413
|
-
arbitrumManager.getMaxL2BaseFee()
|
|
421
|
+
arbitrumManager.getMaxL2BaseFee(),
|
|
422
|
+
arbitrumManager.getMinL2BaseFee()
|
|
414
423
|
]);
|
|
415
|
-
|
|
424
|
+
const pvg = (gasForL1 * minL2BaseFee * minL1Fee) / (maxL1Fee * maxL2BaseFee);
|
|
425
|
+
// Accept 5% tolerance during validation to account for changes in L1State during getArbitrumL1GasEstimate.
|
|
426
|
+
return scaleBigIntByPercent(pvg, 95n);
|
|
416
427
|
}
|
|
417
428
|
return gasForL1;
|
|
418
429
|
}
|
|
419
|
-
|
|
430
|
+
// Monad consumes the entire gasLimit set by TX. To account for this, we need to know the gasLimit
|
|
431
|
+
// the bundler sets for this userOp.
|
|
432
|
+
export async function calcMonadPvg({ userOp, config, entryPoint, validate }) {
|
|
433
|
+
const { utilityWalletAddress: beneficiary, v6CallGasLimitMultiplier, v6VerificationGasLimitMultiplier, v7VerificationGasLimitMultiplier, v7PaymasterVerificationGasLimitMultiplier, v7CallGasLimitMultiplier, v7PaymasterPostOpGasLimitMultiplier } = config;
|
|
434
|
+
const bundlerGasLimit = await getBundleGasLimit({
|
|
435
|
+
config,
|
|
436
|
+
userOps: [userOp],
|
|
437
|
+
entryPoint,
|
|
438
|
+
executorAddress: beneficiary
|
|
439
|
+
});
|
|
440
|
+
// Calculate actual gas used by removing multipliers based on version
|
|
441
|
+
let gasUsedByUserOp = 0n;
|
|
442
|
+
if (isVersion06(userOp)) {
|
|
443
|
+
const realCallGasLimit = unscaleBigIntByPercent(userOp.callGasLimit, BigInt(v6CallGasLimitMultiplier));
|
|
444
|
+
const realVerificationGasLimit = unscaleBigIntByPercent(userOp.verificationGasLimit, BigInt(v6VerificationGasLimitMultiplier));
|
|
445
|
+
gasUsedByUserOp = realCallGasLimit + realVerificationGasLimit;
|
|
446
|
+
}
|
|
447
|
+
if (isVersion07(userOp)) {
|
|
448
|
+
const realCallGasLimit = unscaleBigIntByPercent(userOp.callGasLimit, BigInt(v7CallGasLimitMultiplier));
|
|
449
|
+
const realVerificationGasLimit = unscaleBigIntByPercent(userOp.verificationGasLimit, BigInt(v7VerificationGasLimitMultiplier));
|
|
450
|
+
const realPaymasterVerificationGasLimit = unscaleBigIntByPercent(userOp.paymasterVerificationGasLimit ?? 0n, BigInt(v7PaymasterVerificationGasLimitMultiplier));
|
|
451
|
+
const realPaymasterPostOpGasLimit = unscaleBigIntByPercent(userOp.paymasterPostOpGasLimit ?? 0n, BigInt(v7PaymasterPostOpGasLimitMultiplier));
|
|
452
|
+
gasUsedByUserOp =
|
|
453
|
+
realCallGasLimit +
|
|
454
|
+
realVerificationGasLimit +
|
|
455
|
+
realPaymasterVerificationGasLimit +
|
|
456
|
+
realPaymasterPostOpGasLimit;
|
|
457
|
+
}
|
|
458
|
+
// Monad uses the entire tx.gasLimit.
|
|
459
|
+
let burnedGas = bundlerGasLimit - scaleBigIntByPercent(gasUsedByUserOp, 70n);
|
|
460
|
+
if (validate) {
|
|
461
|
+
// We scale down 10% during validation to account for the variance in
|
|
462
|
+
// dummy paymasterData and signature fields.
|
|
463
|
+
burnedGas = scaleBigIntByPercent(burnedGas, 90n);
|
|
464
|
+
}
|
|
465
|
+
return burnedGas;
|
|
466
|
+
}
|
|
467
|
+
//# sourceMappingURL=preVerificationGasCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preVerificationGasCalculator.js","sourceRoot":"","sources":["../../../rpc/estimation/preVerificationGasCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,12 @@ export declare enum BinarySearchResultType {
|
|
|
4
4
|
Success = 0,
|
|
5
5
|
OutOfGas = 1
|
|
6
6
|
}
|
|
7
|
-
export type
|
|
7
|
+
export type SimulateHandleOpFailResult = {
|
|
8
8
|
result: "failed";
|
|
9
9
|
data: string;
|
|
10
10
|
code: number;
|
|
11
|
-
}
|
|
11
|
+
};
|
|
12
|
+
export type SimulateHandleOpSuccessResult = {
|
|
12
13
|
result: "execution";
|
|
13
14
|
data: {
|
|
14
15
|
callGasLimit?: bigint;
|
|
@@ -17,6 +18,7 @@ export type SimulateHandleOpResult = {
|
|
|
17
18
|
executionResult: ExecutionResult;
|
|
18
19
|
};
|
|
19
20
|
};
|
|
21
|
+
export type SimulateHandleOpResult = SimulateHandleOpFailResult | SimulateHandleOpSuccessResult;
|
|
20
22
|
export type SimulateBinarySearchResult = {
|
|
21
23
|
result: "success";
|
|
22
24
|
data: {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { StateOverrides,
|
|
1
|
+
import type { StateOverrides, UserOperation06, UserOperation07 } from "../../types/index.js";
|
|
2
|
+
import { ERC7769Errors } from "../../types/index.js";
|
|
2
3
|
import { type Logger } from "../../utils/index.js";
|
|
3
4
|
import { type Address, type Hex, type StateOverride } from "viem";
|
|
4
5
|
import type { AltoConfig } from "../../createConfig.js";
|
|
@@ -6,8 +7,8 @@ import type { GasPriceManager } from "../../handlers/gasPriceManager.js";
|
|
|
6
7
|
import type { SimulateHandleOpResult } from "../estimation/types.js";
|
|
7
8
|
export declare function parseFailedOpWithRevert(data: Hex): string;
|
|
8
9
|
export declare function prepareStateOverride({ userOps, queuedUserOps, stateOverrides, config }: {
|
|
9
|
-
userOps: (
|
|
10
|
-
queuedUserOps: (
|
|
10
|
+
userOps: (UserOperation06 | UserOperation07)[];
|
|
11
|
+
queuedUserOps: (UserOperation06 | UserOperation07)[];
|
|
11
12
|
stateOverrides?: StateOverrides;
|
|
12
13
|
config: Pick<AltoConfig, "balanceOverride" | "codeOverrideSupport">;
|
|
13
14
|
}): StateOverride | undefined;
|
|
@@ -48,18 +49,19 @@ export declare const simulationErrors: readonly [{
|
|
|
48
49
|
readonly name: "reason";
|
|
49
50
|
}];
|
|
50
51
|
}];
|
|
52
|
+
export declare const toErc7769Code: (entryPointError: string) => ERC7769Errors.SimulateValidation | ERC7769Errors.SimulatePaymasterValidation | ERC7769Errors.ExpiresShortly | ERC7769Errors.InvalidSignature | ERC7769Errors.PaymasterDepositTooLow;
|
|
51
53
|
export declare function decodeSimulateHandleOpError(error: unknown, logger: Logger): SimulateHandleOpResult;
|
|
52
54
|
export declare function prepareSimulationOverrides06({ userOp, entryPoint, userStateOverrides, useCodeOverride, config }: {
|
|
53
|
-
userOp:
|
|
55
|
+
userOp: UserOperation06;
|
|
54
56
|
entryPoint: Address;
|
|
55
57
|
userStateOverrides?: StateOverrides;
|
|
56
58
|
useCodeOverride: boolean;
|
|
57
59
|
config: Pick<AltoConfig, "codeOverrideSupport" | "balanceOverride">;
|
|
58
60
|
}): Promise<StateOverride | undefined>;
|
|
59
|
-
export declare function prepareSimulationOverrides07({ userOp, queuedUserOps,
|
|
60
|
-
userOp:
|
|
61
|
-
queuedUserOps:
|
|
62
|
-
|
|
61
|
+
export declare function prepareSimulationOverrides07({ userOp, queuedUserOps, entryPoint, gasPriceManager, userStateOverrides, config }: {
|
|
62
|
+
userOp: UserOperation07;
|
|
63
|
+
queuedUserOps: UserOperation07[];
|
|
64
|
+
entryPoint: Address;
|
|
63
65
|
gasPriceManager: GasPriceManager;
|
|
64
66
|
userStateOverrides?: StateOverrides;
|
|
65
67
|
config: Pick<AltoConfig, "codeOverrideSupport" | "balanceOverride">;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ERC7769Errors, executionResultSchema } from "../../types/index.js";
|
|
2
2
|
import { deepHexlify, getAuthorizationStateOverrides } from "../../utils/index.js";
|
|
3
3
|
import { BaseError, ContractFunctionExecutionError, ContractFunctionRevertedError, decodeErrorResult, getAbiItem, keccak256, parseAbi, toHex } from "viem";
|
|
4
4
|
import { entryPoint06Abi } from "viem/account-abstraction";
|
|
@@ -54,15 +54,29 @@ export const simulationErrors = parseAbi([
|
|
|
54
54
|
"error FailedOpWithRevert(uint256 opIndex, string reason, bytes inner)",
|
|
55
55
|
"error CallPhaseReverted(bytes reason)"
|
|
56
56
|
]);
|
|
57
|
+
// Returns error code based on EntryPoint's AA error message.
|
|
58
|
+
export const toErc7769Code = (entryPointError) => {
|
|
59
|
+
if (entryPointError.includes("AA24") || entryPointError.includes("AA34")) {
|
|
60
|
+
return ERC7769Errors.InvalidSignature;
|
|
61
|
+
}
|
|
62
|
+
if (entryPointError.includes("AA31")) {
|
|
63
|
+
return ERC7769Errors.PaymasterDepositTooLow;
|
|
64
|
+
}
|
|
65
|
+
if (entryPointError.includes("AA32")) {
|
|
66
|
+
return ERC7769Errors.ExpiresShortly;
|
|
67
|
+
}
|
|
68
|
+
if (entryPointError.includes("AA30") ||
|
|
69
|
+
entryPointError.includes("AA33") ||
|
|
70
|
+
entryPointError.includes("AA36")) {
|
|
71
|
+
return ERC7769Errors.SimulatePaymasterValidation;
|
|
72
|
+
}
|
|
73
|
+
return ERC7769Errors.SimulateValidation;
|
|
74
|
+
};
|
|
57
75
|
export function decodeSimulateHandleOpError(error, logger) {
|
|
58
76
|
// Check if it's a BaseError with ContractFunctionRevertedError
|
|
59
77
|
if (!(error instanceof BaseError)) {
|
|
60
78
|
logger.warn("Not a BaseError");
|
|
61
|
-
|
|
62
|
-
result: "failed",
|
|
63
|
-
data: "Unknown error, could not parse simulate validation result.",
|
|
64
|
-
code: ValidationErrors.SimulateValidation
|
|
65
|
-
};
|
|
79
|
+
throw new Error("Unknown error, could not parse simulate validation result.");
|
|
66
80
|
}
|
|
67
81
|
let errorName;
|
|
68
82
|
let args;
|
|
@@ -76,16 +90,12 @@ export function decodeSimulateHandleOpError(error, logger) {
|
|
|
76
90
|
return {
|
|
77
91
|
result: "failed",
|
|
78
92
|
data: "Sender has no code or factory not deployed",
|
|
79
|
-
code:
|
|
93
|
+
code: ERC7769Errors.SimulateValidation
|
|
80
94
|
};
|
|
81
95
|
}
|
|
82
96
|
if (!error.data?.args) {
|
|
83
97
|
logger.warn("Missing args");
|
|
84
|
-
|
|
85
|
-
result: "failed",
|
|
86
|
-
data: "Unknown error, could not parse simulate validation result.",
|
|
87
|
-
code: ValidationErrors.SimulateValidation
|
|
88
|
-
};
|
|
98
|
+
throw new Error("Unknown error, could not parse simulate validation result.");
|
|
89
99
|
}
|
|
90
100
|
errorName = error.data.errorName;
|
|
91
101
|
args = error.data.args;
|
|
@@ -105,11 +115,7 @@ export function decodeSimulateHandleOpError(error, logger) {
|
|
|
105
115
|
});
|
|
106
116
|
if (!rawRevertBytes) {
|
|
107
117
|
logger.warn("Failed to find raw revert bytes");
|
|
108
|
-
|
|
109
|
-
result: "failed",
|
|
110
|
-
data: "Unknown error, could not parse simulate validation result.",
|
|
111
|
-
code: ValidationErrors.SimulateValidation
|
|
112
|
-
};
|
|
118
|
+
throw new Error("Unknown error, could not parse simulate validation result.");
|
|
113
119
|
}
|
|
114
120
|
try {
|
|
115
121
|
const decoded = decodeErrorResult({
|
|
@@ -125,47 +131,49 @@ export function decodeSimulateHandleOpError(error, logger) {
|
|
|
125
131
|
errorName = decoded.errorName;
|
|
126
132
|
args = decoded.args || [];
|
|
127
133
|
}
|
|
128
|
-
catch
|
|
134
|
+
catch {
|
|
129
135
|
logger.warn({ rawRevertBytes }, "Failed to decode raw revert bytes");
|
|
130
|
-
|
|
131
|
-
result: "failed",
|
|
132
|
-
data: "Unknown error, could not parse simulate validation result.",
|
|
133
|
-
code: ValidationErrors.SimulateValidation
|
|
134
|
-
};
|
|
136
|
+
throw new Error("Unknown error, could not parse simulate validation result.");
|
|
135
137
|
}
|
|
136
138
|
}
|
|
137
139
|
else {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
data: "Unknown error, could not parse simulate validation result.",
|
|
141
|
-
code: ValidationErrors.SimulateValidation
|
|
142
|
-
};
|
|
140
|
+
logger.warn({ err: contractFunctionRevertedError }, "Unknown error, could not parse simulate validation result.");
|
|
141
|
+
throw new Error("Unknown error, could not parse simulate validation result.");
|
|
143
142
|
}
|
|
144
143
|
switch (errorName) {
|
|
145
|
-
case "FailedOp":
|
|
144
|
+
case "FailedOp": {
|
|
145
|
+
const errorMessage = args[1];
|
|
146
146
|
return {
|
|
147
147
|
result: "failed",
|
|
148
|
-
data:
|
|
149
|
-
code:
|
|
148
|
+
data: errorMessage,
|
|
149
|
+
code: toErc7769Code(errorMessage)
|
|
150
150
|
};
|
|
151
|
-
|
|
151
|
+
}
|
|
152
|
+
case "FailedOpWithRevert": {
|
|
153
|
+
const errorMessage = args[1];
|
|
154
|
+
const revertReason = parseFailedOpWithRevert(args[2]);
|
|
152
155
|
return {
|
|
153
156
|
result: "failed",
|
|
154
|
-
data: `${
|
|
155
|
-
code:
|
|
157
|
+
data: `${errorMessage} ${revertReason}`,
|
|
158
|
+
code: toErc7769Code(errorMessage)
|
|
156
159
|
};
|
|
157
|
-
|
|
160
|
+
}
|
|
161
|
+
case "CallPhaseReverted": {
|
|
162
|
+
const errorMessage = args[0];
|
|
158
163
|
return {
|
|
159
164
|
result: "failed",
|
|
160
|
-
data:
|
|
161
|
-
code:
|
|
165
|
+
data: errorMessage,
|
|
166
|
+
code: ERC7769Errors.UserOperationReverted
|
|
162
167
|
};
|
|
163
|
-
|
|
168
|
+
}
|
|
169
|
+
case "Error": {
|
|
170
|
+
const errorMessage = args[0];
|
|
164
171
|
return {
|
|
165
172
|
result: "failed",
|
|
166
|
-
data:
|
|
167
|
-
code:
|
|
173
|
+
data: errorMessage,
|
|
174
|
+
code: toErc7769Code(errorMessage)
|
|
168
175
|
};
|
|
176
|
+
}
|
|
169
177
|
// 0.6 handleOp reverts with ExecutionResult if successful
|
|
170
178
|
case "ExecutionResult": {
|
|
171
179
|
const parsedExecutionResult = executionResultSchema.parse(args);
|
|
@@ -178,11 +186,7 @@ export function decodeSimulateHandleOpError(error, logger) {
|
|
|
178
186
|
}
|
|
179
187
|
default: {
|
|
180
188
|
logger.warn({ errorName }, "Unknown ContractFunctionRevertedError name");
|
|
181
|
-
|
|
182
|
-
result: "failed",
|
|
183
|
-
data: "Unknown error, could not parse simulate validation result.",
|
|
184
|
-
code: ValidationErrors.SimulateValidation
|
|
185
|
-
};
|
|
189
|
+
throw new Error("Unknown error, could not parse simulate validation result.");
|
|
186
190
|
}
|
|
187
191
|
}
|
|
188
192
|
}
|
|
@@ -209,16 +213,18 @@ export async function prepareSimulationOverrides06({ userOp, entryPoint, userSta
|
|
|
209
213
|
});
|
|
210
214
|
}
|
|
211
215
|
// Helper function to prepare state overrides for v0.7 simulations
|
|
212
|
-
export async function prepareSimulationOverrides07({ userOp, queuedUserOps,
|
|
216
|
+
export async function prepareSimulationOverrides07({ userOp, queuedUserOps, entryPoint, gasPriceManager, userStateOverrides = {}, config }) {
|
|
213
217
|
const mergedStateOverrides = { ...userStateOverrides };
|
|
214
218
|
// Add baseFee override for v0.7 EntryPoint simulations
|
|
215
219
|
if (config.codeOverrideSupport) {
|
|
216
|
-
const baseFee = await gasPriceManager.getBaseFee()
|
|
220
|
+
const baseFee = await gasPriceManager.getBaseFee();
|
|
217
221
|
if (baseFee > 0n) {
|
|
218
222
|
const slot = keccak256(toHex("BLOCK_BASE_FEE_PER_GAS"));
|
|
219
223
|
const value = toHex(baseFee, { size: 32 });
|
|
220
|
-
mergedStateOverrides[
|
|
224
|
+
mergedStateOverrides[entryPoint] = {
|
|
225
|
+
...deepHexlify(mergedStateOverrides?.[entryPoint] || {}),
|
|
221
226
|
stateDiff: {
|
|
227
|
+
...(mergedStateOverrides[entryPoint]?.stateDiff || {}),
|
|
222
228
|
[slot]: value
|
|
223
229
|
}
|
|
224
230
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../rpc/estimation/utils.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../rpc/estimation/utils.ts"],"names":[],"mappings":"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"}
|