diff --git a/contracts/factory/MetaverseNFT.sol b/contracts/factory/MetaverseNFT.sol new file mode 100644 index 00000000..018c067f --- /dev/null +++ b/contracts/factory/MetaverseNFT.sol @@ -0,0 +1,12 @@ +function addExtension(address extension) public onlyOwner { + require(!extensionExists[extension], "M:EXTENSION_ALREADY_ADDED"); + require(extension != address(this), "M:EXTENSION_CAN_NOT_BE_THIS"); + require(extension != address(0), "M:EXTENSION_CAN_NOT_BE_ZERO"); + require( + INFTExtension(extension).extensionType() != bytes32(0), + "M:EXTENSION_IS_NOT_NFT_EXTENSION" + ); + uint256 id = _extensions.add(extension); + extensionExists[extension] = true; + emit ExtensionAdded(extension, id); +} \ No newline at end of file diff --git a/contracts/factory/extensions/INFTExtension.sol b/contracts/factory/extensions/INFTExtension.sol new file mode 100644 index 00000000..3879b918 --- /dev/null +++ b/contracts/factory/extensions/INFTExtension.sol @@ -0,0 +1,5 @@ +pragma solidity ^0.8.0; + +interface INFTExtension { + function extensionType() external view returns (string memory); +} \ No newline at end of file