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"));
    }
}