CommunityOwnable.sol
1 // SPDX-License-Identifier: Mozilla Public License 2.0 2 3 pragma solidity ^0.8.17; 4 5 import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; 6 7 contract CommunityOwnable { 8 error CommunityOwnable_InvalidTokenAddress(); 9 error CommunityOwnable_NotAuthorized(); 10 11 address public immutable ownerToken; 12 address public immutable masterToken; 13 14 constructor(address _ownerToken, address _masterToken) { 15 ownerToken = _ownerToken; 16 masterToken = _masterToken; 17 18 if (ownerToken == address(0) && masterToken == address(0)) { 19 revert CommunityOwnable_InvalidTokenAddress(); 20 } 21 } 22 23 /// @dev Reverts if the msg.sender does not possess either an OwnerToken or a MasterToken. 24 modifier onlyCommunityOwnerOrTokenMaster() { 25 if ( 26 (ownerToken != address(0) && IERC721(ownerToken).balanceOf(msg.sender) == 0) 27 && (masterToken != address(0) && IERC721(masterToken).balanceOf(msg.sender) == 0) 28 ) { 29 revert CommunityOwnable_NotAuthorized(); 30 } 31 _; 32 } 33 }