@matterlabs/zksync-js 0.0.8 → 0.0.9
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/adapters/ethers/client.cjs +1640 -236
- package/dist/adapters/ethers/client.cjs.map +1 -1
- package/dist/adapters/ethers/client.d.ts +11 -0
- package/dist/adapters/ethers/client.js +5 -5
- package/dist/adapters/ethers/index.cjs +4395 -1525
- package/dist/adapters/ethers/index.cjs.map +1 -1
- package/dist/adapters/ethers/index.d.ts +4 -0
- package/dist/adapters/ethers/index.js +8 -8
- package/dist/adapters/ethers/resources/contracts/types.d.ts +15 -0
- package/dist/adapters/ethers/resources/deposits/context.d.ts +3 -3
- package/dist/adapters/ethers/resources/deposits/services/gas.d.ts +2 -2
- package/dist/adapters/ethers/resources/deposits/services/verification.d.ts +1 -1
- package/dist/adapters/ethers/resources/interop/address.d.ts +18 -0
- package/dist/adapters/ethers/resources/interop/attributes/resource.d.ts +9 -0
- package/dist/adapters/ethers/resources/interop/context.d.ts +36 -0
- package/dist/adapters/ethers/resources/interop/index.d.ts +63 -0
- package/dist/adapters/ethers/resources/interop/resolvers.d.ts +9 -0
- package/dist/adapters/ethers/resources/interop/routes/direct.d.ts +2 -0
- package/dist/adapters/ethers/resources/interop/routes/indirect.d.ts +2 -0
- package/dist/adapters/ethers/resources/interop/routes/types.d.ts +13 -0
- package/dist/adapters/ethers/resources/interop/services/erc20.d.ts +15 -0
- package/dist/adapters/ethers/resources/interop/services/finalization/bundle.d.ts +15 -0
- package/dist/adapters/ethers/resources/interop/services/finalization/data-fetchers.d.ts +17 -0
- package/dist/adapters/ethers/resources/interop/services/finalization/decoders.d.ts +12 -0
- package/dist/adapters/ethers/resources/interop/services/finalization/index.d.ts +13 -0
- package/dist/adapters/ethers/resources/interop/services/finalization/polling.d.ts +7 -0
- package/dist/adapters/ethers/resources/interop/services/finalization/status.d.ts +5 -0
- package/dist/adapters/ethers/resources/interop/services/finalization/topics.d.ts +6 -0
- package/dist/adapters/ethers/resources/interop/services/starter-data.d.ts +6 -0
- package/dist/adapters/ethers/resources/interop/types.d.ts +16 -0
- package/dist/adapters/ethers/resources/withdrawals/context.d.ts +2 -2
- package/dist/adapters/ethers/sdk.cjs +3357 -917
- package/dist/adapters/ethers/sdk.cjs.map +1 -1
- package/dist/adapters/ethers/sdk.d.ts +10 -8
- package/dist/adapters/ethers/sdk.js +6 -6
- package/dist/adapters/viem/client.cjs +685 -31
- package/dist/adapters/viem/client.cjs.map +1 -1
- package/dist/adapters/viem/client.js +5 -3
- package/dist/adapters/viem/index.cjs +282 -203
- package/dist/adapters/viem/index.cjs.map +1 -1
- package/dist/adapters/viem/index.d.ts +1 -0
- package/dist/adapters/viem/index.js +8 -7
- package/dist/adapters/viem/resources/deposits/context.d.ts +3 -3
- package/dist/adapters/viem/resources/deposits/services/gas.d.ts +2 -2
- package/dist/adapters/viem/resources/deposits/services/verification.d.ts +1 -1
- package/dist/adapters/viem/resources/withdrawals/context.d.ts +2 -2
- package/dist/adapters/viem/sdk.cjs +39 -58
- package/dist/adapters/viem/sdk.cjs.map +1 -1
- package/dist/adapters/viem/sdk.js +5 -5
- package/dist/{chunk-LNIEQ7AN.js → chunk-5AG6B7UX.js} +36 -60
- package/dist/{chunk-NODVRI3E.js → chunk-AIFHAPJC.js} +8 -2
- package/dist/{chunk-3GFCAGGI.js → chunk-FBKBF7YM.js} +1533 -1434
- package/dist/{chunk-L343N56B.js → chunk-IYEDEUXG.js} +1 -1
- package/dist/chunk-JNWHQJU3.js +209 -0
- package/dist/{chunk-ODMBZ2VX.js → chunk-KLNFDFLA.js} +42 -31
- package/dist/{chunk-NVULC4JB.js → chunk-QDJOEVGJ.js} +2 -2
- package/dist/{chunk-63DNJXS3.js → chunk-RRKVUW3G.js} +1375 -75
- package/dist/{chunk-5V2JRM5J.js → chunk-SRPKTXIF.js} +1 -1
- package/dist/{chunk-SHQQI3UD.js → chunk-UIXU35ZU.js} +1 -1
- package/dist/{chunk-QZVYN3YA.js → chunk-ZVHFVUDE.js} +2 -37
- package/dist/core/index.cjs +3 -2
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.js +4 -4
- package/dist/core/resources/interop/attributes/types.d.ts +0 -2
- package/dist/core/resources/interop/finalization.d.ts +0 -1
- package/dist/core/types/errors.d.ts +15 -5
- package/dist/core/types/fees.d.ts +9 -0
- package/dist/core/types/flows/interop.d.ts +12 -36
- package/dist/core/types/primitives.d.ts +1 -0
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -4
- package/package.json +1 -1
- package/dist/chunk-FGXRG2JS.js +0 -142
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var viem = require('viem');
|
|
4
4
|
var sha3 = require('@noble/hashes/sha3');
|
|
5
5
|
var utils = require('@noble/hashes/utils');
|
|
6
|
+
var ethers = require('ethers');
|
|
6
7
|
|
|
7
8
|
// src/adapters/viem/client.ts
|
|
8
9
|
|
|
@@ -199,12 +200,13 @@ if (kInspect) {
|
|
|
199
200
|
enumerable: false
|
|
200
201
|
});
|
|
201
202
|
}
|
|
202
|
-
function isZKsyncError(e) {
|
|
203
|
+
function isZKsyncError(e, opts) {
|
|
203
204
|
if (!e || typeof e !== "object") return false;
|
|
204
205
|
const maybe = e;
|
|
205
206
|
if (!("envelope" in maybe)) return false;
|
|
206
207
|
const envelope = maybe.envelope;
|
|
207
|
-
|
|
208
|
+
if (typeof envelope?.type !== "string" || typeof envelope?.message !== "string") return false;
|
|
209
|
+
return true;
|
|
208
210
|
}
|
|
209
211
|
function isReceiptNotFound(e) {
|
|
210
212
|
const chain = [];
|
|
@@ -251,6 +253,8 @@ function isReceiptNotFound(e) {
|
|
|
251
253
|
})();
|
|
252
254
|
return MSG_RE.test(raw);
|
|
253
255
|
}
|
|
256
|
+
var OP_CLIENT = {
|
|
257
|
+
ensureAddresses: "client.ensureAddresses"};
|
|
254
258
|
var OP_DEPOSITS = {
|
|
255
259
|
// high-level flow ops
|
|
256
260
|
quote: "deposits.quote",
|
|
@@ -327,11 +331,9 @@ var OP_WITHDRAWALS = {
|
|
|
327
331
|
rawReceipt: "withdrawals.finalize.fetchParams:rawReceipt",
|
|
328
332
|
messengerIndex: "withdrawals.finalize.fetchParams:messengerIndex",
|
|
329
333
|
proof: "withdrawals.finalize.fetchParams:proof",
|
|
330
|
-
network: "withdrawals.finalize.fetchParams:network"
|
|
331
|
-
ensureAddresses: "withdrawals.finalize.fetchParams:ensureAddresses"
|
|
334
|
+
network: "withdrawals.finalize.fetchParams:network"
|
|
332
335
|
},
|
|
333
336
|
readiness: {
|
|
334
|
-
ensureAddresses: "withdrawals.finalize.readiness:ensureAddresses",
|
|
335
337
|
isFinalized: "withdrawals.finalize.readiness:isWithdrawalFinalized",
|
|
336
338
|
simulate: "withdrawals.finalize.readiness:simulate"
|
|
337
339
|
},
|
|
@@ -5269,7 +5271,166 @@ var MailboxABI = [
|
|
|
5269
5271
|
];
|
|
5270
5272
|
var Mailbox_default = MailboxABI;
|
|
5271
5273
|
|
|
5274
|
+
// src/core/errors/error-ops.ts
|
|
5275
|
+
function resolveMessage(op, msg) {
|
|
5276
|
+
if (!msg) return `Error during ${op}.`;
|
|
5277
|
+
return typeof msg === "function" ? msg() : msg;
|
|
5278
|
+
}
|
|
5279
|
+
function createErrorOps(decodeRevert3) {
|
|
5280
|
+
function toZKsyncError3(type, base, err) {
|
|
5281
|
+
if (isZKsyncError(err)) return err;
|
|
5282
|
+
const revert = decodeRevert3 ? decodeRevert3(err) : void 0;
|
|
5283
|
+
return createError(type, { ...base, ...revert ? { revert } : {}, cause: shapeCause(err) });
|
|
5284
|
+
}
|
|
5285
|
+
function createErrorHandlers3(resource) {
|
|
5286
|
+
async function run(kind, operation, fn, opts) {
|
|
5287
|
+
try {
|
|
5288
|
+
return await fn();
|
|
5289
|
+
} catch (e) {
|
|
5290
|
+
if (isZKsyncError(e)) throw e;
|
|
5291
|
+
const message = resolveMessage(operation, opts?.message);
|
|
5292
|
+
throw toZKsyncError3(kind, { resource, operation, context: opts?.ctx ?? {}, message }, e);
|
|
5293
|
+
}
|
|
5294
|
+
}
|
|
5295
|
+
function wrap3(operation, fn, opts) {
|
|
5296
|
+
return run("INTERNAL", operation, fn, opts);
|
|
5297
|
+
}
|
|
5298
|
+
function wrapAs10(kind, operation, fn, opts) {
|
|
5299
|
+
return run(kind, operation, fn, opts);
|
|
5300
|
+
}
|
|
5301
|
+
async function toResult2(operation, fn, opts) {
|
|
5302
|
+
try {
|
|
5303
|
+
const value = await wrap3(operation, fn, opts);
|
|
5304
|
+
return { ok: true, value };
|
|
5305
|
+
} catch (e) {
|
|
5306
|
+
const shaped = isZKsyncError(e) ? e : toZKsyncError3(
|
|
5307
|
+
"INTERNAL",
|
|
5308
|
+
{
|
|
5309
|
+
resource,
|
|
5310
|
+
operation,
|
|
5311
|
+
context: opts?.ctx ?? {},
|
|
5312
|
+
message: resolveMessage(operation, opts?.message)
|
|
5313
|
+
},
|
|
5314
|
+
e
|
|
5315
|
+
);
|
|
5316
|
+
return { ok: false, error: shaped };
|
|
5317
|
+
}
|
|
5318
|
+
}
|
|
5319
|
+
return { wrap: wrap3, wrapAs: wrapAs10, toResult: toResult2 };
|
|
5320
|
+
}
|
|
5321
|
+
return { toZKsyncError: toZKsyncError3, createErrorHandlers: createErrorHandlers3 };
|
|
5322
|
+
}
|
|
5323
|
+
|
|
5324
|
+
// src/core/errors/withdrawal-revert-map.ts
|
|
5325
|
+
var REVERT_TO_READINESS = {
|
|
5326
|
+
// Already done
|
|
5327
|
+
WithdrawalAlreadyFinalized: { kind: "FINALIZED" },
|
|
5328
|
+
// Temporary — try later
|
|
5329
|
+
BatchNotExecuted: { kind: "NOT_READY", reason: "batch-not-executed" },
|
|
5330
|
+
LocalRootIsZero: { kind: "NOT_READY", reason: "root-missing" },
|
|
5331
|
+
// Permanent — won’t become ready for this tx
|
|
5332
|
+
WrongL2Sender: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5333
|
+
InvalidSelector: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5334
|
+
L2WithdrawalMessageWrongLength: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5335
|
+
WrongMsgLength: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5336
|
+
TokenNotLegacy: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5337
|
+
TokenIsLegacy: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5338
|
+
InvalidProof: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5339
|
+
InvalidChainId: { kind: "UNFINALIZABLE", reason: "invalid-chain" },
|
|
5340
|
+
NotSettlementLayer: { kind: "UNFINALIZABLE", reason: "settlement-layer" },
|
|
5341
|
+
// Likely environment mismatch — treat as permanent for this tx
|
|
5342
|
+
OnlyEraSupported: { kind: "UNFINALIZABLE", reason: "unsupported" },
|
|
5343
|
+
LocalRootMustBeZero: { kind: "UNFINALIZABLE", reason: "unsupported" }
|
|
5344
|
+
};
|
|
5345
|
+
|
|
5346
|
+
// src/adapters/ethers/errors/revert.ts
|
|
5347
|
+
var ERROR_IFACES = [];
|
|
5348
|
+
var IFACE_ERROR_STRING = new ethers.Interface(["error Error(string)"]);
|
|
5349
|
+
var IFACE_PANIC = new ethers.Interface(["error Panic(uint256)"]);
|
|
5350
|
+
(function bootstrapDefaultIfaces() {
|
|
5351
|
+
try {
|
|
5352
|
+
ERROR_IFACES.push({
|
|
5353
|
+
name: "IL1Nullifier",
|
|
5354
|
+
iface: new ethers.Interface(IL1Nullifier_default)
|
|
5355
|
+
});
|
|
5356
|
+
} catch {
|
|
5357
|
+
}
|
|
5358
|
+
try {
|
|
5359
|
+
ERROR_IFACES.push({ name: "IERC20", iface: new ethers.Interface(IERC20_default) });
|
|
5360
|
+
} catch {
|
|
5361
|
+
}
|
|
5362
|
+
try {
|
|
5363
|
+
ERROR_IFACES.push({
|
|
5364
|
+
name: "IL1NativeTokenVault",
|
|
5365
|
+
iface: new ethers.Interface(L1NativeTokenVault_default)
|
|
5366
|
+
});
|
|
5367
|
+
} catch {
|
|
5368
|
+
}
|
|
5369
|
+
try {
|
|
5370
|
+
ERROR_IFACES.push({
|
|
5371
|
+
name: "IL2NativeTokenVault",
|
|
5372
|
+
iface: new ethers.Interface(L2NativeTokenVault_default)
|
|
5373
|
+
});
|
|
5374
|
+
} catch {
|
|
5375
|
+
}
|
|
5376
|
+
try {
|
|
5377
|
+
ERROR_IFACES.push({ name: "Mailbox", iface: new ethers.Interface(Mailbox_default) });
|
|
5378
|
+
} catch {
|
|
5379
|
+
}
|
|
5380
|
+
})();
|
|
5381
|
+
function extractRevertData(e) {
|
|
5382
|
+
const maybe = (
|
|
5383
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
5384
|
+
e?.data?.data ?? e?.error?.data ?? e?.data ?? e?.error?.error?.data ?? e?.info?.error?.data
|
|
5385
|
+
);
|
|
5386
|
+
if (typeof maybe === "string" && maybe.startsWith("0x") && maybe.length >= 10) {
|
|
5387
|
+
return maybe;
|
|
5388
|
+
}
|
|
5389
|
+
return void 0;
|
|
5390
|
+
}
|
|
5391
|
+
function decodeRevert(e) {
|
|
5392
|
+
const data = extractRevertData(e);
|
|
5393
|
+
if (!data) return;
|
|
5394
|
+
const selector = `0x${data.slice(2, 10)}`;
|
|
5395
|
+
try {
|
|
5396
|
+
const parsed = IFACE_ERROR_STRING.parseError(data);
|
|
5397
|
+
if (parsed?.name === "Error") {
|
|
5398
|
+
const args = parsed.args ? Array.from(parsed.args) : void 0;
|
|
5399
|
+
return { selector, name: "Error", args };
|
|
5400
|
+
}
|
|
5401
|
+
} catch {
|
|
5402
|
+
}
|
|
5403
|
+
try {
|
|
5404
|
+
const parsed = IFACE_PANIC.parseError(data);
|
|
5405
|
+
if (parsed?.name === "Panic") {
|
|
5406
|
+
const args = parsed.args ? Array.from(parsed.args) : void 0;
|
|
5407
|
+
return { selector, name: "Panic", args };
|
|
5408
|
+
}
|
|
5409
|
+
} catch {
|
|
5410
|
+
}
|
|
5411
|
+
for (const { name, iface } of ERROR_IFACES) {
|
|
5412
|
+
try {
|
|
5413
|
+
const parsed = iface.parseError(data);
|
|
5414
|
+
if (parsed) {
|
|
5415
|
+
const args = parsed.args ? Array.from(parsed.args) : void 0;
|
|
5416
|
+
return {
|
|
5417
|
+
selector,
|
|
5418
|
+
name: parsed.name,
|
|
5419
|
+
args,
|
|
5420
|
+
contract: name
|
|
5421
|
+
};
|
|
5422
|
+
}
|
|
5423
|
+
} catch {
|
|
5424
|
+
}
|
|
5425
|
+
}
|
|
5426
|
+
return { selector };
|
|
5427
|
+
}
|
|
5428
|
+
|
|
5429
|
+
// src/adapters/ethers/errors/error-ops.ts
|
|
5430
|
+
var { createErrorHandlers } = createErrorOps(decodeRevert);
|
|
5431
|
+
|
|
5272
5432
|
// src/adapters/viem/client.ts
|
|
5433
|
+
var { wrap } = createErrorHandlers("client");
|
|
5273
5434
|
function createViemClient(args) {
|
|
5274
5435
|
const { l1, l2, l1Wallet, l2Wallet } = args;
|
|
5275
5436
|
if (!l1Wallet.account) {
|
|
@@ -5281,35 +5442,44 @@ function createViemClient(args) {
|
|
|
5281
5442
|
let cCache;
|
|
5282
5443
|
async function ensureAddresses() {
|
|
5283
5444
|
if (addrCache) return addrCache;
|
|
5284
|
-
|
|
5285
|
-
|
|
5286
|
-
|
|
5287
|
-
|
|
5288
|
-
|
|
5289
|
-
|
|
5290
|
-
|
|
5291
|
-
|
|
5292
|
-
|
|
5293
|
-
|
|
5294
|
-
|
|
5295
|
-
|
|
5296
|
-
|
|
5297
|
-
|
|
5298
|
-
|
|
5299
|
-
|
|
5300
|
-
|
|
5301
|
-
|
|
5302
|
-
|
|
5303
|
-
|
|
5304
|
-
|
|
5305
|
-
|
|
5306
|
-
|
|
5307
|
-
|
|
5308
|
-
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
|
|
5312
|
-
|
|
5445
|
+
return await wrap(
|
|
5446
|
+
OP_CLIENT.ensureAddresses,
|
|
5447
|
+
async () => {
|
|
5448
|
+
const bridgehub = args.overrides?.bridgehub ?? await zks.getBridgehubAddress();
|
|
5449
|
+
const l1AssetRouter = args.overrides?.l1AssetRouter ?? await l1.readContract({
|
|
5450
|
+
address: bridgehub,
|
|
5451
|
+
abi: IBridgehub_default,
|
|
5452
|
+
functionName: "assetRouter"
|
|
5453
|
+
});
|
|
5454
|
+
const l1Nullifier = args.overrides?.l1Nullifier ?? await l1.readContract({
|
|
5455
|
+
address: l1AssetRouter,
|
|
5456
|
+
abi: IL1AssetRouter_default,
|
|
5457
|
+
functionName: "L1_NULLIFIER"
|
|
5458
|
+
});
|
|
5459
|
+
const l1NativeTokenVault = args.overrides?.l1NativeTokenVault ?? await l1.readContract({
|
|
5460
|
+
address: l1Nullifier,
|
|
5461
|
+
abi: IL1Nullifier_default,
|
|
5462
|
+
functionName: "l1NativeTokenVault"
|
|
5463
|
+
});
|
|
5464
|
+
const l2AssetRouter = args.overrides?.l2AssetRouter ?? L2_ASSET_ROUTER_ADDRESS;
|
|
5465
|
+
const l2NativeTokenVault = args.overrides?.l2NativeTokenVault ?? L2_NATIVE_TOKEN_VAULT_ADDRESS;
|
|
5466
|
+
const l2BaseTokenSystem = args.overrides?.l2BaseTokenSystem ?? L2_BASE_TOKEN_ADDRESS;
|
|
5467
|
+
addrCache = {
|
|
5468
|
+
bridgehub,
|
|
5469
|
+
l1AssetRouter,
|
|
5470
|
+
l1Nullifier,
|
|
5471
|
+
l1NativeTokenVault,
|
|
5472
|
+
l2AssetRouter,
|
|
5473
|
+
l2NativeTokenVault,
|
|
5474
|
+
l2BaseTokenSystem
|
|
5475
|
+
};
|
|
5476
|
+
return addrCache;
|
|
5477
|
+
},
|
|
5478
|
+
{
|
|
5479
|
+
ctx: { where: "ensureAddresses" },
|
|
5480
|
+
message: "Failed to ensure contract addresses."
|
|
5481
|
+
}
|
|
5482
|
+
);
|
|
5313
5483
|
}
|
|
5314
5484
|
async function contracts() {
|
|
5315
5485
|
if (cCache) return cCache;
|
|
@@ -5378,6 +5548,12 @@ function createViemClient(args) {
|
|
|
5378
5548
|
};
|
|
5379
5549
|
}
|
|
5380
5550
|
|
|
5551
|
+
// src/core/types/fees.ts
|
|
5552
|
+
function toGasOverrides(overrides) {
|
|
5553
|
+
const { nonce: _, ...gas } = overrides;
|
|
5554
|
+
return gas;
|
|
5555
|
+
}
|
|
5556
|
+
|
|
5381
5557
|
// src/adapters/viem/resources/deposits/context.ts
|
|
5382
5558
|
async function commonCtx(p, client, tokens, contracts) {
|
|
5383
5559
|
const { bridgehub, l1AssetRouter } = await contracts.addresses();
|
|
@@ -5412,7 +5588,7 @@ async function commonCtx(p, client, tokens, contracts) {
|
|
|
5412
5588
|
bridgehub,
|
|
5413
5589
|
chainIdL2: BigInt(chainId),
|
|
5414
5590
|
sender,
|
|
5415
|
-
gasOverrides: p.l1TxOverrides,
|
|
5591
|
+
gasOverrides: p.l1TxOverrides ? toGasOverrides(p.l1TxOverrides) : void 0,
|
|
5416
5592
|
l2GasLimit: p.l2GasLimit,
|
|
5417
5593
|
gasPerPubdata,
|
|
5418
5594
|
operatorTip,
|
|
@@ -5468,80 +5644,6 @@ function buildDirectRequestStruct(args) {
|
|
|
5468
5644
|
refundRecipient: args.refundRecipient
|
|
5469
5645
|
};
|
|
5470
5646
|
}
|
|
5471
|
-
|
|
5472
|
-
// src/core/errors/error-ops.ts
|
|
5473
|
-
function resolveMessage(op, msg) {
|
|
5474
|
-
if (!msg) return `Error during ${op}.`;
|
|
5475
|
-
return typeof msg === "function" ? msg() : msg;
|
|
5476
|
-
}
|
|
5477
|
-
function createErrorOps(decodeRevert2) {
|
|
5478
|
-
function toZKsyncError2(type, base, err) {
|
|
5479
|
-
if (isZKsyncError(err)) return err;
|
|
5480
|
-
const revert = decodeRevert2 ? decodeRevert2(err) : void 0;
|
|
5481
|
-
return createError(type, { ...base, ...revert ? { revert } : {}, cause: shapeCause(err) });
|
|
5482
|
-
}
|
|
5483
|
-
function createErrorHandlers2(resource) {
|
|
5484
|
-
async function run(kind, operation, fn, opts) {
|
|
5485
|
-
try {
|
|
5486
|
-
return await fn();
|
|
5487
|
-
} catch (e) {
|
|
5488
|
-
if (isZKsyncError(e)) throw e;
|
|
5489
|
-
const message = resolveMessage(operation, opts?.message);
|
|
5490
|
-
throw toZKsyncError2(kind, { resource, operation, context: opts?.ctx ?? {}, message }, e);
|
|
5491
|
-
}
|
|
5492
|
-
}
|
|
5493
|
-
function wrap2(operation, fn, opts) {
|
|
5494
|
-
return run("INTERNAL", operation, fn, opts);
|
|
5495
|
-
}
|
|
5496
|
-
function wrapAs10(kind, operation, fn, opts) {
|
|
5497
|
-
return run(kind, operation, fn, opts);
|
|
5498
|
-
}
|
|
5499
|
-
async function toResult2(operation, fn, opts) {
|
|
5500
|
-
try {
|
|
5501
|
-
const value = await wrap2(operation, fn, opts);
|
|
5502
|
-
return { ok: true, value };
|
|
5503
|
-
} catch (e) {
|
|
5504
|
-
const shaped = isZKsyncError(e) ? e : toZKsyncError2(
|
|
5505
|
-
"INTERNAL",
|
|
5506
|
-
{
|
|
5507
|
-
resource,
|
|
5508
|
-
operation,
|
|
5509
|
-
context: opts?.ctx ?? {},
|
|
5510
|
-
message: resolveMessage(operation, opts?.message)
|
|
5511
|
-
},
|
|
5512
|
-
e
|
|
5513
|
-
);
|
|
5514
|
-
return { ok: false, error: shaped };
|
|
5515
|
-
}
|
|
5516
|
-
}
|
|
5517
|
-
return { wrap: wrap2, wrapAs: wrapAs10, toResult: toResult2 };
|
|
5518
|
-
}
|
|
5519
|
-
return { toZKsyncError: toZKsyncError2, createErrorHandlers: createErrorHandlers2 };
|
|
5520
|
-
}
|
|
5521
|
-
|
|
5522
|
-
// src/core/errors/withdrawal-revert-map.ts
|
|
5523
|
-
var REVERT_TO_READINESS = {
|
|
5524
|
-
// Already done
|
|
5525
|
-
WithdrawalAlreadyFinalized: { kind: "FINALIZED" },
|
|
5526
|
-
// Temporary — try later
|
|
5527
|
-
BatchNotExecuted: { kind: "NOT_READY", reason: "batch-not-executed" },
|
|
5528
|
-
LocalRootIsZero: { kind: "NOT_READY", reason: "root-missing" },
|
|
5529
|
-
// Permanent — won’t become ready for this tx
|
|
5530
|
-
WrongL2Sender: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5531
|
-
InvalidSelector: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5532
|
-
L2WithdrawalMessageWrongLength: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5533
|
-
WrongMsgLength: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5534
|
-
TokenNotLegacy: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5535
|
-
TokenIsLegacy: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5536
|
-
InvalidProof: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5537
|
-
InvalidChainId: { kind: "UNFINALIZABLE", reason: "invalid-chain" },
|
|
5538
|
-
NotSettlementLayer: { kind: "UNFINALIZABLE", reason: "settlement-layer" },
|
|
5539
|
-
// Likely environment mismatch — treat as permanent for this tx
|
|
5540
|
-
OnlyEraSupported: { kind: "UNFINALIZABLE", reason: "unsupported" },
|
|
5541
|
-
LocalRootMustBeZero: { kind: "UNFINALIZABLE", reason: "unsupported" }
|
|
5542
|
-
};
|
|
5543
|
-
|
|
5544
|
-
// src/adapters/viem/errors/revert.ts
|
|
5545
5647
|
var ERROR_ABIS = [];
|
|
5546
5648
|
var ABI_ERROR_STRING = [
|
|
5547
5649
|
{ type: "error", name: "Error", inputs: [{ name: "message", type: "string" }] }
|
|
@@ -5577,7 +5679,7 @@ function registerErrorAbi(name, abi) {
|
|
|
5577
5679
|
if (i >= 0) ERROR_ABIS[i] = entry;
|
|
5578
5680
|
else ERROR_ABIS.push(entry);
|
|
5579
5681
|
}
|
|
5580
|
-
function
|
|
5682
|
+
function extractRevertData2(e) {
|
|
5581
5683
|
const candidates = [
|
|
5582
5684
|
e?.data?.data,
|
|
5583
5685
|
e?.error?.data,
|
|
@@ -5595,8 +5697,8 @@ function extractRevertData(e) {
|
|
|
5595
5697
|
}
|
|
5596
5698
|
return void 0;
|
|
5597
5699
|
}
|
|
5598
|
-
function
|
|
5599
|
-
const data =
|
|
5700
|
+
function decodeRevert2(e) {
|
|
5701
|
+
const data = extractRevertData2(e);
|
|
5600
5702
|
if (!data) return;
|
|
5601
5703
|
const selector = `0x${data.slice(2, 10)}`;
|
|
5602
5704
|
try {
|
|
@@ -5630,7 +5732,7 @@ function decodeRevert(e) {
|
|
|
5630
5732
|
return { selector };
|
|
5631
5733
|
}
|
|
5632
5734
|
function classifyReadinessFromRevert(e) {
|
|
5633
|
-
const r =
|
|
5735
|
+
const r = decodeRevert2(e);
|
|
5634
5736
|
const name = r?.name;
|
|
5635
5737
|
if (name && REVERT_TO_READINESS[name]) return REVERT_TO_READINESS[name];
|
|
5636
5738
|
const msg = (() => {
|
|
@@ -5648,7 +5750,7 @@ function classifyReadinessFromRevert(e) {
|
|
|
5648
5750
|
}
|
|
5649
5751
|
|
|
5650
5752
|
// src/adapters/viem/errors/error-ops.ts
|
|
5651
|
-
var { toZKsyncError, createErrorHandlers } = createErrorOps(
|
|
5753
|
+
var { toZKsyncError: toZKsyncError2, createErrorHandlers: createErrorHandlers2 } = createErrorOps(decodeRevert2);
|
|
5652
5754
|
|
|
5653
5755
|
// src/core/resources/deposits/gas.ts
|
|
5654
5756
|
function makeGasQuote(p) {
|
|
@@ -5911,7 +6013,7 @@ async function determineErc20L2Gas(input) {
|
|
|
5911
6013
|
}
|
|
5912
6014
|
|
|
5913
6015
|
// src/adapters/viem/resources/deposits/services/fee.ts
|
|
5914
|
-
var { wrapAs } =
|
|
6016
|
+
var { wrapAs } = createErrorHandlers2("deposits");
|
|
5915
6017
|
async function quoteL2BaseCost(input) {
|
|
5916
6018
|
const { ctx, l2GasLimit } = input;
|
|
5917
6019
|
const estimator = viemToGasEstimator(ctx.client.l1);
|
|
@@ -5961,7 +6063,7 @@ function buildFeeBreakdown(p) {
|
|
|
5961
6063
|
}
|
|
5962
6064
|
|
|
5963
6065
|
// src/adapters/viem/resources/deposits/routes/eth.ts
|
|
5964
|
-
var { wrapAs: wrapAs2 } =
|
|
6066
|
+
var { wrapAs: wrapAs2 } = createErrorHandlers2("deposits");
|
|
5965
6067
|
function routeEthDirect() {
|
|
5966
6068
|
return {
|
|
5967
6069
|
async build(p, ctx) {
|
|
@@ -6055,7 +6157,7 @@ function routeEthDirect() {
|
|
|
6055
6157
|
}
|
|
6056
6158
|
};
|
|
6057
6159
|
}
|
|
6058
|
-
var { wrapAs: wrapAs3 } =
|
|
6160
|
+
var { wrapAs: wrapAs3 } = createErrorHandlers2("deposits");
|
|
6059
6161
|
function routeErc20NonBase() {
|
|
6060
6162
|
return {
|
|
6061
6163
|
// TODO: do we even need these validations?
|
|
@@ -6282,7 +6384,7 @@ function routeErc20NonBase() {
|
|
|
6282
6384
|
}
|
|
6283
6385
|
};
|
|
6284
6386
|
}
|
|
6285
|
-
var { wrapAs: wrapAs4 } =
|
|
6387
|
+
var { wrapAs: wrapAs4 } = createErrorHandlers2("deposits");
|
|
6286
6388
|
function routeEthNonBase() {
|
|
6287
6389
|
return {
|
|
6288
6390
|
// TODO: do we even need these validations?
|
|
@@ -6493,7 +6595,7 @@ function routeEthNonBase() {
|
|
|
6493
6595
|
}
|
|
6494
6596
|
};
|
|
6495
6597
|
}
|
|
6496
|
-
var { wrapAs: wrapAs5 } =
|
|
6598
|
+
var { wrapAs: wrapAs5 } = createErrorHandlers2("deposits");
|
|
6497
6599
|
function routeErc20Base() {
|
|
6498
6600
|
return {
|
|
6499
6601
|
async preflight(p, ctx) {
|
|
@@ -6681,7 +6783,7 @@ var I_BRIDGEHUB_NEW_PRIORITY_REQUEST = {
|
|
|
6681
6783
|
{ name: "data", type: "bytes", indexed: false }
|
|
6682
6784
|
]
|
|
6683
6785
|
};
|
|
6684
|
-
function
|
|
6786
|
+
function getL2TransactionHashFromLogs(logs) {
|
|
6685
6787
|
for (const lg of logs) {
|
|
6686
6788
|
try {
|
|
6687
6789
|
const parsed = viem.decodeEventLog({
|
|
@@ -6713,7 +6815,7 @@ function extractL2TxHashFromL1Logs(logs) {
|
|
|
6713
6815
|
async function waitForL2ExecutionFromL1Tx(l1, l2, l1TxHash) {
|
|
6714
6816
|
const l1Receipt = await l1.waitForTransactionReceipt({ hash: l1TxHash });
|
|
6715
6817
|
if (!l1Receipt) throw new Error("No L1 receipt found");
|
|
6716
|
-
const l2TxHash =
|
|
6818
|
+
const l2TxHash = getL2TransactionHashFromLogs(l1Receipt.logs);
|
|
6717
6819
|
if (!l2TxHash) {
|
|
6718
6820
|
throw createError("VERIFICATION", {
|
|
6719
6821
|
message: "Failed to extract L2 transaction hash from L1 logs",
|
|
@@ -6761,7 +6863,7 @@ function createNTVCodec(deps) {
|
|
|
6761
6863
|
}
|
|
6762
6864
|
|
|
6763
6865
|
// src/adapters/viem/resources/tokens/tokens.ts
|
|
6764
|
-
var { wrapAs: wrapAs6 } =
|
|
6866
|
+
var { wrapAs: wrapAs6 } = createErrorHandlers2("tokens");
|
|
6765
6867
|
var ntvCodec = createNTVCodec({
|
|
6766
6868
|
encode: (types, values) => viem.encodeAbiParameters(
|
|
6767
6869
|
types.map((t, i) => ({ type: t, name: `arg${i}` })),
|
|
@@ -7017,7 +7119,7 @@ function createContractsResource(client) {
|
|
|
7017
7119
|
}
|
|
7018
7120
|
|
|
7019
7121
|
// src/adapters/viem/resources/deposits/index.ts
|
|
7020
|
-
var { wrap, toResult } =
|
|
7122
|
+
var { wrap: wrap2, toResult } = createErrorHandlers2("deposits");
|
|
7021
7123
|
var ROUTES = {
|
|
7022
7124
|
"eth-base": routeEthDirect(),
|
|
7023
7125
|
"eth-nonbase": routeEthNonBase(),
|
|
@@ -7048,7 +7150,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7048
7150
|
steps
|
|
7049
7151
|
};
|
|
7050
7152
|
}
|
|
7051
|
-
const quote = async (p) =>
|
|
7153
|
+
const quote = async (p) => wrap2(
|
|
7052
7154
|
OP_DEPOSITS.quote,
|
|
7053
7155
|
async () => {
|
|
7054
7156
|
const plan = await buildPlan(p);
|
|
@@ -7063,20 +7165,26 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7063
7165
|
message: "Internal error while preparing a deposit quote.",
|
|
7064
7166
|
ctx: { token: p.token, where: "deposits.tryQuote" }
|
|
7065
7167
|
});
|
|
7066
|
-
const prepare = (p) =>
|
|
7168
|
+
const prepare = (p) => wrap2(OP_DEPOSITS.prepare, () => buildPlan(p), {
|
|
7067
7169
|
message: "Internal error while preparing a deposit plan.",
|
|
7068
7170
|
ctx: { token: p.token, where: "deposits.prepare" }
|
|
7069
7171
|
});
|
|
7070
7172
|
const tryPrepare = (p) => toResult(OP_DEPOSITS.tryPrepare, () => prepare(p), {
|
|
7071
7173
|
ctx: { token: p.token, where: "deposits.tryPrepare" }
|
|
7072
7174
|
});
|
|
7073
|
-
const create = (p) =>
|
|
7175
|
+
const create = (p) => wrap2(
|
|
7074
7176
|
OP_DEPOSITS.create,
|
|
7075
7177
|
async () => {
|
|
7076
7178
|
const plan = await prepare(p);
|
|
7077
7179
|
const stepHashes = {};
|
|
7078
7180
|
const from = client.account.address;
|
|
7079
|
-
let next
|
|
7181
|
+
let next;
|
|
7182
|
+
if (typeof p.l1TxOverrides?.nonce === "number") {
|
|
7183
|
+
next = p.l1TxOverrides.nonce;
|
|
7184
|
+
} else {
|
|
7185
|
+
const blockTag = p.l1TxOverrides?.nonce ?? "latest";
|
|
7186
|
+
next = await client.l1.getTransactionCount({ address: from, blockTag });
|
|
7187
|
+
}
|
|
7080
7188
|
for (const step of plan.steps) {
|
|
7081
7189
|
if (step.kind === "approve") {
|
|
7082
7190
|
try {
|
|
@@ -7094,7 +7202,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7094
7202
|
continue;
|
|
7095
7203
|
}
|
|
7096
7204
|
} catch (e) {
|
|
7097
|
-
throw
|
|
7205
|
+
throw toZKsyncError2(
|
|
7098
7206
|
"CONTRACT",
|
|
7099
7207
|
{
|
|
7100
7208
|
resource: "deposits",
|
|
@@ -7175,7 +7283,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7175
7283
|
}
|
|
7176
7284
|
} catch (e) {
|
|
7177
7285
|
if (isZKsyncError(e)) throw e;
|
|
7178
|
-
throw
|
|
7286
|
+
throw toZKsyncError2(
|
|
7179
7287
|
"EXECUTION",
|
|
7180
7288
|
{
|
|
7181
7289
|
resource: "deposits",
|
|
@@ -7200,7 +7308,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7200
7308
|
message: "Internal error while creating a deposit.",
|
|
7201
7309
|
ctx: { token: p.token, amount: p.amount, to: p.to, where: "deposits.tryCreate" }
|
|
7202
7310
|
});
|
|
7203
|
-
const status = (h) =>
|
|
7311
|
+
const status = (h) => wrap2(
|
|
7204
7312
|
OP_DEPOSITS.status,
|
|
7205
7313
|
async () => {
|
|
7206
7314
|
const l1TxHash = typeof h === "string" ? h : h.l1TxHash;
|
|
@@ -7209,7 +7317,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7209
7317
|
try {
|
|
7210
7318
|
l1Rcpt = await client.l1.getTransactionReceipt({ hash: l1TxHash });
|
|
7211
7319
|
} catch (e) {
|
|
7212
|
-
throw
|
|
7320
|
+
throw toZKsyncError2(
|
|
7213
7321
|
"RPC",
|
|
7214
7322
|
{
|
|
7215
7323
|
resource: "deposits",
|
|
@@ -7223,14 +7331,14 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7223
7331
|
if (!l1Rcpt) return { phase: "L1_PENDING", l1TxHash };
|
|
7224
7332
|
let l2TxHash;
|
|
7225
7333
|
try {
|
|
7226
|
-
l2TxHash =
|
|
7334
|
+
l2TxHash = getL2TransactionHashFromLogs(l1Rcpt.logs) ?? void 0;
|
|
7227
7335
|
} catch (e) {
|
|
7228
|
-
throw
|
|
7336
|
+
throw toZKsyncError2(
|
|
7229
7337
|
"INTERNAL",
|
|
7230
7338
|
{
|
|
7231
7339
|
resource: "deposits",
|
|
7232
|
-
operation: "deposits.status.
|
|
7233
|
-
context: { where: "
|
|
7340
|
+
operation: "deposits.status.getL2TransactionHashFromLogs",
|
|
7341
|
+
context: { where: "getL2TransactionHashFromLogs", l1TxHash },
|
|
7234
7342
|
message: "Failed to derive L2 transaction hash from L1 logs."
|
|
7235
7343
|
},
|
|
7236
7344
|
e
|
|
@@ -7244,7 +7352,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7244
7352
|
if (isReceiptNotFound(e)) {
|
|
7245
7353
|
return { phase: "L2_PENDING", l1TxHash, l2TxHash };
|
|
7246
7354
|
}
|
|
7247
|
-
throw
|
|
7355
|
+
throw toZKsyncError2(
|
|
7248
7356
|
"RPC",
|
|
7249
7357
|
{
|
|
7250
7358
|
resource: "deposits",
|
|
@@ -7264,7 +7372,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7264
7372
|
ctx: { input: h, where: "deposits.status" }
|
|
7265
7373
|
}
|
|
7266
7374
|
);
|
|
7267
|
-
const wait = (h, opts) =>
|
|
7375
|
+
const wait = (h, opts) => wrap2(
|
|
7268
7376
|
OP_DEPOSITS.wait,
|
|
7269
7377
|
async () => {
|
|
7270
7378
|
const l1Hash = typeof h === "string" ? h : "l1TxHash" in h ? h.l1TxHash : void 0;
|
|
@@ -7273,7 +7381,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7273
7381
|
try {
|
|
7274
7382
|
l1Receipt = await client.l1.waitForTransactionReceipt({ hash: l1Hash });
|
|
7275
7383
|
} catch (e) {
|
|
7276
|
-
throw
|
|
7384
|
+
throw toZKsyncError2(
|
|
7277
7385
|
"RPC",
|
|
7278
7386
|
{
|
|
7279
7387
|
resource: "deposits",
|
|
@@ -7291,7 +7399,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7291
7399
|
return l2Receipt ?? null;
|
|
7292
7400
|
} catch (e) {
|
|
7293
7401
|
if (isZKsyncError(e)) throw e;
|
|
7294
|
-
throw
|
|
7402
|
+
throw toZKsyncError2(
|
|
7295
7403
|
"INTERNAL",
|
|
7296
7404
|
{
|
|
7297
7405
|
resource: "deposits",
|
|
@@ -7379,7 +7487,7 @@ async function commonCtx2(p, client, tokens, contracts) {
|
|
|
7379
7487
|
l2NativeTokenVault,
|
|
7380
7488
|
l2BaseTokenSystem,
|
|
7381
7489
|
baseIsEth,
|
|
7382
|
-
gasOverrides: p.l2TxOverrides
|
|
7490
|
+
gasOverrides: p.l2TxOverrides ? toGasOverrides(p.l2TxOverrides) : void 0
|
|
7383
7491
|
};
|
|
7384
7492
|
}
|
|
7385
7493
|
|
|
@@ -7472,7 +7580,7 @@ function buildFeeBreakdown2(p) {
|
|
|
7472
7580
|
}
|
|
7473
7581
|
|
|
7474
7582
|
// src/adapters/viem/resources/withdrawals/routes/eth.ts
|
|
7475
|
-
var { wrapAs: wrapAs7 } =
|
|
7583
|
+
var { wrapAs: wrapAs7 } = createErrorHandlers2("withdrawals");
|
|
7476
7584
|
function routeEthBase() {
|
|
7477
7585
|
return {
|
|
7478
7586
|
async build(p, ctx) {
|
|
@@ -7527,7 +7635,7 @@ function routeEthBase() {
|
|
|
7527
7635
|
}
|
|
7528
7636
|
};
|
|
7529
7637
|
}
|
|
7530
|
-
var { wrapAs: wrapAs8 } =
|
|
7638
|
+
var { wrapAs: wrapAs8 } = createErrorHandlers2("withdrawals");
|
|
7531
7639
|
function routeErc20NonBase2() {
|
|
7532
7640
|
return {
|
|
7533
7641
|
// TODO: add preflight validations here
|
|
@@ -7722,7 +7830,7 @@ function messengerLogIndex(raw, opts) {
|
|
|
7722
7830
|
}
|
|
7723
7831
|
return (hits[index] ?? hits[0]).i;
|
|
7724
7832
|
}
|
|
7725
|
-
var { wrapAs: wrapAs9 } =
|
|
7833
|
+
var { wrapAs: wrapAs9 } = createErrorHandlers2("withdrawals");
|
|
7726
7834
|
var IL1NullifierMini = [
|
|
7727
7835
|
{
|
|
7728
7836
|
type: "function",
|
|
@@ -7829,27 +7937,11 @@ function createFinalizationServices(client) {
|
|
|
7829
7937
|
message,
|
|
7830
7938
|
merkleProof: proof.proof
|
|
7831
7939
|
};
|
|
7832
|
-
const { l1Nullifier } = await
|
|
7833
|
-
"INTERNAL",
|
|
7834
|
-
OP_WITHDRAWALS.finalize.fetchParams.ensureAddresses,
|
|
7835
|
-
() => client.ensureAddresses(),
|
|
7836
|
-
{
|
|
7837
|
-
ctx: { where: "ensureAddresses" },
|
|
7838
|
-
message: "Failed to ensure L1 Nullifier address."
|
|
7839
|
-
}
|
|
7840
|
-
);
|
|
7940
|
+
const { l1Nullifier } = await client.ensureAddresses();
|
|
7841
7941
|
return { params, nullifier: l1Nullifier };
|
|
7842
7942
|
},
|
|
7843
7943
|
async simulateFinalizeReadiness(params) {
|
|
7844
|
-
const { l1Nullifier } = await
|
|
7845
|
-
"INTERNAL",
|
|
7846
|
-
OP_WITHDRAWALS.finalize.readiness.ensureAddresses,
|
|
7847
|
-
() => client.ensureAddresses(),
|
|
7848
|
-
{
|
|
7849
|
-
ctx: { where: "ensureAddresses" },
|
|
7850
|
-
message: "Failed to ensure L1 Nullifier address."
|
|
7851
|
-
}
|
|
7852
|
-
);
|
|
7944
|
+
const { l1Nullifier } = await client.ensureAddresses();
|
|
7853
7945
|
const done = await (async () => {
|
|
7854
7946
|
try {
|
|
7855
7947
|
const result = await wrapAs9(
|
|
@@ -7886,15 +7978,7 @@ function createFinalizationServices(client) {
|
|
|
7886
7978
|
}
|
|
7887
7979
|
},
|
|
7888
7980
|
async isWithdrawalFinalized(key) {
|
|
7889
|
-
const { l1Nullifier } = await
|
|
7890
|
-
"INTERNAL",
|
|
7891
|
-
OP_WITHDRAWALS.finalize.fetchParams.ensureAddresses,
|
|
7892
|
-
() => client.ensureAddresses(),
|
|
7893
|
-
{
|
|
7894
|
-
ctx: { where: "ensureAddresses" },
|
|
7895
|
-
message: "Failed to ensure L1 Nullifier address."
|
|
7896
|
-
}
|
|
7897
|
-
);
|
|
7981
|
+
const { l1Nullifier } = await client.ensureAddresses();
|
|
7898
7982
|
return await wrapAs9(
|
|
7899
7983
|
"RPC",
|
|
7900
7984
|
OP_WITHDRAWALS.finalize.isFinalized,
|
|
@@ -7911,15 +7995,7 @@ function createFinalizationServices(client) {
|
|
|
7911
7995
|
);
|
|
7912
7996
|
},
|
|
7913
7997
|
async estimateFinalization(params) {
|
|
7914
|
-
const { l1Nullifier } = await
|
|
7915
|
-
"INTERNAL",
|
|
7916
|
-
OP_WITHDRAWALS.finalize.estimate,
|
|
7917
|
-
() => client.ensureAddresses(),
|
|
7918
|
-
{
|
|
7919
|
-
ctx: { where: "ensureAddresses" },
|
|
7920
|
-
message: "Failed to ensure L1 Nullifier address."
|
|
7921
|
-
}
|
|
7922
|
-
);
|
|
7998
|
+
const { l1Nullifier } = await client.ensureAddresses();
|
|
7923
7999
|
const gasLimit = await wrapAs9(
|
|
7924
8000
|
"RPC",
|
|
7925
8001
|
OP_WITHDRAWALS.finalize.estimate,
|
|
@@ -7982,15 +8058,7 @@ function createFinalizationServices(client) {
|
|
|
7982
8058
|
};
|
|
7983
8059
|
},
|
|
7984
8060
|
async finalizeDeposit(params) {
|
|
7985
|
-
const { l1Nullifier } = await
|
|
7986
|
-
"INTERNAL",
|
|
7987
|
-
OP_WITHDRAWALS.finalize.fetchParams.ensureAddresses,
|
|
7988
|
-
() => client.ensureAddresses(),
|
|
7989
|
-
{
|
|
7990
|
-
ctx: { where: "ensureAddresses" },
|
|
7991
|
-
message: "Failed to ensure L1 Nullifier address."
|
|
7992
|
-
}
|
|
7993
|
-
);
|
|
8061
|
+
const { l1Nullifier } = await client.ensureAddresses();
|
|
7994
8062
|
try {
|
|
7995
8063
|
const hash = await client.l1Wallet.writeContract({
|
|
7996
8064
|
address: l1Nullifier,
|
|
@@ -8005,7 +8073,7 @@ function createFinalizationServices(client) {
|
|
|
8005
8073
|
try {
|
|
8006
8074
|
return await client.l1.waitForTransactionReceipt({ hash });
|
|
8007
8075
|
} catch (e) {
|
|
8008
|
-
throw
|
|
8076
|
+
throw toZKsyncError2(
|
|
8009
8077
|
"EXECUTION",
|
|
8010
8078
|
{
|
|
8011
8079
|
resource: "withdrawals",
|
|
@@ -8019,7 +8087,7 @@ function createFinalizationServices(client) {
|
|
|
8019
8087
|
}
|
|
8020
8088
|
};
|
|
8021
8089
|
} catch (e) {
|
|
8022
|
-
throw
|
|
8090
|
+
throw toZKsyncError2(
|
|
8023
8091
|
"EXECUTION",
|
|
8024
8092
|
{
|
|
8025
8093
|
resource: "withdrawals",
|
|
@@ -8048,7 +8116,7 @@ var ROUTES2 = {
|
|
|
8048
8116
|
};
|
|
8049
8117
|
function createWithdrawalsResource(client, tokens, contracts) {
|
|
8050
8118
|
const svc = createFinalizationServices(client);
|
|
8051
|
-
const { wrap:
|
|
8119
|
+
const { wrap: wrap3, toResult: toResult2 } = createErrorHandlers2("withdrawals");
|
|
8052
8120
|
const tokensResource = tokens ?? createTokensResource(client);
|
|
8053
8121
|
const contractsResource = contracts ?? createContractsResource(client);
|
|
8054
8122
|
async function buildPlan(p) {
|
|
@@ -8069,7 +8137,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8069
8137
|
};
|
|
8070
8138
|
}
|
|
8071
8139
|
const finalizeCache = /* @__PURE__ */ new Map();
|
|
8072
|
-
const quote = (p) =>
|
|
8140
|
+
const quote = (p) => wrap3(OP_WITHDRAWALS.quote, async () => (await buildPlan(p)).summary, {
|
|
8073
8141
|
message: "Internal error while preparing a withdrawal quote.",
|
|
8074
8142
|
ctx: { token: p.token, where: "withdrawals.quote" }
|
|
8075
8143
|
});
|
|
@@ -8077,7 +8145,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8077
8145
|
message: "Internal error while preparing a withdrawal quote.",
|
|
8078
8146
|
ctx: { token: p.token, where: "withdrawals.tryQuote" }
|
|
8079
8147
|
});
|
|
8080
|
-
const prepare = (p) =>
|
|
8148
|
+
const prepare = (p) => wrap3(OP_WITHDRAWALS.prepare, () => buildPlan(p), {
|
|
8081
8149
|
message: "Internal error while preparing a withdrawal plan.",
|
|
8082
8150
|
ctx: { token: p.token, where: "withdrawals.prepare" }
|
|
8083
8151
|
});
|
|
@@ -8085,12 +8153,20 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8085
8153
|
message: "Internal error while preparing a withdrawal plan.",
|
|
8086
8154
|
ctx: { token: p.token, where: "withdrawals.tryPrepare" }
|
|
8087
8155
|
});
|
|
8088
|
-
const create = (p) =>
|
|
8156
|
+
const create = (p) => wrap3(
|
|
8089
8157
|
OP_WITHDRAWALS.create,
|
|
8090
8158
|
async () => {
|
|
8091
8159
|
const plan = await prepare(p);
|
|
8092
8160
|
const stepHashes = {};
|
|
8093
8161
|
const l2Wallet = client.getL2Wallet();
|
|
8162
|
+
const from = client.account.address;
|
|
8163
|
+
let next;
|
|
8164
|
+
if (typeof p.l2TxOverrides?.nonce === "number") {
|
|
8165
|
+
next = p.l2TxOverrides.nonce;
|
|
8166
|
+
} else {
|
|
8167
|
+
const blockTag = p.l2TxOverrides?.nonce ?? "pending";
|
|
8168
|
+
next = await client.l2.getTransactionCount({ address: from, blockTag });
|
|
8169
|
+
}
|
|
8094
8170
|
for (const step of plan.steps) {
|
|
8095
8171
|
if (p.l2TxOverrides) {
|
|
8096
8172
|
const overrides = p.l2TxOverrides;
|
|
@@ -8124,6 +8200,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8124
8200
|
maxFeePerGas: step.tx.maxFeePerGas,
|
|
8125
8201
|
maxPriorityFeePerGas: step.tx.maxPriorityFeePerGas
|
|
8126
8202
|
} : {};
|
|
8203
|
+
const nonce = next++;
|
|
8127
8204
|
const baseReq = {
|
|
8128
8205
|
address: step.tx.address,
|
|
8129
8206
|
abi: step.tx.abi,
|
|
@@ -8131,6 +8208,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8131
8208
|
args: step.tx.args ?? [],
|
|
8132
8209
|
account: step.tx.account ?? l2Wallet.account ?? client.account,
|
|
8133
8210
|
gas: step.tx.gas,
|
|
8211
|
+
nonce,
|
|
8134
8212
|
...fee1559,
|
|
8135
8213
|
...step.tx.dataSuffix ? { dataSuffix: step.tx.dataSuffix } : {},
|
|
8136
8214
|
...step.tx.chain ? { chain: step.tx.chain } : {}
|
|
@@ -8158,7 +8236,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8158
8236
|
});
|
|
8159
8237
|
}
|
|
8160
8238
|
} catch (e) {
|
|
8161
|
-
throw
|
|
8239
|
+
throw toZKsyncError2(
|
|
8162
8240
|
"EXECUTION",
|
|
8163
8241
|
{
|
|
8164
8242
|
resource: "withdrawals",
|
|
@@ -8183,7 +8261,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8183
8261
|
message: "Internal error while creating withdrawal transactions.",
|
|
8184
8262
|
ctx: { token: p.token, amount: p.amount, to: p.to, where: "withdrawals.tryCreate" }
|
|
8185
8263
|
});
|
|
8186
|
-
const status = (h) =>
|
|
8264
|
+
const status = (h) => wrap3(
|
|
8187
8265
|
OP_WITHDRAWALS.status,
|
|
8188
8266
|
async () => {
|
|
8189
8267
|
const l2TxHash = typeof h === "string" ? h : "l2TxHash" in h && h.l2TxHash ? h.l2TxHash : "0x";
|
|
@@ -8197,7 +8275,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8197
8275
|
if (isReceiptNotFound(e)) {
|
|
8198
8276
|
return { phase: "L2_PENDING", l2TxHash };
|
|
8199
8277
|
}
|
|
8200
|
-
throw
|
|
8278
|
+
throw toZKsyncError2(
|
|
8201
8279
|
"RPC",
|
|
8202
8280
|
{
|
|
8203
8281
|
resource: "withdrawals",
|
|
@@ -8238,7 +8316,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8238
8316
|
const wait = (h, opts = {
|
|
8239
8317
|
for: "l2",
|
|
8240
8318
|
pollMs: 5500
|
|
8241
|
-
}) =>
|
|
8319
|
+
}) => wrap3(
|
|
8242
8320
|
OP_WITHDRAWALS.wait,
|
|
8243
8321
|
async () => {
|
|
8244
8322
|
const l2Hash = typeof h === "string" ? h : "l2TxHash" in h && h.l2TxHash ? h.l2TxHash : "0x";
|
|
@@ -8248,7 +8326,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8248
8326
|
try {
|
|
8249
8327
|
rcpt = await client.l2.waitForTransactionReceipt({ hash: l2Hash });
|
|
8250
8328
|
} catch (e) {
|
|
8251
|
-
throw
|
|
8329
|
+
throw toZKsyncError2(
|
|
8252
8330
|
"RPC",
|
|
8253
8331
|
{
|
|
8254
8332
|
resource: "withdrawals",
|
|
@@ -8307,7 +8385,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8307
8385
|
}
|
|
8308
8386
|
}
|
|
8309
8387
|
);
|
|
8310
|
-
const finalize = (l2TxHash) =>
|
|
8388
|
+
const finalize = (l2TxHash) => wrap3(
|
|
8311
8389
|
OP_WITHDRAWALS.finalize.send,
|
|
8312
8390
|
async () => {
|
|
8313
8391
|
const pack = await (async () => {
|
|
@@ -8436,19 +8514,20 @@ exports.classifyReadinessFromRevert = classifyReadinessFromRevert;
|
|
|
8436
8514
|
exports.createClient = createViemClient;
|
|
8437
8515
|
exports.createContractsResource = createContractsResource;
|
|
8438
8516
|
exports.createDepositsResource = createDepositsResource;
|
|
8439
|
-
exports.createErrorHandlers =
|
|
8517
|
+
exports.createErrorHandlers = createErrorHandlers2;
|
|
8440
8518
|
exports.createFinalizationServices = createFinalizationServices;
|
|
8441
8519
|
exports.createTokensResource = createTokensResource;
|
|
8442
8520
|
exports.createViemClient = createViemClient;
|
|
8443
8521
|
exports.createViemSdk = createViemSdk;
|
|
8444
8522
|
exports.createWithdrawalsResource = createWithdrawalsResource;
|
|
8445
|
-
exports.decodeRevert =
|
|
8523
|
+
exports.decodeRevert = decodeRevert2;
|
|
8446
8524
|
exports.encodeNativeTokenVaultTransferData = encodeNativeTokenVaultTransferData;
|
|
8447
8525
|
exports.encodeSecondBridgeArgs = encodeSecondBridgeArgs;
|
|
8448
8526
|
exports.encodeSecondBridgeDataV1 = encodeSecondBridgeDataV1;
|
|
8449
8527
|
exports.encodeSecondBridgeErc20Args = encodeSecondBridgeErc20Args;
|
|
8450
8528
|
exports.encodeSecondBridgeEthArgs = encodeSecondBridgeEthArgs;
|
|
8529
|
+
exports.getL2TransactionHashFromLogs = getL2TransactionHashFromLogs;
|
|
8451
8530
|
exports.registerErrorAbi = registerErrorAbi;
|
|
8452
|
-
exports.toZKsyncError =
|
|
8531
|
+
exports.toZKsyncError = toZKsyncError2;
|
|
8453
8532
|
//# sourceMappingURL=index.cjs.map
|
|
8454
8533
|
//# sourceMappingURL=index.cjs.map
|