@openzeppelin/upgrades-core 1.16.1 → 1.17.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/contracts/Initializable.sol +4 -1
- package/dist/deployment.js +2 -3
- package/dist/deployment.js.map +1 -1
- package/dist/eip-1967.d.ts.map +1 -1
- package/dist/eip-1967.js +2 -7
- package/dist/eip-1967.js.map +1 -1
- package/dist/impl-store.js +6 -8
- package/dist/impl-store.js.map +1 -1
- package/dist/manifest-storage-layout.js +1 -1
- package/dist/manifest-storage-layout.js.map +1 -1
- package/dist/manifest.d.ts +5 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +54 -10
- package/dist/manifest.js.map +1 -1
- package/dist/manifest.test.js +82 -0
- package/dist/manifest.test.js.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +4 -6
- package/dist/provider.js.map +1 -1
- package/dist/provider.test.js +5 -5
- package/dist/provider.test.js.map +1 -1
- package/dist/proxy-kind.js +1 -2
- package/dist/proxy-kind.js.map +1 -1
- package/dist/scripts/migrate-oz-cli-project.js +1 -1
- package/dist/scripts/migrate-oz-cli-project.js.map +1 -1
- package/dist/scripts/migrate-oz-cli-project.test.js +1 -1
- package/dist/scripts/migrate-oz-cli-project.test.js.map +1 -1
- package/dist/src-decoder.js +1 -2
- package/dist/src-decoder.js.map +1 -1
- package/dist/storage/compare.js +3 -5
- package/dist/storage/compare.js.map +1 -1
- package/dist/storage/extract.js +6 -9
- package/dist/storage/extract.js.map +1 -1
- package/dist/storage/layout.js +3 -4
- package/dist/storage/layout.js.map +1 -1
- package/dist/storage.test.js +1 -1
- package/dist/storage.test.js.map +1 -1
- package/dist/stub-provider.d.ts +1 -1
- package/dist/stub-provider.d.ts.map +1 -1
- package/dist/stub-provider.js +5 -7
- package/dist/stub-provider.js.map +1 -1
- package/dist/utils/parse-type-id.js +2 -3
- package/dist/utils/parse-type-id.js.map +1 -1
- package/dist/validate/data.js +1 -2
- package/dist/validate/data.js.map +1 -1
- package/dist/validate/overrides.js +7 -7
- package/dist/validate/overrides.js.map +1 -1
- package/dist/validate/query.js +3 -5
- package/dist/validate/query.js.map +1 -1
- package/dist/validate/report.js +1 -2
- package/dist/validate/report.js.map +1 -1
- package/dist/validate/run.js +6 -10
- package/dist/validate/run.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +2 -4
- package/src/eip-1967.ts +2 -4
- package/src/manifest.test.ts +103 -1
- package/src/manifest.ts +62 -6
- package/src/provider.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/validate/overrides.ts"],"names":[],"mappings":";;;AAEA,sCAA0C;AAE1C,0BAA0B;AAC1B,oCAA+C;AAAtC,sGAAA,eAAe,OAAA;AAWX,QAAA,6BAA6B,GAA8C;IACtF,2BAA2B,EAAE;QAC3B,mEAAmE;QACnE,mEAAmE;KACpE;IACD,0BAA0B,EAAE,CAAC,kEAAkE,CAAC;IAChG,0BAA0B,EAAE;QAC1B,gGAAgG;QAChG,iFAAiF;KAClF;IACD,mBAAmB,EAAE;QACnB,8FAA8F;QAC9F,+EAA+E;KAChF;IACD,iBAAiB,EAAE;QACjB,0FAA0F;QAC1F,+EAA+E;KAChF;IACD,WAAW,EAAE,CAAC,qDAAqD,CAAC;IACpE,YAAY,EAAE,CAAC,sDAAsD,CAAC;IACtE,YAAY,EAAE,CAAC,sDAAsD,CAAC;IACtE,0BAA0B,EAAE;QAC1B,kFAAkF;QAClF,yFAAyF;QACzF,gFAAgF;KACjF;CACF,CAAC;AAEF,SAAgB,sBAAsB,CAAC,IAAuB
|
|
1
|
+
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/validate/overrides.ts"],"names":[],"mappings":";;;AAEA,sCAA0C;AAE1C,0BAA0B;AAC1B,oCAA+C;AAAtC,sGAAA,eAAe,OAAA;AAWX,QAAA,6BAA6B,GAA8C;IACtF,2BAA2B,EAAE;QAC3B,mEAAmE;QACnE,mEAAmE;KACpE;IACD,0BAA0B,EAAE,CAAC,kEAAkE,CAAC;IAChG,0BAA0B,EAAE;QAC1B,gGAAgG;QAChG,iFAAiF;KAClF;IACD,mBAAmB,EAAE;QACnB,8FAA8F;QAC9F,+EAA+E;KAChF;IACD,iBAAiB,EAAE;QACjB,0FAA0F;QAC1F,+EAA+E;KAChF;IACD,WAAW,EAAE,CAAC,qDAAqD,CAAC;IACpE,YAAY,EAAE,CAAC,sDAAsD,CAAC;IACtE,YAAY,EAAE,CAAC,sDAAsD,CAAC;IACtE,0BAA0B,EAAE;QAC1B,kFAAkF;QAClF,yFAAyF;QACzF,gFAAgF;KACjF;CACF,CAAC;AAEF,SAAgB,sBAAsB,CAAC,IAAuB;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IAC3C,MAAM,sBAAsB,GAC1B,IAAI,CAAC,sBAAsB;QAC3B,CAAC,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzF,MAAM,0BAA0B,GAC9B,IAAI,CAAC,0BAA0B,IAAI,WAAW,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAEtF,IAAI,sBAAsB,EAAE;QAC1B,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;KAC1D;IACD,IAAI,0BAA0B,EAAE;QAC9B,WAAW,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;KAC9C;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC;IAExC,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC;IAC5D,MAAM,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,IAAI,KAAK,CAAC;IAEpE,OAAO;QACL,sBAAsB;QACtB,0BAA0B;QAC1B,kBAAkB;QAClB,sBAAsB;QACtB,WAAW;QACX,IAAI;KACL,CAAC;AACJ,CAAC;AA3BD,wDA2BC;AAED,SAAgB,iBAAiB,CAC/B,YAAoB,EACpB,MAAyB,EACzB,IAAuB;IAEvB,MAAM,EAAE,WAAW,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;QACzD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,0BAA0B,CAAC,CAAC;KAC5E;IAED,KAAK,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,qCAA6B,CAAC,EAAE;QACzF,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAoC,CAAC,EAAE;YAC9D,IAAI,eAAe,GAAG,KAAK,CAAC;YAE5B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,WAAW,GAAG,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC;gBAC7C,eAAe,GAAG,eAAe,IAAI,WAAW,CAAC;gBACjD,OAAO,CAAC,WAAW,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,IAAI,eAAe,IAAI,gBAAgB,EAAE;gBACvC,IAAA,gBAAU,EAAC,oCAAoC,YAAY,EAAE,EAAE,gBAAgB,CAAC,CAAC;aAClF;SACF;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA5BD,8CA4BC"}
|
package/dist/validate/query.js
CHANGED
|
@@ -29,7 +29,7 @@ function getContractNameAndRunValidation(data, version) {
|
|
|
29
29
|
let runValidation;
|
|
30
30
|
let contractName;
|
|
31
31
|
for (const validation of dataV3.log) {
|
|
32
|
-
contractName = Object.keys(validation).find(name =>
|
|
32
|
+
contractName = Object.keys(validation).find(name => validation[name].version?.withMetadata === version.withMetadata);
|
|
33
33
|
if (contractName !== undefined) {
|
|
34
34
|
runValidation = validation;
|
|
35
35
|
break;
|
|
@@ -63,11 +63,10 @@ function unfoldStorageLayout(runData, contractName) {
|
|
|
63
63
|
}
|
|
64
64
|
exports.unfoldStorageLayout = unfoldStorageLayout;
|
|
65
65
|
function* findVersionWithoutMetadataMatches(data, versionWithoutMetadata) {
|
|
66
|
-
var _a;
|
|
67
66
|
const dataV3 = (0, data_1.normalizeValidationData)(data);
|
|
68
67
|
for (const validation of dataV3.log) {
|
|
69
68
|
for (const contractName in validation) {
|
|
70
|
-
if (
|
|
69
|
+
if (validation[contractName].version?.withoutMetadata === versionWithoutMetadata) {
|
|
71
70
|
yield [contractName, validation];
|
|
72
71
|
}
|
|
73
72
|
}
|
|
@@ -75,7 +74,6 @@ function* findVersionWithoutMetadataMatches(data, versionWithoutMetadata) {
|
|
|
75
74
|
}
|
|
76
75
|
exports.findVersionWithoutMetadataMatches = findVersionWithoutMetadataMatches;
|
|
77
76
|
function getUnlinkedBytecode(data, bytecode) {
|
|
78
|
-
var _a;
|
|
79
77
|
const dataV3 = (0, data_1.normalizeValidationData)(data);
|
|
80
78
|
for (const validation of dataV3.log) {
|
|
81
79
|
const linkableContracts = Object.keys(validation).filter(name => validation[name].linkReferences.length > 0);
|
|
@@ -83,7 +81,7 @@ function getUnlinkedBytecode(data, bytecode) {
|
|
|
83
81
|
const { linkReferences } = validation[name];
|
|
84
82
|
const unlinkedBytecode = (0, link_refs_1.unlinkBytecode)(bytecode, linkReferences);
|
|
85
83
|
const version = (0, version_1.getVersion)(unlinkedBytecode);
|
|
86
|
-
if (
|
|
84
|
+
if (validation[name].version?.withMetadata === version.withMetadata) {
|
|
87
85
|
return unlinkedBytecode;
|
|
88
86
|
}
|
|
89
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/validate/query.ts"],"names":[],"mappings":";;;AAAA,wCAAiD;AAGjD,4CAA8C;AAC9C,2CAAmE;AACnE,mCAA2C;AAC3C,iCAAiE;AAGjE,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEhD,SAAgB,iBAAiB,CAAC,IAAoB,EAAE,OAAgB,EAAE,IAAuB;IAC/F,MAAM,MAAM,GAAG,IAAA,8BAAuB,EAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,YAAY,CAAC,GAAG,+BAA+B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAExE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAEhD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,MAAM,IAAI,wBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;KAClD;AACH,CAAC;AATD,8CASC;AAED,SAAgB,kBAAkB,CAAC,OAA0B,EAAE,YAAoB;IACjF,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,YAAY,YAAY,cAAc,CAAC,CAAC;KACzD;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAND,gDAMC;AAED,SAAgB,+BAA+B,CAAC,IAAoB,EAAE,OAAgB;IACpF,MAAM,MAAM,GAAG,IAAA,8BAAuB,EAAC,IAAI,CAAC,CAAC;IAE7C,IAAI,aAAa,CAAC;IAClB,IAAI,YAAY,CAAC;IAEjB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,GAAG,EAAE;QACnC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CACzC,IAAI,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/validate/query.ts"],"names":[],"mappings":"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"}
|
package/dist/validate/report.js
CHANGED
|
@@ -63,11 +63,10 @@ const errorInfo = {
|
|
|
63
63
|
},
|
|
64
64
|
};
|
|
65
65
|
function describeError(e, color = true) {
|
|
66
|
-
var _a;
|
|
67
66
|
const chalk = new chalk_1.default.Instance({ level: color && chalk_1.default.supportsColor ? chalk_1.default.supportsColor.level : 0 });
|
|
68
67
|
const info = errorInfo[e.kind];
|
|
69
68
|
const log = [chalk.bold(e.src) + ': ' + info.msg(e)];
|
|
70
|
-
const hint =
|
|
69
|
+
const hint = info.hint?.(e);
|
|
71
70
|
if (hint) {
|
|
72
71
|
log.push(hint);
|
|
73
72
|
}
|
|
@@ -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,iBAAiB;QAC/C,IAAI,EAAE,GAAG,EAAE,CAAC,4CAA4C;QACxD,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,CAAC,oEAAoE;QAC/E,IAAI,EAAE,GAAG,EAAE,CACT,qEAAqE;YACrE,yEAAyE;QAC3E,IAAI,EAAE,mCAAmC;KAC1C;CACF,CAAC;AAEF,SAAS,aAAa,CAAC,CAAkB,EAAE,KAAK,GAAG,IAAI
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/validate/report.ts"],"names":[],"mappings":"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"}
|
package/dist/validate/run.js
CHANGED
|
@@ -32,9 +32,8 @@ function* execall(re, text) {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
function getAllowed(node) {
|
|
35
|
-
var _a, _b;
|
|
36
35
|
if ('documentation' in node) {
|
|
37
|
-
const doc = typeof node.documentation === 'string' ? node.documentation :
|
|
36
|
+
const doc = typeof node.documentation === 'string' ? node.documentation : node.documentation?.text ?? '';
|
|
38
37
|
const result = [];
|
|
39
38
|
for (const { groups } of execall(/^\s*(?:@(?<title>\w+)(?::(?<tag>[a-z][a-z-]*))? )?(?<args>(?:(?!^\s@\w+)[^])*)/m, doc)) {
|
|
40
39
|
if (groups && groups.title === 'custom' && groups.tag === 'oz-upgrades-unsafe-allow') {
|
|
@@ -56,7 +55,6 @@ function skipCheck(error, node) {
|
|
|
56
55
|
return getAllowed(node).includes(error);
|
|
57
56
|
}
|
|
58
57
|
function validate(solcOutput, decodeSrc) {
|
|
59
|
-
var _a;
|
|
60
58
|
const validation = {};
|
|
61
59
|
const fromId = {};
|
|
62
60
|
const inheritIds = {};
|
|
@@ -84,7 +82,7 @@ function validate(solcOutput, decodeSrc) {
|
|
|
84
82
|
for (const contractDef of (0, utils_1.findAll)('ContractDefinition', solcOutput.sources[source].ast)) {
|
|
85
83
|
fromId[contractDef.id] = contractDef.name;
|
|
86
84
|
// May be undefined in case of duplicate contract names in Truffle
|
|
87
|
-
const bytecode =
|
|
85
|
+
const bytecode = solcOutput.contracts[source][contractDef.name]?.evm.bytecode;
|
|
88
86
|
if (contractDef.name in validation && bytecode !== undefined) {
|
|
89
87
|
inheritIds[contractDef.name] = contractDef.linearizedBaseContracts.slice(1);
|
|
90
88
|
libraryIds[contractDef.name] = getReferencedLibraryIds(contractDef);
|
|
@@ -114,9 +112,8 @@ function validate(solcOutput, decodeSrc) {
|
|
|
114
112
|
}
|
|
115
113
|
exports.validate = validate;
|
|
116
114
|
function* getConstructorErrors(contractDef, decodeSrc) {
|
|
117
|
-
var _a, _b, _c;
|
|
118
115
|
for (const fnDef of (0, utils_1.findAll)('FunctionDefinition', contractDef, node => skipCheck('constructor', node))) {
|
|
119
|
-
if (fnDef.kind === 'constructor' && ((
|
|
116
|
+
if (fnDef.kind === 'constructor' && ((fnDef.body?.statements?.length ?? 0) > 0 || fnDef.modifiers.length > 0)) {
|
|
120
117
|
yield {
|
|
121
118
|
kind: 'constructor',
|
|
122
119
|
contract: contractDef.name,
|
|
@@ -126,10 +123,9 @@ function* getConstructorErrors(contractDef, decodeSrc) {
|
|
|
126
123
|
}
|
|
127
124
|
}
|
|
128
125
|
function* getOpcodeErrors(contractDef, decodeSrc) {
|
|
129
|
-
var _a, _b;
|
|
130
126
|
for (const fnCall of (0, utils_1.findAll)('FunctionCall', contractDef, node => skipCheck('delegatecall', node))) {
|
|
131
127
|
const fn = fnCall.expression;
|
|
132
|
-
if (
|
|
128
|
+
if (fn.typeDescriptions.typeIdentifier?.match(/^t_function_baredelegatecall_/)) {
|
|
133
129
|
yield {
|
|
134
130
|
kind: 'delegatecall',
|
|
135
131
|
src: decodeSrc(fnCall),
|
|
@@ -138,7 +134,7 @@ function* getOpcodeErrors(contractDef, decodeSrc) {
|
|
|
138
134
|
}
|
|
139
135
|
for (const fnCall of (0, utils_1.findAll)('FunctionCall', contractDef, node => skipCheck('selfdestruct', node))) {
|
|
140
136
|
const fn = fnCall.expression;
|
|
141
|
-
if (
|
|
137
|
+
if (fn.typeDescriptions.typeIdentifier?.match(/^t_function_selfdestruct_/)) {
|
|
142
138
|
yield {
|
|
143
139
|
kind: 'selfdestruct',
|
|
144
140
|
src: decodeSrc(fnCall),
|
|
@@ -185,7 +181,7 @@ function getReferencedLibraryIds(contractDef) {
|
|
|
185
181
|
})
|
|
186
182
|
.flat();
|
|
187
183
|
const explicitUsage = [...(0, utils_1.findAll)('Identifier', contractDef)]
|
|
188
|
-
.filter(identifier =>
|
|
184
|
+
.filter(identifier => identifier.typeDescriptions.typeString?.match(/^type\(library/))
|
|
189
185
|
.map(identifier => {
|
|
190
186
|
if ((0, is_nullish_1.isNullish)(identifier.referencedDeclaration)) {
|
|
191
187
|
throw new Error('Broken invariant: Identifier.referencedDeclaration should not be null');
|
package/dist/validate/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/validate/run.ts"],"names":[],"mappings":";;;AACA,8CAAyD;AAKzD,0DAAsD;AACtD,oDAAgD;AAChD,gDAAyD;AACzD,wCAAiD;AACjD,4CAAoE;AACpE,gDAA0D;AAgB1D,MAAM,UAAU,GAAG;IACjB,2BAA2B;IAC3B,0BAA0B;IAC1B,0BAA0B;IAC1B,mBAAmB;IACnB,iBAAiB;IACjB,aAAa;IACb,cAAc;IACd,cAAc;IACd,0BAA0B;CAClB,CAAC;AAoCX,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAU,EAAE,IAAY;IACxC,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,IAAI,EAAE;QACX,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,MAAM,KAAK,CAAC;SACb;aAAM;YACL,MAAM;SACP;KACF;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAU
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/validate/run.ts"],"names":[],"mappings":"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"}
|
package/dist/version.js
CHANGED
|
@@ -11,7 +11,7 @@ function getVersion(bytecode, linkedBytecode, constructorArgs = '') {
|
|
|
11
11
|
return {
|
|
12
12
|
withMetadata: hashBytecode(bytecode),
|
|
13
13
|
withoutMetadata: hashBytecodeWithoutMetadata(bytecode),
|
|
14
|
-
linkedWithoutMetadata: hashBytecodeWithoutMetadata(linkedBytecode
|
|
14
|
+
linkedWithoutMetadata: hashBytecodeWithoutMetadata(linkedBytecode ?? bytecode, constructorArgs),
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
else {
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;;;;AAAA,qDAA4C;AAC5C,gDAAwB;AAQxB,SAAgB,UAAU,CAAC,QAAgB,EAAE,cAAuB,EAAE,eAAe,GAAG,EAAE;IACxF,IAAI,QAAQ,KAAK,EAAE,EAAE;QACnB,OAAO;YACL,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC;YACpC,eAAe,EAAE,2BAA2B,CAAC,QAAQ,CAAC;YACtD,qBAAqB,EAAE,2BAA2B,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.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.17.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": "https://github.com/OpenZeppelin/openzeppelin-upgrades/tree/master/packages/core",
|
|
6
6
|
"license": "MIT",
|
|
@@ -36,7 +36,6 @@
|
|
|
36
36
|
"@nomiclabs/hardhat-etherscan": "^3.0.0",
|
|
37
37
|
"@openzeppelin/contracts": "4.1.0",
|
|
38
38
|
"@openzeppelin/contracts-upgradeable": "4.1.0",
|
|
39
|
-
"@types/bn.js": "^5.0.0",
|
|
40
39
|
"@types/cbor": "^5.0.0",
|
|
41
40
|
"@types/debug": "^4.1.5",
|
|
42
41
|
"@types/mocha": "^7.0.2",
|
|
@@ -51,7 +50,6 @@
|
|
|
51
50
|
"typescript": "^4.0.0"
|
|
52
51
|
},
|
|
53
52
|
"dependencies": {
|
|
54
|
-
"bn.js": "^5.1.2",
|
|
55
53
|
"cbor": "^8.0.0",
|
|
56
54
|
"chalk": "^4.1.0",
|
|
57
55
|
"compare-versions": "^4.0.0",
|
|
@@ -60,5 +58,5 @@
|
|
|
60
58
|
"proper-lockfile": "^4.1.1",
|
|
61
59
|
"solidity-ast": "^0.4.15"
|
|
62
60
|
},
|
|
63
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "3cf6771e63c6db6212eda75b9ba7a29ca4f2c15a"
|
|
64
62
|
}
|
package/src/eip-1967.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import BN from 'bn.js';
|
|
2
1
|
import { keccak256 } from 'ethereumjs-util';
|
|
3
2
|
import { UpgradesError } from './error';
|
|
4
3
|
import { EthereumProvider, getStorageAt } from './provider';
|
|
@@ -64,13 +63,12 @@ export function toFallbackEip1967Hash(label: string): string {
|
|
|
64
63
|
|
|
65
64
|
export function toEip1967Hash(label: string): string {
|
|
66
65
|
const hash = keccak256(Buffer.from(label));
|
|
67
|
-
const bigNumber =
|
|
66
|
+
const bigNumber = BigInt('0x' + hash.toString('hex')) - 1n;
|
|
68
67
|
return '0x' + bigNumber.toString(16);
|
|
69
68
|
}
|
|
70
69
|
|
|
71
70
|
export function isEmptySlot(storage: string): boolean {
|
|
72
|
-
|
|
73
|
-
return new BN(storage, 'hex').isZero();
|
|
71
|
+
return BigInt(storage.replace(/^(0x)?/, '0x')) === 0n;
|
|
74
72
|
}
|
|
75
73
|
|
|
76
74
|
function parseAddressFromStorage(storage: string): string {
|
package/src/manifest.test.ts
CHANGED
|
@@ -1,5 +1,107 @@
|
|
|
1
|
-
import test from 'ava';
|
|
1
|
+
import test, { ExecutionContext } from 'ava';
|
|
2
2
|
import { Manifest, ManifestData, normalizeManifestData } from './manifest';
|
|
3
|
+
import { promises as fs } from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
|
|
6
|
+
async function writeTestManifest(file: string) {
|
|
7
|
+
const testManifest = {
|
|
8
|
+
manifestVersion: '3.2',
|
|
9
|
+
impls: {},
|
|
10
|
+
proxies: [
|
|
11
|
+
{
|
|
12
|
+
address: '0x123',
|
|
13
|
+
txHash: '0x0',
|
|
14
|
+
kind: 'uups',
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
};
|
|
18
|
+
await fs.mkdir(path.dirname(file), { recursive: true });
|
|
19
|
+
await fs.writeFile(file, JSON.stringify(testManifest, null, 2) + '\n');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async function deleteFile(t: ExecutionContext, file: string) {
|
|
23
|
+
try {
|
|
24
|
+
await fs.unlink(file);
|
|
25
|
+
} catch (e: any) {
|
|
26
|
+
if (!e.message.includes('ENOENT')) {
|
|
27
|
+
t.fail(e);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async function assertOldName(t: ExecutionContext<unknown>, id: number) {
|
|
33
|
+
await fs.access(`.openzeppelin/unknown-${id}.json`);
|
|
34
|
+
t.throwsAsync(fs.access(`.openzeppelin/polygon-mumbai.json`));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async function assertNewName(t: ExecutionContext<unknown>, id: number) {
|
|
38
|
+
t.throwsAsync(fs.access(`.openzeppelin/unknown-${id}.json`));
|
|
39
|
+
await fs.access(`.openzeppelin/polygon-mumbai.json`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async function deleteManifests(t: ExecutionContext<unknown>, id: number) {
|
|
43
|
+
await deleteFile(t, `.openzeppelin/unknown-${id}.json`);
|
|
44
|
+
await deleteFile(t, '.openzeppelin/polygon-mumbai.json');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
test.serial('multiple manifests', async t => {
|
|
48
|
+
const id = 80001;
|
|
49
|
+
await deleteManifests(t, id);
|
|
50
|
+
|
|
51
|
+
await writeTestManifest(`.openzeppelin/unknown-${id}.json`);
|
|
52
|
+
await writeTestManifest(`.openzeppelin/polygon-mumbai.json`);
|
|
53
|
+
|
|
54
|
+
const manifest = new Manifest(id);
|
|
55
|
+
await manifest.lockedRun(async () => {
|
|
56
|
+
await t.throwsAsync(() => manifest.read(), {
|
|
57
|
+
message: new RegExp(
|
|
58
|
+
`Network files with different names .openzeppelin/unknown-${id}.json and .openzeppelin/polygon-mumbai.json were found for the same network.`,
|
|
59
|
+
),
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
await deleteManifests(t, id);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test.serial('rename manifest', async t => {
|
|
67
|
+
const id = 80001;
|
|
68
|
+
await deleteManifests(t, id);
|
|
69
|
+
|
|
70
|
+
await writeTestManifest(`.openzeppelin/unknown-${id}.json`);
|
|
71
|
+
|
|
72
|
+
const manifest = new Manifest(id);
|
|
73
|
+
t.is(manifest.file, `.openzeppelin/polygon-mumbai.json`);
|
|
74
|
+
|
|
75
|
+
t.throwsAsync(fs.access(`.openzeppelin/chain-${id}.lock`));
|
|
76
|
+
|
|
77
|
+
await assertOldName(t, id);
|
|
78
|
+
await manifest.lockedRun(async () => {
|
|
79
|
+
await fs.access(`.openzeppelin/chain-${id}.lock`);
|
|
80
|
+
const data = await manifest.read();
|
|
81
|
+
data.proxies.push({
|
|
82
|
+
address: '0x456',
|
|
83
|
+
txHash: '0x0',
|
|
84
|
+
kind: 'uups',
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
await assertOldName(t, id);
|
|
88
|
+
await manifest.write(data);
|
|
89
|
+
await assertNewName(t, id);
|
|
90
|
+
});
|
|
91
|
+
await assertNewName(t, id);
|
|
92
|
+
|
|
93
|
+
t.throwsAsync(fs.access(`.openzeppelin/chain-${id}.lock`));
|
|
94
|
+
|
|
95
|
+
// check that the contents were persisted
|
|
96
|
+
const data = await new Manifest(id).read();
|
|
97
|
+
t.true(data.proxies[0].address === '0x123');
|
|
98
|
+
t.true(data.proxies[1].address === '0x456');
|
|
99
|
+
await assertNewName(t, id);
|
|
100
|
+
|
|
101
|
+
t.throwsAsync(fs.access(`.openzeppelin/chain-${id}.lock`));
|
|
102
|
+
|
|
103
|
+
await deleteManifests(t, id);
|
|
104
|
+
});
|
|
3
105
|
|
|
4
106
|
test('manifest name for a known network', t => {
|
|
5
107
|
const manifest = new Manifest(1);
|
package/src/manifest.ts
CHANGED
|
@@ -8,6 +8,7 @@ import type { Deployment } from './deployment';
|
|
|
8
8
|
import type { StorageLayout } from './storage';
|
|
9
9
|
import { pick } from './utils/pick';
|
|
10
10
|
import { mapValues } from './utils/map-values';
|
|
11
|
+
import { UpgradesError } from './error';
|
|
11
12
|
|
|
12
13
|
const currentManifestVersion = '3.2';
|
|
13
14
|
|
|
@@ -40,15 +41,23 @@ function defaultManifest(): ManifestData {
|
|
|
40
41
|
const manifestDir = '.openzeppelin';
|
|
41
42
|
|
|
42
43
|
export class Manifest {
|
|
44
|
+
readonly chainId: number;
|
|
43
45
|
readonly file: string;
|
|
46
|
+
private readonly fallbackFile: string;
|
|
47
|
+
|
|
44
48
|
private locked = false;
|
|
45
49
|
|
|
46
50
|
static async forNetwork(provider: EthereumProvider): Promise<Manifest> {
|
|
47
51
|
return new Manifest(await getChainId(provider));
|
|
48
52
|
}
|
|
49
53
|
|
|
50
|
-
constructor(
|
|
51
|
-
|
|
54
|
+
constructor(chainId: number) {
|
|
55
|
+
this.chainId = chainId;
|
|
56
|
+
|
|
57
|
+
const fallbackName = `unknown-${this.chainId}`;
|
|
58
|
+
this.fallbackFile = path.join(manifestDir, `${fallbackName}.json`);
|
|
59
|
+
|
|
60
|
+
const name = networkNames[this.chainId] ?? fallbackName;
|
|
52
61
|
this.file = path.join(manifestDir, `${name}.json`);
|
|
53
62
|
}
|
|
54
63
|
|
|
@@ -89,10 +98,55 @@ export class Manifest {
|
|
|
89
98
|
});
|
|
90
99
|
}
|
|
91
100
|
|
|
101
|
+
private async exists(file: string): Promise<boolean> {
|
|
102
|
+
try {
|
|
103
|
+
await fs.access(file);
|
|
104
|
+
return true;
|
|
105
|
+
} catch (e: any) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private async readFile(): Promise<string> {
|
|
111
|
+
if (this.file === this.fallbackFile) {
|
|
112
|
+
return await fs.readFile(this.file, 'utf8');
|
|
113
|
+
} else {
|
|
114
|
+
const fallbackExists = await this.exists(this.fallbackFile);
|
|
115
|
+
const fileExists = await this.exists(this.file);
|
|
116
|
+
|
|
117
|
+
if (fileExists && fallbackExists) {
|
|
118
|
+
throw new UpgradesError(
|
|
119
|
+
`Network files with different names ${this.fallbackFile} and ${this.file} were found for the same network.`,
|
|
120
|
+
() =>
|
|
121
|
+
`More than one network file was found for chain ID ${this.chainId}. Determine which file is the most up to date version, then take a backup of and delete the other file.`,
|
|
122
|
+
);
|
|
123
|
+
} else if (fallbackExists) {
|
|
124
|
+
return await fs.readFile(this.fallbackFile, 'utf8');
|
|
125
|
+
} else {
|
|
126
|
+
return await fs.readFile(this.file, 'utf8');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private async writeFile(content: string): Promise<void> {
|
|
132
|
+
await this.renameFileIfRequired();
|
|
133
|
+
await fs.writeFile(this.file, content);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
private async renameFileIfRequired() {
|
|
137
|
+
if (this.file !== this.fallbackFile && (await this.exists(this.fallbackFile))) {
|
|
138
|
+
try {
|
|
139
|
+
await fs.rename(this.fallbackFile, this.file);
|
|
140
|
+
} catch (e: any) {
|
|
141
|
+
throw new Error(`Failed to rename network file from ${this.fallbackFile} to ${this.file}: ${e.message}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
92
146
|
async read(): Promise<ManifestData> {
|
|
93
147
|
const release = this.locked ? undefined : await this.lock();
|
|
94
148
|
try {
|
|
95
|
-
const data = JSON.parse(await
|
|
149
|
+
const data = JSON.parse(await this.readFile()) as ManifestData;
|
|
96
150
|
return validateOrUpdateManifestVersion(data);
|
|
97
151
|
} catch (e: any) {
|
|
98
152
|
if (e.code === 'ENOENT') {
|
|
@@ -110,7 +164,7 @@ export class Manifest {
|
|
|
110
164
|
throw new Error('Manifest must be locked');
|
|
111
165
|
}
|
|
112
166
|
const normalized = normalizeManifestData(data);
|
|
113
|
-
await
|
|
167
|
+
await this.writeFile(JSON.stringify(normalized, null, 2) + '\n');
|
|
114
168
|
}
|
|
115
169
|
|
|
116
170
|
async lockedRun<T>(cb: () => Promise<T>): Promise<T> {
|
|
@@ -126,8 +180,10 @@ export class Manifest {
|
|
|
126
180
|
}
|
|
127
181
|
|
|
128
182
|
private async lock() {
|
|
129
|
-
|
|
130
|
-
|
|
183
|
+
const lockfileName = path.join(manifestDir, `chain-${this.chainId}`);
|
|
184
|
+
|
|
185
|
+
await fs.mkdir(path.dirname(lockfileName), { recursive: true });
|
|
186
|
+
const release = await lockfile.lock(lockfileName, { retries: 3, realpath: false });
|
|
131
187
|
this.locked = true;
|
|
132
188
|
return async () => {
|
|
133
189
|
await release();
|
package/src/provider.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import BN from 'bn.js';
|
|
2
|
-
|
|
3
1
|
export interface EthereumProvider {
|
|
4
2
|
send(method: 'web3_clientVersion', params: []): Promise<string>;
|
|
5
3
|
send(method: 'net_version', params: []): Promise<string>;
|
|
@@ -33,7 +31,7 @@ export async function getNetworkId(provider: EthereumProvider): Promise<string>
|
|
|
33
31
|
|
|
34
32
|
export async function getChainId(provider: EthereumProvider): Promise<number> {
|
|
35
33
|
const id = await provider.send('eth_chainId', []);
|
|
36
|
-
return
|
|
34
|
+
return parseInt(id.replace(/^0x/, ''), 16);
|
|
37
35
|
}
|
|
38
36
|
|
|
39
37
|
export async function getClientVersion(provider: EthereumProvider): Promise<string> {
|
|
@@ -104,6 +102,8 @@ export const networkNames: { [chainId in number]?: string } = Object.freeze({
|
|
|
104
102
|
4: 'rinkeby',
|
|
105
103
|
5: 'goerli',
|
|
106
104
|
42: 'kovan',
|
|
105
|
+
137: 'polygon',
|
|
106
|
+
80001: 'polygon-mumbai',
|
|
107
107
|
});
|
|
108
108
|
|
|
109
109
|
export async function isDevelopmentNetwork(provider: EthereumProvider): Promise<boolean> {
|