Added tests to ensure that all contracts are updated correctly
This commit is contained in:
parent
f33a61c906
commit
23b15c03f1
116
test/TestProxyUpdated.sol
Normal file
116
test/TestProxyUpdated.sol
Normal file
@ -0,0 +1,116 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.6.12;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import { MockProposal } from "./MockProposal.sol";
|
||||
import { console2 } from "@forge-std/console2.sol";
|
||||
import { GovernancePatchUpgrade } from "@root/v4-patch/GovernancePatchUpgrade.sol";
|
||||
|
||||
contract TestProxyUpdating is MockProposal {
|
||||
function isContract(address _addr) private view returns (bool) {
|
||||
uint32 size;
|
||||
assembly {
|
||||
size := extcodesize(_addr)
|
||||
}
|
||||
return (size > 0);
|
||||
}
|
||||
|
||||
function getAddressFromSlot(address _contract, bytes32 slot) internal view returns (address) {
|
||||
bytes32 slotData = vm.load(_contract, slot);
|
||||
return address(uint256(slotData));
|
||||
}
|
||||
|
||||
function getUpgradeableProxyImplementationAddress(address proxy) internal view returns (address) {
|
||||
bytes32 proxyImplementationSlot = bytes32(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc);
|
||||
|
||||
return getAddressFromSlot(proxy, proxyImplementationSlot);
|
||||
}
|
||||
|
||||
function getRelayerRegistryImplementationAddress() internal view returns (address) {
|
||||
return getUpgradeableProxyImplementationAddress(getRelayerRegistryProxyAddress());
|
||||
}
|
||||
|
||||
function getStakingImplementationAddress() internal view returns (address) {
|
||||
return getUpgradeableProxyImplementationAddress(getStakingProxyAddress());
|
||||
}
|
||||
|
||||
function testGovernanceStakingProxyUpdated() public {
|
||||
address stakingProxyAddressBeforeExecution = getStakingProxyAddress();
|
||||
console2.log("Staking proxy address before proposal execution: %s", stakingProxyAddressBeforeExecution);
|
||||
|
||||
createAndExecuteProposal();
|
||||
|
||||
address stakingProxyAddressAfterExecution = getStakingProxyAddress();
|
||||
console2.log("Staking proxy address after proposal execution: %s", stakingProxyAddressAfterExecution);
|
||||
|
||||
require(stakingProxyAddressBeforeExecution != stakingProxyAddressAfterExecution, "Staking proxy address didn't changed");
|
||||
require(isContract(stakingProxyAddressAfterExecution));
|
||||
}
|
||||
|
||||
function testGovernanceStakingImplementationUpdated() public {
|
||||
address stakingImplementationAddressBeforeExecution = getStakingImplementationAddress();
|
||||
console2.log("Staking implementation address before proposal execution: %s", stakingImplementationAddressBeforeExecution);
|
||||
|
||||
createAndExecuteProposal();
|
||||
|
||||
address stakingImplementationAddressAfterExecution = getStakingImplementationAddress();
|
||||
console2.log("Staking implementation address after proposal execution: %s", stakingImplementationAddressAfterExecution);
|
||||
|
||||
require(
|
||||
stakingImplementationAddressBeforeExecution != stakingImplementationAddressAfterExecution,
|
||||
"Staking implementation address didn't changed"
|
||||
);
|
||||
require(isContract(stakingImplementationAddressAfterExecution));
|
||||
}
|
||||
|
||||
function testRelayerRegistryImplementationUpdated() public {
|
||||
address relayerRegistryImplementationAddressBeforeExecution = getRelayerRegistryImplementationAddress();
|
||||
console2.log(
|
||||
"Relayer registry implementation address before proposal execution: %s", relayerRegistryImplementationAddressBeforeExecution
|
||||
);
|
||||
|
||||
createAndExecuteProposal();
|
||||
|
||||
address relayerRegistryImplementationAddressAfterExecution = getRelayerRegistryImplementationAddress();
|
||||
console2.log(
|
||||
"Relayer registry implementation address after proposal execution: %s", relayerRegistryImplementationAddressAfterExecution
|
||||
);
|
||||
|
||||
require(
|
||||
relayerRegistryImplementationAddressBeforeExecution != relayerRegistryImplementationAddressAfterExecution,
|
||||
"Relayer registry implementation address didn't changed"
|
||||
);
|
||||
require(isContract(relayerRegistryImplementationAddressAfterExecution));
|
||||
}
|
||||
|
||||
function testGovernanceImplementationUpdated() public {
|
||||
address governanceImplementationAddressBeforeExecution = getUpgradeableProxyImplementationAddress(_governanceAddress);
|
||||
console2.log("Governance implementation address before proposal execution: %s", governanceImplementationAddressBeforeExecution);
|
||||
|
||||
createAndExecuteProposal();
|
||||
|
||||
address governanceImplementationAddressAfterExecution = getUpgradeableProxyImplementationAddress(_governanceAddress);
|
||||
console2.log("Governance implementation address after proposal execution: %s", governanceImplementationAddressAfterExecution);
|
||||
|
||||
require(
|
||||
governanceImplementationAddressBeforeExecution != governanceImplementationAddressAfterExecution,
|
||||
"Governance implementation address didn't changed"
|
||||
);
|
||||
require(isContract(governanceImplementationAddressAfterExecution));
|
||||
}
|
||||
|
||||
function testRelayerRegistryProxyNotUpdated() public {
|
||||
address relayerRegistryProxyAddressBeforeExecution = getRelayerRegistryProxyAddress();
|
||||
console2.log("Relayer registry proxy before proposal execution: %s", relayerRegistryProxyAddressBeforeExecution);
|
||||
|
||||
createAndExecuteProposal();
|
||||
|
||||
address relayerRegistryProxyAddressAfterExecution = getRelayerRegistryProxyAddress();
|
||||
console2.log("Relayer registry proxyafter proposal execution: %s", relayerRegistryProxyAddressAfterExecution);
|
||||
|
||||
require(
|
||||
relayerRegistryProxyAddressBeforeExecution == relayerRegistryProxyAddressAfterExecution,
|
||||
"Relayer registry proxy address changed"
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user