@pimlico/alto 0.0.0-staging.20240606T101741 → 0.0.0-staging.20240606T103333

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 (220) hide show
  1. package/esm/cli/alto.d.ts +6 -0
  2. package/esm/cli/alto.js +92 -0
  3. package/esm/cli/alto.js.map +1 -0
  4. package/esm/cli/config/bundler.d.ts +391 -0
  5. package/esm/cli/config/bundler.js +132 -0
  6. package/esm/cli/config/bundler.js.map +1 -0
  7. package/esm/cli/config/index.d.ts +3 -0
  8. package/esm/cli/config/index.js +3 -0
  9. package/esm/cli/config/index.js.map +1 -0
  10. package/esm/cli/config/options.d.ts +11 -0
  11. package/esm/cli/config/options.js +336 -0
  12. package/esm/cli/config/options.js.map +1 -0
  13. package/esm/cli/customTransport.d.ts +14 -0
  14. package/esm/cli/customTransport.js +53 -0
  15. package/esm/cli/customTransport.js.map +1 -0
  16. package/esm/cli/handler.d.ts +3 -0
  17. package/esm/cli/handler.js +116 -0
  18. package/esm/cli/handler.js.map +1 -0
  19. package/esm/cli/index.d.ts +4 -0
  20. package/esm/cli/index.js +4 -0
  21. package/esm/cli/index.js.map +1 -0
  22. package/esm/cli/instrumentation.d.ts +2 -0
  23. package/esm/cli/instrumentation.js +39 -0
  24. package/esm/cli/instrumentation.js.map +1 -0
  25. package/esm/cli/setupServer.d.ts +17 -0
  26. package/esm/cli/setupServer.js +155 -0
  27. package/esm/cli/setupServer.js.map +1 -0
  28. package/esm/cli/util.d.ts +22 -0
  29. package/esm/cli/util.js +30 -0
  30. package/esm/cli/util.js.map +1 -0
  31. package/esm/executor/executor.d.ts +54 -0
  32. package/esm/executor/executor.js +637 -0
  33. package/esm/executor/executor.js.map +1 -0
  34. package/esm/executor/executorManager.d.ts +34 -0
  35. package/esm/executor/executorManager.js +401 -0
  36. package/esm/executor/executorManager.js.map +1 -0
  37. package/esm/executor/index.d.ts +5 -0
  38. package/esm/executor/index.js +5 -0
  39. package/esm/executor/index.js.map +1 -0
  40. package/esm/executor/senderManager.d.ts +17 -0
  41. package/esm/executor/senderManager.js +160 -0
  42. package/esm/executor/senderManager.js.map +1 -0
  43. package/esm/executor/test/utils.d.ts +13 -0
  44. package/esm/executor/test/utils.js +75 -0
  45. package/esm/executor/test/utils.js.map +1 -0
  46. package/esm/executor/utils.d.ts +32 -0
  47. package/esm/executor/utils.js +239 -0
  48. package/esm/executor/utils.js.map +1 -0
  49. package/esm/index.d.ts +2 -0
  50. package/esm/index.js +2 -0
  51. package/esm/index.js.map +1 -0
  52. package/esm/mempool/index.d.ts +5 -0
  53. package/esm/mempool/index.js +5 -0
  54. package/esm/mempool/index.js.map +1 -0
  55. package/esm/mempool/mempool.d.ts +64 -0
  56. package/esm/mempool/mempool.js +489 -0
  57. package/esm/mempool/mempool.js.map +1 -0
  58. package/esm/mempool/monitoring.d.ts +10 -0
  59. package/esm/mempool/monitoring.js +34 -0
  60. package/esm/mempool/monitoring.js.map +1 -0
  61. package/esm/mempool/nullMempool.d.ts +15 -0
  62. package/esm/mempool/nullMempool.js +36 -0
  63. package/esm/mempool/nullMempool.js.map +1 -0
  64. package/esm/mempool/reputationManager.d.ts +115 -0
  65. package/esm/mempool/reputationManager.js +397 -0
  66. package/esm/mempool/reputationManager.js.map +1 -0
  67. package/esm/mempool/store.d.ts +22 -0
  68. package/esm/mempool/store.js +123 -0
  69. package/esm/mempool/store.js.map +1 -0
  70. package/esm/rpc/EntryPointSimulationsV07.d.ts +58 -0
  71. package/esm/rpc/EntryPointSimulationsV07.js +407 -0
  72. package/esm/rpc/EntryPointSimulationsV07.js.map +1 -0
  73. package/esm/rpc/ExecuteSimulator.d.ts +37 -0
  74. package/esm/rpc/ExecuteSimulator.js +48 -0
  75. package/esm/rpc/ExecuteSimulator.js.map +1 -0
  76. package/esm/rpc/gasEstimation.d.ts +17 -0
  77. package/esm/rpc/gasEstimation.js +410 -0
  78. package/esm/rpc/gasEstimation.js.map +1 -0
  79. package/esm/rpc/index.d.ts +5 -0
  80. package/esm/rpc/index.js +5 -0
  81. package/esm/rpc/index.js.map +1 -0
  82. package/esm/rpc/nonceQueuer.d.ts +25 -0
  83. package/esm/rpc/nonceQueuer.js +135 -0
  84. package/esm/rpc/nonceQueuer.js.map +1 -0
  85. package/esm/rpc/rpcHandler.d.ts +64 -0
  86. package/esm/rpc/rpcHandler.js +727 -0
  87. package/esm/rpc/rpcHandler.js.map +1 -0
  88. package/esm/rpc/server.d.ts +31 -0
  89. package/esm/rpc/server.js +238 -0
  90. package/esm/rpc/server.js.map +1 -0
  91. package/esm/rpc/validation/BundlerCollectorTracerV06.d.ts +102 -0
  92. package/esm/rpc/validation/BundlerCollectorTracerV06.js +255 -0
  93. package/esm/rpc/validation/BundlerCollectorTracerV06.js.map +1 -0
  94. package/esm/rpc/validation/BundlerCollectorTracerV07.d.ts +102 -0
  95. package/esm/rpc/validation/BundlerCollectorTracerV07.js +254 -0
  96. package/esm/rpc/validation/BundlerCollectorTracerV07.js.map +1 -0
  97. package/esm/rpc/validation/SafeValidator.d.ts +35 -0
  98. package/esm/rpc/validation/SafeValidator.js +487 -0
  99. package/esm/rpc/validation/SafeValidator.js.map +1 -0
  100. package/esm/rpc/validation/TracerResultParserV06.d.ts +13 -0
  101. package/esm/rpc/validation/TracerResultParserV06.js +578 -0
  102. package/esm/rpc/validation/TracerResultParserV06.js.map +1 -0
  103. package/esm/rpc/validation/TracerResultParserV07.d.ts +33 -0
  104. package/esm/rpc/validation/TracerResultParserV07.js +557 -0
  105. package/esm/rpc/validation/TracerResultParserV07.js.map +1 -0
  106. package/esm/rpc/validation/UnsafeValidator.d.ts +63 -0
  107. package/esm/rpc/validation/UnsafeValidator.js +257 -0
  108. package/esm/rpc/validation/UnsafeValidator.js.map +1 -0
  109. package/esm/rpc/validation/index.d.ts +3 -0
  110. package/esm/rpc/validation/index.js +3 -0
  111. package/esm/rpc/validation/index.js.map +1 -0
  112. package/esm/rpc/validation/tracer.d.ts +122 -0
  113. package/esm/rpc/validation/tracer.js +82 -0
  114. package/esm/rpc/validation/tracer.js.map +1 -0
  115. package/esm/types/contracts/BundleBulker.d.ts +120 -0
  116. package/esm/types/contracts/BundleBulker.js +157 -0
  117. package/esm/types/contracts/BundleBulker.js.map +1 -0
  118. package/esm/types/contracts/CallEngine.d.ts +28 -0
  119. package/esm/types/contracts/CallEngine.js +37 -0
  120. package/esm/types/contracts/CallEngine.js.map +1 -0
  121. package/esm/types/contracts/CodeHashGetter.d.ts +37 -0
  122. package/esm/types/contracts/CodeHashGetter.js +45 -0
  123. package/esm/types/contracts/CodeHashGetter.js.map +1 -0
  124. package/esm/types/contracts/EntryPoint.d.ts +1789 -0
  125. package/esm/types/contracts/EntryPoint.js +2304 -0
  126. package/esm/types/contracts/EntryPoint.js.map +1 -0
  127. package/esm/types/contracts/EntryPointSimulations.d.ts +153 -0
  128. package/esm/types/contracts/EntryPointSimulations.js +15 -0
  129. package/esm/types/contracts/EntryPointSimulations.js.map +1 -0
  130. package/esm/types/contracts/IOpInflator.d.ts +61 -0
  131. package/esm/types/contracts/IOpInflator.js +80 -0
  132. package/esm/types/contracts/IOpInflator.js.map +1 -0
  133. package/esm/types/contracts/IPaymaster.d.ts +3 -0
  134. package/esm/types/contracts/IPaymaster.js +117 -0
  135. package/esm/types/contracts/IPaymaster.js.map +1 -0
  136. package/esm/types/contracts/Inflator.d.ts +65 -0
  137. package/esm/types/contracts/Inflator.js +84 -0
  138. package/esm/types/contracts/Inflator.js.map +1 -0
  139. package/esm/types/contracts/PerOpInflator.d.ts +176 -0
  140. package/esm/types/contracts/PerOpInflator.js +229 -0
  141. package/esm/types/contracts/PerOpInflator.js.map +1 -0
  142. package/esm/types/contracts/PimlicoEntryPointSimulations.d.ts +23 -0
  143. package/esm/types/contracts/PimlicoEntryPointSimulations.js +33 -0
  144. package/esm/types/contracts/PimlicoEntryPointSimulations.js.map +1 -0
  145. package/esm/types/contracts/SenderCreator.d.ts +4 -0
  146. package/esm/types/contracts/SenderCreator.js +23 -0
  147. package/esm/types/contracts/SenderCreator.js.map +1 -0
  148. package/esm/types/contracts/SimpleAccountFactory.d.ts +57 -0
  149. package/esm/types/contracts/SimpleAccountFactory.js +76 -0
  150. package/esm/types/contracts/SimpleAccountFactory.js.map +1 -0
  151. package/esm/types/contracts/TestOpcodesAccount.d.ts +4 -0
  152. package/esm/types/contracts/TestOpcodesAccount.js +281 -0
  153. package/esm/types/contracts/TestOpcodesAccount.js.map +1 -0
  154. package/esm/types/contracts/TestOpcodesAccountFactory.d.ts +4 -0
  155. package/esm/types/contracts/TestOpcodesAccountFactory.js +23 -0
  156. package/esm/types/contracts/TestOpcodesAccountFactory.js.map +1 -0
  157. package/esm/types/contracts/TestStorageAccount.d.ts +4 -0
  158. package/esm/types/contracts/TestStorageAccount.js +313 -0
  159. package/esm/types/contracts/TestStorageAccount.js.map +1 -0
  160. package/esm/types/contracts/index.d.ts +17 -0
  161. package/esm/types/contracts/index.js +17 -0
  162. package/esm/types/contracts/index.js.map +1 -0
  163. package/esm/types/gasPrice.d.ts +110 -0
  164. package/esm/types/gasPrice.js +52 -0
  165. package/esm/types/gasPrice.js.map +1 -0
  166. package/esm/types/index.d.ts +11 -0
  167. package/esm/types/index.js +11 -0
  168. package/esm/types/index.js.map +1 -0
  169. package/esm/types/interfaces.d.ts +26 -0
  170. package/esm/types/interfaces.js +2 -0
  171. package/esm/types/interfaces.js.map +1 -0
  172. package/esm/types/mempool.d.ts +78 -0
  173. package/esm/types/mempool.js +16 -0
  174. package/esm/types/mempool.js.map +1 -0
  175. package/esm/types/schemas.d.ts +4791 -0
  176. package/esm/types/schemas.js +497 -0
  177. package/esm/types/schemas.js.map +1 -0
  178. package/esm/types/test/validationTestErrors.d.ts +3 -0
  179. package/esm/types/test/validationTestErrors.js +229 -0
  180. package/esm/types/test/validationTestErrors.js.map +1 -0
  181. package/esm/types/utils.d.ts +24 -0
  182. package/esm/types/utils.js +30 -0
  183. package/esm/types/utils.js.map +1 -0
  184. package/esm/types/validation.d.ts +14327 -0
  185. package/esm/types/validation.js +304 -0
  186. package/esm/types/validation.js.map +1 -0
  187. package/esm/utils/bigInt.d.ts +3 -0
  188. package/esm/utils/bigInt.js +9 -0
  189. package/esm/utils/bigInt.js.map +1 -0
  190. package/esm/utils/compressionHandler.d.ts +11 -0
  191. package/esm/utils/compressionHandler.js +39 -0
  192. package/esm/utils/compressionHandler.js.map +1 -0
  193. package/esm/utils/gasPriceManager.d.ts +34 -0
  194. package/esm/utils/gasPriceManager.js +338 -0
  195. package/esm/utils/gasPriceManager.js.map +1 -0
  196. package/esm/utils/helpers.d.ts +4 -0
  197. package/esm/utils/helpers.js +13 -0
  198. package/esm/utils/helpers.js.map +1 -0
  199. package/esm/utils/index.d.ts +11 -0
  200. package/esm/utils/index.js +10 -0
  201. package/esm/utils/index.js.map +1 -0
  202. package/esm/utils/logger.d.ts +6 -0
  203. package/esm/utils/logger.js +76 -0
  204. package/esm/utils/logger.js.map +1 -0
  205. package/esm/utils/metrics.d.ts +22 -0
  206. package/esm/utils/metrics.js +150 -0
  207. package/esm/utils/metrics.js.map +1 -0
  208. package/esm/utils/rpc-reply.d.ts +17 -0
  209. package/esm/utils/rpc-reply.js +41 -0
  210. package/esm/utils/rpc-reply.js.map +1 -0
  211. package/esm/utils/test.d.ts +17 -0
  212. package/esm/utils/test.js +130 -0
  213. package/esm/utils/test.js.map +1 -0
  214. package/esm/utils/userop.d.ts +49 -0
  215. package/esm/utils/userop.js +408 -0
  216. package/esm/utils/userop.js.map +1 -0
  217. package/esm/utils/validation.d.ts +65 -0
  218. package/esm/utils/validation.js +461 -0
  219. package/esm/utils/validation.js.map +1 -0
  220. package/package.json +70 -66
@@ -0,0 +1,637 @@
1
+ import { EntryPointV06Abi, EntryPointV07Abi, deriveUserOperation } from "../types/index.js";
2
+ import { getUserOperationHash, isVersion06, maxBigInt, parseViemError, toPackedUserOperation } from "../utils/index.js";
3
+ import * as sentry from "@sentry/node";
4
+ import { Mutex } from "async-mutex";
5
+ import { FeeCapTooLowError, InsufficientFundsError, IntrinsicGasTooLowError, NonceTooLowError, encodeFunctionData, getContract } from "viem";
6
+ import { createCompressedCalldata, filterOpsAndEstimateGas, flushStuckTransaction, simulatedOpsToResults } from "./utils.js";
7
+ export class NullExecutor {
8
+ bundle(_entryPoint, _ops) {
9
+ return Promise.resolve([]);
10
+ }
11
+ bundleCompressed(_entryPoint, _compressedOps) {
12
+ return Promise.resolve([]);
13
+ }
14
+ replaceTransaction(_entryPoint, _transactionInfo) {
15
+ return Promise.resolve({ status: "failed" });
16
+ }
17
+ replaceOps(_opHashes) {
18
+ return Promise.resolve();
19
+ }
20
+ cancelOps(_entryPoint, _ops) {
21
+ return Promise.resolve();
22
+ }
23
+ markWalletProcessed(_executor) {
24
+ return Promise.resolve();
25
+ }
26
+ flushStuckTransactions() {
27
+ return Promise.resolve();
28
+ }
29
+ }
30
+ export class Executor {
31
+ // private unWatch: WatchBlocksReturnType | undefined
32
+ publicClient;
33
+ walletClient;
34
+ entryPoints;
35
+ senderManager;
36
+ logger;
37
+ metrics;
38
+ simulateTransaction;
39
+ legacyTransactions;
40
+ fixedGasLimitForEstimation;
41
+ localGasLimitCalculation;
42
+ reputationManager;
43
+ compressionHandler;
44
+ gasPriceManager;
45
+ mutex;
46
+ constructor(publicClient, walletClient, senderManager, reputationManager, entryPoints, logger, metrics, compressionHandler, gasPriceManager, simulateTransaction = false, legacyTransactions = false, fixedGasLimitForEstimation, localGasLimitCalculation = false) {
47
+ this.publicClient = publicClient;
48
+ this.walletClient = walletClient;
49
+ this.senderManager = senderManager;
50
+ this.reputationManager = reputationManager;
51
+ this.logger = logger;
52
+ this.metrics = metrics;
53
+ this.simulateTransaction = simulateTransaction;
54
+ this.legacyTransactions = legacyTransactions;
55
+ this.fixedGasLimitForEstimation = fixedGasLimitForEstimation;
56
+ this.localGasLimitCalculation = localGasLimitCalculation;
57
+ this.compressionHandler = compressionHandler;
58
+ this.gasPriceManager = gasPriceManager;
59
+ this.entryPoints = entryPoints;
60
+ this.mutex = new Mutex();
61
+ }
62
+ getCompressionHandler() {
63
+ if (!this.compressionHandler) {
64
+ throw new Error("Support for compressed bundles has not initialized");
65
+ }
66
+ return this.compressionHandler;
67
+ }
68
+ cancelOps(_entryPoint, _ops) {
69
+ throw new Error("Method not implemented.");
70
+ }
71
+ markWalletProcessed(executor) {
72
+ if (!this.senderManager.availableWallets.includes(executor)) {
73
+ this.senderManager.pushWallet(executor);
74
+ }
75
+ return Promise.resolve();
76
+ }
77
+ async replaceTransaction(transactionInfo) {
78
+ const newRequest = { ...transactionInfo.transactionRequest };
79
+ const gasPriceParameters = await this.gasPriceManager.getGasPrice();
80
+ newRequest.maxFeePerGas = maxBigInt(gasPriceParameters.maxFeePerGas, (newRequest.maxFeePerGas * 11n + 9n) / 10n);
81
+ newRequest.maxPriorityFeePerGas = maxBigInt(gasPriceParameters.maxPriorityFeePerGas, (newRequest.maxPriorityFeePerGas * 11n + 9n) / 10n);
82
+ newRequest.account = transactionInfo.executor;
83
+ const opsWithHashes = transactionInfo.userOperationInfos.map((opInfo) => {
84
+ const op = deriveUserOperation(opInfo.mempoolUserOperation);
85
+ return {
86
+ mempoolUserOperation: opInfo.mempoolUserOperation,
87
+ userOperationHash: getUserOperationHash(op, transactionInfo.entryPoint, this.walletClient.chain.id),
88
+ entryPoint: opInfo.entryPoint
89
+ };
90
+ });
91
+ let callContext;
92
+ if (transactionInfo.transactionType === "default") {
93
+ const [isUserOpVersion06, entryPoint] = opsWithHashes.reduce((acc, op) => {
94
+ if (acc[0] !==
95
+ isVersion06(op.mempoolUserOperation) ||
96
+ acc[1] !== op.entryPoint) {
97
+ throw new Error("All user operations must be of the same version");
98
+ }
99
+ return acc;
100
+ }, [
101
+ isVersion06(opsWithHashes[0].mempoolUserOperation),
102
+ opsWithHashes[0].entryPoint
103
+ ]);
104
+ const ep = getContract({
105
+ abi: isUserOpVersion06 ? EntryPointV06Abi : EntryPointV07Abi,
106
+ address: entryPoint,
107
+ client: {
108
+ public: this.publicClient,
109
+ wallet: this.walletClient
110
+ }
111
+ });
112
+ callContext = {
113
+ ep,
114
+ type: "default"
115
+ };
116
+ }
117
+ else {
118
+ const compressionHandler = this.getCompressionHandler();
119
+ callContext = {
120
+ publicClient: this.publicClient,
121
+ bundleBulker: compressionHandler.bundleBulkerAddress,
122
+ perOpInflatorId: compressionHandler.perOpInflatorId,
123
+ type: "compressed"
124
+ };
125
+ }
126
+ const result = await filterOpsAndEstimateGas(transactionInfo.entryPoint, callContext, transactionInfo.executor, opsWithHashes, newRequest.nonce, newRequest.maxFeePerGas, newRequest.maxPriorityFeePerGas, "latest", this.legacyTransactions, this.fixedGasLimitForEstimation, this.reputationManager, this.logger);
127
+ const childLogger = this.logger.child({
128
+ transactionHash: transactionInfo.transactionHash,
129
+ executor: transactionInfo.executor.address
130
+ });
131
+ if (result.simulatedOps.length === 0) {
132
+ childLogger.warn("no ops to bundle");
133
+ this.markWalletProcessed(transactionInfo.executor);
134
+ return { status: "failed" };
135
+ }
136
+ if (result.simulatedOps.every((op) => op.reason === "AA25 invalid account nonce" ||
137
+ op.reason === "AA10 sender already constructed")) {
138
+ childLogger.trace({ reasons: result.simulatedOps.map((sop) => sop.reason) }, "all ops failed simulation with nonce error");
139
+ return { status: "potentially_already_included" };
140
+ }
141
+ if (result.simulatedOps.every((op) => op.reason !== undefined)) {
142
+ childLogger.warn("all ops failed simulation");
143
+ this.markWalletProcessed(transactionInfo.executor);
144
+ return { status: "failed" };
145
+ }
146
+ const opsToBundle = result.simulatedOps
147
+ .filter((op) => op.reason === undefined)
148
+ .map((op) => {
149
+ const opInfo = transactionInfo.userOperationInfos.find((info) => info.userOperationHash === op.owh.userOperationHash);
150
+ if (!opInfo) {
151
+ throw new Error("opInfo not found");
152
+ }
153
+ return opInfo;
154
+ });
155
+ newRequest.gas = this.localGasLimitCalculation
156
+ ? opsToBundle.reduce((acc, opInfo) => {
157
+ const userOperation = deriveUserOperation(opInfo.mempoolUserOperation);
158
+ return (acc +
159
+ userOperation.preVerificationGas +
160
+ 3n * userOperation.verificationGasLimit +
161
+ userOperation.callGasLimit);
162
+ }, 0n)
163
+ : result.gasLimit;
164
+ // update calldata to include only ops that pass simulation
165
+ if (transactionInfo.transactionType === "default") {
166
+ const isUserOpVersion06 = opsWithHashes.reduce((acc, op) => {
167
+ if (acc !==
168
+ isVersion06(op.mempoolUserOperation)) {
169
+ throw new Error("All user operations must be of the same version");
170
+ }
171
+ return acc;
172
+ }, isVersion06(opsWithHashes[0].mempoolUserOperation));
173
+ newRequest.data = isUserOpVersion06
174
+ ? encodeFunctionData({
175
+ abi: EntryPointV06Abi,
176
+ functionName: "handleOps",
177
+ args: [
178
+ opsToBundle.map((opInfo) => opInfo.mempoolUserOperation),
179
+ transactionInfo.executor.address
180
+ ]
181
+ })
182
+ : encodeFunctionData({
183
+ abi: EntryPointV07Abi,
184
+ functionName: "handleOps",
185
+ args: [
186
+ opsToBundle.map((opInfo) => toPackedUserOperation(opInfo.mempoolUserOperation)),
187
+ transactionInfo.executor.address
188
+ ]
189
+ });
190
+ }
191
+ else if (transactionInfo.transactionType === "compressed") {
192
+ const compressedOps = opsToBundle.map((opInfo) => opInfo.mempoolUserOperation);
193
+ newRequest.data = createCompressedCalldata(compressedOps, this.getCompressionHandler().perOpInflatorId);
194
+ }
195
+ try {
196
+ childLogger.info({
197
+ newRequest: {
198
+ ...newRequest,
199
+ abi: undefined,
200
+ chain: undefined
201
+ },
202
+ executor: newRequest.account.address,
203
+ opsToBundle: opsToBundle.map((opInfo) => opInfo.userOperationHash)
204
+ }, "replacing transaction");
205
+ const txHash = await this.walletClient.sendTransaction(this.legacyTransactions
206
+ ? {
207
+ ...newRequest,
208
+ gasPrice: newRequest.maxFeePerGas,
209
+ maxFeePerGas: undefined,
210
+ maxPriorityFeePerGas: undefined,
211
+ type: "legacy",
212
+ accessList: undefined
213
+ }
214
+ : newRequest);
215
+ const newTxInfo = {
216
+ ...transactionInfo,
217
+ transactionRequest: newRequest,
218
+ transactionHash: txHash,
219
+ previousTransactionHashes: [
220
+ transactionInfo.transactionHash,
221
+ ...transactionInfo.previousTransactionHashes
222
+ ],
223
+ lastReplaced: Date.now(),
224
+ userOperationInfos: opsToBundle.map((opInfo) => {
225
+ return {
226
+ entryPoint: opInfo.entryPoint,
227
+ mempoolUserOperation: opInfo.mempoolUserOperation,
228
+ userOperationHash: opInfo.userOperationHash,
229
+ lastReplaced: Date.now(),
230
+ firstSubmitted: opInfo.firstSubmitted
231
+ };
232
+ })
233
+ };
234
+ return {
235
+ status: "replaced",
236
+ transactionInfo: newTxInfo
237
+ };
238
+ }
239
+ catch (err) {
240
+ const e = parseViemError(err);
241
+ if (!e) {
242
+ sentry.captureException(err);
243
+ childLogger.error({ error: err }, "unknown error replacing transaction");
244
+ }
245
+ if (e instanceof NonceTooLowError) {
246
+ childLogger.trace({ error: e }, "nonce too low, potentially already included");
247
+ return { status: "potentially_already_included" };
248
+ }
249
+ if (e instanceof FeeCapTooLowError) {
250
+ childLogger.warn({ error: e }, "fee cap too low, not replacing");
251
+ }
252
+ if (e instanceof InsufficientFundsError) {
253
+ childLogger.warn({ error: e }, "insufficient funds, not replacing");
254
+ }
255
+ if (e instanceof IntrinsicGasTooLowError) {
256
+ childLogger.warn({ error: e }, "intrinsic gas too low, not replacing");
257
+ }
258
+ childLogger.warn({ error: e }, "error replacing transaction");
259
+ this.markWalletProcessed(transactionInfo.executor);
260
+ return { status: "failed" };
261
+ }
262
+ }
263
+ async flushStuckTransactions() {
264
+ const gasPrice = await this.gasPriceManager.getGasPrice();
265
+ const wallets = this.senderManager.utilityAccount
266
+ ? Array.from(new Set([
267
+ ...this.senderManager.wallets,
268
+ this.senderManager.utilityAccount
269
+ ]))
270
+ : Array.from(new Set(this.senderManager.wallets));
271
+ const promises = wallets.map(async (wallet) => {
272
+ for (const entryPoint of this.entryPoints) {
273
+ await flushStuckTransaction(this.publicClient, this.walletClient, wallet, gasPrice.maxFeePerGas * 5n, this.logger, entryPoint);
274
+ }
275
+ });
276
+ await Promise.all(promises);
277
+ }
278
+ async bundle(entryPoint, ops) {
279
+ const wallet = await this.senderManager.getWallet();
280
+ const opsWithHashes = ops.map((op) => {
281
+ return {
282
+ mempoolUserOperation: op,
283
+ userOperationHash: getUserOperationHash(op, entryPoint, this.walletClient.chain.id)
284
+ };
285
+ });
286
+ const isUserOpVersion06 = opsWithHashes.reduce((acc, op) => {
287
+ if (acc !==
288
+ isVersion06(op.mempoolUserOperation)) {
289
+ throw new Error("All user operations must be of the same version");
290
+ }
291
+ return acc;
292
+ }, isVersion06(opsWithHashes[0].mempoolUserOperation));
293
+ const ep = getContract({
294
+ abi: isUserOpVersion06 ? EntryPointV06Abi : EntryPointV07Abi,
295
+ address: entryPoint,
296
+ client: {
297
+ public: this.publicClient,
298
+ wallet: this.walletClient
299
+ }
300
+ });
301
+ let childLogger = this.logger.child({
302
+ userOperations: opsWithHashes.map((oh) => oh.userOperationHash),
303
+ entryPoint
304
+ });
305
+ childLogger.debug("bundling user operation");
306
+ const gasPriceParameters = await this.gasPriceManager.getGasPrice();
307
+ childLogger.debug({ gasPriceParameters }, "got gas price");
308
+ const nonce = await this.publicClient.getTransactionCount({
309
+ address: wallet.address,
310
+ blockTag: "pending"
311
+ });
312
+ childLogger.trace({ nonce }, "got nonce");
313
+ const callContext = {
314
+ ep,
315
+ type: "default"
316
+ };
317
+ let { gasLimit, simulatedOps, resubmitAllOps } = await filterOpsAndEstimateGas(entryPoint, callContext, wallet, opsWithHashes, nonce, gasPriceParameters.maxFeePerGas, gasPriceParameters.maxPriorityFeePerGas, "pending", this.legacyTransactions, this.fixedGasLimitForEstimation, this.reputationManager, childLogger);
318
+ gasLimit += 10000n;
319
+ if (resubmitAllOps) {
320
+ this.markWalletProcessed(wallet);
321
+ return opsWithHashes.map((owh) => {
322
+ const bundleResult = {
323
+ status: "resubmit",
324
+ info: {
325
+ entryPoint,
326
+ userOpHash: owh.userOperationHash,
327
+ userOperation: owh.mempoolUserOperation,
328
+ reason: FeeCapTooLowError.name
329
+ }
330
+ };
331
+ return bundleResult;
332
+ });
333
+ }
334
+ if (simulatedOps.length === 0) {
335
+ childLogger.error("gas limit simulation encountered unexpected failure");
336
+ this.markWalletProcessed(wallet);
337
+ return opsWithHashes.map((owh) => {
338
+ return {
339
+ status: "failure",
340
+ error: {
341
+ entryPoint,
342
+ userOpHash: owh.userOperationHash,
343
+ reason: "INTERNAL FAILURE"
344
+ }
345
+ };
346
+ });
347
+ }
348
+ if (simulatedOps.every((op) => op.reason !== undefined)) {
349
+ childLogger.warn("all ops failed simulation");
350
+ this.markWalletProcessed(wallet);
351
+ return simulatedOps.map((op) => {
352
+ return {
353
+ status: "failure",
354
+ error: {
355
+ entryPoint,
356
+ userOpHash: op.owh.userOperationHash,
357
+ reason: op.reason
358
+ }
359
+ };
360
+ });
361
+ }
362
+ const opsWithHashToBundle = simulatedOps
363
+ .filter((op) => op.reason === undefined)
364
+ .map((op) => op.owh);
365
+ childLogger = this.logger.child({
366
+ userOperations: opsWithHashToBundle.map((owh) => owh.userOperationHash),
367
+ entryPoint
368
+ });
369
+ childLogger.trace({ gasLimit }, "got gas limit");
370
+ let txHash;
371
+ try {
372
+ const gasOptions = this.legacyTransactions
373
+ ? {
374
+ gasPrice: gasPriceParameters.maxFeePerGas
375
+ }
376
+ : {
377
+ maxFeePerGas: gasPriceParameters.maxFeePerGas,
378
+ maxPriorityFeePerGas: gasPriceParameters.maxPriorityFeePerGas
379
+ };
380
+ txHash = isUserOpVersion06
381
+ ? await ep.write.handleOps([
382
+ opsWithHashToBundle.map((owh) => owh.mempoolUserOperation),
383
+ wallet.address
384
+ ], {
385
+ account: wallet,
386
+ gas: gasLimit,
387
+ nonce: nonce,
388
+ ...gasOptions
389
+ })
390
+ : await ep.write.handleOps([
391
+ opsWithHashToBundle.map((owh) => toPackedUserOperation(owh.mempoolUserOperation)),
392
+ wallet.address
393
+ ], {
394
+ account: wallet,
395
+ gas: gasLimit,
396
+ nonce: nonce,
397
+ ...gasOptions
398
+ });
399
+ }
400
+ catch (err) {
401
+ const e = parseViemError(err);
402
+ if (e instanceof InsufficientFundsError) {
403
+ childLogger.error({ error: e }, "insufficient funds, not submitting transaction");
404
+ this.markWalletProcessed(wallet);
405
+ return opsWithHashToBundle.map((owh) => {
406
+ return {
407
+ status: "resubmit",
408
+ info: {
409
+ entryPoint,
410
+ userOpHash: owh.userOperationHash,
411
+ userOperation: owh.mempoolUserOperation,
412
+ reason: InsufficientFundsError.name
413
+ }
414
+ };
415
+ });
416
+ }
417
+ sentry.captureException(err);
418
+ childLogger.error({ error: JSON.stringify(err) }, "error submitting bundle transaction");
419
+ this.markWalletProcessed(wallet);
420
+ return opsWithHashes.map((owh) => {
421
+ return {
422
+ status: "failure",
423
+ error: {
424
+ entryPoint,
425
+ userOpHash: owh.userOperationHash,
426
+ reason: "INTERNAL FAILURE"
427
+ }
428
+ };
429
+ });
430
+ }
431
+ const userOperationInfos = opsWithHashToBundle.map((op) => {
432
+ return {
433
+ entryPoint,
434
+ mempoolUserOperation: op.mempoolUserOperation,
435
+ userOperationHash: op.userOperationHash,
436
+ lastReplaced: Date.now(),
437
+ firstSubmitted: Date.now()
438
+ };
439
+ });
440
+ const transactionInfo = {
441
+ entryPoint,
442
+ isVersion06: isUserOpVersion06,
443
+ transactionType: "default",
444
+ transactionHash: txHash,
445
+ previousTransactionHashes: [],
446
+ transactionRequest: {
447
+ account: wallet,
448
+ to: ep.address,
449
+ data: isUserOpVersion06
450
+ ? encodeFunctionData({
451
+ abi: ep.abi,
452
+ functionName: "handleOps",
453
+ args: [
454
+ opsWithHashToBundle.map((owh) => owh.mempoolUserOperation),
455
+ wallet.address
456
+ ]
457
+ })
458
+ : encodeFunctionData({
459
+ abi: ep.abi,
460
+ functionName: "handleOps",
461
+ args: [
462
+ opsWithHashToBundle.map((owh) => toPackedUserOperation(owh.mempoolUserOperation)),
463
+ wallet.address
464
+ ]
465
+ }),
466
+ gas: gasLimit,
467
+ chain: this.walletClient.chain,
468
+ maxFeePerGas: gasPriceParameters.maxFeePerGas,
469
+ maxPriorityFeePerGas: gasPriceParameters.maxPriorityFeePerGas,
470
+ nonce: nonce
471
+ },
472
+ executor: wallet,
473
+ userOperationInfos,
474
+ lastReplaced: Date.now(),
475
+ firstSubmitted: Date.now(),
476
+ timesPotentiallyIncluded: 0
477
+ };
478
+ const userOperationResults = simulatedOpsToResults(simulatedOps, transactionInfo);
479
+ childLogger.info({
480
+ transactionRequest: {
481
+ ...transactionInfo.transactionRequest,
482
+ abi: undefined
483
+ },
484
+ txHash,
485
+ opHashes: opsWithHashToBundle.map((owh) => owh.userOperationHash)
486
+ }, "submitted bundle transaction");
487
+ return userOperationResults;
488
+ }
489
+ async bundleCompressed(entryPoint, compressedOps) {
490
+ const compressionHandler = this.getCompressionHandler();
491
+ const wallet = await this.senderManager.getWallet();
492
+ const childLogger = this.logger.child({
493
+ compressedUserOperations: compressedOps,
494
+ entryPoint: entryPoint
495
+ });
496
+ childLogger.debug("bundling compressed user operation");
497
+ const gasPriceParameters = await this.gasPriceManager.getGasPrice();
498
+ childLogger.debug({ gasPriceParameters }, "got gas price");
499
+ const nonce = await this.publicClient.getTransactionCount({
500
+ address: wallet.address,
501
+ blockTag: "pending"
502
+ });
503
+ childLogger.trace({ nonce }, "got nonce");
504
+ const callContext = {
505
+ publicClient: this.publicClient,
506
+ bundleBulker: compressionHandler.bundleBulkerAddress,
507
+ perOpInflatorId: compressionHandler.perOpInflatorId,
508
+ type: "compressed"
509
+ };
510
+ let { gasLimit, simulatedOps, resubmitAllOps } = await filterOpsAndEstimateGas(entryPoint, callContext, wallet, compressedOps.map((compressedOp) => {
511
+ return {
512
+ mempoolUserOperation: compressedOp,
513
+ userOperationHash: getUserOperationHash(compressedOp.inflatedOp, entryPoint, this.walletClient.chain.id)
514
+ };
515
+ }), nonce, gasPriceParameters.maxFeePerGas, gasPriceParameters.maxPriorityFeePerGas, "pending", this.legacyTransactions, this.fixedGasLimitForEstimation, this.reputationManager, childLogger);
516
+ gasLimit += 10000n;
517
+ if (resubmitAllOps) {
518
+ this.markWalletProcessed(wallet);
519
+ return compressedOps.map((compressedOp) => {
520
+ return {
521
+ status: "resubmit",
522
+ info: {
523
+ entryPoint,
524
+ userOpHash: getUserOperationHash(compressedOp.inflatedOp, entryPoint, this.walletClient.chain.id),
525
+ userOperation: compressedOp,
526
+ reason: FeeCapTooLowError.name
527
+ }
528
+ };
529
+ });
530
+ }
531
+ if (simulatedOps.length === 0) {
532
+ childLogger.warn("no ops to bundle");
533
+ this.markWalletProcessed(wallet);
534
+ return compressedOps.map((compressedOp) => {
535
+ return {
536
+ status: "failure",
537
+ error: {
538
+ entryPoint,
539
+ userOpHash: getUserOperationHash(compressedOp.inflatedOp, entryPoint, this.walletClient.chain.id),
540
+ reason: "INTERNAL FAILURE"
541
+ }
542
+ };
543
+ });
544
+ }
545
+ // if not all succeeded, return error
546
+ if (simulatedOps.some((simulatedOp) => simulatedOp.reason !== undefined)) {
547
+ childLogger.warn("some ops failed simulation");
548
+ this.markWalletProcessed(wallet);
549
+ return simulatedOps.map((simulatedOp) => {
550
+ return {
551
+ status: "failure",
552
+ error: {
553
+ entryPoint,
554
+ userOpHash: simulatedOp.owh.userOperationHash,
555
+ reason: simulatedOp.reason
556
+ }
557
+ };
558
+ });
559
+ }
560
+ const opsToBundle = simulatedOps
561
+ .filter((simulatedOp) => simulatedOp.reason === undefined)
562
+ .map((simulatedOp) => simulatedOp.owh);
563
+ let txHash;
564
+ try {
565
+ const gasOptions = this.legacyTransactions
566
+ ? {
567
+ gasPrice: gasPriceParameters.maxFeePerGas
568
+ }
569
+ : {
570
+ maxFeePerGas: gasPriceParameters.maxFeePerGas,
571
+ maxPriorityFeePerGas: gasPriceParameters.maxPriorityFeePerGas
572
+ };
573
+ // need to use sendTransaction to target BundleBulker's fallback
574
+ txHash = await this.walletClient.sendTransaction({
575
+ account: wallet,
576
+ to: compressionHandler.bundleBulkerAddress,
577
+ data: createCompressedCalldata(compressedOps, compressionHandler.perOpInflatorId),
578
+ gas: gasLimit,
579
+ nonce: nonce,
580
+ ...gasOptions
581
+ });
582
+ }
583
+ catch (err) {
584
+ sentry.captureException(err);
585
+ childLogger.error({ error: JSON.stringify(err) }, "error submitting bundle transaction");
586
+ this.markWalletProcessed(wallet);
587
+ return opsToBundle.map((op) => {
588
+ return {
589
+ status: "failure",
590
+ error: {
591
+ entryPoint,
592
+ userOpHash: op.userOperationHash,
593
+ reason: "INTERNAL FAILURE"
594
+ }
595
+ };
596
+ });
597
+ }
598
+ const userOperationInfos = opsToBundle.map((owh) => {
599
+ return {
600
+ entryPoint,
601
+ mempoolUserOperation: owh.mempoolUserOperation,
602
+ userOperationHash: owh.userOperationHash,
603
+ lastReplaced: Date.now(),
604
+ firstSubmitted: Date.now()
605
+ };
606
+ });
607
+ const transactionInfo = {
608
+ entryPoint,
609
+ isVersion06: true, //TODO: compressed bundles are always v06
610
+ transactionType: "compressed",
611
+ transactionHash: txHash,
612
+ previousTransactionHashes: [],
613
+ transactionRequest: {
614
+ to: compressionHandler.bundleBulkerAddress,
615
+ data: createCompressedCalldata(compressedOps, compressionHandler.perOpInflatorId),
616
+ gas: gasLimit,
617
+ account: wallet,
618
+ chain: this.walletClient.chain,
619
+ maxFeePerGas: gasPriceParameters.maxFeePerGas,
620
+ maxPriorityFeePerGas: gasPriceParameters.maxPriorityFeePerGas,
621
+ nonce: nonce
622
+ },
623
+ executor: wallet,
624
+ userOperationInfos,
625
+ lastReplaced: Date.now(),
626
+ firstSubmitted: Date.now(),
627
+ timesPotentiallyIncluded: 0
628
+ };
629
+ const userOperationResults = simulatedOpsToResults(simulatedOps, transactionInfo);
630
+ childLogger.info({
631
+ txHash,
632
+ opHashes: opsToBundle.map((owh) => owh.userOperationHash)
633
+ }, "submitted bundle transaction");
634
+ return userOperationResults;
635
+ }
636
+ }
637
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../executor/executor.ts"],"names":[],"mappings":"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"}