solidity - OpenSea IPFS 元数据

标签 solidity web3 ipfs opensea

我一直在测试我的 erc-721 契约(Contract),其中包含指向我的 ipfs 哈希 ipfs://QmeB87321i121xN88bXZzmjSUXqS46B8bU3H9ocyTb8tJf 的链接作为基本 token URI。契约(Contract)已部署,项目已由我类型转换,但 OpenSea 无法按预期读取元数据 uri。 OpenSea 上的文档表明它应该足够了。
我的契约(Contract)

pragma solidity ^0.5.0;

import "./ERC721Tradable.sol";
import "openzeppelin-solidity/contracts/ownership/Ownable.sol";

contract Creature is ERC721Tradable {
    constructor(address _proxyRegistryAddress)
        public
        ERC721Tradable("StygianCoins", "STG", _proxyRegistryAddress)
    {}

    function baseTokenURI() public pure returns (string memory) {
        return "https://ipfs.io/ipfs/QmeB87321i121xN88bXZzmjSUXqS46B8bU3H9ocyTb8tJf";
    }

    function contractURI() public pure returns (string memory) {
        return "https://contract-abis.herokuapp.com/api/contract/stygian-coins";
    }
}

最佳答案

您需要指向元数据文件,而不是指向在 IPFS 中包含文件的文件夹。
元数据文件是 json包含有关 tokenId 信息的格式化文件。您将图像 URI 放在 image 中部分。这是一个例子:

{
    "name": "You NFT token name",
    "description": "Something Cool here",
    "image": "ipfs://QmTgqnhFBMkfT9s8PHKcdXBn1f5bG3Q5hmBaR4U6hoTvb1?filename=Chainlink_Elf.png",
    "attributes": []
}
所以在 IPFS 上你会有 2 个文件:
  • 一张图片
  • 一个带有 metadata.json 的文件,其中包含来自图像
  • 的 URI

    然后,在您的契约(Contract)中,您必须调用 _setTokenURI(tokenId, _tokenURI);函数(由 openzepplin erc721 包导入)
    _setTokenURI(tokenId, _tokenURI);
    
    _tokenURI应该是您的元数据 URL/URI。 tokenId 是你的 NFT 的 id。
    Here is an example TokenURI in IPFS
    And then how it renders on OpenSea.
    More information on deploying and listing on opensea.

    关于solidity - OpenSea IPFS 元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66602944/

    相关文章:

    ethereum - Solidity 和 Web3 sha3() 方法返回其他内容

    structure - 如何将结构从契约(Contract) A 传递到契约(Contract) B?最佳实践

    solidity - 尚不支持将 struct memory[] 类型的内存复制到存储

    events - Uncaught Error : Returned values aren't valid,是否用完了气?

    search - IPFS搜索文件机制

    docker - 如何将文件映射到ipfs docker容器

    solidity - Solidity 如何使用元组(嵌套 abi)制作函数签名?

    javascript - 在 map 函数中使用 promise

    web3js - 如何使用web3 js按地址获取 token 交易列表

    javascript - 如何为 IPFS 托管的文件创建下载链接?