Truffle을 이용한 ERC-721개발

강윤채·2022년 6월 10일
0

📒 개념 정리

📌 ERC-721이란?

ERC-20과 다르게 대체 불가능한 토큰 NFT(Non-Fungible Token)

  • ERC-721 토큰은 대체 불가능한 토큰으로써 발행되는 토큰은 모두 각각의 가치를 가지고 있다.

📒 개발

📌 Local에서 ERC-721 개발하기

  • 로컬환경에서 ERC-721을 개발하기 위해 Truffle과 Ganache를 사용한다.
    Ganache는 로컬 환경에서 이용할 수 있는 테스트넷이다.
$ mkdir erc721
$ cd erc721

폴더를 생성후 truffle init를 통해 truffle을 이용한 개발환경을 준비한다.

$ truffle init
$ npm init

truffle과 npm을 초기화 한다.


vscode를 열고 truffle-config.js 파일에 solc를 설정한다.
solc는 솔리디티와 컴파일 버전을 말한다.
-> 솔리디티는 : 0.8.7 컴파일러: london이다.

네트워크를 설정해준다. ganache네트워크와 연결하기위한 설정이다.

//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 {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() public ERC721("MyNFTs", "MNFT") {}

    function mintNFT(string memory tokenURI)
        public onlyOwner
        returns (uint256)
    {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);

        return newItemId;
    }
}

openzepelin라이브러리를 이용한 NFT생성 코드를 작성한다.

$ npm install @openzeppelin/contracts

openzeppelin을 사용하기 위해 npm을 통해 설치해준다.

NFT생성 코드를 정상적으로 배포하기 위해 migration파일을 설정해야 한다.
migration 파일에 새로 생성한 코드파일을 추가해준다.

📌 Truffle로 ERC-721 배포하기


ganache 네트워크를 새로운 cli 환경에서 실행한다.(배포중 네트워크를 종료하면 안된다.)
네트워크의 실행은 터미널의 위치에 관계없이 실행 가능하다.

$ truffle migrate --compile-all --network ganache

위의 명령어를 입력하여 로컬의 ganache 네트워크와 연결하고 컨트랙트를 배포한다.
--network 뒤에 있는 ganache는 아까 truffle-config.js에서 네트워크에 설정한 이름으로 진행해야한다.

truffle console --network ganache

배포가 잘 이루어졌다며 truffle console에 진입이 가능하다.

truffle(ganache)> 				//이렇게 나온다면 정상적으로 진입이 된것이다.


truffle console에서 배포한 컨트랙트의 인스턴스를 받아온다. 그리고 배포한 컨트랙트가 작성한 코드와 일치하는지 확인한다.

📌 token URI

  • 생성된 NFT를 다른 시스템에 있는 디지털 파일에 연결해야 한다. 이때 token URI가 필요하다.
  • token URI로 IPFS를 사용하였다.



    이렇게 하면 IPFS 주소를 얻을 수 있다.


마지막으로, ganache의 첫번째 지갑(주소)에서 컨트랙트를 배포한다.

발행된 NFT로부터 URI를 확인한다.

📒 개발회고

NFT가 어떤것인지 어떤 방식으로 이용되고 있는지 알 수 있는 시간이었다.

NFT생성에 있어서는 따라하는 것은 쉬웠지만, 이것이 왜 필요하고 어떻게 동작되고 연결되는지를 이해하는데는 아직 많이 부족하다는 것을 깨달았다.

앞으로의 계획으로는 NFT가 어떻게 디지털환경에 연결되는지에 관해 좀 더 심도 있게 공부할 예정이다.
또한 token URI의 다양한 형식에 대해서도 좀 더 알아봐야 겠다.

github 주소 : git@github.com:Yoonchae92/HA4_Test.git

0개의 댓글