【问题标题】:Security in in-game NFT mint游戏内 NFT 铸币厂的安全性
【发布时间】:2022-01-06 19:27:57
【问题描述】:

有人知道如何创建安全的游戏内 NFT 铸币厂吗?我认为如果我们允许用户创建 NFT(这就是游戏的想法——从不同的部分组装 NFT),它会很容易受到攻击,因为你可以将自己的图像 URL 插入到函数中。我认为只有require(somePartsAmount) 的游戏合约才能使用的铸币功能,会是安全吗? 像这样的:

function awardItem(address player, string memory tokenURI)
        public 
        onlyGame
        returns (uint256)
{
        require(somePartsAmount);
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(player, newItemId);
        _setTokenURI(newItemId, tokenURI);

        return newItemId;
}

预售薄荷怎么办,因为我们不能在这里检查零件并且所有者创建的成本太高?

【问题讨论】:

    标签: security blockchain solidity nft


    【解决方案1】:

    通常,您不希望让用户有机会将自定义令牌 URI 设置为 nft。因此,我建议在另一个函数中制作所有 URI 的东西。假设您拥有 1000 个可铸造的随机 nft,您首先需要 1000 个 tokenURI 才能让这些 nft 附加信息,然后您必须使用默认的 getTokenURI 函数,该函数返回您在创建时指定的基本令牌 URI智能合约,只需将 nft id 添加到它的末尾。

    【讨论】:

    • 不幸的是,我不认为你的想法会很好。您如何看待所有者在服务器上使用此 uri 签署交易?
    • 是的!你也可以这样。但是 100% 的汽油费将归您所有。如果你想这样做,你可以添加一个检查器来要求 msg.sender 只是所有者,这样其他人就不能调用它。
    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2011-12-13
    相关资源
    最近更新 更多