@openzeppelin/upgrades-core 1.42.2 → 1.43.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/provider.d.ts.map +1 -1
- package/dist/provider.js +1 -0
- package/dist/provider.js.map +1 -1
- package/dist/validate/run/initializer.d.ts.map +1 -1
- package/dist/validate/run/initializer.js +42 -10
- package/dist/validate/run/initializer.js.map +1 -1
- package/dist/validate-initializers.test.js +22 -4
- package/dist/validate-initializers.test.js.map +1 -1
- package/package.json +1 -1
- package/src/provider.ts +1 -0
- package/src/validate/run/initializer.ts +65 -19
- package/src/validate-initializers.test.ts +27 -5
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/provider.js
CHANGED
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":";;;AAwCA,oCAEC;AAED,gCAGC;AAED,4CAEC;AAMD,gDAEC;AAKD,4CAEC;AAED,oCASC;AAED,0BAEC;AAED,oBAaC;AAED,0BAGC;AAED,0BAEC;AAED,oDAKC;AAED,sDASC;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":";;;AAwCA,oCAEC;AAED,gCAGC;AAED,4CAEC;AAMD,gDAEC;AAKD,4CAEC;AAED,oCASC;AAED,0BAEC;AAED,oBAaC;AAED,0BAGC;AAED,0BAEC;AAED,oDAKC;AAED,sDASC;AA8BD,oDAWC;AAED,kDAEC;AAhIM,KAAK,UAAU,YAAY,CAAC,QAA0B;IAC3D,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,QAA0B;IACzD,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,QAA0B;IAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,kBAAkB,CAAC,QAA0B;IACjE,OAAO,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,QAA0B;IAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,YAAY,CAChC,QAA0B,EAC1B,OAAe,EACf,QAAgB,EAChB,KAAK,GAAG,QAAQ;IAEhB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,IAAI,GAAG,MAAM,CAAC;AACvB,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,QAA0B,EAAE,OAAe,EAAE,KAAK,GAAG,QAAQ;IACzF,OAAO,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC;AAEM,KAAK,UAAU,IAAI,CACxB,QAA0B,EAC1B,OAAe,EACf,IAAY,EACZ,KAAK,GAAG,QAAQ;IAEhB,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE;QAC/B;YACE,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,IAAI;SACX;QACD,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,QAA0B,EAAE,OAAe,EAAE,KAAc;IACvF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;AACxC,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,QAA0B,EAC1B,MAAc;IAEd,OAAO,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,CAAC;AAEM,KAAK,UAAU,qBAAqB,CACzC,QAA0B,EAC1B,MAAc;IAEd,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAEY,QAAA,YAAY,GAAqC,MAAM,CAAC,MAAM,CAAC;IAC1E,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,QAAQ;IACX,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,OAAO;IACX,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,aAAa;IACjB,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,iBAAiB;IACtB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,iBAAiB;IACzB,KAAK,EAAE,gBAAgB;IACvB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,gBAAgB;IACvB,KAAK,EAAE,gBAAgB;IACvB,KAAK,EAAE,cAAc;IACrB,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,YAAY;CACvB,CAAC,CAAC;AAEI,KAAK,UAAU,oBAAoB,CAAC,QAA0B;IACnE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC3C,kCAAkC;IAClC,2BAA2B;IAC3B,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,oBAAoB,IAAI,IAAI,KAAK,OAAO,CAAC;IACxF,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAAmD;IACrF,OAAO,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC;AAClC,CAAC"}
|
|
@@ -1 +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;
|
|
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;AAE3E,OAAO,EAAE,eAAe,EAAW,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,8BAA8B,EAA+B,MAAM,QAAQ,CAAC;AAIrF;;;;;;GAMG;AACH,wBAAiB,wBAAwB,CACvC,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,UAAU,GACpB,SAAS,CAAC,8BAA8B,CAAC,CA4C3C"}
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getInitializerExceptions = getInitializerExceptions;
|
|
4
4
|
const utils_1 = require("solidity-ast/utils");
|
|
5
5
|
const run_1 = require("../run");
|
|
6
|
+
const annotations_1 = require("../../utils/annotations");
|
|
7
|
+
const log_1 = require("../../utils/log");
|
|
6
8
|
/**
|
|
7
9
|
* Reports if this contract is non-abstract and any of the following are true:
|
|
8
10
|
* - 1. Missing initializer: This contract does not appear to have an initializer, but parent contracts require initialization.
|
|
@@ -15,10 +17,10 @@ function* getInitializerExceptions(contractDef, deref, decodeSrc) {
|
|
|
15
17
|
return;
|
|
16
18
|
}
|
|
17
19
|
const linearizedParentContracts = getLinearizedParentContracts(contractDef, deref);
|
|
18
|
-
const parentNameToInitializersMap = getParentNameToInitializersMap(linearizedParentContracts);
|
|
20
|
+
const parentNameToInitializersMap = getParentNameToInitializersMap(linearizedParentContracts, decodeSrc);
|
|
19
21
|
const remainingParents = getParentsNotInitializedByOtherParents(parentNameToInitializersMap);
|
|
20
22
|
if (remainingParents.length > 0) {
|
|
21
|
-
const contractInitializers = getPossibleInitializers(contractDef, false);
|
|
23
|
+
const contractInitializers = getPossibleInitializers(contractDef, false, decodeSrc);
|
|
22
24
|
// Report if there is no initializer but parents need initialization
|
|
23
25
|
if (checkNeedsInitialization(remainingParents, parentNameToInitializersMap) &&
|
|
24
26
|
contractInitializers.length === 0 &&
|
|
@@ -48,10 +50,10 @@ function getLinearizedParentContracts(contractDef, deref) {
|
|
|
48
50
|
* Gets a map of parent contract names to their possible initializers.
|
|
49
51
|
* If a parent contract has no initializers, it is not included in the map.
|
|
50
52
|
*/
|
|
51
|
-
function getParentNameToInitializersMap(linearizedParentContracts) {
|
|
53
|
+
function getParentNameToInitializersMap(linearizedParentContracts, decodeSrc) {
|
|
52
54
|
const map = new Map();
|
|
53
55
|
for (const parent of linearizedParentContracts) {
|
|
54
|
-
const initializers = getPossibleInitializers(parent, true);
|
|
56
|
+
const initializers = getPossibleInitializers(parent, true, decodeSrc);
|
|
55
57
|
if (initializers.length > 0) {
|
|
56
58
|
map.set(parent.name, initializers);
|
|
57
59
|
}
|
|
@@ -240,20 +242,50 @@ function getRecursiveFunctionIds(deref, functionDef, visited) {
|
|
|
240
242
|
return result;
|
|
241
243
|
}
|
|
242
244
|
/**
|
|
243
|
-
* Get all functions that
|
|
244
|
-
*
|
|
245
|
+
* Get all functions that are annotated as initializers or are inferred to be initializers.
|
|
246
|
+
* Logs a note if any reinitializer is found.
|
|
245
247
|
*/
|
|
246
|
-
function getPossibleInitializers(contractDef, isParentContract) {
|
|
248
|
+
function getPossibleInitializers(contractDef, isParentContract, decodeSrc) {
|
|
247
249
|
const fns = [...(0, utils_1.findAll)('FunctionDefinition', contractDef)];
|
|
248
|
-
return fns.filter(
|
|
249
|
-
|
|
250
|
+
return fns.filter((fnDef) => {
|
|
251
|
+
const validateAsInitializer = hasValidateAsInitializerAnnotation(fnDef, decodeSrc);
|
|
252
|
+
if (!validateAsInitializer && fnDef.modifiers.some(modifier => 'reinitializer' === modifier.modifierName.name)) {
|
|
253
|
+
(0, log_1.logNote)(`Reinitializers are not included in validations by default`, [
|
|
254
|
+
`${decodeSrc(fnDef)}: If you want to validate this function as an initializer, annotate it with '@custom:oz-upgrades-validate-as-initializer'`,
|
|
255
|
+
]);
|
|
256
|
+
}
|
|
257
|
+
return inferPossibleInitializer(fnDef, validateAsInitializer, isParentContract);
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
function hasValidateAsInitializerAnnotation(node, decodeSrc) {
|
|
261
|
+
const doc = (0, annotations_1.getDocumentation)(node);
|
|
262
|
+
const tag = 'oz-upgrades-validate-as-initializer';
|
|
263
|
+
const validateAsInitializer = (0, annotations_1.hasAnnotationTag)(doc, tag);
|
|
264
|
+
if (validateAsInitializer) {
|
|
265
|
+
const annotationArgs = (0, annotations_1.getAnnotationArgs)(doc, tag);
|
|
266
|
+
if (annotationArgs.length !== 0) {
|
|
267
|
+
throw new Error(`${decodeSrc(node)}: @custom:${tag} annotation must not have any arguments`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return validateAsInitializer;
|
|
271
|
+
}
|
|
272
|
+
function hasInitializerNameOrModifier(fnDef) {
|
|
273
|
+
return (fnDef.modifiers.some(modifier => ['initializer', 'onlyInitializing'].includes(modifier.modifierName.name)) ||
|
|
274
|
+
['initialize', 'initializer'].includes(fnDef.name));
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Infers whether a function could be an initializer. Does not include private functions.
|
|
278
|
+
* For parent contracts, only internal and public functions which contain statements are included.
|
|
279
|
+
*/
|
|
280
|
+
function inferPossibleInitializer(fnDef, validateAsInitializer, isParentContract) {
|
|
281
|
+
return ((validateAsInitializer || hasInitializerNameOrModifier(fnDef)) &&
|
|
250
282
|
// Skip virtual functions without a body, since that indicates an abstract function and is not itself an initializer
|
|
251
283
|
!(fnDef.virtual && !fnDef.body) &&
|
|
252
284
|
// Ignore private functions, since they cannot be called outside the contract
|
|
253
285
|
fnDef.visibility !== 'private' &&
|
|
254
286
|
// For parent contracts, only internal and public functions which contain statements need to be called
|
|
255
287
|
(isParentContract
|
|
256
|
-
? fnDef.body?.statements?.length && (fnDef.visibility === 'internal' || fnDef.visibility === 'public')
|
|
288
|
+
? Boolean(fnDef.body?.statements?.length) && (fnDef.visibility === 'internal' || fnDef.visibility === 'public')
|
|
257
289
|
: true));
|
|
258
290
|
}
|
|
259
291
|
//# sourceMappingURL=initializer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initializer.js","sourceRoot":"","sources":["../../../src/validate/run/initializer.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"initializer.js","sourceRoot":"","sources":["../../../src/validate/run/initializer.ts"],"names":[],"mappings":";;AAeA,4DAgDC;AA7DD,8CAA8D;AAE9D,gCAAqF;AACrF,yDAAgG;AAChG,yCAA0C;AAE1C;;;;;;GAMG;AACH,QAAe,CAAC,CAAC,wBAAwB,CACvC,WAA+B,EAC/B,KAAsB,EACtB,SAAqB;IAErB,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,yBAAyB,GAAG,4BAA4B,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACnF,MAAM,2BAA2B,GAAG,8BAA8B,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC;IAEzG,MAAM,gBAAgB,GAAG,sCAAsC,CAAC,2BAA2B,CAAC,CAAC;IAE7F,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAEpF,oEAAoE;QACpE,IACE,wBAAwB,CAAC,gBAAgB,EAAE,2BAA2B,CAAC;YACvE,oBAAoB,CAAC,MAAM,KAAK,CAAC;YACjC,CAAC,IAAA,eAAS,EAAC,qBAAqB,EAAE,WAAW,CAAC,EAC9C,CAAC;YACD,MAAM;gBACJ,IAAI,EAAE,qBAAqB;gBAC3B,GAAG,EAAE,SAAS,CAAC,WAAW,CAAC;aAC5B,CAAC;QACJ,CAAC;QAED,6DAA6D;QAC7D,MAAM,kBAAkB,GAAa,CAAC,GAAG,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7E,4IAA4I;QAC5I,iHAAiH;QACjH,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;QAE7C,KAAK,MAAM,mBAAmB,IAAI,oBAAoB,EAAE,CAAC;YACvD,KAAK,CAAC,CAAC,4BAA4B,CACjC,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,WAAW,EACX,KAAK,EACL,SAAS,CACV,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,WAA+B,EAAE,KAAsB;IAC3F,MAAM,OAAO,GAAG,WAAW,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC;IACnG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,yBAAyB;IAC5C,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,cAAc;IAC7B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAS,8BAA8B,CAAC,yBAA+C,EAAE,SAAqB;IAC5G,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACtB,KAAK,MAAM,MAAM,IAAI,yBAAyB,EAAE,CAAC;QAC/C,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACtE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AAEH,SAAS,wBAAwB,CAC/B,gBAA0B,EAC1B,2BAA8D;IAE9D,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC;IAClC,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;IACpE,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,SAAS,sCAAsC,CAC7C,2BAA8D;IAE9D,MAAM,gBAAgB,GAAG,CAAC,GAAG,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC;IAEjE,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;QACpE,KAAK,MAAM,WAAW,IAAI,kBAAkB,EAAE,CAAC;YAC7C,MAAM,oBAAoB,GACxB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,qBAAqB,CAAC,IAAI,EAAE,CAAC;YAC9F,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC/B,IACE,MAAM,CAAC,QAAQ,KAAK,cAAc;oBAClC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,YAAY,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,cAAc,CAAC,EAC9F,CAAC;oBACD,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC;oBAC7D,IAAI,YAAY,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;wBACrC,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;wBACnF,MAAM,6BAA6B,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/D,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC,CAC9E,CAAC;wBACF,IAAI,6BAA6B,EAAE,CAAC;4BAClC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC,CAAC;wBACtF,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,2BAA2B,CAClC,KAAsB,EACtB,qBAAgD,EAChD,QAAmD;IAEnD,IAAI,qBAAqB,IAAI,qBAAqB,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,WAAW,GAAG,IAAA,sBAAgB,EAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QACnE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,QAAQ,CAAC,WAAW,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,QAAQ,CAAC,CAAC,4BAA4B,CACpC,mBAAuC,EACvC,kBAA4B,EAC5B,mBAA6B,EAC7B,2BAA8D,EAC9D,WAA+B,EAC/B,KAAsB,EACtB,SAAqB;IAErB,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,mBAAmB,GAAa,CAAC,GAAG,kBAAkB,CAAC,CAAC;IAC9D,MAAM,oBAAoB,GAAa,CAAC,GAAG,mBAAmB,CAAC,CAAC;IAChE,MAAM,oBAAoB,GAAa,EAAE,CAAC;IAE1C,MAAM,oBAAoB,GACxB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,qBAAqB,CAAC,IAAI,EAAE,CAAC;IACtG,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/B,IACE,MAAM,CAAC,QAAQ,KAAK,cAAc;YAClC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,YAAY,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,cAAc,CAAC,EAC9F,CAAC;YACD,IAAI,oBAAoB,GAAa,EAAE,CAAC;YACxC,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,WAA+B,EAAE,EAAE;gBAC9G,oBAAoB,GAAG,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;YAEH,6EAA6E;YAC7E,oDAAoD;YACpD,6EAA6E;YAC7E,KAAK,MAAM,QAAQ,IAAI,oBAAoB,EAAE,CAAC;gBAC5C,KAAK,MAAM,MAAM,IAAI,2BAA2B,CAAC,IAAI,EAAE,EAAE,CAAC;oBACxD,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;oBACpE,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;oBAErF,IAAI,QAAQ,IAAI,sBAAsB,EAAE,CAAC;wBACvC,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;wBAC1D,IACE,SAAS;4BACT,CAAC,IAAA,eAAS,EAAC,4BAA4B,EAAE,WAAW,CAAC;4BACrD,CAAC,IAAA,eAAS,EAAC,4BAA4B,EAAE,mBAAmB,CAAC;4BAC7D,CAAC,IAAA,eAAS,EAAC,4BAA4B,EAAE,IAAI,CAAC,EAC9C,CAAC;4BACD,MAAM;gCACJ,IAAI,EAAE,4BAA4B;gCAClC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC;gCACtB,iBAAiB,EAAE,sBAAsB,CAAC,IAAI;gCAC9C,cAAc,EAAE,MAAM;6BACvB,CAAC;wBACJ,CAAC;wBACD,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAEpC,8HAA8H;wBAC9H,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;4BACnC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BAE1B,MAAM,eAAe,GAAG,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;4BAC5D;4BACE,0HAA0H;4BAC1H,CAAC,SAAS;gCACV,sFAAsF;gCACtF,eAAe,KAAK,CAAC;gCACrB,CAAC,IAAA,eAAS,EAAC,6BAA6B,EAAE,WAAW,CAAC;gCACtD,CAAC,IAAA,eAAS,EAAC,6BAA6B,EAAE,mBAAmB,CAAC,EAC9D,CAAC;gCACD,MAAM;oCACJ,IAAI,EAAE,6BAA6B;oCACnC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC;oCACtB,qBAAqB,EAAE,mBAAmB;oCAC1C,UAAU,EAAE,YAAY;iCACzB,CAAC;4BACJ,CAAC;4BACD,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;gCAC3B,mBAAmB,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;4BACjD,CAAC;4BAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;4BACzD,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;gCACvB,oBAAoB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;4BAC9C,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,IACE,oBAAoB,CAAC,MAAM,GAAG,CAAC;QAC/B,CAAC,IAAA,eAAS,EAAC,0BAA0B,EAAE,WAAW,CAAC;QACnD,CAAC,IAAA,eAAS,EAAC,0BAA0B,EAAE,mBAAmB,CAAC,EAC3D,CAAC;QACD,MAAM;YACJ,IAAI,EAAE,0BAA0B;YAChC,GAAG,EAAE,SAAS,CAAC,mBAAmB,CAAC;YACnC,eAAe,EAAE,oBAAoB;SACtC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAC9B,KAAsB,EACtB,WAA+B,EAC/B,OAAqB;IAErB,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,oBAAoB,GACxB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,qBAAqB,CAAC,IAAI,EAAE,CAAC;IAC9F,KAAK,MAAM,IAAI,IAAI,oBAAoB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/B,IACE,MAAM,CAAC,QAAQ,KAAK,cAAc;YAClC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,YAAY,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,cAAc,CAAC,EAC9F,CAAC;YACD,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,WAA+B,EAAE,EAAE;gBAC9G,MAAM,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAE5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAC9B,WAA+B,EAC/B,gBAAyB,EACzB,SAAqB;IAErB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAA,eAAO,EAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5D,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,KAAyB,EAAE,EAAE;QAC9C,MAAM,qBAAqB,GAAG,kCAAkC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACnF,IAAI,CAAC,qBAAqB,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,KAAK,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/G,IAAA,aAAO,EAAC,2DAA2D,EAAE;gBACnE,GAAG,SAAS,CAAC,KAAK,CAAC,2HAA2H;aAC/I,CAAC,CAAC;QACL,CAAC;QAED,OAAO,wBAAwB,CAAC,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kCAAkC,CAAC,IAAU,EAAE,SAAqB;IAC3E,MAAM,GAAG,GAAG,IAAA,8BAAgB,EAAC,IAAI,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,qCAAqC,CAAC;IAClD,MAAM,qBAAqB,GAAG,IAAA,8BAAgB,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzD,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,cAAc,GAAG,IAAA,+BAAiB,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,GAAG,yCAAyC,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAyB;IAC7D,OAAO,CACL,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC1G,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CACnD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAC/B,KAAyB,EACzB,qBAA8B,EAC9B,gBAAyB;IAEzB,OAAO,CACL,CAAC,qBAAqB,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAC;QAC9D,oHAAoH;QACpH,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/B,6EAA6E;QAC7E,KAAK,CAAC,UAAU,KAAK,SAAS;QAC9B,sGAAsG;QACtG,CAAC,gBAAgB;YACf,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC;YAC/G,CAAC,CAAC,IAAI,CAAC,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -64,9 +64,15 @@ testRejects('MissingInitializer_Bad', 'transparent', {
|
|
|
64
64
|
});
|
|
65
65
|
testAccepts('MissingInitializer_UnsafeAllow_Contract', 'transparent');
|
|
66
66
|
testOverride('MissingInitializer_Bad', 'transparent', { unsafeAllow: ['missing-initializer'] });
|
|
67
|
+
testAccepts('ValidateAsInitializer_Ok', 'transparent');
|
|
68
|
+
testRejects('Reinitializer_NotDetected', 'transparent', {
|
|
69
|
+
contains: ['Missing initializer'],
|
|
70
|
+
count: 1,
|
|
71
|
+
});
|
|
72
|
+
testAccepts('Reinitializer_ValidateAsInitializer_Ok', 'transparent');
|
|
67
73
|
testAccepts('InitializationOrder_Ok', 'transparent');
|
|
68
74
|
testAccepts('InitializationOrder_Ok_2', 'transparent');
|
|
69
|
-
testAccepts('InitializationOrder_WrongOrder_Bad', 'transparent'); // warn 'Expected
|
|
75
|
+
testAccepts('InitializationOrder_WrongOrder_Bad', 'transparent'); // warn 'Expected: A, B, C'
|
|
70
76
|
testAccepts('InitializationOrder_WrongOrder_UnsafeAllow_Contract', 'transparent');
|
|
71
77
|
testAccepts('InitializationOrder_WrongOrder_UnsafeAllow_Function', 'transparent');
|
|
72
78
|
testOverride('InitializationOrder_WrongOrder_Bad', 'transparent', { unsafeAllow: ['incorrect-initializer-order'] }); // skips the warning
|
|
@@ -85,7 +91,19 @@ testAccepts('InitializationOrder_Duplicate_UnsafeAllow_Contract', 'transparent')
|
|
|
85
91
|
testAccepts('InitializationOrder_Duplicate_UnsafeAllow_Function', 'transparent');
|
|
86
92
|
testAccepts('InitializationOrder_Duplicate_UnsafeAllow_Call', 'transparent');
|
|
87
93
|
testOverride('InitializationOrder_Duplicate_Bad', 'transparent', { unsafeAllow: ['duplicate-initializer-call'] });
|
|
88
|
-
testAccepts('InitializationOrder_UnsafeAllowDuplicate_But_WrongOrder', 'transparent'); // warn 'Expected
|
|
94
|
+
testAccepts('InitializationOrder_UnsafeAllowDuplicate_But_WrongOrder', 'transparent'); // warn 'Expected: A, B, C'
|
|
95
|
+
testAccepts('InitializationOrder_ValidateAsInitializer_Ok', 'transparent');
|
|
96
|
+
testAccepts('InitializationOrder_ValidateAsInitializer_WrongOrder', 'transparent'); // warn 'Expected: A, B, C, Parent_ValidateAsInitializer'
|
|
97
|
+
testRejects('InitializationOrder_ValidateAsInitializer_MissingCall', 'transparent', {
|
|
98
|
+
contains: ['Missing initializer calls for one or more parent contracts: `Parent_ValidateAsInitializer`'],
|
|
99
|
+
count: 1,
|
|
100
|
+
});
|
|
101
|
+
testRejects('InitializationOrder_ValidateAsInitializer_DuplicateCall', 'transparent', {
|
|
102
|
+
contains: ['Duplicate calls found to initializer `parentAssumeInit` for contract `Parent_ValidateAsInitializer`'],
|
|
103
|
+
count: 1,
|
|
104
|
+
});
|
|
105
|
+
testAccepts('Parent_ValidateAsInitializer_External_Ok', 'transparent');
|
|
106
|
+
testAccepts('Child_Of_ValidateAsInitializer_External_Ok', 'transparent');
|
|
89
107
|
testAccepts('WithRequire_Ok', 'transparent');
|
|
90
108
|
testRejects('WithRequire_Bad', 'transparent', {
|
|
91
109
|
contains: ['Missing initializer calls for one or more parent contracts: `Parent__OnlyInitializingModifier`'],
|
|
@@ -137,11 +155,11 @@ testRejects('TransitiveChild_Bad_Parent', 'transparent', {
|
|
|
137
155
|
'Missing initializer calls for one or more parent contracts: `TransitiveGrandparent2`', // occurs twice: missing initializer for child, missing initializer for parent
|
|
138
156
|
],
|
|
139
157
|
count: 2,
|
|
140
|
-
}); // warn 'Expected
|
|
158
|
+
}); // warn 'Expected: TransitiveGrandparent2, TransitiveParent_Bad'
|
|
141
159
|
testRejects('TransitiveChild_Bad_Order', 'transparent', {
|
|
142
160
|
contains: ['Missing initializer calls for one or more parent contracts: `TransitiveGrandparent2`'],
|
|
143
161
|
count: 1,
|
|
144
|
-
}); // warn 'Expected
|
|
162
|
+
}); // warn 'Expected: TransitiveGrandparent2, TransitiveParent_Bad'
|
|
145
163
|
testRejects('TransitiveChild_Good_Order_Bad_Parent', 'transparent', {
|
|
146
164
|
contains: ['Missing initializer calls for one or more parent contracts: `TransitiveGrandparent2`'],
|
|
147
165
|
count: 1,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-initializers.test.js","sourceRoot":"","sources":["../src/validate-initializers.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAAoC;AACpC,qCAAoC;AAEpC,yCAOoB;AACpB,+CAAuD;AAMvD,MAAM,IAAI,GAAG,aAAwB,CAAC;AAEtC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;IACpB,MAAM,SAAS,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAErF,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAmB,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC;QACpC,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC;QAClC,MAAM,SAAS,GAAG,IAAA,oCAAsB,EAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,IAAA,mBAAQ,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IACvE,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,IAAY,EAAE,IAA+B;IAChE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC;AAOD,SAAS,WAAW,CAAC,IAAY,EAAE,IAA+B,EAAE,
|
|
1
|
+
{"version":3,"file":"validate-initializers.test.js","sourceRoot":"","sources":["../src/validate-initializers.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/provider.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ContractDefinition, FunctionDefinition } from 'solidity-ast';
|
|
2
|
+
import type { Node } from 'solidity-ast/node';
|
|
2
3
|
import { ASTDereferencer, findAll } from 'solidity-ast/utils';
|
|
3
4
|
import { SrcDecoder } from '../../src-decoder';
|
|
4
5
|
import { ValidationExceptionInitializer, skipCheck, tryDerefFunction } from '../run';
|
|
6
|
+
import { getAnnotationArgs, getDocumentation, hasAnnotationTag } from '../../utils/annotations';
|
|
7
|
+
import { logNote } from '../../utils/log';
|
|
5
8
|
|
|
6
9
|
/**
|
|
7
10
|
* Reports if this contract is non-abstract and any of the following are true:
|
|
@@ -20,12 +23,12 @@ export function* getInitializerExceptions(
|
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
const linearizedParentContracts = getLinearizedParentContracts(contractDef, deref);
|
|
23
|
-
const parentNameToInitializersMap = getParentNameToInitializersMap(linearizedParentContracts);
|
|
26
|
+
const parentNameToInitializersMap = getParentNameToInitializersMap(linearizedParentContracts, decodeSrc);
|
|
24
27
|
|
|
25
28
|
const remainingParents = getParentsNotInitializedByOtherParents(parentNameToInitializersMap);
|
|
26
29
|
|
|
27
30
|
if (remainingParents.length > 0) {
|
|
28
|
-
const contractInitializers = getPossibleInitializers(contractDef, false);
|
|
31
|
+
const contractInitializers = getPossibleInitializers(contractDef, false, decodeSrc);
|
|
29
32
|
|
|
30
33
|
// Report if there is no initializer but parents need initialization
|
|
31
34
|
if (
|
|
@@ -71,10 +74,10 @@ function getLinearizedParentContracts(contractDef: ContractDefinition, deref: AS
|
|
|
71
74
|
* Gets a map of parent contract names to their possible initializers.
|
|
72
75
|
* If a parent contract has no initializers, it is not included in the map.
|
|
73
76
|
*/
|
|
74
|
-
function getParentNameToInitializersMap(linearizedParentContracts: ContractDefinition[]) {
|
|
77
|
+
function getParentNameToInitializersMap(linearizedParentContracts: ContractDefinition[], decodeSrc: SrcDecoder) {
|
|
75
78
|
const map = new Map();
|
|
76
79
|
for (const parent of linearizedParentContracts) {
|
|
77
|
-
const initializers = getPossibleInitializers(parent, true);
|
|
80
|
+
const initializers = getPossibleInitializers(parent, true, decodeSrc);
|
|
78
81
|
if (initializers.length > 0) {
|
|
79
82
|
map.set(parent.name, initializers);
|
|
80
83
|
}
|
|
@@ -318,22 +321,65 @@ function getRecursiveFunctionIds(
|
|
|
318
321
|
}
|
|
319
322
|
|
|
320
323
|
/**
|
|
321
|
-
* Get all functions that
|
|
322
|
-
*
|
|
324
|
+
* Get all functions that are annotated as initializers or are inferred to be initializers.
|
|
325
|
+
* Logs a note if any reinitializer is found.
|
|
323
326
|
*/
|
|
324
|
-
function getPossibleInitializers(
|
|
327
|
+
function getPossibleInitializers(
|
|
328
|
+
contractDef: ContractDefinition,
|
|
329
|
+
isParentContract: boolean,
|
|
330
|
+
decodeSrc: SrcDecoder,
|
|
331
|
+
): FunctionDefinition[] {
|
|
325
332
|
const fns = [...findAll('FunctionDefinition', contractDef)];
|
|
326
|
-
return fns.filter(
|
|
327
|
-
fnDef
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
333
|
+
return fns.filter((fnDef: FunctionDefinition) => {
|
|
334
|
+
const validateAsInitializer = hasValidateAsInitializerAnnotation(fnDef, decodeSrc);
|
|
335
|
+
if (!validateAsInitializer && fnDef.modifiers.some(modifier => 'reinitializer' === modifier.modifierName.name)) {
|
|
336
|
+
logNote(`Reinitializers are not included in validations by default`, [
|
|
337
|
+
`${decodeSrc(fnDef)}: If you want to validate this function as an initializer, annotate it with '@custom:oz-upgrades-validate-as-initializer'`,
|
|
338
|
+
]);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
return inferPossibleInitializer(fnDef, validateAsInitializer, isParentContract);
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
function hasValidateAsInitializerAnnotation(node: Node, decodeSrc: SrcDecoder): boolean {
|
|
346
|
+
const doc = getDocumentation(node);
|
|
347
|
+
const tag = 'oz-upgrades-validate-as-initializer';
|
|
348
|
+
const validateAsInitializer = hasAnnotationTag(doc, tag);
|
|
349
|
+
if (validateAsInitializer) {
|
|
350
|
+
const annotationArgs = getAnnotationArgs(doc, tag);
|
|
351
|
+
if (annotationArgs.length !== 0) {
|
|
352
|
+
throw new Error(`${decodeSrc(node)}: @custom:${tag} annotation must not have any arguments`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return validateAsInitializer;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
function hasInitializerNameOrModifier(fnDef: FunctionDefinition) {
|
|
359
|
+
return (
|
|
360
|
+
fnDef.modifiers.some(modifier => ['initializer', 'onlyInitializing'].includes(modifier.modifierName.name)) ||
|
|
361
|
+
['initialize', 'initializer'].includes(fnDef.name)
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Infers whether a function could be an initializer. Does not include private functions.
|
|
367
|
+
* For parent contracts, only internal and public functions which contain statements are included.
|
|
368
|
+
*/
|
|
369
|
+
function inferPossibleInitializer(
|
|
370
|
+
fnDef: FunctionDefinition,
|
|
371
|
+
validateAsInitializer: boolean,
|
|
372
|
+
isParentContract: boolean,
|
|
373
|
+
): boolean {
|
|
374
|
+
return (
|
|
375
|
+
(validateAsInitializer || hasInitializerNameOrModifier(fnDef)) &&
|
|
376
|
+
// Skip virtual functions without a body, since that indicates an abstract function and is not itself an initializer
|
|
377
|
+
!(fnDef.virtual && !fnDef.body) &&
|
|
378
|
+
// Ignore private functions, since they cannot be called outside the contract
|
|
379
|
+
fnDef.visibility !== 'private' &&
|
|
380
|
+
// For parent contracts, only internal and public functions which contain statements need to be called
|
|
381
|
+
(isParentContract
|
|
382
|
+
? Boolean(fnDef.body?.statements?.length) && (fnDef.visibility === 'internal' || fnDef.visibility === 'public')
|
|
383
|
+
: true)
|
|
338
384
|
);
|
|
339
385
|
}
|
|
@@ -42,7 +42,7 @@ interface ExpectedErrors {
|
|
|
42
42
|
count: number;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
function testRejects(name: string, kind: ValidationOptions['kind'], expectedErrors
|
|
45
|
+
function testRejects(name: string, kind: ValidationOptions['kind'], expectedErrors: ExpectedErrors) {
|
|
46
46
|
testOverride(name, kind, {}, expectedErrors);
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -98,10 +98,18 @@ testRejects('MissingInitializer_Bad', 'transparent', {
|
|
|
98
98
|
testAccepts('MissingInitializer_UnsafeAllow_Contract', 'transparent');
|
|
99
99
|
testOverride('MissingInitializer_Bad', 'transparent', { unsafeAllow: ['missing-initializer'] });
|
|
100
100
|
|
|
101
|
+
testAccepts('ValidateAsInitializer_Ok', 'transparent');
|
|
102
|
+
|
|
103
|
+
testRejects('Reinitializer_NotDetected', 'transparent', {
|
|
104
|
+
contains: ['Missing initializer'],
|
|
105
|
+
count: 1,
|
|
106
|
+
});
|
|
107
|
+
testAccepts('Reinitializer_ValidateAsInitializer_Ok', 'transparent');
|
|
108
|
+
|
|
101
109
|
testAccepts('InitializationOrder_Ok', 'transparent');
|
|
102
110
|
testAccepts('InitializationOrder_Ok_2', 'transparent');
|
|
103
111
|
|
|
104
|
-
testAccepts('InitializationOrder_WrongOrder_Bad', 'transparent'); // warn 'Expected
|
|
112
|
+
testAccepts('InitializationOrder_WrongOrder_Bad', 'transparent'); // warn 'Expected: A, B, C'
|
|
105
113
|
testAccepts('InitializationOrder_WrongOrder_UnsafeAllow_Contract', 'transparent');
|
|
106
114
|
testAccepts('InitializationOrder_WrongOrder_UnsafeAllow_Function', 'transparent');
|
|
107
115
|
testOverride('InitializationOrder_WrongOrder_Bad', 'transparent', { unsafeAllow: ['incorrect-initializer-order'] }); // skips the warning
|
|
@@ -122,7 +130,21 @@ testAccepts('InitializationOrder_Duplicate_UnsafeAllow_Contract', 'transparent')
|
|
|
122
130
|
testAccepts('InitializationOrder_Duplicate_UnsafeAllow_Function', 'transparent');
|
|
123
131
|
testAccepts('InitializationOrder_Duplicate_UnsafeAllow_Call', 'transparent');
|
|
124
132
|
testOverride('InitializationOrder_Duplicate_Bad', 'transparent', { unsafeAllow: ['duplicate-initializer-call'] });
|
|
125
|
-
testAccepts('InitializationOrder_UnsafeAllowDuplicate_But_WrongOrder', 'transparent'); // warn 'Expected
|
|
133
|
+
testAccepts('InitializationOrder_UnsafeAllowDuplicate_But_WrongOrder', 'transparent'); // warn 'Expected: A, B, C'
|
|
134
|
+
|
|
135
|
+
testAccepts('InitializationOrder_ValidateAsInitializer_Ok', 'transparent');
|
|
136
|
+
testAccepts('InitializationOrder_ValidateAsInitializer_WrongOrder', 'transparent'); // warn 'Expected: A, B, C, Parent_ValidateAsInitializer'
|
|
137
|
+
testRejects('InitializationOrder_ValidateAsInitializer_MissingCall', 'transparent', {
|
|
138
|
+
contains: ['Missing initializer calls for one or more parent contracts: `Parent_ValidateAsInitializer`'],
|
|
139
|
+
count: 1,
|
|
140
|
+
});
|
|
141
|
+
testRejects('InitializationOrder_ValidateAsInitializer_DuplicateCall', 'transparent', {
|
|
142
|
+
contains: ['Duplicate calls found to initializer `parentAssumeInit` for contract `Parent_ValidateAsInitializer`'],
|
|
143
|
+
count: 1,
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
testAccepts('Parent_ValidateAsInitializer_External_Ok', 'transparent');
|
|
147
|
+
testAccepts('Child_Of_ValidateAsInitializer_External_Ok', 'transparent');
|
|
126
148
|
|
|
127
149
|
testAccepts('WithRequire_Ok', 'transparent');
|
|
128
150
|
testRejects('WithRequire_Bad', 'transparent', {
|
|
@@ -178,11 +200,11 @@ testRejects('TransitiveChild_Bad_Parent', 'transparent', {
|
|
|
178
200
|
'Missing initializer calls for one or more parent contracts: `TransitiveGrandparent2`', // occurs twice: missing initializer for child, missing initializer for parent
|
|
179
201
|
],
|
|
180
202
|
count: 2,
|
|
181
|
-
}); // warn 'Expected
|
|
203
|
+
}); // warn 'Expected: TransitiveGrandparent2, TransitiveParent_Bad'
|
|
182
204
|
testRejects('TransitiveChild_Bad_Order', 'transparent', {
|
|
183
205
|
contains: ['Missing initializer calls for one or more parent contracts: `TransitiveGrandparent2`'],
|
|
184
206
|
count: 1,
|
|
185
|
-
}); // warn 'Expected
|
|
207
|
+
}); // warn 'Expected: TransitiveGrandparent2, TransitiveParent_Bad'
|
|
186
208
|
testRejects('TransitiveChild_Good_Order_Bad_Parent', 'transparent', {
|
|
187
209
|
contains: ['Missing initializer calls for one or more parent contracts: `TransitiveGrandparent2`'],
|
|
188
210
|
count: 1,
|