LibOptimism.sol 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. // SPDX-License-Identifier: MIT
  2. pragma solidity ^0.8.4;
  3. import {ICrossDomainMessenger as Optimism_Bridge} from "../../vendor/optimism/ICrossDomainMessenger.sol";
  4. import "../errors.sol";
  5. /**
  6. * @dev Primitives for cross-chain aware contracts for [Optimism](https://www.optimism.io/).
  7. * See the [documentation](https://community.optimism.io/docs/developers/bridge/messaging/#accessing-msg-sender)
  8. * for the functionality used here.
  9. */
  10. library LibOptimism {
  11. /**
  12. * @dev Returns whether the current function call is the result of a
  13. * cross-chain message relayed by `messenger`.
  14. */
  15. function isCrossChain(address messenger) internal view returns (bool) {
  16. return msg.sender == messenger;
  17. }
  18. /**
  19. * @dev Returns the address of the sender that triggered the current
  20. * cross-chain message through `messenger`.
  21. *
  22. * NOTE: {isCrossChain} should be checked before trying to recover the
  23. * sender, as it will revert with `NotCrossChainCall` if the current
  24. * function call is not the result of a cross-chain message.
  25. */
  26. function crossChainSender(address messenger) internal view returns (address) {
  27. if (!isCrossChain(messenger)) revert NotCrossChainCall();
  28. return Optimism_Bridge(messenger).xDomainMessageSender();
  29. }
  30. }