@openzeppelin/upgrades-core 1.14.0 → 1.15.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/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +2 -2
- package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.json +2 -2
- package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.json +2 -2
- package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +2 -2
- package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +2 -2
- package/artifacts/AdminUpgradeabilityProxy.json +2 -2
- package/artifacts/ProxyAdmin.json +2 -2
- package/artifacts/build-info.json +68 -0
- package/artifacts/contracts/proxy/AdminUpgradeabilityProxy.sol/AdminUpgradeabilityProxy.json +2 -2
- package/artifacts/contracts/proxy/ProxyAdmin.sol/ProxyAdmin.json +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +1 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js.map +1 -1
- package/dist/proxy-kind.d.ts +4 -0
- package/dist/proxy-kind.d.ts.map +1 -1
- package/dist/proxy-kind.js +4 -0
- package/dist/proxy-kind.js.map +1 -1
- package/dist/standalone.test.js +9 -0
- package/dist/standalone.test.js.map +1 -1
- package/dist/storage/compare.d.ts.map +1 -1
- package/dist/storage/compare.js +6 -3
- package/dist/storage/compare.js.map +1 -1
- package/dist/storage/extract.js +1 -1
- package/dist/storage/extract.js.map +1 -1
- package/dist/storage/index.js +5 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/validate/overrides.d.ts +1 -0
- package/dist/validate/overrides.d.ts.map +1 -1
- package/dist/validate/overrides.js +10 -2
- package/dist/validate/overrides.js.map +1 -1
- package/dist/validate/report.js.map +1 -1
- package/dist/validate/run.js +13 -1
- package/dist/validate/run.js.map +1 -1
- package/package.json +6 -5
- package/src/index.ts +2 -1
- package/src/provider.ts +1 -0
- package/src/proxy-kind.ts +4 -0
- package/src/standalone.test.ts +12 -0
- package/src/storage/compare.ts +5 -1
- package/src/storage/extract.ts +1 -1
- package/src/validate/overrides.ts +10 -1
- package/src/validate/run.ts +13 -3
package/src/standalone.test.ts
CHANGED
|
@@ -38,3 +38,15 @@ test('reports storage upgrade errors', t => {
|
|
|
38
38
|
const badReport = v1.getStorageUpgradeReport(v2Bad);
|
|
39
39
|
t.false(badReport.ok);
|
|
40
40
|
});
|
|
41
|
+
|
|
42
|
+
test('dont report renamed version update', t => {
|
|
43
|
+
const v1 = new UpgradeableContract('StandaloneRenameV1', t.context.solcInput, t.context.solcOutput);
|
|
44
|
+
|
|
45
|
+
const v2 = new UpgradeableContract('StandaloneRenameV2', t.context.solcInput, t.context.solcOutput);
|
|
46
|
+
const goodReport = v1.getStorageUpgradeReport(v2);
|
|
47
|
+
t.true(goodReport.ok);
|
|
48
|
+
|
|
49
|
+
const v3 = new UpgradeableContract('StandaloneRenameV3', t.context.solcInput, t.context.solcOutput);
|
|
50
|
+
const goodReport2 = v2.getStorageUpgradeReport(v3);
|
|
51
|
+
t.true(goodReport2.ok);
|
|
52
|
+
});
|
package/src/storage/compare.ts
CHANGED
|
@@ -98,7 +98,11 @@ export class StorageLayoutComparator {
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
getFieldChange<F extends StorageField>(original: F, updated: F): StorageFieldChange<F> | undefined {
|
|
101
|
-
const nameChange =
|
|
101
|
+
const nameChange =
|
|
102
|
+
!this.unsafeAllowRenames &&
|
|
103
|
+
original.label !== updated.renamedFrom &&
|
|
104
|
+
(updated.label !== original.label ||
|
|
105
|
+
(updated.renamedFrom !== undefined && updated.renamedFrom !== original.renamedFrom));
|
|
102
106
|
const retypedFromOriginal = original.type.item.label === updated.retypedFrom?.trim();
|
|
103
107
|
const typeChange = !retypedFromOriginal && this.getTypeChange(original.type, updated.type, { allowAppend: false });
|
|
104
108
|
const layoutChange = this.getLayoutChange(original, updated);
|
package/src/storage/extract.ts
CHANGED
|
@@ -108,7 +108,7 @@ function getTypeMembers(typeDef: StructDefinition | EnumDefinition): TypeItem['m
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
function getOriginContract(contract: ContractDefinition, astId: number | undefined, deref: ASTDereferencer) {
|
|
111
|
-
for (const id of contract.linearizedBaseContracts
|
|
111
|
+
for (const id of contract.linearizedBaseContracts) {
|
|
112
112
|
const parentContract = deref(['ContractDefinition'], id);
|
|
113
113
|
const varDecl = parentContract.nodes.find(n => n.id == astId);
|
|
114
114
|
if (varDecl && isNodeType('VariableDeclaration', varDecl)) {
|
|
@@ -9,6 +9,7 @@ export interface ValidationOptions {
|
|
|
9
9
|
unsafeAllowCustomTypes?: boolean;
|
|
10
10
|
unsafeAllowLinkedLibraries?: boolean;
|
|
11
11
|
unsafeAllowRenames?: boolean;
|
|
12
|
+
unsafeSkipStorageCheck?: boolean;
|
|
12
13
|
unsafeAllow?: ValidationError['kind'][];
|
|
13
14
|
kind?: ProxyDeployment['kind'];
|
|
14
15
|
}
|
|
@@ -58,8 +59,16 @@ export function withValidationDefaults(opts: ValidationOptions): Required<Valida
|
|
|
58
59
|
const kind = opts.kind ?? 'transparent';
|
|
59
60
|
|
|
60
61
|
const unsafeAllowRenames = opts.unsafeAllowRenames ?? false;
|
|
62
|
+
const unsafeSkipStorageCheck = opts.unsafeSkipStorageCheck ?? false;
|
|
61
63
|
|
|
62
|
-
return {
|
|
64
|
+
return {
|
|
65
|
+
unsafeAllowCustomTypes,
|
|
66
|
+
unsafeAllowLinkedLibraries,
|
|
67
|
+
unsafeAllowRenames,
|
|
68
|
+
unsafeSkipStorageCheck,
|
|
69
|
+
unsafeAllow,
|
|
70
|
+
kind,
|
|
71
|
+
};
|
|
63
72
|
}
|
|
64
73
|
|
|
65
74
|
export function processExceptions(
|
package/src/validate/run.ts
CHANGED
|
@@ -248,9 +248,19 @@ function* getStateVariableErrors(
|
|
|
248
248
|
}
|
|
249
249
|
|
|
250
250
|
function getReferencedLibraryIds(contractDef: ContractDefinition): number[] {
|
|
251
|
-
const implicitUsage = [...findAll('UsingForDirective', contractDef)]
|
|
252
|
-
usingForDirective =>
|
|
253
|
-
|
|
251
|
+
const implicitUsage = [...findAll('UsingForDirective', contractDef)]
|
|
252
|
+
.map(usingForDirective => {
|
|
253
|
+
if (usingForDirective.libraryName !== undefined) {
|
|
254
|
+
return usingForDirective.libraryName.referencedDeclaration;
|
|
255
|
+
} else if (usingForDirective.functionList !== undefined) {
|
|
256
|
+
return [];
|
|
257
|
+
} else {
|
|
258
|
+
throw new Error(
|
|
259
|
+
'Broken invariant: either UsingForDirective.libraryName or UsingForDirective.functionList should be defined',
|
|
260
|
+
);
|
|
261
|
+
}
|
|
262
|
+
})
|
|
263
|
+
.flat();
|
|
254
264
|
|
|
255
265
|
const explicitUsage = [...findAll('Identifier', contractDef)]
|
|
256
266
|
.filter(identifier => identifier.typeDescriptions.typeString?.match(/^type\(library/))
|