[英]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.