/ contracts / CommunityOwnable.sol
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  }