//Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
contract MyNFTs is ERC721URIStorage, Ownable {
// ERC721URIStorage는 토큰의 정보를 저장하는 tokenURI를 관리하는 컨트랙트
// Ownable는 컨트랙트의 소유권을 관리하는 컨트랙트
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() public ERC721("MyNFT", "NFT") {}
function mintNFT(address recipient, string memory tokenURI)
public onlyOwner
returns (uint256)
{
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(recipient, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
}
배포 후 mintNFT 함수를 이용하여 NFT 배포
recipient : 배포할 지갑 주소
tokenURI : 메타데이터가 있는 URI 주소 (아래에서 추가 설명)
발행하게 되면 발행한 주소값으로 opensea에서 확인 가능하다.
https://testnets.opensea.io/assets/goerli/0x6ca57274bac0ff5a9d34659eecc27827a61d6782/3
{
"description": "Friendly OpenSea Creature that enjoys long swims in the ocean.",
"external_url": "https://openseacreatures.io/3",
"image": "https://storage.googleapis.com/opensea-prod.appspot.com/puffs/3.png",
"name": "Dave Starbelly",
"attributes": [ ... ],
}