hardhat으로 klaytn kip7 배포하기

완두콩 개발일지·2023년 1월 20일
0

hardhat ?

보통 하드햇으로 erc20, 721을 배포하지만 클레이튼도 배포를 할수 있다. 원래 예전에는 klaytn ide를 사용해서 배포했지만 현재는 서비스를 중지한거 같고 remix로 들어가서 klaytn plugin을 설치하면 사용할 수 있지만 이번에는 hardhat을 이용해서 배포를 진행 보기로 했다. 이더리움관련 개발과 배포를 도와주는 툴로 hardhat과 truffle이 있지만 예전부터 그냥 hardhat만 써왔기에 hardhat으로 진행한다. 참고로 hardhat은 hardhat로컬에서 배포를 진행할때 console.log 기능을 제공해준다. 그리고 최근에는 hardhat이 truffle을 앞질럿다고 하는데 그냥 쭈욱 hardhat쓰면 될것같다.

hardhat 설치

바탕화면에 contract 폴더 하나 만들어주고 열어주자.

   yarn init --y
   yarn add --dev hardhat

설치가 완료되면

   yarn hardhat 

으로 하드햇을 실행시켜주면

하드햇이 실행창이 뜬다.

자바스크립트, 타입스크립트 맘에드는걸로 실행시켜준다. 난 타입스크립트로 선택해서 실행시켜 주었다.

짠! 개발에 필요한 구성요소들이 자동적으로 생성되었다. 이제는 개발에 필요한 패키지들을 설치해줄 차례이므로

필요 패키지 설치

"devDependencies": {
    "@nomiclabs/hardhat-ethers": "^2.0.3",
        "@nomiclabs/hardhat-etherscan": "^2.1.8",
        "@nomiclabs/hardhat-waffle": "^2.0.1",
        "@typechain/ethers-v5": "^7.2.0",
        "@typechain/hardhat": "^2.3.1",
        "@types/chai": "^4.3.0",
        "@types/mocha": "^9.0.0",
        "@types/node": "^16.11.17",
        "@typescript-eslint/eslint-plugin": "^4.33.0",
        "@typescript-eslint/parser": "^4.33.0",
        "chai": "^4.3.4",
        "dotenv": "^10.0.0",
        "eslint": "^7.32.0",
        "eslint-config-prettier": "^8.3.0",
        "eslint-config-standard": "^16.0.3",
        "eslint-plugin-import": "^2.25.3",
        "eslint-plugin-node": "^11.1.0",
        "eslint-plugin-prettier": "^3.4.1",
        "eslint-plugin-promise": "^5.2.0",
        "ethereum-waffle": "^3.4.0",
        "ethers": "^5.5.2",
        "hardhat": "^2.11.0",
        "hardhat-gas-reporter": "^1.0.6",
        "prettier": "^2.5.1",
        "prettier-plugin-solidity": "^1.0.0-beta.13",
        "solhint": "^3.3.6",
        "solidity-coverage": "^0.7.17",
        "ts-node": "^10.4.0",
        "typechain": "^5.2.0",
        "typescript": "^4.5.4"
  },
  "dependencies": {
    "@klaytn/contracts": "^1.0.6"
  }

바로 contract 폴더안에 sol파일을 만들어 컴파일을 하려했지만 필요한 패키지가 없기 때문에 설치해달라는 무수한 에러들이 발생했다.

위에 적어논 dependency들을 package-lock.json파일 devDependencies쪽에 복사붙여넣기 후

yarn

자동으로 패키지들을 다운 받아준다.

추가로 우리는 openzepplin/contracts코드가 아닌 klaytn 관련한 contract들을 받아서 사용해야 하므로

yarn add @klaytn/contracts 

로 klaytn 관련한 contract들을 가져오자

MyToken.sol 컴파일

아직 벨로그는 솔리디티 코드 하이라이팅을 지원하지 않는다. 참고하자

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

import "@klaytn/contracts/KIP/token/KIP7/KIP7.sol";

contract MyToken is KIP7 {
    constructor() KIP7("TEST", "TEST") {
        _mint(msg.sender, 10000000000 * 10 ** decimals());
    }
}

라는 KIP7 토큰을 발행하는 컨트랙트를 컴파일해보도록 하자.

yarn hardhat compile

하면 컴파일 완료

배포 스크립트 작성

scripts 폴더 안에 존재하는 파일 지우고 새로운 파일을 만들어 주자

deploy.ts 파일을 생성 후

import { ethers } from 'hardhat';

async function main() {
  const kip7 = await ethers.getContractFactory('MyToken');
  const KIP7 = await kip7.deploy();
  await KIP7.deployed();
  console.log('배포된 컨트랙트의 주소 : ', KIP7.address);
}
main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

ethers 라이브러리를 이용한 코드 작성 완료

Klaytn배포 환경설정

프로젝트 루트폴더에 .env파일을 생성해서 먼저 카이카스 지갑 배포할 계정의 privateKey와 baobab테스트넷 url을 입력해준다.

KLAYTN_URL='https://api.baobab.klaytn.net:8651' //테스트넷
https://public-node-api.klaytnapi.com/v1/cypress// 메인넷

PRIVATE_KEY='배포할 계정 privateKey'

컴파일 후 배포하기 위해서는 프로젝트 루트 폴더에 있는 hardhat.config.ts 파일을 작성해줄 차례. 이곳에서 어떤 RPC주소에 배포할지 설정 해 줄수 있다.

import * as dotenv from "dotenv";

import { HardhatUserConfig, task } from "hardhat/config";
import "@nomiclabs/hardhat-etherscan";
import "@nomiclabs/hardhat-waffle";
import "@typechain/hardhat";
import "hardhat-gas-reporter";
import "solidity-coverage";

dotenv.config();

const config: HardhatUserConfig = {
  solidity: "0.8.9",
  networks: {
    klaytn: {
      url: process.env.KLAYTN_URL || "",
      accounts:
        process.env.PRIVATE_KEY !== undefined ? [process.env.PRIVATE_KEY] : [],
    },
  },
  gasReporter: {
    enabled: process.env.REPORT_GAS !== undefined,
    currency: "USD",
  },
  etherscan: {
    apiKey: process.env.ETHERSCAN_API_KEY,
  },
};

export default config;

클레이트은 gasPrice가 고정이므로 hardhat으로 배포할시에는 꼭 GasPrice를 적어줘야한다.

(고정이지만 자꾸만 바뀌는건 함정)

contract 배포

yarn hardhat run scripts/deploy.ts --network klaytn

정상적으로 잘 배포된것을 확인할 수 있다.

도움받은곳 : https://velog.io/@thyoondev/%ED%95%98%EB%93%9C%ED%96%87Hardhat%EC%97%90%EC%84%9C-%ED%81%B4%EB%A0%88%EC%9D%B4%ED%8A%BCKlaytn-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0

profile
코인 떡락한 놈

0개의 댓글