@openzeppelin/upgrades-core 1.29.0 → 1.30.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.
- package/dist/call-optional-signature.d.ts +3 -0
- package/dist/call-optional-signature.d.ts.map +1 -0
- package/dist/call-optional-signature.js +24 -0
- package/dist/call-optional-signature.js.map +1 -0
- package/dist/cli/validate/build-info-file.d.ts +4 -0
- package/dist/cli/validate/build-info-file.d.ts.map +1 -1
- package/dist/cli/validate/build-info-file.js +5 -2
- package/dist/cli/validate/build-info-file.js.map +1 -1
- package/dist/cli/validate/build-info-file.test.js +4 -1
- package/dist/cli/validate/build-info-file.test.js.map +1 -1
- package/dist/cli/validate/upgradeability-assessment.js +2 -6
- package/dist/cli/validate/upgradeability-assessment.js.map +1 -1
- package/dist/cli/validate/validations.d.ts.map +1 -1
- package/dist/cli/validate/validations.js +5 -4
- package/dist/cli/validate/validations.js.map +1 -1
- package/dist/impl-address.d.ts.map +1 -1
- package/dist/impl-address.js +9 -16
- package/dist/impl-address.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/levenshtein.d.ts +6 -0
- package/dist/levenshtein.d.ts.map +1 -1
- package/dist/levenshtein.js.map +1 -1
- package/dist/solc-api.d.ts +14 -0
- package/dist/solc-api.d.ts.map +1 -1
- package/dist/standalone.d.ts +4 -1
- package/dist/standalone.d.ts.map +1 -1
- package/dist/standalone.js +6 -3
- package/dist/standalone.js.map +1 -1
- package/dist/standalone.test.js +17 -0
- package/dist/standalone.test.js.map +1 -1
- package/dist/storage/compare.d.ts +2 -1
- package/dist/storage/compare.d.ts.map +1 -1
- package/dist/storage/compare.js +25 -2
- package/dist/storage/compare.js.map +1 -1
- package/dist/storage/extract.d.ts +15 -3
- package/dist/storage/extract.d.ts.map +1 -1
- package/dist/storage/extract.js +48 -21
- package/dist/storage/extract.js.map +1 -1
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +15 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/layout.d.ts +1 -0
- package/dist/storage/layout.d.ts.map +1 -1
- package/dist/storage/layout.js.map +1 -1
- package/dist/storage/namespace.d.ts +35 -0
- package/dist/storage/namespace.d.ts.map +1 -0
- package/dist/storage/namespace.js +219 -0
- package/dist/storage/namespace.js.map +1 -0
- package/dist/storage/report.js +6 -0
- package/dist/storage/report.js.map +1 -1
- package/dist/storage-namespaced-conflicts-layout.test.d.ts +2 -0
- package/dist/storage-namespaced-conflicts-layout.test.d.ts.map +1 -0
- package/dist/storage-namespaced-conflicts-layout.test.js +69 -0
- package/dist/storage-namespaced-conflicts-layout.test.js.map +1 -0
- package/dist/storage-namespaced-conflicts.test.d.ts +2 -0
- package/dist/storage-namespaced-conflicts.test.d.ts.map +1 -0
- package/dist/storage-namespaced-conflicts.test.js +45 -0
- package/dist/storage-namespaced-conflicts.test.js.map +1 -0
- package/dist/storage-namespaced-layout.test.d.ts +2 -0
- package/dist/storage-namespaced-layout.test.d.ts.map +1 -0
- package/dist/storage-namespaced-layout.test.js +59 -0
- package/dist/storage-namespaced-layout.test.js.map +1 -0
- package/dist/storage-namespaced-outside-contract.test.d.ts +2 -0
- package/dist/storage-namespaced-outside-contract.test.d.ts.map +1 -0
- package/dist/storage-namespaced-outside-contract.test.js +22 -0
- package/dist/storage-namespaced-outside-contract.test.js.map +1 -0
- package/dist/storage-namespaced-solc-versions.test.d.ts +2 -0
- package/dist/storage-namespaced-solc-versions.test.d.ts.map +1 -0
- package/dist/storage-namespaced-solc-versions.test.js +42 -0
- package/dist/storage-namespaced-solc-versions.test.js.map +1 -0
- package/dist/storage-namespaced-udvt.test.d.ts +2 -0
- package/dist/storage-namespaced-udvt.test.d.ts.map +1 -0
- package/dist/storage-namespaced-udvt.test.js +130 -0
- package/dist/storage-namespaced-udvt.test.js.map +1 -0
- package/dist/storage-namespaced.test.d.ts +2 -0
- package/dist/storage-namespaced.test.d.ts.map +1 -0
- package/dist/storage-namespaced.test.js +132 -0
- package/dist/storage-namespaced.test.js.map +1 -0
- package/dist/upgrade-interface-version.d.ts +3 -0
- package/dist/upgrade-interface-version.d.ts.map +1 -0
- package/dist/upgrade-interface-version.js +25 -0
- package/dist/upgrade-interface-version.js.map +1 -0
- package/dist/upgrade-interface-version.test.d.ts +2 -0
- package/dist/upgrade-interface-version.test.d.ts.map +1 -0
- package/dist/upgrade-interface-version.test.js +32 -0
- package/dist/upgrade-interface-version.test.js.map +1 -0
- package/dist/utils/annotations.d.ts +4 -0
- package/dist/utils/annotations.d.ts.map +1 -1
- package/dist/utils/annotations.js +9 -1
- package/dist/utils/annotations.js.map +1 -1
- package/dist/utils/make-namespaced.d.ts +20 -0
- package/dist/utils/make-namespaced.d.ts.map +1 -0
- package/dist/utils/make-namespaced.js +131 -0
- package/dist/utils/make-namespaced.js.map +1 -0
- package/dist/utils/make-namespaced.test.d.ts +2 -0
- package/dist/utils/make-namespaced.test.d.ts.map +1 -0
- package/dist/utils/make-namespaced.test.js +59 -0
- package/dist/utils/make-namespaced.test.js.map +1 -0
- package/dist/utils/stabilize-layout.d.ts +11 -0
- package/dist/utils/stabilize-layout.d.ts.map +1 -1
- package/dist/utils/stabilize-layout.js +5 -0
- package/dist/utils/stabilize-layout.js.map +1 -1
- package/dist/validate/query.d.ts.map +1 -1
- package/dist/validate/query.js +4 -2
- package/dist/validate/query.js.map +1 -1
- package/dist/validate/run.d.ts +18 -2
- package/dist/validate/run.d.ts.map +1 -1
- package/dist/validate/run.js +80 -2
- package/dist/validate/run.js.map +1 -1
- package/package.json +3 -3
- package/src/call-optional-signature.ts +20 -0
- package/src/cli/validate/build-info-file.test.ts +4 -1
- package/src/cli/validate/build-info-file.ts +12 -2
- package/src/cli/validate/upgradeability-assessment.ts +1 -6
- package/src/cli/validate/validations.ts +6 -5
- package/src/impl-address.ts +9 -20
- package/src/index.ts +4 -0
- package/src/levenshtein.ts +7 -0
- package/src/solc-api.ts +14 -0
- package/src/standalone.test.ts +26 -0
- package/src/standalone.ts +6 -2
- package/src/storage/compare.ts +34 -2
- package/src/storage/extract.ts +68 -20
- package/src/storage/index.ts +22 -1
- package/src/storage/layout.ts +1 -0
- package/src/storage/namespace.ts +267 -0
- package/src/storage/report.ts +8 -0
- package/src/storage-0.8.test.ts.md +4 -0
- package/src/storage-0.8.test.ts.snap +0 -0
- package/src/storage-memory-0.5.test.ts.md +2 -0
- package/src/storage-memory-0.5.test.ts.snap +0 -0
- package/src/storage-namespaced-conflicts-layout.test.ts +96 -0
- package/src/storage-namespaced-conflicts-layout.test.ts.md +53 -0
- package/src/storage-namespaced-conflicts-layout.test.ts.snap +0 -0
- package/src/storage-namespaced-conflicts.test.ts +54 -0
- package/src/storage-namespaced-conflicts.test.ts.md +53 -0
- package/src/storage-namespaced-conflicts.test.ts.snap +0 -0
- package/src/storage-namespaced-layout.test.ts +77 -0
- package/src/storage-namespaced-layout.test.ts.md +67 -0
- package/src/storage-namespaced-layout.test.ts.snap +0 -0
- package/src/storage-namespaced-outside-contract.test.ts +24 -0
- package/src/storage-namespaced-solc-versions.test.ts +59 -0
- package/src/storage-namespaced-udvt.test.ts +160 -0
- package/src/storage-namespaced.test.ts +146 -0
- package/src/storage-namespaced.test.ts.md +89 -0
- package/src/storage-namespaced.test.ts.snap +0 -0
- package/src/storage.test.ts.md +2 -0
- package/src/storage.test.ts.snap +0 -0
- package/src/upgrade-interface-version.test.ts +37 -0
- package/src/upgrade-interface-version.ts +27 -0
- package/src/utils/annotations.ts +8 -0
- package/src/utils/make-namespaced.test.ts +74 -0
- package/src/utils/make-namespaced.test.ts.md +154 -0
- package/src/utils/make-namespaced.test.ts.snap +0 -0
- package/src/utils/make-namespaced.ts +154 -0
- package/src/utils/stabilize-layout.ts +5 -0
- package/src/validate/query.ts +4 -2
- package/src/validate/run.ts +108 -2
|
@@ -0,0 +1,132 @@
|
|
|
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 storage_1 = require("./storage");
|
|
10
|
+
const extract_1 = require("./storage/extract");
|
|
11
|
+
const stabilize_layout_1 = require("./utils/stabilize-layout");
|
|
12
|
+
const test = ava_1.default;
|
|
13
|
+
test.before(async (t) => {
|
|
14
|
+
const buildInfo = await hardhat_1.artifacts.getBuildInfo('contracts/test/Namespaced.sol:Example');
|
|
15
|
+
if (buildInfo === undefined) {
|
|
16
|
+
throw new Error('Build info not found');
|
|
17
|
+
}
|
|
18
|
+
const solcOutput = buildInfo.output;
|
|
19
|
+
const contracts = {};
|
|
20
|
+
const storageLayouts = {};
|
|
21
|
+
for (const def of (0, utils_1.findAll)('ContractDefinition', solcOutput.sources['contracts/test/Namespaced.sol'].ast)) {
|
|
22
|
+
contracts[def.name] = def;
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
24
|
+
storageLayouts[def.name] = solcOutput.contracts['contracts/test/Namespaced.sol'][def.name].storageLayout;
|
|
25
|
+
}
|
|
26
|
+
const deref = (0, utils_1.astDereferencer)(solcOutput);
|
|
27
|
+
t.context.extractStorageLayout = name => (0, extract_1.extractStorageLayout)(contracts[name], dummyDecodeSrc, deref, storageLayouts[name]);
|
|
28
|
+
});
|
|
29
|
+
const dummyDecodeSrc = () => 'file.sol:1';
|
|
30
|
+
test('layout', t => {
|
|
31
|
+
const layout = t.context.extractStorageLayout('Example');
|
|
32
|
+
t.snapshot((0, stabilize_layout_1.stabilizeStorageLayout)(layout));
|
|
33
|
+
});
|
|
34
|
+
test('multiple namespaces', t => {
|
|
35
|
+
const layout = t.context.extractStorageLayout('MultipleNamespaces');
|
|
36
|
+
t.snapshot((0, stabilize_layout_1.stabilizeStorageLayout)(layout));
|
|
37
|
+
});
|
|
38
|
+
test('namespaced upgrade ok', t => {
|
|
39
|
+
const v1 = t.context.extractStorageLayout('Example');
|
|
40
|
+
const v2 = t.context.extractStorageLayout('ExampleV2_Ok');
|
|
41
|
+
const comparison = (0, storage_1.getStorageUpgradeErrors)(v1, v2);
|
|
42
|
+
t.deepEqual(comparison, []);
|
|
43
|
+
});
|
|
44
|
+
test('namespaced upgrade bad', t => {
|
|
45
|
+
const v1 = t.context.extractStorageLayout('Example');
|
|
46
|
+
const v2 = t.context.extractStorageLayout('ExampleV2_Bad');
|
|
47
|
+
const comparison = (0, storage_1.getStorageUpgradeErrors)(v1, v2);
|
|
48
|
+
t.like(comparison, {
|
|
49
|
+
length: 1,
|
|
50
|
+
0: {
|
|
51
|
+
kind: 'delete',
|
|
52
|
+
original: {
|
|
53
|
+
contract: 'Example',
|
|
54
|
+
label: 'x',
|
|
55
|
+
type: {
|
|
56
|
+
id: 't_uint256',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
test('recursive struct outer ok', t => {
|
|
63
|
+
const v1 = t.context.extractStorageLayout('RecursiveStruct');
|
|
64
|
+
const v2 = t.context.extractStorageLayout('RecursiveStructV2_Outer_Ok');
|
|
65
|
+
const comparison = (0, storage_1.getStorageUpgradeErrors)(v1, v2);
|
|
66
|
+
t.deepEqual(comparison, []);
|
|
67
|
+
});
|
|
68
|
+
test('recursive struct bad', t => {
|
|
69
|
+
const v1 = t.context.extractStorageLayout('RecursiveStruct');
|
|
70
|
+
const v2 = t.context.extractStorageLayout('RecursiveStructV2_Bad');
|
|
71
|
+
const comparison = (0, storage_1.getStorageUpgradeErrors)(v1, v2);
|
|
72
|
+
t.like(comparison, {
|
|
73
|
+
length: 1,
|
|
74
|
+
0: {
|
|
75
|
+
kind: 'typechange',
|
|
76
|
+
change: {
|
|
77
|
+
kind: 'struct members',
|
|
78
|
+
ops: {
|
|
79
|
+
length: 1,
|
|
80
|
+
0: { kind: 'append' },
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
original: { label: 's' },
|
|
84
|
+
updated: { label: 's' },
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
test('multiple namespaces and regular variables ok', t => {
|
|
89
|
+
const v1 = t.context.extractStorageLayout('MultipleNamespacesAndRegularVariables');
|
|
90
|
+
const v2 = t.context.extractStorageLayout('MultipleNamespacesAndRegularVariablesV2_Ok');
|
|
91
|
+
const comparison = (0, storage_1.getStorageUpgradeErrors)(v1, v2);
|
|
92
|
+
t.deepEqual(comparison, []);
|
|
93
|
+
});
|
|
94
|
+
test('multiple namespaces and regular variables bad', t => {
|
|
95
|
+
const v1 = t.context.extractStorageLayout('MultipleNamespacesAndRegularVariables');
|
|
96
|
+
const v2 = t.context.extractStorageLayout('MultipleNamespacesAndRegularVariablesV2_Bad');
|
|
97
|
+
const comparison = (0, storage_1.getStorageUpgradeErrors)(v1, v2);
|
|
98
|
+
t.like(comparison, {
|
|
99
|
+
length: 5,
|
|
100
|
+
0: {
|
|
101
|
+
kind: 'insert',
|
|
102
|
+
updated: {
|
|
103
|
+
label: 'c',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
1: {
|
|
107
|
+
kind: 'layoutchange',
|
|
108
|
+
updated: {
|
|
109
|
+
label: 'a', // layout available for regular variable outside of namespace
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
2: {
|
|
113
|
+
kind: 'layoutchange',
|
|
114
|
+
updated: {
|
|
115
|
+
label: 'b', // layout available for regular variable outside of namespace
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
3: {
|
|
119
|
+
kind: 'insert',
|
|
120
|
+
updated: {
|
|
121
|
+
label: 'c',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
4: {
|
|
125
|
+
kind: 'insert',
|
|
126
|
+
updated: {
|
|
127
|
+
label: 'c',
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=storage-namespaced.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-namespaced.test.js","sourceRoot":"","sources":["../src/storage-namespaced.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAAoC;AAEpC,8CAA8D;AAC9D,qCAAoC;AAGpC,uCAAoD;AAEpD,+CAAyD;AACzD,+DAAkE;AAMlE,MAAM,IAAI,GAAG,aAAwB,CAAC;AAEtC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;IACpB,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,uCAAuC,CAAC,CAAC;IACxF,IAAI,SAAS,KAAK,SAAS,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACzC;IACD,MAAM,UAAU,GAAe,SAAS,CAAC,MAAM,CAAC;IAChD,MAAM,SAAS,GAAuC,EAAE,CAAC;IACzD,MAAM,cAAc,GAAkC,EAAE,CAAC;IACzD,KAAK,MAAM,GAAG,IAAI,IAAA,eAAO,EAAC,oBAAoB,EAAE,UAAU,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,EAAE;QACxG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QAC1B,oEAAoE;QACpE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,aAAc,CAAC;KAC3G;IACD,MAAM,KAAK,GAAG,IAAA,uBAAe,EAAC,UAAU,CAAC,CAAC;IAC1C,CAAC,CAAC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,CACtC,IAAA,8BAAoB,EAAC,SAAS,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AACvF,CAAC,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC;AAE1C,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;IACjB,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAC,QAAQ,CAAC,IAAA,yCAAsB,EAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE;IAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;IACpE,CAAC,CAAC,QAAQ,CAAC,IAAA,yCAAsB,EAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE;IAChC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE;IACjC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;QACjB,MAAM,EAAE,CAAC;QACT,CAAC,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE;gBACR,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE;oBACJ,EAAE,EAAE,WAAW;iBAChB;aACF;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE;IACpC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC7D,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE;IAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC7D,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;QACjB,MAAM,EAAE,CAAC;QACT,CAAC,EAAE;YACD,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE;gBACN,IAAI,EAAE,gBAAgB;gBACtB,GAAG,EAAE;oBACH,MAAM,EAAE,CAAC;oBACT,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBACtB;aACF;YACD,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;YACxB,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;SACxB;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,CAAC,CAAC,EAAE;IACvD,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,uCAAuC,CAAC,CAAC;IACnF,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,4CAA4C,CAAC,CAAC;IACxF,MAAM,UAAU,GAAG,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+CAA+C,EAAE,CAAC,CAAC,EAAE;IACxD,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,uCAAuC,CAAC,CAAC;IACnF,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,6CAA6C,CAAC,CAAC;IACzF,MAAM,UAAU,GAAG,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;QACjB,MAAM,EAAE,CAAC;QACT,CAAC,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE,GAAG;aACX;SACF;QACD,CAAC,EAAE;YACD,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE;gBACP,KAAK,EAAE,GAAG,EAAE,6DAA6D;aAC1E;SACF;QACD,CAAC,EAAE;YACD,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE;gBACP,KAAK,EAAE,GAAG,EAAE,6DAA6D;aAC1E;SACF;QACD,CAAC,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE,GAAG;aACX;SACF;QACD,CAAC,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,KAAK,EAAE,GAAG;aACX;SACF;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-interface-version.d.ts","sourceRoot":"","sources":["../src/upgrade-interface-version.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB7B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUpgradeInterfaceVersion = void 0;
|
|
4
|
+
const call_optional_signature_1 = require("./call-optional-signature");
|
|
5
|
+
async function getUpgradeInterfaceVersion(provider, address) {
|
|
6
|
+
const encodedVersion = await (0, call_optional_signature_1.callOptionalSignature)(provider, address, 'UPGRADE_INTERFACE_VERSION()');
|
|
7
|
+
if (encodedVersion !== undefined) {
|
|
8
|
+
// Encoded string
|
|
9
|
+
const buf = Buffer.from(encodedVersion.replace(/^0x/, ''), 'hex');
|
|
10
|
+
// The first 32 bytes represent the offset, which should be 32 for a string
|
|
11
|
+
const offset = parseInt(buf.slice(0, 32).toString('hex'), 16);
|
|
12
|
+
if (offset !== 32) {
|
|
13
|
+
throw new Error(`Unexpected type for UPGRADE_INTERFACE_VERSION at address ${address}. Expected a string`);
|
|
14
|
+
}
|
|
15
|
+
// The next 32 bytes represent the length of the string
|
|
16
|
+
const length = parseInt(buf.slice(32, 64).toString('hex'), 16);
|
|
17
|
+
// The rest is the string itself
|
|
18
|
+
return buf.slice(64, 64 + length).toString('utf8');
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.getUpgradeInterfaceVersion = getUpgradeInterfaceVersion;
|
|
25
|
+
//# sourceMappingURL=upgrade-interface-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-interface-version.js","sourceRoot":"","sources":["../src/upgrade-interface-version.ts"],"names":[],"mappings":";;;AAAA,uEAAkE;AAG3D,KAAK,UAAU,0BAA0B,CAC9C,QAA0B,EAC1B,OAAe;IAEf,MAAM,cAAc,GAAG,MAAM,IAAA,+CAAqB,EAAC,QAAQ,EAAE,OAAO,EAAE,6BAA6B,CAAC,CAAC;IACrG,IAAI,cAAc,KAAK,SAAS,EAAE;QAChC,iBAAiB;QACjB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAElE,2EAA2E;QAC3E,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,IAAI,MAAM,KAAK,EAAE,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,4DAA4D,OAAO,qBAAqB,CAAC,CAAC;SAC3G;QAED,uDAAuD;QACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAE/D,gCAAgC;QAChC,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KACpD;SAAM;QACL,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAvBD,gEAuBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-interface-version.test.d.ts","sourceRoot":"","sources":["../src/upgrade-interface-version.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 upgrade_interface_version_1 = require("./upgrade-interface-version");
|
|
8
|
+
const hash = '0x1234';
|
|
9
|
+
function makeProviderReturning(result) {
|
|
10
|
+
return { send: (_method, _params) => Promise.resolve(result) };
|
|
11
|
+
}
|
|
12
|
+
function makeProviderError(msg) {
|
|
13
|
+
return {
|
|
14
|
+
send: (_method, _params) => {
|
|
15
|
+
throw new Error(msg);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
(0, ava_1.default)('getUpgradeInterfaceVersion returns version', async (t) => {
|
|
20
|
+
// abi encoding of '5.0.0'
|
|
21
|
+
const provider = makeProviderReturning('0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005352e302e30000000000000000000000000000000000000000000000000000000');
|
|
22
|
+
t.is(await (0, upgrade_interface_version_1.getUpgradeInterfaceVersion)(provider, hash), '5.0.0');
|
|
23
|
+
});
|
|
24
|
+
(0, ava_1.default)('getUpgradeInterfaceVersion throws unrelated error', async (t) => {
|
|
25
|
+
const provider = makeProviderError('unrelated error');
|
|
26
|
+
await t.throwsAsync(() => (0, upgrade_interface_version_1.getUpgradeInterfaceVersion)(provider, hash), { message: 'unrelated error' });
|
|
27
|
+
});
|
|
28
|
+
(0, ava_1.default)('getUpgradeInterfaceVersion returns undefined for invalid selector', async (t) => {
|
|
29
|
+
const provider = makeProviderError(`Transaction reverted: function selector was not recognized and there's no fallback function`);
|
|
30
|
+
t.is(await (0, upgrade_interface_version_1.getUpgradeInterfaceVersion)(provider, hash), undefined);
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=upgrade-interface-version.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-interface-version.test.js","sourceRoot":"","sources":["../src/upgrade-interface-version.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAAuB;AAEvB,2EAAyE;AAEzE,MAAM,IAAI,GAAG,QAAQ,CAAC;AAEtB,SAAS,qBAAqB,CAAC,MAAe;IAC5C,OAAO,EAAE,IAAI,EAAE,CAAC,OAAe,EAAE,OAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAsB,CAAC;AACxG,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO;QACL,IAAI,EAAE,CAAC,OAAe,EAAE,OAAkB,EAAE,EAAE;YAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;KACkB,CAAC;AACxB,CAAC;AAED,IAAA,aAAI,EAAC,4CAA4C,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC3D,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,qBAAqB,CACpC,oMAAoM,CACrM,CAAC;IACF,CAAC,CAAC,EAAE,CAAC,MAAM,IAAA,sDAA0B,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,mDAAmD,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAA,sDAA0B,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACxG,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,mEAAmE,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClF,MAAM,QAAQ,GAAG,iBAAiB,CAChC,6FAA6F,CAC9F,CAAC;IACF,CAAC,CAAC,EAAE,CAAC,MAAM,IAAA,sDAA0B,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,YAuB5F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,UAM1C"}
|
|
1
|
+
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,YAuB5F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,UAM1C"}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getDocumentation = exports.getAnnotationArgs = void 0;
|
|
3
|
+
exports.getDocumentation = exports.getAnnotationArgs = exports.hasAnnotationTag = void 0;
|
|
4
4
|
const execall_1 = require("./execall");
|
|
5
|
+
/**
|
|
6
|
+
* Whether the given doc string has an annotation tag.
|
|
7
|
+
*/
|
|
8
|
+
function hasAnnotationTag(doc, tag) {
|
|
9
|
+
const regex = new RegExp(`^\\s*(@custom:${tag})(\\s|$)`, 'm');
|
|
10
|
+
return regex.test(doc);
|
|
11
|
+
}
|
|
12
|
+
exports.hasAnnotationTag = hasAnnotationTag;
|
|
5
13
|
/**
|
|
6
14
|
* Get args from the doc string matching the given tag.
|
|
7
15
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AAGpC;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,GAAW,EAAE,GAAW,EAAE,aAAiC;IAC3F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,IAAA,iBAAO,EAC9B,kFAAkF,EAClF,GAAG,CACJ,EAAE;QACD,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE;YAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1C;SACF;KACF;IAED,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAChC,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,6BAA6B,GAAG,EAAE,CAAC,CAAC;aACpE;QACH,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAvBD,8CAuBC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,IAAU;IACzC,IAAI,eAAe,IAAI,IAAI,EAAE;QAC3B,OAAO,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC;KACrG;SAAM;QACL,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AAND,4CAMC"}
|
|
1
|
+
{"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AAGpC;;GAEG;AACH,SAAgB,gBAAgB,CAAC,GAAW,EAAE,GAAW;IACvD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,iBAAiB,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAHD,4CAGC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,GAAW,EAAE,GAAW,EAAE,aAAiC;IAC3F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,IAAA,iBAAO,EAC9B,kFAAkF,EAClF,GAAG,CACJ,EAAE;QACD,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE;YAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1C;SACF;KACF;IAED,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAChC,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,6BAA6B,GAAG,EAAE,CAAC,CAAC;aACpE;QACH,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAvBD,8CAuBC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,IAAU;IACzC,IAAI,eAAe,IAAI,IAAI,EAAE;QAC3B,OAAO,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC;KACrG;SAAM;QACL,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AAND,4CAMC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SolcInput, SolcOutput } from '../solc-api';
|
|
2
|
+
/**
|
|
3
|
+
* Makes a modified version of the solc input to add state variables in each contract for namespaced struct definitions,
|
|
4
|
+
* so that the compiler will generate their types in the storage layout.
|
|
5
|
+
*
|
|
6
|
+
* This makes the following modifications to the input:
|
|
7
|
+
* - Adds a state variable for each namespaced struct definition
|
|
8
|
+
* - Deletes all contracts' functions since they are not needed for storage layout
|
|
9
|
+
* - Deletes all contracts' modifiers, variables, and parent constructor invocations to avoid compilation errors due to deleted functions and constructors
|
|
10
|
+
* - Deletes all using for directives (at file level and in contracts) since they may reference deleted functions
|
|
11
|
+
* - Converts all free functions and constants (at file level) to dummy variables (do not delete them since they might be imported by other files)
|
|
12
|
+
*
|
|
13
|
+
* Also sets the outputSelection to only include storageLayout and ast, since the other outputs are not needed.
|
|
14
|
+
*
|
|
15
|
+
* @param input The original solc input.
|
|
16
|
+
* @param output The original solc output.
|
|
17
|
+
* @returns The modified solc input with storage layout that includes namespaced type information.
|
|
18
|
+
*/
|
|
19
|
+
export declare function makeNamespacedInput(input: SolcInput, output: SolcOutput): SolcInput;
|
|
20
|
+
//# sourceMappingURL=make-namespaced.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-namespaced.d.ts","sourceRoot":"","sources":["../../src/utils/make-namespaced.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAWpD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,CAqEnF"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeNamespacedInput = void 0;
|
|
4
|
+
const utils_1 = require("solidity-ast/utils");
|
|
5
|
+
const namespace_1 = require("../storage/namespace");
|
|
6
|
+
const assert_1 = require("./assert");
|
|
7
|
+
const OUTPUT_SELECTION = {
|
|
8
|
+
'*': {
|
|
9
|
+
'*': ['storageLayout'],
|
|
10
|
+
'': ['ast'],
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Makes a modified version of the solc input to add state variables in each contract for namespaced struct definitions,
|
|
15
|
+
* so that the compiler will generate their types in the storage layout.
|
|
16
|
+
*
|
|
17
|
+
* This makes the following modifications to the input:
|
|
18
|
+
* - Adds a state variable for each namespaced struct definition
|
|
19
|
+
* - Deletes all contracts' functions since they are not needed for storage layout
|
|
20
|
+
* - Deletes all contracts' modifiers, variables, and parent constructor invocations to avoid compilation errors due to deleted functions and constructors
|
|
21
|
+
* - Deletes all using for directives (at file level and in contracts) since they may reference deleted functions
|
|
22
|
+
* - Converts all free functions and constants (at file level) to dummy variables (do not delete them since they might be imported by other files)
|
|
23
|
+
*
|
|
24
|
+
* Also sets the outputSelection to only include storageLayout and ast, since the other outputs are not needed.
|
|
25
|
+
*
|
|
26
|
+
* @param input The original solc input.
|
|
27
|
+
* @param output The original solc output.
|
|
28
|
+
* @returns The modified solc input with storage layout that includes namespaced type information.
|
|
29
|
+
*/
|
|
30
|
+
function makeNamespacedInput(input, output) {
|
|
31
|
+
const modifiedSources = {};
|
|
32
|
+
for (const [sourcePath] of Object.entries(input.sources)) {
|
|
33
|
+
const source = input.sources[sourcePath];
|
|
34
|
+
if (source.content === undefined) {
|
|
35
|
+
modifiedSources[sourcePath] = source;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
const orig = Buffer.from(source.content, 'utf8');
|
|
39
|
+
const modifications = [];
|
|
40
|
+
for (const node of output.sources[sourcePath].ast.nodes) {
|
|
41
|
+
if ((0, utils_1.isNodeType)('ContractDefinition', node)) {
|
|
42
|
+
const contractDef = node;
|
|
43
|
+
// Remove any calls to parent constructors from the inheritance list
|
|
44
|
+
const inherits = contractDef.baseContracts;
|
|
45
|
+
for (const inherit of inherits) {
|
|
46
|
+
if (Array.isArray(inherit.arguments)) {
|
|
47
|
+
(0, assert_1.assert)(inherit.baseName.name !== undefined);
|
|
48
|
+
modifications.push(makeReplace(inherit, orig, inherit.baseName.name));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const contractNodes = contractDef.nodes;
|
|
52
|
+
for (const contractNode of contractNodes) {
|
|
53
|
+
if ((0, utils_1.isNodeType)('FunctionDefinition', contractNode) ||
|
|
54
|
+
(0, utils_1.isNodeType)('ModifierDefinition', contractNode) ||
|
|
55
|
+
(0, utils_1.isNodeType)('VariableDeclaration', contractNode)) {
|
|
56
|
+
if (contractNode.documentation) {
|
|
57
|
+
modifications.push(makeDelete(contractNode.documentation, orig));
|
|
58
|
+
}
|
|
59
|
+
modifications.push(makeDelete(contractNode, orig));
|
|
60
|
+
}
|
|
61
|
+
else if ((0, utils_1.isNodeType)('UsingForDirective', contractNode)) {
|
|
62
|
+
modifications.push(makeDelete(contractNode, orig));
|
|
63
|
+
}
|
|
64
|
+
else if ((0, utils_1.isNodeType)('StructDefinition', contractNode)) {
|
|
65
|
+
const storageLocation = (0, namespace_1.getStorageLocationAnnotation)(contractNode);
|
|
66
|
+
if (storageLocation !== undefined) {
|
|
67
|
+
const structName = contractNode.name;
|
|
68
|
+
const variableName = `$${structName}_${(Math.random() * 1e6).toFixed(0)}`;
|
|
69
|
+
const insertText = ` ${structName} ${variableName};`;
|
|
70
|
+
modifications.push(makeInsertAfter(contractNode, insertText));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else if ((0, utils_1.isNodeType)('FunctionDefinition', node) || (0, utils_1.isNodeType)('VariableDeclaration', node)) {
|
|
76
|
+
if (node.documentation) {
|
|
77
|
+
modifications.push(makeDelete(node.documentation, orig));
|
|
78
|
+
}
|
|
79
|
+
// Replace with a dummy variable of arbitrary type
|
|
80
|
+
const name = node.name;
|
|
81
|
+
const insertText = `uint256 constant ${name} = 0;`;
|
|
82
|
+
modifications.push(makeReplace(node, orig, insertText));
|
|
83
|
+
}
|
|
84
|
+
else if ((0, utils_1.isNodeType)('UsingForDirective', node)) {
|
|
85
|
+
modifications.push(makeDelete(node, orig));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
modifiedSources[sourcePath] = { ...source, content: getModifiedSource(orig, modifications) };
|
|
89
|
+
}
|
|
90
|
+
return { ...input, sources: modifiedSources, settings: { ...input.settings, outputSelection: OUTPUT_SELECTION } };
|
|
91
|
+
}
|
|
92
|
+
exports.makeNamespacedInput = makeNamespacedInput;
|
|
93
|
+
function getPositions(node) {
|
|
94
|
+
const [start, length] = node.src.split(':').map(Number);
|
|
95
|
+
const end = start + length;
|
|
96
|
+
return { start, end };
|
|
97
|
+
}
|
|
98
|
+
function makeReplace(node, orig, text) {
|
|
99
|
+
// Replace is a delete and insert
|
|
100
|
+
const { start, end } = makeDelete(node, orig);
|
|
101
|
+
return { start, end, text };
|
|
102
|
+
}
|
|
103
|
+
function makeInsertAfter(node, text) {
|
|
104
|
+
const { end } = getPositions(node);
|
|
105
|
+
return { start: end, end, text };
|
|
106
|
+
}
|
|
107
|
+
function makeDelete(node, orig) {
|
|
108
|
+
const positions = getPositions(node);
|
|
109
|
+
let end = positions.end;
|
|
110
|
+
// If the next character is a semicolon for variables, skip over it
|
|
111
|
+
if ((0, utils_1.isNodeType)('VariableDeclaration', node) && end + 1 < orig.length && orig.toString('utf8', end, end + 1) === ';') {
|
|
112
|
+
end += 1;
|
|
113
|
+
}
|
|
114
|
+
return { start: positions.start, end };
|
|
115
|
+
}
|
|
116
|
+
function getModifiedSource(orig, modifications) {
|
|
117
|
+
let result = '';
|
|
118
|
+
let copyFromIndex = 0;
|
|
119
|
+
for (const modification of modifications) {
|
|
120
|
+
(0, assert_1.assert)(modification.start >= copyFromIndex);
|
|
121
|
+
result += orig.toString('utf8', copyFromIndex, modification.start);
|
|
122
|
+
if (modification.text !== undefined) {
|
|
123
|
+
result += modification.text;
|
|
124
|
+
}
|
|
125
|
+
copyFromIndex = modification.end;
|
|
126
|
+
}
|
|
127
|
+
(0, assert_1.assert)(copyFromIndex <= orig.length);
|
|
128
|
+
result += orig.toString('utf8', copyFromIndex);
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=make-namespaced.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-namespaced.js","sourceRoot":"","sources":["../../src/utils/make-namespaced.ts"],"names":[],"mappings":";;;AAAA,8CAAgD;AAGhD,oDAAoE;AACpE,qCAAkC;AAElC,MAAM,gBAAgB,GAAG;IACvB,GAAG,EAAE;QACH,GAAG,EAAE,CAAC,eAAe,CAAC;QACtB,EAAE,EAAE,CAAC,KAAK,CAAC;KACZ;CACF,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,mBAAmB,CAAC,KAAgB,EAAE,MAAkB;IACtE,MAAM,eAAe,GAAyC,EAAE,CAAC;IAEjE,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QACxD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEzC,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;YAChC,eAAe,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;YACrC,SAAS;SACV;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEjD,MAAM,aAAa,GAAmB,EAAE,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;YACvD,IAAI,IAAA,kBAAU,EAAC,oBAAoB,EAAE,IAAI,CAAC,EAAE;gBAC1C,MAAM,WAAW,GAAG,IAAI,CAAC;gBAEzB,oEAAoE;gBACpE,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC;gBAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;oBAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;wBACpC,IAAA,eAAM,EAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;wBAC5C,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;qBACvE;iBACF;gBAED,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC;gBACxC,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;oBACxC,IACE,IAAA,kBAAU,EAAC,oBAAoB,EAAE,YAAY,CAAC;wBAC9C,IAAA,kBAAU,EAAC,oBAAoB,EAAE,YAAY,CAAC;wBAC9C,IAAA,kBAAU,EAAC,qBAAqB,EAAE,YAAY,CAAC,EAC/C;wBACA,IAAI,YAAY,CAAC,aAAa,EAAE;4BAC9B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;yBAClE;wBACD,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;qBACpD;yBAAM,IAAI,IAAA,kBAAU,EAAC,mBAAmB,EAAE,YAAY,CAAC,EAAE;wBACxD,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;qBACpD;yBAAM,IAAI,IAAA,kBAAU,EAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE;wBACvD,MAAM,eAAe,GAAG,IAAA,wCAA4B,EAAC,YAAY,CAAC,CAAC;wBACnE,IAAI,eAAe,KAAK,SAAS,EAAE;4BACjC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC;4BACrC,MAAM,YAAY,GAAG,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC1E,MAAM,UAAU,GAAG,IAAI,UAAU,IAAI,YAAY,GAAG,CAAC;4BAErD,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;yBAC/D;qBACF;iBACF;aACF;iBAAM,IAAI,IAAA,kBAAU,EAAC,oBAAoB,EAAE,IAAI,CAAC,IAAI,IAAA,kBAAU,EAAC,qBAAqB,EAAE,IAAI,CAAC,EAAE;gBAC5F,IAAI,IAAI,CAAC,aAAa,EAAE;oBACtB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;iBAC1D;gBACD,kDAAkD;gBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACvB,MAAM,UAAU,GAAG,oBAAoB,IAAI,OAAO,CAAC;gBACnD,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;aACzD;iBAAM,IAAI,IAAA,kBAAU,EAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE;gBAChD,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;aAC5C;SACF;QAED,eAAe,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;KAC9F;IAED,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,EAAE,CAAC;AACpH,CAAC;AArED,kDAqEC;AAQD,SAAS,YAAY,CAAC,IAAU;IAC9B,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,IAAU,EAAE,IAAY,EAAE,IAAY;IACzD,iCAAiC;IACjC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,eAAe,CAAC,IAAU,EAAE,IAAY;IAC/C,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,IAAU,EAAE,IAAY;IAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;IACxB,mEAAmE;IACnE,IAAI,IAAA,kBAAU,EAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;QACnH,GAAG,IAAI,CAAC,CAAC;KACV;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,aAA6B;IACpE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;QACxC,IAAA,eAAM,EAAC,YAAY,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC;QAC5C,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAEnE,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE;YACnC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC;SAC7B;QAED,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC;KAClC;IAED,IAAA,eAAM,EAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAE/C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-namespaced.test.d.ts","sourceRoot":"","sources":["../../src/utils/make-namespaced.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
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 hardhat_1 = require("hardhat");
|
|
8
|
+
const task_names_1 = require("hardhat/builtin-tasks/task-names");
|
|
9
|
+
const make_namespaced_1 = require("./make-namespaced");
|
|
10
|
+
(0, ava_1.default)('make namespaced input', async (t) => {
|
|
11
|
+
const origBuildInfo = await hardhat_1.artifacts.getBuildInfo('contracts/test/NamespacedToModify.sol:Example');
|
|
12
|
+
await testMakeNamespaced(origBuildInfo, t, '0.8.20');
|
|
13
|
+
});
|
|
14
|
+
(0, ava_1.default)('make namespaced input - solc 0.7', async (t) => {
|
|
15
|
+
// The nameNamespacedInput function must work for different solc versions, since it is called before we check whether namespaces are used with solc >= 0.8.20
|
|
16
|
+
const origBuildInfo = await hardhat_1.artifacts.getBuildInfo('contracts/test/NamespacedToModify07.sol:HasFunction');
|
|
17
|
+
await testMakeNamespaced(origBuildInfo, t, '0.7.6');
|
|
18
|
+
});
|
|
19
|
+
async function testMakeNamespaced(origBuildInfo, t, solcVersion) {
|
|
20
|
+
if (origBuildInfo === undefined) {
|
|
21
|
+
throw new Error('Build info not found');
|
|
22
|
+
}
|
|
23
|
+
// Inefficient, but we want to test that we don't actually modify the original input object
|
|
24
|
+
const origInput = JSON.parse(JSON.stringify(origBuildInfo.input));
|
|
25
|
+
const modifiedInput = (0, make_namespaced_1.makeNamespacedInput)(origBuildInfo.input, origBuildInfo.output);
|
|
26
|
+
normalizeStateVariableNames(modifiedInput);
|
|
27
|
+
t.snapshot(modifiedInput);
|
|
28
|
+
t.deepEqual(origBuildInfo.input, origInput);
|
|
29
|
+
t.notDeepEqual(modifiedInput, origInput);
|
|
30
|
+
// Run hardhat compile on the modified input and make sure it has no errors
|
|
31
|
+
const modifiedOutput = await hardhatCompile(modifiedInput, solcVersion);
|
|
32
|
+
t.is(modifiedOutput.errors, undefined);
|
|
33
|
+
}
|
|
34
|
+
function normalizeStateVariableNames(input) {
|
|
35
|
+
for (const source of Object.values(input.sources)) {
|
|
36
|
+
if (source.content !== undefined) {
|
|
37
|
+
source.content = source.content.replace(/\$MainStorage_\d{1,6};/g, '$MainStorage_random;');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function hardhatCompile(input, solcVersion) {
|
|
42
|
+
const solcBuild = await (0, hardhat_1.run)(task_names_1.TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD, {
|
|
43
|
+
quiet: true,
|
|
44
|
+
solcVersion,
|
|
45
|
+
});
|
|
46
|
+
if (solcBuild.isSolcJs) {
|
|
47
|
+
return await (0, hardhat_1.run)(task_names_1.TASK_COMPILE_SOLIDITY_RUN_SOLCJS, {
|
|
48
|
+
input,
|
|
49
|
+
solcJsPath: solcBuild.compilerPath,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return await (0, hardhat_1.run)(task_names_1.TASK_COMPILE_SOLIDITY_RUN_SOLC, {
|
|
54
|
+
input,
|
|
55
|
+
solcPath: solcBuild.compilerPath,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=make-namespaced.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-namespaced.test.js","sourceRoot":"","sources":["../../src/utils/make-namespaced.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAA6C;AAC7C,qCAAyC;AACzC,iEAI0C;AAE1C,uDAAwD;AAKxD,IAAA,aAAI,EAAC,uBAAuB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACtC,MAAM,aAAa,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,+CAA+C,CAAC,CAAC;IACpG,MAAM,kBAAkB,CAAC,aAAa,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,kCAAkC,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACjD,6JAA6J;IAC7J,MAAM,aAAa,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,qDAAqD,CAAC,CAAC;IAC1G,MAAM,kBAAkB,CAAC,aAAa,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,kBAAkB,CAC/B,aAAoC,EACpC,CAA4B,EAC5B,WAAmB;IAEnB,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;KACzC;IAED,2FAA2F;IAC3F,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAElE,MAAM,aAAa,GAAG,IAAA,qCAAmB,EAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrF,2BAA2B,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE1B,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAEzC,2EAA2E;IAC3E,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACxE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAgB;IACnD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QACjD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE;YAChC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,EAAE,sBAAsB,CAAC,CAAC;SAC5F;KACF;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,KAAgB,EAAE,WAAmB;IACjE,MAAM,SAAS,GAAc,MAAM,IAAA,aAAG,EAAC,iDAAoC,EAAE;QAC3E,KAAK,EAAE,IAAI;QACX,WAAW;KACZ,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,QAAQ,EAAE;QACtB,OAAO,MAAM,IAAA,aAAG,EAAC,6CAAgC,EAAE;YACjD,KAAK;YACL,UAAU,EAAE,SAAS,CAAC,YAAY;SACnC,CAAC,CAAC;KACJ;SAAM;QACL,OAAO,MAAM,IAAA,aAAG,EAAC,2CAA8B,EAAE;YAC/C,KAAK;YACL,QAAQ,EAAE,SAAS,CAAC,YAAY;SACjC,CAAC,CAAC;KACJ;AACH,CAAC"}
|
|
@@ -24,5 +24,16 @@ export declare function stabilizeStorageLayout(layout: StorageLayout): {
|
|
|
24
24
|
numberOfBytes?: string | undefined;
|
|
25
25
|
underlying?: string | undefined;
|
|
26
26
|
})[][];
|
|
27
|
+
namespaces: (string | {
|
|
28
|
+
type: string;
|
|
29
|
+
astId?: number | undefined;
|
|
30
|
+
contract: string;
|
|
31
|
+
label: string;
|
|
32
|
+
src: string;
|
|
33
|
+
offset?: number | undefined;
|
|
34
|
+
slot?: string | undefined;
|
|
35
|
+
retypedFrom?: string | undefined;
|
|
36
|
+
renamedFrom?: string | undefined;
|
|
37
|
+
}[])[][] | undefined;
|
|
27
38
|
};
|
|
28
39
|
//# sourceMappingURL=stabilize-layout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stabilize-layout.d.ts","sourceRoot":"","sources":["../../src/utils/stabilize-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa
|
|
1
|
+
{"version":3,"file":"stabilize-layout.d.ts","sourceRoot":"","sources":["../../src/utils/stabilize-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB3D"}
|
|
@@ -13,6 +13,11 @@ function stabilizeStorageLayout(layout) {
|
|
|
13
13
|
: item.members.map(m => ({ ...m, type: (0, type_id_1.stabilizeTypeIdentifier)(m.type) })));
|
|
14
14
|
return [(0, type_id_1.stabilizeTypeIdentifier)(type), { ...item, members }];
|
|
15
15
|
}),
|
|
16
|
+
namespaces: layout.namespaces
|
|
17
|
+
? Object.entries(layout.namespaces).map(([ns, items]) => {
|
|
18
|
+
return [ns, items.map(item => ({ ...item, type: (0, type_id_1.stabilizeTypeIdentifier)(item.type) }))];
|
|
19
|
+
})
|
|
20
|
+
: undefined,
|
|
16
21
|
};
|
|
17
22
|
}
|
|
18
23
|
exports.stabilizeStorageLayout = stabilizeStorageLayout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stabilize-layout.js","sourceRoot":"","sources":["../../src/utils/stabilize-layout.ts"],"names":[],"mappings":";;;AACA,8CAAkD;AAClD,uCAAoD;AAEpD,SAAgB,sBAAsB,CAAC,MAAqB;IAC1D,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAA,iCAAuB,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YACvD,MAAM,OAAO,GACX,IAAI,CAAC,OAAO;gBACZ,CAAC,IAAA,sBAAa,EAAC,IAAI,CAAC,OAAO,CAAC;oBAC1B,CAAC,CAAC,IAAI,CAAC,OAAO;oBACd,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAA,iCAAuB,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,IAAA,iCAAuB,EAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"stabilize-layout.js","sourceRoot":"","sources":["../../src/utils/stabilize-layout.ts"],"names":[],"mappings":";;;AACA,8CAAkD;AAClD,uCAAoD;AAEpD,SAAgB,sBAAsB,CAAC,MAAqB;IAC1D,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAA,iCAAuB,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YACvD,MAAM,OAAO,GACX,IAAI,CAAC,OAAO;gBACZ,CAAC,IAAA,sBAAa,EAAC,IAAI,CAAC,OAAO,CAAC;oBAC1B,CAAC,CAAC,IAAI,CAAC,OAAO;oBACd,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,IAAA,iCAAuB,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,IAAA,iCAAuB,EAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC;QACF,UAAU,EAAE,MAAM,CAAC,UAAU;YAC3B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;gBACpD,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAA,iCAAuB,EAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1F,CAAC,CAAC;YACJ,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAjBD,wDAiBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/validate/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAc,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAiB,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAqB,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,cAAc,EAA2B,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CASvG;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAkB5F;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAqBnH;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,CAItF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/validate/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAc,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAiB,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAqB,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,cAAc,EAA2B,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CASvG;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAkB5F;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAqBnH;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,CAItF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,GAAG,aAAa,CAmBvG;AAED,wBAAiB,iCAAiC,CAChD,IAAI,EAAE,cAAc,EACpB,sBAAsB,EAAE,MAAM,GAC7B,SAAS,CAAC,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAUxC;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkBlF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,iBAAsB,GAAG,eAAe,EAAE,CAoBjH;AA0BD,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAG7E;AAED,wBAAgB,SAAS,CAAC,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAG7F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAQ9F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,kBAAkB,EAAE,kBAAkB,WAExE"}
|
package/dist/validate/query.js
CHANGED
|
@@ -84,10 +84,12 @@ function unfoldStorageLayout(runData, fullContractName) {
|
|
|
84
84
|
solcVersion,
|
|
85
85
|
storage: c.layout.storage,
|
|
86
86
|
types: c.layout.types,
|
|
87
|
+
namespaces: c.layout.namespaces,
|
|
87
88
|
};
|
|
88
89
|
}
|
|
89
90
|
else {
|
|
90
|
-
|
|
91
|
+
// Namespaces are pre-flattened
|
|
92
|
+
const layout = { solcVersion, storage: [], types: {}, namespaces: c.layout.namespaces };
|
|
91
93
|
for (const name of [fullContractName].concat(c.inherit)) {
|
|
92
94
|
layout.storage.unshift(...runData[name].layout.storage);
|
|
93
95
|
Object.assign(layout.types, runData[name].layout.types);
|
|
@@ -165,7 +167,7 @@ function isUpgradeSafe(data, version) {
|
|
|
165
167
|
exports.isUpgradeSafe = isUpgradeSafe;
|
|
166
168
|
function inferUUPS(runValidation, fullContractName) {
|
|
167
169
|
const methods = getAllMethods(runValidation, fullContractName);
|
|
168
|
-
return methods.includes(upgradeToSignature);
|
|
170
|
+
return methods.includes(upgradeToSignature) || methods.includes(upgradeToAndCallSignature);
|
|
169
171
|
}
|
|
170
172
|
exports.inferUUPS = inferUUPS;
|
|
171
173
|
function inferProxyKind(data, version) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/validate/query.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/validate/query.ts"],"names":[],"mappings":"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"}
|