@latticexyz/common 2.2.21-f4db683f90214b03bb8d68635a3825cc9bf58263 → 2.2.22-01a4d064e5fd8e579d54bb3aa8997f225c6960d3
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/dist/chains.d.ts +294 -1
- package/dist/chains.js +41 -0
- package/dist/chains.js.map +1 -1
- package/dist/{chunk-NFWCLD5I.js → chunk-ETXWXV5T.js} +14 -1
- package/dist/chunk-ETXWXV5T.js.map +1 -0
- package/dist/codegen.d.ts +12 -9
- package/dist/codegen.js +84 -46
- package/dist/codegen.js.map +1 -1
- package/dist/internal.d.ts +8 -1
- package/dist/internal.js +429 -2
- package/dist/internal.js.map +1 -1
- package/dist/utils.js +2 -4
- package/package.json +2 -2
- package/dist/chunk-CHXZROA7.js +0 -16
- package/dist/chunk-CHXZROA7.js.map +0 -1
- package/dist/chunk-NFWCLD5I.js.map +0 -1
package/dist/internal.js
CHANGED
|
@@ -5,8 +5,9 @@ import {
|
|
|
5
5
|
debug
|
|
6
6
|
} from "./chunk-73UWXFXB.js";
|
|
7
7
|
import {
|
|
8
|
+
bigIntMax,
|
|
8
9
|
uniqueBy
|
|
9
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-ETXWXV5T.js";
|
|
10
11
|
|
|
11
12
|
// src/waitForTransactions.ts
|
|
12
13
|
import { waitForTransactionReceipt } from "viem/actions";
|
|
@@ -59,6 +60,9 @@ async function ensureContract({
|
|
|
59
60
|
return [];
|
|
60
61
|
}
|
|
61
62
|
if (deployedBytecodeSize != null) {
|
|
63
|
+
if (deployedBytecodeSize === 0) {
|
|
64
|
+
throw new Error(`Empty bytecode for ${debugLabel}`);
|
|
65
|
+
}
|
|
62
66
|
if (deployedBytecodeSize > contractSizeLimit) {
|
|
63
67
|
console.warn(
|
|
64
68
|
`
|
|
@@ -198,12 +202,435 @@ function getContractAddress({
|
|
|
198
202
|
}) {
|
|
199
203
|
return getCreate2Address2({ from: deployerAddress, bytecode, salt });
|
|
200
204
|
}
|
|
205
|
+
|
|
206
|
+
// src/transports/methods/estimateUserOperationGas.ts
|
|
207
|
+
import {
|
|
208
|
+
decodeFunctionResult,
|
|
209
|
+
encodeFunctionData,
|
|
210
|
+
zeroAddress
|
|
211
|
+
} from "viem";
|
|
212
|
+
import {
|
|
213
|
+
entryPoint07Address,
|
|
214
|
+
formatUserOperation,
|
|
215
|
+
formatUserOperationRequest,
|
|
216
|
+
toPackedUserOperation
|
|
217
|
+
} from "viem/account-abstraction";
|
|
218
|
+
|
|
219
|
+
// src/transports/entryPointSimulationsAbi.ts
|
|
220
|
+
var entryPointSimulationsAbi = [
|
|
221
|
+
{
|
|
222
|
+
inputs: [
|
|
223
|
+
{
|
|
224
|
+
components: [
|
|
225
|
+
{
|
|
226
|
+
internalType: "address",
|
|
227
|
+
name: "sender",
|
|
228
|
+
type: "address"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
internalType: "uint256",
|
|
232
|
+
name: "nonce",
|
|
233
|
+
type: "uint256"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
internalType: "bytes",
|
|
237
|
+
name: "initCode",
|
|
238
|
+
type: "bytes"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
internalType: "bytes",
|
|
242
|
+
name: "callData",
|
|
243
|
+
type: "bytes"
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
internalType: "bytes32",
|
|
247
|
+
name: "accountGasLimits",
|
|
248
|
+
type: "bytes32"
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
internalType: "uint256",
|
|
252
|
+
name: "preVerificationGas",
|
|
253
|
+
type: "uint256"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
internalType: "bytes32",
|
|
257
|
+
name: "gasFees",
|
|
258
|
+
type: "bytes32"
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
internalType: "bytes",
|
|
262
|
+
name: "paymasterAndData",
|
|
263
|
+
type: "bytes"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
internalType: "bytes",
|
|
267
|
+
name: "signature",
|
|
268
|
+
type: "bytes"
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
internalType: "struct PackedUserOperation",
|
|
272
|
+
name: "op",
|
|
273
|
+
type: "tuple"
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
internalType: "address",
|
|
277
|
+
name: "target",
|
|
278
|
+
type: "address"
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
internalType: "bytes",
|
|
282
|
+
name: "targetCallData",
|
|
283
|
+
type: "bytes"
|
|
284
|
+
}
|
|
285
|
+
],
|
|
286
|
+
name: "simulateHandleOp",
|
|
287
|
+
outputs: [
|
|
288
|
+
{
|
|
289
|
+
components: [
|
|
290
|
+
{
|
|
291
|
+
internalType: "uint256",
|
|
292
|
+
name: "preOpGas",
|
|
293
|
+
type: "uint256"
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
internalType: "uint256",
|
|
297
|
+
name: "paid",
|
|
298
|
+
type: "uint256"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
internalType: "uint256",
|
|
302
|
+
name: "accountValidationData",
|
|
303
|
+
type: "uint256"
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
internalType: "uint256",
|
|
307
|
+
name: "paymasterValidationData",
|
|
308
|
+
type: "uint256"
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
internalType: "bool",
|
|
312
|
+
name: "targetSuccess",
|
|
313
|
+
type: "bool"
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
internalType: "bytes",
|
|
317
|
+
name: "targetResult",
|
|
318
|
+
type: "bytes"
|
|
319
|
+
}
|
|
320
|
+
],
|
|
321
|
+
internalType: "struct IEntryPointSimulations.ExecutionResult",
|
|
322
|
+
name: "",
|
|
323
|
+
type: "tuple"
|
|
324
|
+
}
|
|
325
|
+
],
|
|
326
|
+
stateMutability: "nonpayable",
|
|
327
|
+
type: "function"
|
|
328
|
+
}
|
|
329
|
+
];
|
|
330
|
+
|
|
331
|
+
// src/transports/methods/estimateUserOperationGas.ts
|
|
332
|
+
async function estimateUserOperationGas({
|
|
333
|
+
request,
|
|
334
|
+
params
|
|
335
|
+
}) {
|
|
336
|
+
const userOp = formatUserOperation(params[0]);
|
|
337
|
+
const hasPaymaster = userOp.paymaster != null && userOp.paymaster !== zeroAddress;
|
|
338
|
+
const [simulationResult, simulationResultWithPaymaster] = await Promise.all([
|
|
339
|
+
simulateHandleOp({ userOp, removePaymaster: hasPaymaster, request }),
|
|
340
|
+
hasPaymaster ? simulateHandleOp({ userOp, request }) : void 0
|
|
341
|
+
]);
|
|
342
|
+
const gasEstimates = getGasEstimates({ userOp, simulationResult, simulationResultWithPaymaster });
|
|
343
|
+
return formatUserOperationRequest({
|
|
344
|
+
...gasEstimates
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
async function simulateHandleOp({
|
|
348
|
+
userOp,
|
|
349
|
+
removePaymaster,
|
|
350
|
+
request
|
|
351
|
+
}) {
|
|
352
|
+
if (removePaymaster) {
|
|
353
|
+
const {
|
|
354
|
+
/* eslint-disable */
|
|
355
|
+
paymaster,
|
|
356
|
+
paymasterData,
|
|
357
|
+
paymasterPostOpGasLimit,
|
|
358
|
+
paymasterVerificationGasLimit,
|
|
359
|
+
/* eslint-enable */
|
|
360
|
+
...userOpWithoutPaymaster
|
|
361
|
+
} = userOp;
|
|
362
|
+
userOp = userOpWithoutPaymaster;
|
|
363
|
+
}
|
|
364
|
+
const paymasterGasLimits = userOp.paymaster && !removePaymaster ? {
|
|
365
|
+
paymasterPostOpGasLimit: 2000000n,
|
|
366
|
+
paymasterVerificationGasLimit: 5000000n
|
|
367
|
+
} : {};
|
|
368
|
+
const simulationUserOp = {
|
|
369
|
+
...userOp,
|
|
370
|
+
preVerificationGas: 0n,
|
|
371
|
+
callGasLimit: 10000000n,
|
|
372
|
+
verificationGasLimit: 10000000n,
|
|
373
|
+
// https://github.com/pimlicolabs/alto/blob/471998695e5ec75ef88dda3f8a534f47c24bcd1a/src/rpc/methods/eth_estimateUserOperationGas.ts#L117
|
|
374
|
+
maxPriorityFeePerGas: userOp.maxFeePerGas,
|
|
375
|
+
...paymasterGasLimits
|
|
376
|
+
};
|
|
377
|
+
const packedUserOp = toPackedUserOperation(simulationUserOp);
|
|
378
|
+
const simulationData = encodeFunctionData({
|
|
379
|
+
abi: entryPointSimulationsAbi,
|
|
380
|
+
functionName: "simulateHandleOp",
|
|
381
|
+
args: [packedUserOp, zeroAddress, "0x"]
|
|
382
|
+
});
|
|
383
|
+
const senderBalanceOverride = removePaymaster ? { [userOp.sender]: { balance: "0xFFFFFFFFFFFFFFFFFFFF" } } : {};
|
|
384
|
+
const simulationParams = [
|
|
385
|
+
{
|
|
386
|
+
to: entryPoint07Address,
|
|
387
|
+
data: simulationData
|
|
388
|
+
},
|
|
389
|
+
"pending",
|
|
390
|
+
{
|
|
391
|
+
...senderBalanceOverride
|
|
392
|
+
}
|
|
393
|
+
];
|
|
394
|
+
const encodedSimulationResult = await request({
|
|
395
|
+
method: "wiresaw_callEntryPointSimulations",
|
|
396
|
+
params: simulationParams
|
|
397
|
+
});
|
|
398
|
+
return decodeFunctionResult({
|
|
399
|
+
abi: entryPointSimulationsAbi,
|
|
400
|
+
functionName: "simulateHandleOp",
|
|
401
|
+
data: encodedSimulationResult
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
function getGasEstimates({
|
|
405
|
+
userOp,
|
|
406
|
+
simulationResult,
|
|
407
|
+
simulationResultWithPaymaster
|
|
408
|
+
}) {
|
|
409
|
+
const hasPaymaster = simulationResultWithPaymaster != null;
|
|
410
|
+
const verificationGas = hasPaymaster ? simulationResultWithPaymaster.preOpGas : simulationResult.preOpGas;
|
|
411
|
+
const paymasterVerificationGas = hasPaymaster ? simulationResultWithPaymaster.preOpGas - simulationResult.preOpGas : 0n;
|
|
412
|
+
const callGas = simulationResult.paid / userOp.maxFeePerGas - simulationResult.preOpGas;
|
|
413
|
+
const paymasterPostOpGas = hasPaymaster ? simulationResultWithPaymaster.paid / userOp.maxFeePerGas - simulationResultWithPaymaster.preOpGas - callGas : 0n;
|
|
414
|
+
const verificationGasLimit = verificationGas * 2n;
|
|
415
|
+
const callGasLimit = bigIntMax(callGas * 2n, 9000n);
|
|
416
|
+
const paymasterVerificationGasLimit = paymasterVerificationGas * 2n;
|
|
417
|
+
const paymasterPostOpGasLimit = paymasterPostOpGas * 2n;
|
|
418
|
+
return {
|
|
419
|
+
verificationGasLimit,
|
|
420
|
+
callGasLimit,
|
|
421
|
+
paymasterVerificationGasLimit,
|
|
422
|
+
paymasterPostOpGasLimit,
|
|
423
|
+
preVerificationGas: 20000n
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// src/transports/methods/getUserOperationReceipt.ts
|
|
428
|
+
import {
|
|
429
|
+
decodeEventLog,
|
|
430
|
+
encodeEventTopics,
|
|
431
|
+
numberToHex,
|
|
432
|
+
parseEventLogs,
|
|
433
|
+
zeroAddress as zeroAddress2
|
|
434
|
+
} from "viem";
|
|
435
|
+
import { entryPoint07Abi } from "viem/account-abstraction";
|
|
436
|
+
var userOperationRevertReasonAbi = [
|
|
437
|
+
entryPoint07Abi.find(
|
|
438
|
+
(item) => item.type === "event" && item.name === "UserOperationRevertReason"
|
|
439
|
+
)
|
|
440
|
+
];
|
|
441
|
+
var userOperationEventTopic = encodeEventTopics({
|
|
442
|
+
abi: entryPoint07Abi,
|
|
443
|
+
eventName: "UserOperationEvent"
|
|
444
|
+
});
|
|
445
|
+
function getUserOperationReceipt(userOpHash, receipt) {
|
|
446
|
+
const userOperationRevertReasonTopicEvent = encodeEventTopics({
|
|
447
|
+
abi: userOperationRevertReasonAbi
|
|
448
|
+
})[0];
|
|
449
|
+
let entryPoint = zeroAddress2;
|
|
450
|
+
let revertReason = void 0;
|
|
451
|
+
let startIndex = -1;
|
|
452
|
+
let endIndex = -1;
|
|
453
|
+
receipt.logs.forEach((log, index) => {
|
|
454
|
+
if (log?.topics[0] === userOperationEventTopic[0]) {
|
|
455
|
+
if (log.topics[1] === userOpHash) {
|
|
456
|
+
endIndex = index;
|
|
457
|
+
entryPoint = log.address;
|
|
458
|
+
} else if (endIndex === -1) {
|
|
459
|
+
startIndex = index;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
if (log?.topics[0] === userOperationRevertReasonTopicEvent) {
|
|
463
|
+
if (log.topics[1] === userOpHash) {
|
|
464
|
+
const decodedLog = decodeEventLog({
|
|
465
|
+
abi: userOperationRevertReasonAbi,
|
|
466
|
+
data: log.data,
|
|
467
|
+
topics: log.topics
|
|
468
|
+
});
|
|
469
|
+
revertReason = decodedLog.args.revertReason;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
if (endIndex === -1) {
|
|
474
|
+
throw new Error("fatal: no UserOperationEvent in logs");
|
|
475
|
+
}
|
|
476
|
+
const logs = receipt.logs.slice(startIndex + 1, endIndex);
|
|
477
|
+
const userOperationEvent = parseEventLogs({
|
|
478
|
+
abi: entryPoint07Abi,
|
|
479
|
+
eventName: "UserOperationEvent",
|
|
480
|
+
args: {
|
|
481
|
+
userOpHash
|
|
482
|
+
},
|
|
483
|
+
logs: receipt.logs
|
|
484
|
+
})[0];
|
|
485
|
+
let paymaster = userOperationEvent.args.paymaster;
|
|
486
|
+
paymaster = paymaster === zeroAddress2 ? void 0 : paymaster;
|
|
487
|
+
return {
|
|
488
|
+
userOpHash,
|
|
489
|
+
entryPoint,
|
|
490
|
+
sender: userOperationEvent.args.sender,
|
|
491
|
+
nonce: numberToHex(userOperationEvent.args.nonce),
|
|
492
|
+
paymaster,
|
|
493
|
+
actualGasUsed: numberToHex(userOperationEvent.args.actualGasUsed),
|
|
494
|
+
actualGasCost: numberToHex(userOperationEvent.args.actualGasCost),
|
|
495
|
+
success: userOperationEvent.args.success,
|
|
496
|
+
reason: revertReason,
|
|
497
|
+
logs,
|
|
498
|
+
receipt
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
// src/transports/wiresaw.ts
|
|
503
|
+
function wiresaw(transport) {
|
|
504
|
+
return (opts) => {
|
|
505
|
+
const { request: originalRequest, ...rest } = transport.wiresaw(opts);
|
|
506
|
+
let chainId = null;
|
|
507
|
+
const transactionHashes = {};
|
|
508
|
+
const transactionReceipts = {};
|
|
509
|
+
return {
|
|
510
|
+
...rest,
|
|
511
|
+
// TODO: type `request` so we don't have to cast
|
|
512
|
+
async request(req) {
|
|
513
|
+
try {
|
|
514
|
+
if (req.method === "eth_chainId") {
|
|
515
|
+
if (chainId != null) return chainId;
|
|
516
|
+
if (transport.fallbackEth) {
|
|
517
|
+
const { request: fallbackRequest } = transport.fallbackEth(opts);
|
|
518
|
+
return chainId = await fallbackRequest(req);
|
|
519
|
+
}
|
|
520
|
+
return chainId = await originalRequest(req);
|
|
521
|
+
}
|
|
522
|
+
if (req.method === "eth_estimateGas") {
|
|
523
|
+
return await originalRequest({ ...req, method: "wiresaw_estimateGas" });
|
|
524
|
+
}
|
|
525
|
+
if (req.method === "eth_call") {
|
|
526
|
+
return await originalRequest({ ...req, method: "wiresaw_call" });
|
|
527
|
+
}
|
|
528
|
+
if (req.method === "eth_getTransactionCount") {
|
|
529
|
+
return await originalRequest({ ...req, method: "wiresaw_getTransactionCount" });
|
|
530
|
+
}
|
|
531
|
+
if (req.method === "eth_getTransactionReceipt") {
|
|
532
|
+
return await getTransactionReceipt(req.params[0]);
|
|
533
|
+
}
|
|
534
|
+
if (req.method === "eth_sendUserOperation") {
|
|
535
|
+
const { userOpHash, txHash } = await originalRequest({
|
|
536
|
+
...req,
|
|
537
|
+
method: "wiresaw_sendUserOperation"
|
|
538
|
+
});
|
|
539
|
+
transactionHashes[userOpHash] = txHash;
|
|
540
|
+
return userOpHash;
|
|
541
|
+
}
|
|
542
|
+
if (req.method === "eth_getUserOperationReceipt") {
|
|
543
|
+
const userOpHash = req.params[0];
|
|
544
|
+
const knownTransactionHash = transactionHashes[userOpHash];
|
|
545
|
+
if (knownTransactionHash) {
|
|
546
|
+
const transactionReceipt = await getTransactionReceipt(knownTransactionHash);
|
|
547
|
+
if (transactionReceipt) {
|
|
548
|
+
return getUserOperationReceipt(userOpHash, transactionReceipt);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
if (transport.fallbackBundler) {
|
|
552
|
+
const { request: fallbackRequest } = transport.fallbackBundler(opts);
|
|
553
|
+
return await fallbackRequest(req);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
if (req.method === "eth_estimateUserOperationGas") {
|
|
557
|
+
try {
|
|
558
|
+
return await estimateUserOperationGas({
|
|
559
|
+
request: originalRequest,
|
|
560
|
+
params: req.params
|
|
561
|
+
});
|
|
562
|
+
} catch (e) {
|
|
563
|
+
console.warn("[wiresaw] estimating user operation gas failed, falling back to bundler", e);
|
|
564
|
+
}
|
|
565
|
+
if (transport.fallbackBundler) {
|
|
566
|
+
const { request: fallbackRequest } = transport.fallbackBundler(opts);
|
|
567
|
+
return await fallbackRequest(req);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
if (req.method === "eth_blockNumber" || req.method === "eth_getBlockByNumber" || req.method === "eth_maxPriorityFeePerGas") {
|
|
571
|
+
if (transport.fallbackEth) {
|
|
572
|
+
const { request: fallbackRequest } = transport.fallbackEth(opts);
|
|
573
|
+
return await fallbackRequest(req);
|
|
574
|
+
}
|
|
575
|
+
return await originalRequest(req);
|
|
576
|
+
}
|
|
577
|
+
return await originalRequest(req);
|
|
578
|
+
} catch (e) {
|
|
579
|
+
console.warn("[wiresaw] request error", e);
|
|
580
|
+
const bundlerMethods = [
|
|
581
|
+
"eth_estimateUserOperationGas",
|
|
582
|
+
"eth_sendUserOperation",
|
|
583
|
+
"eth_getUserOperationReceipt"
|
|
584
|
+
];
|
|
585
|
+
if (bundlerMethods.includes(req.method)) {
|
|
586
|
+
if (transport.fallbackBundler) {
|
|
587
|
+
const { request: fallbackRequest } = transport.fallbackBundler(opts);
|
|
588
|
+
console.warn("[wiresaw] falling back to bundler rpc", req);
|
|
589
|
+
return fallbackRequest(req);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
if (transport.fallbackEth) {
|
|
593
|
+
const { request: fallbackRequest } = transport.fallbackEth(opts);
|
|
594
|
+
console.warn("[wiresaw] falling back to eth rpc", req);
|
|
595
|
+
return fallbackRequest(req);
|
|
596
|
+
}
|
|
597
|
+
throw e;
|
|
598
|
+
}
|
|
599
|
+
async function getTransactionReceipt(hash) {
|
|
600
|
+
if (transactionReceipts[hash]) return transactionReceipts[hash];
|
|
601
|
+
const pendingReceipt = await originalRequest({
|
|
602
|
+
...req,
|
|
603
|
+
method: "wiresaw_getTransactionReceipt",
|
|
604
|
+
params: [hash]
|
|
605
|
+
});
|
|
606
|
+
if (pendingReceipt) {
|
|
607
|
+
transactionReceipts[hash] = pendingReceipt;
|
|
608
|
+
return pendingReceipt;
|
|
609
|
+
}
|
|
610
|
+
if (transport.fallbackEth) {
|
|
611
|
+
const { request: fallbackRequest } = transport.fallbackEth(opts);
|
|
612
|
+
const receipt = await fallbackRequest({
|
|
613
|
+
...req,
|
|
614
|
+
method: "eth_getTransactionReceipt",
|
|
615
|
+
params: [hash]
|
|
616
|
+
});
|
|
617
|
+
if (receipt) {
|
|
618
|
+
transactionReceipts[hash] = receipt;
|
|
619
|
+
return receipt;
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
};
|
|
625
|
+
};
|
|
626
|
+
}
|
|
201
627
|
export {
|
|
202
628
|
ensureContract,
|
|
203
629
|
ensureContractsDeployed,
|
|
204
630
|
ensureDeployer,
|
|
205
631
|
getContractAddress,
|
|
206
632
|
getDeployer,
|
|
207
|
-
waitForTransactions
|
|
633
|
+
waitForTransactions,
|
|
634
|
+
wiresaw
|
|
208
635
|
};
|
|
209
636
|
//# sourceMappingURL=internal.js.map
|
package/dist/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/waitForTransactions.ts","../src/deploy/ensureContract.ts","../src/deploy/common.ts","../src/deploy/debug.ts","../src/deploy/ensureContractsDeployed.ts","../src/deploy/ensureDeployer.ts","../src/deploy/create2/deployment.json","../src/deploy/getDeployer.ts","../src/deploy/getContractAddress.ts"],"sourcesContent":["import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { debug } from \"./debug\";\nimport { waitForTransactionReceipt } from \"viem/actions\";\n\nexport async function waitForTransactions({\n client,\n hashes,\n debugLabel = \"transactions\",\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly hashes: readonly Hex[];\n readonly debugLabel?: string;\n}): Promise<void> {\n if (!hashes.length) return;\n\n debug(`waiting for ${debugLabel} to confirm`);\n // wait for each tx separately/serially, because parallelizing results in RPC errors\n for (const hash of hashes) {\n const receipt = await waitForTransactionReceipt(client, { hash });\n // TODO: handle user op failures?\n if (receipt.status === \"reverted\") {\n throw new Error(`Transaction reverted: ${hash}`);\n }\n }\n}\n","import { Client, Transport, Chain, Account, concatHex, getCreate2Address, Hex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport { contractSizeLimit, singletonSalt } from \"./common\";\nimport { debug } from \"./debug\";\nimport { sendTransaction } from \"../sendTransaction\";\n\nexport type Contract = {\n bytecode: Hex;\n deployedBytecodeSize?: number;\n debugLabel?: string;\n salt?: Hex;\n};\n\nexport async function ensureContract({\n client,\n deployerAddress,\n bytecode,\n deployedBytecodeSize,\n debugLabel = \"contract\",\n salt = singletonSalt,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n} & Contract): Promise<readonly Hex[]> {\n if (bytecode.includes(\"__$\")) {\n throw new Error(`Found unlinked public library in ${debugLabel} bytecode`);\n }\n\n const address = getCreate2Address({ from: deployerAddress, salt, bytecode });\n\n const contractCode = await getCode(client, { address, blockTag: \"pending\" });\n if (contractCode) {\n debug(\"found\", debugLabel, \"at\", address);\n return [];\n }\n\n if (deployedBytecodeSize != null) {\n if (deployedBytecodeSize > contractSizeLimit) {\n console.warn(\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n } else if (deployedBytecodeSize > contractSizeLimit * 0.95) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is almost over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n }\n }\n\n debug(\"deploying\", debugLabel, \"at\", address);\n return [\n await sendTransaction(client, {\n chain: client.chain ?? null,\n to: deployerAddress,\n data: concatHex([salt, bytecode]),\n }),\n ];\n}\n","import { stringToHex } from \"viem\";\n\n// salt for deterministic deploys of singleton contracts\nexport const singletonSalt = stringToHex(\"\", { size: 32 });\n\n// https://eips.ethereum.org/EIPS/eip-170\nexport const contractSizeLimit = parseInt(\"6000\", 16);\n","import { debug as parentDebug } from \"../debug\";\n\nexport const debug = parentDebug.extend(\"deploy\");\nexport const error = parentDebug.extend(\"deploy\");\n\n// Pipe debug output to stdout instead of stderr\ndebug.log = console.debug.bind(console);\n\n// Pipe error output to stderr\nerror.log = console.error.bind(console);\n","import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { Contract, ensureContract } from \"./ensureContract\";\nimport { waitForTransactions } from \"../waitForTransactions\";\nimport { uniqueBy } from \"../utils/uniqueBy\";\n\nexport async function ensureContractsDeployed({\n client,\n deployerAddress,\n contracts,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n readonly contracts: readonly Contract[];\n}): Promise<readonly Hex[]> {\n // Deployments assume a deterministic deployer, so we only need to deploy the unique bytecode\n const uniqueContracts = uniqueBy(contracts, (contract) => contract.bytecode);\n\n const txs = (\n await Promise.all(uniqueContracts.map((contract) => ensureContract({ client, deployerAddress, ...contract })))\n ).flat();\n\n await waitForTransactions({\n client,\n hashes: txs,\n debugLabel: \"contract deploys\",\n });\n\n return txs;\n}\n","import { Account, Address, Chain, Client, Transport } from \"viem\";\nimport { getBalance, sendRawTransaction, sendTransaction, waitForTransactionReceipt } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\nimport { getDeployer } from \"./getDeployer\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function ensureDeployer(client: Client<Transport, Chain | undefined, Account>): Promise<Address> {\n const existingDeployer = await getDeployer(client);\n if (existingDeployer !== undefined) {\n return existingDeployer;\n }\n\n // There's not really a way to simulate a pre-EIP-155 (no chain ID) transaction,\n // so we have to attempt to create the deployer first and, if it fails, fall back\n // to a regular deploy.\n\n // Send gas to deployment signer\n const gasRequired = BigInt(deployment.gasLimit) * BigInt(deployment.gasPrice);\n const currentBalance = await getBalance(client, { address: `0x${deployment.signerAddress}` });\n const gasNeeded = gasRequired - currentBalance;\n if (gasNeeded > 0) {\n debug(\"sending gas for CREATE2 deployer to signer at\", deployment.signerAddress);\n const gasTx = await sendTransaction(client, {\n chain: client.chain ?? null,\n to: `0x${deployment.signerAddress}`,\n value: gasNeeded,\n });\n const gasReceipt = await waitForTransactionReceipt(client, { hash: gasTx });\n if (gasReceipt.status !== \"success\") {\n console.error(\"failed to send gas to deployer signer\", gasReceipt);\n throw new Error(\"failed to send gas to deployer signer\");\n }\n }\n\n // Deploy the deployer\n debug(\"deploying CREATE2 deployer at\", deployer);\n const deployTx = await sendRawTransaction(client, { serializedTransaction: `0x${deployment.transaction}` }).catch(\n (error) => {\n // Do a regular contract create if the presigned transaction doesn't work due to replay protection\n if (String(error).includes(\"only replay-protected (EIP-155) transactions allowed over RPC\")) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\n ⚠️ Your chain or RPC does not allow for non EIP-155 signed transactions, so your deploys will not be determinstic and contract addresses may change between deploys.\\n\\n We recommend running your chain's node with \\`--rpc.allow-unprotected-txs\\` to enable determinstic deployments.\\n`,\n );\n debug(\"deploying CREATE2 deployer\");\n return sendTransaction(client, {\n chain: client.chain ?? null,\n data: `0x${deployment.creationCode}`,\n });\n }\n throw error;\n },\n );\n\n const deployReceipt = await waitForTransactionReceipt(client, { hash: deployTx });\n if (!deployReceipt.contractAddress) {\n throw new Error(\"Deploy receipt did not have contract address, was the deployer not deployed?\");\n }\n\n if (deployReceipt.contractAddress !== deployer) {\n console.warn(\n `\\n ⚠️ CREATE2 deployer created at ${deployReceipt.contractAddress} does not match the CREATE2 determinstic deployer we expected (${deployer})`,\n );\n }\n\n return deployReceipt.contractAddress;\n}\n","{\n \"gasPrice\": 100000000000,\n \"gasLimit\": 100000,\n \"signerAddress\": \"3fab184622dc19b6109349b94811493bf2a45362\",\n \"transaction\": \"f8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222\",\n \"address\": \"4e59b44847b379578588920ca78fbf26c0b4956c\",\n \"creationCode\": \"604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3\"\n}\n","import { Address, Chain, Client, Transport, sliceHex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function getDeployer(client: Client<Transport, Chain | undefined>): Promise<Address | undefined> {\n const bytecode = await getCode(client, { address: deployer });\n if (bytecode) {\n debug(\"found deployer bytecode at\", deployer);\n // check if deployed bytecode is the same as the expected bytecode (minus 14-bytes creation code prefix)\n if (bytecode !== sliceHex(`0x${deployment.creationCode}`, 14)) {\n console.warn(\n `\\n ⚠️ Bytecode for deployer at ${deployer} did not match the expected CREATE2 bytecode. You may have unexpected results.\\n`,\n );\n }\n return deployer;\n }\n}\n","import { Hex, getCreate2Address } from \"viem\";\nimport { singletonSalt } from \"./common\";\n\nexport function getContractAddress({\n deployerAddress,\n bytecode,\n salt = singletonSalt,\n}: {\n readonly deployerAddress: Hex;\n readonly bytecode: Hex;\n readonly salt?: Hex;\n}): Hex {\n return getCreate2Address({ from: deployerAddress, bytecode, salt });\n}\n"],"mappings":"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","names":["debug","debug","sendTransaction","waitForTransactionReceipt","getCode","getCode","debug","deployer","debug","sendTransaction","waitForTransactionReceipt","error","getCreate2Address","getCreate2Address"]}
|
|
1
|
+
{"version":3,"sources":["../src/waitForTransactions.ts","../src/deploy/ensureContract.ts","../src/deploy/common.ts","../src/deploy/debug.ts","../src/deploy/ensureContractsDeployed.ts","../src/deploy/ensureDeployer.ts","../src/deploy/create2/deployment.json","../src/deploy/getDeployer.ts","../src/deploy/getContractAddress.ts","../src/transports/methods/estimateUserOperationGas.ts","../src/transports/entryPointSimulationsAbi.ts","../src/transports/methods/getUserOperationReceipt.ts","../src/transports/wiresaw.ts"],"sourcesContent":["import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { debug } from \"./debug\";\nimport { waitForTransactionReceipt } from \"viem/actions\";\n\nexport async function waitForTransactions({\n client,\n hashes,\n debugLabel = \"transactions\",\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly hashes: readonly Hex[];\n readonly debugLabel?: string;\n}): Promise<void> {\n if (!hashes.length) return;\n\n debug(`waiting for ${debugLabel} to confirm`);\n // wait for each tx separately/serially, because parallelizing results in RPC errors\n for (const hash of hashes) {\n const receipt = await waitForTransactionReceipt(client, { hash });\n // TODO: handle user op failures?\n if (receipt.status === \"reverted\") {\n throw new Error(`Transaction reverted: ${hash}`);\n }\n }\n}\n","import { Client, Transport, Chain, Account, concatHex, getCreate2Address, Hex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport { contractSizeLimit, singletonSalt } from \"./common\";\nimport { debug } from \"./debug\";\nimport { sendTransaction } from \"../sendTransaction\";\n\nexport type Contract = {\n bytecode: Hex;\n deployedBytecodeSize?: number;\n debugLabel?: string;\n salt?: Hex;\n};\n\nexport async function ensureContract({\n client,\n deployerAddress,\n bytecode,\n deployedBytecodeSize,\n debugLabel = \"contract\",\n salt = singletonSalt,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n} & Contract): Promise<readonly Hex[]> {\n if (bytecode.includes(\"__$\")) {\n throw new Error(`Found unlinked public library in ${debugLabel} bytecode`);\n }\n\n const address = getCreate2Address({ from: deployerAddress, salt, bytecode });\n\n const contractCode = await getCode(client, { address, blockTag: \"pending\" });\n if (contractCode) {\n debug(\"found\", debugLabel, \"at\", address);\n return [];\n }\n\n if (deployedBytecodeSize != null) {\n if (deployedBytecodeSize === 0) {\n throw new Error(`Empty bytecode for ${debugLabel}`);\n }\n\n if (deployedBytecodeSize > contractSizeLimit) {\n console.warn(\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n } else if (deployedBytecodeSize > contractSizeLimit * 0.95) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is almost over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n }\n }\n\n debug(\"deploying\", debugLabel, \"at\", address);\n return [\n await sendTransaction(client, {\n chain: client.chain ?? null,\n to: deployerAddress,\n data: concatHex([salt, bytecode]),\n }),\n ];\n}\n","import { stringToHex } from \"viem\";\n\n// salt for deterministic deploys of singleton contracts\nexport const singletonSalt = stringToHex(\"\", { size: 32 });\n\n// https://eips.ethereum.org/EIPS/eip-170\nexport const contractSizeLimit = parseInt(\"6000\", 16);\n","import { debug as parentDebug } from \"../debug\";\n\nexport const debug = parentDebug.extend(\"deploy\");\nexport const error = parentDebug.extend(\"deploy\");\n\n// Pipe debug output to stdout instead of stderr\ndebug.log = console.debug.bind(console);\n\n// Pipe error output to stderr\nerror.log = console.error.bind(console);\n","import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { Contract, ensureContract } from \"./ensureContract\";\nimport { waitForTransactions } from \"../waitForTransactions\";\nimport { uniqueBy } from \"../utils/uniqueBy\";\n\nexport async function ensureContractsDeployed({\n client,\n deployerAddress,\n contracts,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n readonly contracts: readonly Contract[];\n}): Promise<readonly Hex[]> {\n // Deployments assume a deterministic deployer, so we only need to deploy the unique bytecode\n const uniqueContracts = uniqueBy(contracts, (contract) => contract.bytecode);\n\n const txs = (\n await Promise.all(uniqueContracts.map((contract) => ensureContract({ client, deployerAddress, ...contract })))\n ).flat();\n\n await waitForTransactions({\n client,\n hashes: txs,\n debugLabel: \"contract deploys\",\n });\n\n return txs;\n}\n","import { Account, Address, Chain, Client, Transport } from \"viem\";\nimport { getBalance, sendRawTransaction, sendTransaction, waitForTransactionReceipt } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\nimport { getDeployer } from \"./getDeployer\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function ensureDeployer(client: Client<Transport, Chain | undefined, Account>): Promise<Address> {\n const existingDeployer = await getDeployer(client);\n if (existingDeployer !== undefined) {\n return existingDeployer;\n }\n\n // There's not really a way to simulate a pre-EIP-155 (no chain ID) transaction,\n // so we have to attempt to create the deployer first and, if it fails, fall back\n // to a regular deploy.\n\n // Send gas to deployment signer\n const gasRequired = BigInt(deployment.gasLimit) * BigInt(deployment.gasPrice);\n const currentBalance = await getBalance(client, { address: `0x${deployment.signerAddress}` });\n const gasNeeded = gasRequired - currentBalance;\n if (gasNeeded > 0) {\n debug(\"sending gas for CREATE2 deployer to signer at\", deployment.signerAddress);\n const gasTx = await sendTransaction(client, {\n chain: client.chain ?? null,\n to: `0x${deployment.signerAddress}`,\n value: gasNeeded,\n });\n const gasReceipt = await waitForTransactionReceipt(client, { hash: gasTx });\n if (gasReceipt.status !== \"success\") {\n console.error(\"failed to send gas to deployer signer\", gasReceipt);\n throw new Error(\"failed to send gas to deployer signer\");\n }\n }\n\n // Deploy the deployer\n debug(\"deploying CREATE2 deployer at\", deployer);\n const deployTx = await sendRawTransaction(client, { serializedTransaction: `0x${deployment.transaction}` }).catch(\n (error) => {\n // Do a regular contract create if the presigned transaction doesn't work due to replay protection\n if (String(error).includes(\"only replay-protected (EIP-155) transactions allowed over RPC\")) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\n ⚠️ Your chain or RPC does not allow for non EIP-155 signed transactions, so your deploys will not be determinstic and contract addresses may change between deploys.\\n\\n We recommend running your chain's node with \\`--rpc.allow-unprotected-txs\\` to enable determinstic deployments.\\n`,\n );\n debug(\"deploying CREATE2 deployer\");\n return sendTransaction(client, {\n chain: client.chain ?? null,\n data: `0x${deployment.creationCode}`,\n });\n }\n throw error;\n },\n );\n\n const deployReceipt = await waitForTransactionReceipt(client, { hash: deployTx });\n if (!deployReceipt.contractAddress) {\n throw new Error(\"Deploy receipt did not have contract address, was the deployer not deployed?\");\n }\n\n if (deployReceipt.contractAddress !== deployer) {\n console.warn(\n `\\n ⚠️ CREATE2 deployer created at ${deployReceipt.contractAddress} does not match the CREATE2 determinstic deployer we expected (${deployer})`,\n );\n }\n\n return deployReceipt.contractAddress;\n}\n","{\n \"gasPrice\": 100000000000,\n \"gasLimit\": 100000,\n \"signerAddress\": \"3fab184622dc19b6109349b94811493bf2a45362\",\n \"transaction\": \"f8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222\",\n \"address\": \"4e59b44847b379578588920ca78fbf26c0b4956c\",\n \"creationCode\": \"604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3\"\n}\n","import { Address, Chain, Client, Transport, sliceHex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function getDeployer(client: Client<Transport, Chain | undefined>): Promise<Address | undefined> {\n const bytecode = await getCode(client, { address: deployer });\n if (bytecode) {\n debug(\"found deployer bytecode at\", deployer);\n // check if deployed bytecode is the same as the expected bytecode (minus 14-bytes creation code prefix)\n if (bytecode !== sliceHex(`0x${deployment.creationCode}`, 14)) {\n console.warn(\n `\\n ⚠️ Bytecode for deployer at ${deployer} did not match the expected CREATE2 bytecode. You may have unexpected results.\\n`,\n );\n }\n return deployer;\n }\n}\n","import { Hex, getCreate2Address } from \"viem\";\nimport { singletonSalt } from \"./common\";\n\nexport function getContractAddress({\n deployerAddress,\n bytecode,\n salt = singletonSalt,\n}: {\n readonly deployerAddress: Hex;\n readonly bytecode: Hex;\n readonly salt?: Hex;\n}): Hex {\n return getCreate2Address({ from: deployerAddress, bytecode, salt });\n}\n","import {\n BundlerRpcSchema,\n decodeFunctionResult,\n DecodeFunctionResultReturnType,\n EIP1193RequestFn,\n encodeFunctionData,\n Hex,\n zeroAddress,\n} from \"viem\";\nimport { getRpcMethod } from \"../common\";\nimport {\n entryPoint07Address,\n formatUserOperation,\n formatUserOperationRequest,\n toPackedUserOperation,\n UserOperation,\n} from \"viem/account-abstraction\";\nimport { bigIntMax } from \"../../utils\";\nimport { entryPointSimulationsAbi } from \"../entryPointSimulationsAbi\";\n\ntype rpcMethod = getRpcMethod<BundlerRpcSchema, \"eth_estimateUserOperationGas\">;\n\ntype EstimateUserOperationGasOptions = {\n request: EIP1193RequestFn;\n params: rpcMethod[\"Parameters\"];\n};\n\nexport async function estimateUserOperationGas({\n request,\n params,\n}: EstimateUserOperationGasOptions): Promise<rpcMethod[\"ReturnType\"]> {\n const userOp = formatUserOperation(params[0]);\n const hasPaymaster = userOp.paymaster != null && userOp.paymaster !== zeroAddress;\n\n const [simulationResult, simulationResultWithPaymaster] = await Promise.all([\n simulateHandleOp({ userOp, removePaymaster: hasPaymaster, request }),\n hasPaymaster ? simulateHandleOp({ userOp, request }) : undefined,\n ]);\n\n const gasEstimates = getGasEstimates({ userOp, simulationResult, simulationResultWithPaymaster });\n\n return formatUserOperationRequest({\n ...gasEstimates,\n });\n}\n\ntype SimulateHandleOpOptions = {\n request: EIP1193RequestFn;\n userOp: UserOperation<\"0.7\">;\n removePaymaster?: boolean;\n};\n\ntype SimulationResult = DecodeFunctionResultReturnType<typeof entryPointSimulationsAbi>;\n\nasync function simulateHandleOp({\n userOp,\n removePaymaster,\n request,\n}: SimulateHandleOpOptions): Promise<SimulationResult> {\n if (removePaymaster) {\n const {\n /* eslint-disable */\n paymaster,\n paymasterData,\n paymasterPostOpGasLimit,\n paymasterVerificationGasLimit,\n /* eslint-enable */\n ...userOpWithoutPaymaster\n } = userOp;\n userOp = userOpWithoutPaymaster;\n }\n\n // Prepare user operation for simulation\n const paymasterGasLimits =\n userOp.paymaster && !removePaymaster\n ? {\n paymasterPostOpGasLimit: 2_000_000n,\n paymasterVerificationGasLimit: 5_000_000n,\n }\n : {};\n const simulationUserOp = {\n ...userOp,\n preVerificationGas: 0n,\n callGasLimit: 10_000_000n,\n verificationGasLimit: 10_000_000n,\n // https://github.com/pimlicolabs/alto/blob/471998695e5ec75ef88dda3f8a534f47c24bcd1a/src/rpc/methods/eth_estimateUserOperationGas.ts#L117\n maxPriorityFeePerGas: userOp.maxFeePerGas,\n ...paymasterGasLimits,\n } satisfies UserOperation<\"0.7\">;\n\n const packedUserOp = toPackedUserOperation(simulationUserOp);\n const simulationData = encodeFunctionData({\n abi: entryPointSimulationsAbi,\n functionName: \"simulateHandleOp\",\n args: [packedUserOp, zeroAddress, \"0x\"],\n });\n\n const senderBalanceOverride = removePaymaster ? { [userOp.sender]: { balance: \"0xFFFFFFFFFFFFFFFFFFFF\" } } : {};\n const simulationParams = [\n {\n to: entryPoint07Address,\n data: simulationData,\n },\n \"pending\",\n {\n ...senderBalanceOverride,\n },\n ];\n const encodedSimulationResult: Hex = await request({\n method: \"wiresaw_callEntryPointSimulations\",\n params: simulationParams,\n });\n\n return decodeFunctionResult({\n abi: entryPointSimulationsAbi,\n functionName: \"simulateHandleOp\",\n data: encodedSimulationResult,\n });\n}\n\ntype GetGasEstimatesOptions = {\n userOp: UserOperation<\"0.7\">;\n simulationResult: SimulationResult;\n simulationResultWithPaymaster?: SimulationResult;\n};\n\ntype GasEstimates = {\n verificationGasLimit: bigint;\n callGasLimit: bigint;\n paymasterVerificationGasLimit: bigint;\n paymasterPostOpGasLimit: bigint;\n preVerificationGas: bigint;\n};\n\nfunction getGasEstimates({\n userOp,\n simulationResult,\n simulationResultWithPaymaster,\n}: GetGasEstimatesOptions): GasEstimates {\n const hasPaymaster = simulationResultWithPaymaster != null;\n\n // The verification gas is the total gas available during the validation phase, including the gas used by the paymaster\n const verificationGas = hasPaymaster ? simulationResultWithPaymaster.preOpGas : simulationResult.preOpGas;\n\n // The paymaster verification gas is the difference between verification gas with and without paymaster\n const paymasterVerificationGas = hasPaymaster\n ? simulationResultWithPaymaster.preOpGas - simulationResult.preOpGas\n : 0n;\n\n // The call gas is only the gas used by the user operation, not the paymaster\n const callGas = simulationResult.paid / userOp.maxFeePerGas - simulationResult.preOpGas;\n\n // The paymaster post-op gas is the difference between non-verification gas with and without paymaster\n const paymasterPostOpGas = hasPaymaster\n ? simulationResultWithPaymaster.paid / userOp.maxFeePerGas - simulationResultWithPaymaster.preOpGas - callGas\n : 0n;\n\n // Apply a 2x buffer to the calculated limits\n const verificationGasLimit = verificationGas * 2n;\n const callGasLimit = bigIntMax(callGas * 2n, 9000n);\n const paymasterVerificationGasLimit = paymasterVerificationGas * 2n;\n const paymasterPostOpGasLimit = paymasterPostOpGas * 2n;\n\n return {\n verificationGasLimit,\n callGasLimit,\n paymasterVerificationGasLimit,\n paymasterPostOpGasLimit,\n preVerificationGas: 20_000n,\n };\n}\n","export const entryPointSimulationsAbi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"initCode\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes32\",\n name: \"accountGasLimits\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"preVerificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"gasFees\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"paymasterAndData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct PackedUserOperation\",\n name: \"op\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"target\",\n type: \"address\",\n },\n {\n internalType: \"bytes\",\n name: \"targetCallData\",\n type: \"bytes\",\n },\n ],\n name: \"simulateHandleOp\",\n outputs: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"preOpGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"paid\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"accountValidationData\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"paymasterValidationData\",\n type: \"uint256\",\n },\n {\n internalType: \"bool\",\n name: \"targetSuccess\",\n type: \"bool\",\n },\n {\n internalType: \"bytes\",\n name: \"targetResult\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct IEntryPointSimulations.ExecutionResult\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","import {\n Address,\n ExtractAbiItem,\n Hex,\n RpcTransactionReceipt,\n RpcUserOperationReceipt,\n decodeEventLog,\n encodeEventTopics,\n numberToHex,\n parseEventLogs,\n zeroAddress,\n} from \"viem\";\nimport { entryPoint07Abi } from \"viem/account-abstraction\";\n\nconst userOperationRevertReasonAbi = [\n entryPoint07Abi.find(\n (item): item is ExtractAbiItem<typeof entryPoint07Abi, \"UserOperationRevertReason\"> =>\n item.type === \"event\" && item.name === \"UserOperationRevertReason\",\n )!,\n] as const;\n\nconst userOperationEventTopic = encodeEventTopics({\n abi: entryPoint07Abi,\n eventName: \"UserOperationEvent\",\n});\n\nexport function getUserOperationReceipt(userOpHash: Hex, receipt: RpcTransactionReceipt): RpcUserOperationReceipt {\n const userOperationRevertReasonTopicEvent = encodeEventTopics({\n abi: userOperationRevertReasonAbi,\n })[0];\n\n let entryPoint: Address = zeroAddress;\n let revertReason = undefined;\n\n let startIndex = -1;\n let endIndex = -1;\n receipt.logs.forEach((log, index) => {\n if (log?.topics[0] === userOperationEventTopic[0]) {\n // process UserOperationEvent\n if (log.topics[1] === userOpHash) {\n // it's our userOpHash. save as end of logs array\n endIndex = index;\n entryPoint = log.address;\n } else if (endIndex === -1) {\n // it's a different hash. remember it as beginning index, but only if we didn't find our end index yet.\n startIndex = index;\n }\n }\n\n if (log?.topics[0] === userOperationRevertReasonTopicEvent) {\n // process UserOperationRevertReason\n if (log.topics[1] === userOpHash) {\n // it's our userOpHash. capture revert reason.\n const decodedLog = decodeEventLog({\n abi: userOperationRevertReasonAbi,\n data: log.data,\n topics: log.topics,\n });\n\n revertReason = decodedLog.args.revertReason;\n }\n }\n });\n\n if (endIndex === -1) {\n throw new Error(\"fatal: no UserOperationEvent in logs\");\n }\n\n const logs = receipt.logs.slice(startIndex + 1, endIndex);\n\n const userOperationEvent = parseEventLogs({\n abi: entryPoint07Abi,\n eventName: \"UserOperationEvent\",\n args: {\n userOpHash,\n },\n logs: receipt.logs,\n })[0]!;\n\n let paymaster: Address | undefined = userOperationEvent.args.paymaster;\n paymaster = paymaster === zeroAddress ? undefined : paymaster;\n\n return {\n userOpHash,\n entryPoint,\n sender: userOperationEvent.args.sender,\n nonce: numberToHex(userOperationEvent.args.nonce),\n paymaster,\n actualGasUsed: numberToHex(userOperationEvent.args.actualGasUsed),\n actualGasCost: numberToHex(userOperationEvent.args.actualGasCost),\n success: userOperationEvent.args.success,\n reason: revertReason,\n logs,\n receipt,\n };\n}\n","import { EIP1193RequestFn, Hex, RpcTransactionReceipt, Transport } from \"viem\";\nimport { estimateUserOperationGas } from \"./methods/estimateUserOperationGas\";\nimport { getUserOperationReceipt } from \"./methods/getUserOperationReceipt\";\n\ntype WiresawSendUserOperationResult = {\n txHash: Hex;\n userOpHash: Hex;\n};\n\ntype WiresawOptions<transport extends Transport> = {\n wiresaw: transport;\n fallbackBundler?: Transport;\n fallbackEth?: Transport;\n};\n\nexport function wiresaw<const wiresawTransport extends Transport>(\n transport: WiresawOptions<wiresawTransport>,\n): wiresawTransport {\n return ((opts) => {\n const { request: originalRequest, ...rest } = transport.wiresaw(opts);\n\n let chainId: Hex | null = null;\n const transactionHashes: { [userOpHash: Hex]: Hex } = {};\n const transactionReceipts: { [transactionHashes: Hex]: RpcTransactionReceipt } = {};\n\n return {\n ...rest,\n // TODO: type `request` so we don't have to cast\n async request(req): ReturnType<EIP1193RequestFn> {\n try {\n if (req.method === \"eth_chainId\") {\n if (chainId != null) return chainId;\n if (transport.fallbackEth) {\n const { request: fallbackRequest } = transport.fallbackEth(opts);\n return (chainId = await fallbackRequest(req));\n }\n return (chainId = await originalRequest(req));\n }\n\n if (req.method === \"eth_estimateGas\") {\n return await originalRequest({ ...req, method: \"wiresaw_estimateGas\" });\n }\n\n if (req.method === \"eth_call\") {\n return await originalRequest({ ...req, method: \"wiresaw_call\" });\n }\n\n if (req.method === \"eth_getTransactionCount\") {\n return await originalRequest({ ...req, method: \"wiresaw_getTransactionCount\" });\n }\n\n if (req.method === \"eth_getTransactionReceipt\") {\n return await getTransactionReceipt((req.params as [Hex])[0]);\n }\n\n if (req.method === \"eth_sendUserOperation\") {\n const { userOpHash, txHash } = (await originalRequest({\n ...req,\n method: \"wiresaw_sendUserOperation\",\n })) as WiresawSendUserOperationResult;\n transactionHashes[userOpHash] = txHash;\n return userOpHash;\n }\n\n if (req.method === \"eth_getUserOperationReceipt\") {\n const userOpHash = (req.params as [Hex])[0];\n const knownTransactionHash = transactionHashes[userOpHash];\n if (knownTransactionHash) {\n const transactionReceipt = await getTransactionReceipt(knownTransactionHash);\n if (transactionReceipt) {\n return getUserOperationReceipt(userOpHash, transactionReceipt);\n }\n }\n if (transport.fallbackBundler) {\n const { request: fallbackRequest } = transport.fallbackBundler(opts);\n return await fallbackRequest(req);\n }\n }\n\n if (req.method === \"eth_estimateUserOperationGas\") {\n try {\n return await estimateUserOperationGas({\n request: originalRequest,\n params: req.params as never,\n });\n } catch (e) {\n console.warn(\"[wiresaw] estimating user operation gas failed, falling back to bundler\", e);\n }\n\n if (transport.fallbackBundler) {\n const { request: fallbackRequest } = transport.fallbackBundler(opts);\n return await fallbackRequest(req);\n }\n }\n\n // Fallback to regular RPC for methods that don't require wiresaw\n if (\n req.method === \"eth_blockNumber\" ||\n req.method === \"eth_getBlockByNumber\" ||\n req.method === \"eth_maxPriorityFeePerGas\"\n ) {\n if (transport.fallbackEth) {\n const { request: fallbackRequest } = transport.fallbackEth(opts);\n return await fallbackRequest(req);\n }\n return await originalRequest(req);\n }\n\n return await originalRequest(req);\n } catch (e) {\n console.warn(\"[wiresaw] request error\", e);\n const bundlerMethods = [\n \"eth_estimateUserOperationGas\",\n \"eth_sendUserOperation\",\n \"eth_getUserOperationReceipt\",\n ];\n if (bundlerMethods.includes(req.method)) {\n if (transport.fallbackBundler) {\n const { request: fallbackRequest } = transport.fallbackBundler(opts);\n console.warn(\"[wiresaw] falling back to bundler rpc\", req);\n return fallbackRequest(req);\n }\n }\n if (transport.fallbackEth) {\n const { request: fallbackRequest } = transport.fallbackEth(opts);\n console.warn(\"[wiresaw] falling back to eth rpc\", req);\n return fallbackRequest(req);\n }\n throw e;\n }\n\n async function getTransactionReceipt(hash: Hex): Promise<RpcTransactionReceipt | undefined> {\n // Return cached receipt if available\n if (transactionReceipts[hash]) return transactionReceipts[hash];\n\n // Fetch pending receipt\n const pendingReceipt = (await originalRequest({\n ...req,\n method: \"wiresaw_getTransactionReceipt\",\n params: [hash],\n })) as RpcTransactionReceipt | undefined;\n if (pendingReceipt) {\n transactionReceipts[hash] = pendingReceipt;\n return pendingReceipt;\n }\n\n if (transport.fallbackEth) {\n const { request: fallbackRequest } = transport.fallbackEth(opts);\n const receipt = (await fallbackRequest({\n ...req,\n method: \"eth_getTransactionReceipt\",\n params: [hash],\n })) as RpcTransactionReceipt | undefined;\n if (receipt) {\n transactionReceipts[hash] = receipt;\n return receipt;\n }\n }\n }\n },\n };\n }) as wiresawTransport;\n}\n"],"mappings":"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","names":["debug","debug","sendTransaction","waitForTransactionReceipt","getCode","getCode","debug","deployer","debug","sendTransaction","waitForTransactionReceipt","error","getCreate2Address","getCreate2Address","zeroAddress"]}
|
package/dist/utils.js
CHANGED
|
@@ -13,12 +13,10 @@ import {
|
|
|
13
13
|
iteratorToArray,
|
|
14
14
|
mapObject,
|
|
15
15
|
unique,
|
|
16
|
+
uniqueBy,
|
|
16
17
|
wait,
|
|
17
18
|
waitForIdle
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import {
|
|
20
|
-
uniqueBy
|
|
21
|
-
} from "./chunk-CHXZROA7.js";
|
|
19
|
+
} from "./chunk-ETXWXV5T.js";
|
|
22
20
|
export {
|
|
23
21
|
assertExhaustive,
|
|
24
22
|
bigIntMax,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@latticexyz/common",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.22-01a4d064e5fd8e579d54bb3aa8997f225c6960d3",
|
|
4
4
|
"description": "Common low level logic shared between packages",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"p-retry": "^5.1.2",
|
|
70
70
|
"prettier": "3.2.5",
|
|
71
71
|
"prettier-plugin-solidity": "1.3.1",
|
|
72
|
-
"@latticexyz/schema-type": "2.2.
|
|
72
|
+
"@latticexyz/schema-type": "2.2.22-01a4d064e5fd8e579d54bb3aa8997f225c6960d3"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
75
|
"@types/debug": "^4.1.7",
|
package/dist/chunk-CHXZROA7.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
// src/utils/uniqueBy.ts
|
|
2
|
-
function uniqueBy(values, getKey) {
|
|
3
|
-
const map = /* @__PURE__ */ new Map();
|
|
4
|
-
for (const value of values) {
|
|
5
|
-
const key = getKey(value);
|
|
6
|
-
if (!map.has(key)) {
|
|
7
|
-
map.set(key, value);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
return Array.from(map.values());
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export {
|
|
14
|
-
uniqueBy
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=chunk-CHXZROA7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/uniqueBy.ts"],"sourcesContent":["export function uniqueBy<value, key>(values: readonly value[], getKey: (value: value) => key): readonly value[] {\n const map = new Map<key, value>();\n for (const value of values) {\n const key = getKey(value);\n if (!map.has(key)) {\n map.set(key, value);\n }\n }\n return Array.from(map.values());\n}\n"],"mappings":";AAAO,SAAS,SAAqB,QAA0B,QAAiD;AAC9G,QAAM,MAAM,oBAAI,IAAgB;AAChC,aAAW,SAAS,QAAQ;AAC1B,UAAM,MAAM,OAAO,KAAK;AACxB,QAAI,CAAC,IAAI,IAAI,GAAG,GAAG;AACjB,UAAI,IAAI,KAAK,KAAK;AAAA,IACpB;AAAA,EACF;AACA,SAAO,MAAM,KAAK,IAAI,OAAO,CAAC;AAChC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/assertExhaustive.ts","../src/utils/bigIntMax.ts","../src/utils/bigIntMin.ts","../src/utils/bigIntSort.ts","../src/utils/chunk.ts","../src/utils/groupBy.ts","../src/utils/identity.ts","../src/utils/includes.ts","../src/utils/indent.ts","../src/utils/isDefined.ts","../src/utils/isNotNull.ts","../src/utils/iteratorToArray.ts","../src/utils/mapObject.ts","../src/utils/unique.ts","../src/utils/wait.ts","../src/utils/waitForIdle.ts"],"sourcesContent":["export function assertExhaustive(value: never, message?: string): never {\n throw new Error(message ?? `Unexpected value: ${value}`);\n}\n","export function bigIntMax(...args: bigint[]): bigint {\n return args.reduce((m, e) => (e > m ? e : m));\n}\n","export function bigIntMin(...args: bigint[]): bigint {\n return args.reduce((m, e) => (e < m ? e : m));\n}\n","export function bigIntSort(a: bigint, b: bigint): -1 | 0 | 1 {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","export function* chunk<T>(arr: readonly T[], n: number): Generator<readonly T[], void> {\n for (let i = 0; i < arr.length; i += n) {\n yield arr.slice(i, i + n);\n }\n}\n","export function groupBy<value, key>(\n values: readonly value[],\n getKey: (value: value) => key,\n): Map<key, readonly value[]> {\n const map = new Map<key, readonly value[]>();\n for (const value of values) {\n const key = getKey(value);\n if (!map.has(key)) map.set(key, []);\n (map.get(key) as value[]).push(value);\n }\n return map;\n}\n","export function identity<T>(value: T): T {\n return value;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function includes<item>(items: item[], value: any): value is item {\n return items.includes(value);\n}\n","export function indent(message: string, indentation = \" \"): string {\n return message.replaceAll(/(^|\\n)/g, `$1${indentation}`);\n}\n","export function isDefined<T>(argument: T | undefined): argument is T {\n return argument !== undefined;\n}\n","export function isNotNull<T>(argument: T | null): argument is T {\n return argument !== null;\n}\n","export async function iteratorToArray<T>(iterator: AsyncIterable<T>): Promise<readonly T[]> {\n const items: T[] = [];\n for await (const item of iterator) {\n items.push(item);\n }\n return items;\n}\n","/**\n * Map each key of a source object via a given valueMap function\n */\nexport function mapObject<\n Source extends Record<string | number | symbol, unknown>,\n Target extends { [key in keyof Source]: unknown },\n>(source: Source, valueMap: (value: Source[typeof key], key: keyof Source) => Target[typeof key]): Target {\n return Object.fromEntries(\n Object.entries(source).map(([key, value]) => [key, valueMap(value as Source[keyof Source], key)]),\n ) as Target;\n}\n","export function unique<value>(values: readonly value[]): readonly value[] {\n return Array.from(new Set(values));\n}\n","export function wait(ms: number): Promise<void> {\n return new Promise<void>((resolve) => setTimeout(() => resolve(), ms));\n}\n","export function waitForIdle(): Promise<void> {\n return new Promise<void>((resolve) => {\n if (typeof requestIdleCallback !== \"undefined\") {\n requestIdleCallback(() => resolve());\n } else {\n setTimeout(() => resolve(), 1);\n }\n });\n}\n"],"mappings":";AAAO,SAAS,iBAAiB,OAAc,SAAyB;AACtE,QAAM,IAAI,MAAM,WAAW,qBAAqB,KAAK,EAAE;AACzD;;;ACFO,SAAS,aAAa,MAAwB;AACnD,SAAO,KAAK,OAAO,CAAC,GAAG,MAAO,IAAI,IAAI,IAAI,CAAE;AAC9C;;;ACFO,SAAS,aAAa,MAAwB;AACnD,SAAO,KAAK,OAAO,CAAC,GAAG,MAAO,IAAI,IAAI,IAAI,CAAE;AAC9C;;;ACFO,SAAS,WAAW,GAAW,GAAuB;AAC3D,SAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;AAClC;;;ACFO,UAAU,MAAS,KAAmB,GAA0C;AACrF,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,GAAG;AACtC,UAAM,IAAI,MAAM,GAAG,IAAI,CAAC;AAAA,EAC1B;AACF;;;ACJO,SAAS,QACd,QACA,QAC4B;AAC5B,QAAM,MAAM,oBAAI,IAA2B;AAC3C,aAAW,SAAS,QAAQ;AAC1B,UAAM,MAAM,OAAO,KAAK;AACxB,QAAI,CAAC,IAAI,IAAI,GAAG,EAAG,KAAI,IAAI,KAAK,CAAC,CAAC;AAClC,IAAC,IAAI,IAAI,GAAG,EAAc,KAAK,KAAK;AAAA,EACtC;AACA,SAAO;AACT;;;ACXO,SAAS,SAAY,OAAa;AACvC,SAAO;AACT;;;ACDO,SAAS,SAAe,OAAe,OAA2B;AACvE,SAAO,MAAM,SAAS,KAAK;AAC7B;;;ACHO,SAAS,OAAO,SAAiB,cAAc,MAAc;AAClE,SAAO,QAAQ,WAAW,WAAW,KAAK,WAAW,EAAE;AACzD;;;ACFO,SAAS,UAAa,UAAwC;AACnE,SAAO,aAAa;AACtB;;;ACFO,SAAS,UAAa,UAAmC;AAC9D,SAAO,aAAa;AACtB;;;ACFA,eAAsB,gBAAmB,UAAmD;AAC1F,QAAM,QAAa,CAAC;AACpB,mBAAiB,QAAQ,UAAU;AACjC,UAAM,KAAK,IAAI;AAAA,EACjB;AACA,SAAO;AACT;;;ACHO,SAAS,UAGd,QAAgB,UAAwF;AACxG,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,SAAS,OAA+B,GAAG,CAAC,CAAC;AAAA,EAClG;AACF;;;ACVO,SAAS,OAAc,QAA4C;AACxE,SAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC;AACnC;;;ACFO,SAAS,KAAK,IAA2B;AAC9C,SAAO,IAAI,QAAc,CAAC,YAAY,WAAW,MAAM,QAAQ,GAAG,EAAE,CAAC;AACvE;;;ACFO,SAAS,cAA6B;AAC3C,SAAO,IAAI,QAAc,CAAC,YAAY;AACpC,QAAI,OAAO,wBAAwB,aAAa;AAC9C,0BAAoB,MAAM,QAAQ,CAAC;AAAA,IACrC,OAAO;AACL,iBAAW,MAAM,QAAQ,GAAG,CAAC;AAAA,IAC/B;AAAA,EACF,CAAC;AACH;","names":[]}
|