2. 스마트 컨트랙트 배포

Klaytn IDE 또는 트러플을 사용해 위의 MyERC721Card 스마트 컨트랙트를 배포할 수 있습니다.

2.1 Klaytn IDE를 사용하여 스마트 컨트랙트 배포

ERC721-1-배포

이제 MyERC721가 활성화되었습니다! ERC-721을 호환하는 대체 불가능한 토큰인 카드를 발행하고 전송할 수 있습니다.

아래와 같이 두 카드, 즉 KingQueen 카드를 0x2645BA5Be42FfEe907ca8e9d88f6Ee6dAd8c1410 계정에 대해 발행해봅시다.

ERC721-2-발행-king ERC721-3-발행-queen

이제 우리는 두 카드를 발행했고, 이들 MyERC721Card 대체 불가능한 토큰의 상태를 확인해봅시다.

ERC721-4-카드-상태
  • balanceOf는 계정 0x2645BA5Be42FfEe907ca8e9d88f6Ee6dAd8c1410가 두 카드를 가졌음을 보여줍니다.

  • 파라미터 1cards는 토큰 ID가 1MyERC721Card가 레벨 1의 Queen임을 보여줍니다.

  • 파라미터 0ownerOf는 토큰 ID가 0MyERC721Card의 소유자가 0x2645BA5Be42FfEe907ca8e9d88f6Ee6dAd8c1410임을 보여줍니다.

2.2 truffle을 사용하여 스마트 컨트랙트 배포

환경에 node.js를 설치해야 합니다. 다양한 환경에서 패키지 매니저를 사용해 node.js를 설치하기 위해 Installing Node.js via package manager를 살펴보시길 바랍니다.

$ mkdir klaytn
$ cd klaytn
$ npm init # initialize npm at the erc20token directory
$ npm install truffle@4.1.15
$ npm install caver-js@latest # installing caver-js
$ ln -s node_modules/truffle/build/cli.bundled.js truffle
$ export PATH=`pwd`:$PATH

이제 스마트 컨트랙트를 배포하는 데 필요한 truffle 및 caver-js를 설치했습니다.

truffle과 스마트 컨트랙트 MyERC721Card.sol을 준비합시다.

$ mkdir myerc721
$ cd myerc721
$ truffle init

이제 다음과 같은 디렉토리 구조를 가질 것입니다.

.
├── contracts
│ ├── Migrations.sol
├── migrations
│ └── 1_initial_migration.js
└── truffle-config.js

MyERC721Card.sol를 작성하고 contracts 디렉토리에 위치시킨 후, 디렉토리 구조는 다음과 같을 것입니다.

이제 다음과 같은 디렉토리 구조를 가질 것입니다.

.
├── contracts
│ ├── Migrations.sol
│ └── MyERC721Card.sol
├── migrations
│ └── 1_initial_migration.js
└── truffle-config.js

또한, MyERC721Card 컨트랙트를 배포하기 위해 아래와 같이 1_initial_migration.js를 편집하세요.

const Migrations = artifacts.require("./Migrations.sol");
const MyERC721Card = artifacts.require("./MyERC721Card.sol");
module.exports = function(deployer) {
deployer.deploy(Migrations);
deployer.deploy(MyERC721Card)
};

또한 Klaytn 네트워크에 스마트 컨트랙트를 배포하기 위해 truffle-config.js를 구성해야 합니다. 이는 트러플을 사용하여 스마트 컨트랙트 배포 에 설명된 순서와 동일합니다.

// truffle-config.js
module.exports = {
networks: {
baobab: {
host: '127.0.0.1',
port: 8551,
from: '0xabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd', // 계정 주소를 입력하세요
network_id: '1001', // Baobab 네트워크 id
gas: 20000000, // 트랜잭션 가스 한도
gasPrice: 25000000000, // Baobab의 gasPrice는 25 Gpeb입니다
},
},
compilers: {
solc: {
version: "0.5.6" // 컴파일러 버전을 0.5.6로 설정합니다
}
}
};

이제 모두 준비되었습니다. 다음 명령을 사용해 MyERC721Card.sol을 배포합시다.

$ truffle deploy --network baobab --reset
Compiling ./contracts/MyERC721Card.sol...
Writing artifacts to ./build/contracts
Using network 'baobab'.
Running migration: 1_initial_migration.js
Replacing Migrations...
... 0x5a947f076f4570dff8ff18b1ae3557e27dd69c92ce38a3c97fad8f5355914066
Migrations: 0x0d737e9865e5fc4c1ff53744fd2c13c52a44b9bc
Deploying MyERC721Card...
... 0x1571e80552dab1d67260e8914e06d9b16ccae16fb698c750f6a09aab12517bc1
MyERC721Card: 0xc3d282926871c505f334d0f2c85ad52758347831
Saving successful migration to network...
... 0x5b984b3f79c425d80470a96d5badb857fc05e7f31d94423044ae3119c639aa77
Saving artifacts...

MyERC721Card를 배포하기 위한 트랜잭션 해시는 0x1571e80552dab1d67260e8914e06d9b16ccae16fb698c750f6a09aab12517bc1이며 MyERC721Card의 주소는 0xc3d282926871c505f334d0f2c85ad52758347831입니다.