[BEB] Section4 : 클레이튼 개발 환경에서 NFT 개발하기

jsg_ko·2022년 1월 30일
0

Klaytn IDE에서 NFT 개발하기

🔥Klaytn IDE에서 KIP-17 개발하기

이번 유닛에서는 클레이튼 네트워크에서 사용되는 NFT, KIP-17을 개발한다.

다음은 개발을 위한 몇 가지 링크이다.

ERC-721을 이용해 이더리움 기반의 스마트 컨트랙트를 만들었던 것처럼, 클레이튼 기반의 스마트 컨트랙트를 생성하기 위해서는 KIP를 사용해야 한다. ERC-721에는 Identity를 검증하는 ERC-165가 포함되어 있다. KIP에서는 KIP-13으로 Identity를 검증한다.

  1. Klaytn IDE에 접속하고, 새로운 Workspaces, 새로운 파일을 생성한다.

  2. 앞서 언급했듯이, 이더리움 기반의 스마트 컨트랙트와 달리, 클레이튼 기반의 스마트 컨트랙트는 KIP를 사용한다. 따라서 ERC-721 스마트 컨트랙트를 그대로 사용할 수 없다. ERC-721의 코드를 가져와서, 다음과 같이 수정한다.

  3. 수정된 이 코드만으로는 Klaytn IDE를 통해 배포할 수 없다. MyNFTs의 부모 객체를 모두 작성하여야 문제없이 동작할 수 있다. 다음 두 가지 사항을 유의하자.

    • Klaytn IDE에서는 한 페이지에서 코드를 구현한다.
    • Klaytn 기반의 스마트 컨트랙트는 KIP를 사용한다.

    부모객체의 코드링크. 다음의 링크를 통해 코드를 복사하고, Klaytn IDE에 복붙. 코드를 붙여넣었다면, 코드를 컴파일하고 배포한다.

🔥Klatytn IDE에서 KIP-17 배포하기

  1. 컴파일러 탭에서 MyNFTs 컨트랙트를 컴파일한다.

    이 문서를 작성하는 현재, 클레이튼 기반의 Solidity 컴파일러 버전은0.5.6+commit.b259423e.Emscripten.clang 이다.

    • 클레이튼에서 사용하는 Solidity와 컴파일러의 버전은 계속해서 업데이트될 예정
  2. 배포 탭 바오밥 환경에서 ACCOUNT를 추가한다. 클레이튼 IDE 에서는 지갑을 연결 할려면 개인 키가 필요하다. 지갑을 성공적으로 연결 했으면 컨트랙트 드롭다운을 클릭하고 배포하려는 컨트랙트를 선택한 후 배포를 진행한다.

  3. 배포가 완료되면, 하단의 콘솔과 클레이튼 스코프 에서 확인할 수 있다.


  4. 화면 좌측하단에서 배포된 컨트랙트를 확인할 수 있다. 그 중에서 mintNFT를 실행해 NFT를 생성하고 함수 ownerOf 를 실행하여, NFT 발행이 잘 이뤄졌는지 확인 해 보자.


로컬환경에서 클레이튼 NFT 개발하기

🔥Truffle로 KIP-17 배포하기

이 유닛에서는 로컬 환경에서 Truffle을 이용해 KIP-17을 배포한다.

클레이튼은 이더리움을 포크한 네트워크이기 때문에, Truffle과 Ganache 같은 이더리움 기반의 스마트 컨트랙트 개발 환경을 그대로 사용할 수 있다. 다만 Ganache는 이더리움 개발환경을 제공하기 때문에, 클레이튼 기반의 스마트 컨트랙트를 테스트하더라도 표시되는 코인의 단위는 항상 ETH이다.

  1. 이더리움 기반의 스마트 컨트랙트를 개발한 것처럼, 로컬 환경을 세팅한다. 먼저, 새로운 폴더를 생성하고 Truffle을 이용한 개발 환경을 준비한다.

  1. truffle-config.js 를 열고, 네트워크 설정을 편집한다. Ganache와 동시에 클레이튼의 테스트넷인 바오밥 네트워크도 함께 등록한다.

    바오밥 네트워크를 등록하기 위해, 다음 명령어로 npm package를 두 가지를 설치한다.

    # truffle-hdwallet-provider-klaytn과 dotenv를 설치
    npm install truffle-hdwallet-provider-klaytn dotenv --save-dev

    truffle-config.js 파일에서 다음과 같이 development 주석을 제거하고, developement를 구분하기 좋게 ganache 로 변경한다. 그리고 baobab 을 추가한다. 이때, 앞서 설치한 모듈을 사용한다. .env 파일을 생성하고, 배포에 사용할 지갑의 개인키를 입력한다.

    PRIVATE_KEY="YOUR_PRIVATE_KEY_HERE"

    truffle-config.js 파일로 돌아와서, 다음과 같이 수정한다.

    이제 로컬 환경에서 Truffle과 Ganache를 이용해 클레이튼 기반의 스마트 컨트랙트를 개발할 수 있다.

    contracts 폴더 아래에 MyNFTs.sol 파일을 생성하고, 코드를 붙여넣는다.

    이 코드는 Klaytn IDE에서 작성한 코드이다.

  2. 이더리움과 마찬가지로 붙여넣은 코드가 정상적으로 배포되기 위해서는, migration 파일을 설정해야 한다. 1_initial_migration.js 파일을 다음과 같이 편집한다.


  3. 기존의 터미널은 컨트랙트를 제작하고 있는 이 폴더에서 다음 명령어를 입력하여 baobab 네트워크에 컨트랙트를 배포한다

    truffle migrate --compile-all --network baobab

    배포중에 계속 오류가 나서 시간을 좀 썻다 solidity 버전 에러가 떠서 solc 버전을 맞춰줘야 했다.

    일단 Klaytn Docs기준에 따르면 컴파일 버전은 0.5.6이여야 한다. 때문에 truffle-config.js에서 compilers 부분을 solc 를 맞춰줬다.

    compilers:{
    	solc:{
        		version : "0.5.6";
        	}
    }

    Given value "TxTypeLegacyTransaction" is not a valid hex string. 오류

    트러플 버전이 달라서? >> 해결

    npm uninstall -g truffle
    npm install -g truffle@5.0.26

    생성된 트랜잭션은 클레이튼 스코프에서 확인할 수 있다.

  4. 배포를 마쳤으면, 배포된 컨트랙트와 연결하여 NFT를 발행한다. 배포된 컨트랙트와 연결하기 위해, Truffle console을 실행한다. 프롬프트에 다음의 명령어를 입력.

    truffle console --network baobab

    Truffle 콘솔이 실행되면, 배포된 컨트랙트의 인스턴스를 요청한후 새로운 NFT를 민팅한다.

    테스트넷에 배포할 때에는 이미 ownership이 설정됐다. .env 파일에 입력한 개인키에 대응되는 지갑주소가 오너이다. Truffle 콘솔을 이용해 네트워크에 접속할 때에도, truffle-config.js 파일에 설정한 값을 사용한다. 따라서, 오너의 지갑주소로 접속 하기 때문에 Ganache를 이용할 때와는 달리, mintNFT함수를 실행하기 위해 지갑 주소를 선택할 필요가 없다.

profile
디버깅에서 재미를 추구하면 안되는 걸까

0개의 댓글