-
Notifications
You must be signed in to change notification settings - Fork 2
/
Minion-ERC1155.sol
75 lines (65 loc) · 2.57 KB
/
Minion-ERC1155.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol";
contract minion_erc1155 is ERC1155, Ownable, ERC1155Supply {
uint public minionSupply;
uint public maxMinionSupply=1<<255;
mapping(uint => string) public tokenURI;
mapping(uint => uint) public supplyLimit;
constructor() ERC1155("") {}
function setURI(uint _id,string memory newuri) public onlyOwner {
if(bytes(tokenURI[_id]).length == 0){
tokenURI[_id] = newuri;
emit URI(newuri, _id);
}
}
function setMaxMinionSupply(uint limit)public onlyOwner{
require(maxMinionSupply==1<<255,"Max limit set already");
maxMinionSupply=limit;
}
function uri(uint _id) public override view returns (string memory) {
return tokenURI[_id];
}
function mint(address account, uint256 id, uint256 amount,uint256 limit,
string memory tokenUri, bytes memory data)
public
onlyOwner
{
require(amount<=limit,"Mint too more");
checkSupplyLimit(id,amount,limit);
_mint(account, id, amount, data);
minionSupply+=amount;
setURI(id,tokenUri);
}
function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts,
uint256[] memory limits,string[] memory uris,bytes memory data)
public
onlyOwner
{
require(ids.length==limits.length&&ids.length==uris.length,"ids limits uri length max eq");
_mintBatch(to, ids, amounts, data);
for (uint256 i = 0; i < ids.length; i++) {
require(amounts[i]<=limits[i],"Mint too more");
checkSupplyLimit(ids[i],amounts[i],limits[i]);
minionSupply += amounts[i];
setURI(ids[i],uris[i]);
}
}
function checkSupplyLimit( uint256 id, uint256 amount,uint limit)private{
require(maxMinionSupply>=minionSupply,"Mint too more");
if(supplyLimit[id]==0&&totalSupply(id)==0){
supplyLimit[id]=limit;
}else{
require(supplyLimit[id]>=totalSupply(id)+amount,"Mint too more");
}
}
// The following functions are overrides required by Solidity.
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);
}
}