Skip to content

Commit

Permalink
fix(scripts): Add checks in verify step if actions are already comple…
Browse files Browse the repository at this point in the history
…te (UMAprotocol#3262)

* fix(scripts): Add checks in verify step if actions are already complete

* Update collateral.js

* respond to johns comment
  • Loading branch information
nicholaspai authored Jul 30, 2021
1 parent f48cd48 commit a7fcf55
Show file tree
Hide file tree
Showing 4 changed files with 129 additions and 94 deletions.
40 changes: 26 additions & 14 deletions packages/scripts/admin-proposals/addContractCreator.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
57 changes: 33 additions & 24 deletions packages/scripts/admin-proposals/collateral.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.");
}
}
}
}
Expand Down
42 changes: 25 additions & 17 deletions packages/scripts/admin-proposals/identifier.js
Original file line number Diff line number Diff line change
Expand Up @@ -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.`
);
}
}
}
}
Expand Down
84 changes: 45 additions & 39 deletions packages/scripts/admin-proposals/registerContract.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit a7fcf55

Please sign in to comment.