ERC-721 Contract 만들기

Remix를 이용하여 ERC-721 컨트랙트 배포 테스트를 진행하는 것이 가능합니다.

주의

한번 배포된 컨트랙트는 수정 및 삭제가 불가능합니다. 필요한 정보를 포함한 Code로 작성하여 배포해주세요.

아래의 순서로 컨트랙트 배포 과정을 진행해 보도록 하겠습니다.

  • Step 1 : Remix 사이트에 접속하여 파일 생성하기

  • Step 2 : ERC-721 컨트랙트 작성하기

  • Step 3 : SOLIDITY COMPILER 탭으로 이동하여 버전 맞추고 컴파일하기

  • Step 4 : DEPLOY & RUN TRANSACTIONS 설정하기

  • Step 5 : MetaMask 가스비용 설정 및 서명하기

아래 예제는 WEMIX3.0 테스트넷을 기반으로 작성되었습니다.

Step 1 : Remix 사이트에 접속하여 파일 생성하기

https://remix.ethereum.org 로 접속하면 다음과 같습니다.

contracts 디렉터리에 Storage.sol, Owner.sol, Ballot.sol 세가지의 예제 스마트 컨트랙트가 보여지게 되며, 새로 작성하려면 이를 선택하여 지우고 새 파일을 생성합니다.

아래 그림은 contracts 디렉터리에 MyNFT.sol 파일을 생성하는 예입니다.

Step 2 : ERC-721 컨트랙트 작성하기

다음과 같은 ERC-721 컨트랙트를 작성할 수 있습니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;

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 MSNFT is ERC721URIStorage, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() public ERC721("Name", "Symbol") {}

    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;
    }
        function burn(uint256 tokenId) public virtual returns (bool) {
        
        _burn(tokenId);

        return true;
    }
}

사용자가 원하는 Token Name, Token Symbol을 지정할 수 있습니다.

아래 코드에서 'Name', 'Symbol' 부분에 사용자가 원하는 Name, Symbol을 입력해주면 됩니다.

    constructor() public ERC721("Name", "Symbol") {}

아래 그림은 'WMNFT', 'NFT'로 지정하는 예입니다.

Step 3 : SOLIDITY COMPILER 탭으로 이동하여 버전 맞추고 컴파일하기

코드가 작성되면 솔리디티 컴파일러 화면에 맞는 컴파일러 버전을 선택한 후 컴파일을 할 수 있습니다.

제공되는 예제 코드의 컴파일러 버전은 0.8.10으로, 해당 버전 이하로 컴파일러 버전을 선택해야 합니다.

Step 4 : DEPLOY & RUN TRANSACTIONS 설정하기

Deploy & Run Transactions 화면에서 배포하려고 하는 환경을 선택하고 스마트 컨트랙트를 배포하여 테스트를 해볼 수 있습니다.

아래 그림은 환경(ENVIRONEMNT)를 'Injected Provider - MetaMask'로 지정한 예입니다.

환경(ENVIRONEMNT)을 'Injected Provider - MetaMask'로 선택하게 되면 MetaMask로 연결이 되는데, 이 때 네트워크가 'WEMIX_Testnet'연결이 필요합니다. MetaMask 연결과 관련된 내용은 Use MetaMask 참고하십시오.

Step 5 : MetaMask 가스비용 설정 및 서명하기

Deploy & Run Transactions 화면에서의 설정이 끝나고 'Deploy' 를 선택하면 아래와 같이 MetaMask 팝업이 뜨며 이더리움을 기반으로 기본 설정된 'Gas fee'를 보여주는 화면이 나옵니다.

WEMIX는 이더리움과는 다른 Fee 정책을 가지고 있으므로 반드시 'Site suggested'을 선택하여 Gas fee를 변경해 주셔야 합니다.

아래 화면에서 'Advanced'를 선택하면 사용자가 'Max priority fee (GWEI)'와 'Max fee(GWEI)'를 수동으로 설정 할 수 있습니다.

현재 WEMIX는 고정 'Max priority fee(GWEI)'를 사용하고 있으며 값은 100입니다.

Max fee는 사용자가 정의하는 값으로 최소값은 MaxPriorityFee+BASE_FEE입니다.

WEMIX의 BASE_FEE는 EIP-1559를 따라 가변입니다. 따라서, Transaction이 성공적으로 만들어지기 위해서는 아래와 같이 설정해 주시기를 권장 드립니다.

  1. Max base fee (GWEI) = 101

  2. Max priority fee (GWEI) = 100

위 그림에서 Fee 설정을 완료하고 'Save'를 선택하면 아래의 그림과 같이 배포 준비가 완료됩니다.

위 그림에서 'Confirm'을 선택하면 컨트랙트 배포가 진행됩니다.

아래 그림처럼 Remix 화면 하단에 초록색 체크마크가 나오면 정상적으로 배포가 완료된 것 입니다.

Last updated