增加1155芯片批量查询锁定状态的接口, _beforeTokenTransfer里增加锁定状态的判断

This commit is contained in:
cebgcontract 2022-08-04 14:18:59 +08:00
parent c756583f39
commit 3891abf082

View File

@ -172,6 +172,16 @@ contract BEChip1155 is ERC1155, AccessControl {
return lockedTokens[id];
}
function isLockedBatch(uint256[] memory ids) external view
returns (bool[] memory) {
uint256 len = ids.length;
bool[] memory results = new bool[](len);
for (uint256 i = 0; i < len; ++i) {
results[i] = lockedTokens[ids[i]];
}
return results;
}
/**
* @dev See {ERC1155-_beforeTokenTransfer}.
*/
@ -185,6 +195,9 @@ contract BEChip1155 is ERC1155, AccessControl {
) internal virtual override {
super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
uint256 len = ids.length;
for (uint256 i = 0; i < len; ++i) {
require(!lockedTokens[ids[i]], "Can not transfer locked token");
}
if (from == address(0)) {
// mint nft
for (uint256 i = 0; i < len; ++i) {
@ -246,12 +259,18 @@ contract BEChip1155 is ERC1155, AccessControl {
uint256 page
) external view returns (TokenStruct[] memory) {
uint256 size = _ownedTokens[user].length;
TokenStruct[] memory results = new TokenStruct[](page);
uint256 max = size;
uint256 pageSize = 0;
if (start < size) {
uint256 max = size;
if (start + page < size) {
max = start + page;
}
if (start + page < size) {
pageSize = page;
max = start + page;
} else {
pageSize = size - start;
}
}
TokenStruct[] memory results = new TokenStruct[](pageSize);
if (pageSize > 0) {
for (uint256 i = start; i < max; ++i) {
TokenStruct memory dataObj;
uint256 tokenId = _ownedTokens[user][i];