Files
dodo-contractV2/contracts/Factory/DODONFT1155.sol
2021-07-02 17:25:51 +08:00

57 lines
1.7 KiB
Solidity

/*
Copyright 2021 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
import {ERC1155} from "../external/ERC1155/ERC1155.sol";
import {Strings} from "../external/utils/Strings.sol";
import {InitializableOwnable} from "../lib/InitializableOwnable.sol";
contract DODONFT1155 is ERC1155, InitializableOwnable {
using Strings for uint256;
uint256 public _CUR_TOKENID_;
string internal _baseUri = "";
mapping (uint256 => string) private _tokenURIs;
// ============ Event =============
event DODONFTMint(address creator, uint256 tokenId, uint256 amount);
event DODONFTBurn(address account, uint256 tokenId, uint256 amount);
function mint(string calldata uri, uint256 amount) external {
_mint(msg.sender, _CUR_TOKENID_, amount, "");
_setTokenURI(_CUR_TOKENID_, uri);
emit DODONFTMint(msg.sender, _CUR_TOKENID_, amount);
_CUR_TOKENID_ = _CUR_TOKENID_ + 1;
}
function burn(address account, uint256 tokenId, uint256 amount) external onlyOwner {
require(tokenId < _CUR_TOKENID_, "TOKENID_INVALID");
_burn(account, tokenId, amount);
emit DODONFTBurn(account, tokenId, amount);
}
function uri(uint256 tokenId) public view override returns (string memory) {
string memory _tokenURI = _tokenURIs[tokenId];
string memory base = _baseUri;
if (bytes(base).length == 0) {
return _tokenURI;
}
if (bytes(_tokenURI).length > 0) {
return string(abi.encodePacked(base, _tokenURI));
}
return super.uri(tokenId);
}
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal {
_tokenURIs[tokenId] = _tokenURI;
}
}