Governance tests

This commit is contained in:
derpy-duck 2023-03-16 13:54:57 +00:00
parent 5fa2fc6070
commit 1e18ef2599
1 changed files with 151 additions and 1 deletions

View File

@ -18,6 +18,7 @@ import {CoreRelayerImplementation} from "../contracts/coreRelayer/CoreRelayerImp
import {CoreRelayerProxy} from "../contracts/coreRelayer/CoreRelayerProxy.sol";
import {CoreRelayerMessages} from "../contracts/coreRelayer/CoreRelayerMessages.sol";
import {CoreRelayerStructs} from "../contracts/coreRelayer/CoreRelayerStructs.sol";
import {CoreRelayerGovernance} from "../contracts/coreRelayer/CoreRelayerGovernance.sol";
import {MockGenericRelayer} from "./MockGenericRelayer.sol";
import {MockWormhole} from "../contracts/mock/MockWormhole.sol";
import {IWormhole} from "../contracts/interfaces/IWormhole.sol";
@ -279,7 +280,7 @@ contract TestCoreRelayer is Test {
uint16 chainId,
bytes32 coreRelayerContractAddress
) internal {
bytes32 coreRelayerModule = 0x000000000000000000000000000000000000000000436f726552656c61796572;
bytes32 coreRelayerModule = 0x000000000000000000000000000000000000000000436F726552656C61796572;
bytes memory message =
abi.encodePacked(coreRelayerModule, uint8(2), currentChainId, chainId, coreRelayerContractAddress);
IWormhole.VM memory preSignedMessage = IWormhole.VM({
@ -1926,4 +1927,153 @@ contract TestCoreRelayer is Test {
assertTrue(map[1].coreRelayer.toWormholeFormat(msg1) == bytes32(uint256(uint160(msg1))));
assertTrue(map[1].coreRelayer.fromWormholeFormat(map[1].coreRelayer.toWormholeFormat(msg1)) == msg1);
}
function testSetDefaultRelayProvider() public {
IRelayProvider relayProviderA = setUpRelayProvider(1);
IRelayProvider relayProviderB = setUpRelayProvider(1);
IRelayProvider relayProviderC = setUpRelayProvider(1);
(IWormhole wormhole, WormholeSimulator simulator) = setUpWormhole(1);
IWormholeRelayer wormholeRelayer = setUpCoreRelayer(1, wormhole, address(relayProviderA));
assertTrue(wormholeRelayer.getDefaultRelayProvider() == address(relayProviderA));
bytes32 relayerModule = 0x000000000000000000000000000000000000000000436F726552656C61796572;
bytes memory message = abi.encodePacked(
relayerModule, uint8(3), uint16(1), wormholeRelayer.toWormholeFormat(address(relayProviderB))
);
IWormhole.VM memory preSignedMessage = IWormhole.VM({
version: 1,
timestamp: uint32(block.timestamp),
nonce: 0,
emitterChainId: wormhole.governanceChainId(),
emitterAddress: wormhole.governanceContract(),
sequence: 0,
consistencyLevel: 200,
payload: message,
guardianSetIndex: 0,
signatures: new IWormhole.Signature[](0),
hash: bytes32("")
});
bytes memory signed = simulator.encodeAndSignMessage(preSignedMessage);
CoreRelayerGovernance(address(wormholeRelayer)).setDefaultRelayProvider(signed);
assertTrue(wormholeRelayer.getDefaultRelayProvider() == address(relayProviderB));
message = abi.encodePacked(
relayerModule, uint8(3), uint16(1), wormholeRelayer.toWormholeFormat(address(relayProviderC))
);
preSignedMessage = IWormhole.VM({
version: 1,
timestamp: uint32(block.timestamp),
nonce: 0,
emitterChainId: wormhole.governanceChainId(),
emitterAddress: wormhole.governanceContract(),
sequence: 0,
consistencyLevel: 200,
payload: message,
guardianSetIndex: 0,
signatures: new IWormhole.Signature[](0),
hash: bytes32("")
});
signed = simulator.encodeAndSignMessage(preSignedMessage);
CoreRelayerGovernance(address(wormholeRelayer)).setDefaultRelayProvider(signed);
assertTrue(wormholeRelayer.getDefaultRelayProvider() == address(relayProviderC));
}
function testRegisterChain() public {
IRelayProvider relayProviderA = setUpRelayProvider(1);
(IWormhole wormhole,) = setUpWormhole(1);
IWormholeRelayer wormholeRelayer1 = setUpCoreRelayer(1, wormhole, address(relayProviderA));
IWormholeRelayer wormholeRelayer2 = setUpCoreRelayer(1, wormhole, address(relayProviderA));
IWormholeRelayer wormholeRelayer3 = setUpCoreRelayer(1, wormhole, address(relayProviderA));
registerCoreRelayerContract(
CoreRelayer(address(wormholeRelayer1)), 1, 2, wormholeRelayer1.toWormholeFormat(address(wormholeRelayer2))
);
registerCoreRelayerContract(
CoreRelayer(address(wormholeRelayer1)), 1, 3, wormholeRelayer1.toWormholeFormat(address(wormholeRelayer3))
);
assertTrue(
CoreRelayer(address(wormholeRelayer1)).registeredCoreRelayerContract(2)
== wormholeRelayer1.toWormholeFormat(address(wormholeRelayer2))
);
assertTrue(
CoreRelayer(address(wormholeRelayer1)).registeredCoreRelayerContract(3)
== wormholeRelayer1.toWormholeFormat(address(wormholeRelayer3))
);
registerCoreRelayerContract(
CoreRelayer(address(wormholeRelayer1)), 1, 3, wormholeRelayer1.toWormholeFormat(address(wormholeRelayer2))
);
assertTrue(
CoreRelayer(address(wormholeRelayer1)).registeredCoreRelayerContract(3)
== wormholeRelayer1.toWormholeFormat(address(wormholeRelayer2))
);
}
function testUpgradeContractToItself() public {
IRelayProvider relayProvider = setUpRelayProvider(1);
(IWormhole wormhole, WormholeSimulator simulator) = setUpWormhole(1);
CoreRelayerSetup coreRelayerSetup = new CoreRelayerSetup();
CoreRelayerImplementation coreRelayerImplementation = new CoreRelayerImplementation();
CoreRelayerProxy myCoreRelayer = new CoreRelayerProxy(
address(coreRelayerSetup),
abi.encodeCall(
CoreRelayerSetup.setup,
(
address(coreRelayerImplementation),
1,
address(wormhole),
address(relayProvider),
wormhole.governanceChainId(),
wormhole.governanceContract(),
block.chainid
)
)
);
CoreRelayer wormholeRelayer = CoreRelayer(address(myCoreRelayer));
for (uint256 i = 0; i < 10; i++) {
CoreRelayerImplementation coreRelayerImplementationNew = new CoreRelayerImplementation();
bytes32 relayerModule = 0x000000000000000000000000000000000000000000436F726552656C61796572;
bytes memory message = abi.encodePacked(
relayerModule,
uint8(1),
uint16(1),
wormholeRelayer.toWormholeFormat(address(coreRelayerImplementationNew))
);
IWormhole.VM memory preSignedMessage = IWormhole.VM({
version: 1,
timestamp: uint32(block.timestamp),
nonce: 0,
emitterChainId: wormhole.governanceChainId(),
emitterAddress: wormhole.governanceContract(),
sequence: 0,
consistencyLevel: 200,
payload: message,
guardianSetIndex: 0,
signatures: new IWormhole.Signature[](0),
hash: bytes32("")
});
bytes memory signed = simulator.encodeAndSignMessage(preSignedMessage);
CoreRelayerGovernance(address(wormholeRelayer)).submitContractUpgrade(signed);
}
}
}