阻止 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);
}
至于过滤交易转账,您可以保留一个包含他们使用的地址的动态列表,或者完全阻止批准过程。
第一个更好地保持了标准,但跟上它更难、更昂贵,第二个更激进一些,但适用于所有流行的交易所
有没有办法在不违反 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);
}
至于过滤交易转账,您可以保留一个包含他们使用的地址的动态列表,或者完全阻止批准过程。 第一个更好地保持了标准,但跟上它更难、更昂贵,第二个更激进一些,但适用于所有流行的交易所