[英]How to link my IPFS content to ERC721 contract?
我正在尝试制作一个简单的 ERC721 NFT 铸币合约。 我创建了一个图像及其相应的元数据,并将它们上传到 ipfs。 此图像和元数据何时与智能合约中创建的令牌链接? 我试图使用 Openzeppelin 合约向导生成的这段代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
contract MyToken is ERC721, Ownable {
using Counters for Counters.Counter;
Counters.Counter private _tokenIdCounter;
constructor() ERC721("MyToken", "MTK") {}
function safeMint(address to) public onlyOwner {
uint256 tokenId = _tokenIdCounter.current();
_tokenIdCounter.increment();
_safeMint(to, tokenId);
}
}
但是我看不到在哪里可以将我的 nft 图像和元数据链接到合同。 我已经看到,在 openzeppelin 的 ERC721 标准中,您可以使用函数tokenURI
和 _baseURI 设置基本 URI 和_baseURI
,但我不知道如何使用它们。 我计划创建一个多项目集合(在 ipfs 中),所以我不知道在我的情况下使用什么。
你写的函数不够用。 当你使用 NFT 时,你必须设置一些状态变量。 您必须跟踪列出的项目、令牌 ID、使用的令牌 URL。 (您的合约逻辑可能不同)。 此外,在铸造令牌之前,您必须添加一些验证语句。 首先定义你的状态变量:
using Counters for Counters.Counter;
// initially 0
Counters.Counter private _listedItems;
Counters.Counter private _tokenIds;
uint public listingPrice=0.025 ether;
// mapping is similar to object in javascript
mapping(string=>bool) private _usedTokenURIs;
然后编写铸币逻辑:
function mintToken(string memory tokenURI,uint price) public payable returns (uint){
// make sure you do not mint same uri
require( _usedTokenURIs[tokenURI]==false,"Token URI already exists");
// since this function is payable, the amount that you sent is stored in msg.value by ethereum evm
require(msg.value==listingPrice,"Price must be equal to listing fee");
_tokenIds.increment();
_listedItems.increment();
uint newTokenId=_tokenIds.current();
// this is a wrapper for _mint
_safeMint(msg.sender,newTokenId);
_setTokenURI(newTokenId, tokenURI);
_createNftItem(newTokenId,price);
// update _usedTokenURIs mapping
_usedTokenURIs[tokenURI]=true;
return newTokenId;
}
现在要将 ipfs 链接存储在区块链中,您必须在前端调用mintToken
函数。 您创建一个表单,添加与元数据相关的输入,并将 json 元数据和图像发布到 ipfs。 当您发布数据时,您将获得 nft uri。 将 nft uri 存储在状态中。 然后你在前端写一个 createNft 函数。 成功调用contract.mintToken
函数后,您的 ipfs 链接将存储在区块链上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.