본문 바로가기
Blockchain

[Blockchain] NFT 만드는 법 (ERC-721 표준 사용)

by 개발자 염상진 2022. 7. 20.

ERC-721 컨트랙트 컴파일

 

Remix IDE를 실행합니다.

ⓑ 새로운 프로젝트를 실행하고 contracts 폴더에 testNFT.sol 파일을 생성합니다.

ⓒ openzeppelin에서 제공하는 라이브러리를 사용해 ERC-721 컨트랙트 코드를 다음과 같이 작성합니다. NFT를 민팅하기 위해서는 NFT Mint 함수를 작성해줘야 합니다.

//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 TestNFTs is ERC721URIStorage, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    
    constructor() public ERC721("TestNFT", "NFT"){}
    
    function mintNFT(string memory tokenURI) public onlyOwner returns(uint256){
        _tokenIds.increment();
        
        uint256 newItemId = _tokenIds.current();
        _mint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);
        
        return newItemId;
    }
}

 

 

ERC721URIStorage

NFT는 대체 불가능 토큰입니다. ERC721URIStorage는 tokenURI를 관리하는 컨트랙트입니다. NFT의 고유한 특성이 될 수 있는 이미지 주소등을 저장하는 JSON 객체를 tokenURI로 관리합니다.

Ownable

컨트랙트의 소유권을 관리하는 컨트랙트입니다. NFT를 민팅하는 경우 컨트랙트를 소유한 계정만 발행해야 하므로 Ownable 컨트랙트를 사용합니다. 소유주만 접근하도록 하기 위해 onlyOwner Modifier를 함수에 사용합니다. 

 

ⓓ 작성된 컨트랙트를 컴파일 합니다. Ctrl+S를 누르면 컴파일이 진행됩니다. 좌측 메뉴바에서 컴파일 탭으로 넘어가 직접 컴파일 할수도 있습니다. 컴파일 전 컴파일러의 버전을 pragma solidity와 맞춰줘야 합니다.

 

 

ERC-721 배포

 

컴파일된 컨트랙트를 암호화폐 지갑과 연동해 배포할 수 있습니다. Remix 좌측에서 4번째 탭은 배포와 트랜잭션을 실행하는 화면입니다. 배포 환경은 Remix VM(London)이 아니라 Injected Provider Metamas를 선택합니다.

테스트넷에 배포할것이므로 메타마스크 지갑을 오픈하고, Ropsten 테스트넷에 연결된 것을 확인합니다. 만약 Remix IDE와 지갑이 연결되지 않은 경우 연결해줘야 합니다. 

지갑이 연결되면 Remix IDE에서 자동으로 계정정보와 환경정보를 가져옵니다. 

 

 

컴파일된 TestNFT 컨트랙트를 선택후 Deploy 합니다.

 

메타마스크 확장 프로그램이 실행되고 계약 배포 확인 창이 팝업됩니다. 가스비가 일정 수준 발생합니다. 배포 트랜잭션을 보낸 후 한 30초 후 컨트랙트가 블록체인에 올라갑니다.

 

컨트랙트가 배포되고 난 후 컨트랙트에 포함되었던 함수들을 사용할 수 있습니다. 

 

tokenURL로는 블로그 주소 https://about-tech.tistory.com 을 넣어 NFT를 민팅합니다. 

 

tokenID 1번으로 NFT가 생성되었습니다.

tokenID 1번 NFT는 NFT를 발행한 계정에 소유권이 있습니다.

 

이더스캔 Ropsten 넷에서 신규 발행된 ERC-721 Token을 확인할 수 있습니다. 

 

 

 

다른 계정으로 발행한 NFT를 보낼 수 있습니다. 

 

NFT를 전송하기 위해서 safeTransferFrom 함수를 사용합니다. 

해당 token의 소유주가 변경되었습니다.

 

 

 

 

 

[Blockchain] ERC-721 구조?

ERC-721 표준은 NFT(대체 불가능한 토큰, Non-fungible Token)을 발행하는 스마트 컨트랙트를 정의하고 있습니다. ERC-20을 기본으로 해서 제작되어 유사한 함수를 가지고 있지만, 특정 자산에 대해 대체

about-tech.tistory.com

 

 

[Blockchain] ERC-721 vs ERC-20 차이점 (NFT vs FT)

ERC-721 표준 스펙은 이더리움 블록체인에서 NFT(Non-Fungible Token)을 생성하는 표준입니다. 이더리움 개선 제안인 EIP에서 721번째 토론에서 나온 표준이며, 구분 가능한(대체 불가능한) 토큰 발행에 대

about-tech.tistory.com

 

 

[WebSocket] 웹 소켓(Web Socket) 이란?

웹 소켓(Web Socket)이란? Node.js에서는 웹 소켓 라이브러리 Socket.IO가 있습니다. 흔히 실시간 데이터를 주고 받기 위해서 사용되는 라이브러리 입니다. 웹 소켓(Web Socket)이란 HTML5에 적용된 스펙으로

about-tech.tistory.com

 

댓글