Unit4. Truffle을 이용한 ERC721 제작하기

Yona·2022년 2월 9일
0

블록체인

목록 보기
20/22
post-thumbnail

Truffle이란?

Truffle, 스마트 컨트랙트 개발 시 로컬환경에서 보다 쉽게 컴파일하고 배포 환경을 제공하는 프레임워크이다.

// truffle 설치
$ npm install -g truffle 

// truffle 버전 확인
$ truffle version

npm 명령어를 통하여 설치를 진행할 수 있다.

Truffle 프로젝트 생성

$ mkdir sample
$ cd sample
$ truffle init

truffle-config.js : truffle 설정 파일을 편집하여 네트워크 설정을 진행한다.

Truffle 테스트 네트워크와 연결하기 위해서는 약간의 수정 작업이 필요했다. (참고 자료)

1️⃣ infura 회원가입 후 프로젝트 생성

2️⃣ HDWalletProvider 설치

$ npm install @truffle-hdwallet-provider

3️⃣ truffle.js 수정

💡 $vi .secret 메타마스크 계정의 private key를 입력해줘야한다.

4️⃣ 확인

ERC-721

ERC-721 이란 요즘 흔히들 알고있는 NFT(Non funcgible Token, 대체불가토큰)을 의미한다. - 이전의 작성한 글 참고

openzeppelin(오픈재플린) - "스마트컨트랙트를 개발을 위해 제공되는 라이브러리" 를 이용하여 쉽고 빠르게 개발을 해볼것이다.

openzeppelin 설치

$ npm install @openzeppelin/contracts

이제 @openzeppelin/contracts 안에 있는 라이브러리를 import 를 통하여 사용할 수 있게 되었다.

ERC-721 소스코드

//Contract based on [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721)
// SPDX-License-Identifier: MIT
// contracts/MyNFT.sol
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 MyNFT is ERC721URIStorage, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() 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;
    }
}

truffle 배포 진행

// migrations/1_initial_migration.js
const MyNFT = artifacts.require("MyNFT.sol");

module.exports = function (deployer) {
  deployer.deploy(MyNFT);
};
$ truffle migrate --compile-all --network rinkeby

truffle(rinkeby)> i.mintNFT(accounts[0], "{URL 주소}")

// 확인 방법
truffle(rinkeby)> i.tokenURI(1)

회고

0개의 댓글