@pimlico/alto 0.0.0-main.20250916T162729 → 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.
- package/esm/cli/config/bundler.d.ts +12 -0
- package/esm/cli/config/bundler.js +2 -0
- package/esm/cli/config/bundler.js.map +1 -1
- package/esm/cli/config/options.js +11 -0
- package/esm/cli/config/options.js.map +1 -1
- package/esm/cli/setupServer.js +1 -1
- package/esm/cli/setupServer.js.map +1 -1
- package/esm/cli/shutDown.js +15 -55
- package/esm/cli/shutDown.js.map +1 -1
- package/esm/executor/bundleManager.d.ts +1 -1
- package/esm/executor/bundleManager.js +47 -34
- package/esm/executor/bundleManager.js.map +1 -1
- package/esm/executor/executorManager.js +3 -4
- package/esm/executor/executorManager.js.map +1 -1
- package/esm/executor/senderManager/createRedisSenderManager.js +1 -2
- package/esm/executor/senderManager/createRedisSenderManager.js.map +1 -1
- package/esm/handlers/arbitrumGasPriceManager.js +2 -2
- package/esm/handlers/gasPriceManager.js +3 -3
- package/esm/handlers/mantleGasPriceManager.js +4 -4
- package/esm/handlers/optimismManager.js +1 -1
- package/esm/mempool/mempool.d.ts +3 -11
- package/esm/mempool/mempool.js +91 -93
- package/esm/mempool/mempool.js.map +1 -1
- package/esm/mempool/monitoring.d.ts +1 -1
- package/esm/mempool/monitoring.js +30 -21
- package/esm/mempool/monitoring.js.map +1 -1
- package/esm/receiptCache/createMemoryReceiptCache.js +8 -5
- package/esm/receiptCache/createMemoryReceiptCache.js.map +1 -1
- package/esm/receiptCache/createRedisReceiptCache.js +13 -11
- package/esm/receiptCache/createRedisReceiptCache.js.map +1 -1
- package/esm/receiptCache/index.d.ts +4 -1
- package/esm/receiptCache/index.js.map +1 -1
- package/esm/rpc/methods/pimlico_sendUserOperationNow.js +4 -1
- package/esm/rpc/methods/pimlico_sendUserOperationNow.js.map +1 -1
- package/esm/store/createMempoolStore.d.ts +1 -1
- package/esm/store/createMempoolStore.js +51 -143
- package/esm/store/createMempoolStore.js.map +1 -1
- package/esm/store/index.d.ts +4 -75
- package/esm/store/index.js +4 -1
- package/esm/store/index.js.map +1 -1
- package/esm/store/outstanding/index.d.ts +13 -0
- package/esm/store/outstanding/index.js +16 -0
- package/esm/store/outstanding/index.js.map +1 -0
- package/esm/store/{createMemoryOutstandingStore.d.ts → outstanding/memory.d.ts} +11 -10
- package/esm/store/outstanding/memory.js +249 -0
- package/esm/store/outstanding/memory.js.map +1 -0
- package/esm/store/outstanding/redis.d.ts +11 -0
- package/esm/store/outstanding/redis.js +201 -0
- package/esm/store/outstanding/redis.js.map +1 -0
- package/esm/store/outstanding/types.d.ts +18 -0
- package/esm/store/outstanding/types.js +2 -0
- package/esm/store/outstanding/types.js.map +1 -0
- package/esm/store/processing/index.d.ts +11 -0
- package/esm/store/processing/index.js +17 -0
- package/esm/store/processing/index.js.map +1 -0
- package/esm/store/processing/memory.d.ts +14 -0
- package/esm/store/processing/memory.js +46 -0
- package/esm/store/processing/memory.js.map +1 -0
- package/esm/store/processing/redis.d.ts +21 -0
- package/esm/store/processing/redis.js +69 -0
- package/esm/store/processing/redis.js.map +1 -0
- package/esm/store/processing/types.d.ts +9 -0
- package/esm/store/processing/types.js +2 -0
- package/esm/store/processing/types.js.map +1 -0
- package/esm/store/types.d.ts +49 -0
- package/esm/store/types.js +2 -0
- package/esm/store/types.js.map +1 -0
- package/esm/utils/minMaxQueue/createRedisMinMaxQueue.d.ts +23 -2
- package/esm/utils/minMaxQueue/createRedisMinMaxQueue.js +83 -60
- package/esm/utils/minMaxQueue/createRedisMinMaxQueue.js.map +1 -1
- package/esm/utils/minMaxQueue/index.d.ts +2 -2
- package/esm/utils/minMaxQueue/index.js +2 -2
- package/esm/utils/minMaxQueue/index.js.map +1 -1
- package/esm/utils/userop.d.ts +1 -0
- package/esm/utils/userop.js +6 -0
- package/esm/utils/userop.js.map +1 -1
- package/package.json +1 -1
- package/esm/cli/config/redisKeys.d.ts +0 -9
- package/esm/cli/config/redisKeys.js +0 -16
- package/esm/cli/config/redisKeys.js.map +0 -1
- package/esm/store/createMemoryOutstandingStore.js +0 -240
- package/esm/store/createMemoryOutstandingStore.js.map +0 -1
- package/esm/store/createRedisOutstandingStore.d.ts +0 -28
- package/esm/store/createRedisOutstandingStore.js +0 -341
- package/esm/store/createRedisOutstandingStore.js.map +0 -1
- package/esm/store/createRedisStore.d.ts +0 -10
- package/esm/store/createRedisStore.js +0 -128
- package/esm/store/createRedisStore.js.map +0 -1
- package/esm/store/createStore.d.ts +0 -6
- package/esm/store/createStore.js +0 -66
- package/esm/store/createStore.js.map +0 -1
|
@@ -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
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import Redis from "ioredis";
|
|
2
|
-
import { toHex } from "viem";
|
|
3
|
-
import { userOperationSchema } from "../types/schemas.js";
|
|
4
|
-
import { isVersion06, isVersion07 } from "../utils/userop.js";
|
|
5
|
-
import { RedisHash } from "./createRedisOutstandingStore.js";
|
|
6
|
-
import { createMemoryStore } from "./createStore.js";
|
|
7
|
-
const isDeploymentOperation = (userOp) => {
|
|
8
|
-
const isV6Deployment = isVersion06(userOp) && !!userOp.initCode && userOp.initCode !== "0x";
|
|
9
|
-
const isV7Deployment = isVersion07(userOp) && !!userOp.factory && userOp.factory !== "0x";
|
|
10
|
-
return isV6Deployment || isV7Deployment;
|
|
11
|
-
};
|
|
12
|
-
const serializeUserOp = (userOpInfo) => {
|
|
13
|
-
return JSON.stringify(userOpInfo, (_, value) => typeof value === "bigint" ? toHex(value) : value);
|
|
14
|
-
};
|
|
15
|
-
const deserializeUserOp = (data) => {
|
|
16
|
-
try {
|
|
17
|
-
const parsed = JSON.parse(data);
|
|
18
|
-
const result = userOperationSchema.safeParse(parsed);
|
|
19
|
-
if (!result.success) {
|
|
20
|
-
throw new Error(`Failed to parse UserOpInfo: ${result.error.message}`);
|
|
21
|
-
}
|
|
22
|
-
return result.data;
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
if (error instanceof Error) {
|
|
26
|
-
throw new Error(`UserOpInfo deserialization failed: ${error.message}`);
|
|
27
|
-
}
|
|
28
|
-
throw new Error("UserOpInfo deserialization failed with unknown error");
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
export const createRedisStore = ({ config, storeType, entryPoint, redisEndpoint }) => {
|
|
32
|
-
const redis = new Redis(redisEndpoint, {});
|
|
33
|
-
const factoryLookupKey = `${config.chainId}:${storeType}:factory-lookup:${entryPoint}`;
|
|
34
|
-
const conflictingNonceKey = `${config.chainId}:${storeType}:conflicting-nonce:${entryPoint}`;
|
|
35
|
-
const userOpHashLookupKey = `${config.chainId}:${storeType}:user-op-hash-index:${entryPoint}`;
|
|
36
|
-
const senderNonceLookupKey = `${config.chainId}:${storeType}:sender-nonce-lookup:${entryPoint}`;
|
|
37
|
-
const conflictingNonce = new RedisHash(redis, conflictingNonceKey); // userOpHash -> userOp
|
|
38
|
-
const factoryLookup = new RedisHash(redis, factoryLookupKey); // sender -> userOpHash (if deployment is present)
|
|
39
|
-
const senderNonceLookup = new RedisHash(redis, senderNonceLookupKey); // sender + nonce -> userOp
|
|
40
|
-
const userOpHashLookup = new RedisHash(redis, userOpHashLookupKey); // userOpHash -> userOp
|
|
41
|
-
const memoryStore = createMemoryStore({ config });
|
|
42
|
-
const encodeSenderNonce = (userOp) => {
|
|
43
|
-
return `${userOp.sender}-${userOp.nonce}`;
|
|
44
|
-
};
|
|
45
|
-
return {
|
|
46
|
-
add: async (op) => {
|
|
47
|
-
// Local memory logic
|
|
48
|
-
memoryStore.add(op);
|
|
49
|
-
// Global redis logic
|
|
50
|
-
const { userOpHash, userOp } = op;
|
|
51
|
-
const multi = redis.multi();
|
|
52
|
-
await userOpHashLookup.set({
|
|
53
|
-
key: userOpHash,
|
|
54
|
-
value: serializeUserOp(userOp),
|
|
55
|
-
multi
|
|
56
|
-
});
|
|
57
|
-
await conflictingNonce.set({
|
|
58
|
-
key: userOpHash,
|
|
59
|
-
value: serializeUserOp(userOp),
|
|
60
|
-
multi
|
|
61
|
-
});
|
|
62
|
-
await senderNonceLookup.set({
|
|
63
|
-
key: encodeSenderNonce(userOp),
|
|
64
|
-
value: serializeUserOp(userOp),
|
|
65
|
-
multi
|
|
66
|
-
});
|
|
67
|
-
if (isDeploymentOperation(userOp)) {
|
|
68
|
-
await factoryLookup.set({
|
|
69
|
-
key: op.userOp.sender,
|
|
70
|
-
value: op.userOpHash,
|
|
71
|
-
multi
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
await multi.exec();
|
|
75
|
-
},
|
|
76
|
-
remove: async (userOpHash) => {
|
|
77
|
-
// Local memory logic
|
|
78
|
-
memoryStore.remove(userOpHash);
|
|
79
|
-
// Redis Logic
|
|
80
|
-
const exist = await userOpHashLookup.get(userOpHash);
|
|
81
|
-
if (!exist) {
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
const userOp = deserializeUserOp(exist);
|
|
85
|
-
const multi = redis.multi();
|
|
86
|
-
await userOpHashLookup.delete({ key: userOpHash, multi });
|
|
87
|
-
await senderNonceLookup.delete({
|
|
88
|
-
key: encodeSenderNonce(userOp),
|
|
89
|
-
multi
|
|
90
|
-
});
|
|
91
|
-
if (isDeploymentOperation(userOp)) {
|
|
92
|
-
await factoryLookup.delete({ key: userOp.sender, multi });
|
|
93
|
-
}
|
|
94
|
-
await multi.exec();
|
|
95
|
-
return true;
|
|
96
|
-
},
|
|
97
|
-
contains: async (userOpHash) => {
|
|
98
|
-
return await userOpHashLookup.exists(userOpHash);
|
|
99
|
-
},
|
|
100
|
-
dumpLocal: () => {
|
|
101
|
-
return memoryStore.dumpLocal();
|
|
102
|
-
},
|
|
103
|
-
findConflicting: async (userOp) => {
|
|
104
|
-
const conflictingNonce = await senderNonceLookup.get(encodeSenderNonce(userOp));
|
|
105
|
-
if (conflictingNonce) {
|
|
106
|
-
return {
|
|
107
|
-
reason: "conflicting_nonce",
|
|
108
|
-
userOp: deserializeUserOp(conflictingNonce)
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
if (isDeploymentOperation(userOp)) {
|
|
112
|
-
const userOpHash = await factoryLookup.get(userOp.sender);
|
|
113
|
-
if (userOpHash) {
|
|
114
|
-
const userOp = await userOpHashLookup.get(userOpHash);
|
|
115
|
-
if (!userOp) {
|
|
116
|
-
return undefined;
|
|
117
|
-
}
|
|
118
|
-
return {
|
|
119
|
-
reason: "conflicting_deployment",
|
|
120
|
-
userOp: deserializeUserOp(userOp)
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
return undefined;
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
};
|
|
128
|
-
//# sourceMappingURL=createRedisStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createRedisStore.js","sourceRoot":"","sources":["../../store/createRedisStore.ts"],"names":[],"mappings":"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"}
|
package/esm/store/createStore.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { isVersion06, isVersion07 } from "../utils/userop.js";
|
|
2
|
-
export const createMemoryStore = ({ config }) => {
|
|
3
|
-
let store = [];
|
|
4
|
-
return {
|
|
5
|
-
findConflicting: async (userOp) => {
|
|
6
|
-
const dump = [...store];
|
|
7
|
-
const { sender, nonce } = userOp;
|
|
8
|
-
// Check for same sender and nonce
|
|
9
|
-
const conflictingNonce = dump.find((userOpInfo) => {
|
|
10
|
-
const { userOp: mempoolUserOp } = userOpInfo;
|
|
11
|
-
return (mempoolUserOp.sender === sender &&
|
|
12
|
-
mempoolUserOp.nonce === nonce);
|
|
13
|
-
});
|
|
14
|
-
if (conflictingNonce) {
|
|
15
|
-
return {
|
|
16
|
-
reason: "conflicting_nonce",
|
|
17
|
-
userOp: conflictingNonce.userOp
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
// Check for deployment conflict
|
|
21
|
-
const isCurrentOpDeployment = (isVersion06(userOp) &&
|
|
22
|
-
userOp.initCode &&
|
|
23
|
-
userOp.initCode !== "0x") ||
|
|
24
|
-
(isVersion07(userOp) &&
|
|
25
|
-
userOp.factory &&
|
|
26
|
-
userOp.factory !== "0x");
|
|
27
|
-
if (isCurrentOpDeployment) {
|
|
28
|
-
const conflictingDeployment = dump.find((userOpInfo) => {
|
|
29
|
-
const { userOp: mempoolUserOp } = userOpInfo;
|
|
30
|
-
const isV6Deployment = isVersion06(mempoolUserOp) &&
|
|
31
|
-
mempoolUserOp.initCode &&
|
|
32
|
-
mempoolUserOp.initCode !== "0x";
|
|
33
|
-
const isV7Deployment = isVersion07(mempoolUserOp) &&
|
|
34
|
-
mempoolUserOp.factory &&
|
|
35
|
-
mempoolUserOp.factory !== "0x";
|
|
36
|
-
const isDeployment = isV6Deployment || isV7Deployment;
|
|
37
|
-
return mempoolUserOp.sender === sender && isDeployment;
|
|
38
|
-
});
|
|
39
|
-
if (conflictingDeployment) {
|
|
40
|
-
return {
|
|
41
|
-
reason: "conflicting_deployment",
|
|
42
|
-
userOp: conflictingDeployment.userOp
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return undefined;
|
|
47
|
-
},
|
|
48
|
-
add: (op) => {
|
|
49
|
-
store = [...store, op];
|
|
50
|
-
return Promise.resolve();
|
|
51
|
-
},
|
|
52
|
-
remove: (userOpHash) => {
|
|
53
|
-
const exists = store.some((op) => op.userOpHash === userOpHash);
|
|
54
|
-
store = store.filter((op) => op.userOpHash !== userOpHash);
|
|
55
|
-
return Promise.resolve(exists);
|
|
56
|
-
},
|
|
57
|
-
contains: (userOpHash) => {
|
|
58
|
-
const contains = store.some((op) => op.userOpHash === userOpHash);
|
|
59
|
-
return Promise.resolve(contains);
|
|
60
|
-
},
|
|
61
|
-
dumpLocal: () => {
|
|
62
|
-
return Promise.resolve([...store]);
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
//# sourceMappingURL=createStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createStore.js","sourceRoot":"","sources":["../../store/createStore.ts"],"names":[],"mappings":"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"}
|