클레이튼 개발환경에서 NFT 개발

KIP - 17

ERC-721와 같은 내용을 담고있는 KIP가 KIP-17합니다.
ERC-721에는 Identity를 검증하는 ERC-165가 포함되어있는데 이를 KIP에서는 KIP-13으로 검증합니다.

개발은 아래의 공식 라이브러리를 참고하며 진행됩니다.
https://ko.docs.klaytn.com/

이더리움 remix와 유사한 Klaytn IDE를 사용합니다.
https://ide.klaytn.com/#optimize=false&runs=200&evmVersion=london&version=soljson-v0.8.7+commit.e28d00a7.js

.sol 로 컨트랙트 파일을 만들어줍니다.

// ERC721에서 KIP17로 수정합니다.
contract MyNFTs is KIP17Full, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    // ERC721을 KIP17Full로 수정합니다.
    constructor() public KIP17Full("MyNFTs", "MNFT") {}

    function mintNFT(string memory tokenURI)
        public
        onlyOwner
        returns (uint256)
    {
        _tokenIds.increment();

        uint256 newItemId = _tokenIds.current();
        _mint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);

        return newItemId;
    }
}

KIP17Full 은 KIP17, KIP17Enumerable, KIP17Metadata를 상속합니다.

예시 코드와는 별개로 MyNFTs배포를 위해서는 아래의 긴 코드가 필요합니다.
MyNFTs Full Code
코드를 붙여넣고, 코드를 컴파일하고 배포합니다.

Truffle로 KIP-17 배포하기

클레이튼은 이더리움을 포크한 네트워크이기 때문에, TruffleGanache 같은 이더리움 기반 환경을 그대로 사용할 수 있습니다.

# 폴더 생성
mkdir kip17
# 폴더 진입
cd kip17
# truffle 초기화
truffle init
# npm 초기화
npm init

클레이튼 테스트넷 바오밥(Baobab)

  • 바오밥 네트워크 등록
# truffle-hdwallet-provider-klaytn과 dotenv를 설치
npm install truffle-hdwallet-provider-klaytn dotenv --save-dev

배포에 사용할 지갑의 개인키를 입력합니다.

PRIVATE_KEY="YOUR_PRIVATE_KEY_HERE"

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: {
		ganache: {
			host: '127.0.0.1', // Localhost (default: none)
			port: 8545, // Standard Ethereum port (default: none)
			network_id: '*', // Any network (default: none)
		},
		baobab: {
			provider: new HDWalletProvider(PRIVATE_KEY, URL),
			network_id: 1001,
			gas: 20000000,
			gasPrice: 25000000000,
		},
	}
};

1_initial_migration.js 파일 편집

const Migrations = artifacts.require('Migrations');
const MyNFTs = artifacts.require('MyNFTs.sol'); // MyNFTs.sol 파일 추가

module.exports = function (deployer) {
	deployer.deploy(Migrations);
	deployer.deploy(MyNFTs); // MyNFTs를 배포에 추가
};

ganache-cli 를 실행

ganache-cli
Ganache에 컨트랙트를 배포

truffle migrate --compile-all --network ganache
배포를 마쳤으면, 배포된 컨트랙트와 연결하여 NFT를 발행

truffle console --network ganache
Truffle 콘솔이 실행되면, 배포된 컨트랙트의 인스턴스를 요청합니다. 그리고 새로운 NFT를 민팅합니다.

회고

solidity를 활용한 스마트 컨트랙트 개발은 재밌지만 굉장한 정교함이 요구되는 것 같다. 블록체인의 특성상 한 번 온 체인에 올라가면 수정이 불가능하기 때문이기도 하고 금전적으로 연결돼있기 때문이기도 하다. 이러한 특성을 십분 활용할 줄 아는 실력자라면 이 분야에서 재능을 발휘할 수 있을 것 같고 큰 부가가치를 창출해 낼 것 같다. 위의 개발 과정은 간단한 편의 예제이기 때문에 무리 없이 진행할 수 있지만 지금 하고 있는 프로젝트를 제대로 선보이기 위해서는 solidity를 더 깊게 봐야 할 것이다.

좋은 웹페이지 즐겨찾기