[英]Why is my NFT metadata not showing on opensea?
I am developing a NFT contract on ETH using open Zeppelin, and reached the stage where, I am deploy on rinkeby.我正在使用开放式 Zeppelin 在 ETH 上开发 NFT 合约,并达到了部署在 rinkeby 上的阶段。 However there appears to an issue with the tokenURI and contractURI as the image and metadata is not showing on opensea.
但是,由于图像和元数据未在 opensea 上显示,因此 tokenURI 和 contractURI 似乎存在问题。
I implement the tokenURI and ContractURI like this:我像这样实现 tokenURI 和 ContractURI:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;
import "hardhat/console.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
//access control
import "@openzeppelin/contracts/access/Ownable.sol";
// Helper functions OpenZeppelin provides.
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "./libraries/Base64.sol";
contract MetropolisWorldGenesis is ERC721, Ownable {
....
string private _contractURI;
function contractURI() public view returns (string memory) {
return _contractURI;
}
function tokenURI(uint256 _tokenId) public view override returns (string memory) {
PropertyAttributes memory propAttributes = nftHolderAttributes[_tokenId];
string memory json = Base64.encode(
abi.encodePacked(
'{"name": "',
propAttributes.name,
'", "description": "',propAttributes.description,'", "image": "',
propAttributes.image,
'", "attributes": [ { "trait_type": "Tower", "value": ',propAttributes.properties.tower,', "trait_type": "District", "value":',propAttributes.properties.district, ', "trait_type": "neighborhood", "value":',propAttributes.properties.neighborhood,',]}'
)
);
string memory output = string(
abi.encodePacked("data:application/json;base64,", json)
);
return output;
}
function setContractURI(
string memory name, string memory desc,
string memory image,string memory link,
uint royalty) public onlyOwner() {
string memory x = Base64.encode(
abi.encodePacked(
'{"name": "',
name,
'", "description": "',
desc,
'", "image": "',
image,
'", "external_link": "',
link,
'","seller_fee_basis_points":"', royalty, // 100 Indicates a 1% seller fee
'", "fee_recipient": "0xA97F337c39cccE66adfeCB2BF99C1DdC54C2D721" }' // Where seller fees will be paid to.}
)
);
_contractURI = string(abi.encodePacked(
"data:application/json;base64,", x
));
console.log("contract uri updated");
}
}
When run locally the return the tokenURI gives the following out put, which resolves to correct data in the browser:在本地运行时,返回 tokenURI 给出以下输出,解析为浏览器中的正确数据:
data:application/json;base64,eyJuYW1lIjogIkdpbGRlZCBBdHRpYyIsICJkZXNjcmlwdGlvbiI6ICJUaGUgQXN0cm9ub21lcidzIFN0dWRpbwpVbmRlciB0aGUgZG9tZSBpcyBhIHBsYW5ldHJpdW0gClJlc2VhcmNoZXMgdGhlIG9yaWdpbnMgb2YgdGhlIE1ldHJvcG9saXMiLCAiaW1hZ2UiOiAiaXBmczovL1FtWnc3NzY1ZG04aHBIRndITDl3b29RSkNzSkd6TFR3WTIyNjVDR1lpeFB3aUciLCAiYXR0cmlidXRlcyI6IFsgeyAidHJhaXRfdHlwZSI6ICJUb3dlciIsICJ2YWx1ZSI6IFRvd2VyIDEsICJ0cmFpdF90eXBlIjogIkRpc3RyaWN0IiwgInZhbHVlIjpIaWdoLUZseWVyLCAidHJhaXRfdHlwZSI6ICJuZWlnaGJvcmhvb2QiLCAidmFsdWUiOkZyZWUgQWxsZXkgUXVhcnRlcnMsXX0=
Any Ideas where I am going wrong?我哪里出错了?
Your JSON attributes array is formatted incorrectly, the values don't have double quotes surrounding them, and each item in the array should be an object with trait-type
and value
keys.您的 JSON 属性数组格式不正确,值周围没有双引号,并且数组中的每个项目都应该是 object 带有
trait-type
和value
键。
Current:当前的:
[ { "trait_type": "Tower", "value": Tower 1, "trait_type": "District", "value":High-Flyer, "trait_type": "neighborhood", "value":Free Alley Quarters,]
Should be:应该:
[
{"trait_type":"Tower","value":"Tower 1"},
{"trait_type":"District","value":"High-Flyer"},
{"trait_type":"neighborhood","value":"Free Alley Quarters"}
]
This snippet should generate the correct output, although I haven't tested it.此代码段应生成正确的 output,但我尚未对其进行测试。
string memory json = Base64.encode(
abi.encodePacked(
'{"name":"', propAttributes.name,
'","description":"',propAttributes.description,
'","image":"', propAttributes.image,
'","attributes":[{"trait_type":"Tower","value":"', propAttributes.properties.tower, '"},{"trait_type":"District","value":"', propAttributes.properties.district, '"},{"trait_type": "neighborhood","value":"', propAttributes.properties.neighborhood, '"}]}'
)
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.