@pimlico/alto 0.0.0-staging.20240606T110517 → 0.0.2

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 (230) hide show
  1. package/LICENSE +674 -0
  2. package/lib/executor/executor.js +6 -0
  3. package/lib/executor/executor.js.map +1 -1
  4. package/lib/executor/executorManager.js +1 -0
  5. package/lib/executor/executorManager.js.map +1 -1
  6. package/lib/executor/utils.js +3 -1
  7. package/lib/executor/utils.js.map +1 -1
  8. package/lib/rpc/server.js +2 -1
  9. package/lib/rpc/server.js.map +1 -1
  10. package/lib/types/mempool.d.ts +2 -1
  11. package/package.json +11 -12
  12. package/esm/cli/alto.d.ts +0 -6
  13. package/esm/cli/alto.js +0 -92
  14. package/esm/cli/alto.js.map +0 -1
  15. package/esm/cli/config/bundler.d.ts +0 -391
  16. package/esm/cli/config/bundler.js +0 -132
  17. package/esm/cli/config/bundler.js.map +0 -1
  18. package/esm/cli/config/index.d.ts +0 -3
  19. package/esm/cli/config/index.js +0 -3
  20. package/esm/cli/config/index.js.map +0 -1
  21. package/esm/cli/config/options.d.ts +0 -11
  22. package/esm/cli/config/options.js +0 -336
  23. package/esm/cli/config/options.js.map +0 -1
  24. package/esm/cli/customTransport.d.ts +0 -14
  25. package/esm/cli/customTransport.js +0 -53
  26. package/esm/cli/customTransport.js.map +0 -1
  27. package/esm/cli/handler.d.ts +0 -3
  28. package/esm/cli/handler.js +0 -116
  29. package/esm/cli/handler.js.map +0 -1
  30. package/esm/cli/index.d.ts +0 -4
  31. package/esm/cli/index.js +0 -4
  32. package/esm/cli/index.js.map +0 -1
  33. package/esm/cli/instrumentation.d.ts +0 -2
  34. package/esm/cli/instrumentation.js +0 -39
  35. package/esm/cli/instrumentation.js.map +0 -1
  36. package/esm/cli/setupServer.d.ts +0 -17
  37. package/esm/cli/setupServer.js +0 -155
  38. package/esm/cli/setupServer.js.map +0 -1
  39. package/esm/cli/util.d.ts +0 -22
  40. package/esm/cli/util.js +0 -30
  41. package/esm/cli/util.js.map +0 -1
  42. package/esm/executor/executor.d.ts +0 -54
  43. package/esm/executor/executor.js +0 -637
  44. package/esm/executor/executor.js.map +0 -1
  45. package/esm/executor/executorManager.d.ts +0 -34
  46. package/esm/executor/executorManager.js +0 -401
  47. package/esm/executor/executorManager.js.map +0 -1
  48. package/esm/executor/index.d.ts +0 -5
  49. package/esm/executor/index.js +0 -5
  50. package/esm/executor/index.js.map +0 -1
  51. package/esm/executor/senderManager.d.ts +0 -17
  52. package/esm/executor/senderManager.js +0 -160
  53. package/esm/executor/senderManager.js.map +0 -1
  54. package/esm/executor/test/utils.d.ts +0 -13
  55. package/esm/executor/test/utils.js +0 -75
  56. package/esm/executor/test/utils.js.map +0 -1
  57. package/esm/executor/utils.d.ts +0 -32
  58. package/esm/executor/utils.js +0 -239
  59. package/esm/executor/utils.js.map +0 -1
  60. package/esm/index.d.ts +0 -2
  61. package/esm/index.js +0 -2
  62. package/esm/index.js.map +0 -1
  63. package/esm/mempool/index.d.ts +0 -5
  64. package/esm/mempool/index.js +0 -5
  65. package/esm/mempool/index.js.map +0 -1
  66. package/esm/mempool/mempool.d.ts +0 -64
  67. package/esm/mempool/mempool.js +0 -489
  68. package/esm/mempool/mempool.js.map +0 -1
  69. package/esm/mempool/monitoring.d.ts +0 -10
  70. package/esm/mempool/monitoring.js +0 -34
  71. package/esm/mempool/monitoring.js.map +0 -1
  72. package/esm/mempool/nullMempool.d.ts +0 -15
  73. package/esm/mempool/nullMempool.js +0 -36
  74. package/esm/mempool/nullMempool.js.map +0 -1
  75. package/esm/mempool/reputationManager.d.ts +0 -115
  76. package/esm/mempool/reputationManager.js +0 -397
  77. package/esm/mempool/reputationManager.js.map +0 -1
  78. package/esm/mempool/store.d.ts +0 -22
  79. package/esm/mempool/store.js +0 -123
  80. package/esm/mempool/store.js.map +0 -1
  81. package/esm/rpc/EntryPointSimulationsV07.d.ts +0 -58
  82. package/esm/rpc/EntryPointSimulationsV07.js +0 -407
  83. package/esm/rpc/EntryPointSimulationsV07.js.map +0 -1
  84. package/esm/rpc/ExecuteSimulator.d.ts +0 -37
  85. package/esm/rpc/ExecuteSimulator.js +0 -48
  86. package/esm/rpc/ExecuteSimulator.js.map +0 -1
  87. package/esm/rpc/gasEstimation.d.ts +0 -17
  88. package/esm/rpc/gasEstimation.js +0 -410
  89. package/esm/rpc/gasEstimation.js.map +0 -1
  90. package/esm/rpc/index.d.ts +0 -5
  91. package/esm/rpc/index.js +0 -5
  92. package/esm/rpc/index.js.map +0 -1
  93. package/esm/rpc/nonceQueuer.d.ts +0 -25
  94. package/esm/rpc/nonceQueuer.js +0 -135
  95. package/esm/rpc/nonceQueuer.js.map +0 -1
  96. package/esm/rpc/rpcHandler.d.ts +0 -64
  97. package/esm/rpc/rpcHandler.js +0 -727
  98. package/esm/rpc/rpcHandler.js.map +0 -1
  99. package/esm/rpc/server.d.ts +0 -31
  100. package/esm/rpc/server.js +0 -238
  101. package/esm/rpc/server.js.map +0 -1
  102. package/esm/rpc/validation/BundlerCollectorTracerV06.d.ts +0 -102
  103. package/esm/rpc/validation/BundlerCollectorTracerV06.js +0 -255
  104. package/esm/rpc/validation/BundlerCollectorTracerV06.js.map +0 -1
  105. package/esm/rpc/validation/BundlerCollectorTracerV07.d.ts +0 -102
  106. package/esm/rpc/validation/BundlerCollectorTracerV07.js +0 -254
  107. package/esm/rpc/validation/BundlerCollectorTracerV07.js.map +0 -1
  108. package/esm/rpc/validation/SafeValidator.d.ts +0 -35
  109. package/esm/rpc/validation/SafeValidator.js +0 -487
  110. package/esm/rpc/validation/SafeValidator.js.map +0 -1
  111. package/esm/rpc/validation/TracerResultParserV06.d.ts +0 -13
  112. package/esm/rpc/validation/TracerResultParserV06.js +0 -578
  113. package/esm/rpc/validation/TracerResultParserV06.js.map +0 -1
  114. package/esm/rpc/validation/TracerResultParserV07.d.ts +0 -33
  115. package/esm/rpc/validation/TracerResultParserV07.js +0 -557
  116. package/esm/rpc/validation/TracerResultParserV07.js.map +0 -1
  117. package/esm/rpc/validation/UnsafeValidator.d.ts +0 -63
  118. package/esm/rpc/validation/UnsafeValidator.js +0 -257
  119. package/esm/rpc/validation/UnsafeValidator.js.map +0 -1
  120. package/esm/rpc/validation/index.d.ts +0 -3
  121. package/esm/rpc/validation/index.js +0 -3
  122. package/esm/rpc/validation/index.js.map +0 -1
  123. package/esm/rpc/validation/tracer.d.ts +0 -122
  124. package/esm/rpc/validation/tracer.js +0 -82
  125. package/esm/rpc/validation/tracer.js.map +0 -1
  126. package/esm/types/contracts/BundleBulker.d.ts +0 -120
  127. package/esm/types/contracts/BundleBulker.js +0 -157
  128. package/esm/types/contracts/BundleBulker.js.map +0 -1
  129. package/esm/types/contracts/CallEngine.d.ts +0 -28
  130. package/esm/types/contracts/CallEngine.js +0 -37
  131. package/esm/types/contracts/CallEngine.js.map +0 -1
  132. package/esm/types/contracts/CodeHashGetter.d.ts +0 -37
  133. package/esm/types/contracts/CodeHashGetter.js +0 -45
  134. package/esm/types/contracts/CodeHashGetter.js.map +0 -1
  135. package/esm/types/contracts/EntryPoint.d.ts +0 -1789
  136. package/esm/types/contracts/EntryPoint.js +0 -2304
  137. package/esm/types/contracts/EntryPoint.js.map +0 -1
  138. package/esm/types/contracts/EntryPointSimulations.d.ts +0 -153
  139. package/esm/types/contracts/EntryPointSimulations.js +0 -15
  140. package/esm/types/contracts/EntryPointSimulations.js.map +0 -1
  141. package/esm/types/contracts/IOpInflator.d.ts +0 -61
  142. package/esm/types/contracts/IOpInflator.js +0 -80
  143. package/esm/types/contracts/IOpInflator.js.map +0 -1
  144. package/esm/types/contracts/IPaymaster.d.ts +0 -3
  145. package/esm/types/contracts/IPaymaster.js +0 -117
  146. package/esm/types/contracts/IPaymaster.js.map +0 -1
  147. package/esm/types/contracts/Inflator.d.ts +0 -65
  148. package/esm/types/contracts/Inflator.js +0 -84
  149. package/esm/types/contracts/Inflator.js.map +0 -1
  150. package/esm/types/contracts/PerOpInflator.d.ts +0 -176
  151. package/esm/types/contracts/PerOpInflator.js +0 -229
  152. package/esm/types/contracts/PerOpInflator.js.map +0 -1
  153. package/esm/types/contracts/PimlicoEntryPointSimulations.d.ts +0 -23
  154. package/esm/types/contracts/PimlicoEntryPointSimulations.js +0 -33
  155. package/esm/types/contracts/PimlicoEntryPointSimulations.js.map +0 -1
  156. package/esm/types/contracts/SenderCreator.d.ts +0 -4
  157. package/esm/types/contracts/SenderCreator.js +0 -23
  158. package/esm/types/contracts/SenderCreator.js.map +0 -1
  159. package/esm/types/contracts/SimpleAccountFactory.d.ts +0 -57
  160. package/esm/types/contracts/SimpleAccountFactory.js +0 -76
  161. package/esm/types/contracts/SimpleAccountFactory.js.map +0 -1
  162. package/esm/types/contracts/TestOpcodesAccount.d.ts +0 -4
  163. package/esm/types/contracts/TestOpcodesAccount.js +0 -281
  164. package/esm/types/contracts/TestOpcodesAccount.js.map +0 -1
  165. package/esm/types/contracts/TestOpcodesAccountFactory.d.ts +0 -4
  166. package/esm/types/contracts/TestOpcodesAccountFactory.js +0 -23
  167. package/esm/types/contracts/TestOpcodesAccountFactory.js.map +0 -1
  168. package/esm/types/contracts/TestStorageAccount.d.ts +0 -4
  169. package/esm/types/contracts/TestStorageAccount.js +0 -313
  170. package/esm/types/contracts/TestStorageAccount.js.map +0 -1
  171. package/esm/types/contracts/index.d.ts +0 -17
  172. package/esm/types/contracts/index.js +0 -17
  173. package/esm/types/contracts/index.js.map +0 -1
  174. package/esm/types/gasPrice.d.ts +0 -110
  175. package/esm/types/gasPrice.js +0 -52
  176. package/esm/types/gasPrice.js.map +0 -1
  177. package/esm/types/index.d.ts +0 -11
  178. package/esm/types/index.js +0 -11
  179. package/esm/types/index.js.map +0 -1
  180. package/esm/types/interfaces.d.ts +0 -26
  181. package/esm/types/interfaces.js +0 -2
  182. package/esm/types/interfaces.js.map +0 -1
  183. package/esm/types/mempool.d.ts +0 -78
  184. package/esm/types/mempool.js +0 -16
  185. package/esm/types/mempool.js.map +0 -1
  186. package/esm/types/schemas.d.ts +0 -4791
  187. package/esm/types/schemas.js +0 -497
  188. package/esm/types/schemas.js.map +0 -1
  189. package/esm/types/test/validationTestErrors.d.ts +0 -3
  190. package/esm/types/test/validationTestErrors.js +0 -229
  191. package/esm/types/test/validationTestErrors.js.map +0 -1
  192. package/esm/types/utils.d.ts +0 -24
  193. package/esm/types/utils.js +0 -30
  194. package/esm/types/utils.js.map +0 -1
  195. package/esm/types/validation.d.ts +0 -14327
  196. package/esm/types/validation.js +0 -304
  197. package/esm/types/validation.js.map +0 -1
  198. package/esm/utils/bigInt.d.ts +0 -3
  199. package/esm/utils/bigInt.js +0 -9
  200. package/esm/utils/bigInt.js.map +0 -1
  201. package/esm/utils/compressionHandler.d.ts +0 -11
  202. package/esm/utils/compressionHandler.js +0 -39
  203. package/esm/utils/compressionHandler.js.map +0 -1
  204. package/esm/utils/gasPriceManager.d.ts +0 -34
  205. package/esm/utils/gasPriceManager.js +0 -338
  206. package/esm/utils/gasPriceManager.js.map +0 -1
  207. package/esm/utils/helpers.d.ts +0 -4
  208. package/esm/utils/helpers.js +0 -13
  209. package/esm/utils/helpers.js.map +0 -1
  210. package/esm/utils/index.d.ts +0 -11
  211. package/esm/utils/index.js +0 -10
  212. package/esm/utils/index.js.map +0 -1
  213. package/esm/utils/logger.d.ts +0 -6
  214. package/esm/utils/logger.js +0 -76
  215. package/esm/utils/logger.js.map +0 -1
  216. package/esm/utils/metrics.d.ts +0 -22
  217. package/esm/utils/metrics.js +0 -150
  218. package/esm/utils/metrics.js.map +0 -1
  219. package/esm/utils/rpc-reply.d.ts +0 -17
  220. package/esm/utils/rpc-reply.js +0 -41
  221. package/esm/utils/rpc-reply.js.map +0 -1
  222. package/esm/utils/test.d.ts +0 -17
  223. package/esm/utils/test.js +0 -130
  224. package/esm/utils/test.js.map +0 -1
  225. package/esm/utils/userop.d.ts +0 -49
  226. package/esm/utils/userop.js +0 -408
  227. package/esm/utils/userop.js.map +0 -1
  228. package/esm/utils/validation.d.ts +0 -65
  229. package/esm/utils/validation.js +0 -461
  230. package/esm/utils/validation.js.map +0 -1
@@ -1,34 +0,0 @@
1
- import type { Metrics, Logger, GasPriceManager } from "../utils/index.js";
2
- import type { InterfaceReputationManager, MemoryMempool, Monitor } from "../mempool/index.js";
3
- import { type BundlingMode, type MempoolUserOperation, type TransactionInfo } from "../types/index.js";
4
- import type { Address, Block, Chain, Hash, PublicClient, Transport } from "viem";
5
- import type { Executor } from "./executor.js";
6
- export declare class ExecutorManager {
7
- private entryPoints;
8
- private executor;
9
- private mempool;
10
- private monitor;
11
- private publicClient;
12
- private pollingInterval;
13
- private logger;
14
- private metrics;
15
- private reputationManager;
16
- private unWatch;
17
- private currentlyHandlingBlock;
18
- private timer?;
19
- private bundlerFrequency;
20
- private maxGasLimitPerBundle;
21
- private gasPriceManager;
22
- constructor(executor: Executor, entryPoints: Address[], mempool: MemoryMempool, monitor: Monitor, reputationManager: InterfaceReputationManager, publicClient: PublicClient<Transport, Chain>, pollingInterval: number, logger: Logger, metrics: Metrics, bundleMode: BundlingMode, bundlerFrequency: number, maxGasLimitPerBundle: bigint, gasPriceManager: GasPriceManager);
23
- setBundlingMode(bundleMode: BundlingMode): void;
24
- bundleNow(): Promise<Hash[]>;
25
- sendToExecutor(entryPoint: Address, mempoolOps: MempoolUserOperation[]): Promise<`0x${string}` | undefined>;
26
- bundle(): Promise<void>;
27
- startWatchingBlocks(handleBlock: (block: Block) => void): void;
28
- stopWatchingBlocks(): void;
29
- private refreshTransactionStatus;
30
- refreshUserOperationStatuses(): Promise<void>;
31
- handleBlock(block: Block): Promise<void>;
32
- replaceTransaction(txInfo: TransactionInfo, reason: string): Promise<void>;
33
- }
34
- //# sourceMappingURL=executorManager.d.ts.map
@@ -1,401 +0,0 @@
1
- import { deriveUserOperation, isCompressedType } from "../types/index.js";
2
- import { transactionIncluded } from "../utils/index.js";
3
- function getTransactionsFromUserOperationEntries(entries) {
4
- return Array.from(new Set(entries.map((entry) => {
5
- return entry.transactionInfo;
6
- })));
7
- }
8
- export class ExecutorManager {
9
- entryPoints;
10
- executor;
11
- mempool;
12
- monitor;
13
- publicClient;
14
- pollingInterval;
15
- logger;
16
- metrics;
17
- reputationManager;
18
- unWatch;
19
- currentlyHandlingBlock = false;
20
- timer;
21
- bundlerFrequency;
22
- maxGasLimitPerBundle;
23
- gasPriceManager;
24
- constructor(executor, entryPoints, mempool, monitor, reputationManager, publicClient, pollingInterval, logger, metrics, bundleMode, bundlerFrequency, maxGasLimitPerBundle, gasPriceManager) {
25
- this.entryPoints = entryPoints;
26
- this.reputationManager = reputationManager;
27
- this.executor = executor;
28
- this.mempool = mempool;
29
- this.monitor = monitor;
30
- this.publicClient = publicClient;
31
- this.pollingInterval = pollingInterval;
32
- this.logger = logger;
33
- this.metrics = metrics;
34
- this.bundlerFrequency = bundlerFrequency;
35
- this.maxGasLimitPerBundle = maxGasLimitPerBundle;
36
- this.gasPriceManager = gasPriceManager;
37
- if (bundleMode === "auto") {
38
- this.timer = setInterval(async () => {
39
- await this.bundle();
40
- }, bundlerFrequency);
41
- }
42
- }
43
- setBundlingMode(bundleMode) {
44
- if (bundleMode === "auto" && !this.timer) {
45
- this.timer = setInterval(async () => {
46
- await this.bundle();
47
- }, this.bundlerFrequency);
48
- }
49
- else if (bundleMode === "manual" && this.timer) {
50
- clearInterval(this.timer);
51
- this.timer = undefined;
52
- }
53
- }
54
- async bundleNow() {
55
- const ops = await this.mempool.process(this.maxGasLimitPerBundle, 1);
56
- if (ops.length === 0) {
57
- throw new Error("no ops to bundle");
58
- }
59
- const opEntryPointMap = new Map();
60
- for (const op of ops) {
61
- if (!opEntryPointMap.has(op.entryPoint)) {
62
- opEntryPointMap.set(op.entryPoint, []);
63
- }
64
- opEntryPointMap.get(op.entryPoint)?.push(op.mempoolUserOperation);
65
- }
66
- const txHashes = [];
67
- await Promise.all(this.entryPoints.map(async (entryPoint) => {
68
- const ops = opEntryPointMap.get(entryPoint);
69
- if (ops) {
70
- const txHash = await this.sendToExecutor(entryPoint, ops);
71
- if (!txHash) {
72
- throw new Error("no tx hash");
73
- }
74
- txHashes.push(txHash);
75
- }
76
- else {
77
- this.logger.warn({ entryPoint }, "no user operations for entry point");
78
- }
79
- }));
80
- return txHashes;
81
- }
82
- async sendToExecutor(entryPoint, mempoolOps) {
83
- const ops = mempoolOps
84
- .filter((op) => !isCompressedType(op))
85
- .map((op) => op);
86
- const compressedOps = mempoolOps
87
- .filter((op) => isCompressedType(op))
88
- .map((op) => op);
89
- const bundles = [];
90
- if (ops.length > 0) {
91
- bundles.push(await this.executor.bundle(entryPoint, ops));
92
- }
93
- if (compressedOps.length > 0) {
94
- bundles.push(await this.executor.bundleCompressed(entryPoint, compressedOps));
95
- }
96
- for (const bundle of bundles) {
97
- const isBundleSuccess = bundle.every((result) => result.status === "success");
98
- if (isBundleSuccess) {
99
- this.metrics.bundlesSubmitted
100
- .labels({ status: "success" })
101
- .inc();
102
- }
103
- else {
104
- this.metrics.bundlesSubmitted.labels({ status: "failed" }).inc();
105
- }
106
- }
107
- const results = bundles.flat();
108
- const filteredOutOps = mempoolOps.length - results.length;
109
- if (filteredOutOps > 0) {
110
- this.logger.debug({ filteredOutOps }, "user operations filtered out");
111
- this.metrics.userOperationsSubmitted
112
- .labels({ status: "filtered" })
113
- .inc(filteredOutOps);
114
- }
115
- let txHash = undefined;
116
- for (const result of results) {
117
- if (result.status === "success") {
118
- const res = result.value;
119
- this.mempool.markSubmitted(res.userOperation.userOperationHash, res.transactionInfo);
120
- // this.monitoredTransactions.set(result.transactionInfo.transactionHash, result.transactionInfo)
121
- this.monitor.setUserOperationStatus(res.userOperation.userOperationHash, {
122
- status: "submitted",
123
- transactionHash: res.transactionInfo.transactionHash
124
- });
125
- txHash = res.transactionInfo.transactionHash;
126
- this.startWatchingBlocks(this.handleBlock.bind(this));
127
- this.metrics.userOperationsSubmitted
128
- .labels({ status: "success" })
129
- .inc();
130
- }
131
- if (result.status === "failure") {
132
- this.mempool.removeProcessing(result.error.userOpHash);
133
- this.monitor.setUserOperationStatus(result.error.userOpHash, {
134
- status: "rejected",
135
- transactionHash: null
136
- });
137
- this.logger.warn({
138
- userOpHash: result.error.userOpHash,
139
- reason: result.error.reason
140
- }, "user operation rejected");
141
- this.metrics.userOperationsSubmitted
142
- .labels({ status: "failed" })
143
- .inc();
144
- }
145
- if (result.status === "resubmit") {
146
- this.logger.info({
147
- userOpHash: result.info.userOpHash,
148
- reason: result.info.reason
149
- }, "resubmitting user operation");
150
- this.mempool.removeProcessing(result.info.userOpHash);
151
- this.mempool.add(result.info.userOperation, result.info.entryPoint);
152
- this.metrics.userOperationsResubmitted.inc();
153
- }
154
- }
155
- return txHash;
156
- }
157
- async bundle() {
158
- const opsToBundle = [];
159
- while (true) {
160
- const ops = await this.mempool.process(5000000n, 1);
161
- if (ops?.length > 0) {
162
- opsToBundle.push(ops);
163
- }
164
- else {
165
- break;
166
- }
167
- }
168
- if (opsToBundle.length === 0) {
169
- return;
170
- }
171
- await Promise.all(opsToBundle.map(async (ops) => {
172
- const opEntryPointMap = new Map();
173
- for (const op of ops) {
174
- if (!opEntryPointMap.has(op.entryPoint)) {
175
- opEntryPointMap.set(op.entryPoint, []);
176
- }
177
- opEntryPointMap
178
- .get(op.entryPoint)
179
- ?.push(op.mempoolUserOperation);
180
- }
181
- await Promise.all(this.entryPoints.map(async (entryPoint) => {
182
- const userOperations = opEntryPointMap.get(entryPoint);
183
- if (userOperations) {
184
- await this.sendToExecutor(entryPoint, userOperations);
185
- }
186
- else {
187
- this.logger.warn({ entryPoint }, "no user operations for entry point");
188
- }
189
- }));
190
- }));
191
- }
192
- startWatchingBlocks(handleBlock) {
193
- if (this.unWatch) {
194
- return;
195
- }
196
- this.unWatch = this.publicClient.watchBlocks({
197
- onBlock: handleBlock,
198
- // onBlock: async (block) => {
199
- // // Use an arrow function to ensure correct binding of `this`
200
- // this.checkAndReplaceTransactions(block)
201
- // .then(() => {
202
- // this.logger.trace("block handled")
203
- // // Handle the resolution of the promise here, if needed
204
- // })
205
- // .catch((error) => {
206
- // // Handle any errors that occur during the execution of the promise
207
- // this.logger.error({ error }, "error while handling block")
208
- // })
209
- // },
210
- onError: (error) => {
211
- this.logger.error({ error }, "error while watching blocks");
212
- },
213
- emitMissed: false,
214
- includeTransactions: false,
215
- pollingInterval: this.pollingInterval
216
- });
217
- this.logger.debug("started watching blocks");
218
- }
219
- stopWatchingBlocks() {
220
- if (this.unWatch) {
221
- this.logger.debug("stopped watching blocks");
222
- this.unWatch();
223
- this.unWatch = undefined;
224
- }
225
- }
226
- async refreshTransactionStatus(entryPoint, transactionInfo) {
227
- const hashesToCheck = [
228
- transactionInfo.transactionHash,
229
- ...transactionInfo.previousTransactionHashes
230
- ];
231
- const opInfos = transactionInfo.userOperationInfos;
232
- // const opHashes = transactionInfo.userOperationInfos.map((opInfo) => opInfo.userOperationHash)
233
- const transactionStatuses = await Promise.all(hashesToCheck.map(async (hash) => {
234
- return {
235
- hash: hash,
236
- transactionStatuses: await transactionIncluded(transactionInfo.isVersion06, hash, this.publicClient, entryPoint)
237
- };
238
- }));
239
- const status = transactionStatuses.find((status) => status.transactionStatuses.status === "included" ||
240
- status.transactionStatuses.status === "failed" ||
241
- status.transactionStatuses.status === "reverted");
242
- if (!status) {
243
- opInfos.map((info) => {
244
- this.logger.trace({
245
- userOpHash: info.userOperationHash,
246
- transactionHash: transactionInfo.transactionHash
247
- }, "user op still pending");
248
- });
249
- return;
250
- }
251
- this.metrics.userOperationsOnChain
252
- .labels({ status: status.transactionStatuses.status })
253
- .inc(opInfos.length);
254
- if (status.transactionStatuses.status === "included") {
255
- opInfos.map((info) => {
256
- this.metrics.userOperationInclusionDuration.observe((Date.now() - info.firstSubmitted) / 1000);
257
- this.reputationManager.updateUserOperationIncludedStatus(deriveUserOperation(info.mempoolUserOperation), info.entryPoint, status.transactionStatuses[info.userOperationHash]
258
- .accountDeployed);
259
- this.mempool.removeSubmitted(info.userOperationHash);
260
- this.monitor.setUserOperationStatus(info.userOperationHash, {
261
- status: "included",
262
- transactionHash: status.hash
263
- });
264
- this.logger.info({
265
- userOpHash: info.userOperationHash,
266
- transactionHash: status.hash
267
- }, "user op included");
268
- });
269
- this.executor.markWalletProcessed(transactionInfo.executor);
270
- }
271
- else if (status.transactionStatuses.status === "failed" ||
272
- status.transactionStatuses.status === "reverted") {
273
- opInfos.map((info) => {
274
- this.mempool.removeSubmitted(info.userOperationHash);
275
- this.monitor.setUserOperationStatus(info.userOperationHash, {
276
- status: "rejected",
277
- transactionHash: status.hash
278
- });
279
- this.logger.info({
280
- userOpHash: info.userOperationHash,
281
- transactionHash: status.hash
282
- }, "user op rejected");
283
- });
284
- this.executor.markWalletProcessed(transactionInfo.executor);
285
- }
286
- }
287
- async refreshUserOperationStatuses() {
288
- const ops = this.mempool.dumpSubmittedOps();
289
- const opEntryPointMap = new Map();
290
- for (const op of ops) {
291
- if (!opEntryPointMap.has(op.userOperation.entryPoint)) {
292
- opEntryPointMap.set(op.userOperation.entryPoint, []);
293
- }
294
- opEntryPointMap.get(op.userOperation.entryPoint)?.push(op);
295
- }
296
- await Promise.all(this.entryPoints.map(async (entryPoint) => {
297
- const ops = opEntryPointMap.get(entryPoint);
298
- if (ops) {
299
- const txs = getTransactionsFromUserOperationEntries(ops);
300
- await Promise.all(txs.map(async (txInfo) => {
301
- await this.refreshTransactionStatus(entryPoint, txInfo);
302
- }));
303
- }
304
- else {
305
- this.logger.warn({ entryPoint }, "no user operations for entry point");
306
- }
307
- }));
308
- }
309
- async handleBlock(block) {
310
- if (this.currentlyHandlingBlock) {
311
- return;
312
- }
313
- this.currentlyHandlingBlock = true;
314
- this.logger.debug({ blockNumber: block.number }, "handling block");
315
- const submittedEntries = this.mempool.dumpSubmittedOps();
316
- if (submittedEntries.length === 0) {
317
- this.stopWatchingBlocks();
318
- this.currentlyHandlingBlock = false;
319
- return;
320
- }
321
- // refresh op statuses
322
- await this.refreshUserOperationStatuses();
323
- // for all still not included check if needs to be replaced (based on gas price)
324
- const gasPriceParameters = await this.gasPriceManager.getGasPrice();
325
- this.logger.trace({ gasPriceParameters }, "fetched gas price parameters");
326
- const transactionInfos = getTransactionsFromUserOperationEntries(this.mempool.dumpSubmittedOps());
327
- await Promise.all(transactionInfos.map(async (txInfo) => {
328
- if (txInfo.transactionRequest.maxFeePerGas >=
329
- gasPriceParameters.maxFeePerGas &&
330
- txInfo.transactionRequest.maxPriorityFeePerGas >=
331
- gasPriceParameters.maxPriorityFeePerGas) {
332
- return;
333
- }
334
- await this.replaceTransaction(txInfo, "gas_price");
335
- }));
336
- // for any left check if enough time has passed, if so replace
337
- const transactionInfos2 = getTransactionsFromUserOperationEntries(this.mempool.dumpSubmittedOps());
338
- await Promise.all(transactionInfos2.map(async (txInfo) => {
339
- if (Date.now() - txInfo.lastReplaced < 5 * 60 * 1000) {
340
- return;
341
- }
342
- await this.replaceTransaction(txInfo, "stuck");
343
- }));
344
- this.currentlyHandlingBlock = false;
345
- }
346
- async replaceTransaction(txInfo, reason) {
347
- let replaceResult = undefined;
348
- try {
349
- replaceResult = await this.executor.replaceTransaction(txInfo);
350
- }
351
- finally {
352
- this.metrics.replacedTransactions
353
- .labels({ reason, status: replaceResult?.status || "failed" })
354
- .inc();
355
- }
356
- if (replaceResult.status === "failed") {
357
- txInfo.userOperationInfos.map((opInfo) => {
358
- this.mempool.removeSubmitted(opInfo.userOperationHash);
359
- });
360
- this.logger.warn({ oldTxHash: txInfo.transactionHash, reason }, "failed to replace transaction");
361
- return;
362
- }
363
- if (replaceResult.status === "potentially_already_included") {
364
- this.logger.info({ oldTxHash: txInfo.transactionHash, reason }, "transaction potentially already included");
365
- txInfo.timesPotentiallyIncluded += 1;
366
- if (txInfo.timesPotentiallyIncluded >= 3) {
367
- txInfo.userOperationInfos.map((opInfo) => {
368
- this.mempool.removeSubmitted(opInfo.userOperationHash);
369
- });
370
- this.executor.markWalletProcessed(txInfo.executor);
371
- this.logger.warn({ oldTxHash: txInfo.transactionHash, reason }, "transaction potentially already included too many times, removing");
372
- }
373
- return;
374
- }
375
- const newTxInfo = replaceResult.transactionInfo;
376
- const missingOps = txInfo.userOperationInfos.filter((info) => !newTxInfo.userOperationInfos
377
- .map((ni) => ni.userOperationHash)
378
- .includes(info.userOperationHash));
379
- const matchingOps = txInfo.userOperationInfos.filter((info) => newTxInfo.userOperationInfos
380
- .map((ni) => ni.userOperationHash)
381
- .includes(info.userOperationHash));
382
- matchingOps.map((opInfo) => {
383
- this.mempool.replaceSubmitted(opInfo, newTxInfo);
384
- });
385
- missingOps.map((opInfo) => {
386
- this.mempool.removeSubmitted(opInfo.userOperationHash);
387
- this.logger.warn({
388
- oldTxHash: txInfo.transactionHash,
389
- newTxHash: newTxInfo.transactionHash,
390
- reason
391
- }, "missing op in new tx");
392
- });
393
- this.logger.info({
394
- oldTxHash: txInfo.transactionHash,
395
- newTxHash: newTxInfo.transactionHash,
396
- reason
397
- }, "replaced transaction");
398
- return;
399
- }
400
- }
401
- //# sourceMappingURL=executorManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executorManager.js","sourceRoot":"","sources":["../../executor/executorManager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export * from "./senderManager.js";
2
- export * from "./executor.js";
3
- export * from "./executorManager.js";
4
- export * from "./utils.js";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1,5 +0,0 @@
1
- export * from "./senderManager.js";
2
- export * from "./executor.js";
3
- export * from "./executorManager.js";
4
- export * from "./utils.js";
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../executor/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA"}
@@ -1,17 +0,0 @@
1
- import type { GasPriceManager, Logger, Metrics } from "../utils/index.js";
2
- import { type Account, type Chain, type PublicClient, type Transport, type WalletClient } from "viem";
3
- export declare class SenderManager {
4
- wallets: Account[];
5
- utilityAccount: Account | undefined;
6
- availableWallets: Account[];
7
- private logger;
8
- private metrics;
9
- private legacyTransactions;
10
- private semaphore;
11
- private gasPriceManager;
12
- constructor(wallets: Account[], utilityAccount: Account | undefined, logger: Logger, metrics: Metrics, legacyTransactions: boolean, gasPriceManager: GasPriceManager, maxSigners?: number);
13
- validateAndRefillWallets(publicClient: PublicClient, walletClient: WalletClient<Transport, Chain>, minBalance?: bigint): Promise<void>;
14
- getWallet(): Promise<Account>;
15
- pushWallet(wallet: Account): void;
16
- }
17
- //# sourceMappingURL=senderManager.d.ts.map
@@ -1,160 +0,0 @@
1
- import { CallEngineAbi } from "../types/index.js";
2
- import { Semaphore } from "async-mutex";
3
- import { formatEther, getContract } from "viem";
4
- const waitForTransactionReceipt = async (publicClient, tx) => {
5
- try {
6
- return await publicClient.waitForTransactionReceipt({ hash: tx });
7
- }
8
- catch {
9
- return await waitForTransactionReceipt(publicClient, tx);
10
- }
11
- };
12
- export class SenderManager {
13
- wallets;
14
- utilityAccount;
15
- availableWallets;
16
- logger;
17
- metrics;
18
- legacyTransactions;
19
- semaphore;
20
- gasPriceManager;
21
- constructor(wallets, utilityAccount, logger, metrics, legacyTransactions, gasPriceManager, maxSigners) {
22
- if (maxSigners !== undefined && wallets.length > maxSigners) {
23
- this.wallets = wallets.slice(0, maxSigners);
24
- this.availableWallets = wallets.slice(0, maxSigners);
25
- }
26
- else {
27
- this.wallets = wallets;
28
- this.availableWallets = wallets;
29
- }
30
- this.utilityAccount = utilityAccount;
31
- this.logger = logger;
32
- this.metrics = metrics;
33
- this.legacyTransactions = legacyTransactions;
34
- metrics.walletsAvailable.set(this.availableWallets.length);
35
- metrics.walletsTotal.set(this.wallets.length);
36
- this.semaphore = new Semaphore(this.availableWallets.length);
37
- this.gasPriceManager = gasPriceManager;
38
- }
39
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>
40
- async validateAndRefillWallets(publicClient, walletClient, minBalance) {
41
- if (!(minBalance && this.utilityAccount)) {
42
- return;
43
- }
44
- const utilityWalletBalance = await publicClient.getBalance({
45
- address: this.utilityAccount.address
46
- });
47
- const balancesMissing = {};
48
- const balanceRequestPromises = this.availableWallets.map(async (wallet) => {
49
- const balance = await publicClient.getBalance({
50
- address: wallet.address
51
- });
52
- if (balance < minBalance) {
53
- const missingBalance = (minBalance * 6n) / 5n - balance;
54
- balancesMissing[wallet.address] = missingBalance;
55
- }
56
- });
57
- await Promise.all(balanceRequestPromises);
58
- const totalBalanceMissing = Object.values(balancesMissing).reduce((a, b) => a + b, 0n);
59
- if (utilityWalletBalance < (totalBalanceMissing * 11n) / 10n) {
60
- this.logger.info({ balancesMissing, totalBalanceMissing }, "balances missing");
61
- this.logger.error({
62
- minBalance,
63
- utilityWalletBalance,
64
- totalBalanceMissing,
65
- utilityAccount: this.utilityAccount.address
66
- }, "utility wallet has insufficient balance to refill wallets");
67
- throw new Error(`utility wallet ${this.utilityAccount.address} has insufficient balance ${formatEther(utilityWalletBalance)} < ${formatEther(totalBalanceMissing)}`);
68
- }
69
- if (Object.keys(balancesMissing).length > 0) {
70
- const { maxFeePerGas, maxPriorityFeePerGas } = await this.gasPriceManager.getGasPrice();
71
- if (walletClient.chain.id === 59140 ||
72
- walletClient.chain.id === 137 ||
73
- walletClient.chain.id === 10) {
74
- const instructions = [];
75
- for (const [address, missingBalance] of Object.entries(balancesMissing)) {
76
- instructions.push({
77
- to: address,
78
- value: missingBalance,
79
- data: "0x"
80
- });
81
- }
82
- let refillAddress;
83
- if (walletClient.chain.id === 59140) {
84
- refillAddress = "0xEad1aC3DF6F96b91491d6396F4d1610C5638B4Db";
85
- }
86
- else if (walletClient.chain.id === 137) {
87
- refillAddress = "0x3402DB43152dAB9ab72fa805fdD5f391cD3E3822";
88
- }
89
- else {
90
- refillAddress = "0x3402DB43152dAB9ab72fa805fdD5f391cD3E3822";
91
- }
92
- const callEngine = getContract({
93
- abi: CallEngineAbi,
94
- address: refillAddress,
95
- client: {
96
- public: publicClient,
97
- wallet: walletClient
98
- }
99
- });
100
- const tx = await callEngine.write.execute([instructions], {
101
- account: this.utilityAccount,
102
- value: totalBalanceMissing,
103
- maxFeePerGas: maxFeePerGas * 2n,
104
- maxPriorityFeePerGas: maxPriorityFeePerGas * 2n
105
- });
106
- await waitForTransactionReceipt(publicClient, tx);
107
- for (const [address, missingBalance] of Object.entries(balancesMissing)) {
108
- this.logger.info({ tx, executor: address, missingBalance }, "refilled wallet");
109
- }
110
- }
111
- else {
112
- for (const [address, missingBalance] of Object.entries(balancesMissing)) {
113
- const tx = await walletClient.sendTransaction({
114
- account: this.utilityAccount,
115
- // @ts-ignore
116
- to: address,
117
- value: missingBalance,
118
- maxFeePerGas: this.legacyTransactions
119
- ? undefined
120
- : maxFeePerGas,
121
- maxPriorityFeePerGas: this.legacyTransactions
122
- ? undefined
123
- : maxPriorityFeePerGas,
124
- gasPrice: this.legacyTransactions
125
- ? maxFeePerGas
126
- : undefined
127
- });
128
- await waitForTransactionReceipt(publicClient, tx);
129
- this.logger.info({ tx, executor: address, missingBalance }, "refilled wallet");
130
- }
131
- }
132
- }
133
- else {
134
- this.logger.info("no wallets need to be refilled");
135
- }
136
- }
137
- async getWallet() {
138
- this.logger.trace(`waiting for semaphore with count ${this.semaphore.getValue()}`);
139
- await this.semaphore.waitForUnlock();
140
- await this.semaphore.acquire();
141
- const wallet = this.availableWallets.shift();
142
- // should never happen because of semaphore
143
- if (!wallet) {
144
- this.semaphore.release();
145
- this.logger.error("no more wallets");
146
- throw new Error("no more wallets");
147
- }
148
- this.logger.trace({ executor: wallet.address }, "got wallet from sender manager");
149
- this.metrics.walletsAvailable.set(this.availableWallets.length);
150
- return wallet;
151
- }
152
- pushWallet(wallet) {
153
- this.availableWallets.push(wallet);
154
- this.semaphore.release();
155
- this.logger.trace({ executor: wallet.address }, "pushed wallet to sender manager");
156
- this.metrics.walletsAvailable.set(this.availableWallets.length);
157
- return;
158
- }
159
- }
160
- //# sourceMappingURL=senderManager.js.map