有没有办法避免在像OpenSea这样的标准市场上交易NFT而又不违反erc721标准?如果是的话,你会怎么做呢?它是关于NFT的,它类似于一张可以使用5次的优惠券。五年以上,每年一次。我想防止有人在不知情的情况下购买一张赎回的代金券(今年)。
发布于 2022-03-23 10:49:48
您可以在您的传递函数中包含支票。
保持一个全局映射计数器,其令牌ID指向每个令牌的事务数。
mapping(uint256=> uint256) private _tokenTx;现在,在您的传输函数中,您可以使用NFT id,在地图中检查它是否低于5,如果低于5,则不满足tx,否则将继续并增加数字。
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
**require(_tokenTx[tokenId] <6, "ERC721: can\'t transfer more than 5 times");**
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
**_tokenTx[tokenId] = _tokenTx[tokenId]+1;**
emit Transfer(from, to, tokenId);
}至于过滤交换传输,您可以保留一个动态列表及其使用的地址,或者完全阻止审批过程。前者保持更好的标准,但更难和更昂贵地跟上;第二种更激进,但将适用于世界各地的所有流行交易所。
https://stackoverflow.com/questions/71579675
复制相似问题