@pimlico/alto 0.0.18 → 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.
Files changed (749) hide show
  1. package/contracts/EIP712.sol/EIP712.json +1 -0
  2. package/contracts/ERC165.sol/ERC165.json +1 -0
  3. package/contracts/ERC20.sol/ERC20.json +1 -0
  4. package/contracts/Eip7702Support.sol/Eip7702Support.json +1 -0
  5. package/contracts/EntryPoint.sol/EntryPoint.json +1 -0
  6. package/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride06.json +1 -0
  7. package/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride07.json +1 -0
  8. package/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride08.json +1 -0
  9. package/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride09.json +1 -0
  10. package/contracts/EntryPointGasEstimationOverride.sol/EntryPointGasEstimationOverride06.json +1 -0
  11. package/contracts/EntryPointSimulations.sol/EntryPointSimulations07.json +1 -0
  12. package/contracts/EntryPointSimulations.sol/EntryPointSimulations08.json +1 -0
  13. package/contracts/EntryPointSimulations.sol/EntryPointSimulations09.json +1 -0
  14. package/contracts/Exec.sol/Exec.json +1 -0
  15. package/contracts/IAccount.sol/IAccount.json +1 -0
  16. package/contracts/IAccountExecute.sol/IAccountExecute.json +1 -0
  17. package/contracts/IAggregator.sol/IAggregator.json +1 -0
  18. package/contracts/IERC165.sol/IERC165.json +1 -0
  19. package/contracts/IERC5267.sol/IERC5267.json +1 -0
  20. package/contracts/IEntryPoint.sol/IEntryPoint.json +1 -0
  21. package/contracts/IEntryPointFilterOpsOverride.sol/IEntryPointFilterOpsOverride08.json +1 -0
  22. package/contracts/IEntryPointFilterOpsOverride.sol/IEntryPointFilterOpsOverride09.json +1 -0
  23. package/contracts/IEntryPointSimulations.sol/IEntryPointSimulations.json +1 -0
  24. package/contracts/INonceManager.sol/INonceManager.json +1 -0
  25. package/contracts/IPaymaster.sol/IPaymaster.json +1 -0
  26. package/contracts/ISenderCreator.sol/ISenderCreator.json +1 -0
  27. package/contracts/IStakeManager.sol/IStakeManager.json +1 -0
  28. package/contracts/LibBytes.sol/LibBytes.json +1 -0
  29. package/contracts/Math.sol/Math.json +1 -0
  30. package/contracts/MessageHashUtils.sol/MessageHashUtils.json +1 -0
  31. package/contracts/NonceManager.sol/NonceManager.json +1 -0
  32. package/contracts/Panic.sol/Panic.json +1 -0
  33. package/contracts/PimlicoSimulations.sol/PimlicoSimulations.json +1 -0
  34. package/contracts/ReentrancyGuard.sol/ReentrancyGuard.json +1 -0
  35. package/contracts/ReentrancyGuardTransient.sol/ReentrancyGuardTransient.json +1 -0
  36. package/contracts/SafeCast.sol/SafeCast.json +1 -0
  37. package/contracts/SenderCreator.sol/SenderCreator.json +1 -0
  38. package/contracts/ShortStrings.sol/ShortStrings.json +1 -0
  39. package/contracts/SignedMath.sol/SignedMath.json +1 -0
  40. package/contracts/SimulationOverrideHelper.sol/SimulationOverrideHelper.json +1 -0
  41. package/contracts/StakeManager.sol/StakeManager.json +1 -0
  42. package/contracts/StorageSlot.sol/StorageSlot.json +1 -0
  43. package/contracts/Strings.sol/Strings.json +1 -0
  44. package/contracts/TransientSlot.sol/TransientSlot.json +1 -0
  45. package/contracts/UserOperation.sol/UserOperationLib.json +1 -0
  46. package/contracts/UserOperationLib.sol/UserOperationLib.json +1 -0
  47. package/contracts/account-abstraction-v9/contracts/interfaces/IAggregator.sol/IAggregator.json +1 -0
  48. package/contracts/account-abstraction-v9/contracts/interfaces/IEntryPoint.sol/IEntryPoint.json +1 -0
  49. package/contracts/account-abstraction-v9/contracts/interfaces/INonceManager.sol/INonceManager.json +1 -0
  50. package/contracts/account-abstraction-v9/contracts/interfaces/IStakeManager.sol/IStakeManager.json +1 -0
  51. package/contracts/build-info/338795fc743ca612.json +1 -0
  52. package/contracts/build-info/44a9648cfe32a468.json +1 -0
  53. package/contracts/build-info/8dbf8a4ad39019b5.json +1 -0
  54. package/contracts/contracts/interfaces/IAggregator.sol/IAggregator.json +1 -0
  55. package/contracts/contracts/interfaces/IEntryPoint.sol/IEntryPoint.json +1 -0
  56. package/contracts/contracts/interfaces/INonceManager.sol/INonceManager.json +1 -0
  57. package/contracts/contracts/interfaces/IStakeManager.sol/IStakeManager.json +1 -0
  58. package/contracts/core/Eip7702Support.sol/Eip7702Support.json +1 -0
  59. package/contracts/core/NonceManager.sol/NonceManager.json +1 -0
  60. package/contracts/core/SenderCreator.sol/SenderCreator.json +1 -0
  61. package/contracts/core/StakeManager.sol/StakeManager.json +1 -0
  62. package/contracts/core/UserOperationLib.sol/UserOperationLib.json +1 -0
  63. package/contracts/interfaces/IAccount.sol/IAccount.json +1 -0
  64. package/contracts/interfaces/IAccountExecute.sol/IAccountExecute.json +1 -0
  65. package/contracts/interfaces/IAggregator.sol/IAggregator.json +1 -0
  66. package/contracts/interfaces/IEntryPoint.sol/IEntryPoint.json +1 -0
  67. package/contracts/interfaces/INonceManager.sol/INonceManager.json +1 -0
  68. package/contracts/interfaces/IPaymaster.sol/IPaymaster.json +1 -0
  69. package/contracts/interfaces/ISenderCreator.sol/ISenderCreator.json +1 -0
  70. package/contracts/interfaces/IStakeManager.sol/IStakeManager.json +1 -0
  71. package/contracts/overrides/Eip7702Support.sol/Eip7702Support.json +1 -0
  72. package/contracts/overrides/NonceManager.sol/NonceManager.json +1 -0
  73. package/contracts/overrides/SenderCreator.sol/SenderCreator.json +1 -0
  74. package/contracts/overrides/StakeManager.sol/StakeManager.json +1 -0
  75. package/contracts/overrides/UserOperationLib.sol/UserOperationLib.json +1 -0
  76. package/contracts/utils/Exec.sol/Exec.json +1 -0
  77. package/contracts/utils/StorageSlot.sol/StorageSlot.json +1 -0
  78. package/contracts/v09/EntryPoint.sol/EntryPoint.json +1 -0
  79. package/esm/cli/alto.js +16 -7
  80. package/esm/cli/alto.js.map +1 -1
  81. package/esm/cli/config/bundler.d.ts +690 -540
  82. package/esm/cli/config/bundler.js +101 -66
  83. package/esm/cli/config/bundler.js.map +1 -1
  84. package/esm/cli/config/options.d.ts +2 -1
  85. package/esm/cli/config/options.js +207 -59
  86. package/esm/cli/config/options.js.map +1 -1
  87. package/esm/cli/customTransport.d.ts +3 -3
  88. package/esm/cli/customTransport.js +4 -3
  89. package/esm/cli/customTransport.js.map +1 -1
  90. package/esm/cli/deploySimulationsContract.d.ts +5 -2
  91. package/esm/cli/deploySimulationsContract.js +108 -40
  92. package/esm/cli/deploySimulationsContract.js.map +1 -1
  93. package/esm/cli/handler.js +94 -22
  94. package/esm/cli/handler.js.map +1 -1
  95. package/esm/cli/instrumentation.js +7 -1
  96. package/esm/cli/instrumentation.js.map +1 -1
  97. package/esm/cli/parseArgs.js.map +1 -1
  98. package/esm/cli/setupServer.js +63 -63
  99. package/esm/cli/setupServer.js.map +1 -1
  100. package/esm/cli/shutDown.d.ts +20 -0
  101. package/esm/cli/shutDown.js +260 -0
  102. package/esm/cli/shutDown.js.map +1 -0
  103. package/esm/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride06.json +1 -0
  104. package/esm/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride07.json +1 -0
  105. package/esm/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride08.json +1 -0
  106. package/esm/contracts/EntryPointFilterOpsOverride.sol/EntryPointFilterOpsOverride09.json +1 -0
  107. package/esm/contracts/EntryPointGasEstimationOverride.sol/EntryPointGasEstimationOverride06.json +1 -0
  108. package/esm/contracts/EntryPointSimulations.sol/EntryPointSimulations07.json +1 -0
  109. package/esm/contracts/EntryPointSimulations.sol/EntryPointSimulations08.json +1 -0
  110. package/esm/contracts/EntryPointSimulations.sol/EntryPointSimulations09.json +1 -0
  111. package/esm/contracts/PimlicoSimulations.sol/PimlicoSimulations.json +1 -0
  112. package/esm/createConfig.d.ts +12 -4
  113. package/esm/createConfig.js +2 -0
  114. package/esm/createConfig.js.map +1 -1
  115. package/esm/executor/bundleManager.d.ts +111 -0
  116. package/esm/executor/bundleManager.js +354 -0
  117. package/esm/executor/bundleManager.js.map +1 -0
  118. package/esm/executor/executor.d.ts +18 -23
  119. package/esm/executor/executor.js +183 -119
  120. package/esm/executor/executor.js.map +1 -1
  121. package/esm/executor/executorManager.d.ts +39 -88
  122. package/esm/executor/executorManager.js +325 -550
  123. package/esm/executor/executorManager.js.map +1 -1
  124. package/esm/executor/filterOpsAndEstimateGas.d.ts +39 -0
  125. package/esm/executor/filterOpsAndEstimateGas.js +280 -0
  126. package/esm/executor/filterOpsAndEstimateGas.js.map +1 -0
  127. package/esm/executor/getBundleStatus.d.ts +25 -0
  128. package/esm/executor/getBundleStatus.js +35 -0
  129. package/esm/executor/getBundleStatus.js.map +1 -0
  130. package/esm/executor/index.d.ts +1 -0
  131. package/esm/executor/index.js +1 -0
  132. package/esm/executor/index.js.map +1 -1
  133. package/esm/executor/senderManager/createMemorySenderManager.d.ts +3 -3
  134. package/esm/executor/senderManager/createMemorySenderManager.js +14 -1
  135. package/esm/executor/senderManager/createMemorySenderManager.js.map +1 -1
  136. package/esm/executor/senderManager/createRedisSenderManager.d.ts +5 -4
  137. package/esm/executor/senderManager/createRedisSenderManager.js +4 -7
  138. package/esm/executor/senderManager/createRedisSenderManager.js.map +1 -1
  139. package/esm/executor/senderManager/flushOnStartUp.d.ts +3 -3
  140. package/esm/executor/senderManager/flushOnStartUp.js +4 -4
  141. package/esm/executor/senderManager/flushOnStartUp.js.map +1 -1
  142. package/esm/executor/senderManager/index.d.ts +4 -3
  143. package/esm/executor/senderManager/index.js +6 -2
  144. package/esm/executor/senderManager/index.js.map +1 -1
  145. package/esm/executor/senderManager/validateAndRefill.d.ts +4 -4
  146. package/esm/executor/senderManager/validateAndRefill.js +3 -3
  147. package/esm/executor/senderManager/validateAndRefill.js.map +1 -1
  148. package/esm/executor/utilityWalletMonitor.d.ts +5 -5
  149. package/esm/executor/utilityWalletMonitor.js +1 -1
  150. package/esm/executor/utilityWalletMonitor.js.map +1 -1
  151. package/esm/executor/utils.d.ts +14 -6
  152. package/esm/executor/utils.js +68 -37
  153. package/esm/executor/utils.js.map +1 -1
  154. package/esm/handlers/arbitrumGasPriceManager.d.ts +4 -3
  155. package/esm/handlers/arbitrumGasPriceManager.js +9 -5
  156. package/esm/handlers/arbitrumGasPriceManager.js.map +1 -1
  157. package/esm/handlers/eventManager.d.ts +19 -18
  158. package/esm/handlers/eventManager.js +81 -61
  159. package/esm/handlers/eventManager.js.map +1 -1
  160. package/esm/handlers/gasPriceManager.d.ts +12 -10
  161. package/esm/handlers/gasPriceManager.js +79 -125
  162. package/esm/handlers/gasPriceManager.js.map +1 -1
  163. package/esm/handlers/mantleGasPriceManager.d.ts +5 -5
  164. package/esm/handlers/mantleGasPriceManager.js +4 -4
  165. package/esm/handlers/mantleGasPriceManager.js.map +1 -1
  166. package/esm/handlers/optimismManager.d.ts +2 -2
  167. package/esm/handlers/optimismManager.js +1 -1
  168. package/esm/handlers/optimismManager.js.map +1 -1
  169. package/esm/mempool/index.d.ts +1 -1
  170. package/esm/mempool/index.js +1 -1
  171. package/esm/mempool/index.js.map +1 -1
  172. package/esm/mempool/mempool.d.ts +71 -33
  173. package/esm/mempool/mempool.js +231 -155
  174. package/esm/mempool/mempool.js.map +1 -1
  175. package/esm/mempool/reputationManager.d.ts +36 -36
  176. package/esm/mempool/reputationManager.js +93 -97
  177. package/esm/mempool/reputationManager.js.map +1 -1
  178. package/esm/mempool/statusManager.d.ts +20 -0
  179. package/esm/mempool/statusManager.js +143 -0
  180. package/esm/mempool/statusManager.js.map +1 -0
  181. package/esm/receiptCache/createMemoryReceiptCache.d.ts +3 -0
  182. package/esm/receiptCache/createMemoryReceiptCache.js +30 -0
  183. package/esm/receiptCache/createMemoryReceiptCache.js.map +1 -0
  184. package/esm/receiptCache/createRedisReceiptCache.d.ts +10 -0
  185. package/esm/receiptCache/createRedisReceiptCache.js +56 -0
  186. package/esm/receiptCache/createRedisReceiptCache.js.map +1 -0
  187. package/esm/receiptCache/index.d.ts +11 -0
  188. package/esm/receiptCache/index.js +21 -0
  189. package/esm/receiptCache/index.js.map +1 -0
  190. package/esm/rpc/createMethodHandler.d.ts +2 -2
  191. package/esm/rpc/createMethodHandler.js.map +1 -1
  192. package/esm/rpc/estimation/gasEstimationHandler.d.ts +15 -16
  193. package/esm/rpc/estimation/gasEstimationHandler.js +24 -24
  194. package/esm/rpc/estimation/gasEstimationHandler.js.map +1 -1
  195. package/esm/rpc/estimation/gasEstimations06.d.ts +18 -0
  196. package/esm/rpc/estimation/gasEstimations06.js +45 -0
  197. package/esm/rpc/estimation/gasEstimations06.js.map +1 -0
  198. package/esm/rpc/estimation/gasEstimations07.d.ts +63 -0
  199. package/esm/rpc/estimation/gasEstimations07.js +384 -0
  200. package/esm/rpc/estimation/gasEstimations07.js.map +1 -0
  201. package/esm/rpc/estimation/preVerificationGasCalculator.d.ts +56 -0
  202. package/esm/rpc/estimation/preVerificationGasCalculator.js +467 -0
  203. package/esm/rpc/estimation/preVerificationGasCalculator.js.map +1 -0
  204. package/esm/rpc/estimation/types.d.ts +25 -111
  205. package/esm/rpc/estimation/types.js +5 -121
  206. package/esm/rpc/estimation/types.js.map +1 -1
  207. package/esm/rpc/estimation/utils.d.ts +69 -0
  208. package/esm/rpc/estimation/utils.js +240 -0
  209. package/esm/rpc/estimation/utils.js.map +1 -0
  210. package/{lib/rpc/methods/pimlico_sendUserOperationNow.d.ts → esm/rpc/methods/boost_sendUserOperation.d.ts} +299 -385
  211. package/esm/rpc/methods/boost_sendUserOperation.js +57 -0
  212. package/esm/rpc/methods/boost_sendUserOperation.js.map +1 -0
  213. package/esm/rpc/methods/debug_bundler_clearReputation.js +2 -2
  214. package/esm/rpc/methods/debug_bundler_clearReputation.js.map +1 -1
  215. package/esm/rpc/methods/debug_bundler_clearState.js +2 -2
  216. package/esm/rpc/methods/debug_bundler_clearState.js.map +1 -1
  217. package/esm/rpc/methods/debug_bundler_dumpMempool.d.ts +338 -0
  218. package/esm/rpc/methods/debug_bundler_dumpMempool.js +1 -1
  219. package/esm/rpc/methods/debug_bundler_dumpMempool.js.map +1 -1
  220. package/esm/rpc/methods/debug_bundler_dumpReputation.js +2 -2
  221. package/esm/rpc/methods/debug_bundler_dumpReputation.js.map +1 -1
  222. package/esm/rpc/methods/debug_bundler_getStakeStatus.js +1 -2
  223. package/esm/rpc/methods/debug_bundler_getStakeStatus.js.map +1 -1
  224. package/esm/rpc/methods/debug_bundler_sendBundleNow.js +10 -2
  225. package/esm/rpc/methods/debug_bundler_sendBundleNow.js.map +1 -1
  226. package/esm/rpc/methods/debug_bundler_setBundlingMode.js +1 -1
  227. package/esm/rpc/methods/debug_bundler_setBundlingMode.js.map +1 -1
  228. package/esm/rpc/methods/debug_bundler_setReputation.js +1 -1
  229. package/esm/rpc/methods/debug_bundler_setReputation.js.map +1 -1
  230. package/esm/rpc/methods/eth_chainId.js +1 -1
  231. package/esm/rpc/methods/eth_chainId.js.map +1 -1
  232. package/esm/rpc/methods/eth_estimateUserOperationGas.d.ts +910 -301
  233. package/esm/rpc/methods/eth_estimateUserOperationGas.js +228 -12
  234. package/esm/rpc/methods/eth_estimateUserOperationGas.js.map +1 -1
  235. package/esm/rpc/methods/eth_getUserOperationByHash.d.ts +621 -11
  236. package/esm/rpc/methods/eth_getUserOperationByHash.js +8 -8
  237. package/esm/rpc/methods/eth_getUserOperationByHash.js.map +1 -1
  238. package/esm/rpc/methods/eth_getUserOperationReceipt.d.ts +26 -26
  239. package/esm/rpc/methods/eth_getUserOperationReceipt.js +10 -4
  240. package/esm/rpc/methods/eth_getUserOperationReceipt.js.map +1 -1
  241. package/esm/rpc/methods/eth_sendUserOperation.d.ts +319 -2
  242. package/esm/rpc/methods/eth_sendUserOperation.js +223 -20
  243. package/esm/rpc/methods/eth_sendUserOperation.js.map +1 -1
  244. package/esm/rpc/methods/eth_supportedEntryPoints.js +1 -1
  245. package/esm/rpc/methods/eth_supportedEntryPoints.js.map +1 -1
  246. package/esm/rpc/methods/index.js +11 -6
  247. package/esm/rpc/methods/index.js.map +1 -1
  248. package/esm/rpc/methods/pimlico_getUserOperationGasPrice.js +1 -1
  249. package/esm/rpc/methods/pimlico_getUserOperationGasPrice.js.map +1 -1
  250. package/esm/rpc/methods/pimlico_getUserOperationStatus.d.ts +6 -6
  251. package/esm/rpc/methods/pimlico_getUserOperationStatus.js +3 -3
  252. package/esm/rpc/methods/pimlico_getUserOperationStatus.js.map +1 -1
  253. package/esm/rpc/methods/pimlico_sendUserOperationNow.d.ts +330 -26
  254. package/esm/rpc/methods/pimlico_sendUserOperationNow.js +27 -24
  255. package/esm/rpc/methods/pimlico_sendUserOperationNow.js.map +1 -1
  256. package/{lib/rpc/methods/eth_estimateUserOperationGas.d.ts → esm/rpc/methods/pimlico_simulateAssetChange.d.ts} +891 -333
  257. package/esm/rpc/methods/pimlico_simulateAssetChange.js +113 -0
  258. package/esm/rpc/methods/pimlico_simulateAssetChange.js.map +1 -0
  259. package/esm/rpc/rpcHandler.d.ts +30 -54
  260. package/esm/rpc/rpcHandler.js +137 -315
  261. package/esm/rpc/rpcHandler.js.map +1 -1
  262. package/esm/rpc/server.d.ts +5 -5
  263. package/esm/rpc/server.js +15 -11
  264. package/esm/rpc/server.js.map +1 -1
  265. package/esm/rpc/validation/BundlerCollectorTracerV06.js +2 -2
  266. package/esm/rpc/validation/BundlerCollectorTracerV06.js.map +1 -1
  267. package/esm/rpc/validation/BundlerCollectorTracerV07.js +1 -1
  268. package/esm/rpc/validation/BundlerCollectorTracerV07.js.map +1 -1
  269. package/esm/rpc/validation/SafeValidator.d.ts +20 -22
  270. package/esm/rpc/validation/SafeValidator.js +87 -100
  271. package/esm/rpc/validation/SafeValidator.js.map +1 -1
  272. package/esm/rpc/validation/TracerResultParserV06.d.ts +3 -3
  273. package/esm/rpc/validation/TracerResultParserV06.js +19 -19
  274. package/esm/rpc/validation/TracerResultParserV06.js.map +1 -1
  275. package/esm/rpc/validation/TracerResultParserV07.d.ts +3 -3
  276. package/esm/rpc/validation/TracerResultParserV07.js +25 -25
  277. package/esm/rpc/validation/TracerResultParserV07.js.map +1 -1
  278. package/esm/rpc/validation/UnsafeValidator.d.ts +32 -33
  279. package/esm/rpc/validation/UnsafeValidator.js +117 -101
  280. package/esm/rpc/validation/UnsafeValidator.js.map +1 -1
  281. package/esm/rpc/validation/tracer.d.ts +1 -1
  282. package/esm/store/createMempoolStore.d.ts +3 -3
  283. package/esm/store/createMempoolStore.js +100 -113
  284. package/esm/store/createMempoolStore.js.map +1 -1
  285. package/esm/store/index.d.ts +4 -80
  286. package/esm/store/index.js +4 -1
  287. package/esm/store/index.js.map +1 -1
  288. package/esm/store/outstanding/index.d.ts +13 -0
  289. package/esm/store/outstanding/index.js +16 -0
  290. package/esm/store/outstanding/index.js.map +1 -0
  291. package/esm/store/outstanding/memory.d.ts +29 -0
  292. package/esm/store/outstanding/memory.js +263 -0
  293. package/esm/store/outstanding/memory.js.map +1 -0
  294. package/esm/store/outstanding/redis.d.ts +11 -0
  295. package/esm/store/outstanding/redis.js +229 -0
  296. package/esm/store/outstanding/redis.js.map +1 -0
  297. package/esm/store/outstanding/types.d.ts +19 -0
  298. package/esm/store/outstanding/types.js +2 -0
  299. package/esm/store/outstanding/types.js.map +1 -0
  300. package/esm/store/processing/index.d.ts +11 -0
  301. package/esm/store/processing/index.js +17 -0
  302. package/esm/store/processing/index.js.map +1 -0
  303. package/esm/store/processing/memory.d.ts +16 -0
  304. package/esm/store/processing/memory.js +58 -0
  305. package/esm/store/processing/memory.js.map +1 -0
  306. package/esm/store/processing/redis.d.ts +23 -0
  307. package/esm/store/processing/redis.js +85 -0
  308. package/esm/store/processing/redis.js.map +1 -0
  309. package/esm/store/processing/types.d.ts +10 -0
  310. package/esm/store/processing/types.js +2 -0
  311. package/esm/store/processing/types.js.map +1 -0
  312. package/esm/store/types.d.ts +50 -0
  313. package/esm/store/types.js +2 -0
  314. package/esm/store/types.js.map +1 -0
  315. package/esm/types/contracts/PimlicoSimulations.d.ts +1661 -0
  316. package/esm/types/contracts/{EntryPointSimulationsV7.js → PimlicoSimulations.js} +1104 -1788
  317. package/esm/types/contracts/PimlicoSimulations.js.map +1 -0
  318. package/esm/types/contracts/index.d.ts +1 -3
  319. package/esm/types/contracts/index.js +1 -3
  320. package/esm/types/contracts/index.js.map +1 -1
  321. package/esm/types/gasPrice.js +0 -18
  322. package/esm/types/gasPrice.js.map +1 -1
  323. package/esm/types/interfaces.d.ts +26 -26
  324. package/esm/types/mempool.d.ts +14 -28
  325. package/esm/types/mempool.js +1 -7
  326. package/esm/types/mempool.js.map +1 -1
  327. package/esm/types/schemas.d.ts +26347 -10767
  328. package/esm/types/schemas.js +202 -38
  329. package/esm/types/schemas.js.map +1 -1
  330. package/esm/types/utils.d.ts +2 -5
  331. package/esm/types/utils.js +16 -18
  332. package/esm/types/utils.js.map +1 -1
  333. package/esm/types/validation.d.ts +9447 -8727
  334. package/esm/types/validation.js +123 -161
  335. package/esm/types/validation.js.map +1 -1
  336. package/esm/utils/asyncTimeout.d.ts +5 -0
  337. package/esm/utils/asyncTimeout.js +23 -0
  338. package/esm/utils/asyncTimeout.js.map +1 -0
  339. package/esm/utils/bigInt.d.ts +9 -0
  340. package/esm/utils/bigInt.js +19 -2
  341. package/esm/utils/bigInt.js.map +1 -1
  342. package/esm/utils/eip7702.d.ts +4 -3
  343. package/esm/utils/eip7702.js +16 -7
  344. package/esm/utils/eip7702.js.map +1 -1
  345. package/esm/utils/entryPointOverrides.d.ts +12 -0
  346. package/esm/utils/entryPointOverrides.js +71 -0
  347. package/esm/utils/entryPointOverrides.js.map +1 -0
  348. package/esm/utils/helpers.d.ts +5 -3
  349. package/esm/utils/helpers.js +36 -13
  350. package/esm/utils/helpers.js.map +1 -1
  351. package/esm/utils/index.d.ts +2 -2
  352. package/esm/utils/index.js +1 -1
  353. package/esm/utils/index.js.map +1 -1
  354. package/esm/utils/metrics.d.ts +11 -9
  355. package/esm/utils/metrics.js +44 -25
  356. package/esm/utils/metrics.js.map +1 -1
  357. package/esm/utils/minMaxQueue/createMemoryMinMaxQueue.d.ts +2 -2
  358. package/esm/utils/minMaxQueue/createMemoryMinMaxQueue.js +2 -2
  359. package/esm/utils/minMaxQueue/createMemoryMinMaxQueue.js.map +1 -1
  360. package/esm/utils/minMaxQueue/createRedisMinMaxQueue.d.ts +26 -4
  361. package/esm/utils/minMaxQueue/createRedisMinMaxQueue.js +111 -71
  362. package/esm/utils/minMaxQueue/createRedisMinMaxQueue.js.map +1 -1
  363. package/esm/utils/minMaxQueue/index.d.ts +3 -3
  364. package/esm/utils/minMaxQueue/index.js +4 -3
  365. package/esm/utils/minMaxQueue/index.js.map +1 -1
  366. package/esm/utils/rpc-reply.d.ts +3 -3
  367. package/esm/utils/rpc-reply.js.map +1 -1
  368. package/esm/utils/toViemStateOverrides.d.ts +4 -0
  369. package/esm/utils/toViemStateOverrides.js +44 -0
  370. package/esm/utils/toViemStateOverrides.js.map +1 -0
  371. package/esm/utils/userop.d.ts +89 -87
  372. package/esm/utils/userop.js +207 -439
  373. package/esm/utils/userop.js.map +1 -1
  374. package/package.json +12 -7
  375. package/esm/executor/fastlane.d.ts +0 -9
  376. package/esm/executor/fastlane.js +0 -37
  377. package/esm/executor/fastlane.js.map +0 -1
  378. package/esm/executor/filterOpsAndEStimateGas.d.ts +0 -29
  379. package/esm/executor/filterOpsAndEStimateGas.js +0 -198
  380. package/esm/executor/filterOpsAndEStimateGas.js.map +0 -1
  381. package/esm/mempool/monitoring.d.ts +0 -14
  382. package/esm/mempool/monitoring.js +0 -97
  383. package/esm/mempool/monitoring.js.map +0 -1
  384. package/esm/rpc/estimation/gasEstimationsV06.d.ts +0 -19
  385. package/esm/rpc/estimation/gasEstimationsV06.js +0 -144
  386. package/esm/rpc/estimation/gasEstimationsV06.js.map +0 -1
  387. package/esm/rpc/estimation/gasEstimationsV07.d.ts +0 -101
  388. package/esm/rpc/estimation/gasEstimationsV07.js +0 -721
  389. package/esm/rpc/estimation/gasEstimationsV07.js.map +0 -1
  390. package/esm/store/createMemoryOutstandingStore.d.ts +0 -28
  391. package/esm/store/createMemoryOutstandingStore.js +0 -231
  392. package/esm/store/createMemoryOutstandingStore.js.map +0 -1
  393. package/esm/store/createRedisOutstandingStore.d.ts +0 -27
  394. package/esm/store/createRedisOutstandingStore.js +0 -344
  395. package/esm/store/createRedisOutstandingStore.js.map +0 -1
  396. package/esm/store/createRedisStore.d.ts +0 -9
  397. package/esm/store/createRedisStore.js +0 -131
  398. package/esm/store/createRedisStore.js.map +0 -1
  399. package/esm/store/createStore.d.ts +0 -6
  400. package/esm/store/createStore.js +0 -66
  401. package/esm/store/createStore.js.map +0 -1
  402. package/esm/types/contracts/EntryPointSimulationsV6.d.ts +0 -34
  403. package/esm/types/contracts/EntryPointSimulationsV6.js +0 -48
  404. package/esm/types/contracts/EntryPointSimulationsV6.js.map +0 -1
  405. package/esm/types/contracts/EntryPointSimulationsV7.d.ts +0 -2193
  406. package/esm/types/contracts/EntryPointSimulationsV7.js.map +0 -1
  407. package/esm/types/contracts/PimlicoEntryPointSimulations.d.ts +0 -26
  408. package/esm/types/contracts/PimlicoEntryPointSimulations.js +0 -38
  409. package/esm/types/contracts/PimlicoEntryPointSimulations.js.map +0 -1
  410. package/esm/utils/validation.d.ts +0 -76
  411. package/esm/utils/validation.js +0 -484
  412. package/esm/utils/validation.js.map +0 -1
  413. package/lib/cli/alto.d.ts +0 -7
  414. package/lib/cli/alto.js +0 -141
  415. package/lib/cli/alto.js.map +0 -1
  416. package/lib/cli/config/bundler.d.ts +0 -2836
  417. package/lib/cli/config/bundler.js +0 -222
  418. package/lib/cli/config/bundler.js.map +0 -1
  419. package/lib/cli/config/index.d.ts +0 -3
  420. package/lib/cli/config/index.js +0 -19
  421. package/lib/cli/config/index.js.map +0 -1
  422. package/lib/cli/config/options.d.ts +0 -13
  423. package/lib/cli/config/options.js +0 -553
  424. package/lib/cli/config/options.js.map +0 -1
  425. package/lib/cli/customTransport.d.ts +0 -14
  426. package/lib/cli/customTransport.js +0 -94
  427. package/lib/cli/customTransport.js.map +0 -1
  428. package/lib/cli/deploySimulationsContract.d.ts +0 -13
  429. package/lib/cli/deploySimulationsContract.js +0 -112
  430. package/lib/cli/deploySimulationsContract.js.map +0 -1
  431. package/lib/cli/handler.d.ts +0 -3
  432. package/lib/cli/handler.js +0 -157
  433. package/lib/cli/handler.js.map +0 -1
  434. package/lib/cli/index.d.ts +0 -4
  435. package/lib/cli/index.js +0 -20
  436. package/lib/cli/index.js.map +0 -1
  437. package/lib/cli/instrumentation.d.ts +0 -2
  438. package/lib/cli/instrumentation.js +0 -47
  439. package/lib/cli/instrumentation.js.map +0 -1
  440. package/lib/cli/parseArgs.d.ts +0 -8
  441. package/lib/cli/parseArgs.js +0 -25
  442. package/lib/cli/parseArgs.js.map +0 -1
  443. package/lib/cli/setupServer.d.ts +0 -13
  444. package/lib/cli/setupServer.js +0 -266
  445. package/lib/cli/setupServer.js.map +0 -1
  446. package/lib/cli/util.d.ts +0 -22
  447. package/lib/cli/util.js +0 -34
  448. package/lib/cli/util.js.map +0 -1
  449. package/lib/createConfig.d.ts +0 -16
  450. package/lib/createConfig.js +0 -13
  451. package/lib/createConfig.js.map +0 -1
  452. package/lib/executor/executor.d.ts +0 -65
  453. package/lib/executor/executor.js +0 -285
  454. package/lib/executor/executor.js.map +0 -1
  455. package/lib/executor/executorManager.d.ts +0 -107
  456. package/lib/executor/executorManager.js +0 -682
  457. package/lib/executor/executorManager.js.map +0 -1
  458. package/lib/executor/fastlane.d.ts +0 -9
  459. package/lib/executor/fastlane.js +0 -41
  460. package/lib/executor/fastlane.js.map +0 -1
  461. package/lib/executor/filterOpsAndEStimateGas.d.ts +0 -29
  462. package/lib/executor/filterOpsAndEStimateGas.js +0 -225
  463. package/lib/executor/filterOpsAndEStimateGas.js.map +0 -1
  464. package/lib/executor/index.d.ts +0 -5
  465. package/lib/executor/index.js +0 -21
  466. package/lib/executor/index.js.map +0 -1
  467. package/lib/executor/senderManager/createMemorySenderManager.d.ts +0 -8
  468. package/lib/executor/senderManager/createMemorySenderManager.js +0 -45
  469. package/lib/executor/senderManager/createMemorySenderManager.js.map +0 -1
  470. package/lib/executor/senderManager/createRedisSenderManager.d.ts +0 -8
  471. package/lib/executor/senderManager/createRedisSenderManager.js +0 -85
  472. package/lib/executor/senderManager/createRedisSenderManager.js.map +0 -1
  473. package/lib/executor/senderManager/flushOnStartUp.d.ts +0 -9
  474. package/lib/executor/senderManager/flushOnStartUp.js +0 -37
  475. package/lib/executor/senderManager/flushOnStartUp.js.map +0 -1
  476. package/lib/executor/senderManager/index.d.ts +0 -15
  477. package/lib/executor/senderManager/index.js +0 -25
  478. package/lib/executor/senderManager/index.js.map +0 -1
  479. package/lib/executor/senderManager/validateAndRefill.d.ts +0 -11
  480. package/lib/executor/senderManager/validateAndRefill.js +0 -115
  481. package/lib/executor/senderManager/validateAndRefill.js.map +0 -1
  482. package/lib/executor/utilityWalletMonitor.d.ts +0 -19
  483. package/lib/executor/utilityWalletMonitor.js +0 -42
  484. package/lib/executor/utilityWalletMonitor.js.map +0 -1
  485. package/lib/executor/utils.d.ts +0 -31
  486. package/lib/executor/utils.js +0 -170
  487. package/lib/executor/utils.js.map +0 -1
  488. package/lib/handlers/arbitrumGasPriceManager.d.ts +0 -14
  489. package/lib/handlers/arbitrumGasPriceManager.js +0 -39
  490. package/lib/handlers/arbitrumGasPriceManager.js.map +0 -1
  491. package/lib/handlers/eventManager.d.ts +0 -28
  492. package/lib/handlers/eventManager.js +0 -207
  493. package/lib/handlers/eventManager.js.map +0 -1
  494. package/lib/handlers/gasPriceManager.d.ts +0 -36
  495. package/lib/handlers/gasPriceManager.js +0 -423
  496. package/lib/handlers/gasPriceManager.js.map +0 -1
  497. package/lib/handlers/index.d.ts +0 -3
  498. package/lib/handlers/index.js +0 -19
  499. package/lib/handlers/index.js.map +0 -1
  500. package/lib/handlers/mantleGasPriceManager.d.ts +0 -23
  501. package/lib/handlers/mantleGasPriceManager.js +0 -44
  502. package/lib/handlers/mantleGasPriceManager.js.map +0 -1
  503. package/lib/handlers/optimismManager.d.ts +0 -10
  504. package/lib/handlers/optimismManager.js +0 -21
  505. package/lib/handlers/optimismManager.js.map +0 -1
  506. package/lib/index.d.ts +0 -2
  507. package/lib/index.js +0 -4
  508. package/lib/index.js.map +0 -1
  509. package/lib/mempool/index.d.ts +0 -4
  510. package/lib/mempool/index.js +0 -20
  511. package/lib/mempool/index.js.map +0 -1
  512. package/lib/mempool/mempool.d.ts +0 -191
  513. package/lib/mempool/mempool.js +0 -498
  514. package/lib/mempool/mempool.js.map +0 -1
  515. package/lib/mempool/monitoring.d.ts +0 -14
  516. package/lib/mempool/monitoring.js +0 -101
  517. package/lib/mempool/monitoring.js.map +0 -1
  518. package/lib/mempool/reputationManager.d.ts +0 -121
  519. package/lib/mempool/reputationManager.js +0 -472
  520. package/lib/mempool/reputationManager.js.map +0 -1
  521. package/lib/rpc/createMethodHandler.d.ts +0 -31
  522. package/lib/rpc/createMethodHandler.js +0 -34
  523. package/lib/rpc/createMethodHandler.js.map +0 -1
  524. package/lib/rpc/estimation/gasEstimationHandler.d.ts +0 -30
  525. package/lib/rpc/estimation/gasEstimationHandler.js +0 -50
  526. package/lib/rpc/estimation/gasEstimationHandler.js.map +0 -1
  527. package/lib/rpc/estimation/gasEstimationsV06.d.ts +0 -19
  528. package/lib/rpc/estimation/gasEstimationsV06.js +0 -148
  529. package/lib/rpc/estimation/gasEstimationsV06.js.map +0 -1
  530. package/lib/rpc/estimation/gasEstimationsV07.d.ts +0 -101
  531. package/lib/rpc/estimation/gasEstimationsV07.js +0 -727
  532. package/lib/rpc/estimation/gasEstimationsV07.js.map +0 -1
  533. package/lib/rpc/estimation/types.d.ts +0 -120
  534. package/lib/rpc/estimation/types.js +0 -125
  535. package/lib/rpc/estimation/types.js.map +0 -1
  536. package/lib/rpc/index.d.ts +0 -4
  537. package/lib/rpc/index.js +0 -20
  538. package/lib/rpc/index.js.map +0 -1
  539. package/lib/rpc/methods/debug_bundler_clearReputation.d.ts +0 -22
  540. package/lib/rpc/methods/debug_bundler_clearReputation.js +0 -15
  541. package/lib/rpc/methods/debug_bundler_clearReputation.js.map +0 -1
  542. package/lib/rpc/methods/debug_bundler_clearState.d.ts +0 -22
  543. package/lib/rpc/methods/debug_bundler_clearState.js +0 -16
  544. package/lib/rpc/methods/debug_bundler_clearState.js.map +0 -1
  545. package/lib/rpc/methods/debug_bundler_dumpMempool.d.ts +0 -973
  546. package/lib/rpc/methods/debug_bundler_dumpMempool.js +0 -16
  547. package/lib/rpc/methods/debug_bundler_dumpMempool.js.map +0 -1
  548. package/lib/rpc/methods/debug_bundler_dumpReputation.d.ts +0 -57
  549. package/lib/rpc/methods/debug_bundler_dumpReputation.js +0 -16
  550. package/lib/rpc/methods/debug_bundler_dumpReputation.js.map +0 -1
  551. package/lib/rpc/methods/debug_bundler_getStakeStatus.d.ts +0 -79
  552. package/lib/rpc/methods/debug_bundler_getStakeStatus.js +0 -25
  553. package/lib/rpc/methods/debug_bundler_getStakeStatus.js.map +0 -1
  554. package/lib/rpc/methods/debug_bundler_sendBundleNow.d.ts +0 -22
  555. package/lib/rpc/methods/debug_bundler_sendBundleNow.js +0 -15
  556. package/lib/rpc/methods/debug_bundler_sendBundleNow.js.map +0 -1
  557. package/lib/rpc/methods/debug_bundler_setBundlingMode.d.ts +0 -22
  558. package/lib/rpc/methods/debug_bundler_setBundlingMode.js +0 -16
  559. package/lib/rpc/methods/debug_bundler_setBundlingMode.js.map +0 -1
  560. package/lib/rpc/methods/debug_bundler_setReputation.d.ts +0 -46
  561. package/lib/rpc/methods/debug_bundler_setReputation.js +0 -16
  562. package/lib/rpc/methods/debug_bundler_setReputation.js.map +0 -1
  563. package/lib/rpc/methods/eth_chainId.d.ts +0 -22
  564. package/lib/rpc/methods/eth_chainId.js +0 -13
  565. package/lib/rpc/methods/eth_chainId.js.map +0 -1
  566. package/lib/rpc/methods/eth_estimateUserOperationGas.js +0 -26
  567. package/lib/rpc/methods/eth_estimateUserOperationGas.js.map +0 -1
  568. package/lib/rpc/methods/eth_getUserOperationByHash.d.ts +0 -1775
  569. package/lib/rpc/methods/eth_getUserOperationByHash.js +0 -101
  570. package/lib/rpc/methods/eth_getUserOperationByHash.js.map +0 -1
  571. package/lib/rpc/methods/eth_getUserOperationReceipt.d.ts +0 -412
  572. package/lib/rpc/methods/eth_getUserOperationReceipt.js +0 -14
  573. package/lib/rpc/methods/eth_getUserOperationReceipt.js.map +0 -1
  574. package/lib/rpc/methods/eth_sendUserOperation.d.ts +0 -878
  575. package/lib/rpc/methods/eth_sendUserOperation.js +0 -44
  576. package/lib/rpc/methods/eth_sendUserOperation.js.map +0 -1
  577. package/lib/rpc/methods/eth_supportedEntryPoints.d.ts +0 -22
  578. package/lib/rpc/methods/eth_supportedEntryPoints.js +0 -13
  579. package/lib/rpc/methods/eth_supportedEntryPoints.js.map +0 -1
  580. package/lib/rpc/methods/index.d.ts +0 -3
  581. package/lib/rpc/methods/index.js +0 -44
  582. package/lib/rpc/methods/index.js.map +0 -1
  583. package/lib/rpc/methods/pimlico_getUserOperationGasPrice.d.ts +0 -131
  584. package/lib/rpc/methods/pimlico_getUserOperationGasPrice.js +0 -33
  585. package/lib/rpc/methods/pimlico_getUserOperationGasPrice.js.map +0 -1
  586. package/lib/rpc/methods/pimlico_getUserOperationStatus.d.ts +0 -43
  587. package/lib/rpc/methods/pimlico_getUserOperationStatus.js +0 -14
  588. package/lib/rpc/methods/pimlico_getUserOperationStatus.js.map +0 -1
  589. package/lib/rpc/methods/pimlico_sendUserOperationNow.js +0 -53
  590. package/lib/rpc/methods/pimlico_sendUserOperationNow.js.map +0 -1
  591. package/lib/rpc/rpcHandler.d.ts +0 -75
  592. package/lib/rpc/rpcHandler.js +0 -408
  593. package/lib/rpc/rpcHandler.js.map +0 -1
  594. package/lib/rpc/server.d.ts +0 -26
  595. package/lib/rpc/server.js +0 -283
  596. package/lib/rpc/server.js.map +0 -1
  597. package/lib/rpc/validation/BundlerCollectorTracerV06.d.ts +0 -102
  598. package/lib/rpc/validation/BundlerCollectorTracerV06.js +0 -262
  599. package/lib/rpc/validation/BundlerCollectorTracerV06.js.map +0 -1
  600. package/lib/rpc/validation/BundlerCollectorTracerV07.d.ts +0 -102
  601. package/lib/rpc/validation/BundlerCollectorTracerV07.js +0 -261
  602. package/lib/rpc/validation/BundlerCollectorTracerV07.js.map +0 -1
  603. package/lib/rpc/validation/SafeValidator.d.ts +0 -52
  604. package/lib/rpc/validation/SafeValidator.js +0 -350
  605. package/lib/rpc/validation/SafeValidator.js.map +0 -1
  606. package/lib/rpc/validation/TracerResultParserV06.d.ts +0 -13
  607. package/lib/rpc/validation/TracerResultParserV06.js +0 -582
  608. package/lib/rpc/validation/TracerResultParserV06.js.map +0 -1
  609. package/lib/rpc/validation/TracerResultParserV07.d.ts +0 -33
  610. package/lib/rpc/validation/TracerResultParserV07.js +0 -599
  611. package/lib/rpc/validation/TracerResultParserV07.js.map +0 -1
  612. package/lib/rpc/validation/UnsafeValidator.d.ts +0 -98
  613. package/lib/rpc/validation/UnsafeValidator.js +0 -326
  614. package/lib/rpc/validation/UnsafeValidator.js.map +0 -1
  615. package/lib/rpc/validation/index.d.ts +0 -3
  616. package/lib/rpc/validation/index.js +0 -19
  617. package/lib/rpc/validation/index.js.map +0 -1
  618. package/lib/rpc/validation/tracer.d.ts +0 -125
  619. package/lib/rpc/validation/tracer.js +0 -112
  620. package/lib/rpc/validation/tracer.js.map +0 -1
  621. package/lib/store/createMemoryOutstandingStore.d.ts +0 -28
  622. package/lib/store/createMemoryOutstandingStore.js +0 -236
  623. package/lib/store/createMemoryOutstandingStore.js.map +0 -1
  624. package/lib/store/createMempoolStore.d.ts +0 -8
  625. package/lib/store/createMempoolStore.js +0 -199
  626. package/lib/store/createMempoolStore.js.map +0 -1
  627. package/lib/store/createRedisOutstandingStore.d.ts +0 -27
  628. package/lib/store/createRedisOutstandingStore.js +0 -349
  629. package/lib/store/createRedisOutstandingStore.js.map +0 -1
  630. package/lib/store/createRedisStore.d.ts +0 -9
  631. package/lib/store/createRedisStore.js +0 -138
  632. package/lib/store/createRedisStore.js.map +0 -1
  633. package/lib/store/createStore.d.ts +0 -6
  634. package/lib/store/createStore.js +0 -70
  635. package/lib/store/createStore.js.map +0 -1
  636. package/lib/store/index.d.ts +0 -81
  637. package/lib/store/index.js +0 -6
  638. package/lib/store/index.js.map +0 -1
  639. package/lib/types/contracts/ArbitrumL1FeeAbi.d.ts +0 -32
  640. package/lib/types/contracts/ArbitrumL1FeeAbi.js +0 -45
  641. package/lib/types/contracts/ArbitrumL1FeeAbi.js.map +0 -1
  642. package/lib/types/contracts/CallEngine.d.ts +0 -28
  643. package/lib/types/contracts/CallEngine.js +0 -40
  644. package/lib/types/contracts/CallEngine.js.map +0 -1
  645. package/lib/types/contracts/CodeHashGetter.d.ts +0 -37
  646. package/lib/types/contracts/CodeHashGetter.js +0 -48
  647. package/lib/types/contracts/CodeHashGetter.js.map +0 -1
  648. package/lib/types/contracts/EntryPoint.d.ts +0 -1789
  649. package/lib/types/contracts/EntryPoint.js +0 -2307
  650. package/lib/types/contracts/EntryPoint.js.map +0 -1
  651. package/lib/types/contracts/EntryPointSimulationsV6.d.ts +0 -34
  652. package/lib/types/contracts/EntryPointSimulationsV6.js +0 -51
  653. package/lib/types/contracts/EntryPointSimulationsV6.js.map +0 -1
  654. package/lib/types/contracts/EntryPointSimulationsV7.d.ts +0 -2193
  655. package/lib/types/contracts/EntryPointSimulationsV7.js +0 -2828
  656. package/lib/types/contracts/EntryPointSimulationsV7.js.map +0 -1
  657. package/lib/types/contracts/IAccountExecute.d.ts +0 -53
  658. package/lib/types/contracts/IAccountExecute.js +0 -71
  659. package/lib/types/contracts/IAccountExecute.js.map +0 -1
  660. package/lib/types/contracts/IPaymaster.d.ts +0 -3
  661. package/lib/types/contracts/IPaymaster.js +0 -120
  662. package/lib/types/contracts/IPaymaster.js.map +0 -1
  663. package/lib/types/contracts/MantleBvmGasPriceOracle.d.ts +0 -219
  664. package/lib/types/contracts/MantleBvmGasPriceOracle.js +0 -180
  665. package/lib/types/contracts/MantleBvmGasPriceOracle.js.map +0 -1
  666. package/lib/types/contracts/OpL1FeeAbi.d.ts +0 -114
  667. package/lib/types/contracts/OpL1FeeAbi.js +0 -77
  668. package/lib/types/contracts/OpL1FeeAbi.js.map +0 -1
  669. package/lib/types/contracts/PimlicoEntryPointSimulations.d.ts +0 -26
  670. package/lib/types/contracts/PimlicoEntryPointSimulations.js +0 -41
  671. package/lib/types/contracts/PimlicoEntryPointSimulations.js.map +0 -1
  672. package/lib/types/contracts/SenderCreator.d.ts +0 -4
  673. package/lib/types/contracts/SenderCreator.js +0 -26
  674. package/lib/types/contracts/SenderCreator.js.map +0 -1
  675. package/lib/types/contracts/SimpleAccountFactory.d.ts +0 -57
  676. package/lib/types/contracts/SimpleAccountFactory.js +0 -79
  677. package/lib/types/contracts/SimpleAccountFactory.js.map +0 -1
  678. package/lib/types/contracts/TestOpcodesAccount.d.ts +0 -4
  679. package/lib/types/contracts/TestOpcodesAccount.js +0 -284
  680. package/lib/types/contracts/TestOpcodesAccount.js.map +0 -1
  681. package/lib/types/contracts/TestOpcodesAccountFactory.d.ts +0 -4
  682. package/lib/types/contracts/TestOpcodesAccountFactory.js +0 -26
  683. package/lib/types/contracts/TestOpcodesAccountFactory.js.map +0 -1
  684. package/lib/types/contracts/TestStorageAccount.d.ts +0 -4
  685. package/lib/types/contracts/TestStorageAccount.js +0 -316
  686. package/lib/types/contracts/TestStorageAccount.js.map +0 -1
  687. package/lib/types/contracts/index.d.ts +0 -17
  688. package/lib/types/contracts/index.js +0 -33
  689. package/lib/types/contracts/index.js.map +0 -1
  690. package/lib/types/gasPrice.d.ts +0 -110
  691. package/lib/types/gasPrice.js +0 -55
  692. package/lib/types/gasPrice.js.map +0 -1
  693. package/lib/types/index.d.ts +0 -11
  694. package/lib/types/index.js +0 -27
  695. package/lib/types/index.js.map +0 -1
  696. package/lib/types/interfaces.d.ts +0 -59
  697. package/lib/types/interfaces.js +0 -3
  698. package/lib/types/interfaces.js.map +0 -1
  699. package/lib/types/mempool.d.ts +0 -60
  700. package/lib/types/mempool.js +0 -11
  701. package/lib/types/mempool.js.map +0 -1
  702. package/lib/types/schemas.d.ts +0 -20779
  703. package/lib/types/schemas.js +0 -638
  704. package/lib/types/schemas.js.map +0 -1
  705. package/lib/types/utils.d.ts +0 -25
  706. package/lib/types/utils.js +0 -35
  707. package/lib/types/utils.js.map +0 -1
  708. package/lib/types/validation.d.ts +0 -14327
  709. package/lib/types/validation.js +0 -312
  710. package/lib/types/validation.js.map +0 -1
  711. package/lib/utils/bigInt.d.ts +0 -4
  712. package/lib/utils/bigInt.js +0 -19
  713. package/lib/utils/bigInt.js.map +0 -1
  714. package/lib/utils/eip7702.d.ts +0 -4
  715. package/lib/utils/eip7702.js +0 -21
  716. package/lib/utils/eip7702.js.map +0 -1
  717. package/lib/utils/fastify-rpc-decorators.d.ts +0 -19
  718. package/lib/utils/fastify-rpc-decorators.js +0 -23
  719. package/lib/utils/fastify-rpc-decorators.js.map +0 -1
  720. package/lib/utils/helpers.d.ts +0 -15
  721. package/lib/utils/helpers.js +0 -59
  722. package/lib/utils/helpers.js.map +0 -1
  723. package/lib/utils/index.d.ts +0 -8
  724. package/lib/utils/index.js +0 -23
  725. package/lib/utils/index.js.map +0 -1
  726. package/lib/utils/logger.d.ts +0 -6
  727. package/lib/utils/logger.js +0 -85
  728. package/lib/utils/logger.js.map +0 -1
  729. package/lib/utils/metrics.d.ts +0 -28
  730. package/lib/utils/metrics.js +0 -192
  731. package/lib/utils/metrics.js.map +0 -1
  732. package/lib/utils/minMaxQueue/createMemoryMinMaxQueue.d.ts +0 -6
  733. package/lib/utils/minMaxQueue/createMemoryMinMaxQueue.js +0 -57
  734. package/lib/utils/minMaxQueue/createMemoryMinMaxQueue.js.map +0 -1
  735. package/lib/utils/minMaxQueue/createRedisMinMaxQueue.d.ts +0 -7
  736. package/lib/utils/minMaxQueue/createRedisMinMaxQueue.js +0 -105
  737. package/lib/utils/minMaxQueue/createRedisMinMaxQueue.js.map +0 -1
  738. package/lib/utils/minMaxQueue/index.d.ts +0 -12
  739. package/lib/utils/minMaxQueue/index.js +0 -16
  740. package/lib/utils/minMaxQueue/index.js.map +0 -1
  741. package/lib/utils/rpc-reply.d.ts +0 -16
  742. package/lib/utils/rpc-reply.js +0 -41
  743. package/lib/utils/rpc-reply.js.map +0 -1
  744. package/lib/utils/userop.d.ts +0 -138
  745. package/lib/utils/userop.js +0 -620
  746. package/lib/utils/userop.js.map +0 -1
  747. package/lib/utils/validation.d.ts +0 -76
  748. package/lib/utils/validation.js +0 -500
  749. package/lib/utils/validation.js.map +0 -1
@@ -1,46 +1,34 @@
1
- import { EntryPointV06Abi } from "../types/index.js";
2
- import { getAAError, getBundleStatus, parseUserOperationReceipt, scaleBigIntByPercent } from "../utils/index.js";
3
- import { TransactionReceiptNotFoundError, getAbiItem, InsufficientFundsError, NonceTooLowError } from "viem";
4
- import { BaseError } from "abitype";
1
+ import { scaleBigIntByPercent } from "../utils/index.js";
5
2
  import { getUserOpHashes } from "./utils.js";
6
- function getTransactionsFromUserOperationEntries(submittedOps) {
7
- const transactionInfos = submittedOps.map((userOpInfo) => userOpInfo.transactionInfo);
8
- // Remove duplicates
9
- return Array.from(new Set(transactionInfos));
10
- }
11
- const MIN_INTERVAL = 100; // 0.1 seconds (100ms)
12
- const MAX_INTERVAL = 1000; // Capped at 1 second (1000ms)
13
- const SCALE_FACTOR = 10; // Interval increases by 5ms per task per minute
3
+ const SCALE_FACTOR = 10; // Interval increases by 10ms per task per minute
14
4
  const RPM_WINDOW = 60000; // 1 minute window in ms
15
5
  export class ExecutorManager {
16
6
  senderManager;
17
7
  config;
18
8
  executor;
19
9
  mempool;
20
- monitor;
21
10
  logger;
22
11
  metrics;
23
- reputationManager;
24
- unWatch;
25
- currentlyHandlingBlock = false;
26
12
  gasPriceManager;
27
- eventManager;
13
+ bundleManager;
28
14
  opsCount = [];
29
15
  bundlingMode;
30
- constructor({ config, executor, mempool, monitor, reputationManager, metrics, gasPriceManager, eventManager, senderManager }) {
16
+ unWatch;
17
+ currentlyHandlingBlock = false;
18
+ constructor({ config, executor, mempool, metrics, gasPriceManager, senderManager, bundleManager }) {
31
19
  this.config = config;
32
- this.reputationManager = reputationManager;
33
20
  this.executor = executor;
34
21
  this.mempool = mempool;
35
- this.monitor = monitor;
36
22
  this.logger = config.getLogger({ module: "executor_manager" }, {
37
23
  level: config.executorLogLevel || config.logLevel
38
24
  });
39
25
  this.metrics = metrics;
40
26
  this.gasPriceManager = gasPriceManager;
41
- this.eventManager = eventManager;
42
27
  this.senderManager = senderManager;
43
28
  this.bundlingMode = this.config.bundleMode;
29
+ this.bundleManager = bundleManager;
30
+ }
31
+ start() {
44
32
  if (this.bundlingMode === "auto") {
45
33
  this.autoScalingBundling();
46
34
  }
@@ -48,7 +36,7 @@ export class ExecutorManager {
48
36
  async setBundlingMode(bundleMode) {
49
37
  this.bundlingMode = bundleMode;
50
38
  if (bundleMode === "manual") {
51
- await new Promise((resolve) => setTimeout(resolve, 2 * MAX_INTERVAL));
39
+ await new Promise((resolve) => setTimeout(resolve, 2 * this.config.maxBundleInterval));
52
40
  }
53
41
  if (bundleMode === "auto") {
54
42
  this.autoScalingBundling();
@@ -57,40 +45,65 @@ export class ExecutorManager {
57
45
  async autoScalingBundling() {
58
46
  const now = Date.now();
59
47
  this.opsCount = this.opsCount.filter((timestamp) => now - timestamp < RPM_WINDOW);
60
- const bundles = await this.mempool.getBundles();
48
+ const bundles = await this.mempool.getBundles(this.config.maxBundleCount);
61
49
  if (bundles.length > 0) {
62
- const opsCount = bundles
63
- .map(({ userOps }) => userOps.length)
64
- .reduce((a, b) => a + b);
65
- // Add timestamps for each task
66
- const timestamp = Date.now();
67
- this.opsCount.push(...Array(opsCount).fill(timestamp));
68
- // Send bundles to executor
69
- await Promise.all(bundles.map(async (bundle) => {
70
- await this.sendBundleToExecutor(bundle);
71
- }));
50
+ // Count total ops and add timestamps
51
+ const totalOps = bundles.reduce((sum, bundle) => sum + bundle.userOps.length, 0);
52
+ this.opsCount.push(...new Array(totalOps).fill(Date.now()));
53
+ }
54
+ // Send bundles to executor
55
+ for (const bundle of bundles) {
56
+ this.sendBundleToExecutor(bundle);
72
57
  }
73
58
  const rpm = this.opsCount.length;
74
59
  // Calculate next interval with linear scaling
75
- const nextInterval = Math.min(MIN_INTERVAL + rpm * SCALE_FACTOR, // Linear scaling
76
- MAX_INTERVAL // Cap at 1000ms
60
+ const nextInterval = Math.min(this.config.minBundleInterval + rpm * SCALE_FACTOR, // Linear scaling
61
+ this.config.maxBundleInterval // Cap at configured max interval
77
62
  );
78
63
  if (this.bundlingMode === "auto") {
79
64
  setTimeout(this.autoScalingBundling.bind(this), nextInterval);
80
65
  }
81
66
  }
82
- // Debug endpoint
83
- async sendBundleNow() {
84
- const bundles = await this.mempool.getBundles(1);
85
- const bundle = bundles[0];
86
- if (bundles.length === 0 || bundle.userOps.length === 0) {
67
+ startWatchingBlocks() {
68
+ if (this.unWatch) {
87
69
  return;
88
70
  }
89
- const txHash = await this.sendBundleToExecutor(bundle);
90
- if (!txHash) {
91
- throw new Error("no tx hash");
71
+ // If preconfirmationTime is set, poll at intervals instead of watching blocks
72
+ if (this.config.flashblocksPreconfirmationTime) {
73
+ // Set up interval to call handleBlock
74
+ const intervalId = setInterval(async () => {
75
+ try {
76
+ await this.handleBlock();
77
+ }
78
+ catch (err) {
79
+ this.logger.error({ err }, "error while polling blocks");
80
+ }
81
+ }, this.config.flashblocksPreconfirmationTime);
82
+ // Store cleanup function
83
+ this.unWatch = () => {
84
+ clearInterval(intervalId);
85
+ };
86
+ }
87
+ else {
88
+ // Default behavior - watch blocks
89
+ this.unWatch = this.config.publicClient.watchBlocks({
90
+ onBlock: async (block) => {
91
+ await this.handleBlock(block);
92
+ },
93
+ onError: (err) => {
94
+ this.logger.error({ err }, "error while watching blocks");
95
+ },
96
+ includeTransactions: false,
97
+ emitMissed: false
98
+ });
99
+ }
100
+ this.logger.debug("started watching blocks");
101
+ }
102
+ async getBaseFee() {
103
+ if (this.config.legacyTransactions) {
104
+ return 0n;
92
105
  }
93
- return txHash;
106
+ return await this.gasPriceManager.getBaseFee();
94
107
  }
95
108
  async sendBundleToExecutor(userOpBundle) {
96
109
  const { entryPoint, userOps, version } = userOpBundle;
@@ -98,8 +111,9 @@ export class ExecutorManager {
98
111
  return undefined;
99
112
  }
100
113
  const wallet = await this.senderManager.getWallet();
101
- const [gasPriceParams, nonce] = await Promise.all([
114
+ const [gasPriceParams, baseFee, nonce] = await Promise.all([
102
115
  this.gasPriceManager.tryGetNetworkGasPrice(),
116
+ this.getBaseFee(),
103
117
  this.config.publicClient.getTransactionCount({
104
118
  address: wallet.address,
105
119
  blockTag: "latest"
@@ -108,571 +122,332 @@ export class ExecutorManager {
108
122
  return [];
109
123
  });
110
124
  if (!gasPriceParams || nonce === undefined) {
111
- await this.resubmitUserOperations(userOps, entryPoint, "Failed to get nonce and gas parameters for bundling");
112
125
  // Free executor if failed to get initial params.
113
126
  await this.senderManager.markWalletProcessed(wallet);
127
+ await this.mempool.resubmitUserOps({
128
+ userOps,
129
+ entryPoint,
130
+ reason: "Failed to get nonce and gas parameters for bundling"
131
+ });
114
132
  return undefined;
115
133
  }
116
134
  const bundleResult = await this.executor.bundle({
117
135
  executor: wallet,
118
136
  userOpBundle,
119
- nonce,
120
- gasPriceParams,
121
- isReplacementTx: false
137
+ networkGasPrice: gasPriceParams,
138
+ networkBaseFee: baseFee,
139
+ nonce
122
140
  });
123
- // Free wallet if no bundle was sent.
124
- if (bundleResult.status !== "bundle_success") {
141
+ if (!bundleResult.success) {
142
+ const { rejectedUserOps, recoverableOps, reason } = bundleResult;
143
+ // Recover any userOps that can be resubmitted.
144
+ await this.mempool.resubmitUserOps({
145
+ userOps: recoverableOps,
146
+ entryPoint,
147
+ reason
148
+ });
149
+ // For rejected userOps, we need to check for frontruns
150
+ const shouldCheckFrontrun = rejectedUserOps.some(({ reason }) => reason.includes("AA25 invalid account nonce") ||
151
+ reason.includes("AA10 sender already constructed"));
152
+ if (shouldCheckFrontrun) {
153
+ // Check each rejected userOp for frontrun or included
154
+ const results = await Promise.all(rejectedUserOps.map(async (userOpInfo) => ({
155
+ userOpInfo,
156
+ status: await this.bundleManager.getUserOpStatus({
157
+ userOpInfo,
158
+ entryPoint,
159
+ bundlerTxs: [],
160
+ blockReceivedTimestamp: Date.now()
161
+ })
162
+ })));
163
+ // Drop userOps that were rejected but not frontrun or included
164
+ const notFoundUserOps = results
165
+ .filter(({ status }) => status === "not_found")
166
+ .map(({ userOpInfo }) => userOpInfo);
167
+ await this.mempool.dropUserOps(entryPoint, notFoundUserOps);
168
+ // Stop tracking userOps that were included onchain either due to frontrun or included
169
+ const confirmedUserOps = results
170
+ .filter(({ status }) => ["frontran", "included"].includes(status))
171
+ .map(({ userOpInfo }) => userOpInfo);
172
+ await this.mempool.removeProcessing({
173
+ entryPoint,
174
+ userOps: confirmedUserOps
175
+ });
176
+ }
177
+ else {
178
+ this.logger.warn({ reason }, "failed to send bundle transaction");
179
+ await this.mempool.dropUserOps(entryPoint, rejectedUserOps);
180
+ }
181
+ // Free wallet as no bundle was sent.
125
182
  await this.senderManager.markWalletProcessed(wallet);
126
- }
127
- // All ops failed simulation, drop them and return.
128
- if (bundleResult.status === "all_ops_failed_simulation") {
129
- const { rejectedUserOps } = bundleResult;
130
- await this.dropUserOps(entryPoint, rejectedUserOps);
131
- return undefined;
132
- }
133
- // Unhandled error during simulation, drop all ops.
134
- if (bundleResult.status === "unhandled_simulation_failure") {
135
- const { rejectedUserOps } = bundleResult;
136
- await this.dropUserOps(entryPoint, rejectedUserOps);
137
- this.metrics.bundlesSubmitted.labels({ status: "failed" }).inc();
138
- return undefined;
139
- }
140
- // Resubmit if executor has insufficient funds.
141
- if (bundleResult.status === "bundle_submission_failure" &&
142
- bundleResult.reason instanceof InsufficientFundsError) {
143
- const { reason, userOpsToBundle, rejectedUserOps } = bundleResult;
144
- await this.dropUserOps(entryPoint, rejectedUserOps);
145
- await this.resubmitUserOperations(userOpsToBundle, entryPoint, reason.name);
146
- this.metrics.bundlesSubmitted.labels({ status: "resubmit" }).inc();
147
- return undefined;
148
- }
149
- // Encountered unhandled error during bundle simulation.
150
- if (bundleResult.status === "bundle_submission_failure") {
151
- const { rejectedUserOps, userOpsToBundle, reason } = bundleResult;
152
- await this.dropUserOps(entryPoint, rejectedUserOps);
153
- // NOTE: these ops passed validation, so we can try resubmitting them
154
- await this.resubmitUserOperations(userOpsToBundle, entryPoint, reason instanceof BaseError
155
- ? reason.name
156
- : "Encountered unhandled error during bundle simulation");
157
- this.metrics.bundlesSubmitted.labels({ status: "failed" }).inc();
183
+ this.metrics.userOpsSubmitted
184
+ .labels({ status: "failed" })
185
+ .inc(rejectedUserOps.length);
186
+ if (reason === "filterops_failed" || reason === "generic_error") {
187
+ this.metrics.bundlesSubmitted.labels({ status: "failed" }).inc();
188
+ }
158
189
  return undefined;
159
190
  }
160
- if (bundleResult.status === "bundle_success") {
161
- const { userOpsBundled, rejectedUserOps, transactionRequest, transactionHash } = bundleResult;
162
- const transactionInfo = {
163
- executor: wallet,
164
- transactionHash,
165
- transactionRequest,
166
- bundle: {
167
- entryPoint,
168
- version,
169
- userOps: userOpsBundled
170
- },
171
- previousTransactionHashes: [],
172
- lastReplaced: Date.now(),
173
- firstSubmitted: Date.now(),
174
- timesPotentiallyIncluded: 0
175
- };
176
- await this.markUserOperationsAsSubmitted(userOpsBundled, transactionInfo);
177
- await this.dropUserOps(entryPoint, rejectedUserOps);
178
- this.metrics.bundlesSubmitted.labels({ status: "success" }).inc();
179
- return transactionHash;
180
- }
181
- return undefined;
182
- }
183
- startWatchingBlocks(handleBlock) {
184
- if (this.unWatch) {
185
- return;
186
- }
187
- this.unWatch = this.config.publicClient.watchBlocks({
188
- onBlock: handleBlock,
189
- onError: (error) => {
190
- this.logger.error({ error }, "error while watching blocks");
191
+ // Success case
192
+ let { userOpsBundled, rejectedUserOps, transactionRequest, transactionHash } = bundleResult;
193
+ // Increment submission attempts for all userOps submitted.
194
+ userOpsBundled = userOpsBundled.map((userOpInfo) => ({
195
+ ...userOpInfo,
196
+ submissionAttempts: userOpInfo.submissionAttempts + 1
197
+ }));
198
+ const submittedBundle = {
199
+ uid: transactionHash,
200
+ executor: wallet,
201
+ transactionHash,
202
+ transactionRequest,
203
+ bundle: {
204
+ entryPoint,
205
+ version,
206
+ userOps: userOpsBundled,
207
+ submissionAttempts: 1
191
208
  },
192
- emitMissed: false,
193
- includeTransactions: false,
194
- pollingInterval: this.config.pollingInterval
209
+ previousTransactionHashes: [],
210
+ lastReplaced: Date.now()
211
+ };
212
+ // Track bundle and start loop to watch blocks
213
+ this.bundleManager.trackBundle(submittedBundle);
214
+ this.startWatchingBlocks();
215
+ await this.mempool.markUserOpsAsSubmitted({
216
+ userOps: submittedBundle.bundle.userOps,
217
+ transactionHash: submittedBundle.transactionHash
195
218
  });
196
- this.logger.debug("started watching blocks");
219
+ await this.mempool.dropUserOps(entryPoint, rejectedUserOps);
220
+ this.metrics.bundlesSubmitted.labels({ status: "success" }).inc();
221
+ return transactionHash;
197
222
  }
198
223
  stopWatchingBlocks() {
199
224
  if (this.unWatch) {
200
- this.logger.debug("stopped watching blocks");
201
225
  this.unWatch();
202
226
  this.unWatch = undefined;
203
227
  }
204
228
  }
205
- // update the current status of the bundling transaction/s
206
- async refreshTransactionStatus(transactionInfo) {
207
- const { transactionHash: currentTxhash, bundle, previousTransactionHashes } = transactionInfo;
208
- const { userOps, entryPoint } = bundle;
209
- const txHashesToCheck = [currentTxhash, ...previousTransactionHashes];
210
- const transactionDetails = await Promise.all(txHashesToCheck.map(async (transactionHash) => ({
211
- transactionHash,
212
- ...(await getBundleStatus({
213
- transactionHash,
214
- bundle: transactionInfo.bundle,
215
- publicClient: this.config.publicClient,
216
- logger: this.logger
217
- }))
218
- })));
219
- // first check if bundling txs returns status "mined", if not, check for reverted
220
- const mined = transactionDetails.find(({ bundlingStatus }) => bundlingStatus.status === "included");
221
- const reverted = transactionDetails.find(({ bundlingStatus }) => bundlingStatus.status === "reverted");
222
- const finalizedTransaction = mined ?? reverted;
223
- if (!finalizedTransaction) {
224
- return;
225
- }
226
- const { bundlingStatus, transactionHash, blockNumber } = finalizedTransaction;
227
- // TODO: there has to be a better way of solving onchain AA95 errors.
228
- if (bundlingStatus.status === "reverted" && bundlingStatus.isAA95) {
229
- // resubmit with more gas when bundler encounters AA95
230
- transactionInfo.transactionRequest.gas = scaleBigIntByPercent(transactionInfo.transactionRequest.gas, this.config.aa95GasMultiplier);
231
- transactionInfo.transactionRequest.nonce += 1;
232
- await this.replaceTransaction(transactionInfo, "AA95");
233
- return;
234
- }
235
- // Free executor if tx landed onchain
236
- if (bundlingStatus.status !== "not_found") {
237
- await this.senderManager.markWalletProcessed(transactionInfo.executor);
238
- }
239
- if (bundlingStatus.status === "included") {
240
- const { userOperationDetails } = bundlingStatus;
241
- await this.markUserOpsIncluded(userOps, entryPoint, blockNumber, transactionHash, userOperationDetails);
242
- }
243
- if (bundlingStatus.status === "reverted") {
244
- await Promise.all(userOps.map(async (userOpInfo) => {
245
- const { userOpHash } = userOpInfo;
246
- await this.checkFrontrun({
247
- entryPoint,
248
- userOpHash,
249
- transactionHash,
250
- blockNumber
251
- });
252
- }));
253
- await this.removeSubmitted(entryPoint, userOps);
254
- }
255
- }
256
- async checkFrontrun({ userOpHash, entryPoint, transactionHash, blockNumber }) {
257
- const unwatch = this.config.publicClient.watchBlockNumber({
258
- onBlockNumber: async (currentBlockNumber) => {
259
- if (currentBlockNumber > blockNumber + 1n) {
260
- try {
261
- const userOperationReceipt = await this.getUserOperationReceipt(userOpHash);
262
- if (userOperationReceipt) {
263
- const transactionHash = userOperationReceipt.receipt.transactionHash;
264
- const blockNumber = userOperationReceipt.receipt.blockNumber;
265
- await this.mempool.removeSubmitted({
266
- entryPoint,
267
- userOpHash
268
- });
269
- await this.monitor.setUserOperationStatus(userOpHash, {
270
- status: "included",
271
- transactionHash
272
- });
273
- await this.eventManager.emitFrontranOnChain(userOpHash, transactionHash, blockNumber);
274
- this.logger.info({
275
- userOpHash,
276
- transactionHash
277
- }, "user op frontrun onchain");
278
- this.metrics.userOperationsOnChain
279
- .labels({ status: "frontran" })
280
- .inc(1);
281
- }
282
- else {
283
- await this.monitor.setUserOperationStatus(userOpHash, {
284
- status: "failed",
285
- transactionHash
286
- });
287
- await this.eventManager.emitFailedOnChain(userOpHash, transactionHash, blockNumber);
288
- this.logger.info({
289
- userOpHash,
290
- transactionHash
291
- }, "user op failed onchain");
292
- this.metrics.userOperationsOnChain
293
- .labels({ status: "reverted" })
294
- .inc(1);
295
- }
296
- }
297
- catch (error) {
298
- this.logger.error({
299
- userOpHash,
300
- transactionHash,
301
- error
302
- }, "Error checking frontrun status");
303
- // Still mark as failed since we couldn't verify inclusion
304
- await this.monitor.setUserOperationStatus(userOpHash, {
305
- status: "failed",
306
- transactionHash
307
- });
308
- }
309
- unwatch();
310
- }
311
- }
312
- });
313
- }
314
- async getUserOperationReceipt(userOperationHash) {
315
- const userOperationEventAbiItem = getAbiItem({
316
- abi: EntryPointV06Abi,
317
- name: "UserOperationEvent"
318
- });
319
- let fromBlock = undefined;
320
- let toBlock = undefined;
321
- if (this.config.maxBlockRange !== undefined) {
322
- const latestBlock = await this.config.publicClient.getBlockNumber();
323
- fromBlock = latestBlock - BigInt(this.config.maxBlockRange);
324
- if (fromBlock < 0n) {
325
- fromBlock = 0n;
326
- }
327
- toBlock = "latest";
328
- }
329
- const filterResult = await this.config.publicClient.getLogs({
330
- address: this.config.entrypoints,
331
- event: userOperationEventAbiItem,
332
- fromBlock,
333
- toBlock,
334
- args: {
335
- userOpHash: userOperationHash
336
- }
337
- });
338
- this.logger.debug({
339
- filterResult: filterResult.length,
340
- userOperationEvent: filterResult.length === 0
341
- ? undefined
342
- : filterResult[0].transactionHash
343
- }, "filter result length");
344
- if (filterResult.length === 0) {
345
- return null;
346
- }
347
- const userOperationEvent = filterResult[0];
348
- // throw if any of the members of userOperationEvent are undefined
349
- if (userOperationEvent.args.actualGasCost === undefined ||
350
- userOperationEvent.args.sender === undefined ||
351
- userOperationEvent.args.nonce === undefined ||
352
- userOperationEvent.args.userOpHash === undefined ||
353
- userOperationEvent.args.success === undefined ||
354
- userOperationEvent.args.paymaster === undefined ||
355
- userOperationEvent.args.actualGasUsed === undefined) {
356
- throw new Error("userOperationEvent has undefined members");
357
- }
358
- const txHash = userOperationEvent.transactionHash;
359
- if (txHash === null) {
360
- // transaction pending
361
- return null;
362
- }
363
- const getTransactionReceipt = async (txHash) => {
364
- while (true) {
365
- try {
366
- const transactionReceipt = await this.config.publicClient.getTransactionReceipt({
367
- hash: txHash
368
- });
369
- let effectiveGasPrice = transactionReceipt.effectiveGasPrice ??
370
- transactionReceipt.gasPrice ??
371
- undefined;
372
- if (effectiveGasPrice === undefined) {
373
- const tx = await this.config.publicClient.getTransaction({
374
- hash: txHash
375
- });
376
- effectiveGasPrice = tx.gasPrice ?? undefined;
377
- }
378
- if (effectiveGasPrice) {
379
- transactionReceipt.effectiveGasPrice = effectiveGasPrice;
380
- }
381
- return transactionReceipt;
382
- }
383
- catch (e) {
384
- if (e instanceof TransactionReceiptNotFoundError) {
385
- continue;
386
- }
387
- throw e;
388
- }
389
- }
390
- };
391
- const receipt = await getTransactionReceipt(txHash);
392
- const logs = receipt.logs;
393
- if (logs.some((log) => log.blockHash === null ||
394
- log.blockNumber === null ||
395
- log.transactionIndex === null ||
396
- log.transactionHash === null ||
397
- log.logIndex === null ||
398
- log.topics.length === 0)) {
399
- // transaction pending
400
- return null;
401
- }
402
- const userOperationReceipt = parseUserOperationReceipt(userOperationHash, receipt);
403
- return userOperationReceipt;
404
- }
405
229
  async handleBlock(block) {
406
230
  if (this.currentlyHandlingBlock) {
407
231
  return;
408
232
  }
409
233
  this.currentlyHandlingBlock = true;
410
- this.logger.debug({ blockNumber: block.number }, "handling block");
411
- const dumpSubmittedEntries = async () => {
412
- const submittedEntries = [];
413
- for (const entryPoint of this.config.entrypoints) {
414
- const entries = await this.mempool.dumpSubmittedOps(entryPoint);
415
- submittedEntries.push(...entries);
416
- }
417
- return submittedEntries;
418
- };
419
- const submittedEntries = await dumpSubmittedEntries();
420
- if (submittedEntries.length === 0) {
234
+ const blockReceivedTimestamp = Date.now();
235
+ const pendingBundles = this.bundleManager.getPendingBundles();
236
+ if (pendingBundles.length === 0) {
421
237
  this.stopWatchingBlocks();
422
238
  this.currentlyHandlingBlock = false;
423
239
  return;
424
240
  }
425
- // refresh op statuses
426
- const ops = await dumpSubmittedEntries();
427
- const txs = getTransactionsFromUserOperationEntries(ops);
428
- await Promise.all(txs.map((txInfo) => this.refreshTransactionStatus(txInfo)));
429
- // for all still not included check if needs to be replaced (based on gas price)
430
- const gasPriceParameters = await this.gasPriceManager
431
- .tryGetNetworkGasPrice()
432
- .catch(() => ({
433
- maxFeePerGas: 0n,
434
- maxPriorityFeePerGas: 0n
435
- }));
436
- const transactionInfos = getTransactionsFromUserOperationEntries(await dumpSubmittedEntries());
437
- await Promise.all(transactionInfos.map(async (txInfo) => {
438
- const { transactionRequest } = txInfo;
439
- const { maxFeePerGas, maxPriorityFeePerGas } = transactionRequest;
440
- const isMaxFeeTooLow = maxFeePerGas < gasPriceParameters.maxFeePerGas;
441
- const isPriorityFeeTooLow = maxPriorityFeePerGas <
442
- gasPriceParameters.maxPriorityFeePerGas;
443
- const isStuck = Date.now() - txInfo.lastReplaced >
444
- this.config.resubmitStuckTimeout;
445
- if (isMaxFeeTooLow || isPriorityFeeTooLow) {
446
- await this.replaceTransaction(txInfo, "gas_price");
447
- return;
241
+ const [bundleStatuses, networkGasPrice, networkBaseFee] = await Promise.all([
242
+ this.bundleManager.getBundleStatuses(pendingBundles),
243
+ this.gasPriceManager.tryGetNetworkGasPrice().catch(() => ({
244
+ maxFeePerGas: 0n,
245
+ maxPriorityFeePerGas: 0n
246
+ })),
247
+ this.getBaseFee().catch(() => 0n)
248
+ ]);
249
+ await Promise.all(bundleStatuses.map(async (bundleStatus, index) => {
250
+ if (bundleStatus.status === "included") {
251
+ await this.bundleManager.processIncludedBundle({
252
+ submittedBundle: pendingBundles[index],
253
+ bundleReceipt: bundleStatus,
254
+ blockReceivedTimestamp
255
+ });
256
+ }
257
+ if (bundleStatus.status === "reverted") {
258
+ await this.bundleManager.processRevertedBundle({
259
+ blockReceivedTimestamp,
260
+ submittedBundle: pendingBundles[index],
261
+ bundleReceipt: bundleStatus,
262
+ block
263
+ });
448
264
  }
449
- if (isStuck) {
450
- await this.replaceTransaction(txInfo, "stuck");
451
- return;
265
+ // can be potentially resubmitted - so we first submit it again to optimize for the speed
266
+ if (bundleStatus.status === "not_found") {
267
+ this.potentiallyResubmitBundle({
268
+ blockReceivedTimestamp,
269
+ submittedBundle: pendingBundles[index],
270
+ networkGasPrice,
271
+ networkBaseFee
272
+ });
452
273
  }
453
274
  }));
454
275
  this.currentlyHandlingBlock = false;
455
276
  }
456
- async replaceTransaction(txInfo, reason) {
457
- // Setup vars
458
- const { bundle, executor, transactionRequest, transactionHash: oldTxHash } = txInfo;
459
- const { userOps, entryPoint } = bundle;
460
- const gasPriceParameters = await this.gasPriceManager
461
- .tryGetNetworkGasPrice()
462
- .catch((_) => {
463
- return undefined;
464
- });
465
- if (!gasPriceParameters) {
466
- const rejectedUserOps = userOps.map((userOpInfo) => ({
467
- ...userOpInfo,
468
- reason: "Failed to get network gas price during replacement"
469
- }));
470
- await this.failedToReplaceTransaction({
471
- entryPoint,
472
- rejectedUserOps,
473
- oldTxHash,
474
- reason: "Failed to get network gas price during replacement"
277
+ potentiallyResubmitBundle({ blockReceivedTimestamp, submittedBundle, networkGasPrice, networkBaseFee }) {
278
+ const { transactionRequest, lastReplaced } = submittedBundle;
279
+ const { maxFeePerGas, maxPriorityFeePerGas } = transactionRequest;
280
+ const isGasPriceTooLow = maxFeePerGas < networkGasPrice.maxFeePerGas ||
281
+ maxPriorityFeePerGas < networkGasPrice.maxPriorityFeePerGas;
282
+ const isStuck = Date.now() - lastReplaced > this.config.resubmitStuckTimeout;
283
+ if (isGasPriceTooLow) {
284
+ this.bundleManager.stopTrackingBundle(submittedBundle);
285
+ this.replaceTransaction({
286
+ blockReceivedTimestamp,
287
+ submittedBundle,
288
+ networkGasPrice,
289
+ networkBaseFee,
290
+ reason: "gas_price"
475
291
  });
476
- // Free executor if failed to get initial params.
477
- await this.senderManager.markWalletProcessed(txInfo.executor);
478
- return;
479
292
  }
293
+ else if (isStuck) {
294
+ this.bundleManager.stopTrackingBundle(submittedBundle);
295
+ this.replaceTransaction({
296
+ blockReceivedTimestamp,
297
+ submittedBundle,
298
+ networkGasPrice,
299
+ networkBaseFee,
300
+ reason: "stuck"
301
+ });
302
+ }
303
+ }
304
+ async cancelBundle(submittedBundle) {
305
+ const { bundle: { userOps }, executor, transactionRequest, transactionHash } = submittedBundle;
306
+ const { walletClients, publicClient, blockTime } = this.config;
307
+ const walletClient = walletClients.public;
308
+ const logger = this.logger.child({
309
+ userOps: getUserOpHashes(userOps)
310
+ });
311
+ let gasMultiplier = 150n; // Start with 50% increase
312
+ for (let attempt = 0; attempt < 5; attempt++) {
313
+ try {
314
+ // Check if transaction is still pending
315
+ const currentNonce = await publicClient.getTransactionCount({
316
+ address: executor.address,
317
+ blockTag: "latest"
318
+ });
319
+ if (currentNonce > transactionRequest.nonce) {
320
+ logger.info("Transaction already mined or cancelled");
321
+ return;
322
+ }
323
+ logger.info(`Trying to cancel bundle, attempt ${attempt + 1}`);
324
+ // Send cancel transaction with increasing gas price
325
+ const cancelTxHash = await walletClient.sendTransaction({
326
+ account: executor,
327
+ to: executor.address,
328
+ value: 0n,
329
+ nonce: transactionRequest.nonce,
330
+ maxFeePerGas: scaleBigIntByPercent(transactionRequest.maxFeePerGas, gasMultiplier),
331
+ maxPriorityFeePerGas: scaleBigIntByPercent(transactionRequest.maxPriorityFeePerGas, gasMultiplier)
332
+ });
333
+ logger.info({
334
+ originalTxHash: transactionHash,
335
+ cancelTxHash,
336
+ attempt: attempt + 1
337
+ }, "cancel transaction sent");
338
+ // Wait for transaction to potentially be mined
339
+ await new Promise((resolve) => setTimeout(resolve, blockTime / 2));
340
+ }
341
+ catch (err) {
342
+ logger.warn({ err }, "failed to cancel bundle");
343
+ gasMultiplier += 20n; // Increase gas by additional 20% each retry
344
+ }
345
+ }
346
+ // All retries exhausted
347
+ logger.error({ transactionHash }, "failed to cancel bundle after max retries");
348
+ }
349
+ async replaceTransaction({ blockReceivedTimestamp, submittedBundle, networkGasPrice, networkBaseFee, reason }) {
350
+ const { bundle, executor, transactionRequest, transactionHash: oldTxHash } = submittedBundle;
351
+ const { entryPoint } = bundle;
480
352
  const bundleResult = await this.executor.bundle({
481
353
  executor: executor,
354
+ networkGasPrice,
355
+ networkBaseFee,
482
356
  userOpBundle: bundle,
483
- nonce: transactionRequest.nonce,
484
- gasPriceParams: {
485
- maxFeePerGas: scaleBigIntByPercent(gasPriceParameters.maxFeePerGas, 115n),
486
- maxPriorityFeePerGas: scaleBigIntByPercent(gasPriceParameters.maxPriorityFeePerGas, 115n)
487
- },
488
- gasLimitSuggestion: transactionRequest.gas,
489
- isReplacementTx: true
357
+ nonce: transactionRequest.nonce
490
358
  });
491
- // Free wallet and return if potentially included too many times.
492
- if (txInfo.timesPotentiallyIncluded >= 3) {
493
- this.removeSubmitted(entryPoint, bundle.userOps);
494
- this.logger.warn({
495
- oldTxHash,
496
- userOps: getUserOpHashes(bundleResult.rejectedUserOps)
497
- }, "transaction potentially already included too many times, removing");
498
- await this.senderManager.markWalletProcessed(txInfo.executor);
499
- return;
500
- }
501
- // Free wallet if no bundle was sent or potentially included.
502
- if (bundleResult.status !== "bundle_success") {
503
- await this.senderManager.markWalletProcessed(txInfo.executor);
504
- }
505
- // Check if the transaction is potentially included.
506
- const nonceTooLow = bundleResult.status === "bundle_submission_failure" &&
507
- bundleResult.reason instanceof NonceTooLowError;
508
- const allOpsFailedSimulation = bundleResult.status === "all_ops_failed_simulation" &&
509
- bundleResult.rejectedUserOps.every((op) => op.reason === "AA25 invalid account nonce" ||
510
- op.reason === "AA10 sender already constructed");
511
- const potentiallyIncluded = nonceTooLow || allOpsFailedSimulation;
512
- // log metrics
513
- const replaceStatus = (() => {
514
- switch (true) {
515
- case potentiallyIncluded:
516
- return "potentially_already_included";
517
- case bundleResult?.status === "bundle_success":
518
- return "replaced";
519
- default:
520
- return "failed";
521
- }
522
- })();
523
- this.metrics.replacedTransactions
524
- .labels({ reason, status: replaceStatus })
525
- .inc();
526
- if (potentiallyIncluded) {
527
- this.logger.info({
528
- oldTxHash,
529
- userOpHashes: getUserOpHashes(bundleResult.rejectedUserOps)
530
- }, "transaction potentially already included");
531
- txInfo.timesPotentiallyIncluded += 1;
532
- return;
533
- }
534
- if (bundleResult.status === "unhandled_simulation_failure") {
535
- const { rejectedUserOps, reason } = bundleResult;
536
- await this.failedToReplaceTransaction({
537
- entryPoint,
538
- oldTxHash,
539
- reason,
540
- rejectedUserOps
541
- });
542
- return;
543
- }
544
- if (bundleResult.status === "all_ops_failed_simulation") {
545
- await this.failedToReplaceTransaction({
359
+ // Handle case where no bundle was sent.
360
+ if (!bundleResult.success) {
361
+ const { rejectedUserOps, recoverableOps, reason } = bundleResult;
362
+ // Recover any userOps that can be resubmitted.
363
+ await this.mempool.resubmitUserOps({
364
+ userOps: recoverableOps,
546
365
  entryPoint,
547
- oldTxHash,
548
- reason: "all ops failed simulation",
549
- rejectedUserOps: bundleResult.rejectedUserOps
550
- });
551
- return;
552
- }
553
- if (bundleResult.status === "bundle_submission_failure") {
554
- const { reason, rejectedUserOps } = bundleResult;
555
- const submissionFailureReason = reason instanceof BaseError ? reason.name : "INTERNAL FAILURE";
556
- await this.failedToReplaceTransaction({
557
- oldTxHash,
558
- rejectedUserOps,
559
- reason: submissionFailureReason,
560
- entryPoint
366
+ reason
561
367
  });
368
+ // For rejected userOps, we need to check for frontruns
369
+ const shouldCheckFrontrun = rejectedUserOps.some(({ reason }) => reason.includes("AA25 invalid account nonce") ||
370
+ reason.includes("AA10 sender already constructed"));
371
+ if (shouldCheckFrontrun) {
372
+ // Check each rejected userOp for frontrun or included
373
+ const results = await Promise.all(rejectedUserOps.map(async (userOpInfo) => ({
374
+ userOpInfo,
375
+ status: await this.bundleManager.getUserOpStatus({
376
+ userOpInfo,
377
+ entryPoint,
378
+ bundlerTxs: [
379
+ submittedBundle.transactionHash,
380
+ ...submittedBundle.previousTransactionHashes
381
+ ],
382
+ blockReceivedTimestamp
383
+ })
384
+ })));
385
+ const hasFrontrun = results.some(({ status }) => status === "frontran");
386
+ // If one userOp in the bundle was frontrun, we need to cancel the entire bundle
387
+ // as it will fail onchain
388
+ if (hasFrontrun) {
389
+ await this.cancelBundle(submittedBundle);
390
+ }
391
+ // Drop userOps that were rejected but not frontrun or included
392
+ const notFoundUserOps = results
393
+ .filter(({ status }) => status === "not_found")
394
+ .map(({ userOpInfo }) => userOpInfo);
395
+ await this.mempool.dropUserOps(entryPoint, notFoundUserOps);
396
+ // Stop tracking userOps that were included onchain either due to frontrun or included
397
+ const confirmedUserOps = results
398
+ .filter(({ status }) => ["frontran", "included"].includes(status))
399
+ .map(({ userOpInfo }) => userOpInfo);
400
+ await this.mempool.removeProcessing({
401
+ entryPoint,
402
+ userOps: confirmedUserOps
403
+ });
404
+ }
405
+ else {
406
+ this.logger.warn({ oldTxHash, reason }, "failed to replace transaction");
407
+ await this.mempool.dropUserOps(entryPoint, rejectedUserOps);
408
+ }
409
+ // Free wallet as no bundle was sent.
410
+ await this.senderManager.markWalletProcessed(executor);
411
+ this.metrics.replacedTransactions
412
+ .labels({ reason, status: "failed" })
413
+ .inc();
562
414
  return;
563
415
  }
416
+ // Success case
564
417
  const { rejectedUserOps, userOpsBundled, transactionRequest: newTransactionRequest, transactionHash: newTxHash } = bundleResult;
565
- const userOpsReplaced = userOpsBundled;
418
+ // Increment submission attempts for all replaced userOps
419
+ const userOpsReplaced = userOpsBundled.map((userOpInfo) => ({
420
+ ...userOpInfo,
421
+ submissionAttempts: userOpInfo.submissionAttempts + 1
422
+ }));
566
423
  const newTxInfo = {
567
- ...txInfo,
424
+ ...submittedBundle,
568
425
  transactionRequest: newTransactionRequest,
569
426
  transactionHash: newTxHash,
570
427
  previousTransactionHashes: [
571
- txInfo.transactionHash,
572
- ...txInfo.previousTransactionHashes
428
+ submittedBundle.transactionHash,
429
+ ...submittedBundle.previousTransactionHashes
573
430
  ],
574
431
  lastReplaced: Date.now(),
575
432
  bundle: {
576
- ...txInfo.bundle,
577
- userOps: userOpsReplaced
433
+ ...bundle,
434
+ userOps: userOpsReplaced,
435
+ submissionAttempts: bundle.submissionAttempts + 1
578
436
  }
579
437
  };
580
- await Promise.all(userOpsReplaced.map(async (userOpInfo) => {
581
- await this.mempool.replaceSubmitted({
582
- userOpInfo,
583
- transactionInfo: newTxInfo
584
- });
585
- }));
438
+ // Track bundle and start loop to watch blocks
439
+ this.bundleManager.trackBundle(newTxInfo);
440
+ this.startWatchingBlocks();
586
441
  // Drop all userOperations that were rejected during simulation.
587
- await this.dropUserOps(entryPoint, rejectedUserOps);
442
+ await this.mempool.dropUserOps(entryPoint, rejectedUserOps);
588
443
  this.logger.info({
589
444
  oldTxHash,
590
445
  newTxHash,
591
446
  reason
592
447
  }, "replaced transaction");
593
- return;
594
- }
595
- async markUserOperationsAsSubmitted(userOpInfos, transactionInfo) {
596
- await Promise.all(userOpInfos.map(async (userOpInfo) => {
597
- const { userOpHash } = userOpInfo;
598
- await this.mempool.markSubmitted({
599
- userOpHash,
600
- transactionInfo
601
- });
602
- this.startWatchingBlocks(this.handleBlock.bind(this));
603
- this.metrics.userOperationsSubmitted
604
- .labels({ status: "success" })
605
- .inc();
606
- }));
607
- }
608
- async resubmitUserOperations(userOps, entryPoint, reason) {
609
- await Promise.all(userOps.map(async (userOpInfo) => {
610
- const { userOpHash, userOp } = userOpInfo;
611
- this.logger.warn({
612
- userOpHash,
613
- reason
614
- }, "resubmitting user operation");
615
- await this.mempool.removeProcessing({ entryPoint, userOpHash });
616
- await this.mempool.add(userOp, entryPoint);
617
- this.metrics.userOperationsResubmitted.inc();
618
- }));
619
- }
620
- async failedToReplaceTransaction({ oldTxHash, rejectedUserOps, reason, entryPoint }) {
621
- this.logger.warn({ oldTxHash, reason }, "failed to replace transaction");
622
- await this.dropUserOps(entryPoint, rejectedUserOps);
623
- }
624
- async removeSubmitted(entryPoint, userOps) {
625
- await Promise.all(userOps.map(async (userOpInfo) => {
626
- const { userOpHash } = userOpInfo;
627
- await this.mempool.removeSubmitted({ entryPoint, userOpHash });
628
- }));
629
- }
630
- async markUserOpsIncluded(userOps, entryPoint, blockNumber, transactionHash, userOperationDetails) {
631
- await Promise.all(userOps.map(async (userOpInfo) => {
632
- this.metrics.userOperationsOnChain
633
- .labels({ status: "included" })
634
- .inc();
635
- const { userOpHash, userOp } = userOpInfo;
636
- const opDetails = userOperationDetails[userOpHash];
637
- const firstSubmitted = userOpInfo.addedToMempool;
638
- this.metrics.userOperationInclusionDuration.observe((Date.now() - firstSubmitted) / 1000);
639
- await this.mempool.removeSubmitted({ entryPoint, userOpHash });
640
- this.reputationManager.updateUserOperationIncludedStatus(userOp, entryPoint, opDetails.accountDeployed);
641
- if (opDetails.status === "succesful") {
642
- await this.eventManager.emitIncludedOnChain(userOpHash, transactionHash, blockNumber);
643
- }
644
- else {
645
- await this.eventManager.emitExecutionRevertedOnChain(userOpHash, transactionHash, opDetails.revertReason || "0x", blockNumber);
646
- }
647
- await this.monitor.setUserOperationStatus(userOpHash, {
648
- status: "included",
649
- transactionHash
650
- });
651
- this.logger.info({
652
- opHash: userOpHash,
653
- transactionHash
654
- }, "user op included");
655
- }));
656
- }
657
- async dropUserOps(entryPoint, rejectedUserOps) {
658
- await Promise.all(rejectedUserOps.map(async (rejectedUserOp) => {
659
- const { userOp, reason, userOpHash } = rejectedUserOp;
660
- await this.mempool.removeProcessing({ entryPoint, userOpHash });
661
- await this.mempool.removeSubmitted({ entryPoint, userOpHash });
662
- await this.eventManager.emitDropped(userOpHash, reason, getAAError(reason));
663
- await this.monitor.setUserOperationStatus(userOpHash, {
664
- status: "rejected",
665
- transactionHash: null
666
- });
667
- this.logger.warn({
668
- userOperation: JSON.stringify(userOp, (_k, v) => typeof v === "bigint" ? v.toString() : v),
669
- userOpHash,
670
- reason
671
- }, "user operation rejected");
672
- this.metrics.userOperationsSubmitted
673
- .labels({ status: "failed" })
674
- .inc();
675
- }));
448
+ this.metrics.replacedTransactions
449
+ .labels({ reason, status: "success" })
450
+ .inc();
676
451
  }
677
452
  }
678
453
  //# sourceMappingURL=executorManager.js.map