wormhole/ethereum/forge-test/Shutdown.t.sol

87 lines
2.6 KiB
Solidity

// SPDX-License-Identifier: Apache 2
pragma solidity ^0.8.0;
import "../contracts/Implementation.sol";
import "../contracts/Governance.sol";
import "../contracts/Setup.sol";
import "../contracts/Shutdown.sol";
import "../contracts/Wormhole.sol";
import "forge-test/rv-helpers/TestUtils.sol";
import "forge-test/rv-helpers/MyImplementation.sol";
import "forge-test/rv-helpers/IMyWormhole.sol";
contract TestShutdown is TestUtils {
MyImplementation impl;
Wormhole proxy;
Setup setup;
Setup proxiedSetup;
IMyWormhole proxied;
uint256 constant testGuardian = 93941733246223705020089879371323733820373732307041878556247502674739205313440;
bytes32 constant governanceContract = 0x0000000000000000000000000000000000000000000000000000000000000004;
function setUp() public {
vm.chainId(1);
// Deploy setup
setup = new Setup();
// Deploy implementation contract
impl = new MyImplementation(1,2);
// Deploy proxy
proxy = new Wormhole(address(setup), bytes(""));
address[] memory keys = new address[](1);
keys[0] = 0xbeFA429d57cD18b7F8A4d91A2da9AB4AF05d0FBe;
//keys[0] = vm.addr(testGuardian);
//proxied setup
proxiedSetup = Setup(address(proxy));
proxiedSetup.setup({
implementation: address(impl),
initialGuardians: keys,
chainId: 2,
governanceChainId: 1,
governanceContract: governanceContract,
evmChainId: 1
});
proxied = IMyWormhole(address(proxy));
upgradeImplementation();
}
function upgradeImplementation() internal {
vm.chainId(1);
Shutdown shutdn = new Shutdown();
bytes memory payload = payloadSubmitContract(
0x00000000000000000000000000000000000000000000000000000000436f7265,
2,
address(shutdn)
);
(bytes memory _vm, ) = validVm(
0, 0, 0, 1, governanceContract, 0, 0, payload, testGuardian);
proxied.submitContractUpgrade(_vm);
}
function testShutdownInit(address alice, bytes32 storageSlot)
public
unchangedStorage(address(proxied), storageSlot)
{
vm.prank(alice);
proxied.initialize();
}
function testShutdown_publishMessage_revert(address alice, bytes32 storageSlot, uint32 nonce, bytes memory payload, uint8 consistencyLevel)
public
unchangedStorage(address(proxied), storageSlot)
{
vm.prank(alice);
vm.expectRevert();
proxied.publishMessage(nonce,payload,consistencyLevel);
}
}