62 lines
1.6 KiB
Solidity
62 lines
1.6 KiB
Solidity
// SPDX-License-Identifier: Apache 2
|
|
|
|
pragma solidity ^0.8.0;
|
|
|
|
import "../contracts/bridge/Bridge.sol";
|
|
import "forge-std/Test.sol";
|
|
|
|
// @dev ensure some internal methods are public for testing
|
|
contract ExportedBridge is Bridge {
|
|
function _truncateAddressPub(bytes32 b) public pure returns (address) {
|
|
return super._truncateAddress(b);
|
|
}
|
|
|
|
function setChainIdPub(uint16 chainId) public {
|
|
return super.setChainId(chainId);
|
|
}
|
|
|
|
function setEvmChainIdPub(uint256 evmChainId) public {
|
|
return super.setEvmChainId(evmChainId);
|
|
}
|
|
}
|
|
|
|
contract TestBridge is Test {
|
|
ExportedBridge bridge;
|
|
|
|
function setUp() public {
|
|
bridge = new ExportedBridge();
|
|
}
|
|
|
|
function testTruncate(bytes32 b) public {
|
|
bool invalidAddress = bytes12(b) != 0;
|
|
if (invalidAddress) {
|
|
vm.expectRevert( "invalid EVM address");
|
|
}
|
|
bytes32 converted = bytes32(uint256(uint160(bytes20(bridge._truncateAddressPub(b)))));
|
|
|
|
if (!invalidAddress) {
|
|
require(converted == b, "truncate does not roundrip");
|
|
}
|
|
}
|
|
|
|
function testEvmChainId() public {
|
|
vm.chainId(1);
|
|
bridge.setChainIdPub(1);
|
|
bridge.setEvmChainIdPub(1);
|
|
assertEq(bridge.chainId(), 1);
|
|
assertEq(bridge.evmChainId(), 1);
|
|
|
|
// fork occurs, block.chainid changes
|
|
vm.chainId(10001);
|
|
|
|
bridge.setEvmChainIdPub(10001);
|
|
assertEq(bridge.chainId(), 1);
|
|
assertEq(bridge.evmChainId(), 10001);
|
|
|
|
// evmChainId must equal block.chainid
|
|
vm.expectRevert("invalid evmChainId");
|
|
bridge.setEvmChainIdPub(1337);
|
|
|
|
}
|
|
}
|