/* Crafted with love by Fueled on Bacon https://fueledonbacon.com */ //SPDX-License-Identifier: MIT pragma solidity ^0.8.15; import "@openzeppelin/contracts/access/Ownable.sol"; import "./ERC721FactoryWide.sol"; import "../interfaces/IERC721EFactory.sol"; import "../nfts/ERC721E.sol"; /// @notice Deploys most simple ERC721 Event contract contract ERC721EFactory is ERC721FactoryWide, IERC721EFactory, Ownable { constructor(address forwarder) { _forwarder = forwarder; } bytes32 private constant forwarderVersion = keccak256(bytes("1.0.0-beta.0+fob.rsv.iForwarder")); using EnumerableSet for EnumerableSet.AddressSet; /// @inheritdoc IERC721EFactory function versionERC721Factory() override virtual external pure returns (string memory){ return "1.0.0-beta.0+fob.rsv.iERC721EFactory"; } function setTrustedForwarer(address forwarder) external virtual override onlyOwner { _setTrustedForwarer(forwarder); } /// @inheritdoc IERC721EFactory function deploy( string memory name, string memory symbol, address venue, bytes memory data ) external virtual override returns(address) { if(!isTrustedForwarder(_msgSender())) revert ERC721EFactoryInvalidForwarder(); ERC721E erc721E = new ERC721E( name, symbol, venue, data ); address contractAddress = address(erc721E); _eventsByVenue[venue].add(contractAddress); emit EventDeployed(venue, contractAddress, block.number); return contractAddress; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC721EFactory).interfaceId || super.supportsInterface(interfaceId); } }