해당 글은 KIP17 개발과정에 대한 것입니다.
패키지 설치
"devDependencies": {
"dotenv": "^16.0.0",
"truffle-hdwallet-provider-klaytn": "^1.4.2"
},
"dependencies": {
"@klaytn/contracts": "^0.9.0"
}
klaytn-contracts library를 설치하고 아래 코드를 따라 "EllaNFT" 생성한다.
pragma solidity 0.5.6;
import "@klaytn/contracts/token/KIP17/KIP17Token.sol";
import "@klaytn/contracts/drafts/Counters.sol";
contract EllaNFT is KIP17Full {
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor() public KIP17Full("EllaNFT", "ENFT") {}
function mintNFT(string memory tokenURI)
public
returns (uint256)
{
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(msg.sender, newItemId);
_setTokenURI(newItemId, tokenURI);
return newItemId;
}
}
환경셋팅
$ npm install -g truffle
$ cd [trauffle 구성할 폴더 이름]
$ truffle init
= truffle-config.js
const HDWalletProvider = require('truffle-hdwallet-provider-klaytn');
require('dotenv').config();
const { PRIVATE_KEY } = process.env;
const URL = 'https://api.baobab.klaytn.net:8651';
module.exports = {
networks: {
// baobab 네트워크 설정
baobab: {
provider: new HDWalletProvider(PRIVATE_KEY, URL),
network_id: 1001,
gas: 20000000,
gasPrice: 750000000000,
},
},
compilers: {
solc: {
version: "0.5.6",
docker: true,
settings: {
optimizer: {
enabled: false,
runs: 200
},
evmVersion: "constantinople"
}
}
},
};
Migration 코드
const Migrations = artifacts.require('Migrations');
const EllaNFT = artifacts.require('EllaNFT.sol'); // 배포할 컨트렉트 파일 추가
module.exports = function (deployer) {
deployer.deploy(Migrations);
deployer.deploy(EllaNFT); // 배포할 컨트렉트 파일 배포에 추가
};
컴파일 및 배포
# 컴파일하고 배포 실행
$ truffle migrate --compile-all --network baobab
# 제대로 배포되었는지 확인
$ truffle networks
# 배포된 정보 확인
$ truffle console --network baobab
= 배포정보
= 배포확인
개발 회고
이전에 했던 ERC712를 배포 했을때와 비슷해서 나름 어렵지 않게 했지만 사용하는 라이브러리가 다르다 보니 라이브러리 관련해서 찾아보고 하다보니 조금 시간이 걸렸다.
그리고 중간에 docker를 true로 해서 계속 에러가 나기도 하고 조금은 어이없는 실수가 여러번 하다보니 많이 돌아서 완성하게 되었다.
헤메다가 보니 적용되는 함수나 전반적인 이해가 부족한건가라는 생각이 들어서 라이브러리가 아닌 적용되는 함수에 대해서 기능적인 부분을 좀더 분석해 봐야겠다고 생각했다.