Solidity NFT 元数据加载问题
Solidity NFT metadata loading issue
我正在创建一个 NFT 集合,并且正在 ropsten 上进行测试。我的网站上有我的 NFT 元数据,例如 boredApes.com/tokens/3.json 但问题是合同转到了 boredApes.com/tokens/3 而不是 .json 部分。我应该如何更改合同以加载此元数据。当前的solidity函数是
function _baseURI() internal pure override returns (string memory) { return "https://boredApes.com/tokens/"; }
_baseURI()
函数仅设置 URI 的开头。您还需要覆盖 tokenURI()
函数,在返回的 URI 末尾附加 .json
字符串。
pragma solidity ^0.8;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol";
contract MyCollection is ERC721 {
constructor() ERC721("MyCollection", "MyC") {
_mint(msg.sender, 1);
}
function _baseURI() internal pure override returns (string memory) {
return "https://boredApes.com/tokens/";
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
// the `super` keyword references the parent function of the same name
string memory uri = super.tokenURI(tokenId);
return string(abi.encodePacked(uri, ".json"));
}
}
我正在创建一个 NFT 集合,并且正在 ropsten 上进行测试。我的网站上有我的 NFT 元数据,例如 boredApes.com/tokens/3.json 但问题是合同转到了 boredApes.com/tokens/3 而不是 .json 部分。我应该如何更改合同以加载此元数据。当前的solidity函数是
function _baseURI() internal pure override returns (string memory) { return "https://boredApes.com/tokens/"; }
_baseURI()
函数仅设置 URI 的开头。您还需要覆盖 tokenURI()
函数,在返回的 URI 末尾附加 .json
字符串。
pragma solidity ^0.8;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol";
contract MyCollection is ERC721 {
constructor() ERC721("MyCollection", "MyC") {
_mint(msg.sender, 1);
}
function _baseURI() internal pure override returns (string memory) {
return "https://boredApes.com/tokens/";
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
// the `super` keyword references the parent function of the same name
string memory uri = super.tokenURI(tokenId);
return string(abi.encodePacked(uri, ".json"));
}
}