@openzeppelin/upgrades-core 1.16.1 → 1.19.0

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 (113) hide show
  1. package/contracts/Initializable.sol +4 -1
  2. package/dist/deployment.js +2 -3
  3. package/dist/deployment.js.map +1 -1
  4. package/dist/eip-1967.d.ts.map +1 -1
  5. package/dist/eip-1967.js +2 -7
  6. package/dist/eip-1967.js.map +1 -1
  7. package/dist/impl-store.js +6 -8
  8. package/dist/impl-store.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +3 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/levenshtein.d.ts +4 -1
  14. package/dist/levenshtein.d.ts.map +1 -1
  15. package/dist/levenshtein.js +1 -1
  16. package/dist/levenshtein.js.map +1 -1
  17. package/dist/manifest-storage-layout.js +1 -1
  18. package/dist/manifest-storage-layout.js.map +1 -1
  19. package/dist/manifest.d.ts +5 -0
  20. package/dist/manifest.d.ts.map +1 -1
  21. package/dist/manifest.js +54 -10
  22. package/dist/manifest.js.map +1 -1
  23. package/dist/manifest.test.js +82 -0
  24. package/dist/manifest.test.js.map +1 -1
  25. package/dist/provider.d.ts.map +1 -1
  26. package/dist/provider.js +6 -6
  27. package/dist/provider.js.map +1 -1
  28. package/dist/provider.test.js +5 -5
  29. package/dist/provider.test.js.map +1 -1
  30. package/dist/proxy-kind.js +1 -2
  31. package/dist/proxy-kind.js.map +1 -1
  32. package/dist/scripts/migrate-oz-cli-project.js +1 -1
  33. package/dist/scripts/migrate-oz-cli-project.js.map +1 -1
  34. package/dist/scripts/migrate-oz-cli-project.test.js +1 -1
  35. package/dist/scripts/migrate-oz-cli-project.test.js.map +1 -1
  36. package/dist/src-decoder.js +1 -2
  37. package/dist/src-decoder.js.map +1 -1
  38. package/dist/storage/compare.d.ts +21 -3
  39. package/dist/storage/compare.d.ts.map +1 -1
  40. package/dist/storage/compare.js +83 -22
  41. package/dist/storage/compare.js.map +1 -1
  42. package/dist/storage/extract.js +6 -9
  43. package/dist/storage/extract.js.map +1 -1
  44. package/dist/storage/gap.d.ts +18 -0
  45. package/dist/storage/gap.d.ts.map +1 -0
  46. package/dist/storage/gap.js +29 -0
  47. package/dist/storage/gap.js.map +1 -0
  48. package/dist/storage/layout.js +3 -4
  49. package/dist/storage/layout.js.map +1 -1
  50. package/dist/storage/report-gap.test.d.ts +2 -0
  51. package/dist/storage/report-gap.test.d.ts.map +1 -0
  52. package/dist/storage/report-gap.test.js +106 -0
  53. package/dist/storage/report-gap.test.js.map +1 -0
  54. package/dist/storage/report-rename-retype.test.js +24 -0
  55. package/dist/storage/report-rename-retype.test.js.map +1 -1
  56. package/dist/storage/report.d.ts +1 -1
  57. package/dist/storage/report.d.ts.map +1 -1
  58. package/dist/storage/report.js +59 -10
  59. package/dist/storage/report.js.map +1 -1
  60. package/dist/storage.test.js +422 -3
  61. package/dist/storage.test.js.map +1 -1
  62. package/dist/stub-provider.d.ts +1 -1
  63. package/dist/stub-provider.d.ts.map +1 -1
  64. package/dist/stub-provider.js +5 -7
  65. package/dist/stub-provider.js.map +1 -1
  66. package/dist/usage-error.d.ts +9 -0
  67. package/dist/usage-error.d.ts.map +1 -1
  68. package/dist/usage-error.js +16 -1
  69. package/dist/usage-error.js.map +1 -1
  70. package/dist/utils/parse-type-id.js +2 -3
  71. package/dist/utils/parse-type-id.js.map +1 -1
  72. package/dist/validate/data.js +26 -7
  73. package/dist/validate/data.js.map +1 -1
  74. package/dist/validate/index.d.ts +1 -1
  75. package/dist/validate/index.d.ts.map +1 -1
  76. package/dist/validate/index.js.map +1 -1
  77. package/dist/validate/overrides.d.ts +34 -3
  78. package/dist/validate/overrides.d.ts.map +1 -1
  79. package/dist/validate/overrides.js +7 -7
  80. package/dist/validate/overrides.js.map +1 -1
  81. package/dist/validate/query.js +3 -5
  82. package/dist/validate/query.js.map +1 -1
  83. package/dist/validate/report.js +1 -2
  84. package/dist/validate/report.js.map +1 -1
  85. package/dist/validate/run.js +6 -10
  86. package/dist/validate/run.js.map +1 -1
  87. package/dist/version.js +1 -1
  88. package/dist/version.js.map +1 -1
  89. package/package.json +3 -5
  90. package/src/eip-1967.ts +2 -4
  91. package/src/index.ts +2 -0
  92. package/src/levenshtein.ts +4 -2
  93. package/src/manifest.test.ts +103 -1
  94. package/src/manifest.ts +62 -6
  95. package/src/provider.ts +5 -3
  96. package/src/storage/compare.ts +88 -18
  97. package/src/storage/gap.ts +26 -0
  98. package/src/storage/report-gap.test.ts +119 -0
  99. package/src/storage/report-gap.test.ts.md +59 -0
  100. package/src/storage/report-gap.test.ts.snap +0 -0
  101. package/src/storage/report-rename-retype.test.ts +27 -0
  102. package/src/storage/report-rename-retype.test.ts.md +7 -0
  103. package/src/storage/report-rename-retype.test.ts.snap +0 -0
  104. package/src/storage/report.test.ts.md +1 -4
  105. package/src/storage/report.test.ts.snap +0 -0
  106. package/src/storage/report.ts +83 -12
  107. package/src/storage.test.ts +466 -2
  108. package/src/storage.test.ts.snap +0 -0
  109. package/src/usage-error.ts +22 -0
  110. package/src/validate/data.ts +1 -1
  111. package/src/validate/index.ts +1 -1
  112. package/src/validate/overrides.ts +39 -3
  113. package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +0 -160
@@ -0,0 +1,18 @@
1
+ import { StorageField } from './compare';
2
+ /**
3
+ * Returns true if the field represents a storage gap.
4
+ *
5
+ * @param field the storage field
6
+ * @returns true if field is a gap, otherwise false
7
+ */
8
+ export declare function isGap(field: StorageField): boolean;
9
+ /**
10
+ * Returns true if original storage field is a gap and the updated storage field
11
+ * ends at the exact same position as the gap.
12
+ *
13
+ * @param original the original storage field
14
+ * @param updated the updated storage field
15
+ * @returns true if original is a gap and original and updated end at the same position, otherwise false
16
+ */
17
+ export declare function endMatchesGap(original: StorageField, updated: StorageField): boolean;
18
+ //# sourceMappingURL=gap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gap.d.ts","sourceRoot":"","sources":["../../src/storage/gap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmB,MAAM,WAAW,CAAC;AAE1D;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAElD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,WAK1E"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.endMatchesGap = exports.isGap = void 0;
4
+ const compare_1 = require("./compare");
5
+ /**
6
+ * Returns true if the field represents a storage gap.
7
+ *
8
+ * @param field the storage field
9
+ * @returns true if field is a gap, otherwise false
10
+ */
11
+ function isGap(field) {
12
+ return field.label === '__gap' && field.type.head === 't_array';
13
+ }
14
+ exports.isGap = isGap;
15
+ /**
16
+ * Returns true if original storage field is a gap and the updated storage field
17
+ * ends at the exact same position as the gap.
18
+ *
19
+ * @param original the original storage field
20
+ * @param updated the updated storage field
21
+ * @returns true if original is a gap and original and updated end at the same position, otherwise false
22
+ */
23
+ function endMatchesGap(original, updated) {
24
+ const originalEnd = (0, compare_1.storageFieldEnd)(original);
25
+ const updatedEnd = (0, compare_1.storageFieldEnd)(updated);
26
+ return isGap(original) && originalEnd !== undefined && updatedEnd !== undefined && originalEnd === updatedEnd;
27
+ }
28
+ exports.endMatchesGap = endMatchesGap;
29
+ //# sourceMappingURL=gap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gap.js","sourceRoot":"","sources":["../../src/storage/gap.ts"],"names":[],"mappings":";;;AAAA,uCAA0D;AAE1D;;;;;GAKG;AACH,SAAgB,KAAK,CAAC,KAAmB;IACvC,OAAO,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AAClE,CAAC;AAFD,sBAEC;AAED;;;;;;;GAOG;AACH,SAAgB,aAAa,CAAC,QAAsB,EAAE,OAAqB;IACzE,MAAM,WAAW,GAAG,IAAA,yBAAe,EAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAA,yBAAe,EAAC,OAAO,CAAC,CAAC;IAE5C,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,WAAW,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,WAAW,KAAK,UAAU,CAAC;AAChH,CAAC;AALD,sCAKC"}
@@ -11,7 +11,6 @@ function getDetailedLayout(layout) {
11
11
  return { ...item, type: withDetails };
12
12
  }
13
13
  function addDetailsToParsedType(parsed) {
14
- var _a, _b;
15
14
  if (parsed.id in cache) {
16
15
  return cache[parsed.id];
17
16
  }
@@ -27,10 +26,10 @@ function getDetailedLayout(layout) {
27
26
  };
28
27
  // store in cache before recursion below
29
28
  cache[parsed.id] = detailed;
30
- detailed.args = (_a = parsed.args) === null || _a === void 0 ? void 0 : _a.map(addDetailsToParsedType);
31
- detailed.rets = (_b = parsed.rets) === null || _b === void 0 ? void 0 : _b.map(addDetailsToParsedType);
29
+ detailed.args = parsed.args?.map(addDetailsToParsedType);
30
+ detailed.rets = parsed.rets?.map(addDetailsToParsedType);
32
31
  detailed.item.members =
33
- (item === null || item === void 0 ? void 0 : item.members) && (isStructMembers(item === null || item === void 0 ? void 0 : item.members) ? item.members.map(parseWithDetails) : item === null || item === void 0 ? void 0 : item.members);
32
+ item?.members && (isStructMembers(item?.members) ? item.members.map(parseWithDetails) : item?.members);
34
33
  return detailed;
35
34
  }
36
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/storage/layout.ts"],"names":[],"mappings":";;;AAAA,0DAAmE;AAuDnE,SAAgB,iBAAiB,CAAC,MAAqB;IACrD,MAAM,KAAK,GAAuC,EAAE,CAAC;IACrD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE5C,SAAS,gBAAgB,CAA6B,IAAO;QAC3D,MAAM,MAAM,GAAG,IAAA,2BAAW,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACxC,CAAC;IAED,SAAS,sBAAsB,CAAC,MAAoB;;QAClD,IAAI,MAAM,CAAC,EAAE,IAAI,KAAK,EAAE;YACtB,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACzB;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAuB;YACnC,GAAG,MAAM;YACT,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,IAAI,EAAE;gBACJ,GAAG,IAAI;gBACP,OAAO,EAAE,SAAS;aACnB;SACF,CAAC;QAEF,wCAAwC;QACxC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;QAE5B,QAAQ,CAAC,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,0CAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACzD,QAAQ,CAAC,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,0CAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACzD,QAAQ,CAAC,IAAI,CAAC,OAAO;YACnB,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,KAAI,CAAC,eAAe,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,OAAO,CAAC,CAAC;QAEzG,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AApCD,8CAoCC;AAED,SAAgB,aAAa,CAAI,OAA2B;IAC1D,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AAChE,CAAC;AAFD,sCAEC;AAED,SAAgB,eAAe,CAAI,OAA2B;IAC5D,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AAChE,CAAC;AAFD,0CAEC;AAKD,SAAgB,SAAS,CAAC,KAAuC;IAC/D,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC;AAC/G,CAAC;AAFD,8BAEC"}
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/storage/layout.ts"],"names":[],"mappings":";;;AAAA,0DAAmE;AAuDnE,SAAgB,iBAAiB,CAAC,MAAqB;IACrD,MAAM,KAAK,GAAuC,EAAE,CAAC;IACrD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE5C,SAAS,gBAAgB,CAA6B,IAAO;QAC3D,MAAM,MAAM,GAAG,IAAA,2BAAW,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACxC,CAAC;IAED,SAAS,sBAAsB,CAAC,MAAoB;QAClD,IAAI,MAAM,CAAC,EAAE,IAAI,KAAK,EAAE;YACtB,OAAO,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACzB;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAuB;YACnC,GAAG,MAAM;YACT,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,IAAI,EAAE;gBACJ,GAAG,IAAI;gBACP,OAAO,EAAE,SAAS;aACnB;SACF,CAAC;QAEF,wCAAwC;QACxC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;QAE5B,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACzD,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACzD,QAAQ,CAAC,IAAI,CAAC,OAAO;YACnB,IAAI,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzG,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AApCD,8CAoCC;AAED,SAAgB,aAAa,CAAI,OAA2B;IAC1D,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AAChE,CAAC;AAFD,sCAEC;AAED,SAAgB,eAAe,CAAI,OAA2B;IAC5D,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AAChE,CAAC;AAFD,0CAEC;AAKD,SAAgB,SAAS,CAAC,KAAuC;IAC/D,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC;AAC/G,CAAC;AAFD,8BAEC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=report-gap.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-gap.test.d.ts","sourceRoot":"","sources":["../../src/storage/report-gap.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ava_1 = __importDefault(require("ava"));
7
+ const utils_1 = require("solidity-ast/utils");
8
+ const hardhat_1 = require("hardhat");
9
+ const ast_dereferencer_1 = require("../ast-dereferencer");
10
+ const extract_1 = require("./extract");
11
+ const compare_1 = require("./compare");
12
+ const layout_1 = require("./layout");
13
+ const test = ava_1.default;
14
+ const dummyDecodeSrc = () => 'file.sol:1';
15
+ const testContracts = [
16
+ 'contracts/test/Storage.sol:StorageUpgrade_Gap_V1',
17
+ 'contracts/test/Storage.sol:StorageUpgrade_Gap_V2_Ok',
18
+ 'contracts/test/Storage.sol:StorageUpgrade_Gap_V2_Bad1',
19
+ 'contracts/test/Storage.sol:StorageUpgrade_Gap_V2_Bad2',
20
+ 'contracts/test/Storage.sol:StorageUpgrade_Gap_V2_Bad3',
21
+ 'contracts/test/Storage.sol:StorageUpgrade_Gap_V2_Bad4',
22
+ 'contracts/test/Storage.sol:StorageUpgrade_Gap_V2_Bad5',
23
+ 'contracts/test/Storage.sol:StorageUpgrade_MultiConsumeGap_V1',
24
+ 'contracts/test/Storage.sol:StorageUpgrade_MultiConsumeGap_V2_Ok',
25
+ ];
26
+ test.before(async (t) => {
27
+ const contracts = {};
28
+ const deref = {};
29
+ const storageLayout = {};
30
+ for (const contract of testContracts) {
31
+ const buildInfo = await hardhat_1.artifacts.getBuildInfo(contract);
32
+ if (buildInfo === undefined) {
33
+ throw new Error(`Build info not found for contract ${contract}`);
34
+ }
35
+ const solcOutput = buildInfo.output;
36
+ for (const def of (0, utils_1.findAll)('ContractDefinition', solcOutput.sources['contracts/test/Storage.sol'].ast)) {
37
+ contracts[def.name] = def;
38
+ deref[def.name] = (0, ast_dereferencer_1.astDereferencer)(solcOutput);
39
+ storageLayout[def.name] = solcOutput.contracts['contracts/test/Storage.sol'][def.name].storageLayout;
40
+ }
41
+ }
42
+ t.context.extractStorageLayout = name => (0, extract_1.extractStorageLayout)(contracts[name], dummyDecodeSrc, deref[name], storageLayout[name]);
43
+ });
44
+ function getReport(original, updated) {
45
+ const originalDetailed = (0, layout_1.getDetailedLayout)(original);
46
+ const updatedDetailed = (0, layout_1.getDetailedLayout)(updated);
47
+ const comparator = new compare_1.StorageLayoutComparator();
48
+ return comparator.compareLayouts(originalDetailed, updatedDetailed);
49
+ }
50
+ test('shrinkgap', t => {
51
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Gap_V1');
52
+ const v2 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Ok');
53
+ const report = getReport(v1, v2);
54
+ t.true(report.ok);
55
+ t.is(report.explain(), '');
56
+ });
57
+ test('finishgap', t => {
58
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_MultiConsumeGap_V1');
59
+ const v2 = t.context.extractStorageLayout('StorageUpgrade_MultiConsumeGap_V2_Ok');
60
+ const report = getReport(v1, v2);
61
+ t.true(report.ok);
62
+ t.is(report.explain(), '');
63
+ });
64
+ test('insert var without shrink gap', t => {
65
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Gap_V1');
66
+ const v2 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Bad1');
67
+ const report = getReport(v1, v2);
68
+ t.false(report.ok);
69
+ t.snapshot(report.explain());
70
+ });
71
+ test('delete var and expand gap', t => {
72
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Gap_V1');
73
+ const v2 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Bad2');
74
+ const report = getReport(v1, v2);
75
+ t.false(report.ok);
76
+ t.snapshot(report.explain());
77
+ });
78
+ test('shrink gap without adding var', t => {
79
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Gap_V1');
80
+ const v2 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Bad3');
81
+ const report = getReport(v1, v2);
82
+ t.false(report.ok);
83
+ t.snapshot(report.explain());
84
+ });
85
+ test('insert var and shrink gap too much', t => {
86
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Gap_V1');
87
+ const v2 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Bad4');
88
+ const report = getReport(v1, v2);
89
+ t.false(report.ok);
90
+ t.snapshot(report.explain());
91
+ });
92
+ test('insert vars and shrink gap not enough', t => {
93
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Gap_V1');
94
+ const v2 = t.context.extractStorageLayout('StorageUpgrade_Gap_V2_Bad5');
95
+ const report = getReport(v1, v2);
96
+ t.false(report.ok);
97
+ t.snapshot(report.explain());
98
+ });
99
+ test('insert vars without shrink gap (uint128)', t => {
100
+ const v1 = t.context.extractStorageLayout('StorageUpgrade_Uint128Gap_V1');
101
+ const v2 = t.context.extractStorageLayout('StorageUpgrade_Uint128Gap_V2_Bad');
102
+ const report = getReport(v1, v2);
103
+ t.false(report.ok);
104
+ t.snapshot(report.explain());
105
+ });
106
+ //# sourceMappingURL=report-gap.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-gap.test.js","sourceRoot":"","sources":["../../src/storage/report-gap.test.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ const ast_dereferencer_1 = require("../ast-dereferencer");
10
10
  const extract_1 = require("./extract");
11
11
  const compare_1 = require("./compare");
12
12
  const layout_1 = require("./layout");
13
+ const _1 = require(".");
13
14
  const test = ava_1.default;
14
15
  const dummyDecodeSrc = () => 'file.sol:1';
15
16
  const testContracts = [
@@ -23,6 +24,8 @@ const testContracts = [
23
24
  'contracts/test/RenamedRetyped.sol:ConfusingRetypeV2',
24
25
  'contracts/test/RenamedRetyped.sol:NonHardcodedRetypeV1',
25
26
  'contracts/test/RenamedRetyped.sol:NonHardcodedRetypeV2',
27
+ 'contracts/test/RenamedRetyped.sol:LayoutChangeV1',
28
+ 'contracts/test/RenamedRetyped.sol:LayoutChangeV2',
26
29
  ];
27
30
  test.before(async (t) => {
28
31
  const contracts = {};
@@ -90,4 +93,25 @@ test('non-hardcoded retype', t => {
90
93
  t.true(report.ok);
91
94
  t.snapshot(report.explain());
92
95
  });
96
+ test('retype with layout change', t => {
97
+ const v1 = t.context.extractStorageLayout('LayoutChangeV1');
98
+ const v2 = t.context.extractStorageLayout('LayoutChangeV2');
99
+ // ensure both variables' layout changes appear in the internal errors
100
+ t.like((0, _1.getStorageUpgradeErrors)(v1, v2), {
101
+ length: 2,
102
+ 0: {
103
+ kind: 'layoutchange',
104
+ original: { label: 'a' },
105
+ updated: { label: 'a' },
106
+ },
107
+ 1: {
108
+ kind: 'layoutchange',
109
+ original: { label: 'b' },
110
+ updated: { label: 'b' },
111
+ },
112
+ });
113
+ const report = getReport(v1, v2);
114
+ t.false(report.ok);
115
+ t.snapshot(report.explain());
116
+ });
93
117
  //# sourceMappingURL=report-rename-retype.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"report-rename-retype.test.js","sourceRoot":"","sources":["../../src/storage/report-rename-retype.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report-rename-retype.test.js","sourceRoot":"","sources":["../../src/storage/report-rename-retype.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { StorageOperation, StorageItem } from './compare';
1
+ import { StorageOperation, StorageItem } from './compare';
2
2
  export declare class LayoutCompatibilityReport {
3
3
  readonly ops: StorageOperation<StorageItem>[];
4
4
  constructor(ops: StorageOperation<StorageItem>[]);
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/storage/report.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAyD,MAAM,WAAW,CAAC;AAKtH,qBAAa,yBAAyB;IACxB,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAAE;gBAApC,GAAG,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAAE;IAEzD,IAAI,EAAE,IAAI,OAAO,CAEhB;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,OAAO,CAAC,KAAK,UAAO,GAAG,MAAM;CAiB9B"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/storage/report.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,WAAW,EAOZ,MAAM,WAAW,CAAC;AAMnB,qBAAa,yBAAyB;IACxB,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAAE;gBAApC,GAAG,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAAE;IAEzD,IAAI,EAAE,IAAI,OAAO,CAEhB;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,OAAO,CAAC,KAAK,UAAO,GAAG,MAAM;CAiB9B"}
@@ -5,9 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.LayoutCompatibilityReport = void 0;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
+ const compare_1 = require("./compare");
8
9
  const itemize_1 = require("../utils/itemize");
9
10
  const indent_1 = require("../utils/indent");
10
11
  const assert_1 = require("../utils/assert");
12
+ const gap_1 = require("./gap");
11
13
  class LayoutCompatibilityReport {
12
14
  constructor(ops) {
13
15
  this.ops = ops;
@@ -33,25 +35,61 @@ class LayoutCompatibilityReport {
33
35
  }
34
36
  }
35
37
  exports.LayoutCompatibilityReport = LayoutCompatibilityReport;
38
+ function getExpectedGapSize(original, updated) {
39
+ const origEnd = (0, compare_1.storageFieldEnd)(original);
40
+ const updatedStart = (0, compare_1.storageFieldBegin)(updated);
41
+ const origNumBytes = original.type.item.numberOfBytes;
42
+ const origTail = original.type.tail;
43
+ if (origEnd === undefined || updatedStart === undefined || origNumBytes === undefined || origTail === undefined) {
44
+ return undefined;
45
+ }
46
+ const bytesPerItem = BigInt(origNumBytes) / BigInt(parseInt(origTail, 10));
47
+ const expectedSizeBytes = origEnd - updatedStart;
48
+ return expectedSizeBytes / bytesPerItem;
49
+ }
50
+ function suggestGapSize(original, updated) {
51
+ const expectedSize = getExpectedGapSize(original, updated);
52
+ if (expectedSize !== undefined) {
53
+ return `Set __gap array to size ${expectedSize}`;
54
+ }
55
+ else {
56
+ return '';
57
+ }
58
+ }
36
59
  function explainStorageOperation(op, ctx) {
37
60
  switch (op.kind) {
61
+ case 'shrinkgap':
38
62
  case 'typechange': {
39
- const basic = explainTypeChange(op.change);
63
+ const basic = explainTypeChange(op.change, op.original, op.updated);
40
64
  const details = ctx.kind === 'layout' // explain details for layout only
41
65
  ? new Set(getAllTypeChanges(op.change)
42
66
  .map(explainTypeChangeDetails)
43
67
  .filter((d) => d !== undefined))
44
68
  : [];
45
- return `Upgraded ${label(op.updated)} to an incompatible type\n` + (0, itemize_1.itemize)(basic, ...details);
69
+ const hints = [];
70
+ if ((0, gap_1.isGap)(op.original) && op.change.kind === 'array shrink') {
71
+ hints.push(suggestGapSize(op.original, op.updated));
72
+ }
73
+ return printWithHints({
74
+ title: `Upgraded ${label(op.updated)} to an incompatible type\n` + (0, itemize_1.itemize)(basic, ...details),
75
+ hints,
76
+ });
46
77
  }
78
+ case 'finishgap':
79
+ return `Converted end of storage gap ${label(op.original)} to ${label(op.updated)}`;
47
80
  case 'rename':
48
81
  return `Renamed ${label(op.original)} to ${label(op.updated)}`;
49
82
  case 'replace':
50
83
  return `Replaced ${label(op.original)} with ${label(op.updated)} of incompatible type`;
51
84
  case 'layoutchange': {
52
- return (`Layout ${op.change.uncertain ? 'could have changed' : 'changed'} for ${label(op.updated)} ` +
85
+ const title = `Layout ${op.change.uncertain ? 'could have changed' : 'changed'} for ${label(op.updated)} ` +
53
86
  `(${op.original.type.item.label} -> ${op.updated.type.item.label})\n` +
54
- describeLayoutTransition(op.change)).trimEnd();
87
+ describeLayoutTransition(op.change);
88
+ const hints = [];
89
+ if ((0, gap_1.isGap)(op.original)) {
90
+ hints.push(suggestGapSize(op.original, op.updated));
91
+ }
92
+ return printWithHints({ title, hints });
55
93
  }
56
94
  default: {
57
95
  const title = explainBasicOperation(op, t => t.label);
@@ -76,11 +114,14 @@ function explainStorageOperation(op, ctx) {
76
114
  break;
77
115
  }
78
116
  }
79
- return title + '\n' + (0, itemize_1.itemizeWith)('>', ...hints);
117
+ return printWithHints({ title, hints });
80
118
  }
81
119
  }
82
120
  }
83
- function explainTypeChange(ch) {
121
+ function printWithHints(result) {
122
+ return (result.title + '\n' + (0, itemize_1.itemizeWith)('>', ...result.hints)).trimEnd();
123
+ }
124
+ function explainTypeChange(ch, original, updated) {
84
125
  switch (ch.kind) {
85
126
  case 'visibility change':
86
127
  return `Bad upgrade ${describeTransition(ch.original, ch.updated)}\nDifferent visibility`;
@@ -91,17 +132,25 @@ function explainTypeChange(ch) {
91
132
  case 'enum resize':
92
133
  return `Bad upgrade ${describeTransition(ch.original, ch.updated)}\nDifferent representation sizes`;
93
134
  case 'mapping key':
94
- return `In key of ${ch.updated.item.label}\n` + (0, itemize_1.itemize)(explainTypeChange(ch.inner));
135
+ return `In key of ${ch.updated.item.label}\n` + (0, itemize_1.itemize)(explainTypeChange(ch.inner, original, updated));
95
136
  case 'mapping value':
96
137
  case 'array value':
97
- return `In ${ch.updated.item.label}\n` + (0, itemize_1.itemize)(explainTypeChange(ch.inner));
138
+ return `In ${ch.updated.item.label}\n` + (0, itemize_1.itemize)(explainTypeChange(ch.inner, original, updated));
98
139
  case 'array shrink':
99
140
  case 'array grow': {
100
141
  (0, assert_1.assert)(ch.original.tail && ch.updated.tail);
101
142
  const originalSize = parseInt(ch.original.tail, 10);
102
143
  const updatedSize = parseInt(ch.updated.tail, 10);
103
- const note = ch.kind === 'array shrink' ? 'Size cannot decrease' : 'Size cannot increase here';
104
- return `Bad array resize from ${originalSize} to ${updatedSize}\n${note}`;
144
+ if ((0, gap_1.isGap)(original)) {
145
+ const note = ch.kind === 'array shrink'
146
+ ? 'Size decrease must match with corresponding variable inserts'
147
+ : 'Size cannot increase';
148
+ return `Bad storage gap resize from ${originalSize} to ${updatedSize}\n${note}`;
149
+ }
150
+ else {
151
+ const note = ch.kind === 'array shrink' ? 'Size cannot decrease' : 'Size cannot increase here';
152
+ return `Bad array resize from ${originalSize} to ${updatedSize}\n${note}`;
153
+ }
105
154
  }
106
155
  case 'array dynamic': {
107
156
  (0, assert_1.assert)(ch.original.tail && ch.updated.tail);
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/storage/report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/storage/report.ts"],"names":[],"mappings":"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"}