簡體   English   中英

如何燒錄erc721 token?

[英]How to burn erc721 token?

我正在嘗試刻錄 erc721 令牌。 我已經繼承了ERC721Burnable合約,但是交易失敗了。在調試時我發現在ERC721URIStorage合約中,它恢復到:

if (bytes(_tokenURIs[tokenId]).length != 0) {
    delete _tokenURIs[tokenId];
}

此外,我希望合同的所有者能夠修改元數據的屬性,即使在令牌被鑄造和轉移之后也是如此。 這是我的合同:

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

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

contract MyNFT is ERC721, ERC721Enumerable, ERC721URIStorage, ERC721Burnable, Ownable {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;
    uint MAX_SUPPLY=1;

    constructor() ERC721("MyNFT", "MNFT") {}

    function safeMint(address to, string memory uri) public onlyOwner {
        require(totalSupply() < MAX_SUPPLY, "Can be minted only one time.");
        uint256 tokenId = _tokenIdCounter.current();
        _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);
    }

您提供的代碼有效(盡管它缺少結尾 } )。 您一定是在嘗試銷毀一個不存在的令牌(也許它已經被銷毀了)?

要在 NFT 生成后更改其屬性,您只需在令牌 URI 的返回值中返回不同的屬性即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM