【问题标题】:Block OpenSea trading阻止 OpenSea 交易
【发布时间】:2023-01-14 18:25:53
【问题描述】:

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

【问题讨论】:

    标签: ethereum solidity nft erc721


    【解决方案1】:

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

    保留一个全局地图计数器,其代币 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);
    
        }
    

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

    【讨论】:

    • 谢谢!我已经想到了类似的事情。就我而言,私人市场的许可名单会更有趣。这样我就不必维护无穷无尽的市场列表。整个市场在市场上是什么样子的?例如,如果 OpenSea 激活了购买或拍卖功能,则它仅在传输时失败。整个事情变得很奇怪,不是吗?
    • 市场使用 transferFrom 调用,如果您想使用白名单流程,则必须为所有用户执行此操作。他们的转账和支付是在同一个步骤完成的,是原子的,所以每个人都会收到交易失败的通知,并且不会转移任何资产
    • @SLTN98 请记住喜欢/接受有帮助的答案:)
    【解决方案2】:

    或者,如果您使用外部链接将买家/交易者重定向到列出优惠券代码的文本文件,您所要做的就是用一条消息替换优惠券代码,说明所有优惠券都已兑换,并且然后保存文件。这样,下次 NFT 交易并解锁链接时,他们就会看到消息。

    我绝对不会浪费我的时间去弄清楚那些毫无意义的编码……哈哈。

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 2021-12-14
      • 2012-09-18
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      相关资源
      最近更新 更多