Openzeppelin

tokenId (uint256) 未正確返回

  • October 10, 2021

在我的 tokenURI 函式中,我將它設置為返回被呼叫的 tokenId,但是當我執行該方法時,我得到一個符號。

function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
   require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token");
   return string(abi.encodePacked(_baseURI(), "/", _tokenId, ".json"));

這是我在 Etherscan 中呼叫此函式時得到的響應。

在此處輸入圖像描述

是否無法將 tokenId 作為 uint256 脫鏈返回?

問題是abi.encodePacked()編碼uint256為原始字節序列。為了使其輸出/1234.json,您必須將 an 轉換uint256為十進製字元串。

例如,uint2str從這個問題Conversion of uint to string中使用它將如下所示:

return string(
   abi.encodePacked(_baseURI(), 
       "/",
       uint2str(_tokenId),
       ".json"));

引用自:https://ethereum.stackexchange.com/questions/111218