Truffle을 이용한 ERC-721 개발

Woozi·2022년 6월 10일
0

Truffle이란?

솔리디티 코드(스마트 컨트랙트)를 로컬 환경에서 보다 쉽게 컴파일 하고 배포할 수 있는 프레임워크.
DApp 개발은 크게 프론트엔드와 백엔드로 나뉘는데 Truffle 프레임워크는 백엔드 컨트랙트 작성에 사용할 수 있다.

Truffle 설치 및 프로젝트 생성

Truffle 프레임워크는 node.js에서 동작하며 npm 으로 설치가 가능하다.

npm install -g truffle

설치가 완료되면 ERC-721을 개발할 프로젝트를 생성한다.

1 mkdir truffle_erc-721

2 cd truffle_erc-721

3 truffle init

4 npm init

5 npm install -g ganache-cli
//컨트랙트를 로컬에서 테스트할 수 있게 해주는 Ganache 설치

6 npm install @openzeppelin/contracts
//솔리디티 기반 개발에 도움을 주는 프레임워크인 OpenZeppelin 설치

truffle-config.js파일에서는 여러가지 설정을 변경할 수 있는데 나는 Solidity와 Compiler의 버전, 그리고 컨트랙트를 테스트할 Ganache 네트워크 설정을 변경해주었다.

compilers: {
solc: {
  version: "0.8.7",      
  settings: {          
    evmVersion: "london"
  }
}

networks: {
  ganache: {
    host: '127.0.0.1', //로컬 환경
    port: 8545,
    network_id: '*'
  },
}

컨트랙트 생성 및 배포

1.contract 폴더 안에 MyNFT.sol 이라는 이름으로 파일을 생성하고 컨트랙트 코드를 작성한다.

contract MyNFT is ERC721URIStorage, Ownable {
  using Counters for Counters.Counter;
  Counters.Counter private _tokenIds;

  constructor() public ERC721("MyNFT", "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;
  }
  

2.작성한 컨트랙트를 배포하기 위해 1_initial_migration.js 파일을 수정한다.

const Migrations = artifacts.require('Migrations');
const MyNFT = artifacts.require('MyNFT.sol'); // MyNFT.sol 파일 추가

module.exports = function (deployer) {
    deployer.deploy(Migrations);
    deployer.deploy(MyNFT); // MyNFT를 배포에 추가
};

3.Ganache를 이용해 컨트랙트를 배포한다.

(1) 터미널에서 Ganache 네트워크를 실행한다.

(2) 컨트랙트를 ganache와 연결하고, 배포한다.

(3) Truffle console을 이용해 인스턴스를 확인한다.

(4) 지갑 주소를 파라미터로 넣어 함수를 실행한다.

(5) 발행된 NFT로부터 tokenURI를 확인한다.

깃허브 주소 : Truffle을 이용한 ERC-721 개발

회고

truffle과 ganache를 이용해보니 remix를 이용한 개발 및 배포보다 더 직관적이라는 느낌이 들었다. 여러 설정들도 파일에서 직접 하고 배포할 파일도 직접 작성해주니 개발 과정에서 실수를 할 부분이 줄어들었고 만약 실수가 있더라도 디버깅하기 더 편리할것이라는 생각이 들었다.
truffle을 이용한 개발에 익숙해 지려면 openzepplin에 내장된 컨트랙트들을 잘 활용할 수 있어야 할 듯 하다.

profile
주니어 개발자

0개의 댓글