[Blockchain] KIP17 개발

EllaDev·2022년 4월 7일
0

해당 글은 KIP17 개발과정에 대한 것입니다.

KIP17

FT와 NFT

FT

  • Fungible Token의 약자로 대체 가능한 토큰이다.

NFT

  • Non Fungible Token의 약자로 대체 불가능한 토큰이다.
  • 교환 불가한 고유한 가치를 가지는 토큰으로 디지털 복제가 난무하는 현대에 희소성을 부여할 수 있다.

KIP7과 KIP17

KIP7

  • 대체 가능한 토큰(Fungible Token)에 대한 표준
  • KIP-7은 ERC-20에서 파생

KIP17

  • 대체 불가능한 토큰 (Non-fungible Token)에 대한 표준
  • KIP-17은 ERC-721 토큰에서 파생

KIP17 개발

개발 환경

패키지 설치

  "devDependencies": {
    "dotenv": "^16.0.0",
    "truffle-hdwallet-provider-klaytn": "^1.4.2"
  },
  "dependencies": {
    "@klaytn/contracts": "^0.9.0"
  }
  • Klaytn IDE : Remix와 똑같은 UI를 가지고 있고 기능적인 부분도 거의 같다.
  • @klaytn/contracts: openzeppelin 라이브러리와 비슷한 기능을 수행하며 컨트렉트를 쉽게 개발할 수 있도록 해준다.
  • Truffle : 솔리디티 코드를 로컬 환경에서 쉽게 컴파일하고 배포 할 수 있다.
  • truffle-hdwallet-provider-klaytn 패키지: truffle-hdwallet-provider에서 파생된 자바스크립트 HD 지갑 제공자

개발 코드

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;
    }
}

Truffle로 컴파일 및

환경셋팅

$ 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

= 배포정보

= 배포확인

확인
klayscope 배포 확인

전체 github 코드


개발 회고
이전에 했던 ERC712를 배포 했을때와 비슷해서 나름 어렵지 않게 했지만 사용하는 라이브러리가 다르다 보니 라이브러리 관련해서 찾아보고 하다보니 조금 시간이 걸렸다.
그리고 중간에 docker를 true로 해서 계속 에러가 나기도 하고 조금은 어이없는 실수가 여러번 하다보니 많이 돌아서 완성하게 되었다.
헤메다가 보니 적용되는 함수나 전반적인 이해가 부족한건가라는 생각이 들어서 라이브러리가 아닌 적용되는 함수에 대해서 기능적인 부분을 좀더 분석해 봐야겠다고 생각했다.

profile
Frontend Developer

0개의 댓글