@pimlico/alto 0.0.0-main.20250428T104157 → 0.0.0-main.20250429T114818

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