设置令牌 URI 函数
set token URI function
我了解到 setTokenURI 函数已不再使用。如何更改我要创建的 NFT 代币的代币 URI?
现在,我在智能合约中的函数 createCollectible 如下所示:
function createCollectible(string memory tokenURI)
public
returns (uint256)
{
uint256 newItemId = tokenId;
_safeMint(msg.sender, newItemId);
_setTokenURI(newItemId, tokenURI);
tokenId = tokenId + 1;
return newItemId;
}
_setTokenURI
仍在使用,但已移至 ERC721URIStorage
。这是 openzeppelin link
当你创建你的合约时,你应该继承:
contract NFT is ERC721URIStorage { }
由于称其为昂贵的操作,团队希望您在 ERC721
:
中使用 tokenUri
函数
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
这次需要继承自ERC721
contract NFT is ERC721{
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
require(_exists(tokenId), "...");
_tokenURIs[tokenId] = _tokenURI;
}
}
它们都有不同的用例:Discussed Here
我了解到 setTokenURI 函数已不再使用。如何更改我要创建的 NFT 代币的代币 URI? 现在,我在智能合约中的函数 createCollectible 如下所示:
function createCollectible(string memory tokenURI)
public
returns (uint256)
{
uint256 newItemId = tokenId;
_safeMint(msg.sender, newItemId);
_setTokenURI(newItemId, tokenURI);
tokenId = tokenId + 1;
return newItemId;
}
_setTokenURI
仍在使用,但已移至 ERC721URIStorage
。这是 openzeppelin link
当你创建你的合约时,你应该继承:
contract NFT is ERC721URIStorage { }
由于称其为昂贵的操作,团队希望您在 ERC721
:
tokenUri
函数
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
这次需要继承自ERC721
contract NFT is ERC721{
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
require(_exists(tokenId), "...");
_tokenURIs[tokenId] = _tokenURI;
}
}
它们都有不同的用例:Discussed Here