80 lines
2.2 KiB
Solidity
80 lines
2.2 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity 0.8.10;
|
|
|
|
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
|
|
import "@openzeppelin/contracts/access/Ownable.sol";
|
|
import "@openzeppelin/contracts/access/AccessControl.sol";
|
|
|
|
contract BELuckyBox is ERC1155, AccessControl {
|
|
bytes32 public constant URI_SETTER_ROLE = keccak256("URI_SETTER_ROLE");
|
|
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
|
|
bytes32 public constant BURN_ROLE = keccak256("BURN_ROLE");
|
|
|
|
constructor() ERC1155("https://market.cebg.games/api/nft/info/{id}") {
|
|
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
|
|
_grantRole(URI_SETTER_ROLE, msg.sender);
|
|
}
|
|
|
|
function setURI(string memory newuri) external onlyRole(URI_SETTER_ROLE) {
|
|
_setURI(newuri);
|
|
}
|
|
|
|
function mint(address account, uint256 id, uint256 amount, bytes memory data)
|
|
external
|
|
onlyRole(MINTER_ROLE)
|
|
{
|
|
_mint(account, id, amount, data);
|
|
}
|
|
|
|
function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
|
|
external
|
|
onlyRole(MINTER_ROLE)
|
|
{
|
|
_mintBatch(to, ids, amounts, data);
|
|
}
|
|
|
|
function burn(
|
|
address account,
|
|
uint256 id,
|
|
uint256 value
|
|
) external onlyRole(BURN_ROLE) {
|
|
_burn(account, id, value);
|
|
}
|
|
|
|
function burnBatch(
|
|
address account,
|
|
uint256[] memory ids,
|
|
uint256[] memory values
|
|
) external onlyRole(BURN_ROLE) {
|
|
_burnBatch(account, ids, values);
|
|
}
|
|
|
|
// The following functions are overrides required by Solidity.
|
|
|
|
function supportsInterface(bytes4 interfaceId)
|
|
public
|
|
view
|
|
override(ERC1155, AccessControl)
|
|
returns (bool)
|
|
{
|
|
return super.supportsInterface(interfaceId);
|
|
}
|
|
|
|
/**
|
|
* @dev Add factory to mint/burn item
|
|
*/
|
|
function setMintFactory(address factory) external onlyRole(DEFAULT_ADMIN_ROLE) {
|
|
_grantRole(MINTER_ROLE, factory);
|
|
_grantRole(BURN_ROLE, factory);
|
|
}
|
|
|
|
/**
|
|
* @dev Remove factory
|
|
*/
|
|
function removeMintFactory(address factory) external onlyRole(DEFAULT_ADMIN_ROLE) {
|
|
_revokeRole(MINTER_ROLE, factory);
|
|
_revokeRole(BURN_ROLE, factory);
|
|
}
|
|
|
|
}
|