@openzeppelin/upgrades-core 1.41.0 → 1.42.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.
@@ -24,7 +24,9 @@ Options:
24
24
  --requireReference Can only be used when the --contract option is also provided. Not compatible with --unsafeSkipStorageCheck. If specified, requires either the --reference option to be provided or the contract to have a @custom:oz-upgrades-from annotation.
25
25
  --referenceBuildInfoDirs "<BUILD_INFO_DIR>[,<BUILD_INFO_DIR>...]" Optional paths of additional build info directories from previous versions of the project to use for storage layout comparisons. When using this option, refer to one of these directories using prefix '<dirName>:' before the contract name or fully qualified name in the --reference option or @custom:oz-upgrades-from annotation, where <dirName> is the directory short name. Each directory short name must be unique, including compared to the main build info directory. If passing in multiple directories, separate them with commas or call the option multiple times, once for each directory.
26
26
  --exclude "<GLOB_PATTERN>" [--exclude "<GLOB_PATTERN>"...] Exclude validations for contracts in source file paths that match any of the given glob patterns. For example, --exclude "contracts/mocks/**/*.sol". Does not apply to reference contracts. If passing in multiple patterns, call the option multiple times, once for each pattern.
27
- --unsafeAllow "<VALIDATION_ERROR>[,<VALIDATION_ERROR>...]" Selectively disable one or more validation errors. Comma-separated list with one or more of the following: ${run_1.errorKinds.join(', ')}
27
+ --unsafeAllow "<VALIDATION_ERROR>[,<VALIDATION_ERROR>...]" Selectively disable one or more validation errors or warnings. Comma-separated list with one or more of the following:
28
+ Errors: ${run_1.errorKinds.filter(kind => !run_1.convertToWarnings.includes(kind)).join(', ')}
29
+ Warnings: ${run_1.convertToWarnings.join(', ')}
28
30
  --unsafeAllowRenames Configure storage layout check to allow variable renaming.
29
31
  --unsafeSkipStorageCheck Skips checking for storage layout compatibility errors. This is a dangerous option meant to be used as a last resort.`;
30
32
  async function main(args) {
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ export interface StandaloneValidationOptions extends ProxyKindOption {
23
23
  */
24
24
  unsafeAllowLinkedLibraries?: boolean;
25
25
  /**
26
- * Selectively disable one or more validation errors.
26
+ * Selectively disable one or more validation errors or warnings.
27
27
  */
28
28
  unsafeAllow?: ValidationError['kind'][];
29
29
  }
@@ -40,7 +40,11 @@ export interface ValidationOptions extends StandaloneValidationOptions {
40
40
  */
41
41
  unsafeSkipStorageCheck?: boolean;
42
42
  }
43
- export declare const ValidationErrorUnsafeMessages: Record<ValidationError['kind'], string[]>;
43
+ /**
44
+ * Warnings to display when a validation error occurs but is allowed.
45
+ * `null` indicates that the original message should be displayed.
46
+ */
47
+ export declare const ValidationErrorUnsafeMessages: Record<ValidationError['kind'], string[] | null>;
44
48
  export declare function withValidationDefaults(opts: ValidationOptions): Required<ValidationOptions>;
45
49
  export declare function processExceptions(contractName: string, errors: ValidationError[], opts: ValidationOptions): ValidationError[];
46
50
  //# sourceMappingURL=overrides.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/validate/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,eAAe;IAClE;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAErC;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,2BAA2B;IACpE;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CA+BnF,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CA2B3F;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,eAAe,EAAE,EACzB,IAAI,EAAE,iBAAiB,GACtB,eAAe,EAAE,CAwBnB"}
1
+ {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/validate/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAqB,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAK9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,eAAe;IAClE;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IAErC;;OAEG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,2BAA2B;IACpE;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CA4C1F,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CA4B3F;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,eAAe,EAAE,EACzB,IAAI,EAAE,iBAAiB,GACtB,eAAe,EAAE,CA8BnB"}
@@ -3,10 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ValidationErrorUnsafeMessages = exports.silenceWarnings = void 0;
4
4
  exports.withValidationDefaults = withValidationDefaults;
5
5
  exports.processExceptions = processExceptions;
6
+ const run_1 = require("./run");
6
7
  const log_1 = require("../utils/log");
8
+ const report_1 = require("./report");
7
9
  // Backwards compatibility
8
10
  var log_2 = require("../utils/log");
9
11
  Object.defineProperty(exports, "silenceWarnings", { enumerable: true, get: function () { return log_2.silenceWarnings; } });
12
+ /**
13
+ * Warnings to display when a validation error occurs but is allowed.
14
+ * `null` indicates that the original message should be displayed.
15
+ */
10
16
  exports.ValidationErrorUnsafeMessages = {
11
17
  'state-variable-assignment': [
12
18
  `You are using the \`unsafeAllow.state-variable-assignment\` flag.`,
@@ -38,6 +44,19 @@ exports.ValidationErrorUnsafeMessages = {
38
44
  `Internal functions are code pointers which will no longer be valid after an upgrade.`,
39
45
  `Make sure you reassign internal functions in storage variables during upgrades.`,
40
46
  ],
47
+ 'missing-initializer': [
48
+ `You are using the \`unsafeAllow.missing-initializer\` flag.`,
49
+ `Make sure you have manually checked that the contract has an initializer and that it correctly calls all parent initializers.`,
50
+ ],
51
+ 'missing-initializer-call': [
52
+ `You are using the \`unsafeAllow.missing-initializer-call\` flag.`,
53
+ `Make sure you have manually checked that the contract initializer calls all parent initializers.`,
54
+ ],
55
+ 'duplicate-initializer-call': [
56
+ `You are using the \`unsafeAllow.duplicate-initializer-call\` flag.`,
57
+ `Make sure you have manually checked that the contract initializer calls each parent initializer only once.`,
58
+ ],
59
+ 'incorrect-initializer-order': null,
41
60
  };
42
61
  function withValidationDefaults(opts) {
43
62
  const unsafeAllow = opts.unsafeAllow ?? [];
@@ -67,16 +86,23 @@ function processExceptions(contractName, errors, opts) {
67
86
  if (opts.kind === 'transparent' || opts.kind === 'beacon') {
68
87
  errors = errors.filter(error => error.kind !== 'missing-public-upgradeto');
69
88
  }
70
- for (const [errorType, errorDescription] of Object.entries(exports.ValidationErrorUnsafeMessages)) {
71
- if (unsafeAllow.includes(errorType)) {
72
- let exceptionsFound = false;
73
- errors = errors.filter(error => {
74
- const isException = errorType === error.kind;
75
- exceptionsFound = exceptionsFound || isException;
76
- return !isException;
77
- });
78
- if (exceptionsFound && errorDescription) {
79
- (0, log_1.logWarning)(`Potentially unsafe deployment of ${contractName}`, errorDescription);
89
+ for (const [key, errorDescription] of Object.entries(exports.ValidationErrorUnsafeMessages)) {
90
+ const errorType = key;
91
+ const skip = unsafeAllow.includes(errorType);
92
+ const warn = run_1.convertToWarnings.includes(errorType);
93
+ if (skip || warn) {
94
+ const errorsWithType = errors.filter(error => error.kind === errorType);
95
+ errors = errors.filter(error => !errorsWithType.includes(error));
96
+ // Display message about the exception, unless it is a warning that the user has chosen to skip
97
+ if (errorsWithType.length > 0 && !(skip && warn)) {
98
+ if (errorDescription !== null) {
99
+ (0, log_1.logWarning)(`Potentially unsafe deployment of ${contractName}`, errorDescription);
100
+ }
101
+ else {
102
+ for (const error of errorsWithType) {
103
+ (0, log_1.logWarning)(`Potentially unsafe deployment of ${contractName}`, [(0, report_1.describeError)(error)]);
104
+ }
105
+ }
80
106
  }
81
107
  }
82
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/validate/overrides.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/validate/overrides.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,5 @@ export declare class UpgradeableContractErrorReport {
5
5
  get ok(): boolean;
6
6
  explain(color?: boolean): string;
7
7
  }
8
+ export declare function describeError(e: ValidationError, color?: boolean): string;
8
9
  //# sourceMappingURL=report.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/validate/report.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAExC,qBAAa,8BAA8B;IAC7B,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE;gBAAzB,MAAM,EAAE,eAAe,EAAE;IAE9C,IAAI,EAAE,IAAI,OAAO,CAEhB;IAED,OAAO,CAAC,KAAK,UAAO,GAAG,MAAM;CAG9B"}
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/validate/report.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAExC,qBAAa,8BAA8B;IAC7B,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE;gBAAzB,MAAM,EAAE,eAAe,EAAE;IAE9C,IAAI,EAAE,IAAI,OAAO,CAEhB;IAED,OAAO,CAAC,KAAK,UAAO,GAAG,MAAM;CAG9B;AAmFD,wBAAgB,aAAa,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,UAAO,GAAG,MAAM,CAYtE"}
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.UpgradeableContractErrorReport = void 0;
7
+ exports.describeError = describeError;
7
8
  const chalk_1 = __importDefault(require("chalk"));
8
9
  class UpgradeableContractErrorReport {
9
10
  constructor(errors) {
@@ -69,10 +70,31 @@ const errorInfo = {
69
70
  ` flag and ensure you always reassign internal functions in storage during upgrades`,
70
71
  link: 'https://zpl.in/upgrades/error-009',
71
72
  },
73
+ 'missing-initializer': {
74
+ msg: () => `Missing initializer`,
75
+ hint: () => `Define an initializer function and use it to call the initializers of parent contracts`,
76
+ link: 'https://zpl.in/upgrades/error-001',
77
+ },
78
+ 'missing-initializer-call': {
79
+ msg: e => `Missing initializer calls for one or more parent contracts: \`${e.parentContracts.join(', ')}\``,
80
+ hint: () => `Call the parent initializers in your initializer function`,
81
+ link: 'https://zpl.in/upgrades/error-001',
82
+ },
83
+ 'duplicate-initializer-call': {
84
+ msg: e => `Duplicate calls found to initializer \`${e.parentInitializer}\` for contract \`${e.parentContract}\``,
85
+ hint: () => `Only call each parent initializer once`,
86
+ link: 'https://zpl.in/upgrades/error-001',
87
+ },
88
+ 'incorrect-initializer-order': {
89
+ msg: e => `Incorrect order of parent initializer calls.
90
+ - Found initializer calls to parent contracts in the following order: ${e.foundOrder.join(', ')}
91
+ - Expected: ${e.expectedLinearization.join(', ')}`,
92
+ hint: () => `Call parent initializers in linearized order`,
93
+ },
72
94
  };
73
95
  function describeError(e, color = true) {
74
96
  const chalk = new chalk_1.default.Instance({ level: color && chalk_1.default.supportsColor ? chalk_1.default.supportsColor.level : 0 });
75
- const info = errorInfo[e.kind];
97
+ const info = errorInfo[e.kind]; // union type is too complex for TypeScript to represent, so we use `any`
76
98
  const log = [chalk.bold(e.src) + ': ' + info.msg(e)];
77
99
  const hint = info.hint?.(e);
78
100
  if (hint) {
@@ -1 +1 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/validate/report.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA2B;AAK3B,MAAa,8BAA8B;IACzC,YAAqB,MAAyB;QAAzB,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAElD,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,KAAK,GAAG,IAAI;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;CACF;AAVD,wEAUC;AAED,MAAM,SAAS,GAAuC;IACpD,WAAW,EAAE;QACX,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,QAAQ,sBAAsB;QACxD,IAAI,EAAE,GAAG,EAAE,CAAC,+BAA+B;QAC3C,IAAI,EAAE,mCAAmC;KAC1C;IACD,YAAY,EAAE;QACZ,GAAG,EAAE,GAAG,EAAE,CAAC,oCAAoC;QAC/C,IAAI,EAAE,mCAAmC;KAC1C;IACD,YAAY,EAAE;QACZ,GAAG,EAAE,GAAG,EAAE,CAAC,oCAAoC;QAC/C,IAAI,EAAE,mCAAmC;KAC1C;IACD,2BAA2B,EAAE;QAC3B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,iCAAiC;QAC/D,IAAI,EAAE,GAAG,EAAE,CAAC,wCAAwC;QACpD,IAAI,EAAE,mCAAmC;KAC1C;IACD,0BAA0B,EAAE;QAC1B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,+DAA+D;QAC7F,IAAI,EAAE,GAAG,EAAE,CACT,2FAA2F;YAC3F,2EAA2E;QAC7E,IAAI,EAAE,mCAAmC;KAC1C;IACD,0BAA0B,EAAE;QAC1B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,qCAAqC,CAAC,CAAC,IAAI,yBAAyB;QAC9E,IAAI,EAAE,GAAG,EAAE,CACT,gHAAgH;YAChH,sEAAsE;QACxE,IAAI,EAAE,mCAAmC;KAC1C;IACD,mBAAmB,EAAE;QACnB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,IAAI,sDAAsD;QACxF,IAAI,EAAE,GAAG,EAAE,CAAC,sCAAsC;KACnD;IACD,iBAAiB,EAAE;QACjB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,IAAI,sDAAsD;QACtF,IAAI,EAAE,GAAG,EAAE,CAAC,sCAAsC;KACnD;IACD,0BAA0B,EAAE;QAC1B,GAAG,EAAE,GAAG,EAAE,CACR,2GAA2G;QAC7G,IAAI,EAAE,GAAG,EAAE,CACT,sFAAsF;YACtF,yEAAyE;QAC3E,IAAI,EAAE,mCAAmC;KAC1C;IACD,2BAA2B,EAAE;QAC3B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,4BAA4B;QAC1D,IAAI,EAAE,GAAG,EAAE,CACT,yDAAyD;YACzD,+GAA+G;YAC/G,wFAAwF;QAC1F,IAAI,EAAE,mCAAmC;KAC1C;CACF,CAAC;AAEF,SAAS,aAAa,CAAC,CAAkB,EAAE,KAAK,GAAG,IAAI;IACrD,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;IAC7G,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAQ,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAQ,CAAC,CAAC;IACnC,IAAI,IAAI,EAAE,CAAC;QACT,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/validate/report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ContractDefinition } from 'solidity-ast';
2
+ import { ASTDereferencer } from 'solidity-ast/utils';
3
+ import { SrcDecoder } from '../../src-decoder';
4
+ import { ValidationExceptionInitializer } from '../run';
5
+ /**
6
+ * Reports if this contract is non-abstract and any of the following are true:
7
+ * - 1. Missing initializer: This contract does not appear to have an initializer, but parent contracts require initialization.
8
+ * - 2. Missing initializer call: This contract's initializer is missing a call to a parent initializer.
9
+ * - 3. Duplicate initializer call: This contract has duplicate calls to the same parent initializer function.
10
+ * - 4. Incorrect initializer order (warning): This contract does not call parent initializers in the correct order.
11
+ */
12
+ export declare function getInitializerExceptions(contractDef: ContractDefinition, deref: ASTDereferencer, decodeSrc: SrcDecoder): Generator<ValidationExceptionInitializer>;
13
+ //# sourceMappingURL=initializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializer.d.ts","sourceRoot":"","sources":["../../../src/validate/run/initializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAW,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,8BAA8B,EAAa,MAAM,QAAQ,CAAC;AAEnE;;;;;;GAMG;AACH,wBAAiB,wBAAwB,CACvC,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,UAAU,GACpB,SAAS,CAAC,8BAA8B,CAAC,CA4C3C"}
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getInitializerExceptions = getInitializerExceptions;
4
+ const utils_1 = require("solidity-ast/utils");
5
+ const run_1 = require("../run");
6
+ /**
7
+ * Reports if this contract is non-abstract and any of the following are true:
8
+ * - 1. Missing initializer: This contract does not appear to have an initializer, but parent contracts require initialization.
9
+ * - 2. Missing initializer call: This contract's initializer is missing a call to a parent initializer.
10
+ * - 3. Duplicate initializer call: This contract has duplicate calls to the same parent initializer function.
11
+ * - 4. Incorrect initializer order (warning): This contract does not call parent initializers in the correct order.
12
+ */
13
+ function* getInitializerExceptions(contractDef, deref, decodeSrc) {
14
+ if (contractDef.abstract) {
15
+ return;
16
+ }
17
+ const linearizedParentContracts = getLinearizedParentContracts(contractDef, deref);
18
+ const parentNameToInitializersMap = getParentNameToInitializersMap(linearizedParentContracts);
19
+ const remainingParents = getParentsNotInitializedByOtherParents(parentNameToInitializersMap);
20
+ if (remainingParents.length > 0) {
21
+ const contractInitializers = getPossibleInitializers(contractDef, false);
22
+ // Report if there is no initializer but parents need initialization
23
+ if (checkNeedsInitialization(remainingParents, parentNameToInitializersMap) &&
24
+ contractInitializers.length === 0 &&
25
+ !(0, run_1.skipCheck)('missing-initializer', contractDef)) {
26
+ yield {
27
+ kind: 'missing-initializer',
28
+ src: decodeSrc(contractDef),
29
+ };
30
+ }
31
+ // Linearized list of parent contracts that have initializers
32
+ const expectedLinearized = [...parentNameToInitializersMap.keys()];
33
+ // The parent contracts that need to be directly initialized by this contract, which excludes parents that are initialized by other parents.
34
+ // Calling these will initialize all parent contracts so that the entire state is initialized in one transaction.
35
+ const expectedDirectCalls = remainingParents;
36
+ for (const contractInitializer of contractInitializers) {
37
+ yield* getInitializerCallExceptions(contractInitializer, expectedLinearized, expectedDirectCalls, parentNameToInitializersMap, contractDef, deref, decodeSrc);
38
+ }
39
+ }
40
+ }
41
+ function getLinearizedParentContracts(contractDef, deref) {
42
+ const parents = contractDef.linearizedBaseContracts.map(base => deref('ContractDefinition', base));
43
+ parents.reverse(); // use most derived first
44
+ parents.pop(); // remove self
45
+ return parents;
46
+ }
47
+ /**
48
+ * Gets a map of parent contract names to their possible initializers.
49
+ * If a parent contract has no initializers, it is not included in the map.
50
+ */
51
+ function getParentNameToInitializersMap(linearizedParentContracts) {
52
+ const map = new Map();
53
+ for (const parent of linearizedParentContracts) {
54
+ const initializers = getPossibleInitializers(parent, true);
55
+ if (initializers.length > 0) {
56
+ map.set(parent.name, initializers);
57
+ }
58
+ }
59
+ return map;
60
+ }
61
+ /**
62
+ * Returns true if this contract must have its own initializer to call parent initializers.
63
+ *
64
+ * If there are multiple parents with initializers, regardless of whether they are internal or public,
65
+ * this contract must have its own initializer to call them so that the state is initialized in one transaction.
66
+ *
67
+ * Otherwise, if there is only one parent with initializers, they only need to be called if they are internal, since public initializers can be called directly.
68
+ */
69
+ function checkNeedsInitialization(remainingParents, parentNameToInitializersMap) {
70
+ if (remainingParents.length > 1) {
71
+ return true;
72
+ }
73
+ const [parent] = remainingParents;
74
+ const parentInitializers = parentNameToInitializersMap.get(parent);
75
+ return parentInitializers.every(init => init.visibility === 'internal');
76
+ }
77
+ /**
78
+ * Returns parent contract names that are not initialized by other parent contracts,
79
+ * keeping the same order as they appear in the original linearization.
80
+ */
81
+ function getParentsNotInitializedByOtherParents(parentNameToInitializersMap) {
82
+ const remainingParents = [...parentNameToInitializersMap.keys()];
83
+ for (const parent of remainingParents) {
84
+ const parentInitializers = parentNameToInitializersMap.get(parent);
85
+ for (const initializer of parentInitializers) {
86
+ const expressionStatements = initializer.body?.statements?.filter(stmt => stmt.nodeType === 'ExpressionStatement') ?? [];
87
+ for (const stmt of expressionStatements) {
88
+ const fnCall = stmt.expression;
89
+ if (fnCall.nodeType === 'FunctionCall' &&
90
+ (fnCall.expression.nodeType === 'Identifier' || fnCall.expression.nodeType === 'MemberAccess')) {
91
+ const referencedFn = fnCall.expression.referencedDeclaration;
92
+ if (referencedFn) {
93
+ const earlierParents = remainingParents.slice(0, remainingParents.indexOf(parent));
94
+ const callsEarlierParentInitializer = earlierParents.find(base => parentNameToInitializersMap.get(base).some(init => init.id === referencedFn));
95
+ if (callsEarlierParentInitializer) {
96
+ remainingParents.splice(remainingParents.indexOf(callsEarlierParentInitializer), 1);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ return remainingParents;
104
+ }
105
+ /**
106
+ * Reports exceptions for missing initializer calls, duplicate initializer calls, and incorrect initializer order.
107
+ *
108
+ * @param contractInitializer An initializer function for the current contract
109
+ * @param expectedLinearized Linearized list of parent contracts that have initializers
110
+ * @param expectedDirectCalls The parent contracts that need to be directly initialized by this contract
111
+ * @param parentNameToInitializersMap Map of parent contract names to their possible initializers
112
+ * @param initializersCalledByParents List of parent initializers that have already been called by other parents
113
+ * @param contractDef The current contract
114
+ * @param deref AST dereferencer
115
+ * @param decodeSrc Source decoder
116
+ */
117
+ function* getInitializerCallExceptions(contractInitializer, expectedLinearized, expectedDirectCalls, parentNameToInitializersMap, contractDef, deref, decodeSrc) {
118
+ const foundParents = [];
119
+ const remainingLinearized = [...expectedLinearized];
120
+ const remainingDirectCalls = [...expectedDirectCalls];
121
+ const calledInitializerIds = [];
122
+ const expressionStatements = contractInitializer.body?.statements?.filter(stmt => stmt.nodeType === 'ExpressionStatement') ?? [];
123
+ for (const stmt of expressionStatements) {
124
+ const fnCall = stmt.expression;
125
+ if (fnCall.nodeType === 'FunctionCall' &&
126
+ (fnCall.expression.nodeType === 'Identifier' || fnCall.expression.nodeType === 'MemberAccess')) {
127
+ let recursiveFunctionIds = [];
128
+ const referencedFn = fnCall.expression.referencedDeclaration;
129
+ if (referencedFn) {
130
+ recursiveFunctionIds = getRecursiveFunctionIds(referencedFn, deref);
131
+ }
132
+ // For each recursively called function, if it is a parent initializer, then:
133
+ // - Check if it was already called (duplicate call)
134
+ // - Otherwise, check if the parent initializer is called in linearized order
135
+ for (const calledFn of recursiveFunctionIds) {
136
+ for (const parent of parentNameToInitializersMap.keys()) {
137
+ const parentInitializers = parentNameToInitializersMap.get(parent);
138
+ const callsParentInitializer = parentInitializers.find(init => init.id === calledFn);
139
+ if (calledFn && callsParentInitializer) {
140
+ const duplicate = calledInitializerIds.includes(calledFn);
141
+ if (duplicate &&
142
+ !(0, run_1.skipCheck)('duplicate-initializer-call', contractDef) &&
143
+ !(0, run_1.skipCheck)('duplicate-initializer-call', contractInitializer) &&
144
+ !(0, run_1.skipCheck)('duplicate-initializer-call', stmt)) {
145
+ yield {
146
+ kind: 'duplicate-initializer-call',
147
+ src: decodeSrc(fnCall),
148
+ parentInitializer: callsParentInitializer.name,
149
+ parentContract: parent,
150
+ };
151
+ }
152
+ calledInitializerIds.push(calledFn);
153
+ // Omit multiple initializer calls of the same parent via different functions e.g. `__X_init` which calls `__X_init_unchained`
154
+ if (!foundParents.includes(parent)) {
155
+ foundParents.push(parent);
156
+ const indexLinearized = remainingLinearized.indexOf(parent);
157
+ if (
158
+ // Omit duplicate calls to avoid treating them as out of order. Duplicates are either reported above or they were skipped.
159
+ !duplicate &&
160
+ // If the parent is not the next expected linearized parent, report it as out of order
161
+ indexLinearized !== 0 &&
162
+ !(0, run_1.skipCheck)('incorrect-initializer-order', contractDef) &&
163
+ !(0, run_1.skipCheck)('incorrect-initializer-order', contractInitializer)) {
164
+ yield {
165
+ kind: 'incorrect-initializer-order',
166
+ src: decodeSrc(fnCall),
167
+ expectedLinearization: expectedDirectCalls,
168
+ foundOrder: foundParents,
169
+ };
170
+ }
171
+ if (indexLinearized !== -1) {
172
+ remainingLinearized.splice(indexLinearized, 1);
173
+ }
174
+ const indexDirect = remainingDirectCalls.indexOf(parent);
175
+ if (indexDirect !== -1) {
176
+ remainingDirectCalls.splice(indexDirect, 1);
177
+ }
178
+ }
179
+ }
180
+ }
181
+ }
182
+ }
183
+ }
184
+ // Report any remaining parents that were not directly initialized
185
+ if (remainingDirectCalls.length > 0 &&
186
+ !(0, run_1.skipCheck)('missing-initializer-call', contractDef) &&
187
+ !(0, run_1.skipCheck)('missing-initializer-call', contractInitializer)) {
188
+ yield {
189
+ kind: 'missing-initializer-call',
190
+ src: decodeSrc(contractInitializer),
191
+ parentContracts: remainingDirectCalls,
192
+ };
193
+ }
194
+ }
195
+ /**
196
+ * Gets the IDs of all functions that are recursively called by the given function, including the given function itself at the end of the list.
197
+ *
198
+ * @param referencedFn The ID of the function to start from
199
+ * @param deref AST dereferencer
200
+ * @param visited Set of function IDs that have already been visited
201
+ * @returns The IDs of all functions that are recursively called by the given function, including the given function itself at the end of the list.
202
+ */
203
+ function getRecursiveFunctionIds(referencedFn, deref, visited) {
204
+ const result = [];
205
+ if (visited === undefined) {
206
+ visited = new Set();
207
+ }
208
+ if (visited.has(referencedFn)) {
209
+ return result;
210
+ }
211
+ else {
212
+ visited.add(referencedFn);
213
+ }
214
+ const fn = deref('FunctionDefinition', referencedFn);
215
+ const expressionStatements = fn.body?.statements?.filter(stmt => stmt.nodeType === 'ExpressionStatement') ?? [];
216
+ for (const stmt of expressionStatements) {
217
+ const fnCall = stmt.expression;
218
+ if (fnCall.nodeType === 'FunctionCall' &&
219
+ (fnCall.expression.nodeType === 'Identifier' || fnCall.expression.nodeType === 'MemberAccess')) {
220
+ const referencedId = fnCall.expression.referencedDeclaration;
221
+ if (referencedId) {
222
+ result.push(...getRecursiveFunctionIds(referencedId, deref, visited));
223
+ }
224
+ }
225
+ }
226
+ result.push(referencedFn);
227
+ return result;
228
+ }
229
+ /**
230
+ * Get all functions that could be initializers. Does not include private functions.
231
+ * For parent contracts, only internal and public functions which contain statements are included.
232
+ */
233
+ function getPossibleInitializers(contractDef, isParentContract) {
234
+ const fns = [...(0, utils_1.findAll)('FunctionDefinition', contractDef)];
235
+ return fns.filter(fnDef => (fnDef.modifiers.some(modifier => ['initializer', 'onlyInitializing'].includes(modifier.modifierName.name)) ||
236
+ ['initialize', 'initializer'].includes(fnDef.name)) &&
237
+ // Skip virtual functions without a body, since that indicates an abstract function and is not itself an initializer
238
+ !(fnDef.virtual && !fnDef.body) &&
239
+ // Ignore private functions, since they cannot be called outside the contract
240
+ fnDef.visibility !== 'private' &&
241
+ // For parent contracts, only internal and public functions which contain statements need to be called
242
+ (isParentContract
243
+ ? fnDef.body?.statements?.length && (fnDef.visibility === 'internal' || fnDef.visibility === 'public')
244
+ : true));
245
+ }
246
+ //# sourceMappingURL=initializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializer.js","sourceRoot":"","sources":["../../../src/validate/run/initializer.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { Node } from 'solidity-ast/node';
1
2
  import { SolcOutput, SolcInput } from '../solc-api';
2
3
  import { SrcDecoder } from '../src-decoder';
3
4
  import { Version } from '../version';
@@ -15,8 +16,9 @@ export interface ContractValidation {
15
16
  layout: StorageLayout;
16
17
  solcVersion?: string;
17
18
  }
18
- export declare const errorKinds: readonly ["state-variable-assignment", "state-variable-immutable", "external-library-linking", "struct-definition", "enum-definition", "constructor", "delegatecall", "selfdestruct", "missing-public-upgradeto", "internal-function-storage"];
19
- export type ValidationError = ValidationErrorConstructor | ValidationErrorOpcode | ValidationErrorWithName | ValidationErrorUpgradeability;
19
+ export declare const errorKinds: readonly ["state-variable-assignment", "state-variable-immutable", "external-library-linking", "struct-definition", "enum-definition", "constructor", "delegatecall", "selfdestruct", "missing-public-upgradeto", "internal-function-storage", "missing-initializer", "missing-initializer-call", "duplicate-initializer-call", "incorrect-initializer-order"];
20
+ export declare const convertToWarnings: (typeof errorKinds)[number][];
21
+ export type ValidationError = ValidationErrorConstructor | ValidationErrorOpcode | ValidationErrorWithName | ValidationErrorUpgradeability | ValidationExceptionInitializer;
20
22
  interface ValidationErrorBase {
21
23
  src: string;
22
24
  kind: (typeof errorKinds)[number];
@@ -25,6 +27,24 @@ interface ValidationErrorWithName extends ValidationErrorBase {
25
27
  name: string;
26
28
  kind: 'state-variable-assignment' | 'state-variable-immutable' | 'external-library-linking' | 'struct-definition' | 'enum-definition' | 'internal-function-storage';
27
29
  }
30
+ interface ValidationErrorMissingInitializer extends ValidationErrorBase {
31
+ kind: 'missing-initializer';
32
+ }
33
+ interface ValidationErrorMissingInitializerCall extends ValidationErrorBase {
34
+ kind: 'missing-initializer-call';
35
+ parentContracts: string[];
36
+ }
37
+ interface ValidationErrorDuplicateInitializerCall extends ValidationErrorBase {
38
+ kind: 'duplicate-initializer-call';
39
+ parentInitializer: string;
40
+ parentContract: string;
41
+ }
42
+ interface ValidationWarningIncorrectInitializerOrder extends ValidationErrorBase {
43
+ kind: 'incorrect-initializer-order';
44
+ expectedLinearization: string[];
45
+ foundOrder: string[];
46
+ }
47
+ export type ValidationExceptionInitializer = ValidationErrorMissingInitializer | ValidationErrorMissingInitializerCall | ValidationErrorDuplicateInitializerCall | ValidationWarningIncorrectInitializerOrder;
28
48
  interface ValidationErrorConstructor extends ValidationErrorBase {
29
49
  kind: 'constructor';
30
50
  contract: string;
@@ -37,6 +57,7 @@ interface ValidationErrorUpgradeability extends ValidationErrorBase {
37
57
  kind: 'missing-public-upgradeto';
38
58
  }
39
59
  export declare function getAnnotationArgs(doc: string, tag: string): string[];
60
+ export declare function skipCheck(error: ValidationError['kind'], node: Node): boolean;
40
61
  /**
41
62
  * Runs validations on the given solc output.
42
63
  *
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/validate/run.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAgB,SAAS,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,OAAO,EAAc,MAAM,YAAY,CAAC;AACjD,OAAO,EAAyB,aAAa,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAQlD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,UAAU,gPAWb,CAAC;AAEX,MAAM,MAAM,eAAe,GACvB,0BAA0B,GAC1B,qBAAqB,GACrB,uBAAuB,GACvB,6BAA6B,CAAC;AAElC,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,UAAU,uBAAwB,SAAQ,mBAAmB;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EACA,2BAA2B,GAC3B,0BAA0B,GAC1B,0BAA0B,GAC1B,mBAAmB,GACnB,iBAAiB,GACjB,2BAA2B,CAAC;CACjC;AAED,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,qBAAsB,SAAQ,mBAAmB;IACzD,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC;CACvC;AAkBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,IAAI,qBAAqB,CAExF;AAED,UAAU,6BAA8B,SAAQ,mBAAmB;IACjE,IAAI,EAAE,0BAA0B,CAAC;CAClC;AAYD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,YAEzD;AAWD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,UAAU,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,SAAS,EACrB,gBAAgB,CAAC,EAAE,UAAU,GAC5B,iBAAiB,CAmFnB"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/validate/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAYzC,OAAO,EAAE,UAAU,EAAgB,SAAS,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,OAAO,EAAc,MAAM,YAAY,CAAC;AACjD,OAAO,EAAyB,aAAa,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AASlD,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,UAAU,gWAeb,CAAC;AAEX,eAAO,MAAM,iBAAiB,EAAE,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,EAA6C,CAAC;AAEzG,MAAM,MAAM,eAAe,GACvB,0BAA0B,GAC1B,qBAAqB,GACrB,uBAAuB,GACvB,6BAA6B,GAC7B,8BAA8B,CAAC;AAEnC,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,UAAU,uBAAwB,SAAQ,mBAAmB;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EACA,2BAA2B,GAC3B,0BAA0B,GAC1B,0BAA0B,GAC1B,mBAAmB,GACnB,iBAAiB,GACjB,2BAA2B,CAAC;CACjC;AAED,UAAU,iCAAkC,SAAQ,mBAAmB;IACrE,IAAI,EAAE,qBAAqB,CAAC;CAC7B;AAED,UAAU,qCAAsC,SAAQ,mBAAmB;IACzE,IAAI,EAAE,0BAA0B,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,UAAU,uCAAwC,SAAQ,mBAAmB;IAC3E,IAAI,EAAE,4BAA4B,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,0CAA2C,SAAQ,mBAAmB;IAC9E,IAAI,EAAE,6BAA6B,CAAC;IACpC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,8BAA8B,GACtC,iCAAiC,GACjC,qCAAqC,GACrC,uCAAuC,GACvC,0CAA0C,CAAC;AAE/C,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,qBAAsB,SAAQ,mBAAmB;IACzD,IAAI,EAAE,cAAc,GAAG,cAAc,CAAC;CACvC;AAkBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,IAAI,qBAAqB,CAExF;AAED,UAAU,6BAA8B,SAAQ,mBAAmB;IACjE,IAAI,EAAE,0BAA0B,CAAC;CAClC;AAYD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,YAEzD;AAMD,wBAAgB,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAG7E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,UAAU,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,SAAS,EACrB,gBAAgB,CAAC,EAAE,UAAU,GAC5B,iBAAiB,CAoFnB"}
@@ -3,9 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.errorKinds = void 0;
6
+ exports.convertToWarnings = exports.errorKinds = void 0;
7
7
  exports.isOpcodeError = isOpcodeError;
8
8
  exports.getAnnotationArgs = getAnnotationArgs;
9
+ exports.skipCheck = skipCheck;
9
10
  exports.validate = validate;
10
11
  const utils_1 = require("solidity-ast/utils");
11
12
  const debug_1 = __importDefault(require("../utils/debug"));
@@ -20,6 +21,7 @@ const namespace_1 = require("../storage/namespace");
20
21
  const error_1 = require("../error");
21
22
  const assert_1 = require("../utils/assert");
22
23
  const log_1 = require("../utils/log");
24
+ const initializer_1 = require("./run/initializer");
23
25
  exports.errorKinds = [
24
26
  'state-variable-assignment',
25
27
  'state-variable-immutable',
@@ -31,7 +33,12 @@ exports.errorKinds = [
31
33
  'selfdestruct',
32
34
  'missing-public-upgradeto',
33
35
  'internal-function-storage',
36
+ 'missing-initializer',
37
+ 'missing-initializer-call',
38
+ 'duplicate-initializer-call',
39
+ 'incorrect-initializer-order',
34
40
  ];
41
+ exports.convertToWarnings = ['incorrect-initializer-order'];
35
42
  const OPCODES = {
36
43
  delegatecall: {
37
44
  kind: 'delegatecall',
@@ -128,6 +135,7 @@ function validate(solcOutput, decodeSrc, solcVersion, solcInput, namespacedOutpu
128
135
  // https://github.com/OpenZeppelin/openzeppelin-upgrades/issues/52
129
136
  ...getLinkingErrors(contractDef, bytecode),
130
137
  ...getInternalFunctionStorageErrors(contractDef, deref, decodeSrc),
138
+ ...(0, initializer_1.getInitializerExceptions)(contractDef, deref, decodeSrc),
131
139
  ];
132
140
  validation[key].layout = (0, extract_1.extractStorageLayout)(contractDef, decodeSrc, deref, solcOutput.contracts[source][contractDef.name].storageLayout, getNamespacedCompilationContext(source, contractDef, namespacedOutput));
133
141
  validation[key].methods = [...(0, utils_1.findAll)('FunctionDefinition', contractDef)]