From 3891abf0823054cfe43a908abcadd86dbf86da54 Mon Sep 17 00:00:00 2001 From: cebgcontract <99630598+cebgcontract@users.noreply.github.com> Date: Thu, 4 Aug 2022 14:18:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A01155=E8=8A=AF=E7=89=87?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=9F=A5=E8=AF=A2=E9=94=81=E5=AE=9A=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=9A=84=E6=8E=A5=E5=8F=A3,=20=5FbeforeTokenTransfer?= =?UTF-8?q?=E9=87=8C=E5=A2=9E=E5=8A=A0=E9=94=81=E5=AE=9A=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=9A=84=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/chip1155/BEChip1155.sol | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/contracts/chip1155/BEChip1155.sol b/contracts/chip1155/BEChip1155.sol index d362e26..d58b776 100644 --- a/contracts/chip1155/BEChip1155.sol +++ b/contracts/chip1155/BEChip1155.sol @@ -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];