diff --git a/packages/scripts/admin-proposals/addContractCreator.js b/packages/scripts/admin-proposals/addContractCreator.js index 18a9b26ff4..ba0671b084 100644 --- a/packages/scripts/admin-proposals/addContractCreator.js +++ b/packages/scripts/admin-proposals/addContractCreator.js @@ -210,20 +210,32 @@ async function run() { } if (polygonContractToRegister) { - const addMemberData = polygon_registry.methods - .addMember(RegistryRolesEnum.CONTRACT_CREATOR, polygon_governor.options.address) - .encodeABI(); - const relayedRegistryTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { - filter: { to: polygon_registry.options.address }, - fromBlock: 0, - }); - assert( - relayedRegistryTransactions.find((e) => e.returnValues.data === addMemberData), - "Could not find RelayedGovernanceRequest matching expected relayed addMemberData transaction" - ); - console.log( - `- GovernorRootTunnel correctly emitted events to registry ${polygon_registry.options.address} containing addMember data` - ); + if ( + !(await polygon_registry.methods + .holdsRole(RegistryRolesEnum.CONTRACT_CREATOR, polygonContractToRegister) + .call()) + ) { + const addMemberData = polygon_registry.methods + .addMember(RegistryRolesEnum.CONTRACT_CREATOR, polygon_governor.options.address) + .encodeABI(); + const relayedRegistryTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { + filter: { to: polygon_registry.options.address }, + fromBlock: 0, + }); + assert( + relayedRegistryTransactions.find((e) => e.returnValues.data === addMemberData), + "Could not find RelayedGovernanceRequest matching expected relayed addMemberData transaction" + ); + console.log( + `- GovernorRootTunnel correctly emitted events to registry ${polygon_registry.options.address} containing addMember data` + ); + } else { + console.log( + "- Contract @ ", + polygonContractToRegister, + "is already a contract creator on Polygon. Nothing to check." + ); + } } } console.groupEnd(); diff --git a/packages/scripts/admin-proposals/collateral.js b/packages/scripts/admin-proposals/collateral.js index 13ad000ae1..544f3913c9 100644 --- a/packages/scripts/admin-proposals/collateral.js +++ b/packages/scripts/admin-proposals/collateral.js @@ -266,32 +266,41 @@ async function run() { console.log(`- Collateral @ ${collaterals[i]} has correct final fee and is whitelisted on Ethereum`); } if (polygonCollaterals && polygonCollaterals[i]) { - // Construct expected data to be relayed to Polygon contracts const collateralDecimals = await _getDecimals(crossChainWeb3, polygonCollaterals[i], ERC20); const convertedFeeAmount = parseUnits(fees[i], collateralDecimals).toString(); - const setFinalFeeData = polygon_store.methods - .setFinalFee(polygonCollaterals[i], { rawValue: convertedFeeAmount }) - .encodeABI(); - const addToWhitelistData = polygon_whitelist.methods.addToWhitelist(polygonCollaterals[i]).encodeABI(); - const relayedStoreTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { - filter: { to: polygon_store.options.address }, - fromBlock: 0, - }); - assert( - relayedStoreTransactions.find((e) => e.returnValues.data === setFinalFeeData), - "Could not find RelayedGovernanceRequest matching expected relayed setFinalFee transaction" - ); - const relayedWhitelistTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { - filter: { to: polygon_whitelist.options.address }, - fromBlock: 0, - }); - assert( - relayedWhitelistTransactions.find((e) => e.returnValues.data === addToWhitelistData), - "Could not find RelayedGovernanceRequest matching expected relayed addToWhitelist transaction" - ); - console.log( - `- GovernorRootTunnel correctly emitted events to whitelist collateral ${polygonCollaterals[i]} with final fee set to ${convertedFeeAmount}` - ); + const currentFinalFee = await polygon_store.methods.computeFinalFee(polygonCollaterals[i]).call(); + if (currentFinalFee.toString() !== convertedFeeAmount) { + const setFinalFeeData = polygon_store.methods + .setFinalFee(polygonCollaterals[i], { rawValue: convertedFeeAmount }) + .encodeABI(); + const relayedStoreTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { + filter: { to: polygon_store.options.address }, + fromBlock: 0, + }); + assert( + relayedStoreTransactions.find((e) => e.returnValues.data === setFinalFeeData), + "Could not find RelayedGovernanceRequest matching expected relayed setFinalFee transaction" + ); + console.log( + `- GovernorRootTunnel correctly emitted events to set final fee for collateral @ ${polygonCollaterals[i]} with final fee set to ${convertedFeeAmount}` + ); + } else { + console.log(`- Final fee for is already equal to ${convertedFeeAmount}. Nothing to check.`); + } + if (!(await polygon_whitelist.methods.isOnWhitelist(polygonCollaterals[i]).call())) { + const addToWhitelistData = polygon_whitelist.methods.addToWhitelist(polygonCollaterals[i]).encodeABI(); + const relayedWhitelistTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { + filter: { to: polygon_whitelist.options.address }, + fromBlock: 0, + }); + assert( + relayedWhitelistTransactions.find((e) => e.returnValues.data === addToWhitelistData), + "Could not find RelayedGovernanceRequest matching expected relayed addToWhitelist transaction" + ); + console.log(`- GovernorRootTunnel correctly emitted events to whitelist collateral ${polygonCollaterals[i]}`); + } else { + console.log("- Polygon collateral is on the whitelist. Nothing to check."); + } } } } diff --git a/packages/scripts/admin-proposals/identifier.js b/packages/scripts/admin-proposals/identifier.js index 6266187072..9f39983084 100644 --- a/packages/scripts/admin-proposals/identifier.js +++ b/packages/scripts/admin-proposals/identifier.js @@ -225,23 +225,31 @@ async function run() { } if (polygonIdentifiers && polygonIdentifiers[i]) { - // Construct expected data to be relayed to Polygon contracts - const addSupportedIdentifierData = polygon_whitelist.methods - .addSupportedIdentifier(polygonIdentifiers[i]) - .encodeABI(); - const relayedWhitelistTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { - filter: { to: polygon_whitelist.options.address }, - fromBlock: 0, - }); - assert( - relayedWhitelistTransactions.find((e) => e.returnValues.data === addSupportedIdentifierData), - "Could not find RelayedGovernanceRequest matching expected relayed addSupportedIdentifier transaction" - ); - console.log( - `- GovernorRootTunnel correctly emitted events to whitelist identifier ${ - polygonIdentifiers[i] - } (UTF8: ${web3.utils.hexToUtf8(polygonIdentifiers[i])})` - ); + if (!(await polygon_whitelist.methods.isIdentifierSupported(polygonIdentifiers[i]).call())) { + // Construct expected data to be relayed to Polygon contracts + const addSupportedIdentifierData = polygon_whitelist.methods + .addSupportedIdentifier(polygonIdentifiers[i]) + .encodeABI(); + const relayedWhitelistTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { + filter: { to: polygon_whitelist.options.address }, + fromBlock: 0, + }); + assert( + relayedWhitelistTransactions.find((e) => e.returnValues.data === addSupportedIdentifierData), + "Could not find RelayedGovernanceRequest matching expected relayed addSupportedIdentifier transaction" + ); + console.log( + `- GovernorRootTunnel correctly emitted events to whitelist identifier ${ + polygonIdentifiers[i] + } (UTF8: ${web3.utils.hexToUtf8(polygonIdentifiers[i])})` + ); + } else { + console.log( + `- Identifier ${identifiers[i]} (UTF8: ${web3.utils.hexToUtf8( + polygonIdentifiers[i] + )}) is whitelisted on Polygon. Nothing to check.` + ); + } } } } diff --git a/packages/scripts/admin-proposals/registerContract.js b/packages/scripts/admin-proposals/registerContract.js index c5587dba65..5a8783075a 100644 --- a/packages/scripts/admin-proposals/registerContract.js +++ b/packages/scripts/admin-proposals/registerContract.js @@ -246,45 +246,51 @@ async function run() { } if (polygonContractToRegister) { - const addMemberData = polygon_registry.methods - .addMember(RegistryRolesEnum.CONTRACT_CREATOR, polygon_governor.options.address) - .encodeABI(); - const registerContractData = polygon_registry.methods.registerContract([], polygonContractToRegister).encodeABI(); - const removeMemberData = polygon_registry.methods - .removeMember(RegistryRolesEnum.CONTRACT_CREATOR, polygon_governor.options.address) - .encodeABI(); - const relayedRegistryTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { - filter: { to: polygon_registry.options.address }, - fromBlock: 0, - }); - const relayedRegisterContractEvent = relayedRegistryTransactions.find( - (e) => e.returnValues.data === registerContractData - ); - // It's hard to test whether the addMember and removeMember transactions were relayed as well, since those - // governance transactions could have been executed many blocks before and after the registerContract - // transaction respectively. For now, we'll make the loose assumption that they were executed within a - // reasonable range of blocks, which will be true when testing against a Mainnet fork. - const beforeRelayedRegistryTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { - filter: { to: polygon_registry.options.address }, - fromBlock: relayedRegisterContractEvent.blockNumber - 1, - toBlock: relayedRegisterContractEvent.blockNumber, - }); - assert( - beforeRelayedRegistryTransactions.find((e) => e.returnValues.data === addMemberData), - "Could not find RelayedGovernanceRequest matching expected relayed addMemberData transaction" - ); - const afterRelayedRegistryTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { - filter: { to: polygon_registry.options.address }, - fromBlock: relayedRegisterContractEvent.blockNumber, - toBlock: relayedRegisterContractEvent.blockNumber + 1, - }); - assert( - afterRelayedRegistryTransactions.find((e) => e.returnValues.data === removeMemberData), - "Could not find RelayedGovernanceRequest matching expected relayed removeMemberData transaction" - ); - console.log( - `- GovernorRootTunnel correctly emitted events to registry ${polygon_registry.options.address} preceded and followed by addMember and removeMember respectively` - ); + if (!(await polygon_registry.methods.isContractRegistered(polygonContractToRegister).call())) { + const addMemberData = polygon_registry.methods + .addMember(RegistryRolesEnum.CONTRACT_CREATOR, polygon_governor.options.address) + .encodeABI(); + const registerContractData = polygon_registry.methods + .registerContract([], polygonContractToRegister) + .encodeABI(); + const removeMemberData = polygon_registry.methods + .removeMember(RegistryRolesEnum.CONTRACT_CREATOR, polygon_governor.options.address) + .encodeABI(); + const relayedRegistryTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { + filter: { to: polygon_registry.options.address }, + fromBlock: 0, + }); + const relayedRegisterContractEvent = relayedRegistryTransactions.find( + (e) => e.returnValues.data === registerContractData + ); + // It's hard to test whether the addMember and removeMember transactions were relayed as well, since those + // governance transactions could have been executed many blocks before and after the registerContract + // transaction respectively. For now, we'll make the loose assumption that they were executed within a + // reasonable range of blocks, which will be true when testing against a Mainnet fork. + const beforeRelayedRegistryTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { + filter: { to: polygon_registry.options.address }, + fromBlock: relayedRegisterContractEvent.blockNumber - 1, + toBlock: relayedRegisterContractEvent.blockNumber, + }); + assert( + beforeRelayedRegistryTransactions.find((e) => e.returnValues.data === addMemberData), + "Could not find RelayedGovernanceRequest matching expected relayed addMemberData transaction" + ); + const afterRelayedRegistryTransactions = await governorRootTunnel.getPastEvents("RelayedGovernanceRequest", { + filter: { to: polygon_registry.options.address }, + fromBlock: relayedRegisterContractEvent.blockNumber, + toBlock: relayedRegisterContractEvent.blockNumber + 1, + }); + assert( + afterRelayedRegistryTransactions.find((e) => e.returnValues.data === removeMemberData), + "Could not find RelayedGovernanceRequest matching expected relayed removeMemberData transaction" + ); + console.log( + `- GovernorRootTunnel correctly emitted events to registry ${polygon_registry.options.address} preceded and followed by addMember and removeMember respectively` + ); + } else { + console.log("- Contract @ ", polygonContractToRegister, "is already registered on Polygon. Nothing to check."); + } } } console.groupEnd();