1155 mint时判断最大数量
This commit is contained in:
parent
3a66a3f31b
commit
4bfcaa9c6c
@ -15,6 +15,7 @@ contract MinterFactory is Ownable, Initializable, HasSignature {
|
||||
IBEERC1155 public chip;
|
||||
IBEERC1155 public shard;
|
||||
uint256 private _duration;
|
||||
mapping(address => bool) public approvalLists;
|
||||
|
||||
event TokenMinted(
|
||||
address contractAddress,
|
||||
@ -41,6 +42,21 @@ contract MinterFactory is Ownable, Initializable, HasSignature {
|
||||
shard = IBEERC1155(_erc721s[3]);
|
||||
_duration = 1 days;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Allow operation to reverse signature.
|
||||
*/
|
||||
function addApprovalList(address user) external onlyOwner {
|
||||
require(!approvalLists[user], "MinterFactory: Invalid user address");
|
||||
approvalLists[user] = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Remove operation from approval list.
|
||||
*/
|
||||
function removeApprovalList(address user) external onlyOwner {
|
||||
approvalLists[user] = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev update executor
|
||||
@ -229,6 +245,10 @@ contract MinterFactory is Ownable, Initializable, HasSignature {
|
||||
function ignoreSignature(
|
||||
bytes calldata signature
|
||||
) external {
|
||||
require(
|
||||
approvalLists[_msgSender()],
|
||||
"Must be valid approval list"
|
||||
);
|
||||
if (!usedSignatures[signature]) {
|
||||
usedSignatures[signature] = true;
|
||||
}
|
||||
|
@ -17,10 +17,13 @@ abstract contract BEBase1155 is ERC1155, AccessControl {
|
||||
mapping(uint256 => bool) public lockedTokens;
|
||||
|
||||
mapping(address => uint256[]) private _ownedTokens;
|
||||
// for 0 means not exists, value stored = index + 1;
|
||||
mapping(address => mapping(uint256 => uint256)) private _ownedTokensIndex;
|
||||
|
||||
mapping(uint256 => uint256) private _totalSupply;
|
||||
|
||||
uint256 public maxSupply = 0;
|
||||
|
||||
struct TokenStruct {
|
||||
uint256 tokenId;
|
||||
uint256 amount;
|
||||
@ -213,6 +216,12 @@ abstract contract BEBase1155 is ERC1155, AccessControl {
|
||||
// mint nft
|
||||
for (uint256 i = 0; i < len; ++i) {
|
||||
_totalSupply[ids[i]] += amounts[i];
|
||||
if (maxSupply > 0) {
|
||||
require(
|
||||
_totalSupply[ids[i]] <= maxSupply,
|
||||
"Can not mint for exceeds max supply"
|
||||
);
|
||||
}
|
||||
}
|
||||
} else if (from != to) {
|
||||
// transfer from -> to
|
||||
@ -233,12 +242,11 @@ abstract contract BEBase1155 is ERC1155, AccessControl {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
|
||||
if (
|
||||
_ownedTokensIndex[to][tokenId] == 0 && balanceOf(to, tokenId) == 0
|
||||
) {
|
||||
_ownedTokensIndex[to][tokenId] = _ownedTokens[to].length;
|
||||
_ownedTokensIndex[to][tokenId] = _ownedTokens[to].length + 1;
|
||||
_ownedTokens[to].push(tokenId);
|
||||
}
|
||||
}
|
||||
@ -251,12 +259,12 @@ abstract contract BEBase1155 is ERC1155, AccessControl {
|
||||
uint256 balance = balanceOf(from, tokenId);
|
||||
if (balance == amount) {
|
||||
uint256 lastTokenIndex = _ownedTokens[from].length - 1;
|
||||
uint256 tokenIndex = _ownedTokensIndex[from][tokenId];
|
||||
uint256 tokenIndex = _ownedTokensIndex[from][tokenId] - 1;
|
||||
|
||||
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
|
||||
|
||||
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
|
||||
_ownedTokensIndex[from][lastTokenId] = tokenIndex; // Update the moved token's index
|
||||
_ownedTokensIndex[from][lastTokenId] = tokenIndex + 1; // Update the moved token's index
|
||||
|
||||
// This also deletes the contents at the last position of the array
|
||||
delete _ownedTokensIndex[from][tokenId];
|
||||
|
@ -9,6 +9,10 @@ import "./BEBase1155.sol";
|
||||
contract BEChip1155 is BEBase1155 {
|
||||
mapping(uint256 => uint256) public tokenLevels;
|
||||
|
||||
constructor() {
|
||||
maxSupply = 1;
|
||||
}
|
||||
|
||||
function canMint(uint256 id) external view override returns (bool) {
|
||||
return !exists(id);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user