@openzeppelin/upgrades-core 1.20.2 → 1.20.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol/BeaconProxy.dbg.json +1 -1
- package/artifacts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +1 -1
- package/artifacts/build-info.json +10 -10
- package/dist/manifest-storage-layout.test.js +6 -6
- package/dist/manifest-storage-layout.test.js.map +1 -1
- package/dist/standalone.test.js +6 -0
- package/dist/standalone.test.js.map +1 -1
- package/dist/storage/compare.d.ts.map +1 -1
- package/dist/storage/compare.js +5 -1
- package/dist/storage/compare.js.map +1 -1
- package/dist/storage-0.8.test.js +9 -13
- package/dist/storage-0.8.test.js.map +1 -1
- package/dist/validate/data.d.ts +1 -1
- package/dist/validate/data.d.ts.map +1 -1
- package/dist/validate/data.js +1 -1
- package/dist/validate/query.d.ts +16 -1
- package/dist/validate/query.d.ts.map +1 -1
- package/dist/validate/query.js +49 -22
- package/dist/validate/query.js.map +1 -1
- package/dist/validate/run.d.ts.map +1 -1
- package/dist/validate/run.js +17 -13
- package/dist/validate/run.js.map +1 -1
- package/dist/validate.test.js +8 -0
- package/dist/validate.test.js.map +1 -1
- package/package.json +3 -3
- package/src/manifest-storage-layout.test.ts +8 -6
- package/src/standalone.test.ts +11 -0
- package/src/storage/compare.ts +9 -1
- package/src/storage-0.8.test.ts +10 -13
- package/src/validate/data.ts +2 -2
- package/src/validate/query.ts +51 -22
- package/src/validate/run.ts +19 -13
- package/src/validate.test.ts +13 -0
package/src/validate/run.ts
CHANGED
|
@@ -114,6 +114,10 @@ function skipCheck(error: string, node: Node): boolean {
|
|
|
114
114
|
return getAllowed(node).includes(error);
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
+
function getFullyQualifiedName(source: string, contractName: string) {
|
|
118
|
+
return `${source}:${contractName}`;
|
|
119
|
+
}
|
|
120
|
+
|
|
117
121
|
export function validate(solcOutput: SolcOutput, decodeSrc: SrcDecoder, solcVersion?: string): ValidationRunData {
|
|
118
122
|
const validation: ValidationRunData = {};
|
|
119
123
|
const fromId: Record<number, string> = {};
|
|
@@ -128,7 +132,7 @@ export function validate(solcOutput: SolcOutput, decodeSrc: SrcDecoder, solcVers
|
|
|
128
132
|
const version = bytecode.object === '' ? undefined : getVersion(bytecode.object);
|
|
129
133
|
const linkReferences = extractLinkReferences(bytecode);
|
|
130
134
|
|
|
131
|
-
validation[contractName] = {
|
|
135
|
+
validation[getFullyQualifiedName(source, contractName)] = {
|
|
132
136
|
src: contractName,
|
|
133
137
|
version,
|
|
134
138
|
inherit: [],
|
|
@@ -145,17 +149,19 @@ export function validate(solcOutput: SolcOutput, decodeSrc: SrcDecoder, solcVers
|
|
|
145
149
|
}
|
|
146
150
|
|
|
147
151
|
for (const contractDef of findAll('ContractDefinition', solcOutput.sources[source].ast)) {
|
|
148
|
-
|
|
152
|
+
const key = getFullyQualifiedName(source, contractDef.name);
|
|
153
|
+
|
|
154
|
+
fromId[contractDef.id] = key;
|
|
149
155
|
|
|
150
156
|
// May be undefined in case of duplicate contract names in Truffle
|
|
151
157
|
const bytecode = solcOutput.contracts[source][contractDef.name]?.evm.bytecode;
|
|
152
158
|
|
|
153
|
-
if (
|
|
154
|
-
inheritIds[
|
|
155
|
-
libraryIds[
|
|
159
|
+
if (key in validation && bytecode !== undefined) {
|
|
160
|
+
inheritIds[key] = contractDef.linearizedBaseContracts.slice(1);
|
|
161
|
+
libraryIds[key] = getReferencedLibraryIds(contractDef);
|
|
156
162
|
|
|
157
|
-
validation[
|
|
158
|
-
validation[
|
|
163
|
+
validation[key].src = decodeSrc(contractDef);
|
|
164
|
+
validation[key].errors = [
|
|
159
165
|
...getConstructorErrors(contractDef, decodeSrc),
|
|
160
166
|
...getOpcodeErrors(contractDef, decodeSrc),
|
|
161
167
|
...getStateVariableErrors(contractDef, decodeSrc),
|
|
@@ -164,25 +170,25 @@ export function validate(solcOutput: SolcOutput, decodeSrc: SrcDecoder, solcVers
|
|
|
164
170
|
...getLinkingErrors(contractDef, bytecode),
|
|
165
171
|
];
|
|
166
172
|
|
|
167
|
-
validation[
|
|
173
|
+
validation[key].layout = extractStorageLayout(
|
|
168
174
|
contractDef,
|
|
169
175
|
decodeSrc,
|
|
170
176
|
deref,
|
|
171
177
|
solcOutput.contracts[source][contractDef.name].storageLayout,
|
|
172
178
|
);
|
|
173
|
-
validation[
|
|
179
|
+
validation[key].methods = [...findAll('FunctionDefinition', contractDef)]
|
|
174
180
|
.filter(fnDef => ['external', 'public'].includes(fnDef.visibility))
|
|
175
181
|
.map(fnDef => getFunctionSignature(fnDef, deref));
|
|
176
182
|
}
|
|
177
183
|
}
|
|
178
184
|
}
|
|
179
185
|
|
|
180
|
-
for (const
|
|
181
|
-
validation[
|
|
186
|
+
for (const key in inheritIds) {
|
|
187
|
+
validation[key].inherit = inheritIds[key].map(id => fromId[id]);
|
|
182
188
|
}
|
|
183
189
|
|
|
184
|
-
for (const
|
|
185
|
-
validation[
|
|
190
|
+
for (const key in libraryIds) {
|
|
191
|
+
validation[key].libraries = libraryIds[key].map(id => fromId[id]);
|
|
186
192
|
}
|
|
187
193
|
|
|
188
194
|
return validation;
|
package/src/validate.test.ts
CHANGED
|
@@ -133,3 +133,16 @@ testValid('UsesExplicitSafeExternalLibraryNatspec', 'transparent', true);
|
|
|
133
133
|
testValid('UsesExplicitUnsafeInternalLibraryNatspec', 'transparent', true);
|
|
134
134
|
testValid('UsesExplicitUnsafeExternalLibraryNatspec', 'transparent', true);
|
|
135
135
|
testValid('TransitiveLibraryIsUnsafe', 'transparent', false);
|
|
136
|
+
|
|
137
|
+
testValid('contracts/test/ValidationsSameNameSafe.sol:SameName', 'transparent', true);
|
|
138
|
+
testValid('contracts/test/ValidationsSameNameUnsafe.sol:SameName', 'transparent', false);
|
|
139
|
+
|
|
140
|
+
test('ambiguous name', t => {
|
|
141
|
+
const error = t.throws(() => getContractVersion(t.context.validation, 'SameName'));
|
|
142
|
+
t.is(
|
|
143
|
+
error?.message,
|
|
144
|
+
'Contract SameName is ambiguous. Use one of the following:\n' +
|
|
145
|
+
'contracts/test/ValidationsSameNameSafe.sol:SameName\n' +
|
|
146
|
+
'contracts/test/ValidationsSameNameUnsafe.sol:SameName',
|
|
147
|
+
);
|
|
148
|
+
});
|