Files
dodo-contractV2/contracts/Factory/ERC721Factory.sol
2021-07-02 17:20:09 +08:00

62 lines
1.5 KiB
Solidity

/*
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";
/**
* @title DODO ERC721Factory
* @author DODO Breeder
*
* @notice Help user to create erc721 token
*/
contract ERC721Facotry {
// ============ Templates ============
address public immutable _CLONE_FACTORY_;
address public immutable _ERC721_TEMPLATE_;
// ============ Events ============
event NewERC721(address erc721, address creator);
// ============ Registry ============
mapping(address => address[]) public _USER_REGISTRY_;
// ============ Functions ============
constructor(
address cloneFactory,
address erc721Template
) public {
_CLONE_FACTORY_ = cloneFactory;
_ERC721_TEMPLATE_ = erc721Template;
}
function createERC721(
string memory name,
string memory symbol,
string memory baseUrl
) external returns (address newERC721) {
newERC721 = ICloneFactory(_CLONE_FACTORY_).clone(_ERC721_TEMPLATE_);
InitializableERC721(newERC721).init(name, symbol, baseUrl);
_USER_REGISTRY_[msg.sender].push(newERC721);
emit NewERC721(newERC721, msg.sender);
}
function getTokenByUser(address user)
external
view
returns (address[] memory tokens)
{
return _USER_REGISTRY_[user];
}
}