ERC-20과 다르게 대체 불가능한 토큰 NFT(Non-Fungible Token)
$ 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 파일에 새로 생성한 코드파일을 추가해준다.
ganache 네트워크를 새로운 cli 환경에서 실행한다.(배포중 네트워크를 종료하면 안된다.)
네트워크의 실행은 터미널의 위치에 관계없이 실행 가능하다.
$ truffle migrate --compile-all --network ganache
위의 명령어를 입력하여 로컬의 ganache 네트워크와 연결하고 컨트랙트를 배포한다.
--network 뒤에 있는 ganache는 아까 truffle-config.js에서 네트워크에 설정한 이름으로 진행해야한다.
truffle console --network ganache
배포가 잘 이루어졌다며 truffle console에 진입이 가능하다.
truffle(ganache)> //이렇게 나온다면 정상적으로 진입이 된것이다.
truffle console에서 배포한 컨트랙트의 인스턴스를 받아온다. 그리고 배포한 컨트랙트가 작성한 코드와 일치하는지 확인한다.
마지막으로, ganache의 첫번째 지갑(주소)에서 컨트랙트를 배포한다.
발행된 NFT로부터 URI를 확인한다.
NFT가 어떤것인지 어떤 방식으로 이용되고 있는지 알 수 있는 시간이었다.
NFT생성에 있어서는 따라하는 것은 쉬웠지만, 이것이 왜 필요하고 어떻게 동작되고 연결되는지를 이해하는데는 아직 많이 부족하다는 것을 깨달았다.
앞으로의 계획으로는 NFT가 어떻게 디지털환경에 연결되는지에 관해 좀 더 심도 있게 공부할 예정이다.
또한 token URI의 다양한 형식에 대해서도 좀 더 알아봐야 겠다.
github 주소 : git@github.com:Yoonchae92/HA4_Test.git