@pimlico/alto 0.0.0-main.20250908T105720 → 0.0.0-main.20250930T125129

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 (99) hide show
  1. package/esm/cli/config/bundler.d.ts +12 -0
  2. package/esm/cli/config/bundler.js +2 -0
  3. package/esm/cli/config/bundler.js.map +1 -1
  4. package/esm/cli/config/options.js +11 -0
  5. package/esm/cli/config/options.js.map +1 -1
  6. package/esm/cli/setupServer.js +11 -11
  7. package/esm/cli/setupServer.js.map +1 -1
  8. package/esm/cli/shutDown.d.ts +5 -5
  9. package/esm/cli/shutDown.js +20 -60
  10. package/esm/cli/shutDown.js.map +1 -1
  11. package/esm/executor/{userOpMonitor.d.ts → bundleManager.d.ts} +4 -4
  12. package/esm/executor/{userOpMonitor.js → bundleManager.js} +50 -37
  13. package/esm/executor/bundleManager.js.map +1 -0
  14. package/esm/executor/executorManager.d.ts +4 -4
  15. package/esm/executor/executorManager.js +23 -24
  16. package/esm/executor/executorManager.js.map +1 -1
  17. package/esm/executor/index.d.ts +1 -1
  18. package/esm/executor/index.js +1 -1
  19. package/esm/executor/senderManager/createRedisSenderManager.js +1 -2
  20. package/esm/executor/senderManager/createRedisSenderManager.js.map +1 -1
  21. package/esm/handlers/arbitrumGasPriceManager.js +2 -2
  22. package/esm/handlers/gasPriceManager.js +3 -3
  23. package/esm/handlers/mantleGasPriceManager.js +4 -4
  24. package/esm/handlers/optimismManager.js +1 -1
  25. package/esm/mempool/mempool.d.ts +3 -11
  26. package/esm/mempool/mempool.js +91 -93
  27. package/esm/mempool/mempool.js.map +1 -1
  28. package/esm/mempool/monitoring.d.ts +1 -1
  29. package/esm/mempool/monitoring.js +30 -21
  30. package/esm/mempool/monitoring.js.map +1 -1
  31. package/esm/receiptCache/createMemoryReceiptCache.js +8 -5
  32. package/esm/receiptCache/createMemoryReceiptCache.js.map +1 -1
  33. package/esm/receiptCache/createRedisReceiptCache.js +13 -11
  34. package/esm/receiptCache/createRedisReceiptCache.js.map +1 -1
  35. package/esm/receiptCache/index.d.ts +4 -1
  36. package/esm/receiptCache/index.js.map +1 -1
  37. package/esm/rpc/methods/eth_getUserOperationReceipt.js +1 -1
  38. package/esm/rpc/methods/pimlico_sendUserOperationNow.js +4 -1
  39. package/esm/rpc/methods/pimlico_sendUserOperationNow.js.map +1 -1
  40. package/esm/rpc/rpcHandler.d.ts +4 -4
  41. package/esm/rpc/rpcHandler.js +3 -3
  42. package/esm/store/createMempoolStore.d.ts +1 -1
  43. package/esm/store/createMempoolStore.js +51 -143
  44. package/esm/store/createMempoolStore.js.map +1 -1
  45. package/esm/store/index.d.ts +4 -75
  46. package/esm/store/index.js +4 -1
  47. package/esm/store/index.js.map +1 -1
  48. package/esm/store/outstanding/index.d.ts +13 -0
  49. package/esm/store/outstanding/index.js +16 -0
  50. package/esm/store/outstanding/index.js.map +1 -0
  51. package/esm/store/{createMemoryOutstandingStore.d.ts → outstanding/memory.d.ts} +11 -10
  52. package/esm/store/outstanding/memory.js +249 -0
  53. package/esm/store/outstanding/memory.js.map +1 -0
  54. package/esm/store/outstanding/redis.d.ts +11 -0
  55. package/esm/store/outstanding/redis.js +201 -0
  56. package/esm/store/outstanding/redis.js.map +1 -0
  57. package/esm/store/outstanding/types.d.ts +18 -0
  58. package/esm/store/outstanding/types.js +2 -0
  59. package/esm/store/outstanding/types.js.map +1 -0
  60. package/esm/store/processing/index.d.ts +11 -0
  61. package/esm/store/processing/index.js +17 -0
  62. package/esm/store/processing/index.js.map +1 -0
  63. package/esm/store/processing/memory.d.ts +14 -0
  64. package/esm/store/processing/memory.js +46 -0
  65. package/esm/store/processing/memory.js.map +1 -0
  66. package/esm/store/processing/redis.d.ts +21 -0
  67. package/esm/store/processing/redis.js +69 -0
  68. package/esm/store/processing/redis.js.map +1 -0
  69. package/esm/store/processing/types.d.ts +9 -0
  70. package/esm/store/processing/types.js +2 -0
  71. package/esm/store/processing/types.js.map +1 -0
  72. package/esm/store/types.d.ts +49 -0
  73. package/esm/store/types.js +2 -0
  74. package/esm/store/types.js.map +1 -0
  75. package/esm/utils/minMaxQueue/createRedisMinMaxQueue.d.ts +23 -2
  76. package/esm/utils/minMaxQueue/createRedisMinMaxQueue.js +83 -60
  77. package/esm/utils/minMaxQueue/createRedisMinMaxQueue.js.map +1 -1
  78. package/esm/utils/minMaxQueue/index.d.ts +2 -2
  79. package/esm/utils/minMaxQueue/index.js +2 -2
  80. package/esm/utils/minMaxQueue/index.js.map +1 -1
  81. package/esm/utils/userop.d.ts +1 -0
  82. package/esm/utils/userop.js +6 -0
  83. package/esm/utils/userop.js.map +1 -1
  84. package/package.json +1 -1
  85. package/esm/cli/config/redisKeys.d.ts +0 -9
  86. package/esm/cli/config/redisKeys.js +0 -16
  87. package/esm/cli/config/redisKeys.js.map +0 -1
  88. package/esm/executor/userOpMonitor.js.map +0 -1
  89. package/esm/store/createMemoryOutstandingStore.js +0 -240
  90. package/esm/store/createMemoryOutstandingStore.js.map +0 -1
  91. package/esm/store/createRedisOutstandingStore.d.ts +0 -28
  92. package/esm/store/createRedisOutstandingStore.js +0 -341
  93. package/esm/store/createRedisOutstandingStore.js.map +0 -1
  94. package/esm/store/createRedisStore.d.ts +0 -10
  95. package/esm/store/createRedisStore.js +0 -128
  96. package/esm/store/createRedisStore.js.map +0 -1
  97. package/esm/store/createStore.d.ts +0 -6
  98. package/esm/store/createStore.js +0 -66
  99. package/esm/store/createStore.js.map +0 -1
@@ -1,240 +0,0 @@
1
- import { getNonceKeyAndSequence, isVersion06, isVersion07 } from "../utils/userop.js";
2
- const senderNonceSlot = (userOp) => {
3
- const sender = userOp.sender;
4
- const [nonceKey] = getNonceKeyAndSequence(userOp.nonce);
5
- return `${sender}-${nonceKey}`;
6
- };
7
- export class MemoryOutstanding {
8
- config;
9
- pendingOps = new Map();
10
- priorityQueue = [];
11
- logger;
12
- constructor(config) {
13
- this.config = config;
14
- this.logger = config.getLogger({ module: "memory-outstanding-queue" }, {
15
- level: config.logLevel
16
- });
17
- }
18
- dump() {
19
- return [...Array.from(this.pendingOps.values()).flat()];
20
- }
21
- // Adds userOp to queue and maintains sorting by gas price.
22
- addToPriorityQueue(userOpInfo) {
23
- this.priorityQueue.push(userOpInfo);
24
- this.priorityQueue.sort((a, b) => {
25
- const userOpA = a.userOp;
26
- const userOpB = b.userOp;
27
- return Number(userOpA.maxFeePerGas - userOpB.maxFeePerGas);
28
- });
29
- }
30
- validateQueuedLimit(userOp) {
31
- const outstandingOps = this.dump();
32
- const parallelUserOpsCount = outstandingOps.filter((userOpInfo) => {
33
- const { userOp: mempoolUserOp } = userOpInfo;
34
- return mempoolUserOp.sender === userOp.sender;
35
- }).length;
36
- if (parallelUserOpsCount > this.config.mempoolMaxParallelOps) {
37
- return false;
38
- }
39
- return true;
40
- }
41
- validateParallelLimit(userOp) {
42
- const outstandingOps = this.dump();
43
- const [nonceKey] = getNonceKeyAndSequence(userOp.nonce);
44
- const queuedUserOpsCount = outstandingOps.filter((userOpInfo) => {
45
- const { userOp: mempoolUserOp } = userOpInfo;
46
- const [opNonceKey] = getNonceKeyAndSequence(mempoolUserOp.nonce);
47
- return (mempoolUserOp.sender === userOp.sender &&
48
- opNonceKey === nonceKey);
49
- }).length;
50
- if (queuedUserOpsCount > this.config.mempoolMaxQueuedOps) {
51
- return false;
52
- }
53
- return true;
54
- }
55
- popConflicting(userOp) {
56
- const outstandingOps = this.dump();
57
- let conflictingReason;
58
- for (const userOpInfo of outstandingOps) {
59
- const { userOp: mempoolUserOp } = userOpInfo;
60
- const isSameSender = mempoolUserOp.sender === userOp.sender;
61
- if (isSameSender && mempoolUserOp.nonce === userOp.nonce) {
62
- this.remove(userOpInfo.userOpHash);
63
- conflictingReason = {
64
- reason: "conflicting_nonce",
65
- userOpInfo
66
- };
67
- break;
68
- }
69
- const isConflictingV6Deployment = isVersion06(userOp) &&
70
- isVersion06(mempoolUserOp) &&
71
- userOp.initCode &&
72
- userOp.initCode !== "0x" &&
73
- mempoolUserOp.initCode &&
74
- mempoolUserOp.initCode !== "0x" &&
75
- isSameSender;
76
- const isConflictingV7Deployment = isVersion07(userOp) &&
77
- isVersion07(mempoolUserOp) &&
78
- userOp.factory &&
79
- userOp.factory !== "0x" &&
80
- mempoolUserOp.factory &&
81
- mempoolUserOp.factory !== "0x" &&
82
- isSameSender;
83
- const isConflictingDeployment = isConflictingV6Deployment || isConflictingV7Deployment;
84
- if (isConflictingDeployment) {
85
- this.remove(userOpInfo.userOpHash);
86
- conflictingReason = {
87
- reason: "conflicting_deployment",
88
- userOpInfo
89
- };
90
- break;
91
- }
92
- }
93
- return Promise.resolve(conflictingReason);
94
- }
95
- async contains(userOpHash) {
96
- for (const userOpInfos of this.pendingOps.values()) {
97
- if (userOpInfos.some((info) => info.userOpHash === userOpHash)) {
98
- return true;
99
- }
100
- }
101
- return false;
102
- }
103
- peek() {
104
- if (this.priorityQueue.length === 0) {
105
- return Promise.resolve(undefined);
106
- }
107
- return Promise.resolve(this.priorityQueue[0]);
108
- }
109
- pop() {
110
- const userOpInfo = this.priorityQueue.shift();
111
- if (!userOpInfo) {
112
- return Promise.resolve(undefined);
113
- }
114
- const pendingOpsSlot = senderNonceSlot(userOpInfo.userOp);
115
- const backlogOps = this.pendingOps.get(pendingOpsSlot);
116
- // This should never throw.
117
- if (!backlogOps?.shift()) {
118
- throw new Error("FATAL: No pending userOps for sender");
119
- }
120
- // Move next pending userOp into priorityQueue if exist.
121
- if (backlogOps.length > 0) {
122
- this.addToPriorityQueue(backlogOps[0]);
123
- }
124
- // Cleanup.
125
- if (backlogOps.length === 0) {
126
- this.pendingOps.delete(pendingOpsSlot);
127
- }
128
- return Promise.resolve(userOpInfo);
129
- }
130
- async add(userOpInfo) {
131
- const { userOp, userOpHash } = userOpInfo;
132
- const [nonceKey] = getNonceKeyAndSequence(userOp.nonce);
133
- const pendingOpsSlot = senderNonceSlot(userOp);
134
- const backlogOps = (() => {
135
- if (this.pendingOps.has(pendingOpsSlot)) {
136
- return this.pendingOps.get(pendingOpsSlot);
137
- }
138
- this.pendingOps.set(pendingOpsSlot, []);
139
- return this.pendingOps.get(pendingOpsSlot);
140
- })();
141
- if (!backlogOps) {
142
- throw new Error("FATAL: No pending operations found for userOpHash");
143
- }
144
- // Note: the userOpInfo is always added to backlogOps, because we are pushing to a reference
145
- backlogOps.push(userOpInfo);
146
- backlogOps
147
- .map((sop) => sop.userOp)
148
- .sort((a, b) => {
149
- const [, aNonceSeq] = getNonceKeyAndSequence(a.nonce);
150
- const [, bNonceSeq] = getNonceKeyAndSequence(b.nonce);
151
- return Number(aNonceSeq) - Number(bNonceSeq);
152
- });
153
- const lowestUserOpHash = backlogOps[0].userOpHash;
154
- // If lowest, remove any existing userOp with same sender and nonceKey and add current userOp to priorityQueue.
155
- if (lowestUserOpHash === userOpHash) {
156
- this.priorityQueue = this.priorityQueue.filter((userOpInfo) => {
157
- const pendingUserOp = userOpInfo.userOp;
158
- const isSameSender = pendingUserOp.sender === userOp.sender;
159
- const isSameNonceKey = getNonceKeyAndSequence(pendingUserOp.nonce)[0] === nonceKey;
160
- return !(isSameSender && isSameNonceKey);
161
- });
162
- this.addToPriorityQueue(userOpInfo);
163
- }
164
- }
165
- async getQueuedUserOps(userOp) {
166
- const [nonceKey, nonceSequence] = getNonceKeyAndSequence(userOp.nonce);
167
- const outstandingOps = this.dump();
168
- const outstanding = outstandingOps.filter((userOpInfo) => {
169
- const { userOp: mempoolUserOp } = userOpInfo;
170
- const [mempoolNonceKey, mempoolNonceSequence] = getNonceKeyAndSequence(mempoolUserOp.nonce);
171
- let isPaymasterSame = false;
172
- if (isVersion07(userOp) && isVersion07(mempoolUserOp)) {
173
- isPaymasterSame =
174
- mempoolUserOp.paymaster === userOp.paymaster &&
175
- !(mempoolUserOp.sender === userOp.sender &&
176
- mempoolNonceKey === nonceKey &&
177
- mempoolNonceSequence === nonceSequence) &&
178
- userOp.paymaster !== null;
179
- }
180
- // Filter operations with the same sender and nonce key
181
- // but with a lower nonce sequence
182
- return ((mempoolUserOp.sender === userOp.sender &&
183
- mempoolNonceKey === nonceKey &&
184
- mempoolNonceSequence < nonceSequence) ||
185
- isPaymasterSame);
186
- });
187
- return outstanding
188
- .sort((a, b) => {
189
- const aUserOp = a.userOp;
190
- const bUserOp = b.userOp;
191
- const [, aNonceValue] = getNonceKeyAndSequence(aUserOp.nonce);
192
- const [, bNonceValue] = getNonceKeyAndSequence(bUserOp.nonce);
193
- return Number(aNonceValue - bNonceValue);
194
- })
195
- .map((userOpInfo) => userOpInfo.userOp);
196
- }
197
- async remove(userOpHash) {
198
- const priorityQueueIndex = this.priorityQueue.findIndex((info) => info.userOpHash === userOpHash);
199
- if (priorityQueueIndex === -1) {
200
- this.logger.info("tried to remove non-existent user op from mempool");
201
- return false;
202
- }
203
- const userOpInfo = this.priorityQueue[priorityQueueIndex];
204
- const pendingOpsSlot = senderNonceSlot(userOpInfo.userOp);
205
- // Remove from priority queue
206
- this.priorityQueue.splice(priorityQueueIndex, 1);
207
- // Find and remove from pending ops
208
- const backlogOps = this.pendingOps.get(pendingOpsSlot);
209
- if (!backlogOps) {
210
- throw new Error(`FATAL: No pending operations found for userOpHash ${userOpHash}`);
211
- }
212
- const backlogIndex = backlogOps.findIndex((info) => info.userOpHash === userOpHash);
213
- if (backlogIndex === -1) {
214
- throw new Error(`FATAL: UserOp with hash ${userOpHash} not found in backlog`);
215
- }
216
- backlogOps.splice(backlogIndex, 1);
217
- // If this was the first operation and there are more in the backlog,
218
- // add the new first operation to the priority queue
219
- if (backlogIndex === 0 && backlogOps.length > 0) {
220
- this.addToPriorityQueue(backlogOps[0]);
221
- }
222
- return true;
223
- }
224
- dumpLocal() {
225
- return Promise.resolve(this.dump());
226
- }
227
- clear() {
228
- this.priorityQueue = [];
229
- this.pendingOps.clear();
230
- return Promise.resolve();
231
- }
232
- // Adding findConflicting method to maintain compatibility with Store interface
233
- findConflicting(userOp) {
234
- return Promise.resolve(this.popConflicting(userOp));
235
- }
236
- }
237
- export const createMemoryOutstandingQueue = ({ config }) => {
238
- return new MemoryOutstanding(config);
239
- };
240
- //# sourceMappingURL=createMemoryOutstandingStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createMemoryOutstandingStore.js","sourceRoot":"","sources":["../../store/createMemoryOutstandingStore.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- import { type Address } from "../types/index.js";
2
- import { type ChainableCommander, Redis } from "ioredis";
3
- import type { OutstandingStore } from "./index.js";
4
- import type { AltoConfig } from "../createConfig.js";
5
- export declare class RedisHash {
6
- private redis;
7
- private keyName;
8
- constructor(redis: Redis, keyName: string);
9
- get keyPath(): string;
10
- set({ key, value, multi }: {
11
- key: string;
12
- value: string;
13
- multi?: ChainableCommander | Redis;
14
- }): Promise<void>;
15
- get(field: string): Promise<string | null>;
16
- delete({ key, multi }: {
17
- key: string;
18
- multi?: ChainableCommander | Redis;
19
- }): Promise<void>;
20
- exists(field: string): Promise<boolean>;
21
- getAll(): Promise<Record<string, string>>;
22
- }
23
- export declare const createRedisOutstandingQueue: ({ config, entryPoint, redisEndpoint }: {
24
- config: AltoConfig;
25
- entryPoint: Address;
26
- redisEndpoint: string;
27
- }) => OutstandingStore;
28
- //# sourceMappingURL=createRedisOutstandingStore.d.ts.map
@@ -1,341 +0,0 @@
1
- import { userOpInfoSchema } from "../types/index.js";
2
- import { Redis } from "ioredis";
3
- import { toHex } from "viem/utils";
4
- import { getNonceKeyAndSequence, isVersion06, isVersion07 } from "../utils/userop.js";
5
- const serializeUserOpInfo = (userOpInfo) => {
6
- return JSON.stringify(userOpInfo, (_, value) => typeof value === "bigint" ? toHex(value) : value);
7
- };
8
- const deserializeUserOpInfo = (data) => {
9
- try {
10
- const parsed = JSON.parse(data);
11
- const result = userOpInfoSchema.safeParse(parsed);
12
- if (!result.success) {
13
- throw new Error(`Failed to parse UserOpInfo: ${result.error.message}`);
14
- }
15
- return result.data;
16
- }
17
- catch (error) {
18
- if (error instanceof Error) {
19
- throw new Error(`UserOpInfo deserialization failed: ${error.message}`);
20
- }
21
- throw new Error("UserOpInfo deserialization failed with unknown error");
22
- }
23
- };
24
- const isDeployment = (userOp) => {
25
- const isV6Deployment = isVersion06(userOp) && !!userOp.initCode && userOp.initCode !== "0x";
26
- const isV7Deployment = isVersion07(userOp) && !!userOp.factory && userOp.factory !== "0x";
27
- return isV6Deployment || isV7Deployment;
28
- };
29
- class RedisSortedSet {
30
- redis;
31
- keyName;
32
- constructor(redis, keyName) {
33
- this.redis = redis;
34
- this.keyName = keyName;
35
- }
36
- get keyPath() {
37
- return this.keyName;
38
- }
39
- async add({ member, score, multi = this.redis }) {
40
- await multi.zadd(this.keyPath, score, member);
41
- }
42
- async remove({ member, multi = this.redis }) {
43
- await multi.zrem(this.keyPath, member);
44
- }
45
- getByScoreRange(min, max) {
46
- return Promise.resolve(this.redis.zrangebyscore(this.keyPath, min, max));
47
- }
48
- getByRankRange(start, stop) {
49
- return Promise.resolve(this.redis.zrange(this.keyPath, start, stop));
50
- }
51
- async popMax() {
52
- const result = (await this.redis.zmpop(1, [this.keyPath], "MAX", "COUNT", 1));
53
- return result && result[1].length > 0 ? result[1][0][0] : undefined;
54
- }
55
- async popMin() {
56
- const result = (await this.redis.zmpop(1, [this.keyPath], "MIN", "COUNT", 1));
57
- return result && result[1].length > 0 ? result[1][0][0] : undefined;
58
- }
59
- async delete({ multi = this.redis }) {
60
- await multi.del(this.keyPath);
61
- }
62
- }
63
- export class RedisHash {
64
- redis;
65
- keyName;
66
- constructor(redis, keyName) {
67
- this.redis = redis;
68
- this.keyName = keyName;
69
- }
70
- get keyPath() {
71
- return this.keyName;
72
- }
73
- async set({ key, value, multi = this.redis }) {
74
- await multi.hset(this.keyPath, key, value);
75
- }
76
- get(field) {
77
- return Promise.resolve(this.redis.hget(this.keyPath, field));
78
- }
79
- async delete({ key, multi = this.redis }) {
80
- await multi.hdel(this.keyPath, key);
81
- }
82
- async exists(field) {
83
- return (await this.redis.hexists(this.keyPath, field)) === 1;
84
- }
85
- getAll() {
86
- return Promise.resolve(this.redis.hgetall(this.keyPath));
87
- }
88
- }
89
- class RedisOutstandingQueue {
90
- redis;
91
- chainId;
92
- entryPoint;
93
- // Redis data structures
94
- readyOpsQueue; // gasPrice -> pendingOpsKey
95
- userOpHashLookup; // userOpHash -> pendingOpsKey
96
- factoryLookup; // sender -> userOpHash
97
- constructor({ config, entryPoint, redisEndpoint }) {
98
- this.redis = new Redis(redisEndpoint, {});
99
- this.chainId = config.chainId;
100
- this.entryPoint = entryPoint;
101
- // Initialize Redis data structures
102
- const factoryLookupKey = `${this.chainId}:outstanding:factory-lookup:${this.entryPoint}`;
103
- const userOpHashLookupKey = `${this.chainId}:outstanding:user-op-hash-index:${this.entryPoint}`;
104
- const readyOpsQueueKey = `${this.chainId}:outstanding:pending-queue:${this.entryPoint}`;
105
- this.readyOpsQueue = new RedisSortedSet(this.redis, readyOpsQueueKey);
106
- this.userOpHashLookup = new RedisHash(this.redis, userOpHashLookupKey);
107
- this.factoryLookup = new RedisHash(this.redis, factoryLookupKey);
108
- }
109
- // Helpers
110
- getPendingOpsSet(userOp) {
111
- return new RedisSortedSet(this.redis, this.getPendingOpsKey(userOp));
112
- }
113
- getPendingOpsKey(userOp) {
114
- const [nonceKey] = getNonceKeyAndSequence(userOp.nonce);
115
- const fingerprint = `${userOp.sender}-${toHex(nonceKey)}`;
116
- return `${this.chainId}:outstanding:pending-ops:${this.entryPoint}:${fingerprint}`;
117
- }
118
- // OutstandingStore methods
119
- contains(userOpHash) {
120
- return Promise.resolve(this.userOpHashLookup.exists(userOpHash));
121
- }
122
- async popConflicting(userOp) {
123
- const [, nonceSeq] = getNonceKeyAndSequence(userOp.nonce);
124
- const pendingOpsSet = this.getPendingOpsSet(userOp);
125
- // Check for operations with the same nonce sequence
126
- const conflictingNonce = await pendingOpsSet.getByScoreRange(Number(nonceSeq), Number(nonceSeq));
127
- if (conflictingNonce.length > 0) {
128
- const conflicting = deserializeUserOpInfo(conflictingNonce[0]);
129
- await this.remove(conflicting.userOpHash);
130
- return {
131
- reason: "conflicting_nonce",
132
- userOpInfo: conflicting
133
- };
134
- }
135
- // Check for conflicting deployments to the same address
136
- if (isDeployment(userOp)) {
137
- const conflictingUserOpHash = await this.factoryLookup.get(userOp.sender);
138
- if (conflictingUserOpHash) {
139
- const pendingOpsKey = await this.userOpHashLookup.get(conflictingUserOpHash);
140
- if (pendingOpsKey) {
141
- const conflictingPendingOpsSet = new RedisSortedSet(this.redis, pendingOpsKey);
142
- const ops = await conflictingPendingOpsSet.getByRankRange(0, -1);
143
- const userOps = ops.map(deserializeUserOpInfo);
144
- const conflictingUserOp = userOps.find((op) => op.userOpHash === conflictingUserOpHash);
145
- if (conflictingUserOp) {
146
- await this.remove(conflictingUserOp.userOpHash);
147
- return {
148
- reason: "conflicting_deployment",
149
- userOpInfo: conflictingUserOp
150
- };
151
- }
152
- }
153
- }
154
- }
155
- return undefined;
156
- }
157
- async peek() {
158
- // Get highest gas price operation's key
159
- const pendingOpsKeys = await this.readyOpsQueue.getByRankRange(0, 0);
160
- if (pendingOpsKeys.length === 0) {
161
- return undefined;
162
- }
163
- // Get the lowest nonce operation from the pendingOpsKey
164
- const pendingOpsSet = new RedisSortedSet(this.redis, pendingOpsKeys[0]);
165
- const userOpInfoStrings = await pendingOpsSet.getByRankRange(0, 0);
166
- if (userOpInfoStrings.length === 0) {
167
- return undefined;
168
- }
169
- return deserializeUserOpInfo(userOpInfoStrings[0]);
170
- }
171
- async add(userOpInfo) {
172
- const { userOpHash, userOp } = userOpInfo;
173
- const pendingOpsSet = this.getPendingOpsSet(userOp);
174
- const [, nonceSeq] = getNonceKeyAndSequence(userOp.nonce);
175
- // check if this will be the lowest nonce operation
176
- // We need this info before starting the transaction
177
- const existingOps = await pendingOpsSet.getByRankRange(0, 0);
178
- const isLowestNonce = existingOps.length === 0 ||
179
- userOp.nonce < deserializeUserOpInfo(existingOps[0]).userOp.nonce;
180
- const multi = this.redis.multi();
181
- // Add to pendingOps sorted set with nonceSeq as score
182
- await pendingOpsSet.add({
183
- member: serializeUserOpInfo(userOpInfo),
184
- score: Number(nonceSeq),
185
- multi
186
- });
187
- // Add to userOpHash lookup
188
- await this.userOpHashLookup.set({
189
- key: userOpHash,
190
- value: pendingOpsSet.keyPath,
191
- multi
192
- });
193
- // Track factory deployments if needed
194
- if (isDeployment(userOp)) {
195
- await this.factoryLookup.set({
196
- key: userOp.sender,
197
- value: userOpHash,
198
- multi
199
- });
200
- }
201
- // If lowest nonce, update ready queue with this userOp's gasPrice
202
- if (isLowestNonce) {
203
- await this.readyOpsQueue.add({
204
- member: pendingOpsSet.keyPath,
205
- score: Number(userOp.maxFeePerGas),
206
- multi
207
- });
208
- }
209
- await multi.exec();
210
- }
211
- async remove(userOpHash) {
212
- // Get the userOp info from the secondary index
213
- const pendingOpsKey = await this.userOpHashLookup.get(userOpHash);
214
- if (!pendingOpsKey) {
215
- return false;
216
- }
217
- // Get all pending operations for this key
218
- const pendingOpsSet = new RedisSortedSet(this.redis, pendingOpsKey);
219
- const ops = await pendingOpsSet.getByRankRange(0, -1);
220
- if (ops.length === 0) {
221
- return false;
222
- }
223
- const userOps = ops.map(deserializeUserOpInfo);
224
- const userOpInfo = userOps.find((op) => op.userOpHash === userOpHash);
225
- if (!userOpInfo) {
226
- return false;
227
- }
228
- // Check if we're removing the lowest nonce operation
229
- const isLowestNonce = userOps[0].userOpHash === userOpHash;
230
- // If this is the lowest nonce, check if there's a next operation before starting the transaction
231
- let nextOp;
232
- if (isLowestNonce && userOps.length > 1) {
233
- // userOps is already sorted by nonce sequence because it comes from the sorted set
234
- // So we can simply take the second operation as the next one
235
- nextOp = userOps[1];
236
- }
237
- // Create a transaction
238
- const multi = this.redis.multi();
239
- // Clean up factory deployment tracking if needed
240
- if (isDeployment(userOpInfo.userOp)) {
241
- await this.factoryLookup.delete({
242
- key: userOpInfo.userOp.sender,
243
- multi
244
- });
245
- }
246
- // Remove from the sorted set
247
- await pendingOpsSet.remove({
248
- member: serializeUserOpInfo(userOpInfo),
249
- multi
250
- });
251
- // Remove from hash lookup
252
- await this.userOpHashLookup.delete({
253
- key: userOpHash,
254
- multi
255
- });
256
- if (isLowestNonce) {
257
- // Remove from ready queue
258
- await this.readyOpsQueue.remove({ member: pendingOpsKey, multi });
259
- // If we have a next operation, add it to the ready queue
260
- if (nextOp) {
261
- await this.readyOpsQueue.add({
262
- member: pendingOpsKey,
263
- score: Number(nextOp.userOp.maxFeePerGas),
264
- multi
265
- });
266
- }
267
- }
268
- // Execute transaction
269
- await multi.exec();
270
- return true;
271
- }
272
- async pop() {
273
- // Pop highest gas price operation
274
- const pendingOpsKey = await this.readyOpsQueue.popMax();
275
- if (!pendingOpsKey) {
276
- return undefined;
277
- }
278
- const pendingOpsSet = new RedisSortedSet(this.redis, pendingOpsKey);
279
- // Get the operations from the set (limited to 2 for efficiency)
280
- const ops = await pendingOpsSet.getByRankRange(0, 1);
281
- if (ops.length === 0) {
282
- return undefined;
283
- }
284
- const currentUserOpStr = ops[0];
285
- const currentUserOp = deserializeUserOpInfo(currentUserOpStr);
286
- // Create a transaction
287
- const multi = this.redis.multi();
288
- // Remove the current operation
289
- await pendingOpsSet.remove({ member: currentUserOpStr, multi });
290
- await this.userOpHashLookup.delete({
291
- key: currentUserOp.userOpHash,
292
- multi
293
- });
294
- // Execute transaction
295
- await multi.exec();
296
- // Check if there are more operations in this set
297
- if (ops.length > 1) {
298
- const nextUserOp = deserializeUserOpInfo(ops[1]);
299
- await this.readyOpsQueue.add({
300
- member: pendingOpsKey,
301
- score: Number(nextUserOp.userOp.maxFeePerGas)
302
- });
303
- }
304
- else {
305
- // Delete the empty set
306
- await pendingOpsSet.delete({});
307
- }
308
- return currentUserOp;
309
- }
310
- async getQueuedUserOps(userOp) {
311
- const pendingOpsSet = this.getPendingOpsSet(userOp);
312
- const [, nonceSequence] = getNonceKeyAndSequence(userOp.nonce);
313
- const pendingOps = await pendingOpsSet.getByRankRange(0, -1);
314
- // Filter operations with nonce sequence less than the current one
315
- return pendingOps
316
- .map(deserializeUserOpInfo)
317
- .filter((opInfo) => {
318
- const [, opNonceSeq] = getNonceKeyAndSequence(opInfo.userOp.nonce);
319
- return opNonceSeq < nonceSequence;
320
- })
321
- .map((opInfo) => opInfo.userOp);
322
- }
323
- // These methods aren't implemented
324
- dumpLocal() {
325
- return Promise.resolve([]); // We can't dump from redis as the latency is too high
326
- }
327
- clear() {
328
- throw new Error("Not implemented: clear");
329
- }
330
- // Skip limit checks when using Redis
331
- validateQueuedLimit() {
332
- return true;
333
- }
334
- validateParallelLimit() {
335
- return true;
336
- }
337
- }
338
- export const createRedisOutstandingQueue = ({ config, entryPoint, redisEndpoint }) => {
339
- return new RedisOutstandingQueue({ config, entryPoint, redisEndpoint });
340
- };
341
- //# sourceMappingURL=createRedisOutstandingStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createRedisOutstandingStore.js","sourceRoot":"","sources":["../../store/createRedisOutstandingStore.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { type Address } from "viem";
2
- import type { Store } from "./index.js";
3
- import type { AltoConfig } from "../createConfig.js";
4
- export declare const createRedisStore: ({ config, storeType, entryPoint, redisEndpoint }: {
5
- config: AltoConfig;
6
- storeType: string;
7
- entryPoint: Address;
8
- redisEndpoint: string;
9
- }) => Store;
10
- //# sourceMappingURL=createRedisStore.d.ts.map