- Truffle을 사용하여 KIP-17를 배포한다.
- Truffle은 이더리움 기반 dApp 개발을 돕는 블록체인 프레임워크이다.
- 스마트 컨트랙트의 컴파일과 배포를 지원한다.
- 클레이튼은 이더리움을 포크한 네트워크이기에, Truffle을 사용한 개발 환경을 설정할 수 있다.
코드를 작성할 폴더에서 truffle init을 통해 truffle을 초기화 한 뒤, npm init으로 npm을 초기화한다.
클레이튼 지갑의 개인 키가 필요함으로, dotenv를 사용해 환경변수로 개인 키를 관리하도록 한다.
원격 EN(Endpoint Node) 노드로 배포하기 위해서 truffle-hdwallet-provider-klaytn를 설치한다.
truffle-hdwallet-provider-klaytn은 truffle-hdwallet-provider에서 파생된 자바스크립트 HD 지갑 제공자이다.
truffle-config.js에서 networks 설정을 한다.
🍍 private key를 사용해 지갑 제공자를 설정한다.
🍑 Truffle 클레이튼 문서 : https://ko.docs.klaytn.com/smart-contract/ide-and-tools/truffle#configuring-truffle-hdwallet-provider-klaytn
const HDWalletProvider = require('truffle-hdwallet-provider-klaytn');
require('dotenv').config();
const { PRIVATE_KEY } = process.env;
const URL = 'https://api.baobab.klaytn.net:8651';
// ... 코드 생략
// 바오밥 테스트 네트워크 설정
baobab: {
provider: new HDWalletProvider(PRIVATE_KEY, URL),
network_id: 1001,
gas: 20000000,
gasPrice: 750000000000,
}
pragma solidity 0.5.6;
--- --- --- --- --- --- --- --- ---
compilers: {
solc: {
version: "0.5.6",
}
},
// 1_initial_migration.js
const Migrations = artifacts.require('Migrations');
const MyKlaytnNFTs = artifacts.require('배포할_컨트랙트_이름.sol');
module.exports = function (deployer) {
deployer.deploy(Migrations);
deployer.deploy(MyKlaytnNFTs);
};
Truffle 설정이 끝난 뒤 폴더 구조
klaytn-contracts 라이브러리에서 KIP-17에 대한 코드를 확인, 사용할 수 있다.
🍑 https://github.com/klaytn/klaytn-contracts/tree/master/contracts/token/KIP17
터미널에 배포와 관련된 정보가 보여진다.
배포 완료 후, truffle console --network baobab 으로 Truffle 콘솔을 실행한다.
🍎 깃허브 주소 : https://github.com/citron03/Truffle-KIP17-development
🍈 배포된 스마트 컨트랙트를 baobab Klaytnscope에서 확인하기 : https://baobab.scope.klaytn.com/account/0xf98c89b2724db980c96e7f615ec11cba715336fe?tabId=txList
truffle 공식 사이트를 들어가면, Truffle Boxes를 확인할 수 있다.
Truffle Boxes은 쉽게 프론트엔드 dApp을 만들 수 있도록 지원한다.
🍫 truffle 공식 사이트 : https://trufflesuite.com/boxes/index.html
🍫 React Truffle Box : https://trufflesuite.com/boxes/react/
// 1. truffle을 설치하고, Create-React-App으로 react app을 시작한다.
npm install -g truffle // truffle 설치 (이미 설치했다면, 건너 뛴다)
truffle unbox react // truffle을 사용하는 CRA
또는
npx truffle unbox react
// 2. truffle 개발 콘솔을 실행한다.
truffle develop
// 3. 스마트 컨트랙트를 컴파일 하고 배포한다.
// 스마트 컨트랙트에 변경사항이 있을 때, 이 작업을 다시 한다.
compile
migrate
// 4. 생성된 디렉토리의 client 폴더 내부에 react app이 있다.
// 해당 폴더로 이동 후 react app을 실행할 수 있다.
cd client
npm run start
npx truffle unbox react으로 생성된 프로젝트의 파일과 폴더의 구성이다.
기본적으로 기존의 truffle 폴더와 유사하다.
처음에는 truffle-config.js에서 solc 버전을 설정하는 것을 몰라 헤매었다.
Remix IDE와 유사했던 klaytn IDE 환경과 다르게, truffle에서는 배포 후 콘솔로 컨트랙트를 사용해야 했기에, 어색한 점이 있었다.
클레이튼 네트워크는 고정된 가스비 750000000000을 지불해야 했고, 가스비가 부족할 시 에러가 발생했다.
실제로 바오밥 테스트넷에서 NFT를 발행하고 클레이튼 스코프에서 이를 확인할 수 있었다.
다만, KIP-17의 함수들은 내용이 많았기에 모든 함수의 기능에 대해서 파악하지는 못했다.
truffle로 스마트 컨트랙트를 배포, 사용할 수 있지만, 실제 dApp 개발에서 truffle을 어떻게 사용할 수 있는지 의문이었는데 truffle 공식문서에서 해답을 찾을 수 있었다.
거의 대부분의 정답은 역시 공식 문서에 있다는 것을 새삼스래 깨달았다. 공식 문서를 자주 확인하는 습관을 기르자.
위의 트러플 박스를 사용한 방법에서 설정을 조금 수정한다면, 클레이튼 개발환경을 만들 수 있을 것 같다. 시간이 날 때 시도해봐야겠다.