// SPDX-License-Identifier: UNLICENSED pragma solidity =0.8.18; import "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol"; import "../ISOMA.sol"; import "../SOMAlib.sol"; import "./ISomaContract.sol"; contract SomaContractUpgradeable is ISomaContract, PausableUpgradeable, ERC165Upgradeable, MulticallUpgradeable { function __SomaContract_init() internal onlyInitializing { __ERC165_init_unchained(); __Context_init_unchained(); __SomaContract_init_unchained(); __Multicall_init_unchained(); __Pausable_init_unchained(); } function __SomaContract_init_unchained() internal onlyInitializing {} ISOMA public immutable override SOMA = SOMAlib.SOMA; modifier onlyMaster() { address sender = _msgSender(); require(SOMA.master() == sender, "SOMA: MASTER"); _; } modifier onlyMasterOrSubMaster() { address sender = _msgSender(); require(SOMA.master() == sender || SOMA.subMaster() == sender, "SOMA: MASTER or SUB MASTER only"); _; } function pause() external virtual override onlyMasterOrSubMaster { _pause(); } function unpause() external virtual override onlyMasterOrSubMaster { _unpause(); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(ISomaContract).interfaceId || super.supportsInterface(interfaceId); } function paused() public view virtual override returns (bool) { return PausableUpgradeable(address(SOMA)).paused() || super.paused(); } uint256[50] private __gap; }