This commit is contained in:
0xb337r007 2024-02-11 11:45:11 +01:00 committed by r4bbit
parent 50d22d68a5
commit 67aa09e101
No known key found for this signature in database
GPG Key ID: E95F1E9447DC91A9
2 changed files with 24 additions and 35 deletions

View File

@ -2,7 +2,7 @@
pragma solidity ^0.8.17;
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
contract CommunityOwnable {
error CommunityOwnable_InvalidTokenAddress();
@ -23,10 +23,8 @@ contract CommunityOwnable {
/// @dev Reverts if the msg.sender does not possess either an OwnerToken or a MasterToken.
modifier onlyCommunityOwnerOrTokenMaster() {
if (
(ownerToken != address(0) &&
IERC721(ownerToken).balanceOf(msg.sender) == 0) &&
(masterToken != address(0) &&
IERC721(masterToken).balanceOf(msg.sender) == 0)
(ownerToken != address(0) && IERC721(ownerToken).balanceOf(msg.sender) == 0)
&& (masterToken != address(0) && IERC721(masterToken).balanceOf(msg.sender) == 0)
) {
revert CommunityOwnable_NotAuthorized();
}

View File

@ -1,12 +1,12 @@
// SPDX-License-Identifier: Mozilla Public License 2.0
pragma solidity ^0.8.17;
import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import {ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import {Context} from "@openzeppelin/contracts/utils/Context.sol";
import {Counters} from "@openzeppelin/contracts/utils/Counters.sol";
import {CommunityOwnable} from "../CommunityOwnable.sol";
import { ERC721 } from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import { ERC721Enumerable } from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import { Context } from "@openzeppelin/contracts/utils/Context.sol";
import { Counters } from "@openzeppelin/contracts/utils/Counters.sol";
import { CommunityOwnable } from "../CommunityOwnable.sol";
abstract contract BaseToken is Context, ERC721Enumerable, CommunityOwnable {
using Counters for Counters.Counter;
@ -23,11 +23,7 @@ abstract contract BaseToken is Context, ERC721Enumerable, CommunityOwnable {
/// @param from The address that minted the token
/// @param to The address that received the token
/// @param tokenId The token ID that was minted
event StatusMint(
address indexed from,
address indexed to,
uint256 indexed tokenId
);
event StatusMint(address indexed from, address indexed to, uint256 indexed tokenId);
// State variables
@ -58,7 +54,10 @@ abstract contract BaseToken is Context, ERC721Enumerable, CommunityOwnable {
string memory _baseTokenURI,
address _ownerToken,
address _masterToken
) ERC721(_name, _symbol) CommunityOwnable(_ownerToken, _masterToken) {
)
ERC721(_name, _symbol)
CommunityOwnable(_ownerToken, _masterToken)
{
maxSupply = _maxSupply;
remoteBurnable = _remoteBurnable;
transferable = _transferable;
@ -69,9 +68,7 @@ abstract contract BaseToken is Context, ERC721Enumerable, CommunityOwnable {
// External functions
function setMaxSupply(
uint256 newMaxSupply
) external virtual onlyCommunityOwnerOrTokenMaster {
function setMaxSupply(uint256 newMaxSupply) external virtual onlyCommunityOwnerOrTokenMaster {
if (newMaxSupply < mintedCount()) {
revert BaseToken_MaxSupplyLowerThanTotalSupply();
}
@ -84,9 +81,7 @@ abstract contract BaseToken is Context, ERC721Enumerable, CommunityOwnable {
* URI autogenerated based on the base URI passed at construction.
*
*/
function mintTo(
address[] memory addresses
) public onlyCommunityOwnerOrTokenMaster {
function mintTo(address[] memory addresses) public onlyCommunityOwnerOrTokenMaster {
if (_tokenIdTracker.current() + addresses.length > maxSupply) {
revert BaseToken_MaxSupplyReached();
}
@ -103,9 +98,7 @@ abstract contract BaseToken is Context, ERC721Enumerable, CommunityOwnable {
* @notice remoteBurn allows the owner to burn a token
* @param tokenIds The list of token IDs to be burned
*/
function remoteBurn(
uint256[] memory tokenIds
) public onlyCommunityOwnerOrTokenMaster {
function remoteBurn(uint256[] memory tokenIds) public onlyCommunityOwnerOrTokenMaster {
if (!remoteBurnable) revert BaseToken_NotRemoteBurnable();
for (uint256 i = 0; i < tokenIds.length; i++) {
@ -116,9 +109,7 @@ abstract contract BaseToken is Context, ERC721Enumerable, CommunityOwnable {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(
bytes4 interfaceId
) public view virtual override(ERC721Enumerable) returns (bool) {
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721Enumerable) returns (bool) {
return super.supportsInterface(interfaceId);
}
@ -137,11 +128,7 @@ abstract contract BaseToken is Context, ERC721Enumerable, CommunityOwnable {
// can be burned so we use a separate counter.
for (uint256 i = 0; i < addresses.length; i++) {
_safeMint(addresses[i], _tokenIdTracker.current(), "");
emit StatusMint(
address(0),
addresses[i],
_tokenIdTracker.current()
);
emit StatusMint(address(0), addresses[i], _tokenIdTracker.current());
_tokenIdTracker.increment();
}
}
@ -155,7 +142,11 @@ abstract contract BaseToken is Context, ERC721Enumerable, CommunityOwnable {
address to,
uint256 firstTokenId,
uint256 batchSize
) internal virtual override(ERC721Enumerable) {
)
internal
virtual
override(ERC721Enumerable)
{
if (from != address(0) && to != address(0) && !transferable) {
revert BaseToken_NotTransferable();
}