From 8211ab9b84961a5f2ed0ed0f5b325db3eeb818ff Mon Sep 17 00:00:00 2001 From: Alex Rea Date: Mon, 23 Sep 2024 11:40:04 +0100 Subject: [PATCH] Make short-circuiting old version deployments more robust to snapshot-reverts --- scripts/deployOldUpgradeableVersion.js | 24 ++++++++++++++---------- test/truffle-fixture.js | 2 ++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/scripts/deployOldUpgradeableVersion.js b/scripts/deployOldUpgradeableVersion.js index f805b240b5..7b690dc597 100644 --- a/scripts/deployOldUpgradeableVersion.js +++ b/scripts/deployOldUpgradeableVersion.js @@ -8,9 +8,9 @@ const contract = require("@truffle/contract"); const { web3GetCode, setStorageSlot } = require("../helpers/test-helper"); const { ROOT_ROLE, RECOVERY_ROLE, ADMINISTRATION_ROLE, ARCHITECTURE_ROLE, ADDRESS_ZERO } = require("../helpers/constants"); -const colonyDeployed = {}; -const colonyNetworkDeployed = {}; -const deployedResolverAddresses = {}; +let colonyDeployed = {}; +let colonyNetworkDeployed = {}; +let deployedResolverAddresses = {}; module.exports.deployOldExtensionVersion = async (contractName, interfaceName, implementationNames, versionTag, colonyNetwork) => { if (versionTag.indexOf(" ") !== -1) { @@ -108,6 +108,12 @@ module.exports.registerOldColonyVersion = async (colonyVersionResolverAddress, c } }; +module.exports.resetAlreadyDeployedVersionTracking = async () => { + colonyDeployed = {}; + colonyNetworkDeployed = {}; + deployedResolverAddresses = {}; +}; + module.exports.deployOldColonyVersion = async (contractName, interfaceName, implementationNames, versionTag, colonyNetwork) => { if (versionTag.indexOf(" ") !== -1) { throw new Error("Version tag cannot contain spaces"); @@ -116,14 +122,12 @@ module.exports.deployOldColonyVersion = async (contractName, interfaceName, impl colonyDeployed[interfaceName] = {}; } if (colonyDeployed[interfaceName][versionTag]) { - // Already deployed... if truffle's not snapshotted it away. See if there's any code there. + // Already deployed... note that if a snapshot revert is made without calling `resetAlreadyDeployedVersionTracking`, + // then this will break. const { resolverAddress } = colonyDeployed[interfaceName][versionTag]; - const code = await web3GetCode(resolverAddress); - if (code !== "0x") { - // Must also check it's registered - await module.exports.registerOldColonyVersion(resolverAddress, colonyNetwork); - return colonyDeployed[interfaceName][versionTag]; - } + // Must also check it's registered + await module.exports.registerOldColonyVersion(resolverAddress, colonyNetwork); + return colonyDeployed[interfaceName][versionTag]; } try { diff --git a/test/truffle-fixture.js b/test/truffle-fixture.js index b29f4ff6e1..5a372a76dd 100644 --- a/test/truffle-fixture.js +++ b/test/truffle-fixture.js @@ -65,6 +65,7 @@ const ethers = require("ethers"); const { soliditySha3 } = require("web3-utils"); const truffleContract = require("@truffle/contract"); const createXABI = require("../lib/createx/artifacts/src/ICreateX.sol/ICreateX.json"); +const { resetAlreadyDeployedVersionTracking } = require("../scripts/deployOldUpgradeableVersion"); let postFixtureSnapshotId; @@ -82,6 +83,7 @@ const { getChainId, hardhatRevert, hardhatSnapshot, deployCreateXIfNeeded, isXda module.exports = async () => { if (postFixtureSnapshotId) { await hardhatRevert(hre.network.provider, postFixtureSnapshotId); + await resetAlreadyDeployedVersionTracking(); postFixtureSnapshotId = await hardhatSnapshot(hre.network.provider); return; }