Truffle을 이용한 ERC-721 개발

1

블록체인

목록 보기
2/5
post-thumbnail

Truffle을 이용한 ERC-721 개발

이번 개발에서는 Truffle을 이용해 실제로 NFT개발을 진행하였다.

먼저 정의부터 알고 진행하였다.

Rimix란?

: 브라우저에서 솔리디티 프로그래밍언어를 사용하여 스마트계약 구축을 지원하는 IDE(통합개발환경)이다.

Truffle이란?

:스마트 컨트랙트 개발시 개발, 배포, 테스트 환경을 제공해주는 프레임워크이다.

Openzepplin이란?

: 스마트계약시 개발하는데 도움을 주는 프레임워크이다. ex) erc20, erc721 등 깃헙에서 참고

Ganache이란?

 테스트 목적으로 PC에 설치해서 사용할 수 있는 일종의 간이 이더리움 구성이다.

EIP-721, EIP 721번째 토론에서 단 하나의 토큰으로 하나의 토큰으로 추적할 수 있는 토큰 NFT(Non-Fungible Token)라고 한다. (ERC는표준!!)

ERC721은 옵션 확장이 여러 개 있는 ERC20보다 더 복잡한 표준이며 여러 계약으로 분할됩니다. OpenZeppelin 계약은 사용자 정의 유용한 확장과 함께 결합 방법에 대한 유연성을 제공합니다.

1. 환경설정

npm init
npm install -g truffle
npm install -g ganache-cli
npm install @openzeppelin/contracts

주의사항) 1. node 최신 버전이 아닌 12.16.1로 Truffle과 ganache 설치를 해야 연동이 가능했음.

            2. 포트 중복됬을 시에, lsof -PiTCP -sTCP:LISTEN로 port를 확인후 kill -9로 삭제 후 다시 실행

2. Openzepplin에서 ERC721 규격을 사용해 스마트 컨트렉트 작성

mintNFT 이용

3. truffle-config.js 설정

compilers: {
    solc: {
      version: "0.8.7", // Fetch exact version from solc-bin (default: truffle's version)
      evmVersion: "london",
      // docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
      // settings: {          // See the solidity docs for advice about optimization and evmVersion
      //  optimizer: {
      //    enabled: false,
      //    runs: 200
      //  },
      //  evmVersion: "byzantium"
      // }
    },
  },

truffle을 이용하기 위한 컨트렉트 양식에 맞게 compilers를 수정하였음

networks: {
    ganache: {
      host: "127.0.0.1", // 로컬
      port: 8545,
      network_id: "*",
    },

가나슈 버전에 맞게 네트워크 host, port를 설정하고, network id는 모든 id에 권한을 허락하였음

4. migrations 설정

migrations는 배포를 위한 파일로 그안에 migrations/1_initital_migration.js에 개발한 컨트렉트 배포를 설정해야함

const Migrations = artifacts.require("Migrations");
const MyNFTs = artifacts.require("MyNFTs.sol");

module.exports = function (deployer) {
  deployer.deploy(Migrations);
  deployer.deploy(MyNFTs);
};

⇒ MyNFTs를 deploy하는 코드 확인

5. 가나슈 네트워크에 연결하고 트러플로 배포 후 확인

  1. ganache-cli 터미널에 입력

    2.truffle migrate --compile-all --network ganache 입력 후 배포, 가나슈 네트워크연결

    5. 트러플 콘솔로 확인

    트러플 콘솔 창으로 들어간후 배포한 컨트랙트 인스턴스를 받아온 후 name과 symbol을확인.

    instance.mintNFT("https://urclass-images.s3.ap-northeast-2.amazonaws.com/beb/section4/unit4/test.json", { from: accounts[0] })
    # Tx Information
    instance.tokenURI(1)
    # "https://urclass-images.s3.ap-northeast-2.amazonaws.com/beb/section4/unit4/test.json"

    가나쉬에 첫번째 지갑 배포후 발행된 NFT로부터 tokenURI를 확인하였음

    ⇒ 정상적으로 tokenURI와 네트워크 연결을 트러플 콘솔로 확인하였다.

    깃헙에서 확인가능 (퍼블릭)

    https://github.com/HYOSEUNGAN/Truffle_ERC721

    목적

    네트워크와 배포를 직접해보면서 좀 더 깊숙한 이해를 할 수 있었고 nft에 대한 개념을 코드를 수정해보면서 정의할 수 있었다.

    Keep(장점, 유지할 점)

    테스트넷에 유용성을 알 수 있었다. 블록체인, 스마트컨트렉트는 읽을 수 있지만 배포를 한 후에는 변경이 불가능함을 경험해보고 많은 오류와 수정을 반복하면서 경험해보았고 앞으로 메인넷 배포 전에 계속 쓸 수 있다는 장점이 있었다.

    Problem(단점, 변경 또는 버릴 점)

    코드에 대한 깊숙한 이해를 하기에 부족함을 느꼈다. 비록 프레임워크를 사용하지만 Java, Javascript, node, npm, C언어 등 여러 프로그래밍 언어가 섞인 느낌을 받아서인지 기본에 중요성을 알 수 있었다.

    Try(시도할 점, 앞으로의 행동)

    실제 직접 작성도 해보고 많은 오류를 겪어보면서 ERC에 대한 이해와 네트워크, 블록체인과 더 친해지고 프로젝트에도 참여해본다면 큰 도움이 될거같다.

0개의 댓글