@matterlabs/zksync-js 0.0.7 → 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 +1705 -259
- package/dist/adapters/ethers/client.cjs.map +1 -1
- package/dist/adapters/ethers/client.d.ts +11 -0
- package/dist/adapters/ethers/client.js +6 -6
- package/dist/adapters/ethers/index.cjs +5254 -2335
- package/dist/adapters/ethers/index.cjs.map +1 -1
- package/dist/adapters/ethers/index.d.ts +4 -0
- package/dist/adapters/ethers/index.js +9 -9
- 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 +3384 -931
- package/dist/adapters/ethers/sdk.cjs.map +1 -1
- package/dist/adapters/ethers/sdk.d.ts +10 -8
- package/dist/adapters/ethers/sdk.js +7 -7
- package/dist/adapters/viem/client.cjs +760 -64
- package/dist/adapters/viem/client.cjs.map +1 -1
- package/dist/adapters/viem/client.js +6 -4
- package/dist/adapters/viem/index.cjs +404 -276
- package/dist/adapters/viem/index.cjs.map +1 -1
- package/dist/adapters/viem/index.d.ts +1 -0
- package/dist/adapters/viem/index.js +9 -8
- 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 +84 -92
- package/dist/adapters/viem/sdk.cjs.map +1 -1
- package/dist/adapters/viem/sdk.js +6 -6
- package/dist/{chunk-KRIRXY74.js → chunk-5AG6B7UX.js} +38 -63
- package/dist/{chunk-NNFWIAVG.js → chunk-AIFHAPJC.js} +9 -3
- package/dist/{chunk-NCR42O6O.js → chunk-C3AGOEHR.js} +11 -1
- package/dist/{chunk-GIXLOHLK.js → chunk-FBKBF7YM.js} +1534 -12
- package/dist/{chunk-VRL6Y4YJ.js → chunk-IYEDEUXG.js} +1 -1
- package/dist/chunk-JNWHQJU3.js +209 -0
- package/dist/{chunk-7VP6742W.js → chunk-KLNFDFLA.js} +43 -32
- package/dist/{chunk-GNERKUWO.js → chunk-QDJOEVGJ.js} +2 -2
- package/dist/{chunk-EWLA4NUE.js → chunk-RRKVUW3G.js} +1377 -78
- package/dist/{chunk-KAMEGD6I.js → chunk-SRPKTXIF.js} +1 -1
- package/dist/{chunk-WY36Z6YB.js → chunk-UIXU35ZU.js} +57 -19
- package/dist/{chunk-P5PIWVEO.js → chunk-ZVHFVUDE.js} +14 -26
- package/dist/core/abi.d.ts +5 -0
- package/dist/core/constants.cjs +10 -0
- package/dist/core/constants.cjs.map +1 -1
- package/dist/core/constants.d.ts +10 -0
- package/dist/core/constants.js +1 -1
- package/dist/core/index.cjs +1676 -186
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.js +5 -5
- package/dist/core/internal/abis/IERC7786Attributes.d.ts +42 -0
- package/dist/core/internal/abis/IInteropCenter.d.ts +211 -0
- package/dist/core/internal/abis/IInteropHandler.d.ts +166 -0
- package/dist/core/internal/abis/InteropCenter.d.ts +578 -0
- package/dist/core/internal/abis/InteropRootStorage.d.ts +20 -0
- package/dist/core/internal/abis/L2MessageVerification.d.ts +277 -0
- package/dist/core/resources/interop/attributes/bundle.d.ts +6 -0
- package/dist/core/resources/interop/attributes/call.d.ts +6 -0
- package/dist/core/resources/interop/attributes/index.d.ts +4 -0
- package/dist/core/resources/interop/attributes/resource.d.ts +12 -0
- package/dist/core/resources/interop/attributes/types.d.ts +4 -0
- package/dist/core/resources/interop/events.d.ts +7 -0
- package/dist/core/resources/interop/finalization.d.ts +60 -0
- package/dist/core/resources/interop/plan.d.ts +39 -0
- package/dist/core/resources/interop/route.d.ts +15 -0
- package/dist/core/rpc/types.d.ts +9 -0
- package/dist/core/types/errors.d.ts +56 -5
- package/dist/core/types/fees.d.ts +9 -0
- package/dist/core/types/flows/base.d.ts +1 -1
- package/dist/core/types/flows/interop.d.ts +207 -0
- package/dist/core/types/flows/withdrawals.d.ts +0 -8
- package/dist/core/types/primitives.d.ts +1 -0
- package/dist/core/types/transactions.d.ts +10 -0
- package/dist/core/utils/addr.d.ts +2 -2
- package/dist/core/utils/events.d.ts +12 -0
- package/dist/core/utils/hash.d.ts +5 -0
- package/dist/core/utils/index.d.ts +5 -0
- package/dist/core/utils/number.d.ts +2 -0
- package/dist/index.cjs +1686 -186
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +5 -5
- package/package.json +6 -2
- package/dist/chunk-NGXRO2ZX.js +0 -142
- package/dist/core/resources/withdrawals/events.d.ts +0 -9
|
@@ -3,9 +3,58 @@
|
|
|
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
|
|
|
10
|
+
// src/core/utils/hash.ts
|
|
11
|
+
var RegExpHex = /^0x[0-9a-fA-F]*$/;
|
|
12
|
+
var isHash = (x, length) => {
|
|
13
|
+
if (!x || typeof x !== "string") return false;
|
|
14
|
+
return (x.length === length) && RegExpHex.test(x);
|
|
15
|
+
};
|
|
16
|
+
var isHash66 = (x) => isHash(x, 66);
|
|
17
|
+
|
|
18
|
+
// src/core/utils/number.ts
|
|
19
|
+
var isNumber = (x) => typeof x === "number" && Number.isFinite(x);
|
|
20
|
+
var isBigint = (x) => typeof x === "bigint";
|
|
21
|
+
var k256hex = (s) => `0x${utils.bytesToHex(sha3.keccak_256(utils.utf8ToBytes(s)))}`.toLowerCase();
|
|
22
|
+
var FORMAL_ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
23
|
+
var ETH_ADDRESS = "0x0000000000000000000000000000000000000001";
|
|
24
|
+
var L2_ASSET_ROUTER_ADDRESS = "0x0000000000000000000000000000000000010003";
|
|
25
|
+
var L2_NATIVE_TOKEN_VAULT_ADDRESS = "0x0000000000000000000000000000000000010004";
|
|
26
|
+
var L1_MESSENGER_ADDRESS = "0x0000000000000000000000000000000000008008";
|
|
27
|
+
var L2_BASE_TOKEN_ADDRESS = "0x000000000000000000000000000000000000800A";
|
|
28
|
+
var TOPIC_L1_MESSAGE_SENT_NEW = k256hex("L1MessageSent(uint256,bytes32,bytes)");
|
|
29
|
+
var TOPIC_L1_MESSAGE_SENT_LEG = k256hex("L1MessageSent(address,bytes32,bytes)");
|
|
30
|
+
var TOPIC_CANONICAL_ASSIGNED = "0x779f441679936c5441b671969f37400b8c3ed0071cb47444431bf985754560df";
|
|
31
|
+
var TOPIC_CANONICAL_SUCCESS = "0xe4def01b981193a97a9e81230d7b9f31812ceaf23f864a828a82c687911cb2df";
|
|
32
|
+
var BUFFER = 20n;
|
|
33
|
+
var TX_OVERHEAD_GAS = 10000n;
|
|
34
|
+
var TX_MEMORY_OVERHEAD_GAS = 10n;
|
|
35
|
+
var DEFAULT_PUBDATA_BYTES = 155n;
|
|
36
|
+
var DEFAULT_ABI_BYTES = 400n;
|
|
37
|
+
var SAFE_L1_BRIDGE_GAS = 700000n;
|
|
38
|
+
|
|
39
|
+
// src/core/utils/addr.ts
|
|
40
|
+
function isAddressEq(a, b) {
|
|
41
|
+
return a.toLowerCase() === b.toLowerCase();
|
|
42
|
+
}
|
|
43
|
+
function isETH(token) {
|
|
44
|
+
return isAddressEq(token, FORMAL_ETH_ADDRESS) || isAddressEq(token, L2_BASE_TOKEN_ADDRESS) || isAddressEq(token, ETH_ADDRESS);
|
|
45
|
+
}
|
|
46
|
+
function normalizeAddrEq(a, b) {
|
|
47
|
+
if (!a || !b) return false;
|
|
48
|
+
const normalize = (s) => {
|
|
49
|
+
const hasPrefix = s.slice(0, 2).toLowerCase() === "0x";
|
|
50
|
+
const body = hasPrefix ? s.slice(2) : s;
|
|
51
|
+
return `0x${body.toLowerCase()}`;
|
|
52
|
+
};
|
|
53
|
+
return normalize(a) === normalize(b);
|
|
54
|
+
}
|
|
55
|
+
var hexEq = (a, b) => a.toLowerCase() === b.toLowerCase();
|
|
56
|
+
var normalizeL1Token = (token) => isAddressEq(token, FORMAL_ETH_ADDRESS) ? ETH_ADDRESS : token;
|
|
57
|
+
|
|
9
58
|
// src/core/errors/formatter.ts
|
|
10
59
|
function elideMiddle(s, max = 96) {
|
|
11
60
|
if (s.length <= max) return s;
|
|
@@ -16,7 +65,7 @@ function shortJSON(v, max = 240) {
|
|
|
16
65
|
try {
|
|
17
66
|
const s = JSON.stringify(
|
|
18
67
|
v,
|
|
19
|
-
(_k, val) =>
|
|
68
|
+
(_k, val) => isBigint(val) ? `${val.toString()}n` : val
|
|
20
69
|
);
|
|
21
70
|
return s.length > max ? elideMiddle(s, max) : s;
|
|
22
71
|
} catch {
|
|
@@ -36,7 +85,7 @@ function formatContextLine(ctx) {
|
|
|
36
85
|
if (txHash !== void 0)
|
|
37
86
|
parts.push(`txHash=${typeof txHash === "string" ? txHash : shortJSON(txHash, 96)}`);
|
|
38
87
|
if (nonce !== void 0) {
|
|
39
|
-
const nonceStr = typeof nonce === "string" ||
|
|
88
|
+
const nonceStr = typeof nonce === "string" || isNumber(nonce) || isBigint(nonce) ? String(nonce) : shortJSON(nonce, 48);
|
|
40
89
|
parts.push(`nonce=${nonceStr}`);
|
|
41
90
|
}
|
|
42
91
|
return parts.length ? ` ${kv("Context", parts.join(" \u2022 "))}` : void 0;
|
|
@@ -66,17 +115,17 @@ function formatCause(c) {
|
|
|
66
115
|
const head = [];
|
|
67
116
|
if (obj.name !== void 0) {
|
|
68
117
|
const nameVal = obj.name;
|
|
69
|
-
const nameStr = typeof nameVal === "string" ||
|
|
118
|
+
const nameStr = typeof nameVal === "string" || isNumber(nameVal) || isBigint(nameVal) || typeof nameVal === "boolean" ? String(nameVal) : shortJSON(nameVal, 120);
|
|
70
119
|
head.push(`name=${nameStr}`);
|
|
71
120
|
}
|
|
72
121
|
if (obj.code !== void 0) {
|
|
73
122
|
const codeVal = obj.code;
|
|
74
|
-
const codeStr = typeof codeVal === "string" ||
|
|
123
|
+
const codeStr = typeof codeVal === "string" || isNumber(codeVal) || isBigint(codeVal) || typeof codeVal === "boolean" ? String(codeVal) : shortJSON(codeVal, 120);
|
|
75
124
|
head.push(`code=${codeStr}`);
|
|
76
125
|
}
|
|
77
126
|
if (head.length) out.push(` ${kv("Cause", head.join(" "))}`);
|
|
78
127
|
if (obj.message) {
|
|
79
|
-
const messageStr = typeof obj.message === "string" ||
|
|
128
|
+
const messageStr = typeof obj.message === "string" || isNumber(obj.message) || isBigint(obj.message) || typeof obj.message === "boolean" ? String(obj.message) : shortJSON(obj.message, 600);
|
|
80
129
|
out.push(` message=${elideMiddle(messageStr, 600)}`);
|
|
81
130
|
}
|
|
82
131
|
if (obj.data) {
|
|
@@ -151,12 +200,13 @@ if (kInspect) {
|
|
|
151
200
|
enumerable: false
|
|
152
201
|
});
|
|
153
202
|
}
|
|
154
|
-
function isZKsyncError(e) {
|
|
203
|
+
function isZKsyncError(e, opts) {
|
|
155
204
|
if (!e || typeof e !== "object") return false;
|
|
156
205
|
const maybe = e;
|
|
157
206
|
if (!("envelope" in maybe)) return false;
|
|
158
207
|
const envelope = maybe.envelope;
|
|
159
|
-
|
|
208
|
+
if (typeof envelope?.type !== "string" || typeof envelope?.message !== "string") return false;
|
|
209
|
+
return true;
|
|
160
210
|
}
|
|
161
211
|
function isReceiptNotFound(e) {
|
|
162
212
|
const chain = [];
|
|
@@ -203,6 +253,8 @@ function isReceiptNotFound(e) {
|
|
|
203
253
|
})();
|
|
204
254
|
return MSG_RE.test(raw);
|
|
205
255
|
}
|
|
256
|
+
var OP_CLIENT = {
|
|
257
|
+
ensureAddresses: "client.ensureAddresses"};
|
|
206
258
|
var OP_DEPOSITS = {
|
|
207
259
|
// high-level flow ops
|
|
208
260
|
quote: "deposits.quote",
|
|
@@ -279,11 +331,9 @@ var OP_WITHDRAWALS = {
|
|
|
279
331
|
rawReceipt: "withdrawals.finalize.fetchParams:rawReceipt",
|
|
280
332
|
messengerIndex: "withdrawals.finalize.fetchParams:messengerIndex",
|
|
281
333
|
proof: "withdrawals.finalize.fetchParams:proof",
|
|
282
|
-
network: "withdrawals.finalize.fetchParams:network"
|
|
283
|
-
ensureAddresses: "withdrawals.finalize.fetchParams:ensureAddresses"
|
|
334
|
+
network: "withdrawals.finalize.fetchParams:network"
|
|
284
335
|
},
|
|
285
336
|
readiness: {
|
|
286
|
-
ensureAddresses: "withdrawals.finalize.readiness:ensureAddresses",
|
|
287
337
|
isFinalized: "withdrawals.finalize.readiness:isWithdrawalFinalized",
|
|
288
338
|
simulate: "withdrawals.finalize.readiness:simulate"
|
|
289
339
|
},
|
|
@@ -299,20 +349,20 @@ function createError(type, input) {
|
|
|
299
349
|
return new ZKsyncError({ ...input, type });
|
|
300
350
|
}
|
|
301
351
|
function shapeCause(err) {
|
|
302
|
-
const
|
|
352
|
+
const isRecord2 = (x) => x !== null && typeof x === "object";
|
|
303
353
|
let data = void 0;
|
|
304
|
-
if (
|
|
354
|
+
if (isRecord2(err)) {
|
|
305
355
|
const r2 = err;
|
|
306
356
|
const d = r2.data;
|
|
307
|
-
if (
|
|
357
|
+
if (isRecord2(d) && "data" in d) {
|
|
308
358
|
data = d.data;
|
|
309
|
-
} else if ("error" in r2 &&
|
|
359
|
+
} else if ("error" in r2 && isRecord2(r2.error) && "data" in r2.error) {
|
|
310
360
|
data = r2.error.data;
|
|
311
361
|
} else if ("data" in r2) {
|
|
312
362
|
data = r2.data;
|
|
313
363
|
}
|
|
314
364
|
}
|
|
315
|
-
const r =
|
|
365
|
+
const r = isRecord2(err) ? err : void 0;
|
|
316
366
|
const name = r && typeof r.name === "string" ? r.name : void 0;
|
|
317
367
|
const message = r && typeof r.message === "string" ? r.message : r && typeof r.shortMessage === "string" ? r.shortMessage : void 0;
|
|
318
368
|
const code = r && "code" in r ? r.code : void 0;
|
|
@@ -366,7 +416,7 @@ function normalizeProof(p) {
|
|
|
366
416
|
context: { keys: Object.keys(raw ?? {}) }
|
|
367
417
|
});
|
|
368
418
|
}
|
|
369
|
-
const toBig = (x) =>
|
|
419
|
+
const toBig = (x) => isBigint(x) ? x : isNumber(x) ? BigInt(x) : typeof x === "string" ? BigInt(x) : (() => {
|
|
370
420
|
throw createError("RPC", {
|
|
371
421
|
resource: "zksrpc",
|
|
372
422
|
operation: "zksrpc.normalizeProof",
|
|
@@ -377,7 +427,8 @@ function normalizeProof(p) {
|
|
|
377
427
|
return {
|
|
378
428
|
id: toBig(idRaw),
|
|
379
429
|
batchNumber: toBig(bnRaw),
|
|
380
|
-
proof: toHexArray(raw?.proof)
|
|
430
|
+
proof: toHexArray(raw?.proof),
|
|
431
|
+
root: raw.root
|
|
381
432
|
};
|
|
382
433
|
} catch (e) {
|
|
383
434
|
if (isZKsyncError(e)) throw e;
|
|
@@ -402,8 +453,8 @@ function ensureHex(value, field, context) {
|
|
|
402
453
|
function ensureNumber(value, field, opts) {
|
|
403
454
|
const operation = opts?.operation ?? "zksrpc.normalizeGenesis";
|
|
404
455
|
const messagePrefix = opts?.messagePrefix ?? "Malformed genesis response";
|
|
405
|
-
if (
|
|
406
|
-
if (
|
|
456
|
+
if (isNumber(value)) return value;
|
|
457
|
+
if (isBigint(value)) return Number(value);
|
|
407
458
|
if (typeof value === "string" && value.trim() !== "") {
|
|
408
459
|
const parsed = Number(value);
|
|
409
460
|
if (Number.isFinite(parsed)) return parsed;
|
|
@@ -418,8 +469,8 @@ function ensureNumber(value, field, opts) {
|
|
|
418
469
|
function ensureBigInt(value, field, opts) {
|
|
419
470
|
const operation = opts?.operation ?? "zksrpc.normalizeBlockMetadata";
|
|
420
471
|
const messagePrefix = opts?.messagePrefix ?? "Malformed block metadata response";
|
|
421
|
-
if (
|
|
422
|
-
if (
|
|
472
|
+
if (isBigint(value)) return value;
|
|
473
|
+
if (isNumber(value)) {
|
|
423
474
|
if (!Number.isInteger(value)) {
|
|
424
475
|
throw createError("RPC", {
|
|
425
476
|
resource: "zksrpc",
|
|
@@ -443,6 +494,9 @@ function ensureBigInt(value, field, opts) {
|
|
|
443
494
|
context: { field, valueType: typeof value }
|
|
444
495
|
});
|
|
445
496
|
}
|
|
497
|
+
function isRecord(x) {
|
|
498
|
+
return !!x && typeof x === "object" && !Array.isArray(x);
|
|
499
|
+
}
|
|
446
500
|
function normalizeContractTuple(tuple, index) {
|
|
447
501
|
if (!Array.isArray(tuple) || tuple.length < 2) {
|
|
448
502
|
throw createError("RPC", {
|
|
@@ -458,7 +512,7 @@ function normalizeContractTuple(tuple, index) {
|
|
|
458
512
|
bytecode: ensureHex(bytecodeRaw, "initial_contracts.bytecode", { index })
|
|
459
513
|
};
|
|
460
514
|
}
|
|
461
|
-
function
|
|
515
|
+
function normalizeRawStorageTuple(tuple, index) {
|
|
462
516
|
if (!Array.isArray(tuple) || tuple.length < 2) {
|
|
463
517
|
throw createError("RPC", {
|
|
464
518
|
resource: "zksrpc",
|
|
@@ -469,10 +523,53 @@ function normalizeStorageTuple(tuple, index) {
|
|
|
469
523
|
}
|
|
470
524
|
const [keyRaw, valueRaw] = tuple;
|
|
471
525
|
return {
|
|
526
|
+
format: "raw",
|
|
472
527
|
key: ensureHex(keyRaw, "additional_storage.key", { index }),
|
|
473
528
|
value: ensureHex(valueRaw, "additional_storage.value", { index })
|
|
474
529
|
};
|
|
475
530
|
}
|
|
531
|
+
function normalizeAdditionalStorage(value, record) {
|
|
532
|
+
const effective = value ?? record["additional_storage_raw"];
|
|
533
|
+
if (Array.isArray(effective)) {
|
|
534
|
+
return effective.map((entry, index) => {
|
|
535
|
+
const kv2 = normalizeRawStorageTuple(entry, index);
|
|
536
|
+
return { format: "raw", key: kv2.key, value: kv2.value };
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
if (isRecord(effective)) {
|
|
540
|
+
const out = [];
|
|
541
|
+
for (const [addrRaw, slotsRaw] of Object.entries(effective)) {
|
|
542
|
+
const address = ensureHex(addrRaw, "additional_storage.address", {});
|
|
543
|
+
if (!isRecord(slotsRaw)) {
|
|
544
|
+
throw createError("RPC", {
|
|
545
|
+
resource: "zksrpc",
|
|
546
|
+
operation: "zksrpc.normalizeGenesis",
|
|
547
|
+
message: "Malformed genesis response: additional_storage[address] must be an object map.",
|
|
548
|
+
context: { address, valueType: typeof slotsRaw }
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
for (const [slotRaw, valRaw] of Object.entries(slotsRaw)) {
|
|
552
|
+
out.push({
|
|
553
|
+
format: "pretty",
|
|
554
|
+
address,
|
|
555
|
+
key: ensureHex(slotRaw, "additional_storage.key", { address }),
|
|
556
|
+
value: ensureHex(valRaw, "additional_storage.value", { address, key: slotRaw })
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
return out;
|
|
561
|
+
}
|
|
562
|
+
throw createError("RPC", {
|
|
563
|
+
resource: "zksrpc",
|
|
564
|
+
operation: "zksrpc.normalizeGenesis",
|
|
565
|
+
message: "Malformed genesis response: additional_storage must be an array (raw) or an object map (pretty).",
|
|
566
|
+
context: {
|
|
567
|
+
valueType: typeof effective,
|
|
568
|
+
hasAdditionalStorage: "additional_storage" in record,
|
|
569
|
+
hasAdditionalStorageRaw: "additional_storage_raw" in record
|
|
570
|
+
}
|
|
571
|
+
});
|
|
572
|
+
}
|
|
476
573
|
function normalizeGenesis(raw) {
|
|
477
574
|
try {
|
|
478
575
|
if (!raw || typeof raw !== "object") {
|
|
@@ -493,21 +590,12 @@ function normalizeGenesis(raw) {
|
|
|
493
590
|
context: { valueType: typeof contractsRaw }
|
|
494
591
|
});
|
|
495
592
|
}
|
|
496
|
-
const storageRaw = record["additional_storage"];
|
|
497
|
-
if (!Array.isArray(storageRaw)) {
|
|
498
|
-
throw createError("RPC", {
|
|
499
|
-
resource: "zksrpc",
|
|
500
|
-
operation: "zksrpc.normalizeGenesis",
|
|
501
|
-
message: "Malformed genesis response: additional_storage must be an array.",
|
|
502
|
-
context: { valueType: typeof storageRaw }
|
|
503
|
-
});
|
|
504
|
-
}
|
|
505
593
|
const executionVersion = ensureNumber(record["execution_version"], "execution_version");
|
|
506
594
|
const genesisRoot = ensureHex(record["genesis_root"], "genesis_root", {});
|
|
507
595
|
const initialContracts = contractsRaw.map(
|
|
508
596
|
(entry, index) => normalizeContractTuple(entry, index)
|
|
509
597
|
);
|
|
510
|
-
const additionalStorage =
|
|
598
|
+
const additionalStorage = normalizeAdditionalStorage(record["additional_storage"], record);
|
|
511
599
|
return {
|
|
512
600
|
initialContracts,
|
|
513
601
|
additionalStorage,
|
|
@@ -694,23 +782,6 @@ function zksRpcFromViem(l2Client) {
|
|
|
694
782
|
};
|
|
695
783
|
return createZksRpc(makeTransportFromViem(compatible));
|
|
696
784
|
}
|
|
697
|
-
var k256hex = (s) => `0x${utils.bytesToHex(sha3.keccak_256(utils.utf8ToBytes(s)))}`.toLowerCase();
|
|
698
|
-
var FORMAL_ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
699
|
-
var ETH_ADDRESS = "0x0000000000000000000000000000000000000001";
|
|
700
|
-
var L2_ASSET_ROUTER_ADDRESS = "0x0000000000000000000000000000000000010003";
|
|
701
|
-
var L2_NATIVE_TOKEN_VAULT_ADDRESS = "0x0000000000000000000000000000000000010004";
|
|
702
|
-
var L1_MESSENGER_ADDRESS = "0x0000000000000000000000000000000000008008";
|
|
703
|
-
var L2_BASE_TOKEN_ADDRESS = "0x000000000000000000000000000000000000800A";
|
|
704
|
-
var TOPIC_L1_MESSAGE_SENT_NEW = k256hex("L1MessageSent(uint256,bytes32,bytes)");
|
|
705
|
-
var TOPIC_L1_MESSAGE_SENT_LEG = k256hex("L1MessageSent(address,bytes32,bytes)");
|
|
706
|
-
var TOPIC_CANONICAL_ASSIGNED = "0x779f441679936c5441b671969f37400b8c3ed0071cb47444431bf985754560df";
|
|
707
|
-
var TOPIC_CANONICAL_SUCCESS = "0xe4def01b981193a97a9e81230d7b9f31812ceaf23f864a828a82c687911cb2df";
|
|
708
|
-
var BUFFER = 20n;
|
|
709
|
-
var TX_OVERHEAD_GAS = 10000n;
|
|
710
|
-
var TX_MEMORY_OVERHEAD_GAS = 10n;
|
|
711
|
-
var DEFAULT_PUBDATA_BYTES = 155n;
|
|
712
|
-
var DEFAULT_ABI_BYTES = 400n;
|
|
713
|
-
var SAFE_L1_BRIDGE_GAS = 700000n;
|
|
714
785
|
|
|
715
786
|
// src/core/internal/abis/IBridgehub.ts
|
|
716
787
|
var IBridgehubABI = [
|
|
@@ -5200,7 +5271,166 @@ var MailboxABI = [
|
|
|
5200
5271
|
];
|
|
5201
5272
|
var Mailbox_default = MailboxABI;
|
|
5202
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
|
+
|
|
5203
5432
|
// src/adapters/viem/client.ts
|
|
5433
|
+
var { wrap } = createErrorHandlers("client");
|
|
5204
5434
|
function createViemClient(args) {
|
|
5205
5435
|
const { l1, l2, l1Wallet, l2Wallet } = args;
|
|
5206
5436
|
if (!l1Wallet.account) {
|
|
@@ -5212,35 +5442,44 @@ function createViemClient(args) {
|
|
|
5212
5442
|
let cCache;
|
|
5213
5443
|
async function ensureAddresses() {
|
|
5214
5444
|
if (addrCache) return addrCache;
|
|
5215
|
-
|
|
5216
|
-
|
|
5217
|
-
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
|
|
5223
|
-
|
|
5224
|
-
|
|
5225
|
-
|
|
5226
|
-
|
|
5227
|
-
|
|
5228
|
-
|
|
5229
|
-
|
|
5230
|
-
|
|
5231
|
-
|
|
5232
|
-
|
|
5233
|
-
|
|
5234
|
-
|
|
5235
|
-
|
|
5236
|
-
|
|
5237
|
-
|
|
5238
|
-
|
|
5239
|
-
|
|
5240
|
-
|
|
5241
|
-
|
|
5242
|
-
|
|
5243
|
-
|
|
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
|
+
);
|
|
5244
5483
|
}
|
|
5245
5484
|
async function contracts() {
|
|
5246
5485
|
if (cCache) return cCache;
|
|
@@ -5309,6 +5548,12 @@ function createViemClient(args) {
|
|
|
5309
5548
|
};
|
|
5310
5549
|
}
|
|
5311
5550
|
|
|
5551
|
+
// src/core/types/fees.ts
|
|
5552
|
+
function toGasOverrides(overrides) {
|
|
5553
|
+
const { nonce: _, ...gas } = overrides;
|
|
5554
|
+
return gas;
|
|
5555
|
+
}
|
|
5556
|
+
|
|
5312
5557
|
// src/adapters/viem/resources/deposits/context.ts
|
|
5313
5558
|
async function commonCtx(p, client, tokens, contracts) {
|
|
5314
5559
|
const { bridgehub, l1AssetRouter } = await contracts.addresses();
|
|
@@ -5343,7 +5588,7 @@ async function commonCtx(p, client, tokens, contracts) {
|
|
|
5343
5588
|
bridgehub,
|
|
5344
5589
|
chainIdL2: BigInt(chainId),
|
|
5345
5590
|
sender,
|
|
5346
|
-
gasOverrides: p.l1TxOverrides,
|
|
5591
|
+
gasOverrides: p.l1TxOverrides ? toGasOverrides(p.l1TxOverrides) : void 0,
|
|
5347
5592
|
l2GasLimit: p.l2GasLimit,
|
|
5348
5593
|
gasPerPubdata,
|
|
5349
5594
|
operatorTip,
|
|
@@ -5399,80 +5644,6 @@ function buildDirectRequestStruct(args) {
|
|
|
5399
5644
|
refundRecipient: args.refundRecipient
|
|
5400
5645
|
};
|
|
5401
5646
|
}
|
|
5402
|
-
|
|
5403
|
-
// src/core/errors/error-ops.ts
|
|
5404
|
-
function resolveMessage(op, msg) {
|
|
5405
|
-
if (!msg) return `Error during ${op}.`;
|
|
5406
|
-
return typeof msg === "function" ? msg() : msg;
|
|
5407
|
-
}
|
|
5408
|
-
function createErrorOps(decodeRevert2) {
|
|
5409
|
-
function toZKsyncError2(type, base, err) {
|
|
5410
|
-
if (isZKsyncError(err)) return err;
|
|
5411
|
-
const revert = decodeRevert2 ? decodeRevert2(err) : void 0;
|
|
5412
|
-
return createError(type, { ...base, ...revert ? { revert } : {}, cause: shapeCause(err) });
|
|
5413
|
-
}
|
|
5414
|
-
function createErrorHandlers2(resource) {
|
|
5415
|
-
async function run(kind, operation, fn, opts) {
|
|
5416
|
-
try {
|
|
5417
|
-
return await fn();
|
|
5418
|
-
} catch (e) {
|
|
5419
|
-
if (isZKsyncError(e)) throw e;
|
|
5420
|
-
const message = resolveMessage(operation, opts?.message);
|
|
5421
|
-
throw toZKsyncError2(kind, { resource, operation, context: opts?.ctx ?? {}, message }, e);
|
|
5422
|
-
}
|
|
5423
|
-
}
|
|
5424
|
-
function wrap2(operation, fn, opts) {
|
|
5425
|
-
return run("INTERNAL", operation, fn, opts);
|
|
5426
|
-
}
|
|
5427
|
-
function wrapAs10(kind, operation, fn, opts) {
|
|
5428
|
-
return run(kind, operation, fn, opts);
|
|
5429
|
-
}
|
|
5430
|
-
async function toResult2(operation, fn, opts) {
|
|
5431
|
-
try {
|
|
5432
|
-
const value = await wrap2(operation, fn, opts);
|
|
5433
|
-
return { ok: true, value };
|
|
5434
|
-
} catch (e) {
|
|
5435
|
-
const shaped = isZKsyncError(e) ? e : toZKsyncError2(
|
|
5436
|
-
"INTERNAL",
|
|
5437
|
-
{
|
|
5438
|
-
resource,
|
|
5439
|
-
operation,
|
|
5440
|
-
context: opts?.ctx ?? {},
|
|
5441
|
-
message: resolveMessage(operation, opts?.message)
|
|
5442
|
-
},
|
|
5443
|
-
e
|
|
5444
|
-
);
|
|
5445
|
-
return { ok: false, error: shaped };
|
|
5446
|
-
}
|
|
5447
|
-
}
|
|
5448
|
-
return { wrap: wrap2, wrapAs: wrapAs10, toResult: toResult2 };
|
|
5449
|
-
}
|
|
5450
|
-
return { toZKsyncError: toZKsyncError2, createErrorHandlers: createErrorHandlers2 };
|
|
5451
|
-
}
|
|
5452
|
-
|
|
5453
|
-
// src/core/errors/withdrawal-revert-map.ts
|
|
5454
|
-
var REVERT_TO_READINESS = {
|
|
5455
|
-
// Already done
|
|
5456
|
-
WithdrawalAlreadyFinalized: { kind: "FINALIZED" },
|
|
5457
|
-
// Temporary — try later
|
|
5458
|
-
BatchNotExecuted: { kind: "NOT_READY", reason: "batch-not-executed" },
|
|
5459
|
-
LocalRootIsZero: { kind: "NOT_READY", reason: "root-missing" },
|
|
5460
|
-
// Permanent — won’t become ready for this tx
|
|
5461
|
-
WrongL2Sender: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5462
|
-
InvalidSelector: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5463
|
-
L2WithdrawalMessageWrongLength: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5464
|
-
WrongMsgLength: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5465
|
-
TokenNotLegacy: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5466
|
-
TokenIsLegacy: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5467
|
-
InvalidProof: { kind: "UNFINALIZABLE", reason: "message-invalid" },
|
|
5468
|
-
InvalidChainId: { kind: "UNFINALIZABLE", reason: "invalid-chain" },
|
|
5469
|
-
NotSettlementLayer: { kind: "UNFINALIZABLE", reason: "settlement-layer" },
|
|
5470
|
-
// Likely environment mismatch — treat as permanent for this tx
|
|
5471
|
-
OnlyEraSupported: { kind: "UNFINALIZABLE", reason: "unsupported" },
|
|
5472
|
-
LocalRootMustBeZero: { kind: "UNFINALIZABLE", reason: "unsupported" }
|
|
5473
|
-
};
|
|
5474
|
-
|
|
5475
|
-
// src/adapters/viem/errors/revert.ts
|
|
5476
5647
|
var ERROR_ABIS = [];
|
|
5477
5648
|
var ABI_ERROR_STRING = [
|
|
5478
5649
|
{ type: "error", name: "Error", inputs: [{ name: "message", type: "string" }] }
|
|
@@ -5508,7 +5679,7 @@ function registerErrorAbi(name, abi) {
|
|
|
5508
5679
|
if (i >= 0) ERROR_ABIS[i] = entry;
|
|
5509
5680
|
else ERROR_ABIS.push(entry);
|
|
5510
5681
|
}
|
|
5511
|
-
function
|
|
5682
|
+
function extractRevertData2(e) {
|
|
5512
5683
|
const candidates = [
|
|
5513
5684
|
e?.data?.data,
|
|
5514
5685
|
e?.error?.data,
|
|
@@ -5526,8 +5697,8 @@ function extractRevertData(e) {
|
|
|
5526
5697
|
}
|
|
5527
5698
|
return void 0;
|
|
5528
5699
|
}
|
|
5529
|
-
function
|
|
5530
|
-
const data =
|
|
5700
|
+
function decodeRevert2(e) {
|
|
5701
|
+
const data = extractRevertData2(e);
|
|
5531
5702
|
if (!data) return;
|
|
5532
5703
|
const selector = `0x${data.slice(2, 10)}`;
|
|
5533
5704
|
try {
|
|
@@ -5561,7 +5732,7 @@ function decodeRevert(e) {
|
|
|
5561
5732
|
return { selector };
|
|
5562
5733
|
}
|
|
5563
5734
|
function classifyReadinessFromRevert(e) {
|
|
5564
|
-
const r =
|
|
5735
|
+
const r = decodeRevert2(e);
|
|
5565
5736
|
const name = r?.name;
|
|
5566
5737
|
if (name && REVERT_TO_READINESS[name]) return REVERT_TO_READINESS[name];
|
|
5567
5738
|
const msg = (() => {
|
|
@@ -5579,7 +5750,7 @@ function classifyReadinessFromRevert(e) {
|
|
|
5579
5750
|
}
|
|
5580
5751
|
|
|
5581
5752
|
// src/adapters/viem/errors/error-ops.ts
|
|
5582
|
-
var { toZKsyncError, createErrorHandlers } = createErrorOps(
|
|
5753
|
+
var { toZKsyncError: toZKsyncError2, createErrorHandlers: createErrorHandlers2 } = createErrorOps(decodeRevert2);
|
|
5583
5754
|
|
|
5584
5755
|
// src/core/resources/deposits/gas.ts
|
|
5585
5756
|
function makeGasQuote(p) {
|
|
@@ -5842,7 +6013,7 @@ async function determineErc20L2Gas(input) {
|
|
|
5842
6013
|
}
|
|
5843
6014
|
|
|
5844
6015
|
// src/adapters/viem/resources/deposits/services/fee.ts
|
|
5845
|
-
var { wrapAs } =
|
|
6016
|
+
var { wrapAs } = createErrorHandlers2("deposits");
|
|
5846
6017
|
async function quoteL2BaseCost(input) {
|
|
5847
6018
|
const { ctx, l2GasLimit } = input;
|
|
5848
6019
|
const estimator = viemToGasEstimator(ctx.client.l1);
|
|
@@ -5892,7 +6063,7 @@ function buildFeeBreakdown(p) {
|
|
|
5892
6063
|
}
|
|
5893
6064
|
|
|
5894
6065
|
// src/adapters/viem/resources/deposits/routes/eth.ts
|
|
5895
|
-
var { wrapAs: wrapAs2 } =
|
|
6066
|
+
var { wrapAs: wrapAs2 } = createErrorHandlers2("deposits");
|
|
5896
6067
|
function routeEthDirect() {
|
|
5897
6068
|
return {
|
|
5898
6069
|
async build(p, ctx) {
|
|
@@ -5986,29 +6157,7 @@ function routeEthDirect() {
|
|
|
5986
6157
|
}
|
|
5987
6158
|
};
|
|
5988
6159
|
}
|
|
5989
|
-
|
|
5990
|
-
// src/core/utils/addr.ts
|
|
5991
|
-
var isHash66 = (x) => !!x && x.startsWith("0x") && x.length === 66;
|
|
5992
|
-
function isAddressEq(a, b) {
|
|
5993
|
-
return a.toLowerCase() === b.toLowerCase();
|
|
5994
|
-
}
|
|
5995
|
-
function isETH(token) {
|
|
5996
|
-
return isAddressEq(token, FORMAL_ETH_ADDRESS) || isAddressEq(token, L2_BASE_TOKEN_ADDRESS) || isAddressEq(token, ETH_ADDRESS);
|
|
5997
|
-
}
|
|
5998
|
-
function normalizeAddrEq(a, b) {
|
|
5999
|
-
if (!a || !b) return false;
|
|
6000
|
-
const normalize = (s) => {
|
|
6001
|
-
const hasPrefix = s.slice(0, 2).toLowerCase() === "0x";
|
|
6002
|
-
const body = hasPrefix ? s.slice(2) : s;
|
|
6003
|
-
return `0x${body.toLowerCase()}`;
|
|
6004
|
-
};
|
|
6005
|
-
return normalize(a) === normalize(b);
|
|
6006
|
-
}
|
|
6007
|
-
var hexEq = (a, b) => a.toLowerCase() === b.toLowerCase();
|
|
6008
|
-
var normalizeL1Token = (token) => isAddressEq(token, FORMAL_ETH_ADDRESS) ? ETH_ADDRESS : token;
|
|
6009
|
-
|
|
6010
|
-
// src/adapters/viem/resources/deposits/routes/erc20-nonbase.ts
|
|
6011
|
-
var { wrapAs: wrapAs3 } = createErrorHandlers("deposits");
|
|
6160
|
+
var { wrapAs: wrapAs3 } = createErrorHandlers2("deposits");
|
|
6012
6161
|
function routeErc20NonBase() {
|
|
6013
6162
|
return {
|
|
6014
6163
|
// TODO: do we even need these validations?
|
|
@@ -6235,7 +6384,7 @@ function routeErc20NonBase() {
|
|
|
6235
6384
|
}
|
|
6236
6385
|
};
|
|
6237
6386
|
}
|
|
6238
|
-
var { wrapAs: wrapAs4 } =
|
|
6387
|
+
var { wrapAs: wrapAs4 } = createErrorHandlers2("deposits");
|
|
6239
6388
|
function routeEthNonBase() {
|
|
6240
6389
|
return {
|
|
6241
6390
|
// TODO: do we even need these validations?
|
|
@@ -6446,7 +6595,7 @@ function routeEthNonBase() {
|
|
|
6446
6595
|
}
|
|
6447
6596
|
};
|
|
6448
6597
|
}
|
|
6449
|
-
var { wrapAs: wrapAs5 } =
|
|
6598
|
+
var { wrapAs: wrapAs5 } = createErrorHandlers2("deposits");
|
|
6450
6599
|
function routeErc20Base() {
|
|
6451
6600
|
return {
|
|
6452
6601
|
async preflight(p, ctx) {
|
|
@@ -6634,7 +6783,7 @@ var I_BRIDGEHUB_NEW_PRIORITY_REQUEST = {
|
|
|
6634
6783
|
{ name: "data", type: "bytes", indexed: false }
|
|
6635
6784
|
]
|
|
6636
6785
|
};
|
|
6637
|
-
function
|
|
6786
|
+
function getL2TransactionHashFromLogs(logs) {
|
|
6638
6787
|
for (const lg of logs) {
|
|
6639
6788
|
try {
|
|
6640
6789
|
const parsed = viem.decodeEventLog({
|
|
@@ -6666,7 +6815,7 @@ function extractL2TxHashFromL1Logs(logs) {
|
|
|
6666
6815
|
async function waitForL2ExecutionFromL1Tx(l1, l2, l1TxHash) {
|
|
6667
6816
|
const l1Receipt = await l1.waitForTransactionReceipt({ hash: l1TxHash });
|
|
6668
6817
|
if (!l1Receipt) throw new Error("No L1 receipt found");
|
|
6669
|
-
const l2TxHash =
|
|
6818
|
+
const l2TxHash = getL2TransactionHashFromLogs(l1Receipt.logs);
|
|
6670
6819
|
if (!l2TxHash) {
|
|
6671
6820
|
throw createError("VERIFICATION", {
|
|
6672
6821
|
message: "Failed to extract L2 transaction hash from L1 logs",
|
|
@@ -6714,7 +6863,7 @@ function createNTVCodec(deps) {
|
|
|
6714
6863
|
}
|
|
6715
6864
|
|
|
6716
6865
|
// src/adapters/viem/resources/tokens/tokens.ts
|
|
6717
|
-
var { wrapAs: wrapAs6 } =
|
|
6866
|
+
var { wrapAs: wrapAs6 } = createErrorHandlers2("tokens");
|
|
6718
6867
|
var ntvCodec = createNTVCodec({
|
|
6719
6868
|
encode: (types, values) => viem.encodeAbiParameters(
|
|
6720
6869
|
types.map((t, i) => ({ type: t, name: `arg${i}` })),
|
|
@@ -6970,7 +7119,7 @@ function createContractsResource(client) {
|
|
|
6970
7119
|
}
|
|
6971
7120
|
|
|
6972
7121
|
// src/adapters/viem/resources/deposits/index.ts
|
|
6973
|
-
var { wrap, toResult } =
|
|
7122
|
+
var { wrap: wrap2, toResult } = createErrorHandlers2("deposits");
|
|
6974
7123
|
var ROUTES = {
|
|
6975
7124
|
"eth-base": routeEthDirect(),
|
|
6976
7125
|
"eth-nonbase": routeEthNonBase(),
|
|
@@ -7001,7 +7150,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7001
7150
|
steps
|
|
7002
7151
|
};
|
|
7003
7152
|
}
|
|
7004
|
-
const quote = async (p) =>
|
|
7153
|
+
const quote = async (p) => wrap2(
|
|
7005
7154
|
OP_DEPOSITS.quote,
|
|
7006
7155
|
async () => {
|
|
7007
7156
|
const plan = await buildPlan(p);
|
|
@@ -7016,20 +7165,26 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7016
7165
|
message: "Internal error while preparing a deposit quote.",
|
|
7017
7166
|
ctx: { token: p.token, where: "deposits.tryQuote" }
|
|
7018
7167
|
});
|
|
7019
|
-
const prepare = (p) =>
|
|
7168
|
+
const prepare = (p) => wrap2(OP_DEPOSITS.prepare, () => buildPlan(p), {
|
|
7020
7169
|
message: "Internal error while preparing a deposit plan.",
|
|
7021
7170
|
ctx: { token: p.token, where: "deposits.prepare" }
|
|
7022
7171
|
});
|
|
7023
7172
|
const tryPrepare = (p) => toResult(OP_DEPOSITS.tryPrepare, () => prepare(p), {
|
|
7024
7173
|
ctx: { token: p.token, where: "deposits.tryPrepare" }
|
|
7025
7174
|
});
|
|
7026
|
-
const create = (p) =>
|
|
7175
|
+
const create = (p) => wrap2(
|
|
7027
7176
|
OP_DEPOSITS.create,
|
|
7028
7177
|
async () => {
|
|
7029
7178
|
const plan = await prepare(p);
|
|
7030
7179
|
const stepHashes = {};
|
|
7031
7180
|
const from = client.account.address;
|
|
7032
|
-
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
|
+
}
|
|
7033
7188
|
for (const step of plan.steps) {
|
|
7034
7189
|
if (step.kind === "approve") {
|
|
7035
7190
|
try {
|
|
@@ -7047,7 +7202,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7047
7202
|
continue;
|
|
7048
7203
|
}
|
|
7049
7204
|
} catch (e) {
|
|
7050
|
-
throw
|
|
7205
|
+
throw toZKsyncError2(
|
|
7051
7206
|
"CONTRACT",
|
|
7052
7207
|
{
|
|
7053
7208
|
resource: "deposits",
|
|
@@ -7128,7 +7283,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7128
7283
|
}
|
|
7129
7284
|
} catch (e) {
|
|
7130
7285
|
if (isZKsyncError(e)) throw e;
|
|
7131
|
-
throw
|
|
7286
|
+
throw toZKsyncError2(
|
|
7132
7287
|
"EXECUTION",
|
|
7133
7288
|
{
|
|
7134
7289
|
resource: "deposits",
|
|
@@ -7153,7 +7308,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7153
7308
|
message: "Internal error while creating a deposit.",
|
|
7154
7309
|
ctx: { token: p.token, amount: p.amount, to: p.to, where: "deposits.tryCreate" }
|
|
7155
7310
|
});
|
|
7156
|
-
const status = (h) =>
|
|
7311
|
+
const status = (h) => wrap2(
|
|
7157
7312
|
OP_DEPOSITS.status,
|
|
7158
7313
|
async () => {
|
|
7159
7314
|
const l1TxHash = typeof h === "string" ? h : h.l1TxHash;
|
|
@@ -7162,7 +7317,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7162
7317
|
try {
|
|
7163
7318
|
l1Rcpt = await client.l1.getTransactionReceipt({ hash: l1TxHash });
|
|
7164
7319
|
} catch (e) {
|
|
7165
|
-
throw
|
|
7320
|
+
throw toZKsyncError2(
|
|
7166
7321
|
"RPC",
|
|
7167
7322
|
{
|
|
7168
7323
|
resource: "deposits",
|
|
@@ -7176,14 +7331,14 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7176
7331
|
if (!l1Rcpt) return { phase: "L1_PENDING", l1TxHash };
|
|
7177
7332
|
let l2TxHash;
|
|
7178
7333
|
try {
|
|
7179
|
-
l2TxHash =
|
|
7334
|
+
l2TxHash = getL2TransactionHashFromLogs(l1Rcpt.logs) ?? void 0;
|
|
7180
7335
|
} catch (e) {
|
|
7181
|
-
throw
|
|
7336
|
+
throw toZKsyncError2(
|
|
7182
7337
|
"INTERNAL",
|
|
7183
7338
|
{
|
|
7184
7339
|
resource: "deposits",
|
|
7185
|
-
operation: "deposits.status.
|
|
7186
|
-
context: { where: "
|
|
7340
|
+
operation: "deposits.status.getL2TransactionHashFromLogs",
|
|
7341
|
+
context: { where: "getL2TransactionHashFromLogs", l1TxHash },
|
|
7187
7342
|
message: "Failed to derive L2 transaction hash from L1 logs."
|
|
7188
7343
|
},
|
|
7189
7344
|
e
|
|
@@ -7197,7 +7352,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7197
7352
|
if (isReceiptNotFound(e)) {
|
|
7198
7353
|
return { phase: "L2_PENDING", l1TxHash, l2TxHash };
|
|
7199
7354
|
}
|
|
7200
|
-
throw
|
|
7355
|
+
throw toZKsyncError2(
|
|
7201
7356
|
"RPC",
|
|
7202
7357
|
{
|
|
7203
7358
|
resource: "deposits",
|
|
@@ -7217,7 +7372,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7217
7372
|
ctx: { input: h, where: "deposits.status" }
|
|
7218
7373
|
}
|
|
7219
7374
|
);
|
|
7220
|
-
const wait = (h, opts) =>
|
|
7375
|
+
const wait = (h, opts) => wrap2(
|
|
7221
7376
|
OP_DEPOSITS.wait,
|
|
7222
7377
|
async () => {
|
|
7223
7378
|
const l1Hash = typeof h === "string" ? h : "l1TxHash" in h ? h.l1TxHash : void 0;
|
|
@@ -7226,7 +7381,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7226
7381
|
try {
|
|
7227
7382
|
l1Receipt = await client.l1.waitForTransactionReceipt({ hash: l1Hash });
|
|
7228
7383
|
} catch (e) {
|
|
7229
|
-
throw
|
|
7384
|
+
throw toZKsyncError2(
|
|
7230
7385
|
"RPC",
|
|
7231
7386
|
{
|
|
7232
7387
|
resource: "deposits",
|
|
@@ -7244,7 +7399,7 @@ function createDepositsResource(client, tokens, contracts) {
|
|
|
7244
7399
|
return l2Receipt ?? null;
|
|
7245
7400
|
} catch (e) {
|
|
7246
7401
|
if (isZKsyncError(e)) throw e;
|
|
7247
|
-
throw
|
|
7402
|
+
throw toZKsyncError2(
|
|
7248
7403
|
"INTERNAL",
|
|
7249
7404
|
{
|
|
7250
7405
|
resource: "deposits",
|
|
@@ -7332,7 +7487,7 @@ async function commonCtx2(p, client, tokens, contracts) {
|
|
|
7332
7487
|
l2NativeTokenVault,
|
|
7333
7488
|
l2BaseTokenSystem,
|
|
7334
7489
|
baseIsEth,
|
|
7335
|
-
gasOverrides: p.l2TxOverrides
|
|
7490
|
+
gasOverrides: p.l2TxOverrides ? toGasOverrides(p.l2TxOverrides) : void 0
|
|
7336
7491
|
};
|
|
7337
7492
|
}
|
|
7338
7493
|
|
|
@@ -7425,7 +7580,7 @@ function buildFeeBreakdown2(p) {
|
|
|
7425
7580
|
}
|
|
7426
7581
|
|
|
7427
7582
|
// src/adapters/viem/resources/withdrawals/routes/eth.ts
|
|
7428
|
-
var { wrapAs: wrapAs7 } =
|
|
7583
|
+
var { wrapAs: wrapAs7 } = createErrorHandlers2("withdrawals");
|
|
7429
7584
|
function routeEthBase() {
|
|
7430
7585
|
return {
|
|
7431
7586
|
async build(p, ctx) {
|
|
@@ -7480,7 +7635,7 @@ function routeEthBase() {
|
|
|
7480
7635
|
}
|
|
7481
7636
|
};
|
|
7482
7637
|
}
|
|
7483
|
-
var { wrapAs: wrapAs8 } =
|
|
7638
|
+
var { wrapAs: wrapAs8 } = createErrorHandlers2("withdrawals");
|
|
7484
7639
|
function routeErc20NonBase2() {
|
|
7485
7640
|
return {
|
|
7486
7641
|
// TODO: add preflight validations here
|
|
@@ -7553,8 +7708,7 @@ function routeErc20NonBase2() {
|
|
|
7553
7708
|
tx: approveTx
|
|
7554
7709
|
});
|
|
7555
7710
|
}
|
|
7556
|
-
const
|
|
7557
|
-
const assetId = resolved?.assetId ?? (await wrapAs8(
|
|
7711
|
+
const assetId = (await wrapAs8(
|
|
7558
7712
|
"CONTRACT",
|
|
7559
7713
|
OP_WITHDRAWALS.erc20.ensureRegistered,
|
|
7560
7714
|
() => ctx.client.l2.simulateContract({
|
|
@@ -7588,7 +7742,7 @@ function routeErc20NonBase2() {
|
|
|
7588
7742
|
value: 0n,
|
|
7589
7743
|
from: ctx.sender
|
|
7590
7744
|
};
|
|
7591
|
-
const withdrawGas = await quoteL2Gas4({ ctx, tx: withdrawTxCandidate });
|
|
7745
|
+
const withdrawGas = current >= p.amount ? await quoteL2Gas4({ ctx, tx: withdrawTxCandidate }) : void 0;
|
|
7592
7746
|
if (withdrawGas) {
|
|
7593
7747
|
withdrawTxCandidate.gas = withdrawGas.gasLimit;
|
|
7594
7748
|
withdrawTxCandidate.maxFeePerGas = withdrawGas.maxFeePerGas;
|
|
@@ -7642,11 +7796,14 @@ function routeErc20NonBase2() {
|
|
|
7642
7796
|
};
|
|
7643
7797
|
}
|
|
7644
7798
|
|
|
7645
|
-
// src/core/
|
|
7799
|
+
// src/core/utils/events.ts
|
|
7800
|
+
function extractPreferAddress(opts) {
|
|
7801
|
+
const preferAddr = typeof opts?.prefer === "object" ? opts.prefer.address : opts?.prefer === "assetRouter" ? L2_ASSET_ROUTER_ADDRESS : L1_MESSENGER_ADDRESS;
|
|
7802
|
+
return (preferAddr || L1_MESSENGER_ADDRESS).toLowerCase();
|
|
7803
|
+
}
|
|
7646
7804
|
function findL1MessageSentLog(receipt, opts) {
|
|
7647
7805
|
const index = opts?.index;
|
|
7648
|
-
const preferAddr =
|
|
7649
|
-
const prefer = (preferAddr ?? L1_MESSENGER_ADDRESS).toLowerCase();
|
|
7806
|
+
const preferAddr = extractPreferAddress(opts);
|
|
7650
7807
|
const matches = receipt.logs.filter((lg) => {
|
|
7651
7808
|
const t0 = (lg.topics?.[0] ?? "").toLowerCase();
|
|
7652
7809
|
return t0 === TOPIC_L1_MESSAGE_SENT_NEW || t0 === TOPIC_L1_MESSAGE_SENT_LEG;
|
|
@@ -7654,7 +7811,7 @@ function findL1MessageSentLog(receipt, opts) {
|
|
|
7654
7811
|
if (!matches.length) {
|
|
7655
7812
|
throw new Error("No L1MessageSent event found in L2 receipt logs.");
|
|
7656
7813
|
}
|
|
7657
|
-
const preferred = matches.find((lg) => (lg.address ?? "").toLowerCase() ===
|
|
7814
|
+
const preferred = matches.find((lg) => (lg.address ?? "").toLowerCase() === preferAddr);
|
|
7658
7815
|
const chosen = preferred ?? matches[index] ?? matches[0];
|
|
7659
7816
|
if (!chosen) {
|
|
7660
7817
|
throw new Error("No suitable L1MessageSent event found.");
|
|
@@ -7673,7 +7830,7 @@ function messengerLogIndex(raw, opts) {
|
|
|
7673
7830
|
}
|
|
7674
7831
|
return (hits[index] ?? hits[0]).i;
|
|
7675
7832
|
}
|
|
7676
|
-
var { wrapAs: wrapAs9 } =
|
|
7833
|
+
var { wrapAs: wrapAs9 } = createErrorHandlers2("withdrawals");
|
|
7677
7834
|
var IL1NullifierMini = [
|
|
7678
7835
|
{
|
|
7679
7836
|
type: "function",
|
|
@@ -7780,27 +7937,11 @@ function createFinalizationServices(client) {
|
|
|
7780
7937
|
message,
|
|
7781
7938
|
merkleProof: proof.proof
|
|
7782
7939
|
};
|
|
7783
|
-
const { l1Nullifier } = await
|
|
7784
|
-
"INTERNAL",
|
|
7785
|
-
OP_WITHDRAWALS.finalize.fetchParams.ensureAddresses,
|
|
7786
|
-
() => client.ensureAddresses(),
|
|
7787
|
-
{
|
|
7788
|
-
ctx: { where: "ensureAddresses" },
|
|
7789
|
-
message: "Failed to ensure L1 Nullifier address."
|
|
7790
|
-
}
|
|
7791
|
-
);
|
|
7940
|
+
const { l1Nullifier } = await client.ensureAddresses();
|
|
7792
7941
|
return { params, nullifier: l1Nullifier };
|
|
7793
7942
|
},
|
|
7794
7943
|
async simulateFinalizeReadiness(params) {
|
|
7795
|
-
const { l1Nullifier } = await
|
|
7796
|
-
"INTERNAL",
|
|
7797
|
-
OP_WITHDRAWALS.finalize.readiness.ensureAddresses,
|
|
7798
|
-
() => client.ensureAddresses(),
|
|
7799
|
-
{
|
|
7800
|
-
ctx: { where: "ensureAddresses" },
|
|
7801
|
-
message: "Failed to ensure L1 Nullifier address."
|
|
7802
|
-
}
|
|
7803
|
-
);
|
|
7944
|
+
const { l1Nullifier } = await client.ensureAddresses();
|
|
7804
7945
|
const done = await (async () => {
|
|
7805
7946
|
try {
|
|
7806
7947
|
const result = await wrapAs9(
|
|
@@ -7837,15 +7978,7 @@ function createFinalizationServices(client) {
|
|
|
7837
7978
|
}
|
|
7838
7979
|
},
|
|
7839
7980
|
async isWithdrawalFinalized(key) {
|
|
7840
|
-
const { l1Nullifier } = await
|
|
7841
|
-
"INTERNAL",
|
|
7842
|
-
OP_WITHDRAWALS.finalize.fetchParams.ensureAddresses,
|
|
7843
|
-
() => client.ensureAddresses(),
|
|
7844
|
-
{
|
|
7845
|
-
ctx: { where: "ensureAddresses" },
|
|
7846
|
-
message: "Failed to ensure L1 Nullifier address."
|
|
7847
|
-
}
|
|
7848
|
-
);
|
|
7981
|
+
const { l1Nullifier } = await client.ensureAddresses();
|
|
7849
7982
|
return await wrapAs9(
|
|
7850
7983
|
"RPC",
|
|
7851
7984
|
OP_WITHDRAWALS.finalize.isFinalized,
|
|
@@ -7862,15 +7995,7 @@ function createFinalizationServices(client) {
|
|
|
7862
7995
|
);
|
|
7863
7996
|
},
|
|
7864
7997
|
async estimateFinalization(params) {
|
|
7865
|
-
const { l1Nullifier } = await
|
|
7866
|
-
"INTERNAL",
|
|
7867
|
-
OP_WITHDRAWALS.finalize.estimate,
|
|
7868
|
-
() => client.ensureAddresses(),
|
|
7869
|
-
{
|
|
7870
|
-
ctx: { where: "ensureAddresses" },
|
|
7871
|
-
message: "Failed to ensure L1 Nullifier address."
|
|
7872
|
-
}
|
|
7873
|
-
);
|
|
7998
|
+
const { l1Nullifier } = await client.ensureAddresses();
|
|
7874
7999
|
const gasLimit = await wrapAs9(
|
|
7875
8000
|
"RPC",
|
|
7876
8001
|
OP_WITHDRAWALS.finalize.estimate,
|
|
@@ -7933,15 +8058,7 @@ function createFinalizationServices(client) {
|
|
|
7933
8058
|
};
|
|
7934
8059
|
},
|
|
7935
8060
|
async finalizeDeposit(params) {
|
|
7936
|
-
const { l1Nullifier } = await
|
|
7937
|
-
"INTERNAL",
|
|
7938
|
-
OP_WITHDRAWALS.finalize.fetchParams.ensureAddresses,
|
|
7939
|
-
() => client.ensureAddresses(),
|
|
7940
|
-
{
|
|
7941
|
-
ctx: { where: "ensureAddresses" },
|
|
7942
|
-
message: "Failed to ensure L1 Nullifier address."
|
|
7943
|
-
}
|
|
7944
|
-
);
|
|
8061
|
+
const { l1Nullifier } = await client.ensureAddresses();
|
|
7945
8062
|
try {
|
|
7946
8063
|
const hash = await client.l1Wallet.writeContract({
|
|
7947
8064
|
address: l1Nullifier,
|
|
@@ -7956,7 +8073,7 @@ function createFinalizationServices(client) {
|
|
|
7956
8073
|
try {
|
|
7957
8074
|
return await client.l1.waitForTransactionReceipt({ hash });
|
|
7958
8075
|
} catch (e) {
|
|
7959
|
-
throw
|
|
8076
|
+
throw toZKsyncError2(
|
|
7960
8077
|
"EXECUTION",
|
|
7961
8078
|
{
|
|
7962
8079
|
resource: "withdrawals",
|
|
@@ -7970,7 +8087,7 @@ function createFinalizationServices(client) {
|
|
|
7970
8087
|
}
|
|
7971
8088
|
};
|
|
7972
8089
|
} catch (e) {
|
|
7973
|
-
throw
|
|
8090
|
+
throw toZKsyncError2(
|
|
7974
8091
|
"EXECUTION",
|
|
7975
8092
|
{
|
|
7976
8093
|
resource: "withdrawals",
|
|
@@ -7999,7 +8116,7 @@ var ROUTES2 = {
|
|
|
7999
8116
|
};
|
|
8000
8117
|
function createWithdrawalsResource(client, tokens, contracts) {
|
|
8001
8118
|
const svc = createFinalizationServices(client);
|
|
8002
|
-
const { wrap:
|
|
8119
|
+
const { wrap: wrap3, toResult: toResult2 } = createErrorHandlers2("withdrawals");
|
|
8003
8120
|
const tokensResource = tokens ?? createTokensResource(client);
|
|
8004
8121
|
const contractsResource = contracts ?? createContractsResource(client);
|
|
8005
8122
|
async function buildPlan(p) {
|
|
@@ -8020,7 +8137,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8020
8137
|
};
|
|
8021
8138
|
}
|
|
8022
8139
|
const finalizeCache = /* @__PURE__ */ new Map();
|
|
8023
|
-
const quote = (p) =>
|
|
8140
|
+
const quote = (p) => wrap3(OP_WITHDRAWALS.quote, async () => (await buildPlan(p)).summary, {
|
|
8024
8141
|
message: "Internal error while preparing a withdrawal quote.",
|
|
8025
8142
|
ctx: { token: p.token, where: "withdrawals.quote" }
|
|
8026
8143
|
});
|
|
@@ -8028,7 +8145,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8028
8145
|
message: "Internal error while preparing a withdrawal quote.",
|
|
8029
8146
|
ctx: { token: p.token, where: "withdrawals.tryQuote" }
|
|
8030
8147
|
});
|
|
8031
|
-
const prepare = (p) =>
|
|
8148
|
+
const prepare = (p) => wrap3(OP_WITHDRAWALS.prepare, () => buildPlan(p), {
|
|
8032
8149
|
message: "Internal error while preparing a withdrawal plan.",
|
|
8033
8150
|
ctx: { token: p.token, where: "withdrawals.prepare" }
|
|
8034
8151
|
});
|
|
@@ -8036,12 +8153,20 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8036
8153
|
message: "Internal error while preparing a withdrawal plan.",
|
|
8037
8154
|
ctx: { token: p.token, where: "withdrawals.tryPrepare" }
|
|
8038
8155
|
});
|
|
8039
|
-
const create = (p) =>
|
|
8156
|
+
const create = (p) => wrap3(
|
|
8040
8157
|
OP_WITHDRAWALS.create,
|
|
8041
8158
|
async () => {
|
|
8042
8159
|
const plan = await prepare(p);
|
|
8043
8160
|
const stepHashes = {};
|
|
8044
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
|
+
}
|
|
8045
8170
|
for (const step of plan.steps) {
|
|
8046
8171
|
if (p.l2TxOverrides) {
|
|
8047
8172
|
const overrides = p.l2TxOverrides;
|
|
@@ -8075,6 +8200,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8075
8200
|
maxFeePerGas: step.tx.maxFeePerGas,
|
|
8076
8201
|
maxPriorityFeePerGas: step.tx.maxPriorityFeePerGas
|
|
8077
8202
|
} : {};
|
|
8203
|
+
const nonce = next++;
|
|
8078
8204
|
const baseReq = {
|
|
8079
8205
|
address: step.tx.address,
|
|
8080
8206
|
abi: step.tx.abi,
|
|
@@ -8082,6 +8208,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8082
8208
|
args: step.tx.args ?? [],
|
|
8083
8209
|
account: step.tx.account ?? l2Wallet.account ?? client.account,
|
|
8084
8210
|
gas: step.tx.gas,
|
|
8211
|
+
nonce,
|
|
8085
8212
|
...fee1559,
|
|
8086
8213
|
...step.tx.dataSuffix ? { dataSuffix: step.tx.dataSuffix } : {},
|
|
8087
8214
|
...step.tx.chain ? { chain: step.tx.chain } : {}
|
|
@@ -8109,7 +8236,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8109
8236
|
});
|
|
8110
8237
|
}
|
|
8111
8238
|
} catch (e) {
|
|
8112
|
-
throw
|
|
8239
|
+
throw toZKsyncError2(
|
|
8113
8240
|
"EXECUTION",
|
|
8114
8241
|
{
|
|
8115
8242
|
resource: "withdrawals",
|
|
@@ -8134,7 +8261,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8134
8261
|
message: "Internal error while creating withdrawal transactions.",
|
|
8135
8262
|
ctx: { token: p.token, amount: p.amount, to: p.to, where: "withdrawals.tryCreate" }
|
|
8136
8263
|
});
|
|
8137
|
-
const status = (h) =>
|
|
8264
|
+
const status = (h) => wrap3(
|
|
8138
8265
|
OP_WITHDRAWALS.status,
|
|
8139
8266
|
async () => {
|
|
8140
8267
|
const l2TxHash = typeof h === "string" ? h : "l2TxHash" in h && h.l2TxHash ? h.l2TxHash : "0x";
|
|
@@ -8148,7 +8275,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8148
8275
|
if (isReceiptNotFound(e)) {
|
|
8149
8276
|
return { phase: "L2_PENDING", l2TxHash };
|
|
8150
8277
|
}
|
|
8151
|
-
throw
|
|
8278
|
+
throw toZKsyncError2(
|
|
8152
8279
|
"RPC",
|
|
8153
8280
|
{
|
|
8154
8281
|
resource: "withdrawals",
|
|
@@ -8189,7 +8316,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8189
8316
|
const wait = (h, opts = {
|
|
8190
8317
|
for: "l2",
|
|
8191
8318
|
pollMs: 5500
|
|
8192
|
-
}) =>
|
|
8319
|
+
}) => wrap3(
|
|
8193
8320
|
OP_WITHDRAWALS.wait,
|
|
8194
8321
|
async () => {
|
|
8195
8322
|
const l2Hash = typeof h === "string" ? h : "l2TxHash" in h && h.l2TxHash ? h.l2TxHash : "0x";
|
|
@@ -8199,7 +8326,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8199
8326
|
try {
|
|
8200
8327
|
rcpt = await client.l2.waitForTransactionReceipt({ hash: l2Hash });
|
|
8201
8328
|
} catch (e) {
|
|
8202
|
-
throw
|
|
8329
|
+
throw toZKsyncError2(
|
|
8203
8330
|
"RPC",
|
|
8204
8331
|
{
|
|
8205
8332
|
resource: "withdrawals",
|
|
@@ -8258,7 +8385,7 @@ function createWithdrawalsResource(client, tokens, contracts) {
|
|
|
8258
8385
|
}
|
|
8259
8386
|
}
|
|
8260
8387
|
);
|
|
8261
|
-
const finalize = (l2TxHash) =>
|
|
8388
|
+
const finalize = (l2TxHash) => wrap3(
|
|
8262
8389
|
OP_WITHDRAWALS.finalize.send,
|
|
8263
8390
|
async () => {
|
|
8264
8391
|
const pack = await (async () => {
|
|
@@ -8387,19 +8514,20 @@ exports.classifyReadinessFromRevert = classifyReadinessFromRevert;
|
|
|
8387
8514
|
exports.createClient = createViemClient;
|
|
8388
8515
|
exports.createContractsResource = createContractsResource;
|
|
8389
8516
|
exports.createDepositsResource = createDepositsResource;
|
|
8390
|
-
exports.createErrorHandlers =
|
|
8517
|
+
exports.createErrorHandlers = createErrorHandlers2;
|
|
8391
8518
|
exports.createFinalizationServices = createFinalizationServices;
|
|
8392
8519
|
exports.createTokensResource = createTokensResource;
|
|
8393
8520
|
exports.createViemClient = createViemClient;
|
|
8394
8521
|
exports.createViemSdk = createViemSdk;
|
|
8395
8522
|
exports.createWithdrawalsResource = createWithdrawalsResource;
|
|
8396
|
-
exports.decodeRevert =
|
|
8523
|
+
exports.decodeRevert = decodeRevert2;
|
|
8397
8524
|
exports.encodeNativeTokenVaultTransferData = encodeNativeTokenVaultTransferData;
|
|
8398
8525
|
exports.encodeSecondBridgeArgs = encodeSecondBridgeArgs;
|
|
8399
8526
|
exports.encodeSecondBridgeDataV1 = encodeSecondBridgeDataV1;
|
|
8400
8527
|
exports.encodeSecondBridgeErc20Args = encodeSecondBridgeErc20Args;
|
|
8401
8528
|
exports.encodeSecondBridgeEthArgs = encodeSecondBridgeEthArgs;
|
|
8529
|
+
exports.getL2TransactionHashFromLogs = getL2TransactionHashFromLogs;
|
|
8402
8530
|
exports.registerErrorAbi = registerErrorAbi;
|
|
8403
|
-
exports.toZKsyncError =
|
|
8531
|
+
exports.toZKsyncError = toZKsyncError2;
|
|
8404
8532
|
//# sourceMappingURL=index.cjs.map
|
|
8405
8533
|
//# sourceMappingURL=index.cjs.map
|