bridges.sol 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.0;
  3. import "../../utils/Address.sol";
  4. import "../../vendor/polygon/IFxMessageProcessor.sol";
  5. abstract contract BaseRelayMock {
  6. // needed to parse custom errors
  7. error NotCrossChainCall();
  8. error InvalidCrossChainSender(address sender, address expected);
  9. address internal _currentSender;
  10. function relayAs(address target, bytes calldata data, address sender) external virtual {
  11. address previousSender = _currentSender;
  12. _currentSender = sender;
  13. (bool success, bytes memory returndata) = target.call(data);
  14. Address.verifyCallResultFromTarget(target, success, returndata, "low-level call reverted");
  15. _currentSender = previousSender;
  16. }
  17. }
  18. /**
  19. * AMB
  20. */
  21. contract BridgeAMBMock is BaseRelayMock {
  22. function messageSender() public view returns (address) {
  23. return _currentSender;
  24. }
  25. }
  26. /**
  27. * Arbitrum
  28. */
  29. contract BridgeArbitrumL1Mock is BaseRelayMock {
  30. /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment
  31. address public immutable inbox = address(new BridgeArbitrumL1Inbox());
  32. /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment
  33. address public immutable outbox = address(new BridgeArbitrumL1Outbox());
  34. function activeOutbox() public view returns (address) {
  35. return outbox;
  36. }
  37. function currentSender() public view returns (address) {
  38. return _currentSender;
  39. }
  40. }
  41. contract BridgeArbitrumL1Inbox {
  42. /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment
  43. address public immutable bridge = msg.sender;
  44. }
  45. contract BridgeArbitrumL1Outbox {
  46. /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment
  47. address public immutable bridge = msg.sender;
  48. function l2ToL1Sender() public view returns (address) {
  49. return BridgeArbitrumL1Mock(bridge).currentSender();
  50. }
  51. }
  52. contract BridgeArbitrumL2Mock is BaseRelayMock {
  53. function wasMyCallersAddressAliased() public view returns (bool) {
  54. return _currentSender != address(0);
  55. }
  56. function myCallersAddressWithoutAliasing() public view returns (address) {
  57. return _currentSender;
  58. }
  59. }
  60. /**
  61. * Optimism
  62. */
  63. contract BridgeOptimismMock is BaseRelayMock {
  64. function xDomainMessageSender() public view returns (address) {
  65. return _currentSender;
  66. }
  67. }
  68. /**
  69. * Polygon
  70. */
  71. contract BridgePolygonChildMock is BaseRelayMock {
  72. function relayAs(address target, bytes calldata data, address sender) external override {
  73. IFxMessageProcessor(target).processMessageFromRoot(0, sender, data);
  74. }
  75. }