// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (crosschain/optimism/CrossChainEnabledOptimism.sol) pragma solidity ^0.8.4; import "../CrossChainEnabledUpgradeable.sol"; import "./LibOptimismUpgradeable.sol"; import "../../proxy/utils/Initializable.sol"; /** * @dev https://www.optimism.io/[Optimism] specialization or the * {CrossChainEnabled} abstraction. * * The messenger (`CrossDomainMessenger`) contract is provided and maintained by * the optimism team. You can find the address of this contract on mainnet and * kovan in the https://github.com/ethereum-optimism/optimism/tree/develop/packages/contracts/deployments[deployments section of Optimism monorepo]. * * _Available since v4.6._ */ abstract contract CrossChainEnabledOptimismUpgradeable is Initializable, CrossChainEnabledUpgradeable { /// @custom:oz-upgrades-unsafe-allow state-variable-immutable address private immutable _messenger; /// @custom:oz-upgrades-unsafe-allow constructor constructor(address messenger) { _messenger = messenger; } /** * @dev see {CrossChainEnabled-_isCrossChain} */ function _isCrossChain() internal view virtual override returns (bool) { return LibOptimismUpgradeable.isCrossChain(_messenger); } /** * @dev see {CrossChainEnabled-_crossChainSender} */ function _crossChainSender() internal view virtual override onlyCrossChain returns (address) { return LibOptimismUpgradeable.crossChainSender(_messenger); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; }