79 lines
2.0 KiB
Solidity
79 lines
2.0 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity 0.8.10;
|
|
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
|
|
import "@openzeppelin/contracts/access/AccessControl.sol";
|
|
import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol";
|
|
import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol";
|
|
|
|
contract BEShard is ERC1155, AccessControl, ERC1155Burnable, ERC1155Supply {
|
|
bytes32 public constant URI_SETTER_ROLE = keccak256("URI_SETTER_ROLE");
|
|
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
|
|
|
|
constructor()
|
|
ERC1155("https://market.cebg.games/api/nft/info/{id}")
|
|
{
|
|
_setRoleAdmin(MINTER_ROLE, DEFAULT_ADMIN_ROLE);
|
|
|
|
_setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
|
|
_setupRole(URI_SETTER_ROLE, msg.sender);
|
|
_setupRole(MINTER_ROLE, msg.sender);
|
|
}
|
|
|
|
function setURI(string memory newuri) public onlyRole(URI_SETTER_ROLE) {
|
|
_setURI(newuri);
|
|
}
|
|
|
|
function mint(address account, uint256 id, uint256 amount, bytes memory data)
|
|
public
|
|
onlyRole(MINTER_ROLE)
|
|
{
|
|
_mint(account, id, amount, data);
|
|
}
|
|
|
|
function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
|
|
public
|
|
onlyRole(MINTER_ROLE)
|
|
{
|
|
_mintBatch(to, ids, amounts, data);
|
|
}
|
|
|
|
// The following functions are overrides required by Solidity.
|
|
|
|
function supportsInterface(bytes4 interfaceId)
|
|
public
|
|
view
|
|
override(ERC1155, AccessControl)
|
|
returns (bool)
|
|
{
|
|
return super.supportsInterface(interfaceId);
|
|
}
|
|
|
|
function _beforeTokenTransfer(
|
|
address operator,
|
|
address from,
|
|
address to,
|
|
uint256[] memory ids,
|
|
uint256[] memory amounts,
|
|
bytes memory data
|
|
)
|
|
internal
|
|
override(ERC1155, ERC1155Supply)
|
|
{
|
|
super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
|
|
}
|
|
|
|
/**
|
|
* @dev Grant mint role to address
|
|
*/
|
|
function setMintRole(address to) external {
|
|
grantRole(MINTER_ROLE, to);
|
|
}
|
|
|
|
/**
|
|
* @dev Remove mint role to address
|
|
*/
|
|
function removeMintRole(address to) external {
|
|
revokeRole(MINTER_ROLE, to);
|
|
}
|
|
}
|