You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.6 KiB
Solidity
95 lines
2.6 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
|
|
pragma solidity ^0.8.0;
|
|
|
|
import "../../utils/Address.sol";
|
|
import "../../vendor/polygon/IFxMessageProcessor.sol";
|
|
|
|
abstract contract BaseRelayMock {
|
|
// needed to parse custom errors
|
|
error NotCrossChainCall();
|
|
error InvalidCrossChainSender(address sender, address expected);
|
|
|
|
address internal _currentSender;
|
|
|
|
function relayAs(address target, bytes calldata data, address sender) external virtual {
|
|
address previousSender = _currentSender;
|
|
|
|
_currentSender = sender;
|
|
|
|
(bool success, bytes memory returndata) = target.call(data);
|
|
Address.verifyCallResultFromTarget(target, success, returndata, "low-level call reverted");
|
|
|
|
_currentSender = previousSender;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* AMB
|
|
*/
|
|
contract BridgeAMBMock is BaseRelayMock {
|
|
function messageSender() public view returns (address) {
|
|
return _currentSender;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Arbitrum
|
|
*/
|
|
contract BridgeArbitrumL1Mock is BaseRelayMock {
|
|
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment
|
|
address public immutable inbox = address(new BridgeArbitrumL1Inbox());
|
|
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment
|
|
address public immutable outbox = address(new BridgeArbitrumL1Outbox());
|
|
|
|
function activeOutbox() public view returns (address) {
|
|
return outbox;
|
|
}
|
|
|
|
function currentSender() public view returns (address) {
|
|
return _currentSender;
|
|
}
|
|
}
|
|
|
|
contract BridgeArbitrumL1Inbox {
|
|
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment
|
|
address public immutable bridge = msg.sender;
|
|
}
|
|
|
|
contract BridgeArbitrumL1Outbox {
|
|
/// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment
|
|
address public immutable bridge = msg.sender;
|
|
|
|
function l2ToL1Sender() public view returns (address) {
|
|
return BridgeArbitrumL1Mock(bridge).currentSender();
|
|
}
|
|
}
|
|
|
|
contract BridgeArbitrumL2Mock is BaseRelayMock {
|
|
function wasMyCallersAddressAliased() public view returns (bool) {
|
|
return _currentSender != address(0);
|
|
}
|
|
|
|
function myCallersAddressWithoutAliasing() public view returns (address) {
|
|
return _currentSender;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Optimism
|
|
*/
|
|
contract BridgeOptimismMock is BaseRelayMock {
|
|
function xDomainMessageSender() public view returns (address) {
|
|
return _currentSender;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Polygon
|
|
*/
|
|
contract BridgePolygonChildMock is BaseRelayMock {
|
|
function relayAs(address target, bytes calldata data, address sender) external override {
|
|
IFxMessageProcessor(target).processMessageFromRoot(0, sender, data);
|
|
}
|
|
}
|