@pimlico/alto 0.0.0-main.20250428T212302 → 0.0.0-main.20250429T151930

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 (386) 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/esm/cli/handler.js +4 -0
  43. package/esm/cli/handler.js.map +1 -1
  44. package/package.json +2 -1
  45. package/lib/cli/alto.d.ts +0 -7
  46. package/lib/cli/alto.js +0 -141
  47. package/lib/cli/alto.js.map +0 -1
  48. package/lib/cli/config/bundler.d.ts +0 -2872
  49. package/lib/cli/config/bundler.js +0 -242
  50. package/lib/cli/config/bundler.js.map +0 -1
  51. package/lib/cli/config/index.d.ts +0 -3
  52. package/lib/cli/config/index.js +0 -19
  53. package/lib/cli/config/index.js.map +0 -1
  54. package/lib/cli/config/options.d.ts +0 -13
  55. package/lib/cli/config/options.js +0 -587
  56. package/lib/cli/config/options.js.map +0 -1
  57. package/lib/cli/customTransport.d.ts +0 -14
  58. package/lib/cli/customTransport.js +0 -94
  59. package/lib/cli/customTransport.js.map +0 -1
  60. package/lib/cli/deploySimulationsContract.d.ts +0 -13
  61. package/lib/cli/deploySimulationsContract.js +0 -100
  62. package/lib/cli/deploySimulationsContract.js.map +0 -1
  63. package/lib/cli/handler.d.ts +0 -3
  64. package/lib/cli/handler.js +0 -157
  65. package/lib/cli/handler.js.map +0 -1
  66. package/lib/cli/index.d.ts +0 -4
  67. package/lib/cli/index.js +0 -20
  68. package/lib/cli/index.js.map +0 -1
  69. package/lib/cli/instrumentation.d.ts +0 -2
  70. package/lib/cli/instrumentation.js +0 -47
  71. package/lib/cli/instrumentation.js.map +0 -1
  72. package/lib/cli/parseArgs.d.ts +0 -8
  73. package/lib/cli/parseArgs.js +0 -25
  74. package/lib/cli/parseArgs.js.map +0 -1
  75. package/lib/cli/setupServer.d.ts +0 -13
  76. package/lib/cli/setupServer.js +0 -266
  77. package/lib/cli/setupServer.js.map +0 -1
  78. package/lib/cli/util.d.ts +0 -22
  79. package/lib/cli/util.js +0 -34
  80. package/lib/cli/util.js.map +0 -1
  81. package/lib/createConfig.d.ts +0 -16
  82. package/lib/createConfig.js +0 -13
  83. package/lib/createConfig.js.map +0 -1
  84. package/lib/executor/executor.d.ts +0 -65
  85. package/lib/executor/executor.js +0 -301
  86. package/lib/executor/executor.js.map +0 -1
  87. package/lib/executor/executorManager.d.ts +0 -108
  88. package/lib/executor/executorManager.js +0 -702
  89. package/lib/executor/executorManager.js.map +0 -1
  90. package/lib/executor/fastlane.d.ts +0 -9
  91. package/lib/executor/fastlane.js +0 -41
  92. package/lib/executor/fastlane.js.map +0 -1
  93. package/lib/executor/filterOpsAndEStimateGas.d.ts +0 -29
  94. package/lib/executor/filterOpsAndEStimateGas.js +0 -225
  95. package/lib/executor/filterOpsAndEStimateGas.js.map +0 -1
  96. package/lib/executor/index.d.ts +0 -5
  97. package/lib/executor/index.js +0 -21
  98. package/lib/executor/index.js.map +0 -1
  99. package/lib/executor/senderManager/createMemorySenderManager.d.ts +0 -8
  100. package/lib/executor/senderManager/createMemorySenderManager.js +0 -45
  101. package/lib/executor/senderManager/createMemorySenderManager.js.map +0 -1
  102. package/lib/executor/senderManager/createRedisSenderManager.d.ts +0 -8
  103. package/lib/executor/senderManager/createRedisSenderManager.js +0 -85
  104. package/lib/executor/senderManager/createRedisSenderManager.js.map +0 -1
  105. package/lib/executor/senderManager/flushOnStartUp.d.ts +0 -9
  106. package/lib/executor/senderManager/flushOnStartUp.js +0 -37
  107. package/lib/executor/senderManager/flushOnStartUp.js.map +0 -1
  108. package/lib/executor/senderManager/index.d.ts +0 -15
  109. package/lib/executor/senderManager/index.js +0 -25
  110. package/lib/executor/senderManager/index.js.map +0 -1
  111. package/lib/executor/senderManager/validateAndRefill.d.ts +0 -11
  112. package/lib/executor/senderManager/validateAndRefill.js +0 -115
  113. package/lib/executor/senderManager/validateAndRefill.js.map +0 -1
  114. package/lib/executor/utilityWalletMonitor.d.ts +0 -19
  115. package/lib/executor/utilityWalletMonitor.js +0 -42
  116. package/lib/executor/utilityWalletMonitor.js.map +0 -1
  117. package/lib/executor/utils.d.ts +0 -34
  118. package/lib/executor/utils.js +0 -167
  119. package/lib/executor/utils.js.map +0 -1
  120. package/lib/handlers/arbitrumGasPriceManager.d.ts +0 -14
  121. package/lib/handlers/arbitrumGasPriceManager.js +0 -39
  122. package/lib/handlers/arbitrumGasPriceManager.js.map +0 -1
  123. package/lib/handlers/eventManager.d.ts +0 -29
  124. package/lib/handlers/eventManager.js +0 -225
  125. package/lib/handlers/eventManager.js.map +0 -1
  126. package/lib/handlers/gasPriceManager.d.ts +0 -36
  127. package/lib/handlers/gasPriceManager.js +0 -391
  128. package/lib/handlers/gasPriceManager.js.map +0 -1
  129. package/lib/handlers/index.d.ts +0 -3
  130. package/lib/handlers/index.js +0 -19
  131. package/lib/handlers/index.js.map +0 -1
  132. package/lib/handlers/mantleGasPriceManager.d.ts +0 -23
  133. package/lib/handlers/mantleGasPriceManager.js +0 -44
  134. package/lib/handlers/mantleGasPriceManager.js.map +0 -1
  135. package/lib/handlers/optimismManager.d.ts +0 -10
  136. package/lib/handlers/optimismManager.js +0 -21
  137. package/lib/handlers/optimismManager.js.map +0 -1
  138. package/lib/index.d.ts +0 -2
  139. package/lib/index.js +0 -4
  140. package/lib/index.js.map +0 -1
  141. package/lib/mempool/index.d.ts +0 -4
  142. package/lib/mempool/index.js +0 -20
  143. package/lib/mempool/index.js.map +0 -1
  144. package/lib/mempool/mempool.d.ts +0 -191
  145. package/lib/mempool/mempool.js +0 -499
  146. package/lib/mempool/mempool.js.map +0 -1
  147. package/lib/mempool/monitoring.d.ts +0 -14
  148. package/lib/mempool/monitoring.js +0 -101
  149. package/lib/mempool/monitoring.js.map +0 -1
  150. package/lib/mempool/reputationManager.d.ts +0 -121
  151. package/lib/mempool/reputationManager.js +0 -472
  152. package/lib/mempool/reputationManager.js.map +0 -1
  153. package/lib/rpc/createMethodHandler.d.ts +0 -31
  154. package/lib/rpc/createMethodHandler.js +0 -34
  155. package/lib/rpc/createMethodHandler.js.map +0 -1
  156. package/lib/rpc/estimation/gasEstimationHandler.d.ts +0 -30
  157. package/lib/rpc/estimation/gasEstimationHandler.js +0 -50
  158. package/lib/rpc/estimation/gasEstimationHandler.js.map +0 -1
  159. package/lib/rpc/estimation/gasEstimationsV06.d.ts +0 -19
  160. package/lib/rpc/estimation/gasEstimationsV06.js +0 -148
  161. package/lib/rpc/estimation/gasEstimationsV06.js.map +0 -1
  162. package/lib/rpc/estimation/gasEstimationsV07.d.ts +0 -101
  163. package/lib/rpc/estimation/gasEstimationsV07.js +0 -727
  164. package/lib/rpc/estimation/gasEstimationsV07.js.map +0 -1
  165. package/lib/rpc/estimation/types.d.ts +0 -120
  166. package/lib/rpc/estimation/types.js +0 -125
  167. package/lib/rpc/estimation/types.js.map +0 -1
  168. package/lib/rpc/index.d.ts +0 -4
  169. package/lib/rpc/index.js +0 -20
  170. package/lib/rpc/index.js.map +0 -1
  171. package/lib/rpc/methods/debug_bundler_clearReputation.d.ts +0 -22
  172. package/lib/rpc/methods/debug_bundler_clearReputation.js +0 -15
  173. package/lib/rpc/methods/debug_bundler_clearReputation.js.map +0 -1
  174. package/lib/rpc/methods/debug_bundler_clearState.d.ts +0 -22
  175. package/lib/rpc/methods/debug_bundler_clearState.js +0 -16
  176. package/lib/rpc/methods/debug_bundler_clearState.js.map +0 -1
  177. package/lib/rpc/methods/debug_bundler_dumpMempool.d.ts +0 -973
  178. package/lib/rpc/methods/debug_bundler_dumpMempool.js +0 -16
  179. package/lib/rpc/methods/debug_bundler_dumpMempool.js.map +0 -1
  180. package/lib/rpc/methods/debug_bundler_dumpReputation.d.ts +0 -57
  181. package/lib/rpc/methods/debug_bundler_dumpReputation.js +0 -16
  182. package/lib/rpc/methods/debug_bundler_dumpReputation.js.map +0 -1
  183. package/lib/rpc/methods/debug_bundler_getStakeStatus.d.ts +0 -79
  184. package/lib/rpc/methods/debug_bundler_getStakeStatus.js +0 -25
  185. package/lib/rpc/methods/debug_bundler_getStakeStatus.js.map +0 -1
  186. package/lib/rpc/methods/debug_bundler_sendBundleNow.d.ts +0 -22
  187. package/lib/rpc/methods/debug_bundler_sendBundleNow.js +0 -15
  188. package/lib/rpc/methods/debug_bundler_sendBundleNow.js.map +0 -1
  189. package/lib/rpc/methods/debug_bundler_setBundlingMode.d.ts +0 -22
  190. package/lib/rpc/methods/debug_bundler_setBundlingMode.js +0 -16
  191. package/lib/rpc/methods/debug_bundler_setBundlingMode.js.map +0 -1
  192. package/lib/rpc/methods/debug_bundler_setReputation.d.ts +0 -46
  193. package/lib/rpc/methods/debug_bundler_setReputation.js +0 -16
  194. package/lib/rpc/methods/debug_bundler_setReputation.js.map +0 -1
  195. package/lib/rpc/methods/eth_chainId.d.ts +0 -22
  196. package/lib/rpc/methods/eth_chainId.js +0 -13
  197. package/lib/rpc/methods/eth_chainId.js.map +0 -1
  198. package/lib/rpc/methods/eth_estimateUserOperationGas.d.ts +0 -1891
  199. package/lib/rpc/methods/eth_estimateUserOperationGas.js +0 -26
  200. package/lib/rpc/methods/eth_estimateUserOperationGas.js.map +0 -1
  201. package/lib/rpc/methods/eth_getUserOperationByHash.d.ts +0 -1775
  202. package/lib/rpc/methods/eth_getUserOperationByHash.js +0 -101
  203. package/lib/rpc/methods/eth_getUserOperationByHash.js.map +0 -1
  204. package/lib/rpc/methods/eth_getUserOperationReceipt.d.ts +0 -412
  205. package/lib/rpc/methods/eth_getUserOperationReceipt.js +0 -14
  206. package/lib/rpc/methods/eth_getUserOperationReceipt.js.map +0 -1
  207. package/lib/rpc/methods/eth_sendUserOperation.d.ts +0 -878
  208. package/lib/rpc/methods/eth_sendUserOperation.js +0 -44
  209. package/lib/rpc/methods/eth_sendUserOperation.js.map +0 -1
  210. package/lib/rpc/methods/eth_supportedEntryPoints.d.ts +0 -22
  211. package/lib/rpc/methods/eth_supportedEntryPoints.js +0 -13
  212. package/lib/rpc/methods/eth_supportedEntryPoints.js.map +0 -1
  213. package/lib/rpc/methods/index.d.ts +0 -3
  214. package/lib/rpc/methods/index.js +0 -44
  215. package/lib/rpc/methods/index.js.map +0 -1
  216. package/lib/rpc/methods/pimlico_getUserOperationGasPrice.d.ts +0 -131
  217. package/lib/rpc/methods/pimlico_getUserOperationGasPrice.js +0 -33
  218. package/lib/rpc/methods/pimlico_getUserOperationGasPrice.js.map +0 -1
  219. package/lib/rpc/methods/pimlico_getUserOperationStatus.d.ts +0 -43
  220. package/lib/rpc/methods/pimlico_getUserOperationStatus.js +0 -14
  221. package/lib/rpc/methods/pimlico_getUserOperationStatus.js.map +0 -1
  222. package/lib/rpc/methods/pimlico_sendUserOperationNow.d.ts +0 -1268
  223. package/lib/rpc/methods/pimlico_sendUserOperationNow.js +0 -55
  224. package/lib/rpc/methods/pimlico_sendUserOperationNow.js.map +0 -1
  225. package/lib/rpc/rpcHandler.d.ts +0 -75
  226. package/lib/rpc/rpcHandler.js +0 -391
  227. package/lib/rpc/rpcHandler.js.map +0 -1
  228. package/lib/rpc/server.d.ts +0 -26
  229. package/lib/rpc/server.js +0 -283
  230. package/lib/rpc/server.js.map +0 -1
  231. package/lib/rpc/validation/BundlerCollectorTracerV06.d.ts +0 -102
  232. package/lib/rpc/validation/BundlerCollectorTracerV06.js +0 -262
  233. package/lib/rpc/validation/BundlerCollectorTracerV06.js.map +0 -1
  234. package/lib/rpc/validation/BundlerCollectorTracerV07.d.ts +0 -102
  235. package/lib/rpc/validation/BundlerCollectorTracerV07.js +0 -261
  236. package/lib/rpc/validation/BundlerCollectorTracerV07.js.map +0 -1
  237. package/lib/rpc/validation/SafeValidator.d.ts +0 -51
  238. package/lib/rpc/validation/SafeValidator.js +0 -327
  239. package/lib/rpc/validation/SafeValidator.js.map +0 -1
  240. package/lib/rpc/validation/TracerResultParserV06.d.ts +0 -13
  241. package/lib/rpc/validation/TracerResultParserV06.js +0 -582
  242. package/lib/rpc/validation/TracerResultParserV06.js.map +0 -1
  243. package/lib/rpc/validation/TracerResultParserV07.d.ts +0 -33
  244. package/lib/rpc/validation/TracerResultParserV07.js +0 -599
  245. package/lib/rpc/validation/TracerResultParserV07.js.map +0 -1
  246. package/lib/rpc/validation/UnsafeValidator.d.ts +0 -97
  247. package/lib/rpc/validation/UnsafeValidator.js +0 -303
  248. package/lib/rpc/validation/UnsafeValidator.js.map +0 -1
  249. package/lib/rpc/validation/index.d.ts +0 -3
  250. package/lib/rpc/validation/index.js +0 -19
  251. package/lib/rpc/validation/index.js.map +0 -1
  252. package/lib/rpc/validation/tracer.d.ts +0 -125
  253. package/lib/rpc/validation/tracer.js +0 -112
  254. package/lib/rpc/validation/tracer.js.map +0 -1
  255. package/lib/store/createMemoryOutstandingStore.d.ts +0 -28
  256. package/lib/store/createMemoryOutstandingStore.js +0 -236
  257. package/lib/store/createMemoryOutstandingStore.js.map +0 -1
  258. package/lib/store/createMempoolStore.d.ts +0 -8
  259. package/lib/store/createMempoolStore.js +0 -199
  260. package/lib/store/createMempoolStore.js.map +0 -1
  261. package/lib/store/createRedisOutstandingStore.d.ts +0 -27
  262. package/lib/store/createRedisOutstandingStore.js +0 -349
  263. package/lib/store/createRedisOutstandingStore.js.map +0 -1
  264. package/lib/store/createRedisStore.d.ts +0 -9
  265. package/lib/store/createRedisStore.js +0 -138
  266. package/lib/store/createRedisStore.js.map +0 -1
  267. package/lib/store/createStore.d.ts +0 -6
  268. package/lib/store/createStore.js +0 -70
  269. package/lib/store/createStore.js.map +0 -1
  270. package/lib/store/index.d.ts +0 -81
  271. package/lib/store/index.js +0 -6
  272. package/lib/store/index.js.map +0 -1
  273. package/lib/types/contracts/ArbitrumL1FeeAbi.d.ts +0 -32
  274. package/lib/types/contracts/ArbitrumL1FeeAbi.js +0 -45
  275. package/lib/types/contracts/ArbitrumL1FeeAbi.js.map +0 -1
  276. package/lib/types/contracts/CallEngine.d.ts +0 -28
  277. package/lib/types/contracts/CallEngine.js +0 -40
  278. package/lib/types/contracts/CallEngine.js.map +0 -1
  279. package/lib/types/contracts/CodeHashGetter.d.ts +0 -37
  280. package/lib/types/contracts/CodeHashGetter.js +0 -48
  281. package/lib/types/contracts/CodeHashGetter.js.map +0 -1
  282. package/lib/types/contracts/EntryPoint.d.ts +0 -1789
  283. package/lib/types/contracts/EntryPoint.js +0 -2307
  284. package/lib/types/contracts/EntryPoint.js.map +0 -1
  285. package/lib/types/contracts/EntryPointSimulationsV6.d.ts +0 -34
  286. package/lib/types/contracts/EntryPointSimulationsV6.js +0 -51
  287. package/lib/types/contracts/EntryPointSimulationsV6.js.map +0 -1
  288. package/lib/types/contracts/EntryPointSimulationsV7.d.ts +0 -2076
  289. package/lib/types/contracts/EntryPointSimulationsV7.js +0 -2678
  290. package/lib/types/contracts/EntryPointSimulationsV7.js.map +0 -1
  291. package/lib/types/contracts/IAccountExecute.d.ts +0 -53
  292. package/lib/types/contracts/IAccountExecute.js +0 -71
  293. package/lib/types/contracts/IAccountExecute.js.map +0 -1
  294. package/lib/types/contracts/IPaymaster.d.ts +0 -3
  295. package/lib/types/contracts/IPaymaster.js +0 -120
  296. package/lib/types/contracts/IPaymaster.js.map +0 -1
  297. package/lib/types/contracts/MantleBvmGasPriceOracle.d.ts +0 -219
  298. package/lib/types/contracts/MantleBvmGasPriceOracle.js +0 -180
  299. package/lib/types/contracts/MantleBvmGasPriceOracle.js.map +0 -1
  300. package/lib/types/contracts/OpL1FeeAbi.d.ts +0 -114
  301. package/lib/types/contracts/OpL1FeeAbi.js +0 -77
  302. package/lib/types/contracts/OpL1FeeAbi.js.map +0 -1
  303. package/lib/types/contracts/PimlicoEntryPointSimulations.d.ts +0 -25
  304. package/lib/types/contracts/PimlicoEntryPointSimulations.js +0 -42
  305. package/lib/types/contracts/PimlicoEntryPointSimulations.js.map +0 -1
  306. package/lib/types/contracts/SenderCreator.d.ts +0 -4
  307. package/lib/types/contracts/SenderCreator.js +0 -26
  308. package/lib/types/contracts/SenderCreator.js.map +0 -1
  309. package/lib/types/contracts/SimpleAccountFactory.d.ts +0 -57
  310. package/lib/types/contracts/SimpleAccountFactory.js +0 -79
  311. package/lib/types/contracts/SimpleAccountFactory.js.map +0 -1
  312. package/lib/types/contracts/TestOpcodesAccount.d.ts +0 -4
  313. package/lib/types/contracts/TestOpcodesAccount.js +0 -284
  314. package/lib/types/contracts/TestOpcodesAccount.js.map +0 -1
  315. package/lib/types/contracts/TestOpcodesAccountFactory.d.ts +0 -4
  316. package/lib/types/contracts/TestOpcodesAccountFactory.js +0 -26
  317. package/lib/types/contracts/TestOpcodesAccountFactory.js.map +0 -1
  318. package/lib/types/contracts/TestStorageAccount.d.ts +0 -4
  319. package/lib/types/contracts/TestStorageAccount.js +0 -316
  320. package/lib/types/contracts/TestStorageAccount.js.map +0 -1
  321. package/lib/types/contracts/index.d.ts +0 -17
  322. package/lib/types/contracts/index.js +0 -33
  323. package/lib/types/contracts/index.js.map +0 -1
  324. package/lib/types/gasPrice.d.ts +0 -110
  325. package/lib/types/gasPrice.js +0 -55
  326. package/lib/types/gasPrice.js.map +0 -1
  327. package/lib/types/index.d.ts +0 -11
  328. package/lib/types/index.js +0 -27
  329. package/lib/types/index.js.map +0 -1
  330. package/lib/types/interfaces.d.ts +0 -58
  331. package/lib/types/interfaces.js +0 -3
  332. package/lib/types/interfaces.js.map +0 -1
  333. package/lib/types/mempool.d.ts +0 -60
  334. package/lib/types/mempool.js +0 -11
  335. package/lib/types/mempool.js.map +0 -1
  336. package/lib/types/schemas.d.ts +0 -20785
  337. package/lib/types/schemas.js +0 -679
  338. package/lib/types/schemas.js.map +0 -1
  339. package/lib/types/utils.d.ts +0 -25
  340. package/lib/types/utils.js +0 -35
  341. package/lib/types/utils.js.map +0 -1
  342. package/lib/types/validation.d.ts +0 -14327
  343. package/lib/types/validation.js +0 -312
  344. package/lib/types/validation.js.map +0 -1
  345. package/lib/utils/asyncTimeout.d.ts +0 -5
  346. package/lib/utils/asyncTimeout.js +0 -51
  347. package/lib/utils/asyncTimeout.js.map +0 -1
  348. package/lib/utils/bigInt.d.ts +0 -8
  349. package/lib/utils/bigInt.js +0 -24
  350. package/lib/utils/bigInt.js.map +0 -1
  351. package/lib/utils/eip7702.d.ts +0 -4
  352. package/lib/utils/eip7702.js +0 -21
  353. package/lib/utils/eip7702.js.map +0 -1
  354. package/lib/utils/fastify-rpc-decorators.d.ts +0 -19
  355. package/lib/utils/fastify-rpc-decorators.js +0 -23
  356. package/lib/utils/fastify-rpc-decorators.js.map +0 -1
  357. package/lib/utils/helpers.d.ts +0 -15
  358. package/lib/utils/helpers.js +0 -59
  359. package/lib/utils/helpers.js.map +0 -1
  360. package/lib/utils/index.d.ts +0 -9
  361. package/lib/utils/index.js +0 -24
  362. package/lib/utils/index.js.map +0 -1
  363. package/lib/utils/logger.d.ts +0 -6
  364. package/lib/utils/logger.js +0 -85
  365. package/lib/utils/logger.js.map +0 -1
  366. package/lib/utils/metrics.d.ts +0 -29
  367. package/lib/utils/metrics.js +0 -199
  368. package/lib/utils/metrics.js.map +0 -1
  369. package/lib/utils/minMaxQueue/createMemoryMinMaxQueue.d.ts +0 -6
  370. package/lib/utils/minMaxQueue/createMemoryMinMaxQueue.js +0 -57
  371. package/lib/utils/minMaxQueue/createMemoryMinMaxQueue.js.map +0 -1
  372. package/lib/utils/minMaxQueue/createRedisMinMaxQueue.d.ts +0 -7
  373. package/lib/utils/minMaxQueue/createRedisMinMaxQueue.js +0 -105
  374. package/lib/utils/minMaxQueue/createRedisMinMaxQueue.js.map +0 -1
  375. package/lib/utils/minMaxQueue/index.d.ts +0 -12
  376. package/lib/utils/minMaxQueue/index.js +0 -16
  377. package/lib/utils/minMaxQueue/index.js.map +0 -1
  378. package/lib/utils/rpc-reply.d.ts +0 -16
  379. package/lib/utils/rpc-reply.js +0 -41
  380. package/lib/utils/rpc-reply.js.map +0 -1
  381. package/lib/utils/userop.d.ts +0 -138
  382. package/lib/utils/userop.js +0 -620
  383. package/lib/utils/userop.js.map +0 -1
  384. package/lib/utils/validation.d.ts +0 -76
  385. package/lib/utils/validation.js +0 -491
  386. 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