@openzeppelin/upgrades-core 1.30.1 → 1.31.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/dist/cli/cli.test.js +51 -0
- package/dist/cli/cli.test.js.map +1 -1
- package/dist/cli/validate/contract-report.d.ts +1 -1
- package/dist/cli/validate/contract-report.d.ts.map +1 -1
- package/dist/cli/validate/contract-report.js +4 -1
- package/dist/cli/validate/contract-report.js.map +1 -1
- package/dist/cli/validate/project-report.d.ts +3 -2
- package/dist/cli/validate/project-report.d.ts.map +1 -1
- package/dist/cli/validate/project-report.js +12 -6
- package/dist/cli/validate/project-report.js.map +1 -1
- package/dist/cli/validate/project-report.test.js +1 -1
- package/dist/cli/validate/project-report.test.js.map +1 -1
- package/dist/cli/validate/validate-upgrade-safety.d.ts +5 -1
- package/dist/cli/validate/validate-upgrade-safety.d.ts.map +1 -1
- package/dist/cli/validate/validate-upgrade-safety.js +18 -5
- package/dist/cli/validate/validate-upgrade-safety.js.map +1 -1
- package/dist/cli/validate/validate-upgrade-safety.test.js +8 -0
- package/dist/cli/validate/validate-upgrade-safety.test.js.map +1 -1
- package/dist/cli/validate/validations.test.js +2 -1
- package/dist/cli/validate/validations.test.js.map +1 -1
- package/dist/cli/validate.d.ts.map +1 -1
- package/dist/cli/validate.js +15 -6
- package/dist/cli/validate.js.map +1 -1
- package/package.json +2 -2
- package/src/cli/cli.test.ts +76 -0
- package/src/cli/cli.test.ts.md +65 -9
- package/src/cli/cli.test.ts.snap +0 -0
- package/src/cli/validate/contract-report.ts +6 -2
- package/src/cli/validate/project-report.test.ts +1 -1
- package/src/cli/validate/project-report.test.ts.md +1 -1
- package/src/cli/validate/project-report.test.ts.snap +0 -0
- package/src/cli/validate/project-report.ts +18 -8
- package/src/cli/validate/validate-upgrade-safety.test.ts +13 -1
- package/src/cli/validate/validate-upgrade-safety.ts +20 -6
- package/src/cli/validate/validations.test.ts +2 -1
- package/src/cli/validate.ts +15 -6
package/dist/cli/cli.test.js
CHANGED
|
@@ -125,6 +125,50 @@ async function getTempDir(t) {
|
|
|
125
125
|
const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --contract BecomesBadLayout --reference NonExistent`));
|
|
126
126
|
t.true(error?.message.includes('Could not find contract NonExistent.'), error?.message);
|
|
127
127
|
});
|
|
128
|
+
(0, ava_1.default)('validate - requireReference - no contract option', async (t) => {
|
|
129
|
+
const temp = await getTempDir(t);
|
|
130
|
+
const buildInfo = await hardhat_1.artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:StorageV1`);
|
|
131
|
+
await fs_1.promises.writeFile(path_1.default.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
132
|
+
const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --requireReference`));
|
|
133
|
+
t.true(error?.message.includes('The --requireReference option can only be used along with the --contract option.'), error?.message);
|
|
134
|
+
});
|
|
135
|
+
(0, ava_1.default)('validate - requireReference - no reference, no upgradesFrom', async (t) => {
|
|
136
|
+
const temp = await getTempDir(t);
|
|
137
|
+
const buildInfo = await hardhat_1.artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:StorageV1`);
|
|
138
|
+
await fs_1.promises.writeFile(path_1.default.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
139
|
+
const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --contract StorageV1 --requireReference`));
|
|
140
|
+
t.true(error?.message.includes('does not specify what contract it upgrades from'), error?.message);
|
|
141
|
+
});
|
|
142
|
+
(0, ava_1.default)('validate - requireReference - no reference, has upgradesFrom - safe', async (t) => {
|
|
143
|
+
const temp = await getTempDir(t);
|
|
144
|
+
const buildInfo = await hardhat_1.artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:BecomesSafe`);
|
|
145
|
+
await fs_1.promises.writeFile(path_1.default.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
146
|
+
const output = (await execAsync(`${CLI} validate ${temp} --contract BecomesSafe --requireReference`)).stdout;
|
|
147
|
+
t.snapshot(output);
|
|
148
|
+
});
|
|
149
|
+
(0, ava_1.default)('validate - requireReference - no reference, has upgradesFrom - unsafe', async (t) => {
|
|
150
|
+
const temp = await getTempDir(t);
|
|
151
|
+
const buildInfo = await hardhat_1.artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:BecomesBadLayout`);
|
|
152
|
+
await fs_1.promises.writeFile(path_1.default.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
153
|
+
const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --contract BecomesBadLayout --requireReference`));
|
|
154
|
+
const expectation = [`Stdout: ${error.stdout}`, `Stderr: ${error.stderr}`];
|
|
155
|
+
t.snapshot(expectation.join('\n'));
|
|
156
|
+
});
|
|
157
|
+
(0, ava_1.default)('validate - requireReference - has reference - unsafe', async (t) => {
|
|
158
|
+
const temp = await getTempDir(t);
|
|
159
|
+
const buildInfo = await hardhat_1.artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:StorageV2_Bad_NoAnnotation`);
|
|
160
|
+
await fs_1.promises.writeFile(path_1.default.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
161
|
+
const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --contract StorageV2_Bad_NoAnnotation --reference StorageV1 --requireReference`));
|
|
162
|
+
const expectation = [`Stdout: ${error.stdout}`, `Stderr: ${error.stderr}`];
|
|
163
|
+
t.snapshot(expectation.join('\n'));
|
|
164
|
+
});
|
|
165
|
+
(0, ava_1.default)('validate - requireReference - has reference - safe', async (t) => {
|
|
166
|
+
const temp = await getTempDir(t);
|
|
167
|
+
const buildInfo = await hardhat_1.artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:StorageV2_Ok_NoAnnotation`);
|
|
168
|
+
await fs_1.promises.writeFile(path_1.default.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
169
|
+
const output = (await execAsync(`${CLI} validate ${temp} --contract StorageV2_Ok_NoAnnotation --reference StorageV1 --requireReference`)).stdout;
|
|
170
|
+
t.snapshot(output);
|
|
171
|
+
});
|
|
128
172
|
(0, ava_1.default)('validate - no upgradeable', async (t) => {
|
|
129
173
|
const temp = await getTempDir(t);
|
|
130
174
|
const buildInfo = await hardhat_1.artifacts.getBuildInfo(`contracts/test/cli/Storage088.sol:Storage088`);
|
|
@@ -139,4 +183,11 @@ async function getTempDir(t) {
|
|
|
139
183
|
const output = (await execAsync(`${CLI} validate ${temp}`)).stdout;
|
|
140
184
|
t.snapshot(output);
|
|
141
185
|
});
|
|
186
|
+
(0, ava_1.default)('validate - single contract - ok', async (t) => {
|
|
187
|
+
const temp = await getTempDir(t);
|
|
188
|
+
const buildInfo = await hardhat_1.artifacts.getBuildInfo(`contracts/test/cli/Annotation.sol:Annotation`);
|
|
189
|
+
await fs_1.promises.writeFile(path_1.default.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
190
|
+
const output = (await execAsync(`${CLI} validate ${temp} --contract Annotation`)).stdout;
|
|
191
|
+
t.snapshot(output);
|
|
192
|
+
});
|
|
142
193
|
//# sourceMappingURL=cli.test.js.map
|
package/dist/cli/cli.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/cli/cli.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAA6C;AAC7C,+BAAiC;AACjC,iDAAqC;AACrC,2BAAoC;AACpC,gDAAwB;AACxB,4CAAoB;AACpB,mCAAgC;AAChC,qCAAoC;AAEpC,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAElC,MAAM,GAAG,GAAG,sBAAsB,CAAC;AAEnC,KAAK,UAAU,UAAU,CAAC,CAAmB;IAC3C,MAAM,IAAI,GAAG,MAAM,aAAE,CAAC,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,IAAA,aAAI,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACrB,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;IAClE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACxB,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7C,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,mBAAmB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,sCAAsC,CAAC,CAAC;IACvF,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,WAAW,GAAa,CAAC,WAAY,KAAa,CAAC,MAAM,EAAE,EAAE,WAAY,KAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,4BAA4B,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC3C,mHAAmH;IACnH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,gDAAgD,CAAC,CAAC;IACjG,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,4BAA4B,CAAC,CAAC,CAAC;IAClG,MAAM,WAAW,GAAa,CAAC,WAAY,KAAa,CAAC,MAAM,EAAE,EAAE,WAAY,KAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,+CAA+C,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC9D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,8DAA8D,CAAC,CAAC;IAC/G,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,0CAA0C,CAAC,CAAC,CAAC;IAChH,MAAM,WAAW,GAAa,CAAC,WAAY,KAAa,CAAC,MAAM,EAAE,EAAE,WAAY,KAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,+DAA+D,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC9E,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,8DAA8D,CAAC,CAAC;IAC/G,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAC/B,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,2DAA2D,CAAC,CAC9F,CAAC;IACF,MAAM,WAAW,GAAa,CAAC,WAAY,KAAa,CAAC,MAAM,EAAE,EAAE,WAAY,KAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,wEAAwE,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACvF,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,8DAA8D,CAAC,CAAC;IAC/G,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAC/B,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,uDAAuD,CAAC,CAC1F,CAAC;IACF,MAAM,WAAW,GAAa,CAAC,WAAY,KAAa,CAAC,MAAM,EAAE,EAAE,WAAY,KAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,uCAAuC,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACtD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,kDAAkD,CAAC,CAAC;IACnG,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAC/B,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,oDAAoD,CAAC,CACvF,CAAC;IACF,MAAM,WAAW,GAAa,CAAC,WAAY,KAAa,CAAC,MAAM,EAAE,EAAE,WAAY,KAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,8DAA8D,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC7E,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,kDAAkD,CAAC,CAAC;IACnG,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAC/B,SAAS,CACP,GAAG,GAAG,aAAa,IAAI,oHAAoH,CAC5I,CACF,CAAC;IACF,MAAM,WAAW,GAAa,CAAC,WAAY,KAAa,CAAC,MAAM,EAAE,EAAE,WAAY,KAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACvG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,8CAA8C,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC7D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,2CAA2C,CAAC,CAAC;IAC5F,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,wBAAwB,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC,IAAI,CACJ,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,2EAA2E,CAAC,EACpG,KAAK,EAAE,OAAO,CACf,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,kCAAkC,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACjD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,2CAA2C,CAAC,CAAC;IAC5F,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,mCAAmC,CAAC,CAAC,CAAC;IACzG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,4CAA4C,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAChG,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,kCAAkC,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACjD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,2CAA2C,CAAC,CAAC;IAC5F,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,0CAA0C,CAAC,CAAC,CAAC;IAChH,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,4CAA4C,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAChG,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,mCAAmC,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,2CAA2C,CAAC,CAAC;IAC5F,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,mCAAmC,CAAC,CAAC,CAAC;IACzG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,6CAA6C,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACjG,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,sCAAsC,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACrD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,kDAAkD,CAAC,CAAC;IACnG,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,yBAAyB,CAAC,CAAC,CAAC;IAC/F,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,sCAAsC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1F,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,gCAAgC,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC/C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,kDAAkD,CAAC,CAAC;IACnG,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,WAAW,CAC/B,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,sDAAsD,CAAC,CACzF,CAAC;IACF,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,sCAAsC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1F,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,2BAA2B,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC1C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,8CAA8C,CAAC,CAAC;IAC/F,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACnE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,eAAe,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC9B,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,8CAA8C,CAAC,CAAC;IAC/F,MAAM,aAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhF,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,GAAG,GAAG,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACnE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/cli/cli.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,5 +29,5 @@ export declare class UpgradeableContractReport implements Report {
|
|
|
29
29
|
* @param specifiedContracts If provided, only the specified contract (upgrading from its reference contract) will be reported.
|
|
30
30
|
* @returns The upgradeable contract reports.
|
|
31
31
|
*/
|
|
32
|
-
export declare function getContractReports(sourceContracts: SourceContract[], opts: ValidateUpgradeSafetyOptions
|
|
32
|
+
export declare function getContractReports(sourceContracts: SourceContract[], opts: Required<ValidateUpgradeSafetyOptions>, specifiedContracts?: SpecifiedContracts): UpgradeableContractReport[];
|
|
33
33
|
//# sourceMappingURL=contract-report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-report.d.ts","sourceRoot":"","sources":["../../../src/cli/validate/contract-report.ts"],"names":[],"mappings":"AAEA,OAAO,EAOL,4BAA4B,EAE5B,8BAA8B,EAE/B,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,MAAM;IAEpD,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;IACtC,QAAQ,CAAC,gBAAgB,EAAE,8BAA8B;IACzD,QAAQ,CAAC,mBAAmB,EAAE,yBAAyB,GAAG,SAAS;gBAH1D,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,gBAAgB,EAAE,8BAA8B,EAChD,mBAAmB,EAAE,yBAAyB,GAAG,SAAS;IAGrE,IAAI,EAAE,IAAI,OAAO,CAEhB;IAED;;OAEG;IACH,OAAO,CAAC,KAAK,UAAO,GAAG,MAAM;CAiB9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,cAAc,EAAE,EACjC,IAAI,EAAE,4BAA4B,
|
|
1
|
+
{"version":3,"file":"contract-report.d.ts","sourceRoot":"","sources":["../../../src/cli/validate/contract-report.ts"],"names":[],"mappings":"AAEA,OAAO,EAOL,4BAA4B,EAE5B,8BAA8B,EAE/B,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,MAAM;IAEpD,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;IACtC,QAAQ,CAAC,gBAAgB,EAAE,8BAA8B;IACzD,QAAQ,CAAC,mBAAmB,EAAE,yBAAyB,GAAG,SAAS;gBAH1D,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,gBAAgB,EAAE,8BAA8B,EAChD,mBAAmB,EAAE,yBAAyB,GAAG,SAAS;IAGrE,IAAI,EAAE,IAAI,OAAO,CAEhB;IAED;;OAEG;IACH,OAAO,CAAC,KAAK,UAAO,GAAG,MAAM;CAiB9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,cAAc,EAAE,EACjC,IAAI,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC5C,kBAAkB,CAAC,EAAE,kBAAkB,+BA2BxC"}
|
|
@@ -61,7 +61,10 @@ function getContractReports(sourceContracts, opts, specifiedContracts) {
|
|
|
61
61
|
const contractsToReport = specifiedContracts !== undefined ? [specifiedContracts.contract] : sourceContracts;
|
|
62
62
|
for (const sourceContract of contractsToReport) {
|
|
63
63
|
const upgradeabilityAssessment = (0, upgradeability_assessment_1.getUpgradeabilityAssessment)(sourceContract, sourceContracts, specifiedContracts?.reference);
|
|
64
|
-
if (
|
|
64
|
+
if (opts.requireReference && upgradeabilityAssessment.referenceContract === undefined) {
|
|
65
|
+
throw new Error(`The contract ${sourceContract.fullyQualifiedName} does not specify what contract it upgrades from. Add the \`@custom:oz-upgrades-from <REFERENCE_CONTRACT>\` annotation to the contract, or include the reference contract name when running the validate command or function.`);
|
|
66
|
+
}
|
|
67
|
+
else if (specifiedContracts !== undefined || upgradeabilityAssessment.upgradeable) {
|
|
65
68
|
const reference = upgradeabilityAssessment.referenceContract;
|
|
66
69
|
const kind = upgradeabilityAssessment.uups ? 'uups' : 'transparent';
|
|
67
70
|
const report = getUpgradeableContractReport(sourceContract, reference, { ...opts, kind: kind });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-report.js","sourceRoot":"","sources":["../../../src/cli/validate/contract-report.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA2B;AAC3B,8DAAsC;AACtC,6BAWe;AAEf,2EAA0E;AAG1E,+CAA4C;AAG5C;;;GAGG;AACH,MAAa,yBAAyB;IACpC,YACW,QAAgB,EAChB,SAA6B,EAC7B,gBAAgD,EAChD,mBAA0D;QAH1D,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAoB;QAC7B,qBAAgB,GAAhB,gBAAgB,CAAgC;QAChD,wBAAmB,GAAnB,mBAAmB,CAAuC;IAClE,CAAC;IAEJ,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,KAAK,SAAS,IAAI,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAAK,GAAG,IAAI;QAClB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,eAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,eAAM,CAAC,aAAa,CAAC,CAAC,CAAC,eAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7G,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC3C;aAAM;YACL,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,mBAAmB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;SAC7E;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAA,eAAM,EAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC9D;QACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE;YAC1E,MAAM,CAAC,IAAI,CAAC,IAAA,eAAM,EAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACjE;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF;AAhCD,8DAgCC;AAED;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAChC,eAAiC,EACjC,
|
|
1
|
+
{"version":3,"file":"contract-report.js","sourceRoot":"","sources":["../../../src/cli/validate/contract-report.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA2B;AAC3B,8DAAsC;AACtC,6BAWe;AAEf,2EAA0E;AAG1E,+CAA4C;AAG5C;;;GAGG;AACH,MAAa,yBAAyB;IACpC,YACW,QAAgB,EAChB,SAA6B,EAC7B,gBAAgD,EAChD,mBAA0D;QAH1D,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAoB;QAC7B,qBAAgB,GAAhB,gBAAgB,CAAgC;QAChD,wBAAmB,GAAnB,mBAAmB,CAAuC;IAClE,CAAC;IAEJ,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,KAAK,SAAS,IAAI,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,KAAK,GAAG,IAAI;QAClB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,eAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,eAAM,CAAC,aAAa,CAAC,CAAC,CAAC,eAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7G,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC3C;aAAM;YACL,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,mBAAmB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;SAC7E;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAA,eAAM,EAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC9D;QACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE;YAC1E,MAAM,CAAC,IAAI,CAAC,IAAA,eAAM,EAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACjE;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF;AAhCD,8DAgCC;AAED;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAChC,eAAiC,EACjC,IAA4C,EAC5C,kBAAuC;IAEvC,MAAM,0BAA0B,GAAgC,EAAE,CAAC;IAEnE,MAAM,iBAAiB,GACrB,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;IAErF,KAAK,MAAM,cAAc,IAAI,iBAAiB,EAAE;QAC9C,MAAM,wBAAwB,GAAG,IAAA,uDAA2B,EAC1D,cAAc,EACd,eAAe,EACf,kBAAkB,EAAE,SAAS,CAC9B,CAAC;QACF,IAAI,IAAI,CAAC,gBAAgB,IAAI,wBAAwB,CAAC,iBAAiB,KAAK,SAAS,EAAE;YACrF,MAAM,IAAI,KAAK,CACb,gBAAgB,cAAc,CAAC,kBAAkB,+NAA+N,CACjR,CAAC;SACH;aAAM,IAAI,kBAAkB,KAAK,SAAS,IAAI,wBAAwB,CAAC,WAAW,EAAE;YACnF,MAAM,SAAS,GAAG,wBAAwB,CAAC,iBAAiB,CAAC;YAC7D,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;YACpE,MAAM,MAAM,GAAG,4BAA4B,CAAC,cAAc,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAChG,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACzC;SACF;KACF;IACD,OAAO,0BAA0B,CAAC;AACpC,CAAC;AA9BD,gDA8BC;AAED,SAAS,4BAA4B,CACnC,QAAwB,EACxB,iBAA6C,EAC7C,IAAuB;IAEvB,IAAI,OAAO,CAAC;IACZ,IAAI;QACF,OAAO,GAAG,IAAA,sBAAkB,EAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;KACtE;IAAC,OAAO,CAAM,EAAE;QACf,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YACrC,iGAAiG;YACjG,qCAAqC;YACrC,OAAO,SAAS,CAAC;SAClB;aAAM;YACL,MAAM,CAAC,CAAC;SACT;KACF;IAED,IAAA,eAAK,EAAC,YAAY,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAErF,IAAI,SAA6B,CAAC;IAClC,IAAI,mBAA0D,CAAC;IAE/D,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,IAAI,iBAAiB,KAAK,SAAS,EAAE;QAC3E,MAAM,MAAM,GAAG,IAAA,oBAAgB,EAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAElE,MAAM,gBAAgB,GAAG,IAAA,sBAAkB,EAAC,iBAAiB,CAAC,cAAc,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACtG,MAAM,eAAe,GAAG,IAAA,oBAAgB,EAAC,iBAAiB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;QAE7F,SAAS,GAAG,iBAAiB,CAAC,kBAAkB,CAAC;QACjD,mBAAmB,GAAG,IAAA,2BAAuB,EAAC,eAAe,EAAE,MAAM,EAAE,IAAA,0BAAsB,EAAC,IAAI,CAAC,CAAC,CAAC;KACtG;IAED,OAAO,IAAI,yBAAyB,CAAC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;AACtH,CAAC;AAED,SAAS,mBAAmB,CAC1B,IAAoB,EACpB,OAAgB,EAChB,IAAuB;IAEvB,MAAM,MAAM,GAAG,IAAA,aAAS,EAAC,IAAI,EAAE,OAAO,EAAE,IAAA,0BAAsB,EAAC,IAAI,CAAC,CAAC,CAAC;IACtE,OAAO,IAAI,kCAA8B,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -2,7 +2,8 @@ import { UpgradeableContractReport } from './contract-report';
|
|
|
2
2
|
import { Report } from '../../standalone';
|
|
3
3
|
export declare class ProjectReport implements Report {
|
|
4
4
|
readonly upgradeableContractReports: UpgradeableContractReport[];
|
|
5
|
-
|
|
5
|
+
readonly specifiedContract?: boolean | undefined;
|
|
6
|
+
constructor(upgradeableContractReports: UpgradeableContractReport[], specifiedContract?: boolean | undefined);
|
|
6
7
|
get ok(): boolean;
|
|
7
8
|
explain(color?: boolean): string;
|
|
8
9
|
/**
|
|
@@ -14,5 +15,5 @@ export declare class ProjectReport implements Report {
|
|
|
14
15
|
*/
|
|
15
16
|
get numTotal(): number;
|
|
16
17
|
}
|
|
17
|
-
export declare function getProjectReport(upgradeableContractReports: UpgradeableContractReport[]): ProjectReport;
|
|
18
|
+
export declare function getProjectReport(upgradeableContractReports: UpgradeableContractReport[], specifiedContract?: boolean): ProjectReport;
|
|
18
19
|
//# sourceMappingURL=project-report.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-report.d.ts","sourceRoot":"","sources":["../../../src/cli/validate/project-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,qBAAa,aAAc,YAAW,MAAM;
|
|
1
|
+
{"version":3,"file":"project-report.d.ts","sourceRoot":"","sources":["../../../src/cli/validate/project-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,qBAAa,aAAc,YAAW,MAAM;IAExC,QAAQ,CAAC,0BAA0B,EAAE,yBAAyB,EAAE;IAChE,QAAQ,CAAC,iBAAiB,CAAC;gBADlB,0BAA0B,EAAE,yBAAyB,EAAE,EACvD,iBAAiB,CAAC,qBAAS;IAGtC,IAAI,EAAE,IAAI,OAAO,CAEhB;IAED,OAAO,CAAC,KAAK,UAAO,GAAG,MAAM;IAoB7B;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;CACF;AAED,wBAAgB,gBAAgB,CAC9B,0BAA0B,EAAE,yBAAyB,EAAE,EACvD,iBAAiB,CAAC,EAAE,OAAO,GAC1B,aAAa,CAEf"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getProjectReport = exports.ProjectReport = void 0;
|
|
4
4
|
class ProjectReport {
|
|
5
|
-
constructor(upgradeableContractReports) {
|
|
5
|
+
constructor(upgradeableContractReports, specifiedContract) {
|
|
6
6
|
this.upgradeableContractReports = upgradeableContractReports;
|
|
7
|
+
this.specifiedContract = specifiedContract;
|
|
7
8
|
}
|
|
8
9
|
get ok() {
|
|
9
10
|
return this.upgradeableContractReports.every(r => r.ok);
|
|
@@ -14,10 +15,15 @@ class ProjectReport {
|
|
|
14
15
|
}
|
|
15
16
|
else {
|
|
16
17
|
const lines = this.upgradeableContractReports.map(r => r.explain(color));
|
|
17
|
-
const numFailed = this.numTotal - this.numPassed;
|
|
18
|
-
const plural = numFailed === 1 ? '' : 's';
|
|
19
18
|
const status = this.ok ? 'SUCCESS' : 'FAILED';
|
|
20
|
-
|
|
19
|
+
if (this.specifiedContract) {
|
|
20
|
+
lines.push(`${status}`);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const numFailed = this.numTotal - this.numPassed;
|
|
24
|
+
const plural = this.numTotal === 1 ? '' : 's';
|
|
25
|
+
lines.push(`${status} (${this.numTotal} upgradeable contract${plural} detected, ${this.numPassed} passed, ${numFailed} failed)`);
|
|
26
|
+
}
|
|
21
27
|
return lines.join('\n\n');
|
|
22
28
|
}
|
|
23
29
|
}
|
|
@@ -35,8 +41,8 @@ class ProjectReport {
|
|
|
35
41
|
}
|
|
36
42
|
}
|
|
37
43
|
exports.ProjectReport = ProjectReport;
|
|
38
|
-
function getProjectReport(upgradeableContractReports) {
|
|
39
|
-
return new ProjectReport(upgradeableContractReports);
|
|
44
|
+
function getProjectReport(upgradeableContractReports, specifiedContract) {
|
|
45
|
+
return new ProjectReport(upgradeableContractReports, specifiedContract);
|
|
40
46
|
}
|
|
41
47
|
exports.getProjectReport = getProjectReport;
|
|
42
48
|
//# sourceMappingURL=project-report.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-report.js","sourceRoot":"","sources":["../../../src/cli/validate/project-report.ts"],"names":[],"mappings":";;;AAGA,MAAa,aAAa;IACxB,
|
|
1
|
+
{"version":3,"file":"project-report.js","sourceRoot":"","sources":["../../../src/cli/validate/project-report.ts"],"names":[],"mappings":";;;AAGA,MAAa,aAAa;IACxB,YACW,0BAAuD,EACvD,iBAA2B;QAD3B,+BAA0B,GAA1B,0BAA0B,CAA6B;QACvD,sBAAiB,GAAjB,iBAAiB,CAAU;IACnC,CAAC;IAEJ,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,KAAK,GAAG,IAAI;QAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;YACvB,OAAO,oCAAoC,CAAC;SAC7C;aAAM;YACL,MAAM,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;YAE9C,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;aACzB;iBAAM;gBACL,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;gBACjD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC9C,KAAK,CAAC,IAAI,CACR,GAAG,MAAM,KAAK,IAAI,CAAC,QAAQ,wBAAwB,MAAM,cAAc,IAAI,CAAC,SAAS,YAAY,SAAS,UAAU,CACrH,CAAC;aACH;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC3B;IACH,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC;IAChD,CAAC;CACF;AA3CD,sCA2CC;AAED,SAAgB,gBAAgB,CAC9B,0BAAuD,EACvD,iBAA2B;IAE3B,OAAO,IAAI,aAAa,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;AAC1E,CAAC;AALD,4CAKC"}
|
|
@@ -47,7 +47,7 @@ test('get project report - ok - console', async (t) => {
|
|
|
47
47
|
t.true(report.ok);
|
|
48
48
|
t.is(report.numPassed, 1);
|
|
49
49
|
t.is(report.numTotal, 1);
|
|
50
|
-
t.regex(report.explain(), /SUCCESS \(1 upgradeable
|
|
50
|
+
t.regex(report.explain(), /SUCCESS \(1 upgradeable contract detected, 1 passed, 0 failed\)/);
|
|
51
51
|
});
|
|
52
52
|
test('get project report - errors - console', async (t) => {
|
|
53
53
|
const v1 = t.context.extractStorageLayout('StorageUpgrade_Replace_V1');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-report.test.js","sourceRoot":"","sources":["../../../src/cli/validate/project-report.test.ts"],"names":[],"mappings":";;;;;AAAA,qDAAoD;AACpD,6CAAgE;AAEhE,8CAAoC;AAEpC,8CAA8D;AAC9D,qCAAoC;AAGpC,mDAA6D;AAC7D,mDAAgE;AAChE,iDAAwE;AACxE,uDAA8D;AAM9D,MAAM,IAAI,GAAG,aAAwB,CAAC;AAEtC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC;AAE1C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;IACpB,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,qCAAqC,CAAC,CAAC;IACtF,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,KAAK,MAAM,GAAG,IAAI,IAAA,eAAO,EAAC,oBAAoB,EAAE,UAAU,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,EAAE;QACrG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;KAC3B;IACD,MAAM,KAAK,GAAG,IAAA,uBAAe,EAAC,UAAU,CAAC,CAAC;IAC1C,CAAC,CAAC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,CAAC,IAAA,8BAAoB,EAAC,SAAS,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AACxG,CAAC,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,QAAuB,EAAE,OAAsB;IACtE,MAAM,gBAAgB,GAAG,IAAA,0BAAiB,EAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,IAAA,0BAAiB,EAAC,OAAO,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,iCAAuB,EAAE,CAAC;IACjD,OAAO,UAAU,CAAC,cAAc,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AACtE,CAAC;AAED,IAAI,CAAC,0CAA0C,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACzD,MAAM,MAAM,GAAG,IAAA,iCAAgB,EAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,oCAAoC,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClD,MAAM,MAAM,GAAG,IAAA,iCAAgB,EAAC;QAC9B,IAAI,2CAAyB,CAC3B,mCAAmC,EACnC,SAAS,EACT,IAAI,yCAA8B,CAAC,EAAE,CAAC,EACtC,SAAS,CACV;KACF,CAAC,CAAC;IAEH,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"project-report.test.js","sourceRoot":"","sources":["../../../src/cli/validate/project-report.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,9 @@ import { SourceContract } from './validations';
|
|
|
4
4
|
/**
|
|
5
5
|
* Validation options for upgrade safety checks.
|
|
6
6
|
*/
|
|
7
|
-
export type ValidateUpgradeSafetyOptions = Omit<ValidationOptions, 'kind'
|
|
7
|
+
export type ValidateUpgradeSafetyOptions = Omit<ValidationOptions, 'kind'> & {
|
|
8
|
+
requireReference?: boolean;
|
|
9
|
+
};
|
|
8
10
|
export type SpecifiedContracts = {
|
|
9
11
|
contract: SourceContract;
|
|
10
12
|
reference?: SourceContract;
|
|
@@ -20,4 +22,6 @@ export type SpecifiedContracts = {
|
|
|
20
22
|
* @returns The project report.
|
|
21
23
|
*/
|
|
22
24
|
export declare function validateUpgradeSafety(buildInfoDir?: string, contract?: string, reference?: string, opts?: ValidateUpgradeSafetyOptions): Promise<ProjectReport>;
|
|
25
|
+
export declare function findSpecifiedContracts(sourceContracts: SourceContract[], opts: Required<ValidateUpgradeSafetyOptions>, contractName?: string, referenceName?: string): SpecifiedContracts | undefined;
|
|
26
|
+
export declare function withCliDefaults(opts: ValidateUpgradeSafetyOptions): Required<ValidateUpgradeSafetyOptions>;
|
|
23
27
|
//# sourceMappingURL=validate-upgrade-safety.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-upgrade-safety.d.ts","sourceRoot":"","sources":["../../../src/cli/validate/validate-upgrade-safety.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"validate-upgrade-safety.d.ts","sourceRoot":"","sources":["../../../src/cli/validate/validate-upgrade-safety.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,OAAO,CAAC;AAKlE,OAAO,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,cAAc,EAA8B,MAAM,eAAe,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG;IAC3E,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,GAAE,4BAAiC,GACtC,OAAO,CAAC,aAAa,CAAC,CAUxB;AAED,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,cAAc,EAAE,EACjC,IAAI,EAAE,QAAQ,CAAC,4BAA4B,CAAC,EAC5C,YAAY,CAAC,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,kBAAkB,GAAG,SAAS,CAahC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,4BAA4B,GAAG,QAAQ,CAAC,4BAA4B,CAAC,CAK1G"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateUpgradeSafety = void 0;
|
|
3
|
+
exports.withCliDefaults = exports.findSpecifiedContracts = exports.validateUpgradeSafety = void 0;
|
|
4
|
+
const __1 = require("../..");
|
|
4
5
|
const build_info_file_1 = require("./build-info-file");
|
|
5
6
|
const contract_report_1 = require("./contract-report");
|
|
6
7
|
const find_contract_1 = require("./find-contract");
|
|
@@ -17,14 +18,15 @@ const validations_1 = require("./validations");
|
|
|
17
18
|
* @returns The project report.
|
|
18
19
|
*/
|
|
19
20
|
async function validateUpgradeSafety(buildInfoDir, contract, reference, opts = {}) {
|
|
21
|
+
const allOpts = withCliDefaults(opts);
|
|
20
22
|
const buildInfoFiles = await (0, build_info_file_1.getBuildInfoFiles)(buildInfoDir);
|
|
21
23
|
const sourceContracts = (0, validations_1.validateBuildInfoContracts)(buildInfoFiles);
|
|
22
|
-
const specifiedContracts = findSpecifiedContracts(sourceContracts, contract, reference);
|
|
23
|
-
const contractReports = (0, contract_report_1.getContractReports)(sourceContracts,
|
|
24
|
-
return (0, project_report_1.getProjectReport)(contractReports);
|
|
24
|
+
const specifiedContracts = findSpecifiedContracts(sourceContracts, allOpts, contract, reference);
|
|
25
|
+
const contractReports = (0, contract_report_1.getContractReports)(sourceContracts, allOpts, specifiedContracts);
|
|
26
|
+
return (0, project_report_1.getProjectReport)(contractReports, specifiedContracts !== undefined);
|
|
25
27
|
}
|
|
26
28
|
exports.validateUpgradeSafety = validateUpgradeSafety;
|
|
27
|
-
function findSpecifiedContracts(sourceContracts, contractName, referenceName) {
|
|
29
|
+
function findSpecifiedContracts(sourceContracts, opts, contractName, referenceName) {
|
|
28
30
|
if (contractName !== undefined) {
|
|
29
31
|
return {
|
|
30
32
|
contract: (0, find_contract_1.findContract)(contractName, undefined, sourceContracts),
|
|
@@ -34,8 +36,19 @@ function findSpecifiedContracts(sourceContracts, contractName, referenceName) {
|
|
|
34
36
|
else if (referenceName !== undefined) {
|
|
35
37
|
throw new Error(`The reference option can only be specified when the contract option is also specified.`);
|
|
36
38
|
}
|
|
39
|
+
else if (opts.requireReference) {
|
|
40
|
+
throw new Error(`The requireReference option can only be specified when the contract option is also specified.`);
|
|
41
|
+
}
|
|
37
42
|
else {
|
|
38
43
|
return undefined;
|
|
39
44
|
}
|
|
40
45
|
}
|
|
46
|
+
exports.findSpecifiedContracts = findSpecifiedContracts;
|
|
47
|
+
function withCliDefaults(opts) {
|
|
48
|
+
return {
|
|
49
|
+
...(0, __1.withValidationDefaults)(opts),
|
|
50
|
+
requireReference: opts.requireReference ?? false,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
exports.withCliDefaults = withCliDefaults;
|
|
41
54
|
//# sourceMappingURL=validate-upgrade-safety.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-upgrade-safety.js","sourceRoot":"","sources":["../../../src/cli/validate/validate-upgrade-safety.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"validate-upgrade-safety.js","sourceRoot":"","sources":["../../../src/cli/validate/validate-upgrade-safety.ts"],"names":[],"mappings":";;;AAAA,6BAAkE;AAElE,uDAAsD;AACtD,uDAAuD;AACvD,mDAA+C;AAC/C,qDAAmE;AACnE,+CAA2E;AAc3E;;;;;;;;;GASG;AACI,KAAK,UAAU,qBAAqB,CACzC,YAAqB,EACrB,QAAiB,EACjB,SAAkB,EAClB,OAAqC,EAAE;IAEvC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,cAAc,GAAG,MAAM,IAAA,mCAAiB,EAAC,YAAY,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,IAAA,wCAA0B,EAAC,cAAc,CAAC,CAAC;IAEnE,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEjG,MAAM,eAAe,GAAG,IAAA,oCAAkB,EAAC,eAAe,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;IACzF,OAAO,IAAA,iCAAgB,EAAC,eAAe,EAAE,kBAAkB,KAAK,SAAS,CAAC,CAAC;AAC7E,CAAC;AAfD,sDAeC;AAED,SAAgB,sBAAsB,CACpC,eAAiC,EACjC,IAA4C,EAC5C,YAAqB,EACrB,aAAsB;IAEtB,IAAI,YAAY,KAAK,SAAS,EAAE;QAC9B,OAAO;YACL,QAAQ,EAAE,IAAA,4BAAY,EAAC,YAAY,EAAE,SAAS,EAAE,eAAe,CAAC;YAChE,SAAS,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,4BAAY,EAAC,aAAa,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;SAC7G,CAAC;KACH;SAAM,IAAI,aAAa,KAAK,SAAS,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;KAC3G;SAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;KAClH;SAAM;QACL,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAlBD,wDAkBC;AAED,SAAgB,eAAe,CAAC,IAAkC;IAChE,OAAO;QACL,GAAG,IAAA,0BAAsB,EAAC,IAAI,CAAC;QAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,IAAI,KAAK;KACjD,CAAC;AACJ,CAAC;AALD,0CAKC"}
|
|
@@ -69,4 +69,12 @@ ava_1.default.after(async () => {
|
|
|
69
69
|
t.true(error?.message.includes(`Invalid number of arguments for @custom:oz-upgrades annotation in contract ${fullyQualifiedName}.`));
|
|
70
70
|
t.true(error?.message.includes('Found 1, expected 0'));
|
|
71
71
|
});
|
|
72
|
+
(0, ava_1.default)('findSpecifiedContracts - requireReference option without contract', async (t) => {
|
|
73
|
+
try {
|
|
74
|
+
(0, validate_upgrade_safety_1.findSpecifiedContracts)([], (0, validate_upgrade_safety_1.withCliDefaults)({ requireReference: true }));
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
t.true(e.message.includes('The requireReference option can only be specified when the contract option is also specified.'));
|
|
78
|
+
}
|
|
79
|
+
});
|
|
72
80
|
//# sourceMappingURL=validate-upgrade-safety.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-upgrade-safety.test.js","sourceRoot":"","sources":["../../../src/cli/validate/validate-upgrade-safety.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAAuB;AAEvB,2BAAoC;AACpC,mCAAgC;AAChC,gDAAwB;AACxB,4CAAoB;AAEpB,qCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"validate-upgrade-safety.test.js","sourceRoot":"","sources":["../../../src/cli/validate/validate-upgrade-safety.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ const ava_1 = __importDefault(require("ava"));
|
|
|
7
7
|
const hardhat_1 = require("hardhat");
|
|
8
8
|
const validations_1 = require("./validations");
|
|
9
9
|
const contract_report_1 = require("./contract-report");
|
|
10
|
+
const validate_upgrade_safety_1 = require("./validate-upgrade-safety");
|
|
10
11
|
const test = ava_1.default;
|
|
11
12
|
const SOURCE_FILE = 'contracts/test/cli/Validate.sol';
|
|
12
13
|
test.before(async (t) => {
|
|
@@ -16,7 +17,7 @@ test.before(async (t) => {
|
|
|
16
17
|
}
|
|
17
18
|
else {
|
|
18
19
|
const sourceContracts = (0, validations_1.validateBuildInfoContracts)([buildInfo]);
|
|
19
|
-
t.context.reports = (0, contract_report_1.getContractReports)(sourceContracts, {});
|
|
20
|
+
t.context.reports = (0, contract_report_1.getContractReports)(sourceContracts, (0, validate_upgrade_safety_1.withCliDefaults)({}));
|
|
20
21
|
}
|
|
21
22
|
});
|
|
22
23
|
function getReport(t, contractName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validations.test.js","sourceRoot":"","sources":["../../../src/cli/validate/validations.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AAEtD,qCAAoC;AACpC,+CAA2D;AAC3D,uDAAkF;
|
|
1
|
+
{"version":3,"file":"validations.test.js","sourceRoot":"","sources":["../../../src/cli/validate/validations.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,4BAA4B,EAAyB,MAAM,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,4BAA4B,EAAyB,MAAM,GAAG,CAAC;AAsBxE,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxD;AA8BD,UAAU,YAAY;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC,4BAA4B,CAAC,CAAC;CAC9C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAsBlG;AAmDD,wBAAgB,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,4BAA4B,CAAC,CAapG"}
|
package/dist/cli/validate.js
CHANGED
|
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.withDefaults = exports.getFunctionArgs = exports.main = void 0;
|
|
7
7
|
const minimist_1 = __importDefault(require("minimist"));
|
|
8
8
|
const _1 = require(".");
|
|
9
|
-
const __1 = require("..");
|
|
10
9
|
const run_1 = require("../validate/run");
|
|
11
10
|
const debug_1 = __importDefault(require("../utils/debug"));
|
|
11
|
+
const validate_upgrade_safety_1 = require("./validate/validate-upgrade-safety");
|
|
12
12
|
const USAGE = 'Usage: npx @openzeppelin/upgrades-core validate [<BUILD_INFO_DIR>] [<OPTIONS>]';
|
|
13
13
|
const DETAILS = `
|
|
14
14
|
Detects upgradeable contracts from a build info directory and validates whether they are upgrade safe.
|
|
@@ -18,7 +18,8 @@ Arguments:
|
|
|
18
18
|
|
|
19
19
|
Options:
|
|
20
20
|
--contract <CONTRACT> The name or fully qualified name of the contract to validate. If not specified, all upgradeable contracts in the build info directory will be validated.
|
|
21
|
-
--reference <REFERENCE_CONTRACT> The name or fully qualified name of the reference contract to use for storage layout comparisons.
|
|
21
|
+
--reference <REFERENCE_CONTRACT> Can only be used when the --contract option is also provided. The name or fully qualified name of the reference contract to use for storage layout comparisons. If not specified, uses the @custom:oz-upgrades-from annotation if it is defined in the contract that is being validated.
|
|
22
|
+
--requireReference Can only be used when the --contract option is also provided. If specified, requires either the --reference option to be provided or the contract to have a @custom:oz-upgrades-from annotation.
|
|
22
23
|
--unsafeAllow "<VALIDATION_ERRORS>" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: ${run_1.errorKinds.join(', ')}
|
|
23
24
|
--unsafeAllowRenames Configure storage layout check to allow variable renaming.
|
|
24
25
|
--unsafeSkipStorageCheck Skips checking for storage layout compatibility errors. This is a dangerous option meant to be used as a last resort.`;
|
|
@@ -40,6 +41,7 @@ function parseArgs(args) {
|
|
|
40
41
|
'unsafeSkipStorageCheck',
|
|
41
42
|
'unsafeAllowCustomTypes',
|
|
42
43
|
'unsafeAllowLinkedLibraries',
|
|
44
|
+
'requireReference',
|
|
43
45
|
],
|
|
44
46
|
string: ['unsafeAllow', 'contract', 'reference'],
|
|
45
47
|
alias: { h: 'help' },
|
|
@@ -77,10 +79,15 @@ function getFunctionArgs(parsedArgs, extraArgs) {
|
|
|
77
79
|
const buildInfoDir = extraArgs.length === 1 ? undefined : extraArgs[1];
|
|
78
80
|
const contract = getAndValidateString(parsedArgs, 'contract');
|
|
79
81
|
const reference = getAndValidateString(parsedArgs, 'reference');
|
|
80
|
-
if (reference !== undefined && contract === undefined) {
|
|
81
|
-
throw new Error('The --reference option can only be used along with the --contract option.');
|
|
82
|
-
}
|
|
83
82
|
const opts = withDefaults(parsedArgs);
|
|
83
|
+
if (contract === undefined) {
|
|
84
|
+
if (reference !== undefined) {
|
|
85
|
+
throw new Error('The --reference option can only be used along with the --contract option.');
|
|
86
|
+
}
|
|
87
|
+
else if (opts.requireReference) {
|
|
88
|
+
throw new Error('The --requireReference option can only be used along with the --contract option.');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
84
91
|
return { buildInfoDir, contract, reference, opts };
|
|
85
92
|
}
|
|
86
93
|
}
|
|
@@ -104,6 +111,7 @@ function validateOptions(parsedArgs) {
|
|
|
104
111
|
'unsafeAllow',
|
|
105
112
|
'contract',
|
|
106
113
|
'reference',
|
|
114
|
+
'requireReference',
|
|
107
115
|
].includes(key));
|
|
108
116
|
if (invalidArgs.length > 0) {
|
|
109
117
|
throw new Error(`Invalid options: ${invalidArgs.join(', ')}`);
|
|
@@ -128,8 +136,9 @@ function withDefaults(parsedArgs) {
|
|
|
128
136
|
unsafeAllowCustomTypes: parsedArgs['unsafeAllowCustomTypes'],
|
|
129
137
|
unsafeAllowLinkedLibraries: parsedArgs['unsafeAllowLinkedLibraries'],
|
|
130
138
|
unsafeAllow: getUnsafeAllowKinds(parsedArgs['unsafeAllow']),
|
|
139
|
+
requireReference: parsedArgs['requireReference'],
|
|
131
140
|
};
|
|
132
|
-
return (0,
|
|
141
|
+
return (0, validate_upgrade_safety_1.withCliDefaults)(allOpts);
|
|
133
142
|
}
|
|
134
143
|
exports.withDefaults = withDefaults;
|
|
135
144
|
//# sourceMappingURL=validate.js.map
|
package/dist/cli/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAEhC,wBAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openzeppelin/upgrades-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.31.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": "https://github.com/OpenZeppelin/openzeppelin-upgrades/tree/master/packages/core",
|
|
6
6
|
"license": "MIT",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"proper-lockfile": "^4.1.1",
|
|
65
65
|
"solidity-ast": "^0.4.51"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "db0baed15bdd9f1624feefe7b6b5e875afa62337"
|
|
68
68
|
}
|
package/src/cli/cli.test.ts
CHANGED
|
@@ -167,6 +167,73 @@ test('validate - reference not found', async t => {
|
|
|
167
167
|
t.true(error?.message.includes('Could not find contract NonExistent.'), error?.message);
|
|
168
168
|
});
|
|
169
169
|
|
|
170
|
+
test('validate - requireReference - no contract option', async t => {
|
|
171
|
+
const temp = await getTempDir(t);
|
|
172
|
+
const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:StorageV1`);
|
|
173
|
+
await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
174
|
+
|
|
175
|
+
const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --requireReference`));
|
|
176
|
+
t.true(
|
|
177
|
+
error?.message.includes('The --requireReference option can only be used along with the --contract option.'),
|
|
178
|
+
error?.message,
|
|
179
|
+
);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
test('validate - requireReference - no reference, no upgradesFrom', async t => {
|
|
183
|
+
const temp = await getTempDir(t);
|
|
184
|
+
const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:StorageV1`);
|
|
185
|
+
await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
186
|
+
|
|
187
|
+
const error = await t.throwsAsync(execAsync(`${CLI} validate ${temp} --contract StorageV1 --requireReference`));
|
|
188
|
+
t.true(error?.message.includes('does not specify what contract it upgrades from'), error?.message);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
test('validate - requireReference - no reference, has upgradesFrom - safe', async t => {
|
|
192
|
+
const temp = await getTempDir(t);
|
|
193
|
+
const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:BecomesSafe`);
|
|
194
|
+
await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
195
|
+
|
|
196
|
+
const output = (await execAsync(`${CLI} validate ${temp} --contract BecomesSafe --requireReference`)).stdout;
|
|
197
|
+
t.snapshot(output);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
test('validate - requireReference - no reference, has upgradesFrom - unsafe', async t => {
|
|
201
|
+
const temp = await getTempDir(t);
|
|
202
|
+
const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:BecomesBadLayout`);
|
|
203
|
+
await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
204
|
+
|
|
205
|
+
const error = await t.throwsAsync(
|
|
206
|
+
execAsync(`${CLI} validate ${temp} --contract BecomesBadLayout --requireReference`),
|
|
207
|
+
);
|
|
208
|
+
const expectation: string[] = [`Stdout: ${(error as any).stdout}`, `Stderr: ${(error as any).stderr}`];
|
|
209
|
+
t.snapshot(expectation.join('\n'));
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
test('validate - requireReference - has reference - unsafe', async t => {
|
|
213
|
+
const temp = await getTempDir(t);
|
|
214
|
+
const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:StorageV2_Bad_NoAnnotation`);
|
|
215
|
+
await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
216
|
+
|
|
217
|
+
const error = await t.throwsAsync(
|
|
218
|
+
execAsync(`${CLI} validate ${temp} --contract StorageV2_Bad_NoAnnotation --reference StorageV1 --requireReference`),
|
|
219
|
+
);
|
|
220
|
+
const expectation: string[] = [`Stdout: ${(error as any).stdout}`, `Stderr: ${(error as any).stderr}`];
|
|
221
|
+
t.snapshot(expectation.join('\n'));
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
test('validate - requireReference - has reference - safe', async t => {
|
|
225
|
+
const temp = await getTempDir(t);
|
|
226
|
+
const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/Validate.sol:StorageV2_Ok_NoAnnotation`);
|
|
227
|
+
await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
228
|
+
|
|
229
|
+
const output = (
|
|
230
|
+
await execAsync(
|
|
231
|
+
`${CLI} validate ${temp} --contract StorageV2_Ok_NoAnnotation --reference StorageV1 --requireReference`,
|
|
232
|
+
)
|
|
233
|
+
).stdout;
|
|
234
|
+
t.snapshot(output);
|
|
235
|
+
});
|
|
236
|
+
|
|
170
237
|
test('validate - no upgradeable', async t => {
|
|
171
238
|
const temp = await getTempDir(t);
|
|
172
239
|
const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/Storage088.sol:Storage088`);
|
|
@@ -184,3 +251,12 @@ test('validate - ok', async t => {
|
|
|
184
251
|
const output = (await execAsync(`${CLI} validate ${temp}`)).stdout;
|
|
185
252
|
t.snapshot(output);
|
|
186
253
|
});
|
|
254
|
+
|
|
255
|
+
test('validate - single contract - ok', async t => {
|
|
256
|
+
const temp = await getTempDir(t);
|
|
257
|
+
const buildInfo = await artifacts.getBuildInfo(`contracts/test/cli/Annotation.sol:Annotation`);
|
|
258
|
+
await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo));
|
|
259
|
+
|
|
260
|
+
const output = (await execAsync(`${CLI} validate ${temp} --contract Annotation`)).stdout;
|
|
261
|
+
t.snapshot(output);
|
|
262
|
+
});
|
package/src/cli/cli.test.ts.md
CHANGED
|
@@ -17,7 +17,8 @@ Generated by [AVA](https://avajs.dev).
|
|
|
17
17
|
␊
|
|
18
18
|
Options:␊
|
|
19
19
|
--contract <CONTRACT> The name or fully qualified name of the contract to validate. If not specified, all upgradeable contracts in the build info directory will be validated.␊
|
|
20
|
-
--reference <REFERENCE_CONTRACT> The name or fully qualified name of the reference contract to use for storage layout comparisons.
|
|
20
|
+
--reference <REFERENCE_CONTRACT> Can only be used when the --contract option is also provided. The name or fully qualified name of the reference contract to use for storage layout comparisons. If not specified, uses the @custom:oz-upgrades-from annotation if it is defined in the contract that is being validated.␊
|
|
21
|
+
--requireReference Can only be used when the --contract option is also provided. If specified, requires either the --reference option to be provided or the contract to have a @custom:oz-upgrades-from annotation.␊
|
|
21
22
|
--unsafeAllow "<VALIDATION_ERRORS>" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: state-variable-assignment, state-variable-immutable, external-library-linking, struct-definition, enum-definition, constructor, delegatecall, selfdestruct, missing-public-upgradeto␊
|
|
22
23
|
--unsafeAllowRenames Configure storage layout check to allow variable renaming.␊
|
|
23
24
|
--unsafeSkipStorageCheck Skips checking for storage layout compatibility errors. This is a dangerous option meant to be used as a last resort.␊
|
|
@@ -36,7 +37,8 @@ Generated by [AVA](https://avajs.dev).
|
|
|
36
37
|
␊
|
|
37
38
|
Options:␊
|
|
38
39
|
--contract <CONTRACT> The name or fully qualified name of the contract to validate. If not specified, all upgradeable contracts in the build info directory will be validated.␊
|
|
39
|
-
--reference <REFERENCE_CONTRACT> The name or fully qualified name of the reference contract to use for storage layout comparisons.
|
|
40
|
+
--reference <REFERENCE_CONTRACT> Can only be used when the --contract option is also provided. The name or fully qualified name of the reference contract to use for storage layout comparisons. If not specified, uses the @custom:oz-upgrades-from annotation if it is defined in the contract that is being validated.␊
|
|
41
|
+
--requireReference Can only be used when the --contract option is also provided. If specified, requires either the --reference option to be provided or the contract to have a @custom:oz-upgrades-from annotation.␊
|
|
40
42
|
--unsafeAllow "<VALIDATION_ERRORS>" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: state-variable-assignment, state-variable-immutable, external-library-linking, struct-definition, enum-definition, constructor, delegatecall, selfdestruct, missing-public-upgradeto␊
|
|
41
43
|
--unsafeAllowRenames Configure storage layout check to allow variable renaming.␊
|
|
42
44
|
--unsafeSkipStorageCheck Skips checking for storage layout compatibility errors. This is a dangerous option meant to be used as a last resort.␊
|
|
@@ -134,7 +136,7 @@ Generated by [AVA](https://avajs.dev).
|
|
|
134
136
|
contracts/test/cli/Validate.sol:14: Use of selfdestruct is not allowed␊
|
|
135
137
|
https://zpl.in/upgrades/error-003␊
|
|
136
138
|
␊
|
|
137
|
-
FAILED
|
|
139
|
+
FAILED␊
|
|
138
140
|
␊
|
|
139
141
|
Stderr: `
|
|
140
142
|
|
|
@@ -151,7 +153,7 @@ Generated by [AVA](https://avajs.dev).
|
|
|
151
153
|
- Slot changed from 1 to 2␊
|
|
152
154
|
> Set __gap array to size 48␊
|
|
153
155
|
␊
|
|
154
|
-
FAILED
|
|
156
|
+
FAILED␊
|
|
155
157
|
␊
|
|
156
158
|
Stderr: `
|
|
157
159
|
|
|
@@ -164,7 +166,7 @@ Generated by [AVA](https://avajs.dev).
|
|
|
164
166
|
contracts/test/cli/Validate.sol:97: Use of selfdestruct is not allowed␊
|
|
165
167
|
https://zpl.in/upgrades/error-003␊
|
|
166
168
|
␊
|
|
167
|
-
FAILED
|
|
169
|
+
FAILED␊
|
|
168
170
|
␊
|
|
169
171
|
Stderr: `
|
|
170
172
|
|
|
@@ -179,7 +181,7 @@ Generated by [AVA](https://avajs.dev).
|
|
|
179
181
|
@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol␊
|
|
180
182
|
https://zpl.in/upgrades/error-008␊
|
|
181
183
|
␊
|
|
182
|
-
FAILED
|
|
184
|
+
FAILED␊
|
|
183
185
|
␊
|
|
184
186
|
Stderr: `
|
|
185
187
|
|
|
@@ -195,7 +197,7 @@ Generated by [AVA](https://avajs.dev).
|
|
|
195
197
|
StorageV1: Deleted \`__gap\`␊
|
|
196
198
|
> Keep the variable even if unused␊
|
|
197
199
|
␊
|
|
198
|
-
FAILED
|
|
200
|
+
FAILED␊
|
|
199
201
|
␊
|
|
200
202
|
Stderr: `
|
|
201
203
|
|
|
@@ -211,10 +213,55 @@ Generated by [AVA](https://avajs.dev).
|
|
|
211
213
|
StorageV1: Deleted \`__gap\`␊
|
|
212
214
|
> Keep the variable even if unused␊
|
|
213
215
|
␊
|
|
214
|
-
FAILED
|
|
216
|
+
FAILED␊
|
|
215
217
|
␊
|
|
216
218
|
Stderr: `
|
|
217
219
|
|
|
220
|
+
## validate - requireReference - no reference, has upgradesFrom - safe
|
|
221
|
+
|
|
222
|
+
> Snapshot 1
|
|
223
|
+
|
|
224
|
+
` ✔ contracts/test/cli/Validate.sol:BecomesSafe (upgrades from contracts/test/cli/Validate.sol:MultipleUnsafe)␊
|
|
225
|
+
␊
|
|
226
|
+
SUCCESS␊
|
|
227
|
+
`
|
|
228
|
+
|
|
229
|
+
## validate - requireReference - no reference, has upgradesFrom - unsafe
|
|
230
|
+
|
|
231
|
+
> Snapshot 1
|
|
232
|
+
|
|
233
|
+
`Stdout: ✘ contracts/test/cli/Validate.sol:BecomesBadLayout (upgrades from contracts/test/cli/Validate.sol:BecomesSafe)␊
|
|
234
|
+
␊
|
|
235
|
+
BecomesSafe: Deleted \`x\`␊
|
|
236
|
+
> Keep the variable even if unused␊
|
|
237
|
+
␊
|
|
238
|
+
FAILED␊
|
|
239
|
+
␊
|
|
240
|
+
Stderr: `
|
|
241
|
+
|
|
242
|
+
## validate - requireReference - has reference - unsafe
|
|
243
|
+
|
|
244
|
+
> Snapshot 1
|
|
245
|
+
|
|
246
|
+
`Stdout: ✘ contracts/test/cli/Validate.sol:StorageV2_Bad_NoAnnotation (upgrades from contracts/test/cli/Validate.sol:StorageV1)␊
|
|
247
|
+
␊
|
|
248
|
+
contracts/test/cli/Validate.sol:147: Layout changed for \`__gap\` (uint256[49] -> uint256[49])␊
|
|
249
|
+
- Slot changed from 1 to 2␊
|
|
250
|
+
> Set __gap array to size 48␊
|
|
251
|
+
␊
|
|
252
|
+
FAILED␊
|
|
253
|
+
␊
|
|
254
|
+
Stderr: `
|
|
255
|
+
|
|
256
|
+
## validate - requireReference - has reference - safe
|
|
257
|
+
|
|
258
|
+
> Snapshot 1
|
|
259
|
+
|
|
260
|
+
` ✔ contracts/test/cli/Validate.sol:StorageV2_Ok_NoAnnotation (upgrades from contracts/test/cli/Validate.sol:StorageV1)␊
|
|
261
|
+
␊
|
|
262
|
+
SUCCESS␊
|
|
263
|
+
`
|
|
264
|
+
|
|
218
265
|
## validate - no upgradeable
|
|
219
266
|
|
|
220
267
|
> Snapshot 1
|
|
@@ -228,5 +275,14 @@ Generated by [AVA](https://avajs.dev).
|
|
|
228
275
|
|
|
229
276
|
` ✔ contracts/test/cli/Annotation.sol:Annotation␊
|
|
230
277
|
␊
|
|
231
|
-
SUCCESS (1 upgradeable
|
|
278
|
+
SUCCESS (1 upgradeable contract detected, 1 passed, 0 failed)␊
|
|
279
|
+
`
|
|
280
|
+
|
|
281
|
+
## validate - single contract - ok
|
|
282
|
+
|
|
283
|
+
> Snapshot 1
|
|
284
|
+
|
|
285
|
+
` ✔ contracts/test/cli/Annotation.sol:Annotation␊
|
|
286
|
+
␊
|
|
287
|
+
SUCCESS␊
|
|
232
288
|
`
|
package/src/cli/cli.test.ts.snap
CHANGED
|
Binary file
|
|
@@ -69,7 +69,7 @@ export class UpgradeableContractReport implements Report {
|
|
|
69
69
|
*/
|
|
70
70
|
export function getContractReports(
|
|
71
71
|
sourceContracts: SourceContract[],
|
|
72
|
-
opts: ValidateUpgradeSafetyOptions
|
|
72
|
+
opts: Required<ValidateUpgradeSafetyOptions>,
|
|
73
73
|
specifiedContracts?: SpecifiedContracts,
|
|
74
74
|
) {
|
|
75
75
|
const upgradeableContractReports: UpgradeableContractReport[] = [];
|
|
@@ -83,7 +83,11 @@ export function getContractReports(
|
|
|
83
83
|
sourceContracts,
|
|
84
84
|
specifiedContracts?.reference,
|
|
85
85
|
);
|
|
86
|
-
if (
|
|
86
|
+
if (opts.requireReference && upgradeabilityAssessment.referenceContract === undefined) {
|
|
87
|
+
throw new Error(
|
|
88
|
+
`The contract ${sourceContract.fullyQualifiedName} does not specify what contract it upgrades from. Add the \`@custom:oz-upgrades-from <REFERENCE_CONTRACT>\` annotation to the contract, or include the reference contract name when running the validate command or function.`,
|
|
89
|
+
);
|
|
90
|
+
} else if (specifiedContracts !== undefined || upgradeabilityAssessment.upgradeable) {
|
|
87
91
|
const reference = upgradeabilityAssessment.referenceContract;
|
|
88
92
|
const kind = upgradeabilityAssessment.uups ? 'uups' : 'transparent';
|
|
89
93
|
const report = getUpgradeableContractReport(sourceContract, reference, { ...opts, kind: kind });
|
|
@@ -62,7 +62,7 @@ test('get project report - ok - console', async t => {
|
|
|
62
62
|
t.true(report.ok);
|
|
63
63
|
t.is(report.numPassed, 1);
|
|
64
64
|
t.is(report.numTotal, 1);
|
|
65
|
-
t.regex(report.explain(), /SUCCESS \(1 upgradeable
|
|
65
|
+
t.regex(report.explain(), /SUCCESS \(1 upgradeable contract detected, 1 passed, 0 failed\)/);
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
test('get project report - errors - console', async t => {
|
|
Binary file
|
|
@@ -2,7 +2,10 @@ import { UpgradeableContractReport } from './contract-report';
|
|
|
2
2
|
import { Report } from '../../standalone';
|
|
3
3
|
|
|
4
4
|
export class ProjectReport implements Report {
|
|
5
|
-
constructor(
|
|
5
|
+
constructor(
|
|
6
|
+
readonly upgradeableContractReports: UpgradeableContractReport[],
|
|
7
|
+
readonly specifiedContract?: boolean,
|
|
8
|
+
) {}
|
|
6
9
|
|
|
7
10
|
get ok(): boolean {
|
|
8
11
|
return this.upgradeableContractReports.every(r => r.ok);
|
|
@@ -13,13 +16,17 @@ export class ProjectReport implements Report {
|
|
|
13
16
|
return 'No upgradeable contracts detected.';
|
|
14
17
|
} else {
|
|
15
18
|
const lines = this.upgradeableContractReports.map(r => r.explain(color));
|
|
16
|
-
const numFailed = this.numTotal - this.numPassed;
|
|
17
|
-
const plural = numFailed === 1 ? '' : 's';
|
|
18
19
|
const status = this.ok ? 'SUCCESS' : 'FAILED';
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
`${status}
|
|
22
|
-
|
|
21
|
+
if (this.specifiedContract) {
|
|
22
|
+
lines.push(`${status}`);
|
|
23
|
+
} else {
|
|
24
|
+
const numFailed = this.numTotal - this.numPassed;
|
|
25
|
+
const plural = this.numTotal === 1 ? '' : 's';
|
|
26
|
+
lines.push(
|
|
27
|
+
`${status} (${this.numTotal} upgradeable contract${plural} detected, ${this.numPassed} passed, ${numFailed} failed)`,
|
|
28
|
+
);
|
|
29
|
+
}
|
|
23
30
|
return lines.join('\n\n');
|
|
24
31
|
}
|
|
25
32
|
}
|
|
@@ -39,6 +46,9 @@ export class ProjectReport implements Report {
|
|
|
39
46
|
}
|
|
40
47
|
}
|
|
41
48
|
|
|
42
|
-
export function getProjectReport(
|
|
43
|
-
|
|
49
|
+
export function getProjectReport(
|
|
50
|
+
upgradeableContractReports: UpgradeableContractReport[],
|
|
51
|
+
specifiedContract?: boolean,
|
|
52
|
+
): ProjectReport {
|
|
53
|
+
return new ProjectReport(upgradeableContractReports, specifiedContract);
|
|
44
54
|
}
|
|
@@ -6,7 +6,7 @@ import path from 'path';
|
|
|
6
6
|
import os from 'os';
|
|
7
7
|
|
|
8
8
|
import { artifacts } from 'hardhat';
|
|
9
|
-
import { validateUpgradeSafety } from './validate-upgrade-safety';
|
|
9
|
+
import { findSpecifiedContracts, validateUpgradeSafety, withCliDefaults } from './validate-upgrade-safety';
|
|
10
10
|
import { ReferenceContractNotFound } from './find-contract';
|
|
11
11
|
|
|
12
12
|
test.before(async () => {
|
|
@@ -97,3 +97,15 @@ test('invalid annotation args - upgrades', async t => {
|
|
|
97
97
|
);
|
|
98
98
|
t.true(error?.message.includes('Found 1, expected 0'));
|
|
99
99
|
});
|
|
100
|
+
|
|
101
|
+
test('findSpecifiedContracts - requireReference option without contract', async t => {
|
|
102
|
+
try {
|
|
103
|
+
findSpecifiedContracts([], withCliDefaults({ requireReference: true }));
|
|
104
|
+
} catch (e: any) {
|
|
105
|
+
t.true(
|
|
106
|
+
e.message.includes(
|
|
107
|
+
'The requireReference option can only be specified when the contract option is also specified.',
|
|
108
|
+
),
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ValidationOptions } from '../..';
|
|
1
|
+
import { ValidationOptions, withValidationDefaults } from '../..';
|
|
2
2
|
|
|
3
3
|
import { getBuildInfoFiles } from './build-info-file';
|
|
4
4
|
import { getContractReports } from './contract-report';
|
|
@@ -9,7 +9,9 @@ import { SourceContract, validateBuildInfoContracts } from './validations';
|
|
|
9
9
|
/**
|
|
10
10
|
* Validation options for upgrade safety checks.
|
|
11
11
|
*/
|
|
12
|
-
export type ValidateUpgradeSafetyOptions = Omit<ValidationOptions, 'kind'
|
|
12
|
+
export type ValidateUpgradeSafetyOptions = Omit<ValidationOptions, 'kind'> & {
|
|
13
|
+
requireReference?: boolean;
|
|
14
|
+
};
|
|
13
15
|
|
|
14
16
|
export type SpecifiedContracts = {
|
|
15
17
|
contract: SourceContract;
|
|
@@ -32,17 +34,20 @@ export async function validateUpgradeSafety(
|
|
|
32
34
|
reference?: string,
|
|
33
35
|
opts: ValidateUpgradeSafetyOptions = {},
|
|
34
36
|
): Promise<ProjectReport> {
|
|
37
|
+
const allOpts = withCliDefaults(opts);
|
|
38
|
+
|
|
35
39
|
const buildInfoFiles = await getBuildInfoFiles(buildInfoDir);
|
|
36
40
|
const sourceContracts = validateBuildInfoContracts(buildInfoFiles);
|
|
37
41
|
|
|
38
|
-
const specifiedContracts = findSpecifiedContracts(sourceContracts, contract, reference);
|
|
42
|
+
const specifiedContracts = findSpecifiedContracts(sourceContracts, allOpts, contract, reference);
|
|
39
43
|
|
|
40
|
-
const contractReports = getContractReports(sourceContracts,
|
|
41
|
-
return getProjectReport(contractReports);
|
|
44
|
+
const contractReports = getContractReports(sourceContracts, allOpts, specifiedContracts);
|
|
45
|
+
return getProjectReport(contractReports, specifiedContracts !== undefined);
|
|
42
46
|
}
|
|
43
47
|
|
|
44
|
-
function findSpecifiedContracts(
|
|
48
|
+
export function findSpecifiedContracts(
|
|
45
49
|
sourceContracts: SourceContract[],
|
|
50
|
+
opts: Required<ValidateUpgradeSafetyOptions>,
|
|
46
51
|
contractName?: string,
|
|
47
52
|
referenceName?: string,
|
|
48
53
|
): SpecifiedContracts | undefined {
|
|
@@ -53,7 +58,16 @@ function findSpecifiedContracts(
|
|
|
53
58
|
};
|
|
54
59
|
} else if (referenceName !== undefined) {
|
|
55
60
|
throw new Error(`The reference option can only be specified when the contract option is also specified.`);
|
|
61
|
+
} else if (opts.requireReference) {
|
|
62
|
+
throw new Error(`The requireReference option can only be specified when the contract option is also specified.`);
|
|
56
63
|
} else {
|
|
57
64
|
return undefined;
|
|
58
65
|
}
|
|
59
66
|
}
|
|
67
|
+
|
|
68
|
+
export function withCliDefaults(opts: ValidateUpgradeSafetyOptions): Required<ValidateUpgradeSafetyOptions> {
|
|
69
|
+
return {
|
|
70
|
+
...withValidationDefaults(opts),
|
|
71
|
+
requireReference: opts.requireReference ?? false,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
@@ -3,6 +3,7 @@ import _test, { ExecutionContext, TestFn } from 'ava';
|
|
|
3
3
|
import { artifacts } from 'hardhat';
|
|
4
4
|
import { validateBuildInfoContracts } from './validations';
|
|
5
5
|
import { UpgradeableContractReport, getContractReports } from './contract-report';
|
|
6
|
+
import { withCliDefaults } from './validate-upgrade-safety';
|
|
6
7
|
|
|
7
8
|
interface Context {
|
|
8
9
|
reports: UpgradeableContractReport[];
|
|
@@ -19,7 +20,7 @@ test.before(async t => {
|
|
|
19
20
|
t.fail();
|
|
20
21
|
} else {
|
|
21
22
|
const sourceContracts = validateBuildInfoContracts([buildInfo]);
|
|
22
|
-
t.context.reports = getContractReports(sourceContracts, {});
|
|
23
|
+
t.context.reports = getContractReports(sourceContracts, withCliDefaults({}));
|
|
23
24
|
}
|
|
24
25
|
});
|
|
25
26
|
|
package/src/cli/validate.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import minimist from 'minimist';
|
|
2
2
|
|
|
3
3
|
import { ValidateUpgradeSafetyOptions, validateUpgradeSafety } from '.';
|
|
4
|
-
import { withValidationDefaults } from '..';
|
|
5
4
|
import { ValidationError, errorKinds } from '../validate/run';
|
|
6
5
|
import debug from '../utils/debug';
|
|
6
|
+
import { withCliDefaults } from './validate/validate-upgrade-safety';
|
|
7
7
|
|
|
8
8
|
const USAGE = 'Usage: npx @openzeppelin/upgrades-core validate [<BUILD_INFO_DIR>] [<OPTIONS>]';
|
|
9
9
|
const DETAILS = `
|
|
@@ -14,7 +14,8 @@ Arguments:
|
|
|
14
14
|
|
|
15
15
|
Options:
|
|
16
16
|
--contract <CONTRACT> The name or fully qualified name of the contract to validate. If not specified, all upgradeable contracts in the build info directory will be validated.
|
|
17
|
-
--reference <REFERENCE_CONTRACT> The name or fully qualified name of the reference contract to use for storage layout comparisons.
|
|
17
|
+
--reference <REFERENCE_CONTRACT> Can only be used when the --contract option is also provided. The name or fully qualified name of the reference contract to use for storage layout comparisons. If not specified, uses the @custom:oz-upgrades-from annotation if it is defined in the contract that is being validated.
|
|
18
|
+
--requireReference Can only be used when the --contract option is also provided. If specified, requires either the --reference option to be provided or the contract to have a @custom:oz-upgrades-from annotation.
|
|
18
19
|
--unsafeAllow "<VALIDATION_ERRORS>" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: ${errorKinds.join(
|
|
19
20
|
', ',
|
|
20
21
|
)}
|
|
@@ -45,6 +46,7 @@ function parseArgs(args: string[]) {
|
|
|
45
46
|
'unsafeSkipStorageCheck',
|
|
46
47
|
'unsafeAllowCustomTypes',
|
|
47
48
|
'unsafeAllowLinkedLibraries',
|
|
49
|
+
'requireReference',
|
|
48
50
|
],
|
|
49
51
|
string: ['unsafeAllow', 'contract', 'reference'],
|
|
50
52
|
alias: { h: 'help' },
|
|
@@ -87,10 +89,15 @@ export function getFunctionArgs(parsedArgs: minimist.ParsedArgs, extraArgs: stri
|
|
|
87
89
|
const buildInfoDir = extraArgs.length === 1 ? undefined : extraArgs[1];
|
|
88
90
|
const contract = getAndValidateString(parsedArgs, 'contract');
|
|
89
91
|
const reference = getAndValidateString(parsedArgs, 'reference');
|
|
90
|
-
if (reference !== undefined && contract === undefined) {
|
|
91
|
-
throw new Error('The --reference option can only be used along with the --contract option.');
|
|
92
|
-
}
|
|
93
92
|
const opts = withDefaults(parsedArgs);
|
|
93
|
+
|
|
94
|
+
if (contract === undefined) {
|
|
95
|
+
if (reference !== undefined) {
|
|
96
|
+
throw new Error('The --reference option can only be used along with the --contract option.');
|
|
97
|
+
} else if (opts.requireReference) {
|
|
98
|
+
throw new Error('The --requireReference option can only be used along with the --contract option.');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
94
101
|
return { buildInfoDir, contract, reference, opts };
|
|
95
102
|
}
|
|
96
103
|
}
|
|
@@ -117,6 +124,7 @@ function validateOptions(parsedArgs: minimist.ParsedArgs) {
|
|
|
117
124
|
'unsafeAllow',
|
|
118
125
|
'contract',
|
|
119
126
|
'reference',
|
|
127
|
+
'requireReference',
|
|
120
128
|
].includes(key),
|
|
121
129
|
);
|
|
122
130
|
if (invalidArgs.length > 0) {
|
|
@@ -152,7 +160,8 @@ export function withDefaults(parsedArgs: minimist.ParsedArgs): Required<Validate
|
|
|
152
160
|
unsafeAllowCustomTypes: parsedArgs['unsafeAllowCustomTypes'],
|
|
153
161
|
unsafeAllowLinkedLibraries: parsedArgs['unsafeAllowLinkedLibraries'],
|
|
154
162
|
unsafeAllow: getUnsafeAllowKinds(parsedArgs['unsafeAllow']),
|
|
163
|
+
requireReference: parsedArgs['requireReference'],
|
|
155
164
|
};
|
|
156
165
|
|
|
157
|
-
return
|
|
166
|
+
return withCliDefaults(allOpts);
|
|
158
167
|
}
|