繁体   English   中英

智能合约 NFT 问题

[英]Smart Contract NFT Issue

我最近一直在研究 NFT 智能合约,首先,我使用 ERC721 Openzepellin 合约,如下所示:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "@openzeppelin/contracts@4.6.0/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts@4.6.0/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts@4.6.0/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts@4.6.0/utils/Counters.sol";

 contract NAMZZ is ERC721, ERC721Enumerable, ERC721URIStorage{
 using Counters for Counters.Counter;

 Counters.Counter private _tokenIdCounter;
 uint256 MAX_SUPPLY = 5000;

 constructor() ERC721("NAMZZ", "NMZ") {}

 function safeMint(address to, string memory uri) public{
    uint256 tokenId = _tokenIdCounter.current();
    require(tokenId <= MAX_SUPPLY, "Sorry, all NFTs have been minted!");
    _tokenIdCounter.increment();
    _safeMint(to, tokenId);
    _setTokenURI(tokenId, uri);
}

// The following functions are overrides required by Solidity.

function _beforeTokenTransfer(address from, address to, uint256 tokenId)
    internal
    override(ERC721, ERC721Enumerable)
{
    super._beforeTokenTransfer(from, to, tokenId);
}

function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
    super._burn(tokenId);
}

function tokenURI(uint256 tokenId)
    public
    view
    override(ERC721, ERC721URIStorage)
    returns (string memory)
{
    return super.tokenURI(tokenId);
}

function supportsInterface(bytes4 interfaceId)
    public
    view
    override(ERC721, ERC721Enumerable)
    returns (bool)
{
    return super.supportsInterface(interfaceId);
}
}

一切似乎都很完美,因为我可以铸造 NFT,甚至使用 SafeTransferFrom 方法将 NFT 从一个地址移动到另一个地址。 在铸造了我的前 2 个 NFT 后,我将我的 metamask 帐户(用于铸造 NFT 的那个)链接到 Opensea 测试网,我能够在收集的选项卡中看到我的 NFT,但是在将其中一个 NFT 转移到另一个地址后,即使智能合约显示 ID 为 1 的 NFT 归第二个地址所有,甚至 Opensea 说 ID1 NFT 的所有者是我使用的第二个地址,我也无法在“已收集”选项卡上再次看到它开森。

正如您在屏幕截图中看到的,我创建了 2 个 NFT,我只有 1 个已收集(ID 为 0 的 NFT),而它应该显示 2 个已收集,因为具有 ID 1 所有者的 NFT 是“ME”,但我仍然看不到它。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

通用汽车在那里!

合同没有任何问题,只是 OpenSea 通常不能很好地索引 NFT,因此可能需要一些延迟(或永远不会)让您的 NFT 出现在收集的选项卡中。

但是,您不必担心,因为这是 UI 问题,只要您将 go 转至 Etherscan 或 Polygonscan,具体取决于您的 NFT 部署位置,并且您在那里拥有 NFT,您拥有它们,而 OpenSea 无权从这些 NFT 中获取你。

干杯~

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM