ERC-721 (NFT 발행)

워뇽쿤·2022년 10월 5일
0

Solidity

목록 보기
10/10
post-thumbnail

1. ERC-721

  • EIP-721(이더리움 개서 제안의 721번째 토론)에서 각각 구분할 수 있는 토큰에 대한 토론이 이어짐
  • EIP-721은 이더리움 커뮤니티의 많은 동의를 받아 ERC-721로 정의됨
  • ERC-721은 대체 불가능한 토큰을 위한 표준 인터페이스
  • NFT(non-fungible tokens) 대체 불가능한 토큰은 토큰 하나하나에 소규권을 주장할 수 있다.

2. NFT 발행

  • 컨트랙트 작성 후 배포
//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;
    }
}

3. 추가사항

3.1.메타데이터 URI 주소

  • 메타데이터는 opensea의 예시 데이터를 활용하면 된다. 여기에는 나의 NFT의 값과 이미지 파일이 있는 주소를 담고 있는다.
  • 메타데이터와 이미지는 온라인상에 업로드 되어있어야 어디서든 불러올 수 있다.
  • opensea 공식 문서에는 아래와 같은 형식의 메타데이터 형식을 안내하고있다.
{
  "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": [ ... ], 
}
  • 여기서 image 부분에 나의 NFT이미지 주소를 업로드 하면 된다.
  • 아마존 AWS, IPFS, Pinata 등 온라인 클라우드 매체를 이용하면 편리하다.

3.2. 테스트넷 확인필요

  • Remix에서 컨트랙트 배포시 메타마스크의 테스트넷을 확인하고 배포하게 되는데 잘 확인하고 배포해도 Opensea에 업로드가 안되는 경우가 종종있다.
    이떄는 Opensea testnet에서 해당 testnet을 지원하는지 알아보면 좋을것 같다.. 필자는 이부분에서 해메면서 하루를 낭비하였다...
    교육문서에 Rinkeby로 배포하라고해서 했더니 지원을 안하는 사태가 발행하였다.. Goerli네트워크로 똑같이 수행하니 성공하였다.!
profile
QA 성장기

0개의 댓글