【发布时间】:2023-01-14 18:25:53
【问题描述】:
有没有办法在不破坏 erc721 标准的情况下避免在 OpenSea 等标准市场上交易 NFT? 如果是这样,你会怎么做? 它是关于一种 NFT,类似于可以使用 5 次的代金券。 5年以上,每年一次。我想防止有人在不知不觉中购买兑换券(当年)。
【问题讨论】:
标签: ethereum solidity nft erc721
有没有办法在不破坏 erc721 标准的情况下避免在 OpenSea 等标准市场上交易 NFT? 如果是这样,你会怎么做? 它是关于一种 NFT,类似于可以使用 5 次的代金券。 5年以上,每年一次。我想防止有人在不知不觉中购买兑换券(当年)。
【问题讨论】:
标签: ethereum solidity nft erc721
您可以在传输函数中包含支票。
保留一个全局地图计数器,其代币 ID 指向每个代币的交易数量
mapping(uint256=> uint256) private _tokenTx;
现在,在你的传输函数中,你可以使用 NFT id,检查地图以查看它是否低于 5,如果是,则交易失败,否则你继续并增加数字
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);
}
至于过滤交易所转账,您可以保留一个包含他们使用的地址的动态列表,或者完全阻止批准过程。 第一个更好地保持标准,但更难跟上,成本更高,第二个更激进一些,但适用于所有流行的交易所
【讨论】:
或者,如果您使用外部链接将买家/交易者重定向到列出优惠券代码的文本文件,您所要做的就是用一条消息替换优惠券代码,说明所有优惠券都已兑换,并且然后保存文件。这样,下次 NFT 交易并解锁链接时,他们就会看到消息。
我绝对不会浪费我的时间去弄清楚那些毫无意义的编码……哈哈。
【讨论】: