slotdiff 0.1.0-alpha.1 → 0.2.0-alpha.1

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.
Files changed (51) hide show
  1. package/CHANGELOG.md +16 -9
  2. package/README.md +196 -105
  3. package/dist/bin.d.ts +3 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +22 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/build-info.d.ts +45 -0
  8. package/dist/build-info.d.ts.map +1 -0
  9. package/dist/build-info.js +319 -0
  10. package/dist/build-info.js.map +1 -0
  11. package/dist/cli.d.ts +25 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +363 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/erc7201.d.ts +72 -0
  16. package/dist/erc7201.d.ts.map +1 -0
  17. package/dist/erc7201.js +340 -0
  18. package/dist/erc7201.js.map +1 -0
  19. package/dist/errors.d.ts +5 -0
  20. package/dist/errors.d.ts.map +1 -1
  21. package/dist/errors.js +8 -0
  22. package/dist/errors.js.map +1 -1
  23. package/dist/explorer.js +2 -2
  24. package/dist/explorer.js.map +1 -1
  25. package/dist/index.d.ts +3 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +3 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/reconstruct.d.ts +51 -3
  30. package/dist/reconstruct.d.ts.map +1 -1
  31. package/dist/reconstruct.js +37 -8
  32. package/dist/reconstruct.js.map +1 -1
  33. package/dist/report.d.ts +26 -0
  34. package/dist/report.d.ts.map +1 -0
  35. package/dist/report.js +109 -0
  36. package/dist/report.js.map +1 -0
  37. package/dist/resolve.d.ts +11 -0
  38. package/dist/resolve.d.ts.map +1 -1
  39. package/dist/resolve.js +11 -1
  40. package/dist/resolve.js.map +1 -1
  41. package/package.json +6 -3
  42. package/src/bin.ts +25 -0
  43. package/src/build-info.ts +405 -0
  44. package/src/cli.ts +423 -0
  45. package/src/erc7201.ts +412 -0
  46. package/src/errors.ts +9 -0
  47. package/src/explorer.ts +2 -2
  48. package/src/index.ts +18 -1
  49. package/src/reconstruct.ts +111 -10
  50. package/src/report.ts +155 -0
  51. package/src/resolve.ts +17 -2
@@ -1 +1 @@
1
- {"version":3,"file":"reconstruct.js","sourceRoot":"","sources":["../src/reconstruct.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reconstruct.js","sourceRoot":"","sources":["../src/reconstruct.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,8BAA8B,EAC9B,QAAQ,GAOT,MAAM,6BAA6B,CAAC;AACrC,uEAAuE;AACvE,OAAO,EAAE,UAAU,EAAwB,MAAM,kDAAkD,CAAC;AACpG,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAqB,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAsB,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAWnD,4EAA4E;AAC5E,8EAA8E;AAC9E,MAAM,cAAc,GAAG;IACrB,GAAG,EAAE;QACH,GAAG,EAAE;YACH,eAAe;YACf,qBAAqB;YACrB,6BAA6B;YAC7B,6BAA6B;YAC7B,0CAA0C;SAC3C;QACD,EAAE,EAAE,CAAC,KAAK,CAAC;KACZ;CACF,CAAC;AAEF,oFAAoF;AACpF,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAsB,EACtB,IAAgB,EAChB,WAAmB;IAEnB,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAEpE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,iBAAiB,CACnD,MAAM,EACN,MAAM,CAAC,YAAY,EACnB,WAAW,EACX,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAC/B,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,QAAQ,EAAE,MAAM,CAAC,eAAe;QAChC,aAAa;QACb,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAgB,EAChB,IAAgB,EAChB,QAAgB;IAEhB,OAAO,CAAC,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC;AAaD,MAAM,CAAC,MAAM,kBAAkB,GAA+B,UAAU,CAAC,MAAM,CAC7E,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,KAAK,mBAAmB,IAAI,CAAC,KAAK,iBAAiB,CAClF,CAAC;AA4CF,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAgB,EAChB,IAAgB,EAChB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC5D,OAAO,OAAO,CAAC,QAAQ,EAAE,MAAM,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,KAAgB,EAChB,MAAkB,EAClB,IAAgB,EAChB,QAAgB;IAEhB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO;QACL,MAAM;QACN,6DAA6D;QAC7D,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,CAA2B;QAC7D,UAAU,EAAE,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE;YAC/B,yDAAyD;YACzD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC;YACrD,iFAAiF;YACjF,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAyC,CAAC;YACtF,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;gBACvB,MAAM;gBACN,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,8BAA8B,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;aACpE,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,KAAgB,EAChB,MAAkB,EAClB,IAAgB,EAChB,QAAgB;IAEhB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,IAAI,gBAAwC,CAAC;IAC7C,IAAI,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,IAAI,eAAe,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACtE,eAAe,GAAG,MAAM,kBAAkB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QACzE,gBAAgB,GAAG,MAAM,cAAc,CACrC,IAAI,EACJ,mBAAmB,CAAC,eAAe,EAAE,gBAAgB,CAAC,EACtD,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CACtB,MAAM,EACN,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,EACrC,WAAW,EACX,KAAK,EACL,gBAAgB,CACjB,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,oBAAoB,CAC5B,GAAG,QAAQ,iEAAiE;YAC1E,2BAA2B,CAC9B,CAAC;IACJ,CAAC;IACD,6EAA6E;IAC7E,2EAA2E;IAC3E,yFAAyF;IACzF,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC;AAC1E,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,MAAkB,EAClB,YAAoB,EACpB,WAAmB,EACnB,MAAe;IAEf,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,IAAmE,CAAC;IACxE,IAAI,IAA+C,CAAC;IACpD,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAS1B,CAAC;QACd,MAAM,QAAQ,GAAG,QAAQ,EAAE,GAAG,EAAE,gBAAgB,CAAC;QACjD,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS;YAAE,SAAS;QAC7C,UAAU,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,uBAAuB,CACtC,WAAW,EACX,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,mBAAmB,CAC7B,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3E,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,WAAW;YAAE,IAAI,KAAK,KAAK,CAAC;QACvE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE,SAAS;QACrC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,EAAE,CAAC;YAChF,IAAI,GAAG,EAAE,QAAQ,EAAE,GAAG,UAAU,IAAI,YAAY,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEpC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,oBAAoB,CAAC,0CAA0C,YAAY,IAAI,CAAC,CAAC;IAC7F,CAAC;IACD,iGAAiG;IACjG,MAAM,IAAI,oBAAoB,CAC5B,IAAI,KAAK,eAAe;QACtB,CAAC,CAAC,wBAAwB,YAAY,mDAAmD;YACrF,mFAAmF;YACnF,kFAAkF;QACtF,CAAC,CAAC,IAAI,KAAK,WAAW;YACpB,CAAC,CAAC,wBAAwB,YAAY,iDAAiD;gBACrF,oFAAoF;gBACpF,mEAAmE;YACrE,CAAC,CAAC,wBAAwB,YAAY,2CAA2C;gBAC/E,4DAA4D,CACnE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,KAAgB;IACxC,MAAM,QAAQ,GACZ,KAAK,CAAC,QACP,CAAC,QAAQ,CAAC;IACX,OAAO,QAAQ,EAAE,UAAU,KAAK,KAAK,IAAI,QAAQ,EAAE,YAAY,KAAK,MAAM,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,IAAgB,EAChB,KAAgB,EAChB,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,oBAAoB,CAC5B,QAAQ,IAAI,CAAC,WAAW,0BAA0B,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kFAAkF;AAClF,+EAA+E;AAC/E,oCAAoC;AACpC,SAAS,mBAAmB,CAAC,KAAgB,EAAE,eAAwB;IACrE,iFAAiF;IACjF,MAAM,EAAE,QAAQ,EAAE,GAAG,KAA0C,CAAC;IAChE,OAAO;QACL,QAAQ;QACR,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE;KACpC,CAAC;AACjB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The CLI's report: the ERC-7201 namespace grid and the check list. Pure
3
+ * functions from results to lines, so the layout is tested as text. Colors
4
+ * come from `paint`, applied after alignment so they never shift a column.
5
+ */
6
+ import type { NamespacePair } from "./erc7201.js";
7
+ /** Node's `util.styleText`, or `plain` when colors are off. */
8
+ export type Paint = (format: Parameters<typeof import("node:util").styleText>[0], text: string) => string;
9
+ export declare const plain: Paint;
10
+ export type CheckStatus = "pass" | "fail" | "skip";
11
+ export interface Check {
12
+ name: string;
13
+ status: CheckStatus;
14
+ summary: string;
15
+ /** Multi-line explanation shown under the check, such as OpenZeppelin's report. */
16
+ details?: string;
17
+ }
18
+ /** One line per check, names aligned, details indented under their check. */
19
+ export declare function checkLines(checks: Check[], paint?: Paint): string[];
20
+ /**
21
+ * A grid for each namespace whose slot is in question on either side: the
22
+ * annotation, the slot it implies and the slot the code uses, for old and new,
23
+ * with a sentence saying what that means. Namespaces that line up are left out.
24
+ */
25
+ export declare function namespaceLines(pairs: NamespacePair[], paint?: Paint): string[];
26
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,cAAc,CAAC;AAEjE,+DAA+D;AAC/D,MAAM,MAAM,KAAK,GAAG,CAClB,MAAM,EAAE,UAAU,CAAC,cAAc,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAC3D,IAAI,EAAE,MAAM,KACT,MAAM,CAAC;AAEZ,eAAO,MAAM,KAAK,EAAE,KAAyB,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,GAAE,KAAa,GAAG,MAAM,EAAE,CAM1E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,KAAK,GAAE,KAAa,GAAG,MAAM,EAAE,CA6CrF"}
package/dist/report.js ADDED
@@ -0,0 +1,109 @@
1
+ /**
2
+ * The CLI's report: the ERC-7201 namespace grid and the check list. Pure
3
+ * functions from results to lines, so the layout is tested as text. Colors
4
+ * come from `paint`, applied after alignment so they never shift a column.
5
+ */
6
+ export const plain = (_, text) => text;
7
+ const MARK = { pass: "✓", fail: "✗", skip: "-" };
8
+ const TONE = { pass: "green", fail: "red", skip: "yellow" };
9
+ /** One line per check, names aligned, details indented under their check. */
10
+ export function checkLines(checks, paint = plain) {
11
+ const width = Math.max(...checks.map((c) => c.name.length));
12
+ return checks.flatMap((c) => [
13
+ `${paint(TONE[c.status], MARK[c.status])} ${paint("bold", c.name.padEnd(width))} ${c.summary}`,
14
+ ...(c.details?.split("\n").map((line) => ` ${line}`) ?? []),
15
+ ]);
16
+ }
17
+ /**
18
+ * A grid for each namespace whose slot is in question on either side: the
19
+ * annotation, the slot it implies and the slot the code uses, for old and new,
20
+ * with a sentence saying what that means. Namespaces that line up are left out.
21
+ */
22
+ export function namespaceLines(pairs, paint = plain) {
23
+ const blocks = pairs
24
+ // A side that is absent is not a problem here; OpenZeppelin reports a deleted namespace.
25
+ .filter((p) => p.problem !== undefined ||
26
+ [p.old, p.next].some((s) => s !== undefined && s.status !== "match"))
27
+ .map((p) => {
28
+ const fmt = formatter([p.old, p.next]);
29
+ return {
30
+ rows: [
31
+ ...(p.old !== undefined ? [row("old", p.old, fmt)] : []),
32
+ ...(p.next !== undefined ? [row("new", p.next, fmt)] : []),
33
+ ],
34
+ meaning: meaning(p, fmt),
35
+ tone: (p.problem === undefined
36
+ ? "dim"
37
+ : p.problem === "unread"
38
+ ? "yellow"
39
+ : "red"),
40
+ };
41
+ });
42
+ if (blocks.length === 0)
43
+ return [];
44
+ const header = {
45
+ side: "",
46
+ id: "annotation",
47
+ implied: "slot from annotation",
48
+ inCode: "slot in code",
49
+ mark: "",
50
+ tone: "dim",
51
+ };
52
+ const all = [header, ...blocks.flatMap((b) => b.rows)];
53
+ const width = (key) => Math.max(...all.map((r) => r[key].length));
54
+ const cells = (r) => ` ${r.side.padEnd(5)}${r.id.padEnd(width("id"))} ${r.implied.padEnd(width("implied"))} ` +
55
+ r.inCode.padEnd(width("inCode"));
56
+ const line = (r) => `${cells(r)} ${paint(r.tone, r.mark)}`;
57
+ return [
58
+ paint("bold", "ERC-7201 namespaces"),
59
+ paint("dim", cells(header).trimEnd()),
60
+ ...blocks.flatMap((b) => [...b.rows.map(line), ` ${paint(b.tone, b.meaning)}`]),
61
+ ];
62
+ }
63
+ function row(side, s, fmt) {
64
+ return {
65
+ side,
66
+ id: s.namespace.slice("erc7201:".length),
67
+ implied: fmt(s.expected),
68
+ inCode: s.status === "conflict" ? "several" : s.actual !== undefined ? fmt(s.actual) : "not read",
69
+ mark: {
70
+ match: "✓",
71
+ mismatch: "✗ annotation does not match code",
72
+ conflict: "✗ code uses more than one slot",
73
+ unread: "? slot in code not read",
74
+ }[s.status],
75
+ tone: { match: "green", mismatch: "red", conflict: "red", unread: "yellow" }[s.status],
76
+ };
77
+ }
78
+ function meaning({ old, next, problem }, fmt) {
79
+ switch (problem) {
80
+ case "conflict":
81
+ return "The new code assigns more than one slot to this namespace; it must use one.";
82
+ case "moved":
83
+ return (`The new code moves this namespace from ${fmt(old.actual)} to ${fmt(next.actual)}: ` +
84
+ "its data would be left behind. Keep the slot the deployed code uses, under an annotation that matches it.");
85
+ case "mismatch":
86
+ return old === undefined
87
+ ? "The new code keeps this namespace in a different slot than its annotation says. Fix one of the two before deploying."
88
+ : "The storage did not move, but the new annotation does not match its code. Fix it before deploying.";
89
+ case "unread":
90
+ return "The slot in code could not be read (computed at run time?), so this namespace could not be checked.";
91
+ }
92
+ return next !== undefined
93
+ ? "Same slot in code on both sides: the storage did not move. Compared as one namespace."
94
+ : "The deployed annotation does not match its code, and no namespace in the new code uses its slot.";
95
+ }
96
+ /**
97
+ * Short slots for a block, unless two different slots in it would then look
98
+ * the same: a hand-written constant can share both ends with another.
99
+ */
100
+ function formatter(sides) {
101
+ const slots = new Set(sides.flatMap((s) => (s === undefined ? [] : [s.expected, s.actual ?? s.expected])));
102
+ const shorts = new Set([...slots].map(short));
103
+ return shorts.size === slots.size ? short : (slot) => slot;
104
+ }
105
+ /** `0x5ea2…5c00`: enough to tell slots apart; slotdiff does the comparing. */
106
+ function short(slot) {
107
+ return `${slot.slice(0, 6)}…${slot.slice(-4)}`;
108
+ }
109
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
package/dist/resolve.d.ts CHANGED
@@ -11,6 +11,7 @@ import type { StorageLayout } from "@openzeppelin/upgrades-core";
11
11
  import { type DeployedBytecodeMatch, type ImmutableReferences } from "./bytecode.js";
12
12
  import { type EthProvider } from "./chain.js";
13
13
  import { type ExplorerConfig } from "./explorer.js";
14
+ import { type ReconstructedLayout } from "./reconstruct.js";
14
15
  import { type LayoutRecord } from "./record.js";
15
16
  import { type SolcOptions } from "./solc.js";
16
17
  export interface ResolveOptions {
@@ -23,6 +24,16 @@ export interface ResolveOptions {
23
24
  * your own saved record first (`verifyRecord`) to skip that.
24
25
  */
25
26
  export declare function resolveLayout(provider: EthProvider, address: string, options: ResolveOptions): Promise<LayoutRecord>;
27
+ /**
28
+ * `resolveLayout` plus the analysis of the verified source: the proxy kind,
29
+ * inferred from the code as OpenZeppelin recommends (not from the admin slot,
30
+ * which a UUPS proxy can have set), the ERC-7201 slots and the safety check.
31
+ * Internal, for the CLI.
32
+ */
33
+ export declare function rebuild(provider: EthProvider, address: string, options: ResolveOptions): Promise<{
34
+ record: LayoutRecord;
35
+ analysis: ReconstructedLayout;
36
+ }>;
26
37
  export interface ProxyLayout {
27
38
  /** The implementation the proxy runs now. */
28
39
  implementation: string;
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAgD,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAE5F,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAE3F,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,YAAY,CAAC,CAyBvB;AAED,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,+FAA+F;AAC/F,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,WAAW,CAAC,CAStB;AAED,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,qBAAqB,CAAC;IACrC,gFAAgF;IAChF,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAwB3B"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAgD,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAE5F,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAqB,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,mBAAmB,CAAA;CAAE,CAAC,CA0BlE;AAED,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,+FAA+F;AAC/F,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,WAAW,CAAC,CAStB;AAED,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,qBAAqB,CAAC;IACrC,gFAAgF;IAChF,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAwB3B"}
package/dist/resolve.js CHANGED
@@ -20,6 +20,15 @@ import { getSolc } from "./solc.js";
20
20
  * your own saved record first (`verifyRecord`) to skip that.
21
21
  */
22
22
  export async function resolveLayout(provider, address, options) {
23
+ return (await rebuild(provider, address, options)).record;
24
+ }
25
+ /**
26
+ * `resolveLayout` plus the analysis of the verified source: the proxy kind,
27
+ * inferred from the code as OpenZeppelin recommends (not from the admin slot,
28
+ * which a UUPS proxy can have set), the ERC-7201 slots and the safety check.
29
+ * Internal, for the CLI.
30
+ */
31
+ export async function rebuild(provider, address, options) {
23
32
  const lower = address.toLowerCase();
24
33
  if (!canQueryExplorer(options.explorer)) {
25
34
  throw new LayoutUnavailableError(`Cannot rebuild the layout of ${lower}: the explorer needs an apiKey or an apiUrl.`);
@@ -29,7 +38,7 @@ export async function resolveLayout(provider, address, options) {
29
38
  const source = await fetchVerifiedSource(chainId, lower, options.explorer);
30
39
  const solc = await getSolc(source.solcLongVersion, options.solc);
31
40
  const rebuilt = await reconstructLayout(source, solc, code);
32
- return {
41
+ const record = {
33
42
  format: 1,
34
43
  address: lower,
35
44
  chainId,
@@ -41,6 +50,7 @@ export async function resolveLayout(provider, address, options) {
41
50
  recordedAt: new Date().toISOString(),
42
51
  layout: rebuilt.layout,
43
52
  };
53
+ return { record, analysis: rebuilt };
44
54
  }
45
55
  /** `resolveLayout` for whatever implementation `proxy` runs right now (ERC-1967 or beacon). */
46
56
  export async function resolveProxyLayout(provider, proxy, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slotdiff",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.2.0-alpha.1",
4
4
  "description": "Storage layout diff for upgradeable Solidity contracts: compare a local build or a live deployment against another",
5
5
  "license": "MIT",
6
6
  "author": "Rohit Solia (https://github.com/rokso)",
@@ -15,6 +15,9 @@
15
15
  "type": "module",
16
16
  "main": "./dist/index.js",
17
17
  "types": "./dist/index.d.ts",
18
+ "bin": {
19
+ "slotdiff": "./dist/bin.js"
20
+ },
18
21
  "exports": {
19
22
  ".": {
20
23
  "types": "./dist/index.d.ts",
@@ -56,7 +59,7 @@
56
59
  "vitest": "^4.1.0"
57
60
  },
58
61
  "engines": {
59
- "node": ">=22.12.0"
62
+ "node": ">=22.13.0"
60
63
  },
61
64
  "keywords": [
62
65
  "ethereum",
@@ -64,7 +67,7 @@
64
67
  "upgradeable",
65
68
  "proxy",
66
69
  "storage-layout",
67
- "upgrade-safety",
70
+ "erc7201",
68
71
  "foundry",
69
72
  "hardhat"
70
73
  ],
package/src/bin.ts ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ import { styleText } from "node:util";
3
+ import { run } from "./cli.js";
4
+
5
+ // A reader that stops early, such as `| head`, is not an error.
6
+ process.stdout.on("error", (e: NodeJS.ErrnoException) => {
7
+ if (e.code !== "EPIPE") throw e;
8
+ process.exit();
9
+ });
10
+
11
+ run(process.argv.slice(2), {
12
+ stdout: (line) => console.log(line),
13
+ stderr: (line) => console.error(line),
14
+ tty: process.stdout.isTTY === true,
15
+ // Node's own rules for color: a terminal that has them, NO_COLOR, FORCE_COLOR.
16
+ color: styleText("red", "x", { stream: process.stdout }) !== "x",
17
+ }).then(
18
+ (code) => {
19
+ process.exitCode = code;
20
+ },
21
+ (e: unknown) => {
22
+ console.error(e);
23
+ process.exitCode = 2;
24
+ },
25
+ );