From f008ac4f8831e3a09a6612019b724fec48c7e353 Mon Sep 17 00:00:00 2001 From: Eric Lau Date: Thu, 14 Dec 2023 13:56:42 -0500 Subject: [PATCH] CLI: Fix ambiguous name error when passing in fully qualified contract names (#944) --- packages/core/CHANGELOG.md | 4 +++ packages/core/src/cli/cli.test.ts | 24 ++++++++++++++++++ packages/core/src/cli/cli.test.ts.md | 18 +++++++++++++ packages/core/src/cli/cli.test.ts.snap | Bin 2052 -> 2137 bytes .../core/src/cli/validate/contract-report.ts | 4 +-- 5 files changed, 48 insertions(+), 2 deletions(-) diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 61a369e82..ff7332a9b 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Unreleased + +- CLI: Fix ambiguous name error when passing in fully qualified contract names. ([#944](https://github.com/OpenZeppelin/openzeppelin-upgrades/pull/944)) + ## 1.32.0 (2023-12-11) - Support deploying proxies from OpenZeppelin Contracts 5.0. ([#919](https://github.com/OpenZeppelin/openzeppelin-upgrades/pull/919)) diff --git a/packages/core/src/cli/cli.test.ts b/packages/core/src/cli/cli.test.ts index d57005964..358735951 100644 --- a/packages/core/src/cli/cli.test.ts +++ b/packages/core/src/cli/cli.test.ts @@ -274,3 +274,27 @@ test('validate - single contract - ok', async t => { const output = (await execAsync(`${CLI} validate ${temp} --contract Annotation`)).stdout; t.snapshot(output); }); + +test('validate - fully qualified version of ambiguous contract name', async t => { + const temp = await getTempDir(t); + const buildInfo = await artifacts.getBuildInfo(`contracts/test/ValidationsSameNameSafe.sol:SameName`); + await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo)); + + const output = ( + await execAsync(`${CLI} validate ${temp} --contract contracts/test/ValidationsSameNameSafe.sol:SameName`) + ).stdout; + t.snapshot(output); +}); + +test('validate - references fully qualified version of ambiguous contract name', async t => { + const temp = await getTempDir(t); + const buildInfo = await artifacts.getBuildInfo(`contracts/test/ValidationsSameNameSafe.sol:SameName`); + await fs.writeFile(path.join(temp, 'validate.json'), JSON.stringify(buildInfo)); + + const output = ( + await execAsync( + `${CLI} validate ${temp} --contract contracts/test/ValidationsSameNameSafe.sol:SameName --reference contracts/test/ValidationsSameNameUnsafe.sol:SameName`, + ) + ).stdout; + t.snapshot(output); +}); diff --git a/packages/core/src/cli/cli.test.ts.md b/packages/core/src/cli/cli.test.ts.md index 9ad036534..b6ab145f9 100644 --- a/packages/core/src/cli/cli.test.ts.md +++ b/packages/core/src/cli/cli.test.ts.md @@ -286,3 +286,21 @@ Generated by [AVA](https://avajs.dev). ␊ SUCCESS␊ ` + +## validate - fully qualified version of ambiguous contract name + +> Snapshot 1 + + ` ✔ contracts/test/ValidationsSameNameSafe.sol:SameName␊ + ␊ + SUCCESS␊ + ` + +## validate - references fully qualified version of ambiguous contract name + +> Snapshot 1 + + ` ✔ contracts/test/ValidationsSameNameSafe.sol:SameName (upgrades from contracts/test/ValidationsSameNameUnsafe.sol:SameName)␊ + ␊ + SUCCESS␊ + ` diff --git a/packages/core/src/cli/cli.test.ts.snap b/packages/core/src/cli/cli.test.ts.snap index f007936e1e32a5ac0fb7bacda28dd94ce3857a8f..693babc3014f0d082aa7228c0526e232596178c4 100644 GIT binary patch literal 2137 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 diff --git a/packages/core/src/cli/validate/contract-report.ts b/packages/core/src/cli/validate/contract-report.ts index 2b51cdac5..ae68329a6 100644 --- a/packages/core/src/cli/validate/contract-report.ts +++ b/packages/core/src/cli/validate/contract-report.ts @@ -106,7 +106,7 @@ function getUpgradeableContractReport( ): UpgradeableContractReport | undefined { let version; try { - version = getContractVersion(contract.validationData, contract.name); + version = getContractVersion(contract.validationData, contract.fullyQualifiedName); } catch (e: any) { if (e.message.endsWith('is abstract')) { // Skip abstract upgradeable contracts - they will be validated as part of their caller contracts @@ -126,7 +126,7 @@ function getUpgradeableContractReport( if (opts.unsafeSkipStorageCheck !== true && referenceContract !== undefined) { const layout = getStorageLayout(contract.validationData, version); - const referenceVersion = getContractVersion(referenceContract.validationData, referenceContract.name); + const referenceVersion = getContractVersion(referenceContract.validationData, referenceContract.fullyQualifiedName); const referenceLayout = getStorageLayout(referenceContract.validationData, referenceVersion); reference = referenceContract.fullyQualifiedName;