@gzeoneth/gov-tracker 0.2.1-beta.ec7d8a7 → 0.2.1-beta.f5af747
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/README.md +126 -80
- package/dist/abis.d.ts +3 -0
- package/dist/abis.d.ts.map +1 -1
- package/dist/abis.js +30 -2
- package/dist/abis.js.map +1 -1
- package/dist/calldata/index.d.ts +1 -1
- package/dist/calldata/index.d.ts.map +1 -1
- package/dist/calldata/index.js.map +1 -1
- package/dist/calldata/parameter-decoder.d.ts.map +1 -1
- package/dist/calldata/parameter-decoder.js +8 -1
- package/dist/calldata/parameter-decoder.js.map +1 -1
- package/dist/calldata/signature-lookup.d.ts +17 -2
- package/dist/calldata/signature-lookup.d.ts.map +1 -1
- package/dist/calldata/signature-lookup.js +20 -2
- package/dist/calldata/signature-lookup.js.map +1 -1
- package/dist/cli/cli.js +266 -27
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/lib/cli.d.ts +50 -2
- package/dist/cli/lib/cli.d.ts.map +1 -1
- package/dist/cli/lib/cli.js +378 -66
- package/dist/cli/lib/cli.js.map +1 -1
- package/dist/cli/lib/json-state.d.ts +23 -0
- package/dist/cli/lib/json-state.d.ts.map +1 -1
- package/dist/cli/lib/json-state.js +51 -4
- package/dist/cli/lib/json-state.js.map +1 -1
- package/dist/constants.d.ts +9 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +16 -1
- package/dist/constants.js.map +1 -1
- package/dist/data/bundled-cache.json +3720 -1240
- package/dist/deduplication.d.ts +132 -0
- package/dist/deduplication.d.ts.map +1 -0
- package/dist/deduplication.js +270 -0
- package/dist/deduplication.js.map +1 -0
- package/dist/discovery/governor-discovery.d.ts.map +1 -1
- package/dist/discovery/governor-discovery.js +50 -35
- package/dist/discovery/governor-discovery.js.map +1 -1
- package/dist/discovery/timelock-discovery.d.ts +15 -6
- package/dist/discovery/timelock-discovery.d.ts.map +1 -1
- package/dist/discovery/timelock-discovery.js +27 -11
- package/dist/discovery/timelock-discovery.js.map +1 -1
- package/dist/election/contracts.d.ts +8 -0
- package/dist/election/contracts.d.ts.map +1 -0
- package/dist/election/contracts.js +28 -0
- package/dist/election/contracts.js.map +1 -0
- package/dist/election/details.d.ts +5 -0
- package/dist/election/details.d.ts.map +1 -0
- package/dist/election/details.js +95 -0
- package/dist/election/details.js.map +1 -0
- package/dist/election/index.d.ts +11 -0
- package/dist/election/index.d.ts.map +1 -0
- package/dist/election/index.js +45 -0
- package/dist/election/index.js.map +1 -0
- package/dist/election/params.d.ts +13 -0
- package/dist/election/params.d.ts.map +1 -0
- package/dist/election/params.js +93 -0
- package/dist/election/params.js.map +1 -0
- package/dist/election/participants.d.ts +6 -0
- package/dist/election/participants.d.ts.map +1 -0
- package/dist/election/participants.js +102 -0
- package/dist/election/participants.js.map +1 -0
- package/dist/election/prepare.d.ts +10 -0
- package/dist/election/prepare.d.ts.map +1 -0
- package/dist/election/prepare.js +52 -0
- package/dist/election/prepare.js.map +1 -0
- package/dist/election/proposal-ids.d.ts +18 -0
- package/dist/election/proposal-ids.d.ts.map +1 -0
- package/dist/election/proposal-ids.js +77 -0
- package/dist/election/proposal-ids.js.map +1 -0
- package/dist/election/status.d.ts +6 -0
- package/dist/election/status.d.ts.map +1 -0
- package/dist/election/status.js +86 -0
- package/dist/election/status.js.map +1 -0
- package/dist/election/tracking.d.ts +28 -0
- package/dist/election/tracking.d.ts.map +1 -0
- package/dist/election/tracking.js +412 -0
- package/dist/election/tracking.js.map +1 -0
- package/dist/index.d.ts +29 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +81 -8
- package/dist/index.js.map +1 -1
- package/dist/stages/builder.d.ts +4 -0
- package/dist/stages/builder.d.ts.map +1 -1
- package/dist/stages/builder.js +7 -0
- package/dist/stages/builder.js.map +1 -1
- package/dist/stages/l2-to-l1-message.d.ts +3 -1
- package/dist/stages/l2-to-l1-message.d.ts.map +1 -1
- package/dist/stages/l2-to-l1-message.js +6 -6
- package/dist/stages/l2-to-l1-message.js.map +1 -1
- package/dist/stages/proposal-created.d.ts +1 -0
- package/dist/stages/proposal-created.d.ts.map +1 -1
- package/dist/stages/proposal-created.js +1 -0
- package/dist/stages/proposal-created.js.map +1 -1
- package/dist/stages/proposal-queued.d.ts +1 -0
- package/dist/stages/proposal-queued.d.ts.map +1 -1
- package/dist/stages/proposal-queued.js +3 -1
- package/dist/stages/proposal-queued.js.map +1 -1
- package/dist/stages/retryables.js +2 -2
- package/dist/stages/retryables.js.map +1 -1
- package/dist/stages/timelock.d.ts +3 -1
- package/dist/stages/timelock.d.ts.map +1 -1
- package/dist/stages/timelock.js +11 -7
- package/dist/stages/timelock.js.map +1 -1
- package/dist/stages/utils.d.ts +4 -7
- package/dist/stages/utils.d.ts.map +1 -1
- package/dist/stages/utils.js +31 -22
- package/dist/stages/utils.js.map +1 -1
- package/dist/stages/voting.d.ts.map +1 -1
- package/dist/stages/voting.js +5 -4
- package/dist/stages/voting.js.map +1 -1
- package/dist/tracker/cache.d.ts +10 -6
- package/dist/tracker/cache.d.ts.map +1 -1
- package/dist/tracker/cache.js +36 -13
- package/dist/tracker/cache.js.map +1 -1
- package/dist/tracker/checkpoint-helpers.d.ts +63 -0
- package/dist/tracker/checkpoint-helpers.d.ts.map +1 -0
- package/dist/tracker/checkpoint-helpers.js +176 -0
- package/dist/tracker/checkpoint-helpers.js.map +1 -0
- package/dist/tracker/discovery.d.ts +40 -9
- package/dist/tracker/discovery.d.ts.map +1 -1
- package/dist/tracker/discovery.js +152 -15
- package/dist/tracker/discovery.js.map +1 -1
- package/dist/tracker/execute.d.ts.map +1 -1
- package/dist/tracker/execute.js +1 -25
- package/dist/tracker/execute.js.map +1 -1
- package/dist/tracker/pipeline.d.ts.map +1 -1
- package/dist/tracker/pipeline.js +26 -11
- package/dist/tracker/pipeline.js.map +1 -1
- package/dist/tracker/query.d.ts +1 -0
- package/dist/tracker/query.d.ts.map +1 -1
- package/dist/tracker/query.js +14 -61
- package/dist/tracker/query.js.map +1 -1
- package/dist/tracker/state.d.ts +0 -10
- package/dist/tracker/state.d.ts.map +1 -1
- package/dist/tracker/state.js +1 -28
- package/dist/tracker/state.js.map +1 -1
- package/dist/tracker.d.ts +69 -4
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +274 -13
- package/dist/tracker.js.map +1 -1
- package/dist/types/config.d.ts +49 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/core.d.ts +4 -2
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/election.d.ts +91 -0
- package/dist/types/election.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -7
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/stages.d.ts +70 -1
- package/dist/types/stages.d.ts.map +1 -1
- package/dist/types/stages.js.map +1 -1
- package/dist/types/tracking.d.ts +30 -4
- package/dist/types/tracking.d.ts.map +1 -1
- package/dist/utils/block-cache.d.ts +50 -0
- package/dist/utils/block-cache.d.ts.map +1 -0
- package/dist/utils/block-cache.js +80 -0
- package/dist/utils/block-cache.js.map +1 -0
- package/dist/utils/formatters.d.ts +91 -0
- package/dist/utils/formatters.d.ts.map +1 -0
- package/dist/utils/formatters.js +327 -0
- package/dist/utils/formatters.js.map +1 -0
- package/dist/utils/multicall.d.ts +52 -0
- package/dist/utils/multicall.d.ts.map +1 -0
- package/dist/utils/multicall.js +75 -0
- package/dist/utils/multicall.js.map +1 -0
- package/dist/utils/salt-computation.d.ts.map +1 -1
- package/dist/utils/salt-computation.js +33 -7
- package/dist/utils/salt-computation.js.map +1 -1
- package/dist/utils/stage-metadata.d.ts +0 -20
- package/dist/utils/stage-metadata.d.ts.map +1 -1
- package/dist/utils/stage-metadata.js +29 -44
- package/dist/utils/stage-metadata.js.map +1 -1
- package/dist/utils/timing.d.ts +13 -0
- package/dist/utils/timing.d.ts.map +1 -1
- package/dist/utils/timing.js +37 -1
- package/dist/utils/timing.js.map +1 -1
- package/package.json +10 -2
- package/dist/election.d.ts +0 -172
- package/dist/election.d.ts.map +0 -1
- package/dist/election.js +0 -467
- package/dist/election.js.map +0 -1
- package/dist/types/cross-chain.d.ts +0 -24
- package/dist/types/cross-chain.d.ts.map +0 -1
- package/dist/types/cross-chain.js +0 -6
- package/dist/types/cross-chain.js.map +0 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure formatting utilities for display and logging
|
|
3
|
+
*
|
|
4
|
+
* These functions have no React/Ink dependencies and can be used
|
|
5
|
+
* by both the SDK and TUI.
|
|
6
|
+
*/
|
|
7
|
+
import type { TrackedStage, TrackingInput, DecodedCalldata } from "../types/index.js";
|
|
8
|
+
import type { Chain } from "../types/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* Wrap text to fit within a given width, breaking at character boundaries
|
|
11
|
+
*/
|
|
12
|
+
export declare function wrapText(text: string, width: number): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Truncate text with ellipsis if it exceeds maxLen
|
|
15
|
+
*/
|
|
16
|
+
export declare function truncate(str: string, maxLen: number): string;
|
|
17
|
+
/**
|
|
18
|
+
* Safely stringify a value, returning a fallback for complex objects
|
|
19
|
+
*/
|
|
20
|
+
export declare function safeStringify(value: unknown): string;
|
|
21
|
+
/**
|
|
22
|
+
* Format an unknown value for display
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatValue(value: unknown): string;
|
|
25
|
+
/**
|
|
26
|
+
* Format a Unix timestamp to locale string
|
|
27
|
+
*/
|
|
28
|
+
export declare function formatDate(timestamp: number | null): string;
|
|
29
|
+
/**
|
|
30
|
+
* Chain to chain ID mapping
|
|
31
|
+
*/
|
|
32
|
+
export declare const CHAIN_TO_CHAIN_ID: Record<Chain, number>;
|
|
33
|
+
/**
|
|
34
|
+
* A formatted stage data item
|
|
35
|
+
*/
|
|
36
|
+
export interface StageDataItem {
|
|
37
|
+
label: string;
|
|
38
|
+
value: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Format stage data for display, prioritizing important fields
|
|
42
|
+
*/
|
|
43
|
+
export declare function formatStageData(stage: TrackedStage): StageDataItem[];
|
|
44
|
+
/**
|
|
45
|
+
* Extract transaction hash from tracking input
|
|
46
|
+
*/
|
|
47
|
+
export declare function getTxHash(input: TrackingInput): string;
|
|
48
|
+
/**
|
|
49
|
+
* Get display-friendly proposal or operation ID from tracking input
|
|
50
|
+
*/
|
|
51
|
+
export declare function getProposalIdDisplay(input: TrackingInput): string;
|
|
52
|
+
/**
|
|
53
|
+
* A formatted line for calldata display
|
|
54
|
+
*/
|
|
55
|
+
export interface FormattedLine {
|
|
56
|
+
text: string;
|
|
57
|
+
indent: number;
|
|
58
|
+
foldable: boolean;
|
|
59
|
+
foldKey?: string;
|
|
60
|
+
foldedLineCount?: number;
|
|
61
|
+
isFoldedContent?: boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Format decoded calldata into displayable lines
|
|
65
|
+
*/
|
|
66
|
+
export declare function formatDecodedCalldata(decoded: DecodedCalldata, indent?: number, keyPrefix?: string): FormattedLine[];
|
|
67
|
+
/**
|
|
68
|
+
* Filter lines based on expanded fold keys
|
|
69
|
+
*/
|
|
70
|
+
export declare function filterVisibleLines(allLines: FormattedLine[], expandedKeys: Set<string>): FormattedLine[];
|
|
71
|
+
/**
|
|
72
|
+
* Get all foldable keys from lines
|
|
73
|
+
*/
|
|
74
|
+
export declare function getAllFoldableKeys(lines: FormattedLine[]): string[];
|
|
75
|
+
/**
|
|
76
|
+
* Toggle a fold key in the expanded set
|
|
77
|
+
*/
|
|
78
|
+
export declare function toggleFoldKey(expandedKeys: Set<string>, foldKey: string): Set<string>;
|
|
79
|
+
/**
|
|
80
|
+
* Format duration in seconds to human-readable string
|
|
81
|
+
*
|
|
82
|
+
* Displays the two most significant time units (e.g., "2d 3h" or "5m 30s").
|
|
83
|
+
* Returns "now" for zero or negative values.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* formatDuration(90061) // => "1d 1h"
|
|
87
|
+
* formatDuration(3661) // => "1h 1m"
|
|
88
|
+
* formatDuration(65) // => "1m 5s"
|
|
89
|
+
*/
|
|
90
|
+
export declare function formatDuration(seconds: number): string;
|
|
91
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAM/C;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAO9D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAI5D;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYlD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAG3D;AAMD;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAKnD,CAAC;AAoCF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,EAAE,CA6BpE;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAUtD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAWjE;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAuDD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,eAAe,EACxB,MAAM,SAAI,EACV,SAAS,SAAS,GACjB,aAAa,EAAE,CAoBjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EAAE,EACzB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,aAAa,EAAE,CAKjB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAEnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAQrF;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgBtD"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pure formatting utilities for display and logging
|
|
4
|
+
*
|
|
5
|
+
* These functions have no React/Ink dependencies and can be used
|
|
6
|
+
* by both the SDK and TUI.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.CHAIN_TO_CHAIN_ID = void 0;
|
|
10
|
+
exports.wrapText = wrapText;
|
|
11
|
+
exports.truncate = truncate;
|
|
12
|
+
exports.safeStringify = safeStringify;
|
|
13
|
+
exports.formatValue = formatValue;
|
|
14
|
+
exports.formatDate = formatDate;
|
|
15
|
+
exports.formatStageData = formatStageData;
|
|
16
|
+
exports.getTxHash = getTxHash;
|
|
17
|
+
exports.getProposalIdDisplay = getProposalIdDisplay;
|
|
18
|
+
exports.formatDecodedCalldata = formatDecodedCalldata;
|
|
19
|
+
exports.filterVisibleLines = filterVisibleLines;
|
|
20
|
+
exports.getAllFoldableKeys = getAllFoldableKeys;
|
|
21
|
+
exports.toggleFoldKey = toggleFoldKey;
|
|
22
|
+
exports.formatDuration = formatDuration;
|
|
23
|
+
const constants_js_1 = require("../constants.js");
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// Text Utilities
|
|
26
|
+
// ============================================================================
|
|
27
|
+
/**
|
|
28
|
+
* Wrap text to fit within a given width, breaking at character boundaries
|
|
29
|
+
*/
|
|
30
|
+
function wrapText(text, width) {
|
|
31
|
+
if (text.length <= width)
|
|
32
|
+
return [text];
|
|
33
|
+
const lines = [];
|
|
34
|
+
for (let i = 0; i < text.length; i += width) {
|
|
35
|
+
lines.push(text.slice(i, i + width));
|
|
36
|
+
}
|
|
37
|
+
return lines;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Truncate text with ellipsis if it exceeds maxLen
|
|
41
|
+
*/
|
|
42
|
+
function truncate(str, maxLen) {
|
|
43
|
+
if (maxLen <= 1)
|
|
44
|
+
return str.length > 0 ? "..." : "";
|
|
45
|
+
if (str.length <= maxLen)
|
|
46
|
+
return str;
|
|
47
|
+
return str.slice(0, maxLen - 1) + "...";
|
|
48
|
+
}
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// Value Formatting
|
|
51
|
+
// ============================================================================
|
|
52
|
+
/**
|
|
53
|
+
* Safely stringify a value, returning a fallback for complex objects
|
|
54
|
+
*/
|
|
55
|
+
function safeStringify(value) {
|
|
56
|
+
try {
|
|
57
|
+
return JSON.stringify(value);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return "[complex object]";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Format an unknown value for display
|
|
65
|
+
*/
|
|
66
|
+
function formatValue(value) {
|
|
67
|
+
if (value === null || value === undefined)
|
|
68
|
+
return "N/A";
|
|
69
|
+
if (typeof value === "string")
|
|
70
|
+
return value;
|
|
71
|
+
if (typeof value === "number")
|
|
72
|
+
return value.toString();
|
|
73
|
+
if (typeof value === "boolean")
|
|
74
|
+
return value ? "Yes" : "No";
|
|
75
|
+
if (Array.isArray(value)) {
|
|
76
|
+
if (value.length === 0)
|
|
77
|
+
return "[]";
|
|
78
|
+
if (value.length <= 3)
|
|
79
|
+
return safeStringify(value);
|
|
80
|
+
return `[${value.length} items]`;
|
|
81
|
+
}
|
|
82
|
+
if (typeof value === "object")
|
|
83
|
+
return safeStringify(value);
|
|
84
|
+
return String(value);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Format a Unix timestamp to locale string
|
|
88
|
+
*/
|
|
89
|
+
function formatDate(timestamp) {
|
|
90
|
+
if (timestamp === null)
|
|
91
|
+
return "Unknown";
|
|
92
|
+
return new Date(timestamp).toLocaleString();
|
|
93
|
+
}
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// Stage Formatting
|
|
96
|
+
// ============================================================================
|
|
97
|
+
/**
|
|
98
|
+
* Chain to chain ID mapping
|
|
99
|
+
*/
|
|
100
|
+
exports.CHAIN_TO_CHAIN_ID = {
|
|
101
|
+
ethereum: constants_js_1.CHAIN_IDS.ETHEREUM,
|
|
102
|
+
arb1: constants_js_1.CHAIN_IDS.ARB_ONE,
|
|
103
|
+
nova: constants_js_1.CHAIN_IDS.NOVA,
|
|
104
|
+
unknown: constants_js_1.CHAIN_IDS.ETHEREUM,
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Priority fields shown first in stage data
|
|
108
|
+
*/
|
|
109
|
+
const STAGE_PRIORITY_FIELDS = [
|
|
110
|
+
"proposalId",
|
|
111
|
+
"operationId",
|
|
112
|
+
"proposer",
|
|
113
|
+
"description",
|
|
114
|
+
"proposalState",
|
|
115
|
+
"forVotes",
|
|
116
|
+
"againstVotes",
|
|
117
|
+
"abstainVotes",
|
|
118
|
+
"quorum",
|
|
119
|
+
"quorumReached",
|
|
120
|
+
"timelockAddress",
|
|
121
|
+
"eta",
|
|
122
|
+
"state",
|
|
123
|
+
"messageCount",
|
|
124
|
+
"ticketCount",
|
|
125
|
+
"redeemedCount",
|
|
126
|
+
];
|
|
127
|
+
/**
|
|
128
|
+
* Fields to skip in stage data display
|
|
129
|
+
*/
|
|
130
|
+
const STAGE_SKIP_FIELDS = [
|
|
131
|
+
"targets",
|
|
132
|
+
"values",
|
|
133
|
+
"calldatas",
|
|
134
|
+
"signatures",
|
|
135
|
+
"callScheduledData",
|
|
136
|
+
"_rawBytesArray",
|
|
137
|
+
];
|
|
138
|
+
/**
|
|
139
|
+
* Format stage data for display, prioritizing important fields
|
|
140
|
+
*/
|
|
141
|
+
function formatStageData(stage) {
|
|
142
|
+
const items = [];
|
|
143
|
+
const data = stage.data;
|
|
144
|
+
if (!data)
|
|
145
|
+
return items;
|
|
146
|
+
for (const field of STAGE_PRIORITY_FIELDS) {
|
|
147
|
+
if (field in data && data[field] !== undefined) {
|
|
148
|
+
let value = formatValue(data[field]);
|
|
149
|
+
if (field === "description" && value.length > 100) {
|
|
150
|
+
value = value.slice(0, 100) + "...";
|
|
151
|
+
}
|
|
152
|
+
items.push({ label: field, value });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
for (const [key, value] of Object.entries(data)) {
|
|
156
|
+
if (STAGE_PRIORITY_FIELDS.includes(key))
|
|
157
|
+
continue;
|
|
158
|
+
if (STAGE_SKIP_FIELDS.includes(key))
|
|
159
|
+
continue;
|
|
160
|
+
if (value === undefined || value === null)
|
|
161
|
+
continue;
|
|
162
|
+
let formattedValue = formatValue(value);
|
|
163
|
+
if (formattedValue.length > 80) {
|
|
164
|
+
formattedValue = formattedValue.slice(0, 80) + "...";
|
|
165
|
+
}
|
|
166
|
+
items.push({ label: key, value: formattedValue });
|
|
167
|
+
}
|
|
168
|
+
return items;
|
|
169
|
+
}
|
|
170
|
+
// ============================================================================
|
|
171
|
+
// Tracking Input Helpers
|
|
172
|
+
// ============================================================================
|
|
173
|
+
/**
|
|
174
|
+
* Extract transaction hash from tracking input
|
|
175
|
+
*/
|
|
176
|
+
function getTxHash(input) {
|
|
177
|
+
switch (input.type) {
|
|
178
|
+
case "governor":
|
|
179
|
+
return input.creationTxHash;
|
|
180
|
+
case "timelock":
|
|
181
|
+
return input.scheduledTxHash;
|
|
182
|
+
case "discovery":
|
|
183
|
+
case "election":
|
|
184
|
+
return "";
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get display-friendly proposal or operation ID from tracking input
|
|
189
|
+
*/
|
|
190
|
+
function getProposalIdDisplay(input) {
|
|
191
|
+
switch (input.type) {
|
|
192
|
+
case "governor":
|
|
193
|
+
return input.proposalId;
|
|
194
|
+
case "timelock":
|
|
195
|
+
return input.operationId;
|
|
196
|
+
case "discovery":
|
|
197
|
+
return input.id;
|
|
198
|
+
case "election":
|
|
199
|
+
return `election-${input.electionIndex}`;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const CALLDATA_FOLD_THRESHOLD = 100;
|
|
203
|
+
function formatCalldataParameter(param, indent, keyPrefix) {
|
|
204
|
+
const lines = [];
|
|
205
|
+
const foldKey = `${keyPrefix}-${param.name}`;
|
|
206
|
+
let value = param.displayValue;
|
|
207
|
+
if (param.addressLabel) {
|
|
208
|
+
value = `${param.displayValue} [${param.addressLabel}]`;
|
|
209
|
+
}
|
|
210
|
+
const isFoldable = value.length > CALLDATA_FOLD_THRESHOLD;
|
|
211
|
+
const wrappedLines = isFoldable ? wrapText(value, 80) : [value];
|
|
212
|
+
lines.push({
|
|
213
|
+
text: `${param.name} (${param.type}): ${wrappedLines[0]}`,
|
|
214
|
+
indent,
|
|
215
|
+
foldable: isFoldable,
|
|
216
|
+
foldKey: isFoldable ? foldKey : undefined,
|
|
217
|
+
foldedLineCount: isFoldable ? wrappedLines.length - 1 : undefined,
|
|
218
|
+
});
|
|
219
|
+
if (isFoldable && wrappedLines.length > 1) {
|
|
220
|
+
for (let i = 1; i < wrappedLines.length; i++) {
|
|
221
|
+
lines.push({
|
|
222
|
+
text: wrappedLines[i],
|
|
223
|
+
indent: indent + 1,
|
|
224
|
+
foldable: false,
|
|
225
|
+
isFoldedContent: true,
|
|
226
|
+
foldKey,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (param.nested) {
|
|
231
|
+
lines.push({ text: "|- [NESTED]", indent: indent + 1, foldable: false });
|
|
232
|
+
lines.push(...formatDecodedCalldata(param.nested, indent + 2, `${foldKey}-nested`));
|
|
233
|
+
}
|
|
234
|
+
if (param.nestedArray && param.nestedArray.length > 0) {
|
|
235
|
+
param.nestedArray.forEach((nested, i) => {
|
|
236
|
+
lines.push({ text: `[${i}]:`, indent: indent + 1, foldable: false });
|
|
237
|
+
lines.push(...formatDecodedCalldata(nested, indent + 2, `${foldKey}-arr-${i}`));
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
return lines;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Format decoded calldata into displayable lines
|
|
244
|
+
*/
|
|
245
|
+
function formatDecodedCalldata(decoded, indent = 0, keyPrefix = "root") {
|
|
246
|
+
const lines = [];
|
|
247
|
+
let header;
|
|
248
|
+
if (decoded.isRetryable) {
|
|
249
|
+
header = `Retryable Ticket -> ${decoded.targetChain}`;
|
|
250
|
+
}
|
|
251
|
+
else if (decoded.signature) {
|
|
252
|
+
header = decoded.signature;
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
header = `Unknown function (${decoded.selector})`;
|
|
256
|
+
}
|
|
257
|
+
lines.push({ text: header, indent, foldable: false });
|
|
258
|
+
if (decoded.parameters) {
|
|
259
|
+
decoded.parameters.forEach((param, i) => {
|
|
260
|
+
lines.push(...formatCalldataParameter(param, indent + 1, `${keyPrefix}-p${i}`));
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
return lines;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Filter lines based on expanded fold keys
|
|
267
|
+
*/
|
|
268
|
+
function filterVisibleLines(allLines, expandedKeys) {
|
|
269
|
+
return allLines.filter((line) => {
|
|
270
|
+
if (!line.isFoldedContent)
|
|
271
|
+
return true;
|
|
272
|
+
return line.foldKey && expandedKeys.has(line.foldKey);
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get all foldable keys from lines
|
|
277
|
+
*/
|
|
278
|
+
function getAllFoldableKeys(lines) {
|
|
279
|
+
return lines.filter((l) => l.foldable && l.foldKey).map((l) => l.foldKey);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Toggle a fold key in the expanded set
|
|
283
|
+
*/
|
|
284
|
+
function toggleFoldKey(expandedKeys, foldKey) {
|
|
285
|
+
const next = new Set(expandedKeys);
|
|
286
|
+
if (next.has(foldKey)) {
|
|
287
|
+
next.delete(foldKey);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
next.add(foldKey);
|
|
291
|
+
}
|
|
292
|
+
return next;
|
|
293
|
+
}
|
|
294
|
+
// ============================================================================
|
|
295
|
+
// Duration Formatting
|
|
296
|
+
// ============================================================================
|
|
297
|
+
/**
|
|
298
|
+
* Format duration in seconds to human-readable string
|
|
299
|
+
*
|
|
300
|
+
* Displays the two most significant time units (e.g., "2d 3h" or "5m 30s").
|
|
301
|
+
* Returns "now" for zero or negative values.
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* formatDuration(90061) // => "1d 1h"
|
|
305
|
+
* formatDuration(3661) // => "1h 1m"
|
|
306
|
+
* formatDuration(65) // => "1m 5s"
|
|
307
|
+
*/
|
|
308
|
+
function formatDuration(seconds) {
|
|
309
|
+
if (seconds <= 0)
|
|
310
|
+
return "now";
|
|
311
|
+
const totalSeconds = Math.floor(seconds);
|
|
312
|
+
const days = Math.floor(totalSeconds / 86400);
|
|
313
|
+
const hours = Math.floor((totalSeconds % 86400) / 3600);
|
|
314
|
+
const minutes = Math.floor((totalSeconds % 3600) / 60);
|
|
315
|
+
const secs = totalSeconds % 60;
|
|
316
|
+
const parts = [];
|
|
317
|
+
if (days > 0)
|
|
318
|
+
parts.push(`${days}d`);
|
|
319
|
+
if (hours > 0 && parts.length < 2)
|
|
320
|
+
parts.push(`${hours}h`);
|
|
321
|
+
if (minutes > 0 && parts.length < 2)
|
|
322
|
+
parts.push(`${minutes}m`);
|
|
323
|
+
if (secs > 0 && parts.length < 2)
|
|
324
|
+
parts.push(`${secs}s`);
|
|
325
|
+
return parts.join(" ") || "0s";
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/utils/formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multicall utilities for batching L2 RPC calls
|
|
3
|
+
*
|
|
4
|
+
* Wraps @arbitrum/sdk's MultiCaller to batch multiple contract calls into a single RPC request.
|
|
5
|
+
* Only use for L2 calls - L1 RPCs are typically rate-limited and don't benefit as much.
|
|
6
|
+
*/
|
|
7
|
+
import { ethers } from "ethers";
|
|
8
|
+
import { MultiCaller, CallInput } from "@arbitrum/sdk";
|
|
9
|
+
/**
|
|
10
|
+
* Create a MultiCaller instance for the given provider
|
|
11
|
+
*
|
|
12
|
+
* Uses the SDK's address resolution to find the correct Multicall2 contract.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getMultiCaller(provider: ethers.providers.Provider): Promise<MultiCaller>;
|
|
15
|
+
/**
|
|
16
|
+
* Build a CallInput for a contract method call
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const input = buildCallInput(
|
|
21
|
+
* timelockAddress,
|
|
22
|
+
* timelockInterface,
|
|
23
|
+
* "isOperationReady",
|
|
24
|
+
* [operationId]
|
|
25
|
+
* );
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildCallInput<T>(targetAddr: string, iface: ethers.utils.Interface, method: string, args?: unknown[]): CallInput<T>;
|
|
29
|
+
/**
|
|
30
|
+
* Execute multiple calls in a single RPC request
|
|
31
|
+
*
|
|
32
|
+
* @param provider - L2 provider (Arbitrum One/Nova)
|
|
33
|
+
* @param calls - Array of CallInput objects
|
|
34
|
+
* @param requireSuccess - If true, reverts if any call fails. If false, failed calls return undefined.
|
|
35
|
+
* @returns Array of results in the same order as inputs
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const timelockIface = new ethers.utils.Interface(TIMELOCK_ABI);
|
|
40
|
+
*
|
|
41
|
+
* const [isReady, isDone, timestamp] = await multicall(provider, [
|
|
42
|
+
* buildCallInput(timelockAddr, timelockIface, "isOperationReady", [opId]),
|
|
43
|
+
* buildCallInput(timelockAddr, timelockIface, "isOperationDone", [opId]),
|
|
44
|
+
* buildCallInput(timelockAddr, timelockIface, "getTimestamp", [opId]),
|
|
45
|
+
* ]);
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function multicall<T extends CallInput<unknown>[]>(provider: ethers.providers.Provider, calls: [...T], requireSuccess?: boolean): Promise<{
|
|
49
|
+
[K in keyof T]: T[K] extends CallInput<infer U> ? U | undefined : never;
|
|
50
|
+
}>;
|
|
51
|
+
export { CallInput } from "@arbitrum/sdk";
|
|
52
|
+
//# sourceMappingURL=multicall.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/utils/multicall.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAKvD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAE9F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAC7B,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,OAAO,EAAO,GACnB,SAAS,CAAC,CAAC,CAAC,CASd;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,SAAS,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,EAC5D,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EACb,cAAc,GAAE,OAAe,GAC9B,OAAO,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK;CAAE,CAAC,CAatF;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Multicall utilities for batching L2 RPC calls
|
|
4
|
+
*
|
|
5
|
+
* Wraps @arbitrum/sdk's MultiCaller to batch multiple contract calls into a single RPC request.
|
|
6
|
+
* Only use for L2 calls - L1 RPCs are typically rate-limited and don't benefit as much.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.getMultiCaller = getMultiCaller;
|
|
10
|
+
exports.buildCallInput = buildCallInput;
|
|
11
|
+
exports.multicall = multicall;
|
|
12
|
+
const sdk_1 = require("@arbitrum/sdk");
|
|
13
|
+
const logger_1 = require("./logger");
|
|
14
|
+
const log = logger_1.loggers.rpc;
|
|
15
|
+
/**
|
|
16
|
+
* Create a MultiCaller instance for the given provider
|
|
17
|
+
*
|
|
18
|
+
* Uses the SDK's address resolution to find the correct Multicall2 contract.
|
|
19
|
+
*/
|
|
20
|
+
async function getMultiCaller(provider) {
|
|
21
|
+
return sdk_1.MultiCaller.fromProvider(provider);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build a CallInput for a contract method call
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const input = buildCallInput(
|
|
29
|
+
* timelockAddress,
|
|
30
|
+
* timelockInterface,
|
|
31
|
+
* "isOperationReady",
|
|
32
|
+
* [operationId]
|
|
33
|
+
* );
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
function buildCallInput(targetAddr, iface, method, args = []) {
|
|
37
|
+
return {
|
|
38
|
+
targetAddr,
|
|
39
|
+
encoder: () => iface.encodeFunctionData(method, args),
|
|
40
|
+
decoder: (returnData) => {
|
|
41
|
+
const result = iface.decodeFunctionResult(method, returnData);
|
|
42
|
+
return result[0];
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Execute multiple calls in a single RPC request
|
|
48
|
+
*
|
|
49
|
+
* @param provider - L2 provider (Arbitrum One/Nova)
|
|
50
|
+
* @param calls - Array of CallInput objects
|
|
51
|
+
* @param requireSuccess - If true, reverts if any call fails. If false, failed calls return undefined.
|
|
52
|
+
* @returns Array of results in the same order as inputs
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const timelockIface = new ethers.utils.Interface(TIMELOCK_ABI);
|
|
57
|
+
*
|
|
58
|
+
* const [isReady, isDone, timestamp] = await multicall(provider, [
|
|
59
|
+
* buildCallInput(timelockAddr, timelockIface, "isOperationReady", [opId]),
|
|
60
|
+
* buildCallInput(timelockAddr, timelockIface, "isOperationDone", [opId]),
|
|
61
|
+
* buildCallInput(timelockAddr, timelockIface, "getTimestamp", [opId]),
|
|
62
|
+
* ]);
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
async function multicall(provider, calls, requireSuccess = false) {
|
|
66
|
+
if (calls.length === 0) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
log("multicall: batching %d calls", calls.length);
|
|
70
|
+
const multiCaller = await getMultiCaller(provider);
|
|
71
|
+
const results = await multiCaller.multiCall(calls, requireSuccess);
|
|
72
|
+
log("multicall: completed %d calls", calls.length);
|
|
73
|
+
return results;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=multicall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multicall.js","sourceRoot":"","sources":["../../src/utils/multicall.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAaH,wCAEC;AAeD,wCAcC;AAqBD,8BAiBC;AA/ED,uCAAuD;AACvD,qCAAmC;AAEnC,MAAM,GAAG,GAAG,gBAAO,CAAC,GAAG,CAAC;AAExB;;;;GAIG;AACI,KAAK,UAAU,cAAc,CAAC,QAAmC;IACtE,OAAO,iBAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,cAAc,CAC5B,UAAkB,EAClB,KAA6B,EAC7B,MAAc,EACd,OAAkB,EAAE;IAEpB,OAAO;QACL,UAAU;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC;QACrD,OAAO,EAAE,CAAC,UAAkB,EAAK,EAAE;YACjC,MAAM,MAAM,GAAG,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YAC9D,OAAO,MAAM,CAAC,CAAC,CAAM,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACI,KAAK,UAAU,SAAS,CAC7B,QAAmC,EACnC,KAAa,EACb,iBAA0B,KAAK;IAE/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAiF,CAAC;IAC3F,CAAC;IAED,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAEnE,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEnD,OAAO,OAAsF,CAAC;AAChG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salt-computation.d.ts","sourceRoot":"","sources":["../../src/utils/salt-computation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAKxC;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAClC,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;CAClB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAEN;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAgC7F;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE;IACT,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACpD,EACD,SAAS,CAAC,EAAE,YAAY,EAAE,EAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GACnC,OAAO,CAAC,MAAM,CAAC,CA2BjB;
|
|
1
|
+
{"version":3,"file":"salt-computation.d.ts","sourceRoot":"","sources":["../../src/utils/salt-computation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAKxC;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GAClC,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;CAClB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAEN;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAgC7F;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE;IACT,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACpD,EACD,SAAS,CAAC,EAAE,YAAY,EAAE,EAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,GACnC,OAAO,CAAC,MAAM,CAAC,CA2BjB;AA2BD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,GAAG;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAmBA"}
|
|
@@ -98,6 +98,30 @@ async function computeL2TimelockSalt(stageData, allStages, provider) {
|
|
|
98
98
|
// Priority 3: HashZero fallback
|
|
99
99
|
return ethers_1.ethers.constants.HashZero;
|
|
100
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Extract calldata from L2ToL1Tx event
|
|
103
|
+
*
|
|
104
|
+
* Handles both live event object (with .data property) and serialized array format
|
|
105
|
+
* where the data field is at index 8 (the 9th element):
|
|
106
|
+
* [caller, destination, hash, position, arbBlockNum, ethBlockNum, timestamp, callvalue, data]
|
|
107
|
+
*/
|
|
108
|
+
function extractL2ToL1TxData(l2ToL1TxEvent) {
|
|
109
|
+
if (!l2ToL1TxEvent)
|
|
110
|
+
return null;
|
|
111
|
+
// Handle object format (live event)
|
|
112
|
+
if (typeof l2ToL1TxEvent === "object" && !Array.isArray(l2ToL1TxEvent)) {
|
|
113
|
+
const data = l2ToL1TxEvent.data;
|
|
114
|
+
if (typeof data === "string")
|
|
115
|
+
return data;
|
|
116
|
+
}
|
|
117
|
+
// Handle array format (serialized from cache)
|
|
118
|
+
if (Array.isArray(l2ToL1TxEvent) && l2ToL1TxEvent.length >= 9) {
|
|
119
|
+
const data = l2ToL1TxEvent[8];
|
|
120
|
+
if (typeof data === "string")
|
|
121
|
+
return data;
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
101
125
|
/**
|
|
102
126
|
* Compute salt for L1 timelock stage
|
|
103
127
|
*
|
|
@@ -109,13 +133,15 @@ function computeL1TimelockSalt(allStages) {
|
|
|
109
133
|
if (allStages) {
|
|
110
134
|
const l2ToL1Stage = allStages.find((s) => s.type === "L2_TO_L1_MESSAGE");
|
|
111
135
|
if (l2ToL1Stage?.data.l2ToL1TxEvent) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
136
|
+
const l2ToL1TxData = extractL2ToL1TxData(l2ToL1Stage.data.l2ToL1TxEvent);
|
|
137
|
+
if (l2ToL1TxData) {
|
|
138
|
+
const decoded = decodeL1TimelockSchedule(l2ToL1TxData);
|
|
139
|
+
if (decoded) {
|
|
140
|
+
return {
|
|
141
|
+
salt: decoded.salt,
|
|
142
|
+
predecessor: decoded.predecessor,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
119
145
|
}
|
|
120
146
|
}
|
|
121
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salt-computation.js","sourceRoot":"","sources":["../../src/utils/salt-computation.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAcH,kDAEC;AASD,kEAaC;AAkCD,4DAgCC;AAUD,sDAmCC;
|
|
1
|
+
{"version":3,"file":"salt-computation.js","sourceRoot":"","sources":["../../src/utils/salt-computation.ts"],"names":[],"mappings":"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"}
|