LibOptimism.sol 1.4 KB

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