阻止 OpenSea 交易

Block OpenSea trading

有没有办法在不违反 erc721 标准的情况下避免在 OpenSea 等标准市场上交易 NFT? 如果是这样,你会怎么做? 它是关于一种 NFT,类似于可以使用 5 次的代金券。 5年以上,每年一次。我想防止有人在不知不觉中购买兑换券(当年)。

您可以在传递函数中包含支票。

保留一个全局映射计数器,其中的代币 ID 指向每个代币的交易数量

mapping(uint256=> uint256) private _tokenTx;

现在,在你的转账函数中你可以使用 NFT id,检查地图看它是否低于 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);

    }

至于过滤交易转账,您可以保留一个包含他们使用的地址的动态列表,或者完全阻止批准过程。 第一个更好地保持了标准,但跟上它更难、更昂贵,第二个更激进一些,但适用于所有流行的交易所