@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.
- package/contracts/Initializable.sol +4 -1
- package/dist/deployment.js +2 -3
- package/dist/deployment.js.map +1 -1
- package/dist/eip-1967.d.ts.map +1 -1
- package/dist/eip-1967.js +2 -7
- package/dist/eip-1967.js.map +1 -1
- package/dist/impl-store.js +6 -8
- package/dist/impl-store.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/levenshtein.d.ts +4 -1
- package/dist/levenshtein.d.ts.map +1 -1
- package/dist/levenshtein.js +1 -1
- package/dist/levenshtein.js.map +1 -1
- package/dist/manifest-storage-layout.js +1 -1
- package/dist/manifest-storage-layout.js.map +1 -1
- package/dist/manifest.d.ts +5 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +54 -10
- package/dist/manifest.js.map +1 -1
- package/dist/manifest.test.js +82 -0
- package/dist/manifest.test.js.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +6 -6
- package/dist/provider.js.map +1 -1
- package/dist/provider.test.js +5 -5
- package/dist/provider.test.js.map +1 -1
- package/dist/proxy-kind.js +1 -2
- package/dist/proxy-kind.js.map +1 -1
- package/dist/scripts/migrate-oz-cli-project.js +1 -1
- package/dist/scripts/migrate-oz-cli-project.js.map +1 -1
- package/dist/scripts/migrate-oz-cli-project.test.js +1 -1
- package/dist/scripts/migrate-oz-cli-project.test.js.map +1 -1
- package/dist/src-decoder.js +1 -2
- package/dist/src-decoder.js.map +1 -1
- package/dist/storage/compare.d.ts +21 -3
- package/dist/storage/compare.d.ts.map +1 -1
- package/dist/storage/compare.js +83 -22
- package/dist/storage/compare.js.map +1 -1
- package/dist/storage/extract.js +6 -9
- package/dist/storage/extract.js.map +1 -1
- package/dist/storage/gap.d.ts +18 -0
- package/dist/storage/gap.d.ts.map +1 -0
- package/dist/storage/gap.js +29 -0
- package/dist/storage/gap.js.map +1 -0
- package/dist/storage/layout.js +3 -4
- package/dist/storage/layout.js.map +1 -1
- package/dist/storage/report-gap.test.d.ts +2 -0
- package/dist/storage/report-gap.test.d.ts.map +1 -0
- package/dist/storage/report-gap.test.js +106 -0
- package/dist/storage/report-gap.test.js.map +1 -0
- package/dist/storage/report-rename-retype.test.js +24 -0
- package/dist/storage/report-rename-retype.test.js.map +1 -1
- package/dist/storage/report.d.ts +1 -1
- package/dist/storage/report.d.ts.map +1 -1
- package/dist/storage/report.js +59 -10
- package/dist/storage/report.js.map +1 -1
- package/dist/storage.test.js +422 -3
- package/dist/storage.test.js.map +1 -1
- package/dist/stub-provider.d.ts +1 -1
- package/dist/stub-provider.d.ts.map +1 -1
- package/dist/stub-provider.js +5 -7
- package/dist/stub-provider.js.map +1 -1
- package/dist/usage-error.d.ts +9 -0
- package/dist/usage-error.d.ts.map +1 -1
- package/dist/usage-error.js +16 -1
- package/dist/usage-error.js.map +1 -1
- package/dist/utils/parse-type-id.js +2 -3
- package/dist/utils/parse-type-id.js.map +1 -1
- package/dist/validate/data.js +26 -7
- package/dist/validate/data.js.map +1 -1
- package/dist/validate/index.d.ts +1 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js.map +1 -1
- package/dist/validate/overrides.d.ts +34 -3
- package/dist/validate/overrides.d.ts.map +1 -1
- package/dist/validate/overrides.js +7 -7
- package/dist/validate/overrides.js.map +1 -1
- package/dist/validate/query.js +3 -5
- package/dist/validate/query.js.map +1 -1
- package/dist/validate/report.js +1 -2
- package/dist/validate/report.js.map +1 -1
- package/dist/validate/run.js +6 -10
- package/dist/validate/run.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +3 -5
- package/src/eip-1967.ts +2 -4
- package/src/index.ts +2 -0
- package/src/levenshtein.ts +4 -2
- package/src/manifest.test.ts +103 -1
- package/src/manifest.ts +62 -6
- package/src/provider.ts +5 -3
- package/src/storage/compare.ts +88 -18
- package/src/storage/gap.ts +26 -0
- package/src/storage/report-gap.test.ts +119 -0
- package/src/storage/report-gap.test.ts.md +59 -0
- package/src/storage/report-gap.test.ts.snap +0 -0
- package/src/storage/report-rename-retype.test.ts +27 -0
- package/src/storage/report-rename-retype.test.ts.md +7 -0
- package/src/storage/report-rename-retype.test.ts.snap +0 -0
- package/src/storage/report.test.ts.md +1 -4
- package/src/storage/report.test.ts.snap +0 -0
- package/src/storage/report.ts +83 -12
- package/src/storage.test.ts +466 -2
- package/src/storage.test.ts.snap +0 -0
- package/src/usage-error.ts +22 -0
- package/src/validate/data.ts +1 -1
- package/src/validate/index.ts +1 -1
- package/src/validate/overrides.ts +39 -3
- 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"}
|
package/dist/storage/layout.js
CHANGED
|
@@ -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 =
|
|
31
|
-
detailed.rets =
|
|
29
|
+
detailed.args = parsed.args?.map(addDetailsToParsedType);
|
|
30
|
+
detailed.rets = parsed.rets?.map(addDetailsToParsedType);
|
|
32
31
|
detailed.item.members =
|
|
33
|
-
|
|
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
|
|
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 @@
|
|
|
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":";;;;;AAAA,8CAAoC;AAEpC,8CAA8D;AAC9D,qCAAoC;AACpC,0DAAsD;AACtD,uCAAiD;AACjD,uCAAoD;AACpD,qCAA4D;
|
|
1
|
+
{"version":3,"file":"report-rename-retype.test.js","sourceRoot":"","sources":["../../src/storage/report-rename-retype.test.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/report.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
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,
|
|
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"}
|
package/dist/storage/report.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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)
|
|
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
|
|
117
|
+
return printWithHints({ title, hints });
|
|
80
118
|
}
|
|
81
119
|
}
|
|
82
120
|
}
|
|
83
|
-
function
|
|
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
|
-
|
|
104
|
-
|
|
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":";;;;;;AAAA,kDAA2B;
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/storage/report.ts"],"names":[],"mappings":"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"}
|