Files

76 lines
2.2 KiB
Solidity
Raw Permalink Normal View History

2021-04-06 18:47:35 +08:00
/*
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
import {ICloneFactory} from "../lib/CloneFactory.sol";
import {InitializableERC721} from "../external/ERC721/InitializableERC721.sol";
import {InitializableERC1155} from "../external/ERC1155/InitializableERC1155.sol";
/**
* @title DODO NFTTokenFactory
* @author DODO Breeder
*
* @notice Help user to create erc721 && erc1155 token
*/
contract NFTTokenFactory {
// ============ Templates ============
address public immutable _CLONE_FACTORY_;
address public immutable _ERC721_TEMPLATE_;
address public immutable _ERC1155_TEMPLATE_;
// ============ Events ============
event NewERC721(address erc721, address creator);
event NewERC1155(address erc1155, address creator);
// ============ Registry ============
mapping(address => address[]) public _USER_ERC721_REGISTRY_;
mapping(address => address[]) public _USER_ERC1155_REGISTRY_;
// ============ Functions ============
constructor(
address cloneFactory,
address erc721Template,
address erc1155Tempalte
) public {
_CLONE_FACTORY_ = cloneFactory;
_ERC721_TEMPLATE_ = erc721Template;
_ERC1155_TEMPLATE_ = erc1155Tempalte;
}
function createERC721(
2021-04-15 12:19:51 +08:00
string memory uri
2021-04-06 18:47:35 +08:00
) external returns (address newERC721) {
newERC721 = ICloneFactory(_CLONE_FACTORY_).clone(_ERC721_TEMPLATE_);
2021-04-15 12:19:51 +08:00
InitializableERC721(newERC721).init(msg.sender, "DODONFT", "DODONFT", uri);
2021-04-06 18:47:35 +08:00
_USER_ERC721_REGISTRY_[msg.sender].push(newERC721);
emit NewERC721(newERC721, msg.sender);
}
function createERC1155(
uint256 amount,
2021-04-15 12:19:51 +08:00
string memory uri
2021-04-06 18:47:35 +08:00
) external returns (address newERC1155) {
newERC1155 = ICloneFactory(_CLONE_FACTORY_).clone(_ERC1155_TEMPLATE_);
2021-04-15 12:19:51 +08:00
InitializableERC1155(newERC1155).init(msg.sender, amount, uri);
2021-04-06 18:47:35 +08:00
_USER_ERC1155_REGISTRY_[msg.sender].push(newERC1155);
emit NewERC1155(newERC1155, msg.sender);
}
function getERC721TokenByUser(address user)
external
view
returns (address[] memory tokens)
{
return _USER_ERC721_REGISTRY_[user];
}
}