@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.
Files changed (49) hide show
  1. package/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
  2. package/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +2 -2
  3. package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.dbg.json +1 -1
  4. package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.json +2 -2
  5. package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +1 -1
  6. package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.json +2 -2
  7. package/artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +2 -2
  8. package/artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +2 -2
  9. package/artifacts/AdminUpgradeabilityProxy.json +2 -2
  10. package/artifacts/ProxyAdmin.json +2 -2
  11. package/artifacts/build-info.json +68 -0
  12. package/artifacts/contracts/proxy/AdminUpgradeabilityProxy.sol/AdminUpgradeabilityProxy.json +2 -2
  13. package/artifacts/contracts/proxy/ProxyAdmin.sol/ProxyAdmin.json +2 -2
  14. package/dist/index.d.ts +2 -2
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +8 -2
  17. package/dist/index.js.map +1 -1
  18. package/dist/provider.d.ts +1 -0
  19. package/dist/provider.d.ts.map +1 -1
  20. package/dist/provider.js.map +1 -1
  21. package/dist/proxy-kind.d.ts +4 -0
  22. package/dist/proxy-kind.d.ts.map +1 -1
  23. package/dist/proxy-kind.js +4 -0
  24. package/dist/proxy-kind.js.map +1 -1
  25. package/dist/standalone.test.js +9 -0
  26. package/dist/standalone.test.js.map +1 -1
  27. package/dist/storage/compare.d.ts.map +1 -1
  28. package/dist/storage/compare.js +6 -3
  29. package/dist/storage/compare.js.map +1 -1
  30. package/dist/storage/extract.js +1 -1
  31. package/dist/storage/extract.js.map +1 -1
  32. package/dist/storage/index.js +5 -1
  33. package/dist/storage/index.js.map +1 -1
  34. package/dist/validate/overrides.d.ts +1 -0
  35. package/dist/validate/overrides.d.ts.map +1 -1
  36. package/dist/validate/overrides.js +10 -2
  37. package/dist/validate/overrides.js.map +1 -1
  38. package/dist/validate/report.js.map +1 -1
  39. package/dist/validate/run.js +13 -1
  40. package/dist/validate/run.js.map +1 -1
  41. package/package.json +6 -5
  42. package/src/index.ts +2 -1
  43. package/src/provider.ts +1 -0
  44. package/src/proxy-kind.ts +4 -0
  45. package/src/standalone.test.ts +12 -0
  46. package/src/storage/compare.ts +5 -1
  47. package/src/storage/extract.ts +1 -1
  48. package/src/validate/overrides.ts +10 -1
  49. package/src/validate/run.ts +13 -3
@@ -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
+ });
@@ -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 = !this.unsafeAllowRenames && original.label !== (updated.renamedFrom ?? updated.label);
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);
@@ -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.reverse()) {
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 { unsafeAllowCustomTypes, unsafeAllowLinkedLibraries, unsafeAllowRenames, unsafeAllow, kind };
64
+ return {
65
+ unsafeAllowCustomTypes,
66
+ unsafeAllowLinkedLibraries,
67
+ unsafeAllowRenames,
68
+ unsafeSkipStorageCheck,
69
+ unsafeAllow,
70
+ kind,
71
+ };
63
72
  }
64
73
 
65
74
  export function processExceptions(
@@ -248,9 +248,19 @@ function* getStateVariableErrors(
248
248
  }
249
249
 
250
250
  function getReferencedLibraryIds(contractDef: ContractDefinition): number[] {
251
- const implicitUsage = [...findAll('UsingForDirective', contractDef)].map(
252
- usingForDirective => usingForDirective.libraryName.referencedDeclaration,
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/))